JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】
生活随笔
收集整理的這篇文章主要介紹了
JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- Java后端 學習路線 筆記匯總表【黑馬程序員】
目錄
24-BaseServlet抽取
Idea控制臺中文亂碼解決
BaseServlet.java
25-BaseServlet抽取_UserServlet&頁面路徑改寫
UserServlet.java
頁面路徑改寫
login.html
header.html
register.html
UserServiceImpl發送郵件
查看請求
24-BaseServlet抽取
?
優化servlet目的:減少Servlet的數量,現在是一個功能一個Servlet,將其優化為一個模塊一個Servlet,相當于在數據庫中的一張表對應一個Servlet,在Servlet中提供不同的方法,完成用戶的請求。
Idea控制臺中文亂碼解決
Idea控制臺中文亂碼解決:-Dfile.encoding=gb2312
BaseServlet.java
package cn.itcast.travel.web.servlet;import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;public class BaseServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//System.out.println("baseServlet的service方法被執行了...");//完成方法分發//1.獲取請求路徑String uri = req.getRequestURI(); // /travel/user/addSystem.out.println("請求uri:" + uri);// /travel/user/add//2.獲取方法名稱String methodName = uri.substring(uri.lastIndexOf('/') + 1);System.out.println("方法名稱:" + methodName);//3.獲取方法對象Method//誰調用我?我代表誰。System.out.println(this);//UserServlet的對象cn.itcast.travel.web.servlet.UserServlet@4903d97etry {//獲取方法Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);//4.執行方法//暴力反射//method.setAccessible(true);method.invoke(this, req, resp);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}} }25-BaseServlet抽取_UserServlet&頁面路徑改寫
UserServlet.java
將之前的Servlet實現的功能,抽取到UserServlet中的不同方法中實現,并且將UserService創建抽取到成員變量位置。
package cn.itcast.travel.web.servlet;import cn.itcast.travel.domain.ResultInfo; import cn.itcast.travel.domain.User; import cn.itcast.travel.service.UserService; import cn.itcast.travel.service.impl.UserServiceImpl; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.beanutils.BeanUtils;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Map;@WebServlet("/user/*") // /user/add /user/find public class UserServlet extends BaseServlet {//聲明UserService業務對象private UserService service = new UserServiceImpl();/*** 注冊功能** @param request* @param response* @throws ServletException* @throws IOException*/public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//驗證校驗String check = request.getParameter("check");//從sesion中獲取驗證碼HttpSession session = request.getSession();String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");session.removeAttribute("CHECKCODE_SERVER");//為了保證驗證碼只能使用一次//比較if (checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)) {//驗證碼錯誤ResultInfo info = new ResultInfo();//注冊失敗info.setFlag(false);info.setErrorMsg("驗證碼錯誤!");//將info對象序列化為jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(info);response.setContentType("application/json;charset=utf-8");response.getWriter().write(json);return;}//1.獲取數據Map<String, String[]> map = request.getParameterMap();//2.封裝對象User user = new User();try {BeanUtils.populate(user, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//3.調用service完成注冊//UserService service = new UserServiceImpl();boolean flag = service.regist(user);ResultInfo info = new ResultInfo();//4.響應結果if (flag) {//注冊成功info.setFlag(true);} else {//注冊失敗info.setFlag(false);info.setErrorMsg("注冊失敗!");}//將info對象序列化為jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(info);//將json數據寫回客戶端//設置content-typeresponse.setContentType("application/json;charset=utf-8");response.getWriter().write(json);}/*** 登錄功能** @param request* @param response* @throws ServletException* @throws IOException*/public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.獲取用戶名和密碼數據Map<String, String[]> map = request.getParameterMap();//2.封裝User對象User user = new User();try {BeanUtils.populate(user, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//3.調用Service查詢//UserService service = new UserServiceImpl();User u = service.login(user);ResultInfo info = new ResultInfo();//4.判斷用戶對象是否為nullif (u == null) {//用戶名密碼或錯誤info.setFlag(false);info.setErrorMsg("用戶名密碼或錯誤!");}//5.判斷用戶是否激活if (u != null && !"Y".equals(u.getStatus())) {//用戶尚未激活info.setFlag(false);info.setErrorMsg("您尚未激活,請激活!");}//6.判斷登錄成功if (u != null && "Y".equals(u.getStatus())) {request.getSession().setAttribute("user", u);//登錄成功標記//登錄成功info.setFlag(true);}//響應數據ObjectMapper mapper = new ObjectMapper();response.setContentType("application/json;charset=utf-8");mapper.writeValue(response.getOutputStream(), info);}/*** 查詢單個對象** @param request* @param response* @throws ServletException* @throws IOException*/public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//從session中獲取登錄用戶Object user = request.getSession().getAttribute("user");//將user寫回客戶端/* ObjectMapper mapper = new ObjectMapper();response.setContentType("application/json;charset=utf-8");mapper.writeValue(response.getOutputStream(),user);*/writeValue(user, response);}/*** 退出功能** @param request* @param response* @throws ServletException* @throws IOException*/public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.銷毀sessionrequest.getSession().invalidate();//2.跳轉登錄頁面response.sendRedirect(request.getContextPath() + "/login.html");}/*** 激活功能** @param request* @param response* @throws ServletException* @throws IOException*/public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.獲取激活碼String code = request.getParameter("code");if (code != null) {//2.調用service完成激活//UserService service = new UserServiceImpl();boolean flag = service.active(code);//3.判斷標記String msg = null;if (flag) {//激活成功msg = "激活成功,請<a href='login.html'>登錄</a>";} else {//激活失敗msg = "激活失敗,請聯系管理員!";}response.setContentType("text/html;charset=utf-8");response.getWriter().write(msg);}} }頁面路徑改寫
login.html
header.html
register.html
UserServiceImpl發送郵件
查看請求
總結
以上是生活随笔為你收集整理的JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础day05【函数(函数传
- 下一篇: Python基础day05【函数(局部变