• 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. }  

     

  • 相关阅读:
    计算时代之大数据-分类阅读时代
    从语言到库到框架,再到API,再到标记最后到DSL语言
    Angular指令1
    宇宙量子计算理论
    Angular实现瀑布流的库angular-deckgrid
    Markdown会干掉Html吗?
    基于Html5缓存的页面P2P技术可行性探讨
    一个艰难的决定
    CentOS7 安装 MariaDB-10.4.7
    MongoDB-4 GridFS 文件存储
  • 原文地址:https://www.cnblogs.com/jinpeigang/p/6822266.html
Copyright © 2020-2023  润新知