MVC(Model -View-Controller)实例应用模式

MVC(Model -View-Controller)实例应用模式

以登录为例:

Model:User

  1. package com.keith.bean;  
  2.   
  3. public class TUser implements java.io.Serializable {  
  4.     private static final long serialVersionUID = 1L;  
  5.       
  6.     private Integer userid;  
  7.     private String userName;  
  8.     private String pwd;  
  9.   
  10.     public TUser() {  
  11.     }  
  12.   
  13.     public Integer getUserid() {  
  14.         return userid;  
  15.     }  
  16.   
  17.     public void setUserid(Integer userid) {  
  18.         this.userid = userid;  
  19.     }  
  20.   
  21.     public String getUserName() {  
  22.         return userName;  
  23.     }  
  24.   
  25.     public void setUserName(String userName) {  
  26.         this.userName = userName;  
  27.     }  
  28.   
  29.     public String getPwd() {  
  30.         return pwd;  
  31.     }  
  32.   
  33.     public void setPwd(String pwd) {  
  34.         this.pwd = pwd;  
  35.     }  
  36.   
  37. }  

 

 

 

 

数据库连接类:

  1. package com.keith.util;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.SQLException;  
  6.   
  7. public class DBConn {  
  8.     private static final String DBDRIVER = "com.mysql.jdbc.Driver";  
  9.     private static final String DBURL = "jdbc:mysql://127.0.0.1:3306/login";  
  10.     private static final String DBUSER = "root";  
  11.     private static final String DBPWD = "kejianjun";  
  12.     private Connection conn = null;  
  13.   
  14.     public DBConn() {  
  15.         try {  
  16.             Class.forName(DBDRIVER);  
  17.             conn = DriverManager.getConnection(DBURL, DBUSER, DBPWD);  
  18.         } catch (ClassNotFoundException e) {  
  19.             e.printStackTrace();  
  20.         } catch (SQLException e) {  
  21.             e.printStackTrace();  
  22.         }  
  23.   
  24.     }  
  25.       
  26.     public void close() throws Exception{  
  27.         if (this.conn != null) {  
  28.             try {  
  29.                 conn.close();  
  30.             } catch (Exception e) {  
  31.                 e.printStackTrace();  
  32.             }  
  33.               
  34.         }  
  35.     }  
  36.     public Connection getConn() {  
  37.         return conn;  
  38.     }  
  39.   
  40.     public void setConn(Connection conn) {  
  41.         this.conn = conn;  
  42.     }  
  43.   
  44. }  

 

View层:登录jsp页面

  1.  <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>My JSP 'index.jsp' starting page</title>  
  13.     <meta http-equiv="pragma" content="no-cache">  
  14.     <meta http-equiv="cache-control" content="no-cache">  
  15.     <meta http-equiv="expires" content="0">      
  16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17.     <meta http-equiv="description" content="This is my page">  
  18.     <!--  
  19.     <link rel="stylesheet" type="text/css" href="styles.css">  
  20.     -->  
  21.     <script type="text/javascript">  
  22.         function validate(f){  
  23.             if (!(/^w{4,15}$/.test(f.username.value))) {  
  24.                 alert("用户名必须是4~16位!");  
  25.                 f.username.focus();  
  26.                 return false;  
  27.             }  
  28.             if (!(/^w{4,15}$/.test(f.pwd.value))) {  
  29.                 alert("密码必须是4~15位!");  
  30.                 f.pwd.focus();  
  31.                 return false;  
  32.             }  
  33.             return true;  
  34.         }  
  35.     </script>  
  36.   </head>  
  37.     
  38.   <body>  
  39.   <%  
  40.     List<String> info = (List<String>)request.getAttribute("info");  
  41.     if(info != null){  
  42.         Iterator<String> iter = info.iterator();  
  43.         while(iter.hasNext()){  
  44.    %>  
  45.     <h3><font color="red"><%=iter.next() %></font></h3>   
  46.    <%}  
  47.    } %>  
  48.     <form action="login" method="post" onsubmit="return validate(this)" name="f">  
  49.         用户名:<input type="text" name="username"><br />  
  50.         密&nbsp;码:<input type="password" name="pwd"><br />  
  51.         <input type="submit" value="登陆">&nbsp;&nbsp;&nbsp;  
  52.         <input type="reset" value="取消">         
  53.     </form>  
  54.   </body>  
  55. </html>  

配置web.xml

  1. <servlet>  
  2.     <servlet-name>login</servlet-name>  
  3.     <servlet-class>com.keith.servlet.LoginServlet</servlet-class>  
  4. </servlet>    
  5. <servlet-mapping>  
  6.     <servlet-name>login</servlet-name>  
  7.     <url-pattern>/login</url-pattern>  
  8. </servlet-mapping>  
  9.   
  10. <servlet>  

