减少Servlet的数量,现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet,在Servlet中提供不同的方法,完成用户的请求。

注:Idea控制台中文乱码解决:-Dfile.encoding=gb2312
开始优化:
①BaseServlet的编写:
- public class BaseServlet extends HttpServlet {
-
-
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //System.out.println("baseServlet的service方法被执行了...");
-
- //完成方法分发
- //1.获取请求路径
- String uri = req.getRequestURI(); // /travel/user/add
- System.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@4903d97e
- try {
- //获取方法
- 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();
- }
-
-
- }
- }
-
②:UserServlet改写:
将之前的Servlet实现的功能,抽取到UserServlet中的不同方法中实现,并且将UserService创建抽取到成员变量位置
- @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对象序列化为json
- ObjectMapper mapper = new ObjectMapper();
- String json = mapper.writeValueAsString(info);
- response.setContentType("application/json;charset=utf-8");
- response.getWriter().write(json);
- return;
- }
-
- //1.获取数据
- Map
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对象序列化为json
- ObjectMapper mapper = new ObjectMapper();
- String json = mapper.writeValueAsString(info);
-
- //将json数据写回客户端
- //设置content-type
- response.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
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.判断用户对象是否为null
- if(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);
- }
-
- /**
- * 退出功能
- * @param request
- * @param response
- * @throws ServletException
- * @throws IOException
- */
- public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1.销毁session
- request.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 = "激活成功,请登录";
- }else{
- //激活失败
- msg = "激活失败,请联系管理员!";
- }
- response.setContentType("text/html;charset=utf-8");
- response.getWriter().write(msg);
- }
- }
- }
-
③页面路径的改写:
register.html:

login.html:
header.html:
UserServiceImpl发送邮件: