系统介绍
1开发环境2系统功能3系统效果4系统结构及表5项目代码
5.0 三个工具类及web.xml文件jdbc配置文件5.1 登录5.2 注册(register.jsp)5.3 Bean5.4 注册登录验证的Servlet5.5 对应的DAO类5.6 拦截未登录用户的请求5.7 首页5.8 导航栏5.9 exit的servlet5.9 图书清单(分页查询)5.10 按名查询5.11 借阅管理5.12 账号管理5.13 root图书管理5.14 root用户管理
系统介绍这是本人第一次写的web项目,记录下来做个笔记,有点简陋,因经验不足及技术有限项目中有诸多bug及不足的地方请多包含。
1开发环境开发工具:Intellij IDEA2021
JDK版本:jdk1.8
mysql版本:5.7.14
前端:html、css、js、jsp
后端:java、Servlet
1.登录注册
2.图书的增删查
3.借书与还书
5.用户管理
6.用户注销
事先创建userinfo、rootuser、book如下:
其中图书的状态status代表是否被借阅(varchar类型)。
package com.example.LoginDem.utils;
import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static String user;
private static String password;
private static String url;
// 在静态代码块中获取配置文件信息
static {
try {
Properties properties = new Properties();
properties.load(new FileInputStream("F:\IDEA\project\LoginDemo2\src\main\resources\jdbc.properties"));
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
String driver = properties.getProperty("driver");
Class.forName(driver);
} catch (Exception e){
e.printStackTrace();
}
}
// 获取数据库连接
public static Connection getConnect() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
//释放数据库资源
public static void clean(ResultSet resultSet, Statement statement, Connection connection) throws SQLException {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null){
connection.close();
}
}
// 判断数据库中表是否为空(存在)
public static boolean isExists(String user) throws SQLException {
String userbook = user+"book";
Connection connect = DriverManager.getConnection(url,"root",password);
String sql = "show tables like '"+userbook+"'";
PreparedStatement ps = connect.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next()){
rs.close();
ps.close();
connect.close();
return true;
}
return false;
}
}
package com.example.LoginDem.utils;
import com.example.LoginDem.entity.Book;
import java.util.List;
public class Page {
// 总页数
private int totalPageCount;
// 页面大小,即每页显示记录条数
private int pageSize = 5;
// 记录总数
private int totalCount;
// 当前页码
private int currentPageNo = 1;
// 每页网站集合
private List BookList;
public int getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if (pageSize > 0)
this.pageSize = pageSize;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
if (totalCount > 0)
this.totalCount = totalCount;
// 计算总页数
this.totalPageCount = this.totalCount % pageSize == 0? (this.totalCount / pageSize) :(this.totalCount / pageSize + 1);
}
public int getCurrentPageNo() {
if (currentPageNo == 0)
return 0;
else return currentPageNo;
}
public void setCurrentPageNo(int currentPageNo) {
if (currentPageNo > 0)
this.currentPageNo = currentPageNo;
}
public List getBookList() {
return BookList;
}
public void setBookList(List bookList) {
this.BookList = bookList;
}
}
package com.example.LoginDem.utils;
import com.example.LoginDem.entity.User;
import java.util.List;
public class UserObject {
List userList;
public UserObject(List list) {
this.userList = list;
}
public List getUserList() {
return userList;
}
public void setUserList(List userList) {
this.userList = userList;
}
}
/login.jsp 5
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC user=root password=986836 driver=com.mysql.jdbc.Driver5.1 登录
login.jsp
<%@ page import="java.io.PrintWriter" %>
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/1/30
Time: 8:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
登录
5.2 注册(register.jsp)
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/1/30
Time: 13:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
注册
ajax:Asynchronous javascript and XML,异步的Javascript和XML。ajax不是一种新的编程语言,而是一种现有标准使用的新方法。ajax最大的优点是在不加载整个页面的条件下与服务器交互,进行部分页面的更新。使用jquery封装的使用方法如下:
$.ajax({
url:"请求路径",
type:"请求方式(默认'GET')",
data:{}, //请求参数(键值对)
success:function (data){}, //响应成功后的回调函数,data表示响应数据
dataType:"text"; //响应数据类型 text、json
});
这里注册页面,在注册用户名时,当输入框失去焦点后会异步与服务器交互,查看是否已经被注册。
5.3 Beanpackage com.example.LoginDem.entity;
public class User {
private String username;
private String password;
public User(){}
public User(String username, String password){
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.example.LoginDem.entity;
public class Book {
private String name;
private Integer price;
private Integer bookid;
private String author;
private String status; // 图书状态(false:未借出,true:已借)
public Book() {}
public Book(String name, Integer price, Integer bookid, String author, String status) {
this.name = name;
this.price = price;
this.bookid = bookid;
this.author = author;
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public Integer getBookid() {
return bookid;
}
public void setBookid(Integer bookid) {
this.bookid = bookid;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
5.4 注册登录验证的Servlet
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.UserDao;
import com.example.LoginDem.entity.User;
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 java.io.IOException;
import java.sql.SQLException;
@WebServlet("/login")
public class loginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String LoginUser = request.getParameter("v");
if ("普通用户登录".equals(LoginUser)) {
UserDao userDao = new UserDao();
User user = null;
try {
user = userDao.login(username, password);
} catch (SQLException e) {
e.printStackTrace();
}
if (user != null) {
request.getSession().setAttribute("user", user.getUsername());
request.getRequestDispatcher("/index.jsp").forward(request, response);
} else {
request.setAttribute("error", "用户名/账号密码错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}else{
UserDao userDao = new UserDao();
User user = null;
try {
user = userDao.rootLogin(username, password);
} catch (SQLException e) {
e.printStackTrace();
}
if (user != null) {
request.getSession().setAttribute("user", user.getUsername());
request.getRequestDispatcher("/root.jsp").forward(request, response);
} else {
request.setAttribute("error", "用户名/账号密码错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
}
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.UserDao;
import com.example.LoginDem.entity.User;
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 java.io.IOException;
import java.sql.SQLException;
@WebServlet("/register")
public class registerServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = new User(username,password);
UserDao userDao = new UserDao();
boolean b = false;
try {
b = userDao.register(user);
} catch (SQLException e) {
e.printStackTrace();
}
if (b){
req.setAttribute("info","注册成功!");
} else {
req.setAttribute("info","注册失败(用户名重复)!");
}
req.getRequestDispatcher("/register.jsp").forward(req,resp);
}
}
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.UserValidDao;
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 java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
@WebServlet("/UserValid")
public class UserValidServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//获取参数
String username = request.getParameter("username");
PrintWriter writer = response.getWriter();
UserValidDao userValidDao = new UserValidDao();
String data = "";
try {
if(userValidDao.userValid(username)){
data = "用户名已被注册,请重新输入";
}else if (!username.equals("")){
data = "用户名可注册";
}
writer.write(data);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
5.5 对应的DAO类
package com.example.LoginDem.dao;
import com.example.LoginDem.entity.User;
import com.example.LoginDem.utils.JDBCUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
//此方法用于在数据库中查询信息并与login.jsp表格中所填信息比较,若数据库中存在
//与表格所填数据一一对应相等,则登陆成功,否则登录失败
public User login(String username, String password) throws SQLException {
User user = new User();
Connection connect = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
connect = JDBCUtils.getConnect();
String sql = "select * from UserInfo where `name`=? and `password`=?";
ps = connect.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs = ps.executeQuery();
if (rs.next()){
user.setUsername(rs.getString("name"));
user.setPassword(rs.getString("password"));
} else {
user = null;
};
}catch (SQLException e){
e.printStackTrace();
}finally{
JDBCUtils.clean(rs,ps,connect);
}
return user;
}
public User rootLogin(String username, String password) throws SQLException {
User user = new User();
Connection connect = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
connect = JDBCUtils.getConnect();
String sql = "select * from rootuser where `name`=? and `password`=?";
ps = connect.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs = ps.executeQuery();
if (rs.next()){
user.setUsername(rs.getString("name"));
user.setPassword(rs.getString("password"));
} else {
user = null;
};
}catch (SQLException e){
e.printStackTrace();
}finally{
JDBCUtils.clean(rs,ps,connect);
}
return user;
}
//注册用户,向数据库中写入新用户的信息
public boolean register(User user) throws SQLException {
Connection connect = JDBCUtils.getConnect();
String sql = "insert into UserInfo values (?,?)";
PreparedStatement ps = connect.prepareStatement(sql);
ps.setString(1,user.getUsername());
ps.setString(2,user.getPassword());
int i = ps.executeUpdate();
JDBCUtils.clean(null,ps,connect);
return (i > 0);
}
// 查找数据库中所有用户
public List selectUser() throws SQLException {
Connection connect = JDBCUtils.getConnect();
String sql = "select * from userinfo";
Statement statement = connect.createStatement();
ResultSet rs = statement.executeQuery(sql);
List users = new ArrayList<>();
while(rs.next()){
User user = new User();
user.setUsername(rs.getString(1));
user.setPassword(rs.getString(2));
users.add(user);
}
return users;
}
}
package com.example.LoginDem.dao;
import com.example.LoginDem.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserValidDao {
public boolean userValid(String username) throws SQLException {
if ("root".equals(username))
return true;
Connection connect = JDBCUtils.getConnect();
String sql = "select * from userinfo where `name`=?";
PreparedStatement ps = connect.prepareStatement(sql);
ps.setString(1,username);
ResultSet rs = ps.executeQuery();
boolean isTure = rs.next();
JDBCUtils.clean(rs,ps,connect);
return isTure;
}
}
5.6 拦截未登录用户的请求
package com.example.LoginDem.Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter("
display: block;
text-decoration: none;
font-size: 18px;
color: #000000;
padding: 11px 20px;
}
li a:hover{
background-color: #555;
color: white;
}
ul{
position: fixed;
list-style-type: none;
padding: 0;
margin: 0;
width: 150px;
height: 100%;
background-color: #DDDDDD;
}
.Select, .ID{
background-color: rgba(0,0,0,.1);
font-size: 14px;
}


