关于与需要的文件下载
字体颜色分类:
黑色 表示正文
蓝色 表示一个超链接,点击可以跳转页面
橙色 表示一级标题或项目的包名
绿色 表示子级内容中含有代码或解释的标题
紫色 表示一个代码块的标题
红色 表示()外的文件是()内文件的子类,实现类或依赖
浅灰 表示解释或其类型
高亮显示 表示重点或者需要注意未被解决的Bug
纯小白,有什么做得不好的地方请各位大佬指正,谢谢!
项目/数据库/Jar文件下载
Java-Project文件夹中存放项目,需要的同学可以下载看一下,也欢迎进行修改!
Java-Jar文件夹中存放.java或其他类型需要引入的外部文件
Java-数据库 文件夹中存放建库建表的sql文件
jar文件里面有不需要的可以不下载 本文档只用到了mysql connector
sqlserver与oracle数据库请下载sqljdbc4/ojdbc14并修改数据库连接语句
(连接类:src - Jdbc - Tool - BookManageOper 修改时仅需修改常量值)
一.所有页面与项目介绍
首页面
添加页面
包含四个主要模块:查询 - 增加 - 删除 - 分页
可以通过当前项目对Jsp+Servlet的基础进行检验
注意!我没有对页面进行任何的美化
所有代码只是为了做出来作业而写的
如果想要美化可以自己修改Script下的内容
二.所用软件与文件
软件
Idea
SQLyog(mysql) 可使用其他数据库代替
JAR文件
mySql-Connector-java
注意!jar文件需要在File-Project Structure-Artifacts中引入到WEB-INF/lib中
三.数据库的建立
在进行代码的编写之前,我们首先把数据库与表建立好
我的数据库仅适用于MySql,其他数据库请自行建库建表!
项目/数据库/Jar文件下载中 Java - 数据库 - BookManage.sql 进入SQLyog执行即可
Book表(table)
id | int | 主键 自增 | 编号 |
name | varchar(50) | 非空 | 书名 |
author | varchar(50) | 非空 | 作者名 |
time | date | 非空 | 购入时间 |
type | int | 非空 外键(type-id) | 类型 |
Book表.png
Type表(table)
id | int | 主键 自增 | 编号 |
name | varchar(50) | 非空 | 类型名 |
Type表.png
四.导入Jar文件
在idea2018中 导入jar文件 其他版本或软件请自行寻找教程
菜单栏-File-Project Structure中选择Modules
选择Dependencies
在Dependencies-Scope旁边选择绿色的加号中选择jars or .....
选择需要加入的Jar文件并点击Apply 退出当前弹框
再次进入 菜单栏-File-Project Structure 但是选择Artifacts
在Artifacts中选择Output Layout
在右方Available Elements选择需要加入的jar
选择后在下方点击Fix 并选择Add 'xx.jar' to Artifacts 或者 Add All...
五.代码编写
src - Jdbc
(1)src-jdbc包含的文件与其详解
src - Jdbc包含Dao(数据访问接口) , Impl(Dao实现类) , Entity(实体类) , Tool(工具类)
Dao(数据访问接口):包含BookDao与TypeDao 主要用来进行方法的定义
Impl(Dao实现类):包含BookDaoImpl与TypeDaoImpl,他们都继承自Dao中的接口,主要进行抽象方法的具体实现
Entity(实体类):包含Book与Type,也就是数据库中的表,其中的字段就是数据库的字段
Tool(工具类):包含BookManageOper与Page,用于数据库的连接开启与关闭和分页的操作
(2)src - jdbc - Tool
(2.1)src - jdbc - Tool - BookManageOper[数据库连接][工具类]
首先就是进行数据库的连接 需要用到Jar文件连接数据库
代码的解释已经在注释里了,如果有什么问题欢迎提出!谢谢!
package Jdbc.Tool;import java.io.Console;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;public class BookManageOper { //创建数据与数据库的连接的字符常量 修改数据库仅需修改url中的bookmanage即可 //connector8.x中已经进行修改classname与url,详细请前往其他教程寻找 private static final String classname="com.mysql.jdbc.Driver"; //mysql5.x不需要?后面的内容 但我是8.x并且用的时connector5 所以需要加?后的内容 private static final String url="jdbc:mysql://localhost:3306/bookmanage?useUnicode=true&characterEncoding=utf8"; private static final String user="root"; private static final String pwd="123456"; //创建与数据库的连接 返回Connection连接对象 public static Connection create(){ //首先创建一个Connection对象 并赋值为null Connection connection=null; try{ //为Connection对象赋值(获取连接) Class.forName(classname); connection=DriverManager.getConnection(url,user,pwd); }catch (Exception ex){ //当发生错误时在控制台(Console)中输出错误信息 //并显示Tool - BookManageOper - create() Error ex.printStackTrace(); System.out.println("Tool - BookManageOper - create() Error"); } //返回connection对象 return connection; } //通过三个对象关闭数据库的连接 public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){ try{ //如果不为空则进行关闭 为空则跳过 if(connection!=null){ connection.close(); }else if(preparedStatement!=null){ preparedStatement.close(); }else if(resultSet!=null){ resultSet.close(); } }catch (Exception ex){ ex.printStackTrace(); System.out.println("Tool - BookManageOper - close(C,P,R) Error"); } }}
(2.2)src - jdbc - Tool - Page[翻页][工具类]
package Jdbc.Tool;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;public class Page { //当前页数 默认为1 private int thisPage=1; //总页数 private int sumPage; //每页显示行数{固定为5 修改的时候修改5为x即可} private int showPage=5; //所有记录数 可以使用这个来进行代替sumpage? 【未实现】 private int sumRecord; //单例模式 private Page(){ } private static Page page=null; public static Page getPage(){ if(page==null) page=new Page(); return page; } //私有的字段 用于数据库连接与操作 private Connection connection=null; private PreparedStatement preparedStatement=null; private ResultSet resultSet=null; //在这里我没有给sumRecord创建get/set方法 因为没有外部类使用到他 //如果有使用的需求可以加上 没有需求可以把sumRecord直接删除 在下方sum定义局部变量 public int getThisPage() { return thisPage; } //当设置当前页数时,进行判断 public void setThisPage(int thisPage) { //如果大于0且小于等于总页数,正常运行 if(thisPage>0&&thisPage<=sumPage){ this.thisPage=thisPage; } //如果当前页数大于总页数,那么跳转到最后一页(设置为总页数) else if(thisPage>sumPage){ this.thisPage=getSumPage(); } //如果都不满足(小于0) 那么设为默认值1 else{ this.thisPage=1; } } public int getSumPage() { return sumPage; } //当设置总页数时,进行判断 public void setSumPage(int sumPage) { //当总页数大于0时 进行赋值 否则将sumPage设为1(可以不设else 那么出现<0时SumPage不变) if(sumPage>0){ this.sumPage = sumPage; //当总页数设置完之后,需要将当前页数设为当前页数 //因为当删除数据之后 4页变成了3页 那么当前页数不能继续为4 而是为最大页数3 this.setThisPage(this.getThisPage()); }else{ this.sumPage = 1; } } public int getShowPage() { return showPage; } public void setShowPage(int showPage) { //这里可以不进行判断,因为没在外面设置ShowPage //但是有些页面需要进行每页显示的修改 如论坛 //需要进行每页显示的修改时需要进行判断 if(showPage>=1&&showPage<=99){ this.showPage = showPage; } } //获取总记录数 初始化或每次添加、删除结束后执行 public void loadSumRecord(){ System.out.println("Tool - Page - getSumPage()"); try{ //创建Connection连接 connection=BookManageOper.create(); //查询Book表的所有记录 String sql="select count(1) from book"; preparedStatement=connection.prepareStatement(sql); resultSet=preparedStatement.executeQuery(); //因为是返回count(1)[只返回一个数据] 所以使用if if(resultSet.next()){ sumRecord=resultSet.getInt(1); //三目运算符 if?true:false 当总记录除总页数余0时 返回结果,不为0返回结果+1 this.setSumPage(sumRecord%showPage==0?sumRecord/showPage:sumRecord/showPage+1); } }catch (Exception ex){ ex.printStackTrace(); }finally { BookManageOper.close(connection,preparedStatement,resultSet); } }}
(3)src - jdbc - Entity
Entity进行表与其中字段的定义,这就没必要解释了
(3.1)src - jdbc - Entity - Book[图书][实体类]
package Jdbc.Entity;public class Book { //图书 mysql - BookManage . Book //图书编号 private int id; //图书名 private String name; //作者名 private String author; //购入时间 private String time; //图书类型 - Type类 包含id(类型编号)与name(类型名) private Type type; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public Type getType() { return type; } public void setType(Type type) { this.type = type; }}
(3.2)src - jdbc - Entity - Type[类型][实体类]
package Jdbc.Entity;public class Type { //图书类型 mysql - BookManage . Type //图书类型编号 private int id; //图书类型名 private String name; //无参构造方法 public Type(){ } //有参构造方法 方便赋值 不用再进行type.setId()... public Type(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
(4)src - jdbc - Dao
Dao中包含了方法的定义,需要什么方法就写什么方法
接口中的方法默认使用abstract修饰,不可以有方法体
但可以使用default把abstract覆盖掉
(4.1)src - jdbc - Dao - BookDao[图书][Dao接口]
package Jdbc.Dao;import Jdbc.Entity.Book;import java.util.List;public interface BookDao { //获取所有书籍数据 Book - index.jsp/selectServlet - List<Book> getAllBook(); //增加一条数据 Book - insert.jsp/insertServlet - boolean insertBook(String name,String author,String time,int type); //删除一条数据 Book - index.jsp/deleteServlet - boolean deleteBook(int id);}
(4.2)src - jdbc - Dao - TypeDao[类型][Dao接口]
package Jdbc.Dao;import Jdbc.Entity.Type;import java.util.List;public interface TypeDao { //获取所有类型信息 Type - insert.jsp/Servlet - List<Type> getAllType();}
(5)src - jdbc - Impl
Impl通过implements Dao 来实现Dao中的抽象方法
impl一般来说都是默认类 不会是接口或抽象类 因为没有意义
(5.1)src - jdbc - Impl - BookDaoImpl(BookDao)[图书][Dao接口实现类]
package Jdbc.Impl;import Jdbc.Dao.BookDao;import Jdbc.Entity.Book;import Jdbc.Entity.Type;import Jdbc.Tool.BookManageOper;import Jdbc.Tool.Page;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;public class BookDaoImpl implements BookDao { //连接数据库与处理sql Connection connection=null; PreparedStatement preparedStatement=null; ResultSet resultSet=null; @Override public List<Book> getAllBook() {//获取所有书籍数据 //当获取书籍时 首先重新加载一下记录 Page page=Page.getPage(); page.loadSumRecord(); //先创建一个List 之后直接Return List List<Book> bookList=new ArrayList<>() ; try{ connection=BookManageOper.create(); //查询图书表中的x-x行数据 并查询它对应的类型名 String sql="select b.*,t.* from book b,type t where b.type=t.id limit ?,?"; preparedStatement=connection.prepareStatement(sql); // row * ( page - 1 ) 5 * (2-1) = 5 不在前五行 int Limit1=page.getShowPage()*(page.getThisPage()-1); preparedStatement.setInt(1, Limit1); preparedStatement.setInt(2, page.getShowPage()); resultSet=preparedStatement.executeQuery(); //返回不确定行或多行的查询sql语句 使用while while (resultSet.next()){ //创建一个book对象 并将数据库中的值赋给这个对象 Book book=new Book(); book.setId(resultSet.getInt("b.id")); book.setName(resultSet.getString("b.name")); book.setAuthor(resultSet.getString("b.author")); book.setTime(resultSet.getString("b.time")); book.setType(new Type(resultSet.getInt("t.id"),resultSet.getString("t.name"))); //将当前对象加入到list中 bookList.add(book); } System.out.println("Impl - BookDaoImpl - getAllBook() ReturnListCount : "+bookList.size()); }catch (Exception ex){ ex.printStackTrace(); System.out.println("Impl - BookDaoImpl - getAllBook() Error"); }finally { BookManageOper.close(connection,preparedStatement,resultSet); } return bookList; } @Override public boolean insertBook(String name,String author,String time,int type) {//添加一条数据 boolean Return=false; try{ connection=BookManageOper.create(); //增加一条数据 因为id为自增 所以会自动赋值 String sql="insert into book(name,author,time,type) values (?,?,?,?)"; preparedStatement=connection.prepareStatement(sql); preparedStatement.setString(1,name); preparedStatement.setString(2,author); preparedStatement.setString(3,time); preparedStatement.setInt(4,type); //执行返回影响行数的sql使用Update int ReturnInt=preparedStatement.executeUpdate(); //返回行数大于0则成功 if(ReturnInt>0) Return=true; System.out.println("Impl - BookDaoImpl - insertBook(s,s,s,i) Return : "+Return); }catch (Exception ex){ ex.printStackTrace(); System.out.println("Impl - BookDaoImpl - insertBook(s,s,s,i)"); }finally { BookManageOper.close(connection,preparedStatement,resultSet); } return Return; } @Override public boolean deleteBook(int id) {//删除一条数据 boolean Return=false; try{ connection=BookManageOper.create(); //根据id删除一条数据 因为id是唯一的 String sql="delete from book where id=?"; preparedStatement=connection.prepareStatement(sql); preparedStatement.setInt(1,id); int ReturnInt=preparedStatement.executeUpdate(); if(ReturnInt>0) Return=true; System.out.println("Impl - BookDaoImpl - insertBook(s,s,s,i) Return : "+Return); }catch (Exception ex){ ex.printStackTrace(); System.out.println("Impl - BookDaoImpl - deleteBook(s) Error"); }finally { BookManageOper.close(connection,preparedStatement,resultSet); } return Return; }}
(5.2)src - jdbc - Impl - TypeDaoImpl(TypeDao)[类型][Dao接口实现类]
package Jdbc.Impl;import Jdbc.Dao.TypeDao;import Jdbc.Entity.Type;import Jdbc.Tool.BookManageOper;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;public class TypeDaoImpl implements TypeDao { Connection connection=null; PreparedStatement preparedStatement=null; ResultSet resultSet=null; @Override public List<Type> getAllType() {//获取所有的图书类型 List<Type> typeList = new ArrayList<>(); try{ connection=BookManageOper.create(); String sql="select * from type"; preparedStatement=connection.prepareStatement(sql); resultSet=preparedStatement.executeQuery(); while (resultSet.next()){ Type type=new Type(); type.setId(resultSet.getInt("id")); type.setName(resultSet.getString("name")); typeList.add(type); } System.out.println("Impl - TypeDaoImpl - getAllType() - ReturnListCount : "+typeList.size()); }catch (Exception ex){ ex.printStackTrace(); System.out.println("Impl - TypeDaoImpl - getAllType() Error"); }finally { BookManageOper.close(connection,preparedStatement,resultSet); } System.out.println("Impl - TypeDaoImpl - getAllType() 完成"); System.out.println(); return typeList; }}
web && src - Servlet
(1)web - web_inf
(1.1)web - web_inf - web.xml[Web配置文件]
web.xml是web程序的配置文件,它很重要!!!没有配置web.xml的话会报大错
<?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--> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--Servlet的映射 Servlet如果不进行映射则不会被外部所访问--> <servlet> <servlet-name>SelectServlet</servlet-name> <servlet-class>Servlet.SelectServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SelectServlet</servlet-name> <url-pattern>/SelectServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>InsertServlet</servlet-name> <servlet-class>Servlet.InsertServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>InsertServlet</servlet-name> <url-pattern>/InsertServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>deleteServlet</servlet-name> <servlet-class>Servlet.deleteServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>deleteServlet</servlet-name> <url-pattern>/deleteServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>PageServlet</servlet-name> <servlet-class>Servlet.PageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PageServlet</servlet-name> <url-pattern>/PageServlet</url-pattern> </servlet-mapping></web-app>
(2)web - *.jsp 与其相对应的Servlet
(2.1)web - index页面
(2.1.1)web - index.jsp[首页][Jsp页面]
<%@ page import="java.util.List" %><%@ page import="Jdbc.Entity.Book" %><%@ page import="Jdbc.Tool.Page" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%-- Created by IntelliJ IDEA. User: 30974 Date: 2023/1/9 Time: 20:33 To change this template use File | Settings | File Templates.--%><link rel="shortcut icon" href="#"><html> <head> <title>个人图书管理</title> <%--<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"/>--%> <%--<link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>--%> </head> <body> <% Page page1=Page.getPage(); List<Book> bookList=(List<Book>) session.getAttribute("bookList"); if(bookList==null){ request.getRequestDispatcher("SelectServlet").forward(request,response); } //else如果删掉 session一直有值 就不会再次进入获取bookList 会造成页面数据不刷新 else{ session.setAttribute("bookList",null); } %> <h1>图书信息</h1> <table border="1"> <tr> <td>图书名称</td> <td>图书作者</td> <td>购买时间</td> <td>图书分类</td> <td>操作</td> </tr> <% for (Book b : bookList) { out.print( "<tr id=trid"+b.getId()+">" + "<td>"+b.getName()+"</td>" + "<td>"+b.getAuthor()+"</td>" + "<td>"+b.getTime()+"</td>" + "<td>"+b.getType().getName()+"</td>" + "<td><span class=delete bookid="+b.getId()+">删除</span></td>" + "</tr>" ); } %> </table> <p> <%--设置toPageType 使pageServlet能够识别进行哪种操作--%> <a href="PageServlet?toPageType=First">首页</a> <a href="PageServlet?toPageType=Prev">上一页</a> <span> <%=page1.getThisPage()%>/<%=page1.getSumPage()%> </span> <a href="PageServlet?toPageType=Next">下一页</a> <a href="PageServlet?toPageType=Last">尾页</a> </p> <a href="Insert.jsp">新增图书信息</a> <script src="JS/jquery-1.12.4.js"></script> <script src="JS/bootstrap.js"></script> <script> $(function(){ setOddBack() }) function setOddBack(){ $("tr:odd").css("background","gray"); $("tr:even").css("background","none"); } $(".delete").click( function () { var bookid=$(this).attr("bookid"); //confirm 根据点击的按钮返回true false var deleteIs=confirm("确定要删除编号"+bookid+"的书籍吗?"); //如果点击确定 那么进入deleteServlet if(deleteIs==true){ location.href="deleteServlet?bookid="+bookid; } } ) <% //删除操作进行后根据return值进行弹框 String delIs=request.getParameter("delIs"); if (delIs!=null){ if(delIs.equals("delTrue")){ %> alert("删除成功"); <% }else{ %> alert("删除失败"); <% } } %> </script> </body></html>
(2.1.2)web - SelectServlet (index.jsp)[查询][Servlet]
package Servlet;import Jdbc.Dao.BookDao;import Jdbc.Impl.BookDaoImpl;import Jdbc.Entity.Book;import javafx.application.Application;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;import java.util.List;@WebServlet(name = "SelectServlet")public class SelectServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //当前doPost()暂无作用 System.out.println(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //当前doGet()用于页面中Session - bookList的初始化 //创建Jdbc - Impl - BookDaoImpl实例 BookDao bookDao=new BookDaoImpl(); //获取book中所有数据 List<Book> bookList=bookDao.getAllBook(); //将book表中的数据存入Session - bookList中 HttpSession session=request.getSession(); session.setAttribute("bookList",bookList); //跳转到jsp页面 request.getRequestDispatcher("index.jsp").forward(request,response); System.out.println(); }}
(2.1.3)web - deleteServlet(index.jsp)[删除][Servlet]
package Servlet;import Jdbc.Dao.BookDao;import Jdbc.Impl.BookDaoImpl;import Jdbc.Tool.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.io.PrintWriter;@WebServlet(name = "deleteServlet")public class deleteServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String idString=request.getParameter("bookid"); int id=Integer.parseInt(idString); BookDao bookDao=new BookDaoImpl(); //根据id删除一条数据 返回true成功/false失败 boolean ReturnIs=bookDao.deleteBook(id); //如果成功将index.jsp中的delIs设为delTrue 否则设为delFalse if(ReturnIs==true){ request.getRequestDispatcher("index.jsp?delIs=delTrue").forward(request,response); }else{ request.getRequestDispatcher("index.jsp?delIs=delFalse").forward(request,response); } }}
(2.1.4)web - PageServlet(index.jsp)[分页][Servlet]
package Servlet;import Jdbc.Tool.Page;import com.mysql.cj.Session;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;@WebServlet(name = "PageServlet")public class PageServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String toPageType=request.getParameter("toPageType"); Page page=Page.getPage(); //switch判断是什么操作 执行对应的代码 switch (toPageType){ case "First": page.setThisPage(1); break; case "Prev": page.setThisPage(page.getThisPage()-1); break; case "Next": page.setThisPage(page.getThisPage()+1); break; case "Last": page.setThisPage(page.getSumPage()); break; } HttpSession session=request.getSession(); session.setAttribute("bookList",null); //这里不能使用转发 使用转发会出现thisPage多次++的问题 response.sendRedirect("index.jsp"); }}
(2.1)web - insert页面
(2.2)web - insert.jsp[添加][Jsp页面]
<%@ page import="java.util.List" %><%@ page import="Jdbc.Entity.Type" %><%@ page import="java.util.ArrayList" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page import="com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer" %><%@ page import="java.util.Date" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="java.text.SimpleDateFormat" %><%-- Created by IntelliJ IDEA. User: 30974 Date: 2023/1/10 Time: 11:30 To change this template use File | Settings | File Templates.--%><html><head> <title>添加图书</title></head><body><% if(session.getAttribute("typeList")==null) { request.getRequestDispatcher("InsertServlet").forward(request, response); } //获取一个本日时间,年-月-日 格式 SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); String thisDay=simpleDateFormat.format(new Date()); request.setAttribute("thisDay",thisDay);%> <form method="post" action="InsertServlet"> <p> 图书名称 <input type="text" name="insertName" required> </p> <p> 图书作者 <input type="text" name="insertAuthor" required> </p> <p> //购入时间默认为本日 并且最大为本日 购入时间 <input type="date" name="insertTime" value="${thisDay}" max="${thisDay}" min="2000-01-01" required> </p> <p> 图书类别 <select name="insertType" required> <c:forEach items="${sessionScope.typeList}" var="t" varStatus="status"> <option value="${t.getId()}">${t.getName()}</option> </c:forEach> </select> </p> <p> <input type="submit" id="insertSub" value="增加图书"> </p> </form> <script src="JS/jquery-1.12.4.js"></script> <script> function goIndex() { location.href="index.jsp" } <% String insIs=request.getParameter("insIs"); if (insIs!=null){ if(insIs.equals("insTrue")){ %> var conIs=confirm("添加成功(确定继续添加,取消返回首页)"); if(conIs==false){ goIndex(); }else{ ; } <% }else{ %> alert("添加失败"); <% } } %> </script></body></html>
(2.2.1)web - InsertServlet(Insert.jsp)[添加][Servlet]
package Servlet;import Jdbc.Dao.BookDao;import Jdbc.Dao.TypeDao;import Jdbc.Entity.Type;import Jdbc.Impl.BookDaoImpl;import Jdbc.Impl.TypeDaoImpl;import com.mysql.cj.Session;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;import java.util.List;@WebServlet(name = "InsertServlet")public class InsertServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //当前doPost()方法用于向BookManage - Book表中添加一条数据 //设置获取的字符编码格式为utf-8 request.setCharacterEncoding("utf-8"); //获取所有需要添加的字段 String name=request.getParameter("insertName"); String author=request.getParameter("insertAuthor"); String time=request.getParameter("insertTime"); String typeString=request.getParameter("insertType"); int type=Integer.parseInt(typeString); //创建Jdbc - Impl - BookDaoImpl实例 BookDao bookDao=new BookDaoImpl(); //进行添加 并返回是否添加成功(t/f) boolean insertIs=bookDao.insertBook(name,author,time,type); //跳转到jsp页面 if(insertIs==true){ request.getRequestDispatcher("Insert.jsp?insIs=insTrue").forward(request,response); }else{ request.getRequestDispatcher("Insert.jsp?insIs=insFalse").forward(request,response); } System.out.println(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //当前doGet()用于页面中Session - typeList的初始化 //创建Jdbc - Impl - TypeDaoImpl实例 TypeDao typeDao=new TypeDaoImpl(); //获取Type表中的所有数据 List<Type> typeList=typeDao.getAllType(); //将Type表中的数据添加到Session - typeList中,以便jsp页面进行使用 HttpSession session=request.getSession(); if(typeList!=null) session.setAttribute("typeList",typeList); //跳转到jsp页面 request.getRequestDispatcher("Insert.jsp").forward(request,response); System.out.println(); }}
六.结尾
图书管理系统还是能够做为检测自己JavaWeb基础语法与逻辑的一个项目
第一次写文章 逻辑有点乱 不过总算也是写完了
有什么更好的想法欢迎大佬们指正留言!