基于Servlet+jsp的图书管理系统
系统介绍
这是本人第一次写的web项目,记录下来做个笔记,有点简陋,因经验不足及技术有限项目中有诸多bug及不足的地方请多包含。
1开发环境
开发工具:Intellij IDEA2021
JDK版本:jdk1.8
mysql版本:5.7.14
前端:html、css、js、jsp
后端:java、Servlet
2系统功能
1.登录注册
2.图书的增删查
3.借书与还书
5.用户管理
6.用户注销
3系统效果
4系统结构及表
事先创建userinfo、rootuser、book如下:
其中图书的状态status代表是否被借阅(varchar类型)。
5项目代码
5.0 三个工具类及web.xml文件jdbc配置文件
package com.example.LoginDem.utils;
import java.io.FileInputStream;
import java.sql.*;
import java.util.Properties;
/**
* @author brett
* @date 2022-01-30 11:41:44
*
* 数据库连接驱动
* 释放资源
*/
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;
/**
* @author brett
* @date 2022-02-01 21:24:21
*
* 操作分页查询的工具类
*/
public class Page {
// 总页数
private int totalPageCount;
// 页面大小,即每页显示记录条数
private int pageSize = 5;
// 记录总数
private int totalCount;
// 当前页码
private int currentPageNo = 1;
// 每页网站集合
private List<Book> 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<Book> getBookList() {
return BookList;
}
public void setBookList(List<Book> bookList) {
this.BookList = bookList;
}
}
package com.example.LoginDem.utils;
import com.example.LoginDem.entity.User;
import java.util.List;
/**
* @author brett
* @date 2022-02-01 23:39:16
*/
public class UserObject {
List<User> userList;
public UserObject(List<User> list) {
this.userList = list;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
<session-config> <!-- 设置session的过期时间为5分钟(5*60s内没有对发送新的请求,该session过期) -->
<session-timeout>5</session-timeout>
</session-config>
</web-app>
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
user=root
password=986836
driver=com.mysql.jdbc.Driver
5.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" %>
<html>
<head>
<title>登录</title>
<style>
#Login-Form {
width: 300px;
height: 200px;
margin: 10% 40%;
}
</style>
</head>
<body>
<div id="Login-Form">
<form method="post" action="${pageContext.request.contextPath}/login" id="Form">
<input type="text" name="username" id="username" placeholder="请输入用户名:" onfocus="Fun2()"/>
<span id="error1" style="color: red;font-size: 10px"></span><br><br>
<input type="password" name="password" id="password" placeholder="请输入密码:" onfocus="Fun4()"/>
<span id="error2" style="color: red;font-size: 10px"></span><br><br>
<select id="userLogin" name="v">
<option selected="selected" value="普通用户登录">普通用户登录</option>
<option value="管理员登录">管理员登录</option>
</select><br><br>
<button type="button" onclick="Fun()">登录</button>
<button type="button" onclick="Fun3()">注册</button><br><br>
<span id="error" style="color:red; font-size: 10px">${error}</span>
</form>
</div>
<script type="text/javascript">
function Fun(){
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
var Form = document.getElementById("Form");
if (username === ''){
document.getElementById("error1").innerHTML="用户名不能为空!"
return;
}
if(password === ''){
document.getElementById("error2").innerHTML="密码不能为空!"
return;
}
Form.submit();
}
function Fun2(){
var username = document.getElementById("username").value;
if (username === ''){
document.getElementById("error").innerHTML="";
document.getElementById("error1").innerHTML="";
}
}
function Fun3(){
window.location.href="register.jsp";
}
function Fun4(){
const pwd = document.getElementById("password").value;
if (pwd.length === 0) {
document.getElementById("error2").innerHTML="";
}
}
</script>
</body>
</html>
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" %>
<html>
<head>
<title>注册</title>
<style>
#Register-Form {
width: 330px;
height: 200px;
margin: 10% 40%;
}
</style>
<script src="jquery-3.6.0.js"></script>
</head>
<body>
<div id="Register-Form">
<form method="post" action="${pageContext.request.contextPath}/register" id="Form">
<input type="text" name="username" id="username" placeholder="用户名:" onfocus="Fun2('username','error1')" onblur="Valid()"/>
<span id="error1" style="color: red;font-size: 10px"></span><br><br>
<input type="password" name="password" id="password1" placeholder="密码:" onfocus="Fun2('password1','error2')" />
<span id="error2" style="color: red;font-size: 10px"></span><br><br>
<input type="password" id="password2" placeholder="确认密码:" onfocus="Fun2('password2','error3')"/>
<span id="error3" style="color: red;font-size: 10px"></span><br><br>
<button type="button" onclick="Fun()">注册</button>
<button type="button" onclick="Fun3()">返回登录</button><br><br>
<span>${info}</span>
</form>
</div>
<script type="text/javascript">
function Fun(){
let username = document.getElementById("username").value;
const password1 = document.getElementById("password1").value;
let password2 = document.getElementById("password2").value;
if (username === ''){
document.getElementById("error1").innerHTML="用户名不能为空!";
return;
}
if (password1 === ''){
document.getElementById("error2").innerHTML="密码不能为空!";
return;
}
if (password1 !== password2){
document.getElementById("error3").innerHTML="密码不一致!";
return;
}
document.getElementById("Form").submit();
}
function Fun2(Id,Error){
let valid = document.getElementById(Id).value;
if (valid.length===0){
document.getElementById(Error).innerHTML="";
}
}
function Fun3(){
window.location.href="login.jsp";
}
function Valid(){
$.ajax({
url:"${pageContext.request.contextPath}/UserValid",
type:"post",
data:{
"username":$("#username").val()},
success:function (msg){
document.getElementById("error1").innerText=msg;
},
dataType:"text",
async:true
});
}
</script>
</body>
</html>
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 Bean
package com.example.LoginDem.entity;
/**
* @author brett
* @date 2022-01-30 11:33:17
*/
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;
/**
* @author brett
* @date 2022-02-01 21:02:18
*/
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;
/**
* @author brett
* @date 2022-01-30 08:07:27
*/
@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;
/**
* @author brett
* @date 2022-01-30 13:26:05
*/
@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;
/**
* @author brett
* @date 2022-02-01 17:14:59
*
* 使用ajax异步验证用户名
*/
@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;
/**
* @author brett
* @date 2022-01-30 12:02:20
*
* 与数据库进行交互的类
* 与数据库进行交互,实现了注册(向数据库中插入新的用户User)功能,
* 登录(访问数据库与表格中所填数据比较,若一致则登陆成功,否则登录失败)功能
*/
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<User> selectUser() throws SQLException {
Connection connect = JDBCUtils.getConnect();
String sql = "select * from userinfo";
Statement statement = connect.createStatement();
ResultSet rs = statement.executeQuery(sql);
List<User> 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;
/**
* @author brett
* @date 2022-02-01 17:19:13
*/
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;
/**
* @author brett
* @date 2022-01-30 08:24:56
*/
@WebFilter("/*")
public class FilterDemo implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("开始拦截···");
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
//获取请求的uri
String requestURI = request.getRequestURI();
if (requestURI.contains("login")||requestURI.contains("register")||requestURI.contains("UserValid")) {
//如果请求的路径包含login(登录),register(注册),UserValid异步验证时就放行
chain.doFilter(request,response);
} else {
//判断是否登录状态(未登录就拦截)
HttpSession session = request.getSession();
if (session == null || session.getAttribute("user") == null) {
// 如果不是登陆页面也没有session则跳转到登录页面
response.sendRedirect("/LoginDemo2/login.jsp");
} else {
chain.doFilter(request,response);
}
}
}
@Override
public void destroy() {
}
}
其中的注解 @WebFilter("/*") /*表示拦截所有请求。该注解也可以在web.xm文件中配置:
扫描二维码关注公众号,回复:
17361219 查看本文章
<filter>
<filter-name>拦截器的名字</filter-name>
<fliter-class>指定拦截器类的全限定名</filter-class>
</filter>
<filter-mapping> <!-- 拦截器映射 -->
<filter-name>拦截器的名字</filter-name>
<url-pattern>要拦截的路径</url-pattern>
<servlet-name>Filter拦截的Servlet名称</servlet-name>
</filter-mapping>
5.7 首页
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<style>
h2{
text-align: center;
}
</style>
</head>
<body>
<%@include file="head.jsp"%>
<%@include file="nav.jsp" %>
<h2><%= "登录成功!" %></h2><br/>
<h2>Hello ${user}</h2>
</body>
</html>
5.8 导航栏
head.jsp
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/1/31
Time: 9:21
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<style>
#HeadFirst{
height: 42px;
width: 100%;
background-color: #00000068;
}
#abc{
font-size: 27px;
color: whitesmoke;
margin-left: 3px;
}
#b{
height: 27px;
width: 100px;
color: white;
margin-top: 2px;
margin-left: 870px;
}
#exit{
height: 30px;
width: 50px;
float: right;
color: white;
margin-top: 6px;
margin-right: 2px;
background-color: lightskyblue;
border-radius: 5px;
}
</style>
</head>
<body>
<div id="HeadFirst">
<span id="abc">图书管理系统</span>
<span id="b">当前用户 ${user}</span>
<button id="exit" onclick="jump()">退出</button>
</div>
<script>
function jump(){
const e = document.createElement("a");
e.href = "exit";
document.body.appendChild(e);
e.click();
}
</script>
</body>
</html>
nav.jsp
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/1/31
Time: 11:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>导航栏</title>
<script src="jquery-3.6.0.js"></script>
<style>
li a, #SelectToggle,#IDManagement{
/*将内联元素转换为块级元素,便于padding设定*/
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;
}
</style>
</head>
<body>
<div id="nav">
<ul>
<li><a href="index.jsp">首页</a></li>
<li id="SelectToggle">图书查询</li>
<li class="Select"><a href="${pageContext.request.contextPath}/SelectBook">图书清单</a></li>
<li class="Select"><a href="${pageContext.request.contextPath}/SelectByName">按名查询</a></li>
<li><a href="${pageContext.request.contextPath}/SelectBorrowBook">借阅管理</a></li>
<li id="IDManagement">账号管理</li>
<li class="ID"><a href="${pageContext.request.contextPath}/changePassword.jsp">修改密码</a></li>
<li class="ID"><a id="A" onclick="isSure()">注销账号</a></li>
</ul>
</div>
<script type="text/javascript">
$(document).ready(function (){
$("#SelectToggle").click(function (){
$(".Select").slideToggle(500);
})
$("#IDManagement").click(function (){
$(".ID").slideToggle(500);
})
});
function isSure(){
if(confirm("确认注销?")){
window.location.href="${pageContext.request.contextPath}/Delete";
}
}
</script>
</body>
</html>
nav2.jsp
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/1/31
Time: 11:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>导航栏</title>
<script src="jquery-3.6.0.js"></script>
<style>
li a{
/*将内联元素转换为块级元素,便于padding设定*/
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;
}
</style>
</head>
<body>
<div id="nav">
<ul>
<li><a href="root.jsp">首页</a></li>
<li><a href="${pageContext.request.contextPath}/BookManager">图书管理</a></li>
<li><a href="${pageContext.request.contextPath}/SelectUser">用户管理</a></li>
</ul>
</div>
</body>
</html>
root.jsp
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/2/2
Time: 19:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>管理员页面</title>
<style>
h2{
text-align: center;
}
</style>
</head>
<body>
<%@include file="head.jsp" %>
<%@include file="nav2.jsp" %>
<h2><%= "登录成功!" %></h2><br/>
<h2>Hello 管理员 ${user}</h2>
</body>
</html>
5.9 exit的servlet
package com.example.LoginDem.Servlet;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* @author brett
* @date 2022-01-30 19:40:00
*/
@WebServlet("/exit")
public class exitServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
String username = (String)session.getAttribute("user");
if (username != null) {
session.removeAttribute("user"); // 删除用户对应的Session
}
// 请求转发到登录界面
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
5.9 图书清单(分页查询)
Pageselect.jsp
<%@ page import="com.example.LoginDem.utils.Page" %>
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/2/2
Time: 9:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>select</title>
<style>
#showbody {
position: absolute;
margin: 5% 30%;
}
a {
text-decoration: none;
}
</style>
</head>
<body>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="head.jsp"%>
<%@include file="nav.jsp"%>
<div id="showbody">
<%
Page pageObject = (Page) request.getAttribute("page");
out.print("<h1>当前页面:"+pageObject.getCurrentPageNo()+"</h1>");
request.setAttribute("booklist1",pageObject.getBookList());
%>
<c:if test="${!empty booklist1}">
<table align="center" width="500" border="2" style="border-collapse:collapse;">
<thead>
<caption>图书列表</caption>
<tr>
<td>BookId</td>
<td>Name</td>
<td>Price</td>
<td>Author</td>
<td>Status</td>
</tr>
</thead>
<tbody>
<c:forEach items="${booklist1}" var="book">
<tr>
<td>${book.bookid}</td>
<td>${book.name}</td>
<td>${book.price}</td>
<td>${book.author}</td>
<td>${book.status}</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
<br><br><br>
<%
for (int i=1;i<=pageObject.getTotalPageCount();i++){
%>
<a href="${pageContext.request.contextPath}/SelectBook?pageNo=<%=i%>"><%=i%> </a>
<%
}
%>
</div>
</body>
</html>
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.SelectBookDaoImpl;
import com.example.LoginDem.entity.Book;
import com.example.LoginDem.utils.Page;
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.util.List;
/*
* @author brett
* @date 2022-02-01 22:48:17
*/
@WebServlet("/SelectBook")
public class SelectBookServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
SelectBookDaoImpl selectBookDao = new SelectBookDaoImpl();
// 获取要查询的起始页面
String pageNo = request.getParameter("pageNo") != null?request.getParameter("pageNo"):"1";
int currentPageNo = Integer.parseInt(pageNo);
Page page = new Page();
page.setCurrentPageNo(currentPageNo);
page.setPageSize(5);
page.setTotalCount(selectBookDao.getTotalCount());
// 获取查询的图书列表
List<Book> list = selectBookDao.getPageBookList(page.getCurrentPageNo(),page.getPageSize());
page.setBookList(list);
// 封装数据
request.setAttribute("page",page);
// 请求转发
request.getRequestDispatcher("/Pageselect.jsp").forward(request,response);
}
}
package com.example.LoginDem.dao.Impl;
import com.example.LoginDem.entity.Book;
import java.util.List;
public interface SelectBookDao {
// 查询总条数
public int getTotalCount();
//根据起始下标和每页显示数量查询数据
public List<Book> getPageBookList(int pageNo, int pagesize);
}
package com.example.LoginDem.dao;
import com.example.LoginDem.dao.Impl.SelectBookDao;
import com.example.LoginDem.entity.Book;
import com.example.LoginDem.utils.JDBCUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author brett
* @date 2022-02-01 21:35:44
*
* 分页查询数据
*/
public class SelectBookDaoImpl implements SelectBookDao {
// 查询总条数
@Override
public int getTotalCount() {
int count = 0;
Connection connect;
try {
connect = JDBCUtils.getConnect();
String sql = "select count(bookid) from book"; // 统计表中的总行数
PreparedStatement ps = connect.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
rs.next();
count = rs.getInt(1);
JDBCUtils.clean(rs,ps,connect);
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
// 根据要查询的页数和每页展示数据的数量来查询数据
@Override
public List<Book> getPageBookList(int pageNo, int pagesize) {
PreparedStatement ps;
ResultSet rs;
List<Book> list = new ArrayList<>();
try {
Connection connect = JDBCUtils.getConnect();
String sql = "select * from book limit "+(pageNo - 1)*pagesize+","+pagesize;
// limit 3,2 表示从第4个开始查询两个记录
ps = connect.prepareStatement(sql);
System.out.println(sql);
rs = ps.executeQuery();
while (rs.next()){
Book book = new Book();
book.setBookid(rs.getInt(1));
book.setName(rs.getString(2));
book.setPrice(rs.getInt(3));
book.setAuthor(rs.getString(4));
book.setStatus(rs.getString(5));
list.add(book);
}
JDBCUtils.clean(rs,ps,connect);
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
}
5.10 按名查询
selectByName.jsp
<%@ page import="com.example.LoginDem.utils.Page" %>
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/2/2
Time: 12:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SelectByName</title>
<style>
#SelectByName{
position: absolute;
text-align: center;
margin-left: 400px;
margin-top: 50px;
}
#select{
border-radius: 5px;
background-color:lightskyblue;
color: white;
}
#showBody{
position: absolute;
margin: 15% 28%;
}
</style>
<script src="jquery-3.6.0.js"></script>
</head>
<body>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="head.jsp" %>
<%@include file="nav.jsp" %>
<div id="SelectByName">
<form method="post" action="${pageContext.request.contextPath}/SelectByName">
<span>请输入书名关键字查询:</span>
<input type="text" name="KeyWord" placeholder="关键字" />
<button id="select" type="submit">查询</button>
</form>
</div>
<%
Page pageObject = (Page) request.getAttribute("pageObject2");
if (pageObject != null){
request.setAttribute("booklist",pageObject.getBookList());
}
%>
<div id="showBody">
<c:if test="${!empty booklist}">
<table align="center" width="500" border="2" style="border-collapse:collapse;">
<thead>
<caption>图书列表</caption>
<tr>
<td>BookId</td>
<td>Name</td>
<td>Price</td>
<td>Author</td>
<td>Status</td>
<td>编辑</td>
</tr>
<tbody>
<c:forEach items="${booklist}" var="book">
<tr>
<td>${book.bookid}</td>
<td>${book.name}</td>
<td>${book.price}</td>
<td>${book.author}</td>
<td class="status">${book.status}</td>
<td><button type="button" class="btn" onclick="window.location.href='${pageContext.request.contextPath}/Borrow?id=${book.bookid}&name=${book.name}&price=${book.price}&author=${book.author}&event.returnValue=false'">借阅</button></td>
<%-- <td><a href="${pageContext.request.contextPath}/Borrow?id=${book.bookid}&name=${book.name}&price=${book.price}&author=${book.author}">借阅</a></td>--%>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
</div>
<div style="color: red;text-align: center;margin-top: 300px">${error2}</div>
</body>
<script>
$(document).ready(function (){
let status = document.getElementsByClassName("status");
let btn = document.getElementsByClassName("btn");
for (let i=0;i<status.length;i++){
if (status[i].textContent === "true"){
btn[i].innerHTML="已借阅";
$(btn[i]).attr("disabled","disabled"); //jquery禁用按钮
// $(btn[i]).removeAttr("disabled") //解除禁用
}
}
});
</script>
</html>
这里有个易错的问题,window.location.href=url? 后只能代一个参数,要加上event.returnValue=false才可以。
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.SelectByNameDao;
import com.example.LoginDem.entity.Book;
import com.example.LoginDem.utils.Page;
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.util.List;
/**
* @author brett
* @date 2022-02-02 12:28:08
*/
@WebServlet("/SelectByName")
public class SelectByNameServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// 设置编码方式
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String Key = request.getParameter("KeyWord");
if ("".equals(Key)){
request.getRequestDispatcher("/selectByName.jsp").forward(request,response);
}
SelectByNameDao selectByNameDao = new SelectByNameDao();
List<Book> books = selectByNameDao.SelectByName(Key);
if (books.isEmpty()){
request.setAttribute("error2","未开始查询或未查询到图书!");
} else {
Page page = new Page();
page.setBookList(books);
request.setAttribute("pageObject2",page);
}
request.getRequestDispatcher("/selectByName.jsp").forward(request,response);
}
}
package com.example.LoginDem.dao;
import com.example.LoginDem.entity.Book;
import com.example.LoginDem.utils.JDBCUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author brett
* @date 2022-02-02 15:05:02
*/
public class SelectByNameDao {
public List<Book> SelectByName(String key){
List<Book> books = new ArrayList<>();
Book book;
Connection connect;
PreparedStatement ps;
ResultSet rs;
String sql = "select * from book where bookname like '%"+key+"%'";
try {
connect = JDBCUtils.getConnect();
ps = connect.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
book = new Book();
book.setBookid(rs.getInt(1));
book.setName(rs.getString(2));
book.setPrice(rs.getInt(3));
book.setAuthor(rs.getString(4));
book.setStatus(rs.getString(5));
books.add(book);
}
}catch(SQLException e){
e.printStackTrace();
}
return books;
}
}
5.11 借阅管理
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.UserBookDao;
import com.example.LoginDem.entity.Book;
import com.example.LoginDem.utils.Page;
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;
import java.util.List;
/**
* @author brett
* @date 2022-02-02 10:21:39
*/
@WebServlet("/SelectBorrowBook")
public class SelectBorrowBookServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
UserBookDao userBook = new UserBookDao();
String user = (String) request.getSession().getAttribute("user");
try {
List<Book> books = userBook.resultBook(user);
Page page = new Page();
page.setBookList(books);
request.setAttribute("BorrowBook",page);
request.getRequestDispatcher("/borrow.jsp").forward(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
borrow.jsp
<%@ page import="com.example.LoginDem.utils.Page" %>
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/2/1
Time: 12:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>借阅管理</title>
<style>
#showBody{
position: absolute;
margin: 40px 28% 12%;
}
</style>
</head>
<body>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="head.jsp" %>
<%@include file="nav.jsp" %>
<%
Page pageObject = (Page) request.getAttribute("BorrowBook");
if (pageObject != null){
request.setAttribute("booklist",pageObject.getBookList());
}
%>
<div id="showBody">
<c:if test="${!empty booklist}">
<table align="center" width="500" border="2" style="border-collapse:collapse;">
<thead>
<caption>已借阅的书籍</caption>
<tr>
<td>id</td>
<td>Name</td>
<td>Price</td>
<td>Author</td>
<td>操作</td>
</tr>
<tbody>
<c:forEach items="${booklist}" var="book">
<tr>
<td>${book.bookid}</td>
<td>${book.name}</td>
<td>${book.price}</td>
<td>${book.author}</td>
<td><button type="button" onclick="window.location.href='${pageContext.request.contextPath}/ReturnBook?id=${book.bookid}&event.returnValue=false'">归还</button></td>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
</div>
</body>
</html>
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.ReturnBookDao;
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;
/**
* @author brett
* @date 2022-02-01 11:36:59
*/
@WebServlet("/ReturnBook")
public class ReturnBookServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 获取参数
int id = Integer.parseInt(request.getParameter("id"));
String user = (String) request.getSession().getAttribute("user");
ReturnBookDao returnbook = new ReturnBookDao();
try {
returnbook.returnBook(user,id);
request.getRequestDispatcher("/SelectBorrowBook").forward(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
package com.example.LoginDem.dao;
import com.example.LoginDem.entity.Book;
import com.example.LoginDem.utils.JDBCUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author brett
* @date 2022-02-02 12:51:30
*
* 每个用户借阅书籍表
*/
public class UserBookDao {
public void createTable(String user) throws SQLException {
String userbook = user + "book";
System.out.println(userbook);
try{
boolean flag = JDBCUtils.isExists(user);
Connection connect = JDBCUtils.getConnect();
if (!flag) {
System.out.println(flag);
String sql2 = "create table "+userbook+" (bookid int primary key," +
"bookname varchar(32) not null," +
"price int," +
"author varchar(32)" +
")charset=utf8;";
PreparedStatement ps = connect.prepareStatement(sql2);
ps.execute();
JDBCUtils.clean(null,ps,connect);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public void addBook(String user, Book book) throws SQLException {
Connection connect = JDBCUtils.getConnect();
String userbook = user + "book";
try{
String sql3 = "insert into "+userbook+" values(?,?,?,?);";
String sql4 = "update book set status='true' where bookid = ?";
PreparedStatement ps = connect.prepareStatement(sql3);
ps.setInt(1,book.getBookid());
ps.setString(2,book.getName());
ps.setInt(3,book.getPrice());
ps.setString(4,book.getAuthor());
connect.setAutoCommit(false); //开启事务
ps.executeUpdate();
PreparedStatement ps2 = connect.prepareStatement(sql4);
ps2.setInt(1,book.getBookid());
ps2.executeUpdate();
connect.commit(); //提交事务
ps.close();
ps2.close();
connect.close();
}catch(SQLException e){
connect.rollback();
e.printStackTrace();
}
}
public List<Book> resultBook(String user) throws SQLException {
String userbook = user + "book";
if (!JDBCUtils.isExists(user)){
createTable(user);
}
Connection connect = JDBCUtils.getConnect();
String sql = "select * from "+userbook;
PreparedStatement ps = connect.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
List<Book> books = new ArrayList<>();
while (rs.next()){
Book book = new Book();
book.setBookid(rs.getInt(1));
book.setName(rs.getString(2));
book.setPrice(rs.getInt(3));
book.setAuthor(rs.getString(4));
books.add(book);
}
return books;
}
}
5.12 账号管理
changePassword.jsp
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/2/1
Time: 12:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>修改密码</title>
<style>
#Form {
width: 400px;
height: 300px;
margin: 10% 40%;
}
</style>
</head>
<body>
<%@include file="head.jsp" %>
<%@include file="nav.jsp" %>
<div id="Form">
<form action="${pageContext.request.contextPath}/ChangePwd" id="Submit">
<span>输入原密码:</span><input id="old" type="password" name="OldPwd" onfocus="Fun2('old','errorOld')"/>
<span id="errorOld" style="color: red;font-size: 10px">${errorOld}</span><br><br>
<span>输入新密码:</span><input id="new1" type="password" name="NewPwd" onfocus="Fun2('new1','errorNew')"/>
<span id="errorNew" style="color: red;font-size: 10px"></span><br><br>
<span>确认新密码:</span><input id="new2" type="password" onfocus="Fun2('new2','errorNew2')"/>
<span id="errorNew2" style="color: red;font-size: 10px"></span><br><br>
<button type="button" id="btn" onclick="Fun()">提交</button>
</form>
</div>
</body>
<script>
function Fun(){
if(!confirm("确认修改密码?")){
window.location.href="index.jsp";
} else{
let old = document.getElementById("old").value;
let new1 = document.getElementById("new1").value;
let new2 = document.getElementById("new2").value;
if (old===''){
document.getElementById("errorOld").innerHTML="密码不能为空!";
return;
}
if (new1===''){
document.getElementById("errorNew").innerHTML="密码不能为空!";
return;
}
if (new1!==new2){
document.getElementById("errorNew2").innerHTML="密码不一致!";
return;
}
document.getElementById("Submit").submit();
}
}
function Fun2(id,errorId){
let Id = document.getElementById(id).value;
if (Id===''){
document.getElementById(errorId).innerHTML="";
}
}
</script>
</html>
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.ChangeDelUserDao;
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;
/**
* @author brett
* @date 2022-02-02 13:54:58
*
* 修改密码
*/
@WebServlet("/ChangePwd")
public class ChangePwdServlet 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 oldPwd = request.getParameter("OldPwd");
String newPwd = request.getParameter("NewPwd");
String user = (String) request.getSession().getAttribute("user");
ChangeDelUserDao changeUser = new ChangeDelUserDao();
try {
if (!changeUser.change(user,oldPwd,newPwd)){
request.setAttribute("errorOld","输入的原密码不正确!");
request.getRequestDispatcher("/changePassword.jsp").forward(request,response);
}else {
request.getSession().removeAttribute("user");
// response.sendRedirect("/login.jsp"); 错误,请求转发和重定向不能同时使用
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
package com.example.LoginDem.dao;
import com.example.LoginDem.utils.JDBCUtils;
import java.sql.*;
/**
* @author brett
* @date 2022-02-02 14:03:00
*/
public class ChangeDelUserDao {
//修改密码
public boolean change(String user,String oldPwd,String newPwd) throws SQLException {
Connection connect = JDBCUtils.getConnect();
String sql = "select * from userinfo where `name`=? and `password`=?";
PreparedStatement ps = connect.prepareStatement(sql);
ps.setString(1,user);
ps.setString(2,oldPwd);
ResultSet rs = ps.executeQuery();
while(rs.next()){
if (rs.getString(2).equals(oldPwd)){
//判断原密码是否正确
String sql2 = "update userinfo set `password`=? where `name`=?";
PreparedStatement ps2 = connect.prepareStatement(sql2);
ps2.setString(1,newPwd);
ps2.setString(2,user);
ps2.executeUpdate();
JDBCUtils.clean(rs,ps2,connect);
return true;
}
}
ps.close();
JDBCUtils.clean(rs,ps,connect);
return false;
}
// 注销用户(判断用户借阅表是否归还)
public void deleteUser(String user) throws SQLException {
Connection connect = JDBCUtils.getConnect();
String sql = "delete from userinfo where `name`=?";
PreparedStatement ps = connect.prepareStatement(sql);
ps.setString(1,user);
ps.executeUpdate();
JDBCUtils.clean(null,ps,connect);
}
}
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.ChangeDelUserDao;
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;
/**
* @author brett
* @date 2022-02-02 19:11:33
* 注销账号
*/
@WebServlet("/Delete")
public class DeleteServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
if (request.getParameter("userName")!=null){
//管理员删除用户
String username = request.getParameter("userName");
ChangeDelUserDao userDel = new ChangeDelUserDao();
try {
userDel.deleteUser(username);
request.getRequestDispatcher("/SelectUser").forward(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
else{
//用户自己注销
String user = (String) request.getSession().getAttribute("user");
ChangeDelUserDao changeDelUser = new ChangeDelUserDao();
try {
changeDelUser.deleteUser(user);
request.getRequestDispatcher("/login.jsp").forward(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
5.13 root图书管理
package com.example.LoginDem.Servlet;
import com.example.LoginDem.entity.Book;
import com.example.LoginDem.utils.Page;
import com.example.LoginDem.dao.SelectBookDaoImpl;
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.util.List;
/**
* @author brett
* @date 2022-02-01 21:02:07
*/
@WebServlet("/BookManager")
public class BookManagerServlet 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 pageNo = request.getParameter("pageNo") != null?request.getParameter("pageNo"):"1";
SelectBookDaoImpl selectBookDao = new SelectBookDaoImpl();
int currentPageNo = Integer.parseInt(pageNo);
Page page = new Page();
page.setCurrentPageNo(currentPageNo);
page.setPageSize(5);
page.setTotalCount(selectBookDao.getTotalCount());
List<Book> books = selectBookDao.getPageBookList(page.getCurrentPageNo(),page.getPageSize());
page.setBookList(books);
request.setAttribute("rootSelect",page);
request.getRequestDispatcher("/rootManager.jsp").forward(request,response);
}
}
rootManager.jsp
<%@ page import="com.example.LoginDem.utils.Page" %>
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/2/2
Time: 9:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>rootManager</title>
<style>
#showbody {
position: absolute;
margin: 5% 30%;
}
a {
text-decoration: none;
}
</style>
</head>
<body>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="head.jsp"%>
<%@include file="nav2.jsp"%>
<div id="showbody">
<%
Page pageObject = (Page) request.getAttribute("rootSelect");
out.print("<h1>当前页面:"+pageObject.getCurrentPageNo()+"</h1>");
request.setAttribute("booklist3",pageObject.getBookList());
%>
<c:if test="${!empty booklist3}">
<table align="center" width="500" border="2" style="border-collapse:collapse;">
<thead>
<caption>图书列表</caption>
<tr>
<td>BookId</td>
<td>Name</td>
<td>Price</td>
<td>Author</td>
<td>Status</td>
<td>操作</td>
</tr>
</thead>
<tbody>
<c:forEach items="${booklist3}" var="book">
<tr>
<td>${book.bookid}</td>
<td>${book.name}</td>
<td>${book.price}</td>
<td>${book.author}</td>
<td>${book.status}</td>
<td><button type="button" onclick="window.location.href='${pageContext.request.contextPath}/RootDelete?id=${book.bookid}'">删除</button></td>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
<br><br><br>
<%
for (int i=1;i<=pageObject.getTotalPageCount();i++){
%>
<a href="${pageContext.request.contextPath}/BookManager?pageNo=<%=i%>"><%=i%> </a>
<%
}
%>
<br><br>
<button onclick="window.location.href='${pageContext.request.contextPath}/addBook.jsp'">增加图书</button>
</div>
</body>
</html>
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.BookManagerDaoImpl;
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;
/**
* @author brett
* @date 2022-02-01 22:17:52
*/
@WebServlet("/RootDelete")
public class RootDeleteServlet 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 id = request.getParameter("id");
BookManagerDaoImpl bookManagerDao = new BookManagerDaoImpl();
try {
bookManagerDao.deleteBook(Integer.parseInt(id));
request.getRequestDispatcher("/BookManager").forward(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
package com.example.LoginDem.dao.Impl;
import com.example.LoginDem.entity.Book;
import java.sql.SQLException;
import java.util.List;
public interface BookManagerDao {
// 查找图书(使用分页查找)
// 增加书籍
public void addBook(Book book) throws SQLException;
// 删除数据
public void deleteBook(int bookid) throws SQLException;
}
package com.example.LoginDem.dao;
import com.example.LoginDem.dao.Impl.BookManagerDao;
import com.example.LoginDem.entity.Book;
import com.example.LoginDem.utils.JDBCUtils;
import java.sql.*;
/**
* @author brett
* @date 2022-02-01 21:22:00
*/
public class BookManagerDaoImpl implements BookManagerDao {
@Override
public void addBook(Book book) throws SQLException {
Connection connect = JDBCUtils.getConnect();
String sql = "insert into book values(null,?,?,?,'false')";
PreparedStatement ps = connect.prepareStatement(sql);
ps.setString(1,book.getName());
ps.setInt(2,book.getPrice());
ps.setString(3,book.getAuthor());
ps.executeUpdate();
JDBCUtils.clean(null,ps,connect);
}
@Override
public void deleteBook(int bookid) throws SQLException {
Connection connect = JDBCUtils.getConnect();
String sql = "delete from book where bookid=?";
PreparedStatement ps = connect.prepareStatement(sql);
ps.setInt(1,bookid);
ps.executeUpdate();
JDBCUtils.clean(null,ps,connect);
}
}
addBook.jsp
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/2/1
Time: 12:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>addBook</title>
<style>
#Form {
width: 400px;
height: 300px;
margin: 10% 40%;
}
</style>
</head>
<body>
<%@include file="head.jsp" %>
<%@include file="nav2.jsp" %>
<div id="Form">
<form action="${pageContext.request.contextPath}/AddBook">
<span>输入书名: </span><input type="text" name="bookname" />
<br><br>
<span>输入价格: </span><input type="text" name="price" />
<br><br>
<span>输入作者: </span><input type="text" name="author"/>
<br><br>
<button>提交</button>
</form>
</div>
</body>
</html>
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.BookManagerDaoImpl;
import com.example.LoginDem.entity.Book;
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;
/**
* @author brett
* @date 2022-02-01 22:47:46
*
* 增加书籍
*/
@WebServlet("/AddBook")
public class addBookServlet 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 bookName = request.getParameter("bookname");
int price = Integer.parseInt(request.getParameter("price"));
String author = request.getParameter("author");
Book book = new Book();
book.setName(bookName);
book.setPrice(price);
book.setAuthor(author);
BookManagerDaoImpl bookManagerDao = new BookManagerDaoImpl();
try {
bookManagerDao.addBook(book);
request.getRequestDispatcher("/BookManager").forward(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
5.14 root用户管理
package com.example.LoginDem.Servlet;
import com.example.LoginDem.dao.UserDao;
import com.example.LoginDem.entity.User;
import com.example.LoginDem.utils.UserObject;
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;
import java.util.List;
/**
* @author brett
* @date 2022-02-01 23:29:04
*/
@WebServlet("/SelectUser")
public class SelectUserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置编码方式
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
UserDao userDao = new UserDao();
try {
List<User> users = userDao.selectUser();
UserObject userObject = new UserObject(users);
request.setAttribute("userObject",userObject);
request.getRequestDispatcher("/userManager.jsp").forward(request,response);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
userManager.jsp
<%@ page import="com.example.LoginDem.utils.UserObject" %>
<%--
Created by IntelliJ IDEA.
User: brett
Date: 2022/2/2
Time: 12:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>userManager</title>
<style>
#showBody{
position: absolute;
margin: 40px 28% 12%;
}
</style>
</head>
<body>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="head.jsp" %>
<%@include file="nav2.jsp" %>
<%
UserObject userObject = (UserObject) request.getAttribute("userObject");
if (userObject != null){
request.setAttribute("userlist",userObject.getUserList());
}
%>
<div id="showBody">
<c:if test="${!empty userlist}">
<table align="center" width="500" border="2" style="border-collapse:collapse;">
<thead>
<caption>用户信息</caption>
<tr>
<td>Name</td>
<td>Password</td>
<td>操作</td>
</tr>
<tbody>
<c:forEach items="${userlist}" var="user">
<tr>
<td>${user.username}</td>
<td>${user.password}</td>
<td><button type="button" onclick="window.location.href='${pageContext.request.contextPath}/Delete?userName=${user.username}'">删除</button></td>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
</div>
</body>
</html>