1.login.jsp,登录页面效果图
2.login.jsp源码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login</title>
<!--引入bootstrap.css-->
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrap/css/bootstrap.css"/>
<!--引入myscss.css-->
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/myscss.css"/>
<!--引入jquery.js-->
<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/jquery-3.1.1.js"></script>
<!--bootstrap.js-->
<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/bootstrap.js"></script>
</head>
<body>
<!--公用头部-->
<!-- <div id="navhead"></div> -->
<%@include file="/foreground/common/head.jsp"%>
<!--显示错误信息-->
<c:if test="${!empty errorMsg }">
<!--可关闭警告框-->
<div class="text-center alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-label="close">
<span aria-hidden="true">×</span>
<strong>错误!</strong>${errorMsg }
</button>
</div>
</c:if>
<!--如果用户已经登录,则点击我的账户和新用户注册,跳转页面时钟是用户主页面-->
<c:if test="${!empty user}">
<jsp:forward page="/foreground/user/user.jsp"></jsp:forward>
</c:if>
<!--登录-->
<div class="container">
<div class="row">
<form class="form-horizontal" action="${pageContext.request.contextPath }/LoginServlet" method="post">
<h2 class="text-center">个人用户登录</h2>
<div class="form-group margintop">
<label class="col-md-4 control-label">用户名</label>
<div class="col-md-4">
<input type="text" id="username" name="name" class="form-control" placeholder="请输入用户名">
</div>
<div class="col-md-4"></div>
</div>
<div class="form-group">
<label class="col-md-4 control-label">密码</label>
<div class="col-md-4">
<input type="password" id="password" name="pass" class="form-control" placeholder="请输入密码">
</div>
<div class="col-md-4"></div>
</div>
<div class="form-group text-center">
<div class="col-md-4"></div>
<div class="col-md-4">
<label class="checkbox-inline control-label">
<input type="checkbox" name="autologin" value="yes">自动登录</label>
</div>
<div class="col-md-4"></div>
</div>
<div class="form-group text-center">
<div class="col-md-5"></div>
<div class="col-md-2">
<input type="submit" class="btn btn-default btn-block" value="登录">
</div>
<div class="col-md-5"></div>
</div>
<hr class="hr">
<div class="form-group text-center">
<div class="col-md-5"></div>
<div class="col-md-2">
<a class="btn btn-danger btn-block" href="register.jsp">注册新会员</a>
</div>
<div class="col-md-5"></div>
</div>
</form>
</div>
</div>
</body>
</html>
3.User.java,实体类
package com.chinasoft.entity;
import java.util.Date;
public class User {
private int id; // 用户编号
private String name; // 用户姓名
private String pass; // 用户密码
private String gender; // 用户性别
private String email; // 用户邮箱
private String phone; // 用户联系电话
private String introduce; // 用户介绍
private String activeCode; // 激活码
private String role; // 用户角色
private int activeState; // 用户状态
private Date registTime;// 注册时间
//构造方法
public User(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getIntroduce() {
return introduce;
}
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
public String getActiveCode() {
return activeCode;
}
public void setActiveCode(String activeCode) {
this.activeCode = activeCode;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public int getActiveState() {
return activeState;
}
public void setActiveState(int activeState) {
this.activeState = activeState;
}
public Date getRegistTime() {
return registTime;
}
public void setRegistTime(Date registTime) {
this.registTime = registTime;
}
@Override
public String toString() {
return "用户id"+this.id+","+"用户名"+this.name+","+"用户密码"+this.pass+","+"性别"+this.gender+
","+"邮箱"+this.email+","+"电话"+this.phone+","+"介绍"+this.introduce+","+"激活码"+this.activeCode
+","+"角色"+this.role+","+"用户状态"+this.activeState+","+"注册时间"+this.registTime;
}
}4.UserDao.java接口
package com.chinasoft.dao;
import java.sql.SQLException;
import com.chinasoft.entity.User;
public interface UserDao {
//添加一个用户
public void addUser(User user) throws SQLException;
//根据激活码查询指定用户
public User findUserByActiveCode(String activeCode) throws SQLException;
//根据激活码跟新用户的激活状态
public void updateActiveStateByActiveCode(String activeCode) throws SQLException;
//根据用户名和密码查询指定用户
public User findUserByUserNameAndPassword(String username, String password) throws SQLException;
//根据id查询指定用户
public User findUserById(String id) throws SQLException;
//修改指定用户信息
public User modifyUser(User user) throws SQLException;
//根据用户名查询数据库中该用户是否存在
public Boolean findUserByName(String name) throws SQLException;
//根据email查询数据库该用户是否存在
public Boolean findUserByEmail(String email) throws SQLException;
}5.ImplUserDao.java,接口实现类
package com.chinasoft.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import com.chinasoft.dao.UserDao;
import com.chinasoft.entity.User;
import com.chinasoft.util.C3P0Util;
import com.chinasoft.util.JdbcUtil;
public class ImplUserDao implements UserDao{
/**
* 添加一个用户
*/
@Override
public void addUser(User user) throws SQLException {
//1.先导入的数据库驱动程序
//2.获取数据库的连接对象
Connection conn = C3P0Util.getConnection();
//3.创建一个是stmtment对象,写sql语句
String sql = "INSERT INTO USER(NAME,pass,gender,email,phone,introduce) VALUES(?,?,?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getName());
pstmt.setString(2, user.getPass());
pstmt.setString(3, user.getGender());
pstmt.setString(4, user.getEmail());
pstmt.setString(5, user.getPhone());
pstmt.setString(6, user.getIntroduce());
//4.执行sql语句
pstmt.executeUpdate();
//5.关闭资源
C3P0Util.release(conn, pstmt, null);
}
/**
* 根据激活码查询指定用户
*/
@Override
public User findUserByActiveCode(String activeCode) throws SQLException {
// TODO Auto-generated method stub
return null;
}
/**
* 根据激活码跟新用户的激活状态
*/
@Override
public void updateActiveStateByActiveCode(String activeCode) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
qr.update("update user set activeState = ? where activeCode = ?", "1",activeCode);
}
/**
* 根据用户名和密码查询指定用户
*/
@Override
public User findUserByUserNameAndPassword(String username, String password) throws SQLException {
// 1.先导入的数据库驱动程序
// 2.获取数据库的连接对象
Connection conn = JdbcUtil.getConnection();
// 3.创建一个是stmtment对象,写sql语句
String sql = "select * from user where name = ? and pass = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
// 4.执行sql语句
ResultSet rs = pstmt.executeQuery();
// 5.取出查询的数据
User user = null;
if (rs.next()) {
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPass(rs.getString(3));
user.setGender(rs.getString(4));
user.setEmail(rs.getString(5));
user.setPhone(rs.getString(6));
user.setIntroduce(rs.getString(7));
user.setActiveCode(rs.getString(8));
user.setActiveState(rs.getInt(9));
user.setRole(rs.getString(10));
user.setRegistTime(rs.getDate(11));
}
// 5.关闭资源
JdbcUtil.CloseAll(conn, pstmt, null);
return user;
}
/**
* 根据id查询指定用户
*/
@Override
public User findUserById(String id) throws SQLException {
// 1.先导入的数据库驱动程序
// 2.获取数据库的连接对象
Connection conn = C3P0Util.getConnection();
// 3.创建一个是stmtment对象,写sql语句
String sql = "select * from user where id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
// 4.执行sql语句
ResultSet rs = pstmt.executeQuery();
// 5.取出查询的数据
User user = new User();
if (rs.next()) {
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPass(rs.getString(3));
user.setGender(rs.getString(4));
user.setEmail(rs.getString(5));
user.setPhone(rs.getString(6));
user.setIntroduce(rs.getString(7));
user.setActiveCode(rs.getString(8));
user.setActiveState(rs.getInt(9));
user.setRole(rs.getString(10));
user.setRegistTime(rs.getDate(11));
}
// 5.关闭资源
C3P0Util.release(conn, pstmt, rs);
return user;
}
/**
* 修改指定用户信息
*/
@Override
public User modifyUser(User user) throws SQLException {
// 1.先导入的数据库驱动程序
// 2.获取数据库的连接对象
Connection conn = JdbcUtil.getConnection();
// 3.创建一个是stmtment对象,写sql语句
String sql = "update user set pass =?, gender=?,phone = ? where id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, user.getPass());
pstmt.setString(2, user.getGender());
pstmt.setString(3, user.getPhone());
pstmt.setInt(4, user.getId());
// 4.执行sql语句
pstmt.executeUpdate();
// 5.关闭资源
JdbcUtil.CloseAll(conn, pstmt, null);
// 6.返回修改后的用户
User user2 = findUserById(Integer.toString(user.getId()));
return user2;
}
/**
* 根据用户名查询数据库中该用户是否存在
*/
@Override
public Boolean findUserByName(String name) throws SQLException {
// 1.先导入的数据库驱动程序
// 2.获取数据库的连接对象
Connection conn = JdbcUtil.getConnection();
// 3.创建一个是stmtment对象,写sql语句
String sql = "select * from user where name = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
// 4.执行sql语句
ResultSet rs = pstmt.executeQuery();
// 5.取出查询的数据
User user = null;
if (rs.next()) {
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPass(rs.getString(3));
user.setGender(rs.getString(4));
user.setEmail(rs.getString(5));
user.setPhone(rs.getString(6));
user.setIntroduce(rs.getString(7));
user.setActiveCode(rs.getString(8));
user.setActiveState(rs.getInt(9));
user.setRole(rs.getString(10));
user.setRegistTime(rs.getDate(11));
}
// 5.关闭资源
JdbcUtil.CloseAll(conn, pstmt, null);
if(user!=null){
return true;
}
else{
return false;
}
}
/**
* 根据email查询数据库该用户是否存在
*/
@Override
public Boolean findUserByEmail(String email) throws SQLException {
// 1.先导入的数据库驱动程序
// 2.获取数据库的连接对象
Connection conn = JdbcUtil.getConnection();
// 3.创建一个是stmtment对象,写sql语句
String sql = "select * from user where email = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, email);
// 4.执行sql语句
ResultSet rs = pstmt.executeQuery();
// 5.取出查询的数据
User user = null;
if (rs.next()) {
user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPass(rs.getString(3));
user.setGender(rs.getString(4));
user.setEmail(rs.getString(5));
user.setPhone(rs.getString(6));
user.setIntroduce(rs.getString(7));
user.setActiveCode(rs.getString(8));
user.setActiveState(rs.getInt(9));
user.setRole(rs.getString(10));
user.setRegistTime(rs.getDate(11));
}
// 5.关闭资源
JdbcUtil.CloseAll(conn, pstmt, null);
if(user!=null){
return true;
}
else{
return false;
}
}
}
6.LoginServlet.java实现登录功能
package com.chinasoft.servlet;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.chinasoft.dao.impl.ImplUserDao;
import com.chinasoft.entity.User;
/**
* @author jf
* 功能:实现用户的登录功能
* 1.获取从页面上用户输入的用户名和密码
* 2.通过findUserByName()方法,查询用户名和密码是否正确
* 3.正确,用户登录;错误,登录失败
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取页面上用户的输入信息
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String autologin = request.getParameter("autologin");
//2.到数据库验证用户信息是否正确
ImplUserDao impluserdao = new ImplUserDao();
try {
//找到用户保存用户
User user = impluserdao.findUserByUserNameAndPassword(name, pass);
if(user!=null){
//将user的信息存储到session中
request.getSession().setAttribute("user", user);
//判断是否勾选自动登录
if("autologin".equals(autologin)){
String msg = name + "&" + pass ;
Cookie cookie = new Cookie("autologin",msg);
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
}
request.getRequestDispatcher("/foreground/user/user.jsp").forward(request, response);
}
//没有找到用户存储没有找到用户信息
else{
request.setAttribute("errorMsg", "该用户不存在");
request.getRequestDispatcher("/foreground/login/login.jsp").forward(request, response);
}
} catch (SQLException e) {
//发送错误信息
request.setAttribute("errorMsg", e.getMessage());
request.getRequestDispatcher("/foreground/login/login.jsp").forward(request, response);
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
本文详细介绍了图书购买系统的登录功能实现,通过login.jsp页面设计、User实体类、UserDao接口及其实现类、LoginServlet来实现数据库查询验证用户登录。

5740

被折叠的 条评论
为什么被折叠?



