JavaWeb实验第二弹,内容依旧很简单,设计前端js的理解,后端servlet代码编写。
实验内容:
实验2:改写cookie-shop项目的购物车功能
1、在学习通“Java程序设计”的:“资料 > 7 实验 > Java Web高级编程 > 2024春季学期”中找到项目源码cookie-shop.zip和“蛋糕商城:准备数据库和cookie-shop项目.txt”这个说明文件,参照说明,建立数据库后,将项目跑起来;
2、使用系统管理员登录后,进入“后台管理”,在类目管理里边创建蛋糕的种类,有:冰淇淋系列、零食系列、儿童系列、法式系列、经典系列、节日系列、买不起系列;
3、在“商品管理”功能里,添加若干蛋糕,图片可以选择源码src\main\webapp\picture中提供的图片,每种蛋糕图片有3张;
4、退出管理员登录,注册一个普通用户;
5、登录普通用户,浏览蛋糕,点击“加入购物车”按钮;
6、再点击右上角的“购物车”图标,将无法显示购物车中已经购买的蛋糕。
如果上述操作顺利,完成下边实验任务:改写购物车功能(10分)
(前提:我已经将购物车功能对应的goods_cart.jsp文件改为了goods_cart.html)
1、打开goods_cart.html,找到注释中“任务点1”和“任务点2”,是此次实验要完成的任务;
2、完成任务后,运行项目,点击右上角的“购物车”图标,将显示购物车中已经购买的蛋糕。
检查点1:代码功能是否正常;
检查点2:是否理解代码,包含前端和后端代码;
检查点3:是否会设断点调试,包括前端和后端调试;
检查点4:是否会利用工具观察HTTP请求和响应。
1.任务点1
任务点1:根据下方已经写好的AJAX GET请求,写出服务器端对应的Servlet
提示:
(1)下方的AJAX请求,功能为获得系统内的蛋糕类型列表(蛋糕类型由管理员负责输入,在”后台管理“的”类目管理“中输入)
(2)蛋糕类型放在服务器端的Servlet Context中,通过键名”typeList“获取,数据类型是List<Type>, 对应于数据库中的type表
(3)转换成JSON字符串作为响应内容,MIME类型是“application/json”
(4)如何转换成JSON字符串?可以使用Jackson、Gson、json-lib等第三方组件,具体可以AI辅助
此处使用Jackson第三方组件来实现JSON字符串的转化。
检查是否在pom.xml中已加载坐标依赖。
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.1</version> </dependency>
此任务点,前端发起/typeList请求,后端通过放在服务器端的Servlet Context中的数据,通过键名”typeList“的属性获取蛋糕类型,然后再转化为json字符串传给前端解析渲染。
List<Type> typeList = (List<Type>) getServletContext().getAttribute("typeList");
String jsonTypes = mapper.writeValueAsString(typeList);
实现代码为:
@WebServlet("/typeList")
public class TypeListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应内容类型为JSON
response.setContentType("application/json;charset=UTF-8");
// 从ServletContext中获取类型列表
List<Type> typeList = (List<Type>) getServletContext().getAttribute("typeList");
if (typeList != null && !typeList.isEmpty()) {
ObjectMapper mapper = new ObjectMapper();
String jsonTypes = mapper.writeValueAsString(typeList);
response.getWriter().write(jsonTypes);
} else {
response.getWriter().write("[]");
}
}
}
2.任务点2
任务点2:根据下方已经写好的AJAX GET请求,写出服务器端对应的Servlet
提示: (1)下方的AJAX请求,功能为获得当前购物车中的选购蛋糕清单(蛋糕由普通用户购买)
(2)此清单放在服务器端的Session中,属性名是"order",数据类型是Order,对应于数据库中的order表
(3)转换成JSON字符串作为响应内容,MIME类型是“application/json”
(4)如何转换成JSON字符串?可以使用Jackson、Gson、json-lib等第三方组件,具体可以AI辅助
实现原理同上,只不过此时是从放在服务器端的Session中获取订单信息(对应于数据库中的order表)
实现代码:
@WebServlet("/orderList")
public class OrderListServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应头的MIME类型为application/json
response.setContentType("application/json;charset=UTF-8");
User u = (User) request.getSession().getAttribute("user");
if(u==null)
{
response.sendRedirect("/index");
return;
}
Order list = (Order) request.getSession().getAttribute("order");
if (list != null) {
ObjectMapper mapper = new ObjectMapper();
String jsonOrders = mapper.writeValueAsString(list);
response.getWriter().write(jsonOrders);
} else {
response.getWriter().write("[]");
}
}
}
如有问题,欢迎评论区留言讨论!