一: MVC简介:
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC模式的目的:实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:
二: MVC登陆程序流程图:
三:MVC登陆程序清单
四:具体类的设计(DAO+MVC)
模型类:
4.1: User类:
<span style="font-size:18px;">package shiyeqiang.vo; //value object public class User { //本程序定义了雇员类,以及一序列的setter、getter方法, private String userid; private String name; private String password; public void setUserid(String userid){ this.userid=userid; } public void setName(String name) { this.name=name; } public void setPassword(String password){ this.password=password; } public String getUserid(){ return this.userid; } public String getName(){ return this.name; } public String getPassword(){ return this.password; } } </span>
<span style="font-size:18px;">package shiyeqiang.dbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseConnection { // 该类主要是用于完成数据库的打开以及关闭操作 // 在构造方法完成打开,close()方法完成关闭,所有异常直接抛出,交给调用处 处理 private static final String DBDRIVER = "org.gjt.mm.mysql.Driver"; // 定义mysql中的数据库驱动程序 private static final String DBURL = "jdbc:mysql://localhost:3306/mldn"; // 定义数据库的连接地址,其中mldn为数据库的名称 private static final String DBUSER = "root"; // 定义数据库的连接用户名 private static final String DBPASS = "sqladmin"; // 定义数据库的连接密码 private Connection conn = null; // 数据库连接 public DatabaseConnection() throws Exception { // 在构造方法内,进行数据库的连接操作 try { Class.forName(DBDRIVER); // 加载驱动 conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);// 试图建立到给定数据库 } catch (Exception e) { // 为了方便,直接抛出Exception异常 throw e; } } public Connection getConnection() { // 取得数据库的连接 return this.conn; } public void close() throws SQLException { if (this.conn != null) { try { this.conn.close(); } catch (SQLException e) { throw e; } } } } </span>
<span style="font-size:18px;">package shiyeqiang.dao; import java.util.List; import shiyeqiang.vo.User; //导入雇员类所在的VO包 public interface IUserDAO { // 定义DAO操作的标准; // findById:表示根据员工编号查询,返回的是Emp对象 public boolean findLogin(User user) throws Exception; } </span>
<span style="font-size:18px;">package shiyeqiang.dao.impl; import java.sql.*; import shiyeqiang.vo.User; import shiyeqiang.dao.IUserDAO; //为真实的实现类,完成具体的登录验证 public class UserDAOImpl implements IUserDAO { private Connection conn=null; //定义数据库的连接操作 private PreparedStatement ps=null; //定义数据库的执行操作 public UserDAOImpl(Connection conn){ //在构造函数里面完成数据库的连接操作 this.conn=conn; } public boolean findLogin(User user) throws Exception{ boolean flag=false; try{ String sql="select name from user where userid=? and password=?"; this.ps=this.conn.prepareStatement( sql); this.ps.setString(1,user.getUserid()); this.ps.setString(2, user.getPassword()); ResultSet rs=this.ps.executeQuery();//执行查询操作 if(rs.next()){ flag=true; user.setName(rs.getString(1)); //将结果集中的数据取出来保存在user中 } }catch(Exception e){ throw e; }finally{ if(this.ps!=null){ try{ this.ps.close(); }catch(Exception e){ throw e; } } } return flag; } }</span>
<span style="font-size:18px;">package shiyeqiang.dao.proxy; import shiyeqiang.dao.*; import shiyeqiang.vo.*; import shiyeqiang.dao.impl.*; import shiyeqiang.dbc.*; public class UserDAOProxy implements IUserDAO{ //为代理类,调用真实主题类,并且负责数据库的打开以及关闭的操作 //并且代理类,以及真实主题的实现类,均是实现了相同的 //代理类的数据成员中有真实主题类 private IUserDAO dao=null; //真实主题实现类 //构造函数打开, //因为代理类还要负责数据库的打开以及关闭的操作 private DatabaseConnection dbc=null; public UserDAOProxy(){ try{ this.dbc=new DatabaseConnection(); }catch(Exception e){ e.printStackTrace(); } this.dao=new UserDAOImpl(this.dbc.getConnection()); } public boolean findLogin(User user) throws Exception{ boolean flag=false; try{ flag=this.dao.findLogin(user); }catch(Exception e){ throw e; }finally{ this.dbc.close(); } return flag; } } </span>
<span style="font-size:18px;">package shiyeqiang.factory; import shiyeqiang.dao.proxy.*; import shiyeqiang.dao.*; public class DAOFactory { // 取得DAO接口的实例化对象 public static IUserDAO getIUserDAOInstance() throws Exception { return new UserDAOProxy(); // 取得代理类的实例 } } </span>
<span style="font-size:18px;">package shiyeqiang.servlet; import java.util.*; import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import shiyeqiang.vo.User; import shiyeqiang.factory.*; import shiyeqiang.dao.proxy.*; public class LoginServlet extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ String path = "login.jsp" ; String userid = req.getParameter("userid") ; String userpass = req.getParameter("usepass") ; List<String> info = new ArrayList<String>() ; // 收集错误 if(userid==null || "".equals(userid)){ info.add("用户id不能为空!") ; } if(userpass==null || "".equals(userpass)){ info.add("密码不能为空!") ; } if(info.size()==0){ // 里面没有记录任何的错误 User user = new User() ; user.setUserid(userid) ; user.setPassword(userpass) ; try{ if(DAOFactory.getIUserDAOInstance().findLogin(user)){ info.add("用户登陆成功,欢迎" + user.getName() + "光临!") ; } else { info.add("用户登陆失败,错误的用户名和密码!") ; } }catch(Exception e){ e.printStackTrace() ; } } req.setAttribute("info",info) ; req.getRequestDispatcher(path).forward(req,resp) ; } public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ this.doGet(req,resp) ; } }</span>
<span style="font-size:18px;"><servlet> <servlet-name>login</servlet-name> <servlet-class>shiyeqiang.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login/LoginServlet</url-pattern> </servlet-mapping></span>4.8:login.jsp: 视图显示,界面显示
<span style="font-size:18px;"><%@page contentType="text/html" pageEncoding="GBK"%> <%@page import="java.util.*"%> <html> <body> <script language="javascript"> function validate(f){ if(!(/^\w{5,15}$/.test(f.userid.value))){ alert("用户ID必须是5~15位!") ; f.userid.focus() ; return false ; } if(!(/^\w{5,15}$/.test(f.userpass.value))){ alert("密码必须是5~15位!") ; f.userpass.focus() ; return false ; } } </script> <% request.setCharacterEncoding("GBK"); %> <% //取得设置属性的内容 List<String> info=(List<String>)request.getAttribute("info"); if(info!=null){ Iterator<String> iterator=info.iterator(); while(iterator.hasNext()){ String str=iterator.next(); %> <h1><%=str%></h1> <% } } %> <form action="LoginServlet" method="post" onSubmit="return validate(this)"> 用户名:<input type="text" name="userid"><br> 密; 码:<input type="password" name="usepass"><br> <input type="submit" value="登录"> <input type="reset" value="重置"> </form> </body> </html> </span>
原文:http://blog.csdn.net/shiyeqiangldh/article/details/27181623