• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

正在努力的小蒋同学

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

JavaWebServlet的优化方式

新手小白用Servlet做项目的时候会因为Servlet文件太多而导致罗辑混乱,所以我们需要优化代码,这里主要使用了反射的一个寻找类里面的方法的概念去做代码的优化。

首先我们看看我们的Servlet类,这个类把一些servlet的功能合并在一起了。

  1 package com.jgs.web.setlvet;
  2 
  3 import com.jgs.excption.UserException;
  4 import com.jgs.model.User;
  5 import com.jgs.service.UserService;
  6 import com.jgs.service.impl.UserServiceImpl;
  7 import org.apache.commons.beanutils.BeanUtils;
  8 
  9 import javax.servlet.ServletException;
 10 import javax.servlet.annotation.WebServlet;
 11 import javax.servlet.http.Cookie;
 12 import javax.servlet.http.HttpServletRequest;
 13 import javax.servlet.http.HttpServletResponse;
 14 import java.io.IOException;
 15 import java.util.Date;
 16 import java.util.UUID;
 17 
 18 19 /**
 20  * 继承BassServlet这个类,这样做只需要一个Userservlet就可以把操作用户的方法全部放在这个类里面
 21  */
23 @WebServlet("/user")
22 public class UserServlet extends BassServlet{
 24     //用户登入方法
 25     public void login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
 26         String username=request.getParameter("username");
 27         String password=request.getParameter("password");
 28         String remember=request.getParameter("remember");
 29         String autoLogin=request.getParameter("autoLogin");
 30         UserService us=new UserServiceImpl();
 31         try {
 32             User user= us.login(username,password);
 33             String path="/index.jsp";
 34             if(user.getRole().equals("管理员")){
 35                 path="/admin/products/list.jsp";
 36             }
 37             if("true".equals(remember)) {
 38                 Cookie ck1=new Cookie("username",username);
 39                 Cookie ck2=new Cookie("password",password);
 40                 ck1.setMaxAge(60*60*365);
 41                 ck2.setMaxAge(60*60*365);
 42                 response.addCookie(ck1);
 43                 response.addCookie(ck2);
 44             }else{
 45                 Cookie[] cookies=request.getCookies();
 46                 if(cookies != null){
 47                     for (Cookie c: cookies){
 48                         c.setMaxAge(0);
 49                         response.addCookie(c);
 50                     }
 51                 }
 52             }
 53             request.getSession().setAttribute("user",user);
 54             response.sendRedirect(request.getContextPath()+path);
 55         } catch (UserException e) {
 56             e.printStackTrace();
 57             request.setAttribute("login_err",e.getMessage());
 58             request.getRequestDispatcher("login.jsp").forward(request,response);
 59         }
 60     }
 61 
 62     /**
 63      * 用户注册的方法
 64      * @param request
 65      * @param response
 66      * @throws IOException
 67      * @throws ServletException
 68      */
 69     public void register(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
 70         User user = new User();
 71 
 72         String validataCode=request.getParameter("validataCode");
 73         System.out.println(validataCode);
 74         String sessionCode= (String) request.getSession().getAttribute("checkcode_session");
 75         System.out.println(sessionCode);
 76         if(!validataCode.equals(sessionCode)){
 77             request.setAttribute("code_err", "验证码不正确");
 78             request.getRequestDispatcher("register.jsp").forward(request, response);
 79             return;
 80         }
 81         try {
 82             BeanUtils.populate(user, request.getParameterMap());
 83             user.setActiveCode(UUID.randomUUID().toString());
 84             user.setRole("普通用户");
 85             user.setRegisterTime(new Date());
 86             System.out.println(user);
 87             //注册用户
 88             UserService us = new UserServiceImpl();
 89             us.registerUser(user);
 90             request.getRequestDispatcher("registersuccess.jsp").forward(request, response);
 91         } catch (UserException e) {
 92             e.printStackTrace();
 93             request.setAttribute("user_err", e.getMessage());
 94             request.getRequestDispatcher("register.jsp").forward(request, response);
 95         } catch (Exception e) {
 96             System.out.println("参数转模型失败");
 97             e.printStackTrace();
 98 
 99         }
100 
101     }
102 
103     /**
104      * 退出登入
105      * @param request
106      * @param response
107      * @throws IOException
108      */
109     public void exit(HttpServletRequest request, HttpServletResponse response) throws IOException {
110         request.getSession().removeAttribute("user");
111         response.sendRedirect(request.getContextPath()+"/index.jsp");
112     }
113 
114     //显示用户信息
115  public void myCount(HttpServletRequest request, HttpServletResponse response) throws IOException {
116      User user= (User) request.getSession().getAttribute("user");
117      if(user != null){
118          response.sendRedirect(request.getContextPath()+"/myAccount.jsp");
119      }else{
120          response.sendRedirect(request.getContextPath()+"/login.jsp");
121      }
122  }
123 }

这个UserServlet类继承的父类是我们自己写的,其中用到了反射的方法去调用这个类里面的方法。

 

 1  1 package com.jgs.web.setlvet;
 2  2 
 3  3 import javax.servlet.ServletException;
 4  4 import javax.servlet.http.HttpServlet;
 5  5 import javax.servlet.http.HttpServletRequest;
 6  6 import javax.servlet.http.HttpServletResponse;
 7  7 import java.io.IOException;
 8  8 import java.lang.reflect.InvocationTargetException;
 9  9 import java.lang.reflect.Method;
10 10 
11 11 public class BassServlet extends HttpServlet {
12 12     @Override
13 13     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
14 14         //接受从浏览器传过来的数据,用来判断应该调用什么方法
15 15         String action=request.getParameter("action");
16 16         //获取当前类的Class.因为后面有子类去继承这个父类,所以获取到的是子类的Class对象
17 17        Class clz=this.getClass();
18 18         try {
19 19             //用反射去找到我们要调用的方法,通过action和后面的两个属性去找到我们要调用的方法
20 20             Method method=clz.getMethod(action,HttpServletRequest.class,HttpServletResponse.class);
21 21             //找到方法以后用反射调用方法
22 22             method.invoke(this,request,response);
23 23         } catch (NoSuchMethodException e) {
24 24             e.printStackTrace();
25 25         } catch (IllegalAccessException e) {
26 26             e.printStackTrace();
27 27         } catch (InvocationTargetException e) {
28 28             e.printStackTrace();
29 29         }
30 30 
31 31     }
32 32 }

上面这段啊代码就是我们UserServlet类继承的一个父类的写法,

我们先来讲讲这个优化方法的一个思路

1、首先我们JSP依然要去访问我们的UserSerlvet,所以我们要给UserServlet这个类加上一个@WebServlet注解,如下图

 

 

2、然后是JSP文件里面的跳转连接也需要指定格式,因为我们是根据action(可以用其他单词替代)来判断的,所以我们的跳转格式为user?action=xx方法,如下图

 

3、我们就要把同一个模块的代码全部放进这个模块,

 

4、这个模块要继承父类,

 

5、优化完成

 

posted on 2020-05-13 17:13  正在努力的小蒋同学  阅读(292)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3