一、登录页面 /jsp/login.jsp
<%@ page contentType="text/html; charset=GBK" import="java.util.*" %>
hsl
用户登录程序
<%
request.setCharacterEncoding("GBK"); // 设置编码
%>
<%
List info = (List)request.getAttribute("info"); //取得属性
if(info!=null){ // 判断是否有内容
Iterator iter = info.iterator();
while(iter.hasNext()){
%>
<%=iter.next()%>
<%
}
}
%>
login
hsl.mvc.servlet.LoginServlet
login
/jsp/LoginServlet
三、定义 Servlet---LoginServlet.java
package hsl.mvc.servlet;
import hsl.mvc.factory.DAOFactory;
import hsl.mvc.vo.User;
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;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = "login.jsp";
String userid = request.getParameter("userid"); //接收 userid 参数
String userpass = request.getParameter("userpass"); //接收 userpass 参数
List info = new ArrayList(); // 保存返回信息
if(userid==null || "".equals(userid)){ // 如果 userid 为 null
info.add("用户id不能为空!");
}
if(userpass==null || "".equals(userpass)){ // 如果 userpass 为 null
info.add("密码不能为空!");
}
if(info.size()==0){ // 用户名和密码验证通过
User user = new User(); // 实例化 VO
user.setUserid(userid); // 设置 userid
user.setPassword(userpass); // 设置 userpass
try {
if(DAOFactory.getIUserDAOInstance().findLogin(user)){
info.add("用户登录成功, 欢迎"+user.getName()+"光临!");
}else{
info.add("用户登录失败,错误的用户名或密码!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
request.setAttribute("info", info); // 保存错误信息
request.getRequestDispatcher(path).forward(request, response); // 跳转
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response); //doPost、doGet相互调用
}
}
四、定义工厂类,取得 DAO 实例----DAOFactory.java
package hsl.mvc.factory;
import hsl.mvc.dao.IUserDAO;
import hsl.mvc.dao.proxy.UserDAOProxy;
public class DAOFactory {
public static IUserDAO getIUserDAOInstance(){ // 取得 DAO 实例
return new UserDAOProxy(); // 返回代理实例
}
}
五、定义 DAO 代理操作类----UserDAOProxy.java
package hsl.mvc.dao.proxy;
import hsl.mvc.dao.IUserDAO;
import hsl.mvc.dao.UserDAOImpl;
import hsl.mvc.dbc.DatabaseConnection;
import hsl.mvc.vo.User;
public class UserDAOProxy implements IUserDAO {
private DatabaseConnection dbc = null; // 定义数据库实例 dbc
private IUserDAO dao = null; // 定义连接 dao
public UserDAOProxy(){ // 构造
try {
this.dbc = new DatabaseConnection(); // 实例化数据库连接 dbc
} catch (Exception e) {
e.printStackTrace();
}
this.dao = new UserDAOImpl(this.dbc.getConnection()); // 取得连接 dao
}
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 接口----IUserDAO.java
package hsl.mvc.dao;
import hsl.mvc.vo.User;
/**
* DAO 操作接口
*/
public interface IUserDAO {
/**
* 用户登录验证
* @param user
* @return 验证的操作结果
* @throws Exception
*/
public boolean findLogin(User user)throws Exception;
}
七、定义 DAO 实现类----UserDAOImpl.java
package hsl.mvc.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import hsl.mvc.dao.IUserDAO;
import hsl.mvc.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;
String sql = "select name from user where userid=? and password=?";
try {
this.pstmt = this.conn.prepareStatement(sql); // 实例化操作
this.pstmt.setString(1, user.getUserid()); // 设置 id
this.pstmt.setString(2, user.getPassword()); // 设置 password
ResultSet rs = this.pstmt.executeQuery(); // 取得查询结果
if (rs.next()) {
user.setName(rs.getString(1)); // 取得用户名
flag = true; // 登录成功
}
} catch (Exception e) {
throw e;
} finally {
if (this.pstmt != null) {
try {
this.pstmt.close(); // 关闭操作
} catch (Exception e) {
throw e;
}
}
}
return flag;
}
}
八、定义数据库操作类 ----DatabaseConnection.java
package hsl.mvc.dbc;
import java.sql.Connection;
import java.sql.DriverManager;
public class DatabaseConnection {
private static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
private static final String DBURL = "jdbc:mysql://localhost:3336/mvctest";
private static final String DBUSER = "root";
private static final String DBPASSWORD = "myoa888";
private Connection conn = null;
public DatabaseConnection() throws Exception {
try {
Class.forName(DBDRIVER); // 加载驱动程序
this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD); // 连接数据库
} 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;
}
}
}
}
九、 定义 VO 类 ----User.java
package hsl.mvc.vo;
public class User {
private String userid ; // 对应 userid 列
private String name ; // 对应 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;
}
}
十、数据库创建 ----mvctest (user)
/*============使用 mvctest 数据库=============*/
USE mvctest;
/*============删除 user 数据表=============*/
DROP TABLE IF EXISTS user;
/*============创建 user 数据表=============*/
CREATE TABLE user(
userid VARCHAR(30) PRIMARY KEY,
name VARCHAR(30) NOT NULL,
password VARCHAR(32) NOT NULL
);
/*============插入测试数据=============*/
INSERT INTO user(userid,name,password)VALUES('admin','管理员','admin');
十一、Tomcat 配置 server.xml (前边加入代码如下)
运行结果查看: