JSP + JavaBean + Servlet实现MVC设计模式



JSP + JavaBean + Servlet实现MVC设计模式

1、流程图:

2、代码清单

数据库脚本:

复制代码
 1 DROP TABLE IF EXISTS `user`;
 2 
 3 CREATE TABLE `user` (
 4   `userid` varchar(30) NOT NULL,
 5   `name` varchar(30) NOT NULL,
 6   `password` varchar(30) NOT NULL,
 7   PRIMARY KEY  (`userid`)
 8 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 9 
10 INSERT INTO `user` VALUES ('admin', 'administrator', 'admin');
复制代码

User 类:

 View Code

DatabaseConnection 类:

复制代码
 1 package com.shawn.mvcdemo.dbc;
 2 
 3 import java.sql.*;
 4 
 5 public class DatabaseConnection{
 6     private static final String DBDRIVER = "org.gjt.mm.mysql.Driver";    //数据库驱动
 7     private static final String DBURL = "jdbc:mysql://localhost:3306/mldn";    //数据库URL
 8     private static final String DBUSER = "root";    //用户名
 9     private static final String DBPASSWORD = "root";    //密码
10 
11     private Connection conn = null;
12 
13     public DatabaseConnection() throws Exception{
14         try{
15             Class.forName(DBDRIVER);
16             this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
17         } catch(Exception e){
18             throw e;
19         }
20     }
21 
22     public Connection getConnection(){
23         return this.conn;
24     }
25 
26     public void close() throws Exception{
27         if(this.conn != null){
28             try{
29                 this.conn.close();
30             } catch(Exception e){
31                 throw e;
32             }
33         }
34     }
35 
36     public static void main(String args[]){
37         try{
38             System.out.println(new DatabaseConnection().getConnection());
39         } catch(Exception e){
40             e.printStackTrace();
41         }
42     }
43 }
复制代码

IUserDAO 接口:

复制代码
1 package com.shawn.mvcdemo.dao;
2 
3 import com.shawn.mvcdemo.vo.User;
4 
5 public interface IUserDAO{
6     //现在完成的是登录验证,那么登录操作只有两种返回结果
7     public boolean findLogin(User user) throws Exception;
8 }
复制代码

UserDAOImpl 类:

复制代码


 1 package com.shawn.mvcdemo.dao.impl;
 2 
 3 import java.sql.*;
 4 
 5 import com.shawn.mvcdemo.vo.User;
 6 import com.shawn.mvcdemo.dbc.*;
 7 import com.shawn.mvcdemo.dao.*;
 8 
 9 public class UserDAOImpl implements IUserDAO{
10     private Connection conn = null;
11 
12     private PreparedStatement pstmt = null;
13 
14     public UserDAOImpl(Connection conn){
15         this.conn = conn;
16     }
17 
18     public boolean findLogin(User user) throws Exception{
19         boolean flag = false;
20         String sql = "select name from user where userid = ? and password = ?";
21         this.pstmt = this.conn.prepareStatement(sql);
22         this.pstmt.setString(1,user.getUserID());
23         this.pstmt.setString(2,user.getPassword());
24         ResultSet rs = this.pstmt.executeQuery();
25         if(rs.next()){
26             user.setName(rs.getString("name"));
27             flag = true;
28         }
29         this.pstmt.close();
30         return flag;
31     }
32 }
复制代码

UserDAOProxy 类:

复制代码
 1 package com.shawn.mvcdemo.dao.proxy;
 2 
 3 import java.sql.*;
 4 
 5 import com.shawn.mvcdemo.vo.User;
 6 import com.shawn.mvcdemo.dbc.*;
 7 import com.shawn.mvcdemo.dao.*;
 8 import com.shawn.mvcdemo.dao.impl.*;
 9 
10 public class UserDAOProxy implements IUserDAO{
11     private DatabaseConnection dbc = null;
12     private IUserDAO dao = null;
13 
14     public UserDAOProxy(){
15         try{
16             this.dbc = new DatabaseConnection();
17         } catch(Exception e){
18             e.printStackTrace();
19         }
20         this.dao = new UserDAOImpl(this.dbc.getConnection());
21     }
22 
23     public boolean findLogin(User user) throws Exception{
24         boolean flag = false;
25         try{
26             flag = this.dao.findLogin(user);    //调用真实主题,完成操作
27         } catch(Exception e){
28             throw e;
29         } finally{
30             this.dbc.close();
31         }
32         return flag;
33     }
34 
35 
36 }
复制代码

DAOFactory 类:

复制代码
 1 package com.shawn.mvcdemo.factory;
 2 
 3 import com.shawn.mvcdemo.dao.*;
 4 import com.shawn.mvcdemo.dao.proxy.*;
 5 
 6 public class DAOFactory{
 7     public static IUserDAO getIUserDAOInstance(){
 8         return new UserDAOProxy();
 9     }
10 }
复制代码

LoginServlet 类:

复制代码
 1 package com.shawn.mvcdemo.servlet;
 2 
 3 import java.io.*;
 4 import java.util.*;
 5 
 6 import javax.servlet.*;
 7 import javax.servlet.http.*;
 8 import com.shawn.mvcdemo.factory.*;
 9 import com.shawn.mvcdemo.vo.*;
10 
11 public class LoginServlet extends HttpServlet{
12 
13     public void doGet(HttpServletRequest req,HttpServletResponse resp)
14         throws ServletException,IOException{
15         String path = "login.jsp";
16         String userID = req.getParameter("userID");
17         String password = req.getParameter("password");
18         List<String> info = new ArrayList<String>();//收集错误信息
19         if(userID == null || "".equals(userID)){
20             info.add("用户id不能为空!");
21         }
22         if(password == null || "".equals(password)){
23             info.add("密码不能为空!");
24         }
25         if(info.size() == 0){//里面没有记录任何的错误
26             User user = new User();
27             user.setUserID(userID);
28             user.setPassword(password);
29             try{
30                 if(new DAOFactory().getIUserDAOInstance().findLogin(user)){
31                     info.add("用户登陆成功,欢迎" + user.getName() + "光临!");
32                     System.out.println(1);
33                 } else {
34                     info.add("用户登录失败,错误的用户名和密码!");
35                     System.out.println(2);
36                 }
37             }catch(Exception e){
38                 e.printStackTrace();
39             }
40         }
41         req.setAttribute("info",info);
42         req.getRequestDispatcher(path).forward(req,resp);
43     }
44 
45     public void doPost(HttpServletRequest req,HttpServletResponse resp)
46         throws ServletException,IOException{
47         this.doGet(req,resp);
48     }
49 
50 }
复制代码

login.jsp 页面:

复制代码
 1 <%@ page contentType="text/html" pageEncoding="utf-8" import="java.util.*"%>
 2 <html>
 3     <head>
 4         <title>www.mldnjava.cn, MLDN高端Java培训</title>
 5         <%
 6             request.setCharacterEncoding("utf-8");
 7         %>
 8         <%
 9             List<String> info = (ArrayList<String>)request.getAttribute("info");
10             String userID = request.getParameter("userID");
11             String password = request.getParameter("password");
12         %>
13         <script>
14             window.onload = function(){
15                 var objForm = document.getElementById("form1");
16 
17                 objForm.onsubmit = function(){
18                     if(!(/^\w{5,15}$/.test(this.userID.value))){
19                         alert("用户ID必须是5~15位!");
20                         this.userID.focus();
21                         return false;
22                     }
23                     
24                     if(!(/^\w{5,15}$/.test(this.password.value))){
25                         alert("密码必须是5~15位!");
26                         this.password.focus();
27                         return false;
28                     }
29                 }
30 
31             }
32             
33         </script>
34     </head>
35     
36     <body>
37         <form id="form1" action="login" method="post">
38             用户ID:<input type="text" name="userID" value="<%= (userID == null) ? "" : userID %>" /><br>
39             密&nbsp;&nbsp;码:<input type="password" name="password" value="<%= (password == null) ? "" : password %>" /><br>
40             <input type="submit" value="登录" />
41             <input type="reset" value="重置" />
42         </form>
43         <%
44             if(info != null){
45                 for(String str : info){
46         %>
47             <h3><%=str %></h3>
48         <%
49                 }
50             }
51         %>
52     </body>
53 </html>
复制代码

web.xml 配置:

复制代码
 1 <?xml version="1.0" encoding="ISO-8859-1"?>
 2 
 3 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
 4    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 6    version="2.5"> 
 7 
 8   <display-name>Hello World!</display-name>
 9   <welcome-file-list>
10     <welcome-file>main.html</welcome-file>
11   </welcome-file-list>
12 
13   <servlet>
14     <servlet-name>login</servlet-name>
15     <servlet-class>com.shawn.mvcdemo.servlet.LoginServlet</servlet-class>
16   </servlet>
17 
18   <servlet-mapping>
19     <servlet-name>login</servlet-name>
20     <url-pattern>/mvclogin/login</url-pattern>
21   </servlet-mapping>
22 </web-app>
复制代码