Controller控制层  servlet

  1. package com.keith.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import com.keith.bean.TUser;  
  13. import com.keith.factory.DAOFactory;  
  14.   
  15. /** 
  16.  * 定义Sevlet 
  17.  *  
  18.  * @author T 
  19.  *  
  20.  */  
  21. public class LoginServlet extends HttpServlet {  
  22.     private static final long serialVersionUID = 1L;  
  23.   
  24.     @Override  
  25.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  26.             throws ServletException, IOException {  
  27.         this.doPost(req, resp);  
  28.     }  
  29.   
  30.     @Override  
  31.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  32.             throws ServletException, IOException {  
  33.         String sucPath = "main.jsp";  
  34.         String loginEroPath = "index.jsp";  
  35.         String username = req.getParameter("username");  
  36.         String pwd = req.getParameter("pwd");  
  37.         List<String> info = new ArrayList<String>();  
  38.         if (username == null || "".equals(username)) {  
  39.             info.add("用户名不能为空!");  
  40.         }  
  41.         if (pwd == null || "".equals(pwd)) {  
  42.             info.add("密码不能为空!");  
  43.         }  
  44.         //用户名密码通过验证  
  45.         if (info.size() == 0) {  
  46.             //实例化VO  
  47.             TUser user = new TUser();  
  48.             //设置username  
  49.             user.setUserName(username);  
  50.             //设置pwd  
  51.             user.setPwd(pwd);  
  52.             if (DAOFactory.getIUserDAOInstance().findLogin(user)) {  
  53.                 info.add("欢迎:" + user.getUserName());  
  54.                 //保存信息,进行跳转  
  55.                 req.setAttribute("info", info);  
  56.                 req.getRequestDispatcher(sucPath).forward(req, resp);  
  57.             } else {  
  58.                 info.add("用户信息错误!");  
  59.                 req.setAttribute("info", info);  
  60.                 req.getRequestDispatcher(loginEroPath).forward(req, resp);  
  61.             }  
  62.         }  
  63.     }  
  64.   
  65. }  

通过DAO工厂找到UserDAO的实例:这是DAOFactory

  1. package com.keith.factory;  
  2.   
  3. import com.keith.dao.IUserDAO;  
  4. import com.keith.dao.proxy.UserDAOProxy;  
  5.   
  6. /** 
  7.  * 定义工厂类,取得DAO实例 
  8.  * @author T 
  9.  * 
  10.  */  
  11. public class DAOFactory {  
  12.     /** 
  13.      * 取得DAO实例 
  14.      * @return 
  15.      */  
  16.     public static IUserDAO getIUserDAOInstance(){  
  17.         //返回代理实例  
  18.         return new UserDAOProxy();  
  19.     }  
  20. }  

 返回代理实例,找到userDAO的代理类:

Java代码  

  1. package com.keith.dao.proxy;  
  2.   
  3. import com.keith.bean.TUser;  
  4. import com.keith.dao.IUserDAO;  
  5. import com.keith.dao.UserDAOImpl;  
  6. import com.keith.util.DBConn;  
  7.   
  8. /** 
  9.  * DAO代理操作类 
  10.  *  
  11.  * @author T 
  12.  *  
  13.  */  
  14. public class UserDAOProxy implements IUserDAO {  
  15.     private DBConn dbc = null;  
  16.     private IUserDAO dao = null;  
  17.   
  18.     public UserDAOProxy() {  
  19.         //实例化数据库连接  
  20.         this.dbc = new DBConn();  
  21.         this.dao = new UserDAOImpl(this.dbc.getConn());  
  22.     }  
  23.   
  24.     /** 
  25.      * 代理登陆方法 
  26.      */  
  27.     public boolean findLogin(TUser user) {  
  28.         boolean flag = false;  
  29.         try {  
  30.             // 调用真实主题  
  31.             flag = this.dao.findLogin(user);  
  32.             this.dbc.close();  
  33.         } catch (Exception e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.         return flag;  
  37.     }  
  38.   
  39. }  

 找到UserDAOImpl的并执行它的findLogin()方法:

Java代码  

  1. package com.keith.dao;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7.   
  8. import com.keith.bean.TUser;  
  9.   
  10. public class UserDAOImpl implements IUserDAO {  
  11.     private Connection conn = null;  
  12.     private PreparedStatement pstm = null;  
  13.   
  14.     public UserDAOImpl(Connection conn) {  
  15.         this.conn = conn;  
  16.     }  
  17.   
  18.     /** 
  19.      * 登陆 
  20.      *  
  21.      * @throws SQLException 
  22.      */  
  23.     public boolean findLogin(TUser user) {  
  24.         boolean flag = false;  
  25.         try {  
  26.             String sql = "SELECT username,pwd FROM tuser WHERE username=? and pwd=?";  
  27.             this.pstm = this.conn.prepareStatement(sql);  
  28.             this.pstm.setString(1, user.getUserName());  
  29.             this.pstm.setString(2, user.getPwd());  
  30.             ResultSet rs = this.pstm.executeQuery();  
  31.             if (rs.next()) {  
  32.                 user.setUserName(rs.getString(1));  
  33.                 flag = true;  
  34.             }  
  35.         } catch (SQLException e) {  
  36.             e.printStackTrace();  
  37.         } finally {  
  38.             try {  
  39.                 if (this.pstm != null) {  
  40.                     this.pstm.close();  
  41.                 }  
  42.             } catch (SQLException e2) {  
  43.                 e2.printStackTrace();  
  44.             }  
  45.         }  
  46.         return flag;  
  47.     }  
  48.   
  49. }  

 实现了IUserDAO接口:

Java代码  

  1. package com.keith.dao;  
  2.   
  3. import java.sql.SQLException;  
  4.   
  5. import com.keith.bean.TUser;  
  6.   
  7. /** 
  8.  * userDao接口 
  9.  *  
  10.  * @author T 
  11.  *  
  12.  */  
  13. public interface IUserDAO {  
  14.     /** 
  15.      * 用户登录验证 
  16.      *  
  17.      * @param user 
  18.      * @return 
  19.      */  
  20.     public boolean findLogin(TUser user);  
  21. }  

 

原文地址:https://www.cnblogs.com/jinpeigang/p/6822266.html