所有章节答案合集——>传送门


【测一测】
学习完前面的内容,下面来动手测一测吧,请思考以下问题:
1、简述什么是会话技术?

2、简述Cookie与Session的区别?(至少写出3点)

3、请设计一个类,使用Cookie技术实现显示用户上次访问时间的功能。
要求如下:
1)创建一个LastAccessServlet类,使其继承HttpServlet类并重写该类的doGet()方法。
2)在doGet()方法中,使用request.getCookies()得到所有cookie形成的cookie数组,并进行遍历。
3)如果遍历过程中找到cookie信息中存在lastAccess属性则输出,否则创建cookie对象设置值为当前时间并发送给客户端。
4)cookie的存活时间为1小时,访问当前应用中的所有资源客户端都回送cookie信息。

4、请设计一个程序,使用Session技术实现购物车功能。


【答案】

1、会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程。在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session。

2、Cookie与Session主要有如下区别:
1)Cookie和HttpSession是保存会话相关数据的技术,其中Cookie将信息存储在浏览器端,是客户端技术,Session将数据保存在服务器端,是服务器端技术
2)Cookie是基于HTTP协议中的Set-Cookie响应头和Cookie请求头进行工作的
3)默认情况下HttpSession是基于一个名称为JSESSIONID 的特殊Cookie工作的
4)浏览器对Cookie具有严格的限制,一个网站能在浏览器中保存多少Cookie是有限制的
5)HttpSession默认是基于Cookie运作的。

3、该功能的实现步骤如下:
1)创建一个LastAccessServlet类,使其继承HttpServlet类并重写该类的doGet()方法。
2)在doGet()方法中,使用request.getCookies()得到所有cookie形成的cookie数组,并进行遍历。
3)如果遍历过程中找到cookie信息中存在lastAccess属性则输出,否则创建cookie对象设置值为当前时间并发送给客户端。
4)cookie的存活时间为1小时,访问当前应用中的所有资源客户端都回送cookie信息。
(1)LastAccessServlet类的实现代码如下:

public class LastAccessServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");/** 设定一个 cookie 的name : lastAccessTime 读取客户端发送cookie * 获得用户上次的访问时间显示*/String lastAccessTime = null;// 获取所有的cookie,并将这些cookie存放在数组中Cookie[] cookies = request.getCookies();for (int i = 0; cookies != null && i < cookies.length; i++) {if ("lastAccess".equals(cookies[i].getName())) {// 如果cookie的名称为lastAccess,则获取该cookie的值lastAccessTime = cookies[i].getValue();break;}}// 判断是否存在名称为lastAccess的cookieif (lastAccessTime == null) {response.getWriter().print("您是首次访问本站!!!");} else {response.getWriter().print("您上次的访问时间" + lastAccessTime);}// 创建cookie,将当前时间作为cookie的值发送给客户端Cookie cookie = new Cookie("lastAccess", new Date().toLocaleString());cookie.setMaxAge(60 * 60);// 保存1小时// 访问chapter05下资源时回送cookiecookie.setPath("/chapter05");// 发送 cookieresponse.addCookie(cookie);}
}

(2)web.xml文件配置如下:

<servlet><servlet-name>LastAccessServlet</servlet-name><servlet-class>cn.itcast.chapter05.servlet.LastAccessServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>LastAccessServlet</servlet-name><url-pattern>/LastAccessServlet</url-pattern>
</servlet-mapping>

4、该功能的实现代码如下:
(1)书籍Book类的创建如下:

public class Book implements Serializable {private static final long serialVersionUID = 1L;private String id;private String name;public Book() {}public Book(String id, String name) {this.id = id;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

(2)书籍数据库模拟类BookDB的代码如下:

private static Map<String, Book> books = new LinkedHashMap<String, Book>();static {books.put("1", new Book("1", "javaweb开发"));books.put("2", new Book("2", "jdbc开发"));books.put("3", new Book("3", "java基础"));books.put("4", new Book("4", "struts开发"));books.put("5", new Book("5", "spring开发"));}// 获得所有的图书public static Collection<Book> getAll() {return books.values();}// 根据指定的id获得图书public static Book getBook(String id) {return books.get(id);}
}

(3)显示可购买图书的列表类ListBookServlet的代码如下:

public class ListBookServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();Collection<Book> books = BookDB.getAll();out.write("本站提供的图书有:<br>");for (Book book : books) {String url = "/chapter05/PurchaseServlet?id=" + book.getId();out.write(book.getName() + "<a href='" + url + "'>点击购买</a><br>");}}
}

