Jslfl【软件开发技术笔记】

自己写框架-MVC(一)

通过简单的例子,介绍MVC框架基本原理

技术要点:
servlet

准备环境:
eclipse,jdk7,tomcat7

业务场景:
实现用户注册,登录功能

代码结构:
img1-1

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进行测试
访问登录页面,输入错误的用户名密码提交
img2-5-1
img2-5-2

输入正确的用户名密码aa/bb提交
img2-5-3
img2-5-4

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进行测试
访问注册页面,两次密码输入不一致提交
img3-5-1
img3-5-2

两次密码输入相同提交
img3-5-3
img3-5-4

本节已完成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.