- 在上题中图书信息的后面增加一个“添加到购物车”链接,单击可以将图书添加到购物车。在页面底部有一个“查看购物车”链接,可以到另一个页面中查看购物车中的内容。在购物车内容显示时,后面有一个“从购物车中删除”链接,单击,又能将该图书从购物车中删除。要求所有的动作由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);
}
}