JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】
生活随笔
收集整理的這篇文章主要介紹了
JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- Java后端 學(xué)習(xí)路線 筆記匯總表【黑馬程序員】
目錄
24-BaseServlet抽取
Idea控制臺(tái)中文亂碼解決
BaseServlet.java
25-BaseServlet抽取_UserServlet&頁(yè)面路徑改寫(xiě)
UserServlet.java
頁(yè)面路徑改寫(xiě)
login.html
header.html
register.html
UserServiceImpl發(fā)送郵件
查看請(qǐng)求
24-BaseServlet抽取
?
優(yōu)化servlet目的:減少Servlet的數(shù)量,現(xiàn)在是一個(gè)功能一個(gè)Servlet,將其優(yōu)化為一個(gè)模塊一個(gè)Servlet,相當(dāng)于在數(shù)據(jù)庫(kù)中的一張表對(duì)應(yīng)一個(gè)Servlet,在Servlet中提供不同的方法,完成用戶(hù)的請(qǐng)求。
Idea控制臺(tái)中文亂碼解決
Idea控制臺(tái)中文亂碼解決:-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方法被執(zhí)行了...");//完成方法分發(fā)//1.獲取請(qǐng)求路徑String uri = req.getRequestURI(); // /travel/user/addSystem.out.println("請(qǐng)求uri:" + uri);// /travel/user/add//2.獲取方法名稱(chēng)String methodName = uri.substring(uri.lastIndexOf('/') + 1);System.out.println("方法名稱(chēng):" + methodName);//3.獲取方法對(duì)象Method//誰(shuí)調(diào)用我?我代表誰(shuí)。System.out.println(this);//UserServlet的對(duì)象cn.itcast.travel.web.servlet.UserServlet@4903d97etry {//獲取方法Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);//4.執(zhí)行方法//暴力反射//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&頁(yè)面路徑改寫(xiě)
UserServlet.java
將之前的Servlet實(shí)現(xiàn)的功能,抽取到UserServlet中的不同方法中實(shí)現(xiàn),并且將UserService創(chuàng)建抽取到成員變量位置。
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業(yè)務(wù)對(duì)象private UserService service = new UserServiceImpl();/*** 注冊(cè)功能** @param request* @param response* @throws ServletException* @throws IOException*/public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//驗(yàn)證校驗(yàn)String check = request.getParameter("check");//從sesion中獲取驗(yàn)證碼HttpSession session = request.getSession();String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");session.removeAttribute("CHECKCODE_SERVER");//為了保證驗(yàn)證碼只能使用一次//比較if (checkcode_server == null || !checkcode_server.equalsIgnoreCase(check)) {//驗(yàn)證碼錯(cuò)誤ResultInfo info = new ResultInfo();//注冊(cè)失敗info.setFlag(false);info.setErrorMsg("驗(yàn)證碼錯(cuò)誤!");//將info對(duì)象序列化為jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(info);response.setContentType("application/json;charset=utf-8");response.getWriter().write(json);return;}//1.獲取數(shù)據(jù)Map<String, String[]> map = request.getParameterMap();//2.封裝對(duì)象User user = new User();try {BeanUtils.populate(user, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//3.調(diào)用service完成注冊(cè)//UserService service = new UserServiceImpl();boolean flag = service.regist(user);ResultInfo info = new ResultInfo();//4.響應(yīng)結(jié)果if (flag) {//注冊(cè)成功info.setFlag(true);} else {//注冊(cè)失敗info.setFlag(false);info.setErrorMsg("注冊(cè)失敗!");}//將info對(duì)象序列化為jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(info);//將json數(shù)據(jù)寫(xiě)回客戶(hù)端//設(shè)置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.獲取用戶(hù)名和密碼數(shù)據(jù)Map<String, String[]> map = request.getParameterMap();//2.封裝User對(duì)象User user = new User();try {BeanUtils.populate(user, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//3.調(diào)用Service查詢(xún)//UserService service = new UserServiceImpl();User u = service.login(user);ResultInfo info = new ResultInfo();//4.判斷用戶(hù)對(duì)象是否為nullif (u == null) {//用戶(hù)名密碼或錯(cuò)誤info.setFlag(false);info.setErrorMsg("用戶(hù)名密碼或錯(cuò)誤!");}//5.判斷用戶(hù)是否激活if (u != null && !"Y".equals(u.getStatus())) {//用戶(hù)尚未激活info.setFlag(false);info.setErrorMsg("您尚未激活,請(qǐng)激活!");}//6.判斷登錄成功if (u != null && "Y".equals(u.getStatus())) {request.getSession().setAttribute("user", u);//登錄成功標(biāo)記//登錄成功info.setFlag(true);}//響應(yīng)數(shù)據(jù)ObjectMapper mapper = new ObjectMapper();response.setContentType("application/json;charset=utf-8");mapper.writeValue(response.getOutputStream(), info);}/*** 查詢(xún)單個(gè)對(duì)象** @param request* @param response* @throws ServletException* @throws IOException*/public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//從session中獲取登錄用戶(hù)Object user = request.getSession().getAttribute("user");//將user寫(xiě)回客戶(hù)端/* 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.銷(xiāo)毀sessionrequest.getSession().invalidate();//2.跳轉(zhuǎn)登錄頁(yè)面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.調(diào)用service完成激活//UserService service = new UserServiceImpl();boolean flag = service.active(code);//3.判斷標(biāo)記String msg = null;if (flag) {//激活成功msg = "激活成功,請(qǐng)<a href='login.html'>登錄</a>";} else {//激活失敗msg = "激活失敗,請(qǐng)聯(lián)系管理員!";}response.setContentType("text/html;charset=utf-8");response.getWriter().write(msg);}} }頁(yè)面路徑改寫(xiě)
login.html
header.html
register.html
UserServiceImpl發(fā)送郵件
查看請(qǐng)求
總結(jié)
以上是生活随笔為你收集整理的JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python基础day05【函数(函数传
- 下一篇: java美元兑换,(Java实现) 美元