图书管理系统【Servlet+HTML综合应用】

news2024/11/20 1:39:06

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:图书管理系统【Servlet+HTML综合应用】
更多内容点击👇
      ValidateCode验证码的使用详解(初学看完都会用)

【本文目录】

    • ⛳️ 项目需求
    • ⛳️ 覆盖知识
    • ⛳️ 开发思路
    • ⛳️ 开发步骤
      • 【1】项目配置
      • 【2】JDBC+Apache方法操作数据库
      • 【3】HTML+CSS+JS 实现页面编写
        • 1、用户注册
        • 2、用户登录
    • ⛳️ 项目源码分享

在这里插入图片描述

⛳️ 项目需求

  • 首先输入用户名和密码登陆系统,如若登录错误,调到注册界面注册用户,再跳转到登录界面去登陆,登陆成功后显示所有图书信息。
  • 登陆成功后,显示数据库存在的所有图书信息,已经添加图书,删除图书和修改图书的相关操作按钮。
  • 添加图书:进入增加图书的界面,会跳转到新的界面,添加图书界面,此界面可以添加新的图书,填写完毕后,提交数据,则跳转到显示所有图书的界面中去。
  • 修改图书:跟添加图书的逻辑差不多,唯一不同的是,修改图书会把你当下选择的图书信息带入到新跳转的修改图书的界面中去,去修改部分数据后提交数据,然后返回到显示所有图书的界面中。
  • 删除图书:点击删除按钮,会提示是否确定删除,点击确定则删除本界面中的当前数据,并从所有数据中删除这一条数据。

⛳️ 覆盖知识

  • java部分:程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、实用类、JDBC、三层架构Druid连接池、Apache的DBUtils使用、Servlet等。
  • 数据库部分:创建表、增删改查语句的书写等。
  • 前端部分:HTML、CSS、jQuery、JavaScript等。

⛳️ 开发思路

  • 明确需求
  • 编码顺序
    • 添加项目需要使用的各种jar包
    • HTML 页面表单的编写
    • Apache方法的DBUtils编写
    • 实体类的数据初始化(添加私有变量、有参/无参构造、get/set方法、toString() 方法重写)
    • 完成 用户和图书 的数据表创建
    • 完成 用户和图书 三层架构的搭建(dao层接口和实现类的编写、service层接口和实现类的编写、view层的Servlet类的编写)
  • 测试

⛳️ 开发步骤

【1】项目配置

1、用IDEA创建项目,File—>New—>Project,选择默认的new project即可,创建一个项目名称,点击Create完成创建。

在这里插入图片描述

2、然后鼠标右击项目Add Framework support,选择Web Application来添加Web框架;

在这里插入图片描述

3、在web目录下的WEB-INF上右单击,新建一个Directory目录,命名为lib;

在这里插入图片描述
然后把项目需要的jar包放在lib中:
在这里插入图片描述
IDEA创建Java web项目的详细步骤可以参考我的一篇博文:IDEA创建Java Web项目

【2】JDBC+Apache方法操作数据库

1、创建database.properties文件,用来配置注册驱动和数据库连接对象的相关数据。

driver=com.mysql.jdbc.Driver

url=jdbc\:mysql\://localhost\:3306/idea_database

username=root

password=huanghuang

initialSize=10

maxActive=30

maxIdle=5

maxWait=3000

2、创建数据表:

user 表

CREATE TABLE `user` (
  `uname` varchar(20) NOT NULL,
  `upassword` varchar(20) NOT NULL
)

book 表

CREATE DATABASE IF NOT EXISTS `java221804`;
CREATE TABLE IF NOT EXISTS book(
	`name` VARCHAR(20),
	`state` INT,
	`date` INT,
	`count` INT
);

3、创建工具目录,存放工具类

DBUtils.java

package utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.sql.DataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

public class DBUtils {

	private static DruidDataSource druidDataSource;

