Java Web程序设计第9章课后第1题

  1. 编写图书模糊查询界面,输入图书名称的模糊资料,在界面下方显示图书信息,要求提交给Servlet完成。

解析

在数据库中建个表
在这里插入图片描述
然后简单地弄一个book类

public class book {
    public String id;
    public String name;
    public double price;

    public book(String id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
}

search.jsp中先搭个框架

<form action="一会要创建的Servlet" method="post">
    请输入要查找的书名:<input name="name" type="text">
    <input type="submit" value="查询">
</form>
<table>
    <tr>
        <th>图书ID</th>
        <th>图书名称</th>
        <th>图书价格</th>
        <th>操作</th>
    </tr>
    <!-- 这里一会要插入JSP代码 -->
</table>

新建一个FuzzyLookupServlet

@WebServlet(name = "FuzzyLookupServlet", urlPatterns = {"/fuzzyLookupServlet"})
public class FuzzyLookupServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理响应乱码
        response.setContentType("text/html;charset=utf-8");

        // 处理请求乱码
        request.setCharacterEncoding("utf-8");

        String name = request.getParameter("name");
        if (name != null) {
            try {
                // 1、导入驱动jar包
                // 2、注册驱动
                Class.forName("com.mysql.cj.jdbc.Driver");
                // 3、获取数据库的连接对象
                Connection conn = DriverManager.getConnection("你的数据库", "用户名", "你的密码");
                // 4、定义sql语句
                String sql = "select * from book where name like '%" + name + "%'";
                // 5、获取执行sql语句的对象
                PreparedStatement ps = conn.prepareStatement(sql);
                // 6、执行sql并接收返回结果
                ResultSet rs = ps.executeQuery(sql);
                // 7、处理结果
                ArrayList<book> res = new ArrayList<book>();
                while (rs.next()) {
                    res.add(new book(rs.getString(1), rs.getString(2), rs.getDouble(3)));
                }
                HttpSession session = request.getSession();
                session.setAttribute("result", res);  // 把查询到的结果存放在session中
                // 8、释放资源
                ps.close();
                conn.close();
                // 9、跳转
                request.getRequestDispatcher("/chapter9/9_1/search.jsp").forward(request, response);  // 查询完毕后要返回到search.jsp
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
    }

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

回到search.jsp,先把form action补齐,如

<form action="/JavaWebCDUT/fuzzyLookupServlet" method="post">

然后补全JSP代码

<%
    ArrayList<book> res = (ArrayList<book>) session.getAttribute("result");
    if (res != null) {
%>
<table>
    <tr>
        <th>图书ID</th>
        <th>图书名称</th>
        <th>图书价格</th>
        <th>操作</th>
    </tr>
    <%
            for (book b : res) {
                out.print("<tr>");
                out.print("<td>" + b.id + "</td>");
                out.print("<td>" + b.name + "</td>");
                out.print("<td>" + b.price + "</td>");
                out.print(String.format("<td><a href=\"/JavaWebCDUT/addToCartServlet?id=%s\">添加到购物车</a></td>", b.id));
                out.print("</tr>");
            }
        }
    %>

完整代码

search.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="chapter9.book" %>
<%@ page import="java.util.ArrayList" %>
<html>
<head>
    <title>模糊查询</title>
</head>
<body>
<form action="/JavaWebCDUT/fuzzyLookupServlet" method="post">
    请输入要查找的书名:<input name="name" type="text">
    <input type="submit" value="查询">
</form>
<%
    ArrayList<book> res = (ArrayList<book>) session.getAttribute("result");
    if (res != null) {
%>
<table>
    <tr>
        <th>图书ID</th>
        <th>图书名称</th>
        <th>图书价格</th>
        <th>操作</th>
    </tr>
    <%
            for (book b : res) {
                out.print("<tr>");
                out.print("<td>" + b.id + "</td>");
                out.print("<td>" + b.name + "</td>");
                out.print("<td>" + b.price + "</td>");
                out.print(String.format("<td><a href=\"/JavaWebCDUT/addToCartServlet?id=%s\">添加到购物车</a></td>", b.id));
                out.print("</tr>");
            }
        }
    %>
</table>
</body>
</html>

FuzzyLookupServlet.java

package chapter9.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;

import chapter9.book;

import static java.lang.System.out;

@WebServlet(name = "FuzzyLookupServlet", urlPatterns = {"/fuzzyLookupServlet"})
public class FuzzyLookupServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理响应乱码
        response.setContentType("text/html;charset=utf-8");

        // 处理请求乱码
        request.setCharacterEncoding("utf-8");

        String name = request.getParameter("name");
        if (name != null) {
            try {
                // 1、导入驱动jar包
                // 2、注册驱动
                Class.forName("com.mysql.cj.jdbc.Driver");
                // 3、获取数据库的连接对象
                Connection conn = DriverManager.getConnection("你的数据库", "用户名", "你的密码");
                // 4、定义sql语句
                String sql = "select * from book where name like '%" + name + "%'";
                // 5、获取执行sql语句的对象
                PreparedStatement ps = conn.prepareStatement(sql);
                // 6、执行sql并接收返回结果
                ResultSet rs = ps.executeQuery(sql);
                // 7、处理结果
                ArrayList<book> res = new ArrayList<book>();
                while (rs.next()) {
                    res.add(new book(rs.getString(1), rs.getString(2), rs.getDouble(3)));
                }
                HttpSession session = request.getSession();
                session.setAttribute("result", res);
                // 8、释放资源
                ps.close();
                conn.close();
                // 9、跳转
                request.getRequestDispatcher("/chapter9/9_1/search.jsp").forward(request, response);
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
    }

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

book.java

package chapter9;

public class book {
    public String id;
    public String name;
    public double price;

    public book(String id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
}

AddToCartServlet,java

package chapter9.servlet;

import chapter9.book;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.awt.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;

@WebServlet(name = "addToCartServlet", urlPatterns = {"/addToCartServlet"})
public class AddToCartServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理响应乱码
        response.setContentType("text/html;charset=utf-8");

        // 处理请求乱码
        request.setCharacterEncoding("utf-8");

        String id = request.getParameter("id");
        if (id != null) {
            try {
                // 1、导入驱动jar包
                // 2、注册驱动
                Class.forName("com.mysql.cj.jdbc.Driver");
                // 3、获取数据库的连接对象
                Connection conn = DriverManager.getConnection("你的数据库", "用户名", "你的密码");
                // 4、定义sql语句
                String sql = "select * from book where id = ?";
                // 5、获取执行sql语句的对象
                PreparedStatement ps = conn.prepareStatement(sql);
                // 6、执行sql并接收返回结果
                ps.setString(1, id);
                ResultSet rs = ps.executeQuery();
                // 7、处理结果
                HttpSession session = request.getSession();
                ArrayList<book> cart = (ArrayList<book>) session.getAttribute("cart");
                if (cart == null){
                    cart = new ArrayList<book>();
                }
                while (rs.next()) {
                    cart.add(new book(rs.getString(1), rs.getString(2), rs.getDouble(3)));
                }
                session.setAttribute("cart", cart);
                // 8、释放资源
                ps.close();
                conn.close();
                // 9、跳转
                session.setAttribute("addStatus", true);
                System.out.println("添加成功");
                PrintWriter out = response.getWriter();
                out.print("<script>alert('添加成功!');window.location.href='chapter9/9_1/search.jsp'</script>");
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
    }

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

  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我会为您详细解答。 首先,在数据库中创建 T_BOOK 表,包含图书ID,图书名称和图书价格三个字段,可以使用以下 SQL 语句: ```sql CREATE TABLE T_BOOK ( id INT PRIMARY KEY, name VARCHAR(100), price DECIMAL(10,2) ); ``` 接下来,您可以编写一个简单的 HTML 页面,用于输入图书名称的模糊查询条件,并将查询结果显示在页面上。 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图书查询</title> </head> <body> <form action="BookServlet" method="post"> <label for="name">图书名称:</label> <input type="text" id="name" name="name"> <button type="submit">查询</button> </form> <hr> <table> <thead> <tr> <th>ID</th> <th>名称</th> <th>价格</th> </tr> </thead> <tbody> <%-- 查询结果展示在这里 --%> </tbody> </table> </body> </html> ``` 注意,这里的表单提交方式为 POST,提交的目标为名为 BookServlet 的 Servlet。 接下来,编写 Servlet,用于处理表单提交并查询数据库。以下是一个简单的示例: ```java import java.io.IOException; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/BookServlet") public class BookServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); List<Book> books = new ArrayList<>(); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); String sql = "SELECT id, name, price FROM T_BOOK WHERE name LIKE ?"; ps = con.prepareStatement(sql); ps.setString(1, "%" + name + "%"); rs = ps.executeQuery(); while (rs.next()) { Book book = new Book(); book.setId(rs.getInt("id")); book.setName(rs.getString("name")); book.setPrice(rs.getBigDecimal("price")); books.add(book); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (ps != null) { ps.close(); } if (con != null) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } } request.setAttribute("books", books); request.getRequestDispatcher("/book.jsp").forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public static class Book { private int id; private String name; private BigDecimal price; 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 BigDecimal getPrice() { return price; } public void setPrice(BigDecimal price) { this.price = price; } } } ``` 这个 Servlet 主要做了以下几件事情: 1. 从请求参数中获取图书名称的模糊查询条件; 2. 查询数据库,并将查询结果封装成 Book 对象; 3. 将查询结果保存到请求属性中,并转发到 book.jsp 页面进行展示。 最后,编写 book.jsp 页面,用于展示查询结果: ```html <%@ page contentType="text/html;charset=UTF-8" %> <%@ page import="com.example.BookServlet.Book" %> <html> <head> <meta charset="UTF-8"> <title>图书列表</title> </head> <body> <table> <thead> <tr> <th>ID</th> <th>名称</th> <th>价格</th> </tr> </thead> <tbody> <c:forEach items="${books}" var="book"> <tr> <td>${book.id}</td> <td>${book.name}</td> <td>${book.price}</td> </tr> </c:forEach> </tbody> </table> </body> </html> ``` 在这个页面中,我们使用了 JSTL 标签库来遍历查询结果并展示在表格中。 以上就是一个简单的图书模糊查询界面的实现过程。希望可以帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值