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

  1. 在上题中图书信息的后面增加一个“添加到购物车”链接,单击可以将图书添加到购物车。在页面底部有一个“查看购物车”链接,可以到另一个页面中查看购物车中的内容。在购物车内容显示时,后面有一个“从购物车中删除”链接,单击,又能将该图书从购物车中删除。要求所有的动作由Servlet完成。

解析

先完成第一题
仿照search.jsp,写个cart.jsp。注意“删除”是一个超链接,并且在链接后面还要跟上id这个参数,方便后面Servlet的删除操作(其实传递数组下标会更加方便)

<h2>购物车</h2>
<hr>
<%
    ArrayList<book> cart = (ArrayList<book>) session.getAttribute("cart");
    if (cart != null) {
%>
<table>
    <tr>
        <th>图书ID</th>
        <th>图书名称</th>
        <th>图书价格</th>
        <th>操作</th>
    </tr>
    <%
            for (book b : cart) {
                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/deleteServlet?id=%s\">删除</a></td>", b.id));
                out.print("</tr>");
            }
        }
    %>
</table><br>
<a href="search.jsp">返回查询页面</a>

记得在search,jsp中加上超链接跳转到cart.jsp

<a href="cart.jsp">查看购物车</a>

然后再写DeleteServlet,一些细节参见注释

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

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

        HttpSession session = request.getSession();
        ArrayList<book> cart = (ArrayList<book>) session.getAttribute("cart");
        String id = request.getParameter("id");
        if (id != null && cart != null) {
            for (book b : cart) {
                if (b.id.equals(id)) {  // 其实也可以根据下标删除,但是我这里懒得改了
                    cart.remove(b);
                    break;
                }
            }
            session.setAttribute("cart", cart);  // 要把修改后的cart存入session
            PrintWriter out = response.getWriter();
            out.print("<script>alert('删除成功!');window.location.href='chapter9/9_1/cart.jsp'</script>");  // 记得跳转回cart.jsp。我在这里还加了个提示框表明删除成功
        }
    }

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

代码

cart.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>
<h2>购物车</h2>
<hr>
<%
    ArrayList<book> cart = (ArrayList<book>) session.getAttribute("cart");
    if (cart != null) {
%>
<table>
    <tr>
        <th>图书ID</th>
        <th>图书名称</th>
        <th>图书价格</th>
        <th>操作</th>
    </tr>
    <%
            for (book b : cart) {
                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/deleteServlet?id=%s\">删除</a></td>", b.id));
                out.print("</tr>");
            }
        }
    %>
</table><br>
<a href="search.jsp">返回查询页面</a>
</body>
</html>

DeleteServlet.java

package chapter9.servlet;

import chapter9.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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.ArrayList;

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

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

        HttpSession session = request.getSession();
        ArrayList<book> cart = (ArrayList<book>) session.getAttribute("cart");
        String id = request.getParameter("id");
        if (id != null && cart != null) {
            for (book b : cart) {
                if (b.id.equals(id)) {
                    cart.remove(b);
                    break;
                }
            }
            session.setAttribute("cart", cart);
            PrintWriter out = response.getWriter();
            out.print("<script>alert('删除成功!');window.location.href='chapter9/9_1/cart.jsp'</script>");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值