自己写框架-MVC(一)
通过简单的例子,介绍MVC框架基本原理
技术要点:
servlet
准备环境:
eclipse,jdk7,tomcat7
业务场景:
实现用户注册,登录功能
1、新建工程mvc_servlet_1
超级简单的jsp+servlet应用,后面在这基础上改造完善成mvc框架。
2、登陆功能
业务流程:访问登录页面login.jsp,提交登录表单、LoginServlet后台验证用户、跳转到userInfo.jsp页面,显示登录信息。
2.1、创建login.jsp登录表单页面、userInfo.jsp用户信息页面
WebContent/web/login.jsp代码清单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <%@ page language="java" contentType="text/html; UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Login...</title> </head> <body> <span>${info }</span> <form action="<%=request.getContextPath() %>/login.do" method="post"> <h3>请登录</h3> <p>用户:<input type="text" name="username" /></p> <p>密码:<input type="text" name="password" /></p> <p><input type="submit" value="提交"/></p> </form> </body> </html> |
WebContent/web/userInfo.jsp代码清单:
1 2 3 4 5 6 7 8 9 10 11 12 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>欢迎你...</title> </head> <body> <span>${info }</span> </body> </html> |
2.2、创建LoginForm.java,接收封装表单参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package cn.jslfl.mvc.demo.form; public class LoginForm { private String userName; private String passWord; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } } |
2.3、创建LoginServlet.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 | 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.demo.form.LoginForm; public class LoginServlet extends HttpServlet{ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("GBK"); LoginForm formBean = new LoginForm(); formBean.setUserName(req.getParameter("username")); formBean.setPassWord(req.getParameter("password")); //业务处理开始... 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); req.getRequestDispatcher("/web/userInfo.jsp").forward(req, resp); } public void doGet(HttpServletRequest req, HttpServletResponse resp){ try { doPost(req, resp); } catch (Exception e) { e.printStackTrace(); } } } |
2.4、web.xml中添加配置LoginServlet
1 2 3 4 5 6 7 8 | <servlet> <servlet-name>login</servlet-name> <servlet-class>cn.jslfl.mvc.demo.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping> |
2.5、发布到tomcat进行测试
访问登录页面,输入错误的用户名密码提交
3、注册功能
业务流程:访问注册页面reg.jsp,提交表单、RegServlet后台业务处理、跳转到登录页面login.jsp,显示注册信息。
3.1、创建WebContent/web/reg.jsp注册表单页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <%@ page language="java" contentType="text/html; UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Reg...</title> </head> <body> <span>${info }</span> <form action="<%=request.getContextPath() %>/reg.do" method="post"> <h3>请注册</h3> <p>用户:<input type="text" name="username" /></p> <p>密码:<input type="text" name="password" /></p> <p>密码2:<input type="text" name="password2" /></p> <p><input type="submit" value="提交"/></p> </form> </body> </html> |
3.2、创建RegForm.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 | package cn.jslfl.mvc.demo.form; public class RegForm { private String userName; private String passWord; private String passWord2; public String getPassWord2() { return passWord2; } public void setPassWord2(String passWord2) { this.passWord2 = passWord2; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } } |
3.3、创建RegServlet.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 46 47 48 49 50 51 52 | 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.demo.form.RegForm; public class RegServlet extends HttpServlet{ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("GBK"); String userName = req.getParameter("username"); String pwd = req.getParameter("password"); String pwd2 = req.getParameter("password2"); RegForm regBean = new RegForm(); regBean.setUserName(userName); regBean.setPassWord(pwd); regBean.setPassWord2(pwd2); //业务处理开始... 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(!pwd.equals(pwd2)){ msg = "两次密码不匹配"; }else{ msg = "成功"; } //业务处理结束... String info = "<h1>注册" + msg + "!userName: " + userName + ", " + "password: " + pwd + ", " + "password2: " + pwd2 +"</h1>"; req.setAttribute("info", info); req.getRequestDispatcher("/web/login.jsp").forward(req, resp); } public void doGet(HttpServletRequest req, HttpServletResponse resp){ try { doPost(req, resp); } catch (Exception e) { e.printStackTrace(); } } } |
3.4、web.xml中添加配置RegServlet
1 2 3 4 5 6 7 8 | <servlet> <servlet-name>reg</servlet-name> <servlet-class>cn.jslfl.mvc.demo.servlet.RegServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>reg</servlet-name> <url-pattern>/reg.do</url-pattern> </servlet-mapping> |
3.5、发布到tomcat进行测试
访问注册页面,两次密码输入不一致提交
本节已完成jsp+servlet技术来实现登录注册的简单业务,下一节中对其进行完善改造。
完整的web.xml代码清单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?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>login</servlet-name> <servlet-class>cn.jslfl.mvc.demo.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping> <servlet> <servlet-name>reg</servlet-name> <servlet-class>cn.jslfl.mvc.demo.servlet.RegServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>reg</servlet-name> <url-pattern>/reg.do</url-pattern> </servlet-mapping> </web-app> |
Comments are currently closed.