以Servlet为主体展开,由Servlet接收所有的客户端请求,然后根据请求调用相应的JavaBean,并将所有的显示结果交给JSP完成。通过MVC模式可以增加代码的弹性。
1、mysql数据库已经创建了一个user表,userid,name,password。
2、按照DAO设计标准,首先应该定义出VO类,VO类中的属性与表中的列一一对应。
package cn.edu.lyu.mvcdemo.vo;
public class User//定义VO类--User.java
{
private String userid;
private String name;
private String password;
public String getUserid()
{
return userid;
}
public void setUserid(String userid)
{
this.userid = userid;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection
{
private static final String DBDRIVER = "com.mysql.jdbc.Driver";
private static final String DBURL = "jdbc:mysql://localhost:3306/zlx";
private static final String DBUSER = "root";
private static final String DBPASSWORD = "123456";
private Connection conn = null;
public DatabaseConnection()
{
try {
Class.forName(DBDRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getConnection()
{
return this.conn;
}
public void close()
{
if(this.conn != null)
{
try {
this.conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package cn.edu.lyu.mvcdemo.dao;
import cn.edu.lyu.mvcdemo.vo.User;
public interface IUserDAO
{
public boolean findLogin(User user) throws Exception;
}
package cn.edu.lyu.mvcdemo.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cn.edu.lyu.mvcdemo.dao.IUserDAO;
import cn.edu.lyu.mvcdemo.vo.User;
public class UserDAOImpl implements IUserDAO//定义DAO实现类-UserDAOImpl.java
{
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;
String sql = "select name from user where userid=? and password=?";
this.pstmt = this.conn.prepareStatement(sql);
this.pstmt.setString(1, user.getUserid());
this.pstmt.setString(2, user.getPassword());
ResultSet rs = this.pstmt.executeQuery();
if(rs.next())
{
user.setName(rs.getString(1));//取得姓名
flag = true;//登录成功
}
if(this.pstmt != null)
{
this.pstmt.close();
}
return flag;
}
}
6、定义DAO代理操作类---UserDAOProxy.java
package cn.edu.lyu.mvcdemo.dao.proxy;
import cn.edu.lyu.mvcdemo.dao.IUserDAO;
import cn.edu.lyu.mvcdemo.dao.impl.UserDAOImpl;
import cn.edu.lyu.mvcdemo.dbc.DatabaseConnection;
import cn.edu.lyu.mvcdemo.vo.User;
public class UserDAOProxy implements IUserDAO//定义DAO代理操作类--UserDAOProxy.java
{
private DatabaseConnection dbc = null;
private IUserDAO dao = null;
public UserDAOProxy()
{
this.dbc = new DatabaseConnection();//实例化数据库连接
this.dao = new UserDAOImpl(this.dbc.getConnection());
}
public boolean findLogin(User user) throws Exception
{
boolean flag = false;
flag = this.dao.findLogin(user);//调用真实主题
this.dbc.close();
return flag;
}
}
7、定义工厂类,取得DAO实例---DAOFactory.java
package cn.edu.lyu.mvcdemo.factory;
import cn.edu.lyu.mvcdemo.dao.IUserDAO;
import cn.edu.lyu.mvcdemo.dao.proxy.UserDAOProxy;
public class DAOFactory//定义工厂类,取得DAO实例--DAOFactory.java
{
public static IUserDAO getIUserDAOInstance() //取得DAO实例
{
return new UserDAOProxy(); //返回代理实例
}
}
8、DAO的操作完成只是数据层的操作,现在需要编写Servlet,在Servlet中要接收客户端发来的输入数据,同时要调用DAO,并且要根据DAO的结果返回相应的信息。
定义Servlet---LoginServlet.java
package cn.edu.lyu.mvcdemo.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.edu.lyu.mvcdemo.factory.DAOFactory;
import cn.edu.lyu.mvcdemo.vo.User;
public class LoginServlet extends HttpServlet //定义Servlet--LoginServlet.java
{
public LoginServlet()
{
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String path = "login.jsp";
String userid = request.getParameter("userid");
String userpass = request.getParameter("userpass");
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();//实例化VO
user.setUserid(userid);
user.setPassword(userpass);
try {
if(DAOFactory.getIUserDAOInstance().findLogin(user))//验证通过
{
info.add("用户登录成功,欢迎"+user.getName()+"光临!");
}
else
{
info.add("用户登录失败,错误的用户名和密码!");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
request.setAttribute("info", info);//保存错误信息
request.getRequestDispatcher(path).forward(request, response);//跳转
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doGet(request, response);
}
}
9、登录页----login.jsp
<%@ page contentType = "text/html; charset = utf-8" import = "java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>张龙翔JAVA高端培训</title>
</head>
<script language = "JavaScript">
function validate(f)
{
if(!(/^\w{4,15}$/.test(f.userid.value)))
{
alert("用户ID必须是4~15位!") ;
f.userid.focus() ;
return false ;
}
if(!(/^\w{5,15}$/.test(f.userpass.value)))
{
alert("密码必须是5~15位!") ;
f.userpass.focus() ;
return false ;
}
return true;
}
</script>
<body>
<h2>用户登录程序</h2>
<%
List<String> info = (List<String>)request.getAttribute("info");
if(info != null)
{
Iterator<String> iter = info.iterator();
while(iter.hasNext()){
%>
<h4><%=iter.next()%></h4>
<%
}
}
%>
<form action = "LoginServlet" method = "post" onSubmit = "return validate(this)">
用户ID:<input type = "text" name = "userid"><br>
密 码:<input type = "password" name = "userpass"><br>
<input type = "submit" value = "登录">
<input type = "reset" value = "重置">
</form>
</body>
</html>
10、配置web.xml文件<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" version="3.0">
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>cn.edu.lyu.mvcdemo.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
</web-app>