(4)购物功能类PurchaseServlet的代码如下:

public class PurchaseServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 获得用户购买的商品String id = req.getParameter("id");if (id == null) {// 如果id为null,重定向到ListBookServlet页面String url = "/chapter05/ListBookServlet";resp.sendRedirect(url);return;}Book book = BookDB.getBook(id);// 创建或者获得用户的Session对象HttpSession session = req.getSession();// 从Session对象中获得用户的购物车List<Book> cart = (List) session.getAttribute("cart");if (cart == null) {// 首次购买,为用户创建一个购物车(List集合模拟购物车)cart = new ArrayList<Book>();// 将购物城存入Session对象session.setAttribute("cart", cart);}// 将商品放入购物车cart.add(book);// 创建Cookie存放Session的标识号Cookie cookie = new Cookie("JSESSIONID", session.getId());cookie.setMaxAge(60 * 30);cookie.setPath("/chapter05");resp.addCookie(cookie);// 重定向到购物车页面String url = "/chapter05/CartServlet";resp.sendRedirect(url);}
}

(5)展示所购图书类CartServlet的代码如下:

public class CartServlet extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();// 变量cart引用用户的购物车List<Book> cart = null;// 变量pruFlag标记用户是否买过商品boolean purFlag = true;// 获得用户的sessionHttpSession session = req.getSession(false);// 如果session为null,purFlag置为falseif (session == null) {purFlag = false;} else {// 获得用户购物车cart = (List) session.getAttribute("cart");// 如果用的购物车为null,purFlag置为falseif (cart == null) {purFlag = false;}}/** 如果purFlag为false,表明用户没有购买图书 重定向到ListServlet页面*/if (!purFlag) {out.write("对不起!您还没有购买任何商品!<br>");} else {// 否则显示用户购买图书的信息out.write("您购买的图书有:<br>");double price = 0;for (Book book : cart) {out.write(book.getName() + "<br>");}}}
}

(6)web.xml文件配置如下:

   <servlet><display-name>ListBookServlet</display-name><servlet-name>ListBookServlet</servlet-name><servlet-class>
cn.itcast.chapter05.session.example01.ListBookServlet
</servlet-class></servlet><servlet-mapping><servlet-name>ListBookServlet</servlet-name><url-pattern>/ListBookServlet</url-pattern></servlet-mapping><servlet><display-name>PurchaseServlet</display-name><servlet-name>PurchaseServlet</servlet-name><servlet-class>
cn.itcast.chapter05.session.example01.PurchaseServlet
</servlet-class></servlet><servlet-mapping><servlet-name>PurchaseServlet</servlet-name><url-pattern>/PurchaseServlet</url-pattern></servlet-mapping><servlet><display-name>CartServlet</display-name><servlet-name>CartServlet</servlet-name><servlet-class>
cn.itcast.chapter05.session.example01.CartServlet
</servlet-class></servlet><servlet-mapping><servlet-name>CartServlet</servlet-name><url-pattern>/CartServlet</url-pattern></servlet-mapping>

整理不易, 如果喜欢的话,还请给博主一个赞哦,让更多的人看到这篇文章

