简易图书管理系统
扫测资讯 2024-12-08 06:07 37 0
javaweb+jsp+servlet
实体类
package com.ghx.entity;
/**
* @author :guo
* @date :Created in 2024/12/6 10:13
* @description:
* @modified By:
* @version:
*/
public class Book {
private int id;
private String name;
private double price;
private String publisher;
public Book() {
}
public Book(int id, String name, double price, String publisher) {
this.id = id;
this.name = name;
this.price = price;
this.publisher = publisher;
}
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 double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
}
package com.ghx.entity;
/**
* @author :guo
* @date :Created in 2024/12/3 16:48
* @description:
* @modified By:
* @version:
*/
public class User {
private int id;
private String username;
private String password;
private String realname;
private int age;
public User() {
}
public User(int id, String username, String password, String realname, int age) {
this.id = id;
this.username = username;
this.password = password;
this.realname = realname;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
dao
package com.ghx.dao;
import java.sql.*;
/**
* @author :guo
* @date :Created in 2024/12/2 14:08
* @description:
* @modified By:
* @version:
*/
public class BaseDao {
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
String url = "jdbc:mysql://localhost:3306/day06";
String username = "root";
String password = "123456";
String driverName="com.mysql.cj.jdbc.Driver";
public int edit(String sql,Object... obj){
try {
getConn();
ps = conn.prepareStatement(sql);
for(int i=0;i<obj.length;i++){
ps.setObject(i+1,obj[i]);
}
int i=ps.executeUpdate();
return i;
} catch (Exception e) {
return 0;
} finally {
closeAll();
}
}
//连接数据库
public void getConn() throws Exception{
Class.forName(driverName);
conn = DriverManager.getConnection(url, username, password);
}
//关闭资源
public void closeAll(){
try {
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
package com.ghx.dao;
import com.ghx.entity.Book;
import com.ghx.entity.User;
import java.util.ArrayList;
import java.util.List;
/**
* @author :guo
* @date :Created in 2024/12/6 10:13
* @description:
* @modified By:
* @version:
*/
public class BookDao extends BaseDao{
public List<Book> findAll() {
List<Book> list=new ArrayList<Book>();
try {
getConn();
String sql="select id,name,price,publisher from tbl_book ";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while (rs.next()){
Book book=new Book();
book.setId(rs.getInt("id"));
book.setName(rs.getString("name"));
book.setPrice(rs.getDouble("price"));
book.setPublisher(rs.getString("publisher"));
list.add(book);
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
closeAll();
}
return list;
}
//插入
public int insert(String name,double price,String publisher){
String sql="insert into tbl_book(name,price,publisher) values (?,?,?)";
return edit(sql,name,price,publisher);
}
//回显数据
public Book findById(int id){
Book book=null;
try {
getConn();
String sql="select id,name,price,publisher from tbl_book where id=?";
ps=conn.prepareStatement(sql);
ps.setObject(1,id);
rs=ps.executeQuery();
while (rs.next()){
book=new Book();
book.setId(rs.getInt("id"));
book.setName(rs.getString("name"));
book.setPrice(rs.getDouble("price"));
book.setPublisher(rs.getString("publisher"));
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
closeAll();
}
return book;
}
//修改
public int updateBook(String name,double price,String publisher,int id){
String sql= "update tbl_book set name=?,price=?,publisher=? where id=?";
return edit(sql,name,price,publisher,id);
}
//删除
public int deleteBook(int id){
String sql="delete from tbl_book where id=?";
return edit(sql,id);
}
}
package com.ghx.dao;
import com.ghx.entity.User;
import java.util.ArrayList;
/**
* @author :guo
* @date :Created in 2024/12/3 16:48
* @description:
* @modified By:
* @version:
*/
public class UserDao extends BaseDao{
//登录判断
public User find(String username,String password){
User user=null;
try {
getConn();
String sql="select id,username,password,realname,age from tbl_user where username=? and password=?";
ps=conn.prepareStatement(sql);
ps.setObject(1,username);
ps.setObject(2,password);
rs=ps.executeQuery();
while (rs.next()){
user=new User();
int id = rs.getInt("id");
String name = rs.getString("username");
String pwd = rs.getString("password");
String realname = rs.getString("realname");
int age = rs.getInt("age");
user.setId(id);
user.setUsername(name);
user.setPassword(pwd);
user.setRealname(realname);
user.setAge(age);
}
return user;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
closeAll();
}
}
//注册
public int add(String name,String pwd,String rname,String age){
String sql="insert into tbl_user values(null,?,?,?,?)";
return edit(sql,name,pwd,rname,age);
}
}
servlet
package com.ghx.servlet;
import com.ghx.dao.BookDao;
import com.ghx.entity.Book;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "BookServlet", value = "/BookServlet")
public class BookServlet extends HttpServlet {
private BookDao bookDao=new BookDao();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String method = request.getParameter("method");
if("insert".equals(method)){
insertBook(request,response);
}else if("getById".equals(method)){
getById(request,response);
} else if("update".equals(method)){
updateById(request,response);
}else if("delete".equals(method)){
deleteById(request,response);
}else {
selectAll(request,response);
}
}
private void deleteById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
int id = Integer.parseInt(request.getParameter("id"));
int i = bookDao.deleteBook(id);
if(i>0){
response.sendRedirect("/BookServlet");
}
}
//修改
private void updateById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
double price = Double.parseDouble(request.getParameter("price"));
String publisher = request.getParameter("publisher");
int i = bookDao.updateBook(name, price, publisher, id);
if(i>0){
response.sendRedirect("/BookServlet");
}
}
//回显数据
private void getById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
int id = Integer.parseInt(request.getParameter("id"));
Book byId = bookDao.findById(id);
request.setAttribute("bookid",byId);
request.getRequestDispatcher("/update.jsp").forward(request,response);
}
//添加
private void insertBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String name = request.getParameter("name");
double price = Double.parseDouble(request.getParameter("price"));
String publisher = request.getParameter("publisher");
int insert = bookDao.insert(name, price, publisher);
if(insert>0){
response.sendRedirect("/BookServlet");
}
}
//展示全部
private void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
List<Book> all = bookDao.findAll();
request.setAttribute("book",all);
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
}
package com.ghx.servlet;
import com.ghx.dao.UserDao;
import com.ghx.entity.User;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "UserServlet", value = "/UserServlet")
public class UserServlet extends HttpServlet {
private UserDao userDao=new UserDao();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String method = request.getParameter("method");
if("login".equals(method)){
login(request,response);
}else if("register".equals(method)){
register(request,response);
}else if("logout".equals(method)){
logout(request,response);
}
}
//退出系统
private void logout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
HttpSession session = request.getSession();
User user = (User) session.getAttribute("userinfo");
session.removeAttribute("userinfo");
response.sendRedirect("/login.jsp");
}
//注册
private void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String username = request.getParameter("username");
String password = request.getParameter("password");
String realname = request.getParameter("realname");
String age = request.getParameter("age");
int add = userDao.add(username, password, realname, age);
if(add>0){
response.sendRedirect("/login.jsp?success=1");
}else {
request.setAttribute("error2","<span style=\"color: red \">注册失败,用户名已存在!</span>");
request.getRequestDispatcher("/register.jsp?error2").forward(request,response);
}
}
//登录
private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userDao.find(username, password);
if(user!=null){
request.getSession().setAttribute("userinfo",user);
response.sendRedirect("/BookServlet");
}else {
request.setAttribute("error","<span style=\"color: red \">用户名或密码错误!</span>");
request.getRequestDispatcher("/login.jsp?error").forward(request,response);
}
}
}
页面
login.jsp
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2024/12/3
Time: 16:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
<style>
/* 整体页面背景设置 */
body {
font-family: Arial, sans-serif;
/* background-image: url('背景图片路径');*/
background-size: cover;
background-repeat: no-repeat;
background-position: center;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
/* 登录框样式 */
.login-box {
background-color: rgba(255, 255, 255, 0.8);
padding: 40px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
/* 标题样式 */
h2 {
text-align: center;
margin-bottom: 30px;
color: #333;
}
/* 输入框样式 */
input[type="text"],
input[type="password"] {
width: 100%;
padding: 15px;
margin-bottom: 20px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
}
/* 登录按钮样式 */
input[type="submit"] {
width: 100%;
padding: 15px;
background-color: #007BFF;
color: white;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #0056b3;
}
/* 注册链接样式 */
.register-link {
text-align: center;
margin-top: 15px;
}
a {
color: #007BFF;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="login-box">
<h2>登录</h2>
<div>
</div>
<form action="/UserServlet?method=login" method="post">
<input type="text" placeholder="用户名" name="username">
<input type="password" placeholder="密码" name="password">
<input type="submit" value="登录">
</form>
<div class="register-link">
<a href="/register.jsp">还没有账号?注册</a>
</div>
<div>
${error}
</div>
</div>
</body>
</html>
register.jsp
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2024/12/3
Time: 16:46
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册</title>
<style>
/* 整体页面背景设置 */
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
/* 注册框样式 */
.register-box {
background-color: white;
padding: 40px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
width: 400px;
}
/* 标题样式 */
h2 {
text-align: center;
margin-bottom: 30px;
color: #333;
}
/* 输入框通用样式 */
input[type="text"],
input[type="password"],
input[type="email"],
input[type="number"]{
width: 100%;
padding: 15px;
margin-bottom: 20px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 16px;
}
/* 注册按钮样式 */
input[type="submit"] {
width: 100%;
padding: 15px;
background-color: #007BFF;
color: white;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #007BFF;
}
/* 已有账号登录链接样式 */
.login-link {
text-align: center;
margin-top: 20px;
}
a {
color: #007BFF;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="register-box">
<h2>注册新账号</h2>
<form action="/UserServlet?method=register" method="post">
<input type="text" placeholder="用户名" name="username">
<input type="password" placeholder="设置密码" name="password">
<input type="text" placeholder="真实姓名" name="realname">
<input type="number" placeholder="年龄" name="age">
<input type="submit" value="注册">
</form>
<div class="login-link">
<a href="login.jsp">已有账号?点击登录</a>
</div>
${error2}
</div>
</body>
</html>
index.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.ghx.entity.User" %><%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2024/12/4
Time: 9:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
<style>
/* 全局样式重置与基础设置 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
background-color: #f4f9ff;
color: #333;
line-height: 1.6;
}
/* 页面头部样式 */
header {
background-color: #007bff;
color: white;
text-align: center;
padding: 20px 0;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
header h1 {
margin: 0;
}
/* 导航栏样式 */
nav {
background-color: #0056b3;
padding: 10px 0;
}
nav ul {
list-style-type: none;
display: flex;
justify-content: center;
align-items: center;
}
nav ul li {
margin: 0 15px;
color: white;
}
nav a {
color: white;
text-decoration: none;
padding: 8px 15px;
border-radius: 4px;
transition: background-color 0.3s ease;
}
nav a:hover {
background-color: #003d80;
}
/* 主要内容区域样式 */
main {
padding: 20px;
max-width: 1000px;
margin: 20px auto;
background-color: white;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 5px;
}
main h1 {
text-align: center;
margin-bottom: 20px;
color: #007bff;
}
/* 表格样式 */
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
border: 1px solid #ccc;
}
table th,
table td {
border: 1px solid #ccc;
padding: 12px;
text-align: center;
}
table th {
background-color: #e6f7ff;
color: #333;
font-weight: bold;
}
table tr:nth-child(even) {
background-color: #f9f9f9;
}
table tr:hover {
background-color: #e9f3ff;
cursor: pointer;
}
/* 操作链接样式 */
table td a {
color: #007bff;
text-decoration: none;
margin: 0 5px;
padding: 5px 10px;
border-radius: 3px;
transition: background-color 0.3s ease, color 0.3s ease;
}
table td a:hover {
background-color: #007bff;
color: white;
}
/* 退出按钮样式 */
.logout {
float: right;
margin-right: 20px;
color: white;
text-decoration: none;
padding: 8px 15px;
border-radius: 4px;
background-color: #dc3545;
transition: background-color 0.3s ease;
display: flex;
align-items: center;
}
.logout:hover {
background-color: #c82333;
}
.logout i {
margin-right: 5px;
}
/* 修改成功提示样式 */
.success-message {
text-align: center;
color: green;
margin-bottom: 20px;
font-weight: bold;
display: none;
}
</style>
</head>
<body>
<c:if test="${sessionScope.userinfo==null}">
<c:redirect url="login.jsp"></c:redirect>
</c:if>
<header>
<h1>书籍信息管理系统</h1>
</header>
<nav>
<ul><li>欢迎${sessionScope.userinfo.realname}登录</li></ul>
<ul>
<li><a href="#">首页</a></li>
<li><a href="/insert.jsp">添加</a></li>
<a href="/UserServlet?method=logout" class="logout">退出</a>
</ul>
</nav>
<main>
<table>
<tr>
<th>书籍id</th>
<th>书籍名</th>
<th>价格</th>
<th>出版社</th>
<th>操作</th>
</tr>
<c:forEach items="${requestScope.book}" var="b">
<tr>
<td>${b.id}</td>
<td>${b.name}</td>
<td>${b.price}</td>
<td>${b.publisher}</td>
<td>
<a href="/BookServlet?method=delete&id=${b.id}" onclick="return confirm('确定要删除该条信息吗?');">删除</a>
<a href="/BookServlet?method=getById&id=${b.id}">修改</a>
</td>
</tr>
</c:forEach>
</table>
</main>
</body>
</html>
insert.jsp
<%@ page import="com.ghx.entity.User" %><%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2024/12/4
Time: 10:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<style>
/* 全局样式重置,去除浏览器默认样式差异 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Roboto', sans-serif; /* 使用更现代的字体 */
background-color: #eef2f7; /* 淡蓝色系背景,营造清新氛围 */
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
/* 主要内容容器样式 */
.main-container {
width: 500px; /* 设定合适的宽度 */
background-color: white;
border-radius: 8px; /* 较大的圆角,更显柔和 */
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); /* 柔和阴影效果 */
overflow: hidden; /* 隐藏超出部分,确保圆角效果正常显示 */
}
/* 标题样式 */
h2 {
background-color: cornflowerblue; /* 标题栏蓝色背景 */
color: white;
text-align: center;
padding: 15px 0;
margin-bottom: 20px;
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
}
th, td {
border-bottom: 1px solid #e0e0e0; /* 仅底部显示边框,简洁风格 */
padding: 12px 20px;
text-align: left;
}
th {
font-weight: normal; /* 表头字体不加粗,更显简洁 */
color: #777; /* 表头文字灰色,区分数据 */
}
input[type="text"] {
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #f9f9f9; /* 输入框浅灰色背景,更清晰 */
color: #333; /* 输入框文字颜色 */
outline: none; /* 去除输入框聚焦时的默认边框 */
transition: background-color 0.2s ease; /* 背景色过渡效果 */
}
input[type="text"]:focus {
background-color: white; /* 输入框聚焦时变白,增强交互感 */
}
input[type="submit"] {
display: block;
width: 100%;
padding: 10px 0;
background-color: #2ecc71; /* 绿色提交按钮,更醒目积极 */
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease; /* 背景色过渡效果 */
}
input[type="submit"]:hover {
background-color: #27ae60; /* 悬停时加深绿色 */
}
</style>
</head>
<body>
<c:if test="${sessionScope.userinfo==null}">
<c:redirect url="login.jsp"></c:redirect>
</c:if>
<div class="main-container">
<h2>书籍信息</h2>
<form action="/BookServlet?method=insert" method="post"> <!-- 添加表单标签,假设提交到当前页面,实际需修改action属性指向处理逻辑 -->
<table>
<tr>
<th>书籍名:</th>
<td><input type="text" name="name"></td>
</tr>
<tr>
<th>书籍价格:</th>
<td><input type="text" name="price"></td>
</tr>
<tr>
<th>出版社:</th>
<td><input type="text" name="publisher"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确认添加"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
update.jsp
<%@ page import="com.ghx.entity.User" %><%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2024/12/4
Time: 10:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<style>
/* 全局样式重置,去除浏览器默认样式差异 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Roboto', sans-serif; /* 使用更现代的字体 */
background-color: #eef2f7; /* 淡蓝色系背景,营造清新氛围 */
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
/* 主要内容容器样式 */
.main-container {
width: 500px; /* 设定合适的宽度 */
background-color: white;
border-radius: 8px; /* 较大的圆角,更显柔和 */
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); /* 柔和阴影效果 */
overflow: hidden; /* 隐藏超出部分,确保圆角效果正常显示 */
}
/* 标题样式 */
h2 {
background-color: cornflowerblue; /* 标题栏蓝色背景 */
color: white;
text-align: center;
padding: 15px 0;
margin-bottom: 20px;
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
}
th, td {
border-bottom: 1px solid #e0e0e0; /* 仅底部显示边框,简洁风格 */
padding: 12px 20px;
text-align: left;
}
th {
font-weight: normal; /* 表头字体不加粗,更显简洁 */
color: #777; /* 表头文字灰色,区分数据 */
}
input[type="text"] {
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #f9f9f9; /* 输入框浅灰色背景,更清晰 */
color: #333; /* 输入框文字颜色 */
outline: none; /* 去除输入框聚焦时的默认边框 */
transition: background-color 0.2s ease; /* 背景色过渡效果 */
}
input[type="text"]:focus {
background-color: white; /* 输入框聚焦时变白,增强交互感 */
}
input[type="submit"] {
display: block;
width: 100%;
padding: 10px 0;
background-color: #2ecc71; /* 绿色提交按钮,更醒目积极 */
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease; /* 背景色过渡效果 */
}
input[type="submit"]:hover {
background-color: #27ae60; /* 悬停时加深绿色 */
}
</style>
</head>
<body>
<c:if test="${sessionScope.userinfo==null}">
<c:redirect url="login.jsp"></c:redirect>
</c:if>
<div class="main-container">
<h2>书籍信息</h2>
<form action="/BookServlet?method=update" method="post"> <!-- 添加表单标签,假设提交到当前页面,实际需修改action属性指向处理逻辑 -->
<table>
<tr>
<th>书籍id:</th>
<td><input type="text" value="${bookid.id}" name="id" readonly></td>
</tr>
<tr>
<th>书籍名:</th>
<td><input type="text" value="${bookid.name}" name="name"></td>
</tr>
<tr>
<th>书籍价格:</th>
<td><input type="text" value="${bookid.price}" name="price"></td>
</tr>
<tr>
<th>出版社:</th>
<td><input type="text" value="${bookid.publisher}" name="publisher"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确认添加"></td>
</tr>
</table>
</form>
</div>
</body>
</html>