【传智播客】Javaweb程序设计任务教程 黑马程序员 第五章 课后答案
所有章節(jié)答案合集——>傳送門
【測一測】
學習完前面的內(nèi)容,下面來動手測一測吧,請思考以下問題:
1、簡述什么是會話技術?
2、簡述Cookie與Session的區(qū)別?(至少寫出3點)
3、請設計一個類,使用Cookie技術實現(xiàn)顯示用戶上次訪問時間的功能。
要求如下:
1)創(chuàng)建一個LastAccessServlet類,使其繼承HttpServlet類并重寫該類的doGet()方法。
2)在doGet()方法中,使用request.getCookies()得到所有cookie形成的cookie數(shù)組,并進行遍歷。
3)如果遍歷過程中找到cookie信息中存在lastAccess屬性則輸出,否則創(chuàng)建cookie對象設置值為當前時間并發(fā)送給客戶端。
4)cookie的存活時間為1小時,訪問當前應用中的所有資源客戶端都回送cookie信息。
4、請設計一個程序,使用Session技術實現(xiàn)購物車功能。
【答案】
1、會話過程類似于生活中的打電話過程,它指的是一個客戶端(瀏覽器)與Web服務器之間連續(xù)發(fā)生的一系列請求和響應過程。在Servlet技術中,提供了兩個用于保存會話數(shù)據(jù)的對象,分別是Cookie和Session。
2、Cookie與Session主要有如下區(qū)別:
1)Cookie和HttpSession是保存會話相關數(shù)據(jù)的技術,其中Cookie將信息存儲在瀏覽器端,是客戶端技術,Session將數(shù)據(jù)保存在服務器端,是服務器端技術
2)Cookie是基于HTTP協(xié)議中的Set-Cookie響應頭和Cookie請求頭進行工作的
3)默認情況下HttpSession是基于一個名稱為JSESSIONID 的特殊Cookie工作的
4)瀏覽器對Cookie具有嚴格的限制,一個網(wǎng)站能在瀏覽器中保存多少Cookie是有限制的
5)HttpSession默認是基于Cookie運作的。
3、該功能的實現(xiàn)步驟如下:
1)創(chuàng)建一個LastAccessServlet類,使其繼承HttpServlet類并重寫該類的doGet()方法。
2)在doGet()方法中,使用request.getCookies()得到所有cookie形成的cookie數(shù)組,并進行遍歷。
3)如果遍歷過程中找到cookie信息中存在lastAccess屬性則輸出,否則創(chuàng)建cookie對象設置值為當前時間并發(fā)送給客戶端。
4)cookie的存活時間為1小時,訪問當前應用中的所有資源客戶端都回送cookie信息。
(1)LastAccessServlet類的實現(xiàn)代碼如下:
(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、該功能的實現(xiàn)代碼如下:
(1)書籍Book類的創(chuàng)建如下:
(2)書籍數(shù)據(jù)庫模擬類BookDB的代碼如下:
private static Map<String, Book> books = new LinkedHashMap<String, Book>();static {books.put("1", new Book("1", "javaweb開發(fā)"));books.put("2", new Book("2", "jdbc開發(fā)"));books.put("3", new Book("3", "java基礎"));books.put("4", new Book("4", "struts開發(fā)"));books.put("5", new Book("5", "spring開發(fā)"));}// 獲得所有的圖書public static Collection<Book> getAll() {return books.values();}// 根據(jù)指定的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);// 創(chuàng)建或者獲得用戶的Session對象HttpSession session = req.getSession();// 從Session對象中獲得用戶的購物車List<Book> cart = (List) session.getAttribute("cart");if (cart == null) {// 首次購買,為用戶創(chuàng)建一個購物車(List集合模擬購物車)cart = new ArrayList<Book>();// 將購物城存入Session對象session.setAttribute("cart", cart);}// 將商品放入購物車cart.add(book);// 創(chuàng)建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程序设计任务教程 黑马程序员 第五章 课后答案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【传智播客】Javaweb程序设计任务教
- 下一篇: 【答案放在最后,看题看不到答案】2017