java怎么对web优化_JavaWebServlet的优化方式

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

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

1 packagecom.jgs.web.setlvet;2

3 importcom.jgs.excption.UserException;4 importcom.jgs.model.User;5 importcom.jgs.service.UserService;6 importcom.jgs.service.impl.UserServiceImpl;7 importorg.apache.commons.beanutils.BeanUtils;8

9 importjavax.servlet.ServletException;10 importjavax.servlet.annotation.WebServlet;11 importjavax.servlet.http.Cookie;12 importjavax.servlet.http.HttpServletRequest;13 importjavax.servlet.http.HttpServletResponse;14 importjava.io.IOException;15 importjava.util.Date;16 importjava.util.UUID;17

1819 /**

20 * 继承BassServlet这个类,这样做只需要一个Userservlet就可以把操作用户的方法全部放在这个类里面21 */ 23 @WebServlet("/user")

22 public class UserServlet extendsBassServlet{

24 //用户登入方法

25 public void login(HttpServletRequest request, HttpServletResponse response) throwsIOException, 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=newUserServiceImpl();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 *@paramrequest65 *@paramresponse66 *@throwsIOException67 *@throwsServletException68 */

69 public void register(HttpServletRequest request, HttpServletResponse response) throwsIOException, ServletException {70 User user = newUser();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(newDate());86 System.out.println(user);87 //注册用户

88 UserService us = newUserServiceImpl();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 *@paramrequest106 *@paramresponse107 *@throwsIOException108 */

109 public void exit(HttpServletRequest request, HttpServletResponse response) throwsIOException {110 request.getSession().removeAttribute("user");111 response.sendRedirect(request.getContextPath()+"/index.jsp");112 }113

114 //显示用户信息

115 public void myCount(HttpServletRequest request, HttpServletResponse response) throwsIOException {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 packagecom.jgs.web.setlvet;2 2

3 3 importjavax.servlet.ServletException;4 4 importjavax.servlet.http.HttpServlet;5 5 importjavax.servlet.http.HttpServletRequest;6 6 importjavax.servlet.http.HttpServletResponse;7 7 importjava.io.IOException;8 8 importjava.lang.reflect.InvocationTargetException;9 9 importjava.lang.reflect.Method;10 10

11 11 public class BassServlet extendsHttpServlet {12 12@Override13 13 protected void service(HttpServletRequest request, HttpServletResponse response) throwsServletException, 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 24e.printStackTrace();25 25 } catch(IllegalAccessException e) {26 26e.printStackTrace();27 27 } catch(InvocationTargetException e) {28 28e.printStackTrace();29 29}30 30

31 31}32 32 }

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

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

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

24b1a891716f11723c258ec00b74d4cb.png

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

efde2a2f051753305705517808dc5827.png

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

36375f7a9b3911d0cfab592145a12fed.png

0357be55f2c9894b65b7c5ed0dd0d1db.png

4a632f06eef7f60c014a06cf4af9d1d0.png

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

eab72f87028db29503fc179afc7cf445.png

5、优化完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值