自己写框架-MVC(三)
技术要点:
改造计划:
1.抽取通用servlet
2.完善formbean创建方式
1、将formbean的封装操作从action中移出(到servlet中),doService方法中接收formbean参数
1.1、LoginAction.java代码清单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package cn.jslfl.mvc.demo.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.jslfl.mvc.demo.form.LoginForm; public class LoginAction { public String doService(LoginForm formBean, HttpServletRequest req, HttpServletResponse resp){ //业务处理开始... boolean flag = false; if("aa".equals(formBean.getUserName()) && "bb".equals(formBean.getPassWord())){ flag = true; } //业务处理结束... String info = "<h1>登录" + (flag ? "成功" : "失败") + "!userName: " + formBean.getUserName()+ ", " + "password: " + formBean.getPassWord() + "</h1>"; req.setAttribute("info", info); return "/web/userInfo.jsp"; } } |
1.2、RegAction.java代码清单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package cn.jslfl.mvc.demo.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.jslfl.mvc.demo.form.RegForm; public class RegAction { public String doService(RegForm regBean, HttpServletRequest req, HttpServletResponse resp){ //业务处理开始... String msg = ""; if(regBean.getUserName() == null || "".equals(regBean.getUserName().trim()) ||regBean.getPassWord() == null || "".equals(regBean.getPassWord().trim()) || regBean.getPassWord2() == null || "".equals(regBean.getPassWord2().trim())){ msg = "数据不完整"; }else if(!regBean.getPassWord().equals(regBean.getPassWord2())){ msg = "两次密码不匹配"; }else{ msg = "成功"; } //业务处理结束... String info = "<h1>注册" + msg + "!userName: " + regBean.getUserName() + ", " + "password: " + regBean.getPassWord() + ", " + "password2: " + regBean.getPassWord2() +"</h1>"; req.setAttribute("info", info); return "/web/login.jsp"; } } |
2、抽取通用servlet,将LoginServletg与RegServlet中的业务移到通用ActionServlet中,删除LoginServletg.java、RegServlet.java
ActionServlet.java代码清单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package cn.jslfl.mvc.demo.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.jslfl.mvc.core.form.FormBeanUtil; import cn.jslfl.mvc.demo.action.LoginAction; import cn.jslfl.mvc.demo.action.RegAction; import cn.jslfl.mvc.demo.form.LoginForm; import cn.jslfl.mvc.demo.form.RegForm; public class ActionServlet extends HttpServlet{ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("GBK"); String reqPath = req.getServletPath(); System.out.println("=== ServletPath:" + reqPath + " ContextPath:" + req.getContextPath() ); String actionName = reqPath.substring(1, reqPath.lastIndexOf(".do"));//截取 "/login.do" -> "login" String returnPath = "/404.jsp"; if("login".equals(actionName)){ LoginForm formBean = (LoginForm)FormBeanUtil.packFormBean(req, "cn.jslfl.mvc.demo.form.LoginForm"); LoginAction action = new LoginAction(); returnPath = action.doService(formBean, req, resp); }else if("reg".equals(actionName)){ RegForm formBean = (RegForm)FormBeanUtil.packFormBean(req, "cn.jslfl.mvc.demo.form.RegForm"); RegAction action = new RegAction(); returnPath = action.doService(formBean, req, resp); } req.getRequestDispatcher(returnPath).forward(req, resp); } public void doGet(HttpServletRequest req, HttpServletResponse resp){ try { doPost(req, resp); } catch (Exception e) { e.printStackTrace(); } } } |
在servlet中封装formbean对象,并调用action.doService方法时传入action中。
3.修改web.xml中servlet配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>mvc_servlet_1</display-name> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>cn.jslfl.mvc.demo.servlet.ActionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> |
本节中login.jsp、reg.jsp、userInfo.jsp、LoginForm.java、RegForm.java未做修改,已提取通用ActionServlet做为前端请求处理转发器,下一节将完成一个简单的MVC框架。
Comments are currently closed.