(五)Cookie和Session练习

1.关闭浏览器重新打开,要求可以重新获取原先session中的数据

Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);

2.仿照案例,使用session技术实现购物网站显示浏览记录的功能。
即:浏览过的商品都加入到session。然后在每个商品页面都取出session看看之前浏览过哪些商品。

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

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 java.io.IOException;
import java.util.List;
import java.util.Properties;

@WebServlet("/index")
public class IndexServlet extends HttpServlet {
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

   }

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //访问当前servlet时,页面显示出所有的商品信息
       response.setContentType("text/html;charset=utf-8");
       try {
           QueryRunner runner = new QueryRunner(DruidUtils.getDataSource());
           List<Product> products = runner.query("select * from product", new BeanListHandler<Product>(Product.class));
           for (Product product : products) {
               response.getWriter().println("<a href='" + request.getContextPath() + "/goodsInfo?id=" + product.getId() + "'>" + product.getName() + "</a><br>");
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
       response.getWriter().println("您最近的三条浏览记录为:<br>");
       HistoryUtils.showRecentView(request, response);
   }
}


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 java.io.IOException;

@WebServlet("/history")
public class HistoryServlet extends HttpServlet {
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

   }

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.setContentType("text/html;charset=utf-8");
       HistoryUtils.showRecentView(request,response);
   }
}


import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

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 java.io.IOException;

@WebServlet("/goodsInfo")
public class GoodsInfoServlet extends HttpServlet {
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

   }

   /**
    * 首先商品详情页要显示商品的信息
    * 其次要修改浏览记录
    * @param request
    * @param response
    * @throws ServletException
    * @throws IOException
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.setContentType("text/html;charset=utf-8");
       String id = request.getParameter("id");
       try {
           QueryRunner runner = new QueryRunner(DruidUtils.getDataSource());
           Product product = runner.query("select * from product where id = ?", new BeanHandler<>(Product.class),id);
           response.getWriter().println(product);
           HistoryUtils.updateRecentView(product,request);
       } catch (Exception e) {
           e.printStackTrace();
       }
       response.getWriter().println("<a href='"  + request.getContextPath() + "/history" + "'>查看最近浏览记录</a>");
   }
}


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

public class HistoryUtils {

   /**
    * @param request 通过request获取session对象
    * @param response 直接输出记录到浏览器
    */
   public static void showRecentView(HttpServletRequest request, HttpServletResponse response) throws IOException {
       List<Product> history = (List<Product>) request.getSession().getAttribute("history");
       if(history != null || !history.isEmpty()){
           for (Product product : history) {
               response.getWriter().println("<a href='" + request.getContextPath() + "/goodsInfo?id=" + product.getId() + "'>" + product.getName() + "</a>&nbsp;");
           }
       }
   }

   /**
    *
    * @param product
    * @param request
    */
   public static void updateRecentView(Product product, HttpServletRequest request) {
       LinkedList<Product> history = (LinkedList<Product>) request.getSession().getAttribute("history");
       if(history == null){
           history = new LinkedList<>();
       }
       if(history.contains(product)){
           history.remove(product);
       }else{
           //这里面也可以自定义,显示多少条记录
           if(history.size() > 2){
               history.removeLast();
           }
       }
       history.addFirst(product);
       request.getSession().setAttribute("history", history);
   }
}

3.简述cookie技术和session技术的联系和区别。

Session和Cookie的主要区别在于:
Cookie技术是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。(在浏览器保存)。
Session技术是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的HttpSession对象,
由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,
当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
即把用户的数据写到用户独占的session中。(在服务器端保存)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值