简易图书管理系统

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;
    }
}
java 复制代码
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

java 复制代码
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);
        }
    }
}
java 复制代码
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);
    }
}
java 复制代码
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

java 复制代码
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);
    }

}
java 复制代码
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

java 复制代码
<%--
  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

java 复制代码
<%--
  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

java 复制代码
<%@ 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

java 复制代码
<%@ 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

java 复制代码
<%@ 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>
相关推荐
李慕婉学姐3 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆5 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin5 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20055 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉5 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国5 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882486 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈6 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_996 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹6 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理