【传智播客】Javaweb程序设计任务教程 黑马程序员 第五章 课后答案相关推荐

  1. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第三章 课后答案

    所有章节答案合集-->传送门 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.请列举Servlet接口中的方法,并分别说明这些方法的特点及其作用. 2.简述Servlet ...

  2. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第六章 课后答案

    所有章节答案合集-->传送门 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.请简述JSP的运行原理. 1.请简述JSP中的9个隐式对象. 2.请使用include标签编 ...

  3. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第四章 课后答案

    所有章节答案合集-->传送门 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.简述请求转发与重定向的异同?(至少写3点) 2.请写出禁止浏览器缓存页面的核心代码. 3.请 ...

  4. HTML+CSS+JavaScript网页制作案例教程-黑马程序员-第五章课后习题(课程介绍专栏效果)

    黑马程序员编著的教材  HTML+CSS+JavaScript网页制作案例教程 第五章:"课程介绍"专栏-课后习题参考代码 题目原型: 请结合给出的素材,运用列表标记,超链接标记以 ...

  5. 【传智播客】Javaweb程序设计任务教程 黑马程序员 课后答案【合集】

    [传智播客]Javaweb程序设计任务教程 黑马程序员 第一章 课后答案 [传智播客]Javaweb程序设计任务教程 黑马程序员 第二章 课后答案 [传智播客]Javaweb程序设计任务教程 黑马程序 ...

  6. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第7,8,9,10,11,12,13,14,15章 课后答案

    所有章节答案合集-->传送门 第一部分是题目,向下翻, 第二部分是答案 第七章 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.简述Javabean规范都有哪些?(至少写 ...

  7. HTML+CSS+JavaScript网页制作案例教程-黑马程序员-第四章课后习题(播放器图标)

    黑马程序员编著的教材  HTML+CSS+JavaScript网页制作案例教程 第四章:播放器图标-课后习题参考代码 ........ 记得 关注,收藏,评论哦,作者将持续更新.... 我自己做的效果 ...

  8. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第二章 课后答案

    所有章节答案合集-->传送门 第二章 问题 [测一测] 学习完前面的内容,下面来动手测一测吧,请思考以下问题: 1.简述HTTP1.1协议的通信过程? 2.简述POST请求和GET请求有什么不同 ...

  9. 传智播客JavaWeb day11--事务的概念、事务的ACID、数据库锁机制、

    1. 什么叫做事务? 2.默认情况下每一条sql语句都是一个事务,然后自动提交事务  ps:如果想多条语句占一个事务,则可以手动设置SetAutoCommit为false 3.关键字 start tr ...

最新文章

  1. 特殊用户邮箱附件大小设置
  2. 使用ckeditor
  3. 【Linux内非root安装】graphviz安装
  4. script 有哪个属性可以让它不立即执行 defer,async
  5. Quick Search Articles in My Blog
  6. 为什么已有Elasticsearch,我们还要重造实时分析引擎AresDB?
  7. HTTP协议详细资料
  8. c语言的数组在栈区还是,用数组实现栈的功能的C语言代码?
  9. Spark WordCount
  10. 干货整理!10个Python图像处理工具,入门必看,提效大法 | 资源
  11. 华三 h3c VRRP、MSTP、OSPF综合实验
  12. 微信小程序 --- 物流快递查询
  13. error Code:410 Error Message:appid and openid not match 威富通技术支持,兴业银行微信支付接入支持
  14. JS 验证身份证及获取地区
  15. Postman高级用法
  16. 【getchar】在C语言中getchar的使用方法和读取规则
  17. android沉浸式模式简书,Android-沉浸式模式
  18. 计算机基础做表格,表格的制作计算机基础.doc
  19. Python:实现floor向下取整算法(附完整源码)
  20. springboot+security实例

热门文章

  1. 第27讲:令人抓狂的 JavaScript 混淆技术
  2. 搞懂这些SQL优化技巧,面试横着走
  3. SQL 性能优化梳理 —— 基本概念、创建时优化、查询时优化
  4. 慌!还不了解Java中的分支预测?!
  5. MySQL:为什么用limit时,offset很大会影响性能
  6. 多图 | 操作系统中,进程与线程怎么设计的?
  7. 开天辟地 —— Go scheduler 初始化(二)
  8. 网络编程套接字(三)
  9. 【今晚七点半】:多媒体开源PI
  10. FFmpeg Maintainer赵军:FFmpeg关键组件与硬件加速