	static {
		Properties properties = new Properties();

		try {
			InputStream is = DBUtils.class
					.getResourceAsStream("/database.properties");
			properties.load(is);
			druidDataSource = (DruidDataSource) DruidDataSourceFactory
					.createDataSource(properties);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static DataSource getDataSource(){
		return druidDataSource;
	}

}

4、创建实体类

User类

package cn.lqgx.entity;

public class User {
    private String uname;
    private String upassword;

    public User() {
    }

    public User(String uname, String upassword) {
        this.uname = uname;
        this.upassword = upassword;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpassword() {
        return upassword;
    }

    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }

    @Override
    public String toString() {
        return "User{" + "uname='" + uname + '\'' + ", upassword='" + upassword + '\'' + '}';
    }
}

Book类

package entity;

import java.util.Date;

public class Student {

	private int sid;
	private String sname;
	private int sage;
	private String ssex;
	private String saddress;
	private String sphoneNum;

	public Student() {
		super();
	}

	public Student(int sid, String sname, int sage, String ssex, String saddress, String sphoneNum) {
		this.sid = sid;
		this.sname = sname;
		this.sage = sage;
		this.ssex = ssex;
		this.saddress = saddress;
		this.sphoneNum = sphoneNum;
	}

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public int getSage() {
		return sage;
	}

	public void setSage(int sage) {
		this.sage = sage;
	}

	public String getSsex() {
		return ssex;
	}

	public void setSsex(String ssex) {
		this.ssex = ssex;
	}

	public String getSaddress() {
		return saddress;
	}

	public void setSaddress(String saddress) {
		this.saddress = saddress;
	}

	public String getSphoneNum() {
		return sphoneNum;
	}

	public void setSphoneNum(String sphoneNum) {
		this.sphoneNum = sphoneNum;
	}

	@Override
	public String toString() {
		return "Student{" +
				"sid=" + sid +
				", sname='" + sname + '\'' +
				", sage=" + sage +
				", ssex='" + ssex + '\'' +
				", saddress='" + saddress + '\'' +
				", sphoneNum='" + sphoneNum + '\'' +
				'}';
	}
}

5、创建数据访问层DAO层的接口

UserDao接口

package cn.lqgx.dao;

import cn.lqgx.entity.User;

import java.util.List;

public interface UserDao {
    //增
    int insert(User user);

    //删
    int delete(User user);

    //改
    int update(User user);

    //查一个
    User selectOne(User user);

    //查全部
    List<User> selectAll();

}

BookDao接口

package cn.lqgx.dao;

import cn.lqgx.entity.Book;

import java.util.List;

public interface BookDao {
    //增
    int insert(Book book);

    //删
    int delete(int bid);

    //改
    int update(Book book);

    //查一个
    Book selectById(int bid);
    Book selectByIsbn(String isbn);

    //查全部
    List<Book> selectAll();
}

6、创建数据访问层DAO层接口的实现类

UserDaoImpl实现类

package cn.lqgx.dao.Impl;

import cn.lqgx.dao.UserDao;
import cn.lqgx.entity.User;
import cn.lqgx.utils.DBUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

public class UserDaoImpl implements UserDao {
    QueryRunner queryRunner=new QueryRunner(DBUtils.getDataSource());
    @Override
    public int insert(User user) {
        String sql="INSERT INTO `user`(`uname`,`upassword`) VALUES(?,?);";
        Object[] args={user.getUname(),user.getUpassword()};
        try {
            return queryRunner.update(sql,args);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public int delete(User user) {
        String sql = "delete from user where uname=? and upassword=?;";
        Object[] args={user.getUname(),user.getUpassword()};
        try {
            return queryRunner.update(sql, args);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public int update(User user) {
        String sql="update `user` set `upassword`=? where uname=?;";
        Object[] args={user.getUpassword(),user.getUname()};
        try {
            return queryRunner.update(sql,args);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public User selectOne(User user) {
        String sql = "select * from user where uname=? and upassword=?;";
        Object[] args={user.getUname(),user.getUpassword()};
        try {
            return queryRunner.query(sql, new BeanHandler<User>(
                    User.class), args);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public List<User> selectAll() {
        String sql = "select * from user;";
        try {
            return queryRunner.query(sql, new BeanListHandler<User>(
                    User.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

BookDaoImpl实现类

package cn.lqgx.dao.Impl;

import cn.lqgx.dao.BookDao;
import cn.lqgx.entity.Book;
import cn.lqgx.utils.DBUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

public class BookDaoImpl implements BookDao {
    QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());

    @Override
    public int insert(Book book) {
        String sql = "INSERT INTO `book`(`isbn`,`name`,`author`,`press`,`price`,`classification`) VALUES(?,?,?,?,?,?);";
        Object[] args = {book.getIsbn(), book.getName(), book.getAuthor(),
                book.getPress(), book.getPrice(), book.getClassification()};
        try {
            return queryRunner.update(sql, args);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public int delete(int bid) {
        String sql = "delete from book where bid=?;";
        try {
            return queryRunner.update(sql, bid);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public int update(Book book) {
        String sql = "update `book` set `isbn`=?,`name`=?,`author`=?,`press`=?,`price`=?,`classification`=? where bid=?;";
        Object[] args = {book.getIsbn(), book.getName(), book.getAuthor(),
                book.getPress(), book.getPrice(), book.getClassification(), book.getBid()};
        try {
            return queryRunner.update(sql, args);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public Book selectById(int bid) {
        String sql = "select * from book where bid=?;";
        try {
            return queryRunner.query(sql, new BeanHandler<Book>(
                    Book.class), bid);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public Book selectByIsbn(String isbn) {
        String sql = "select * from book where isbn=?;";
        try {
            return queryRunner.query(sql, new BeanHandler<Book>(
                    Book.class), isbn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public List<Book> selectAll() {
        String sql = "select * from book;";
        try {
            return queryRunner.query(sql, new BeanListHandler<Book>(
                    Book.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

7、创建服务层Service层的接口

UserService接口

package cn.lqgx.service;

import cn.lqgx.entity.User;

import java.util.List;

public interface UserService {
    //增
    int addPUser(User user);

    //删
    int delPUser(User user);

    //改
    int updatePUser(User user);

    //查一个
    User selectPUser(User user);

    //查全部
    List<User> selectAllPUsers();

}

BookService接口

package cn.lqgx.service;

import cn.lqgx.entity.Book;

import java.util.List;

public interface BookService {
    //增
    int insertBook(Book book);

    //删
    int deleteBook(int bid);

    //改
    int updateBook(Book book);

    //查一个
    Book selectBookById(int bid);
    Book selectBookByIsbn(String isbn);

    //查全部
    List<Book> selectAllBooks();
}

8、创建服务层Service层接口的实现类

UserServiceImpl实现类

package cn.lqgx.service.Impl;

import cn.lqgx.dao.Impl.UserDaoImpl;
import cn.lqgx.dao.UserDao;
import cn.lqgx.entity.User;
import cn.lqgx.service.UserService;

import java.util.List;

public class UserServiceImpl implements UserService {
    UserDao pUserDao=new UserDaoImpl();
    @Override
    public int addPUser(User user) {
        return pUserDao.insert(user);
    }

    @Override
    public int delPUser(User user) {
        return pUserDao.delete(user);
    }

    @Override
    public int updatePUser(User user) {
        return pUserDao.update(user);
    }

    @Override
    public User selectPUser(User user) {
        return pUserDao.selectOne(user);
    }

    @Override
    public List<User> selectAllPUsers() {
        return pUserDao.selectAll();
    }
}

BookServiceImpl实现类

package cn.lqgx.service.Impl;

import cn.lqgx.dao.BookDao;
import cn.lqgx.dao.Impl.BookDaoImpl;
import cn.lqgx.entity.Book;
import cn.lqgx.service.BookService;

import java.util.List;

public class BookServiceImpl implements BookService {
    BookDao bookDao=new BookDaoImpl();
    @Override
    public int insertBook(Book book) {
        return bookDao.insert(book);
    }

    @Override
    public int deleteBook(int bid) {
        return bookDao.delete(bid);
    }

    @Override
    public int updateBook(Book book) {
        return bookDao.update(book);
    }

    @Override
    public Book selectBookById(int bid) {
        return bookDao.selectById(bid);
    }

    @Override
    public Book selectBookByIsbn(String isbn) {
        return bookDao.selectByIsbn(isbn);
    }

    @Override
    public List<Book> selectAllBooks() {
        return bookDao.selectAll();
    }
}

9、视图层的测试类

1)ServletLogin用户登录类

package cn.lqgx.Servlet;

import cn.lqgx.entity.User;
import cn.lqgx.service.Impl.UserServiceImpl;
import cn.lqgx.service.UserService;

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;

@WebServlet(name = "ServletLogin", value = "/ServletLogin")
public class ServletLogin extends HttpServlet {
    UserService pUserService=new UserServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //通过response输出在控制台
        PrintWriter printWriter  =response.getWriter();
        String pUserName= request.getParameter("pUserName");
        String pUserPassword= request.getParameter("pUserPassword");
        User pUserNew=new User(pUserName,pUserPassword);
        User pUser=pUserService.selectPUser(pUserNew);
        if(pUser!=null){
            response.sendRedirect("ServletShow");
        }else{
//            printWriter.println("<h2>姓名或者学号错误,无法登录</h2>");
            response.sendRedirect("/Books/userRegister.html");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

运行效果:

在这里插入图片描述

2)ServletRegister用户注册类

package cn.lqgx.Servlet;

import cn.lqgx.entity.User;
import cn.lqgx.service.Impl.UserServiceImpl;
import cn.lqgx.service.UserService;

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;

@WebServlet(name = "ServletRegister", value = "/ServletRegister")
public class ServletRegister extends HttpServlet {
    UserService pUserService=new UserServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //通过response输出在控制台
        PrintWriter printWriter  =response.getWriter();
        String pUserName= request.getParameter("pUserName");
        String pUserPassword= request.getParameter("pUserPassword");
        User pUserNew=new User(pUserName,pUserPassword);
        User pUser=pUserService.selectPUser(pUserNew);
        if(pUser==null){
            int num=pUserService.addPUser(pUserNew);
            if(num>0){
                response.sendRedirect("/Books/userLogin.html");
            }
        }else{

        }



    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

运行效果:

在这里插入图片描述

3)登陆成功后跳转到ServletShow界面

package cn.lqgx.Servlet;

import cn.lqgx.entity.Book;
import cn.lqgx.service.BookService;
import cn.lqgx.service.Impl.BookServiceImpl;

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;

@WebServlet(name = "ServletShow", value = "/ServletShow")
public class ServletShow extends HttpServlet {
    BookService bookService=new BookServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Book> bookList = bookService.selectAllBooks();
        request.setAttribute("allInfos",bookList);
        request.getRequestDispatcher("/ServletShowAll").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

运行效果:
在这里插入图片描述

4)删除图书信息的测试类

package cn.lqgx.Servlet;

import cn.lqgx.service.BookService;
import cn.lqgx.service.Impl.BookServiceImpl;

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;

@WebServlet(name = "ServletDel", value = "/ServletDel")
public class ServletDel extends HttpServlet {
    BookService bookService=new BookServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //通过response输出在控制台
        PrintWriter printWriter  =response.getWriter();
        int bid= Integer.parseInt(request.getParameter("bid"));
        //删除
        int num =bookService.deleteBook(bid);
        if(num>0){
            //重新显示所有信息
//            ShowAll.ShowAllEmployee(request, response);
            response.sendRedirect("ServletShow");
        }else {
//            printWriter.println("<h1>删除失败!</h1>");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

运行效果:
在这里插入图片描述

5)修改图书信息的测试类

package cn.lqgx.Servlet;

import cn.lqgx.entity.Book;
import cn.lqgx.service.BookService;
import cn.lqgx.service.Impl.BookServiceImpl;

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;

@WebServlet(name = "ServletUpdate", value = "/ServletUpdate")
public class ServletUpdate extends HttpServlet {
    BookService bookService=new BookServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int bid= Integer.parseInt(request.getParameter("bid"));
        Book book =bookService.selectBookById(bid);
        request.setAttribute("product",book);
        request.getRequestDispatcher("/ServletUpdateHtml").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
package cn.lqgx.Servlet;

import cn.lqgx.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.io.PrintWriter;

@WebServlet(name = "ServletUpdateHtml", value = "/ServletUpdateHtml")
public class ServletUpdateHtml extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        Book book=(Book)request.getAttribute("product");
        //通过response输出在控制台
        PrintWriter printWriter  =response.getWriter();
        printWriter.println("<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><title>商品修改</title>");
        printWriter.println("<link rel=\"stylesheet\"href=\"css/insert.css\">");
        printWriter.println("</head>");
        printWriter.println("<body><div><h2>商品修改</h2>");
        printWriter.println("<form action='ServletUpdateTrue' method='post'>");
        printWriter.println("<p>图书编号:<input type=\"text\" name=\"bid\"  value='"+book.getBid()+"'/></p>");
        printWriter.println("<p>国际标准书号:<input type=\"text\" name=\"isbn\" value='"+book.getIsbn()+"'/></p>");
        printWriter.println("<p>书名:<input type=\"text\" name=\"name\" value='"+book.getName()+"'/></p>");
        printWriter.println("<p>作者:<input type=\"text\" name=\"author\" value='"+book.getAuthor()+"'/></p>");
        printWriter.println("<p>出版社:<input type=\"text\" name=\"press\" value='"+book.getPress()+"'/></p>");
        printWriter.println("<p>价格:<input type=\"text\" name=\"price\" value='"+book.getPrice()+"'/></p>");
        printWriter.println("<p>分类:<input type=\"text\" name=\"classification\" value='"+book.getClassification()+"'/></p>");
        printWriter.println("<p class=\"pBtn\"><input class=\"inputBtn\" type=\"submit\" value=\"确 定\"/>" +
                "<a href='/Books/ServletShow'>返 回</a></p>");
        printWriter.println("</form>");
        printWriter.println("</div></body></html>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

运行效果
在这里插入图片描述

6)增加学生的测试类

package cn.lqgx.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 java.io.IOException;

@WebServlet(name = "ServletInsert", value = "/ServletInsert")
public class
ServletInsert extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect("insert.html");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

package cn.lqgx.Servlet;

import cn.lqgx.entity.Book;
import cn.lqgx.service.BookService;
import cn.lqgx.service.Impl.BookServiceImpl;

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;

@WebServlet(name = "ServletInsertTrue", value = "/ServletInsertTrue")
public class ServletInsertTrue extends HttpServlet {
    BookService bookService=new BookServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //通过response输出在控制台

        String isbn= request.getParameter("isbn");
        String name= request.getParameter("name");
        String author= request.getParameter("author");
        String press= request.getParameter("press");
        double price= Double.parseDouble(request.getParameter("price"));
        String classification= request.getParameter("classification");
        Book book=bookService.selectBookByIsbn(isbn);
//        System.out.println(product);
        if(book==null) {
            Book bookNew=new Book(isbn,name,author,press,price,classification);
            //先查询要添加的数据是否存在数据库中
            int num =bookService.insertBook(bookNew);
//            System.out.println(productNew+""+num);
            if(num>0){
                //重新显示所有信息
                response.sendRedirect("ServletShow");
            }else {
//            printWriter.println("<h1>修改失败!</h1>");
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

运行效果:

在这里插入图片描述

【3】HTML+CSS+JS 实现页面编写

  对应java中操作图书及用户信息的各个测试类中,我们在各个类中写了@WebServlet 注解的形式,将Servlet测试类与HTML页面实了现数据的交互。

1、用户注册

1)新用户注册页面HTML编写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册界面</title>
    <link rel="stylesheet" href="css/login.css">
    <script src="js/jQuery-3.6.1.js"></script>
    <script src="js/login.js"></script>
</head>
<body>
<div>
    <h2>欢迎注册</h2>
    <form action="ServletRegister" method="post">
        <p>用户名:<input type="text" name="pUserName"/><span></span></p>
        <p>密 码:<input type="password" name="pUserPassword"/><span></span></p>
        <p><input class="btnInput" type="submit" value="确定注册"/></p>
    </form>
</div>
</body>
</html>

2)新用户注册的CSS样式

body{
    background-image: url("../img/2.gif");
    /*background-repeat: round;*/
    background-size: cover;
}
div{
    /*border: 1px solid #F00;*/
    border-radius: 50px;
    width: 500px;
    margin: 50px auto;
    padding: 20px;
    background-image: url("../img/3.gif");
    background-repeat: round;
    color: yellow;
}
form{
    margin-left: 50px;
}
input{
    width: 120px;
    border-color: #ccc;
    outline: none;
}
.btnInput{
    margin-left: 42%;
    margin-bottom: -20px;
    padding: 3px;
    width: 100px;
    background: rgba(0,0,255,30%);
    color: yellow;
    font-weight: bold;
}
span{
    margin-left: 10px;
    color: #ccc;
    font-size: 15px;
    color: rgba(173,255,47,40%);
}

3)新用户注册的JS文件

  从下图结构中可知,需要添加一个jQuery,我这边网上下载的jQuery-3.6.1.js,添加到js目录中,然后创建一个newstu.js文件。

在这里插入图片描述

  newstu.js文件

$(function() {
	//姓名框获得焦点,给出提示,中文组成,长度为2-4位
	$('input').eq(0).focus(function() {
		//给其后面的span标签插入账号的提示信息
		$('span').eq(0).text('中文组成,长度为2-4位')
		$('input').eq(0).css('border-color', '#00f');
		$('span').eq(0).css('color', '#ccc');
	});

	//姓名框失去焦点
	$('input').eq(0).blur(function() {
		$('input').eq(0).css('border-color', '#CCC');
		//定义姓名内容的正则表达式
		var patter0 = /[\u4e00-\u9fa5]/g;
		//获取你在姓名框中输入的内容是否为空
		var result2 = $('input').eq(0).val();
		//对内容进行非空判断
		if (result2.length == 0) {
			$('span').eq(0).text('姓名不能为空');
			$('span').eq(0).css('color', '#f00');
		} else if (result2.length < 2 || result2.length > 4) {
			$('span').eq(0).text('姓名长度为2-4位');
			$('span').eq(0).css('color', '#f00');
		} else if (!patter0.test(result2)) { //当你输入的内容是非法字符的时候,给出内容组成不合法提示
			$('span').eq(0).text('姓名只能由中文组成');
			$('span').eq(0).css('color', '#f00');
		} else {
			show(0);
		}

	});
	//给密码标签注册获得焦点事件
	$('input').eq(1).focus(function() {
		//给其后面的span标签插入学号的提示信息
		$('span').eq(1).text('密码由数字组成,长度6位')
		$('input').eq(1).css('border-color', '#00f');
		$('span').eq(1).css('color', '#ccc');
	});

	//给密码标签注册失去焦点事件
	$('input').eq(1).blur(function() {
		$('input').eq(1).css('border-color', '#CCC');
		//定义密码内容的正则表达式
		var patter = /[^0-9]/g;

		//获取你在密码框中输入的内容是否为空
		var result1 = $('input').eq(1).val();
		//对密码内容进行非空判断
		if (result1.length == 0) {
			$('span').eq(1).text('密码不能为空');
			$('span').eq(1).css('color', '#f00');
		} else if (result1.length !=6) {
			$('span').eq(1).text('密码长度为6位');
			$('span').eq(1).css('color', '#f00');
		} else if (patter.test(result1)) { //当你输入的密码内容是非法字符的时候,给出内容组成不合法提示
			$('span').eq(1).text('密码只能由数字组成');
			$('span').eq(1).css('color', '#f00');
		} else {
			show(1);
		}

	});
	//正确显示样式方法
	function show(num) {
		$('span').eq(num).text('✔');
		$('span').eq(num).css('color', '#5FDDA4');
	};
});

2、用户登录

1)用户登录页面HTML编写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陆界面</title>
    <link rel="stylesheet" href="css/login.css">
    <script src="js/jQuery-3.6.1.js"></script>
    <script src="js/login.js"></script>
</head>
<body>
<div>
    <h2>欢迎登陆</h2>
    <form action="ServletLogin" method="post">
        <p>用户名:<input type="text" name="pUserName"/></p>
        <p>密 码:<input type="password" name="pUserPassword"/></p>
        <p><input class="btnInput" type="submit" value="登 陆"/></p>
    </form>
</div>
</body>
</html>

2)用户登录页面CSS编写

body{
    background-image: url("../img/2.gif");
    /*background-repeat: round;*/
    background-size: cover;
}
div{
    /*border: 1px solid #F00;*/
    border-radius: 50px;
    width: 500px;
    margin: 50px auto;
    padding: 20px;
    background-image: url("../img/3.gif");
    background-repeat: round;
    color: yellow;
}
form{
    margin-left: 50px;
}
input{
    width: 120px;
    border-color: #ccc;
    outline: none;
}
.btnInput{
    margin-left: 42%;
    margin-bottom: -20px;
    padding: 3px;
    width: 100px;
    background: rgba(0,0,255,30%);
    color: yellow;
    font-weight: bold;
}
span{
    margin-left: 10px;
    color: #ccc;
    font-size: 15px;
    color: rgba(173,255,47,40%);
}

3)用户登录页面JS编写和注册的一样

⛳️ 项目源码分享

链接:https://download.csdn.net/download/hh867308122/87338282


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享从零开始学习网络设备配置--任务2.7 提高网络稳定性(VRRP)

任务描述 某公司在北京的总部网络承担了连接全国各地分公司网络的任务。总部网络中心采用多台万兆交换机&#xff0c;内部网络按照业务规划有2个部门VLAN。为了增强总部核心网络的稳定性&#xff0c;要求在三层网络设备上配置VRRP备份组&#xff0c;实现网关冗余&#xff0c;为…

BYOL论文精读

文章目录概要背景方法1. 概述2. 参数更新3.目标z_ξ的构建和q_θ的预测结果结论个人看法概要 本篇博客介绍了Bootstrap Your Own Latent (BYOL)方法&#xff0c;这是DeepMind和Imperial London提出的一种自监督学习方法。 BYOL 包含两个架构相同但参数不同的网络。BYOL 不需要…

SpringBoot 项目打成 .exe 程序

准备 准备工作&#xff1a; 1.一个jar包&#xff0c;没有bug能正常启动的jar包 2.exe4j&#xff0c;一个将jar转换成exe的工具 3.inno setup&#xff0c;一个将依赖和exe一起打成一个安装程序的工具 开始 以我为例子&#xff0c;我将jar包放在了桌面 打开安装好的exe4j 直…

面渣逆袭:Java并发六十问,快来看看你会多少道

这篇文章有点长&#xff0c;四万字&#xff0c;图文详解六十道Java并发面试题。人已经肝麻了&#xff0c;大家可以点赞、收藏慢慢看&#xff01;扶我起来&#xff0c;我还能肝&#xff01; 基础 1.并行跟并发有什么区别&#xff1f; 从操作系统的角度来看&#xff0c;线程是…

现在有哪些好用的企业报表软件?

简单来讲&#xff0c;企业报表就是“用表格、图表等格式来动态显示数据”&#xff0c;各行各业、每年每月&#xff0c;都需要通过报表来展示组织和人员在经营管理上的真实情况。当前大家常用的实现企业报表的方式包含代码开发、用 Excel 制作离线报表、开源产品、利用业务系统&…

基于遗传编程的符号回归

0 前言 作为一种监督学习方法&#xff0c;符号回归&#xff08;symbolic regression&#xff09;试图发现某种隐藏的数学公式&#xff0c;以此利用特征变量预测目标变量。 符号回归的具体实现方式是遗传算法&#xff08;genetic algorithm&#xff09;。一开始&#xff0c;一…

数字三角形问题

数字三角形问题一、题目描述二、题目分析1、问题分析2、思路分析&#xff08;1&#xff09;状态转移方程状态表示状态转移&#xff08;2&#xff09;循环的设计三、代码实现一、题目描述 二、题目分析 1、问题分析 这道题给我们的第一眼感觉就是情况太多了&#xff0c;太复杂…

虚拟化环境下,如何高效开展勒索病毒防护加固?

本文重点 近些年&#xff0c;勒索病毒攻击事件频发&#xff0c;由于其“难发现、难阻止、难破解”的特点&#xff0c;不少用户——尤其是使用虚拟化的金融、医疗、制造、公共服务等重要行业用户——已遭受严重数据与经济损失。勒索攻击的防控是一项系统性工程&#xff0c;除了…

2-2-3-9-1-1、jdk1.7HashMap详解

目录数据结构链表的作用链表问题数据结构简图源码解析重要成员变量说明构造函数put操作初始化数组Key为null的处理计算hash添加链表节点--新增Entry扩容缺点扩容死锁分析单线程扩容多线程扩容数据结构 jdk1.7的hashmap的底层结构是数组加单向链表实现的。将key的hash值进行取模…

深度学习环境搭建

深度学习环境搭建0.引言1.Jupyter Notebook1.1.ANACONDA安装1.2.基于conda安装Jupyter Notebook1.3.Jupyter Notebook使用2.Pycharm2.1.安装Pycharm2.2.Pycharm设置0.引言 一步步采坑更新。 1.Jupyter Notebook 官方文档 安装参考 通过安装Anaconda来解决Jupyter Notebook…

300行HTML+CSS+JS代码实现动态圣诞树

文章目录1. 前言2. 效果展示3. 准备&#x1f351; 下载编译器&#x1f351; 下载插件4. 源码&#x1f351; HTML&#x1f351; JS&#x1f351; CSS5. 结语1. 前言 一年一度的圣诞节和考研即将来临&#xff0c;那么这篇文章将用到前端三大剑客 HTML CSS JS 来实现动态圣诞树…

Java面试题(六)多线程经典编程题

经典的多线程编程题猜数字游戏键盘输入练习3个线程轮流打印ABC多窗口买票猜数字游戏 题目说明&#xff1a;有2个线程&#xff0c;第一个线程A随机一个100内的数&#xff0c;第2个线程B来猜&#xff0c;B每次猜一个数后A会判断&#xff0c;如果猜对了程序结束&#xff0c;如果猜…

工具在接口测试中发挥什么样的作用?

接口测试究竟是什么&#xff1f;为什么要用接口测试&#xff1f;它有哪些工具呢&#xff1f;这一连串的问题敲击着我们&#xff0c;请带着这些问题&#xff0c;在本文中寻找答案&#xff0c;我将为您打开接口测试的大门。 1 初探接口测试 接口测试是什么。它检查数据的交换&…

从《我要投资》,看藏在“对立面”里的创业正解

文|智能相对论 作者|青月 六位07届的快乐男声选手在象山体验养鹅&#xff0c;意外出圈&#xff1b;随后播出的09届超女的怀旧综艺却热度一般&#xff0c;可见只有单纯的情怀消费并不能保证节目的口碑&#xff0c;只有建立在准确的节目定位与恰当的价值输出基础上&#xff0c;…

面试必备:从常见的存储引擎到混淆的锁分类,请上车

今天我们来总结一下MyISAM和InnoDB引擎下锁的种类及使用方法。 MySQL的四大常见存储引擎 谈到MyISAM和InnoDB了我们先来了解一下什么是存储引擎吧。MySQL中的数据用各种不同的技术存储在文件&#xff08;或者内存&#xff09;中&#xff0c;这些技术中的每一种技术都使用不同…

m基于贝叶斯理论的超分辨率重构算法matlab仿真,对比Tikhonov重构算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 超分辨率(Super-Resolution)通过硬件或软件的方法提高原有图像的分辨率&#xff0c;通过一系列低分辨率的图像来得到一幅高分辨率的图像过程就是超分辨率重建。超分辨率成像&#xff08;SR-imagi…

一个内核oops问题的分析及解决

最近在调试设备时&#xff0c;遇到了一个偶发的开机死机问题。通过查看输出日志&#xff0c;发现内核报告了oops错误&#xff0c;如下所示&#xff08;中间省略了部分日志&#xff0c;以......代替&#xff09;&#xff1a; Unable to handle kernel NULL pointer dereference…

YOLOV7学习记录之训练过程

在前面学习YOLOV7的过程中&#xff0c;我们已经学习了其网络结构&#xff0c;然而实际上YOLOV7项目的难点并不在于其网络模型而是在于其损失函数的设计&#xff0c;即如何才能训练出来合适的bbox。 神经网络模型都有训练和测试&#xff08;推理&#xff09;过程&#xff0c;在Y…

QT JS交互、调用JS、传值

本文详细的介绍了QT JS交互、调用JS、传值的各种操作&#xff0c;包括QT向JS传递String字符串、包括QT向JS传递Int数字、包括QT向JS传递List数组&#xff0c;同时也接收JS向QT返回的List数组、JS向QT返回的Json、JS向QT返回的数字、JS向QT返回的字符串。 本文作者原创&#xff…

Vue基础8之Vue组件化编程、非单文件组件与单文件组件

Vue基础8Vue组件化编程对组件的理解一些概念的理解非单文件组件基本使用几个注意点组件的嵌套VueComponent一个重要的内置关系先导篇&#xff1a;原型对象正文&#xff08;可以理解为类的继承&#xff09;单文件组件Vue组件化编程 对组件的理解 传统方式&#xff1a; 使用组…