JavaWeb进阶案例-处理存储在服务器端的数据(ServletContext、Session)

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("[]");
        }
    }
}

如有问题,欢迎评论区留言讨论!

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值