Java Web笔记:MVC设计模式实现用户登录

MVC是一个核心设计模式,可以使整个程序的输入、处理和输出分开。MVC设计模式被分为三层,模型层、控制层和显示层。

显示层:负责接收Servlet传递的内容,,调用JavaBean,将内容传递给用户。

控制层:负责所有的用户请求参数,判断请求参数是否合法,根据请求的类型调用JavaBean并且将结果输送给显示层。

模型层:完成一个独立的业务操作组件,一般以Javabean或者EJB的形式进行定义。

在整个的MVC模式中,用户提交请求时,会交给Servlet进行处理,Servlet会调用JavaBean,JavaBean进行操作后会把结果通过RequestDispatcher接口传递到JSP页面。

这些要请求的内容只在一次请求中有效,所以一般使用request属性范围传递。

下面用一个用户登录的实例展示MVC模型。

主要的业务流程如图:

首先创建VO类:User

package com.zzh.lomvc.vo;public class User {private String name;private String id;private String password;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}然后定义一个数据库操作类:DatabaseConnection

package com.zzh.lomvc.dbc;import java.sql.Connection;import java.sql.DriverManager;public class DatabaseConnection {public static final String DBDRIVER = "com.mysql.jdbc.Driver";public static final String DBURL = "jdbc:mysql://localhost:3306/test";public static final String DBUSER = "root";public static final String DBPASS = "zhengzehui";private Connection conn = null;public DatabaseConnection() throws Exception {try {Class.forName(DBDRIVER);this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);} catch (Exception e) {throw e;}}public Connection getConnection() {return this.conn;}public void close() throws Exception {if (this.conn != null) {try {this.conn.close();} catch (Exception e) {throw e;}}}}定义DAO接口:IUserDAO

package com.zzh.lomvc.dao;import com.zzh.lomvc.vo.User;public interface IUserDAO {public boolean findLogin(User user) throws Exception;}定义DAO实现类:UserDAOImpl

package com.zzh.lomvc.dao.impl;import java.sql.ResultSet;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;import com.zzh.lomvc.dao.IUserDAO;import com.zzh.lomvc.vo.User;public class UserDAOImpl implements IUserDAO {private Connection conn = null;private PreparedStatement pstmt = 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 id =? AND password =?";this.pstmt = (PreparedStatement) this.conn.prepareStatement(sql);this.pstmt.setString(1, user.getId());this.pstmt.setString(2, user.getPassword());ResultSet rs = this.pstmt.executeQuery();if (rs.next()) {user.setName(rs.getString(1));flag = true;}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();} finally {if (this.pstmt != null) {try {this.pstmt.close();} catch (Exception e2) {// TODO: handle exceptione2.printStackTrace();}}}return flag;}}定义DAO代理操作类:UserDAProxy

package com.zzh.lomvc.dao.proxy ;import java.sql.* ;import com.mysql.jdbc.Connection;import com.zzh.lomvc.dao.IUserDAO;import com.zzh.lomvc.dao.impl.UserDAOImpl;import com.zzh.lomvc.dbc.DatabaseConnection;import com.zzh.lomvc.vo.User;public class UserDAOProxy implements IUserDAO {private DatabaseConnection dbc = null ;private IUserDAO dao = null ;public UserDAOProxy(){try{this.dbc = new DatabaseConnection() ;}catch(Exception e){e.printStackTrace() ;}this.dao = new UserDAOImpl((Connection) 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 ;}} 定义工厂类取得DAO实例:DAOFactory

package com.zzh.lomvc.factory;import com.zzh.lomvc.dao.IUserDAO;import com.zzh.lomvc.dao.proxy.UserDAOProxy;public class DAOFactory {public static IUserDAO getIUserDAOInstance() {return new UserDAOProxy();}}定义Servlet:LoginServlet

package com.zzh.lomvc.servlet ;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.zzh.lomvc.factory.DAOFactory;import com.zzh.lomvc.vo.User;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{String path = "login.jsp" ;String id = req.getParameter("id") ;String userpass = req.getParameter("userpass") ;List<String> info = new ArrayList<String>() ;// 收集错误if(id==null || "".equals(id)){info.add("用户id不能为空!") ;}if(userpass==null || "".equals(userpass)){info.add("密码不能为空!") ;}if(info.size()==0){// 里面没有记录任何的错误User user = new User() ;user.setId(id) ;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) ;}}显示页面:login.jsp

如果困难是地上的荆棘,我们脱掉鞋子,光着脚笑笑,

Java Web笔记:MVC设计模式实现用户登录

相关文章:

你感兴趣的文章:

标签云: