session实现购物车
1、是什么? session 可以存儲(chǔ)會(huì)話級(jí)變量,基于其實(shí)現(xiàn)購物車;
2、為什么? session是會(huì)話級(jí)變量,可以吧多次請(qǐng)求的數(shù)據(jù)串聯(lián)起來,放到會(huì)話里;?
3、怎么做??
【荔枝】轉(zhuǎn)自 張孝祥
登錄頁面,前端?
<base href="http://localhost:8080/myweb2/logon.html"> <form action="session/cart/LogonServlet" method="post">用戶名:<input type="text" name="name"><br><input type="submit" value="登錄1"> </form>?登錄后端, 存儲(chǔ)登錄信息到session, 并轉(zhuǎn)發(fā)請(qǐng)求;?
// 登錄servlet, 請(qǐng)求轉(zhuǎn)發(fā) , 登錄信息存儲(chǔ)到 session public class LogonServlet extends HttpServlet {public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();HttpSession session = request.getSession();//設(shè)置session超時(shí)間隔為120秒,以便測(cè)試超時(shí)的情況session.setMaxInactiveInterval(120);String sessionName = (String)session.getAttribute("name");//如果是一個(gè)已登錄用戶,則將請(qǐng)求轉(zhuǎn)發(fā)給顯示課程的Servletif(sessionName != null){RequestDispatcher rd = request.getRequestDispatcher("CoursesServlet");rd.forward(request,response); // 請(qǐng)求轉(zhuǎn)發(fā) return;}String paramName = request.getParameter("name");if(paramName == null || paramName.trim().equals("")){out.println("請(qǐng)傳遞用戶名!<br>");RequestDispatcher rd = request.getRequestDispatcher("../logon.html");rd.include(request,response); // 請(qǐng)求轉(zhuǎn)發(fā) }else{session.setAttribute("name",paramName); // 存儲(chǔ)登錄信息 RequestDispatcher rd = request.getRequestDispatcher("CoursesServlet");rd.forward(request,response);}} }購物車邏輯servlet,??CoursesServlet?
// 購物車邏輯 public class CoursesServlet extends HttpServlet {public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();HttpSession session = request.getSession();String sessionName = (String)session.getAttribute("name");/*如果用戶沒有登錄,sessionName為null,或者上次訪問后的空閑時(shí)間超過了session的限制,getSession方法返回的是一個(gè)新Session對(duì)象,sessionName也為null*/if(sessionName == null){/*因?yàn)橄旅媸窃谕粋€(gè)WEB應(yīng)用程序內(nèi)部跳轉(zhuǎn),最好是采用forward方法進(jìn)行請(qǐng)求轉(zhuǎn)發(fā),這里僅僅是為了復(fù)習(xí)sendRedirect方法*/response.sendRedirect("../logon.html");return;}String courseSelect = request.getParameter("course");if(courseSelect != null){Vector vCourses = (Vector)session.getAttribute("courses");if(vCourses == null){vCourses = new Vector();vCourses.add(courseSelect);session.setAttribute("courses",vCourses);}else{if(vCourses.contains(courseSelect)){out.println(sessionName + ",你以前選擇過了" + courseSelect + "<hr>");}else{/*vCourses是指向Session中的一個(gè)屬性對(duì)象的引用,對(duì)vCourses的操作直接影響那個(gè)屬性對(duì)象,不用再將vCourses重新增加進(jìn)Session中*/ vCourses.add(courseSelect);}}}String [] courses = {"c","c++","vc++","java","jsp"};out.println(sessionName + ",請(qǐng)選擇你要選修的課程:<br>");for(int i=0; i<courses.length; i++){//對(duì)參數(shù)中的特殊字符應(yīng)進(jìn)行URL編碼,這里的請(qǐng)求路徑是 CourseServlet 自己本身 out.println(courses[i] + " <a href='CoursesServlet?course=" + URLEncoder.encode(courses[i],"gb2312") + "'>選修</a><br>");}out.println("<hr>");Vector vCourses = (Vector)session.getAttribute("courses");out.println(sessionName + ",你已經(jīng)選擇了下面的課程:<br>");if(vCourses != null){for(Enumeration e=vCourses.elements();e.hasMoreElements();){out.println((String)e.nextElement() + "<br>");}}} }?
4、訪問效果?
步驟1, 進(jìn)入 logon.html , 輸入用戶名,登錄?
步驟2, 點(diǎn)擊選修鏈接,模擬添加到購物車;
5、補(bǔ)充, 為啥要進(jìn)行 URL 編碼;?
CoursesServlet類倒數(shù)25行 為啥要進(jìn)行URL編碼, 參見 URLEncode 介紹,?
http://www.ruanyifeng.com/blog/2010/02/url_encoding.html
?簡單來說吧,??URL只能使用英文字母、阿拉伯?dāng)?shù)字和某些標(biāo)點(diǎn)符號(hào),不能使用其他文字和符號(hào)。比如,世界上有英文字母的網(wǎng)址"http://www.abc.com",但是沒有希臘字母的網(wǎng)址"http://www.aβγ.com"(讀作阿爾法-貝塔-伽瑪.com)。這是因?yàn)榫W(wǎng)絡(luò)標(biāo)準(zhǔn)RFC 1738做了硬性規(guī)定。這意味著,如果URL中有漢字,就必須編碼后使用。但是麻煩的是,RFC 1738沒有規(guī)定具體的編碼方法,而是交給應(yīng)用程序(瀏覽器)自己決定。這導(dǎo)致"URL編碼"成為了一個(gè)混亂的領(lǐng)域。
為了避免以上URL編碼混亂, URL編碼規(guī)范應(yīng)運(yùn)而生。?
?
?
?
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的session实现购物车的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: repo-关于URL编码
- 下一篇: repo-话说软件详细设计工具