日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

session实现购物车

發布時間:2023/12/3 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 session实现购物车 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、是什么? session 可以存儲會話級變量,基于其實現購物車;

2、為什么? session是會話級變量,可以吧多次請求的數據串聯起來,放到會話里;?

3、怎么做??

【荔枝】轉自 張孝祥

登錄頁面,前端?

<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>

?登錄后端, 存儲登錄信息到session, 并轉發請求;?

// 登錄servlet, 請求轉發 , 登錄信息存儲到 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();//設置session超時間隔為120秒,以便測試超時的情況session.setMaxInactiveInterval(120);String sessionName = (String)session.getAttribute("name");//如果是一個已登錄用戶,則將請求轉發給顯示課程的Servletif(sessionName != null){RequestDispatcher rd = request.getRequestDispatcher("CoursesServlet");rd.forward(request,response); // 請求轉發 return;}String paramName = request.getParameter("name");if(paramName == null || paramName.trim().equals("")){out.println("請傳遞用戶名!<br>");RequestDispatcher rd = request.getRequestDispatcher("../logon.html");rd.include(request,response); // 請求轉發 }else{session.setAttribute("name",paramName); // 存儲登錄信息 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,或者上次訪問后的空閑時間超過了session的限制,getSession方法返回的是一個新Session對象,sessionName也為null*/if(sessionName == null){/*因為下面是在同一個WEB應用程序內部跳轉,最好是采用forward方法進行請求轉發,這里僅僅是為了復習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中的一個屬性對象的引用,對vCourses的操作直接影響那個屬性對象,不用再將vCourses重新增加進Session中*/ vCourses.add(courseSelect);}}}String [] courses = {"c","c++","vc++","java","jsp"};out.println(sessionName + ",請選擇你要選修的課程:<br>");for(int i=0; i<courses.length; i++){//對參數中的特殊字符應進行URL編碼,這里的請求路徑是 CourseServlet 自己本身 out.println(courses[i] + "&nbsp;&nbsp;&nbsp;&nbsp;<a href='CoursesServlet?course=" + URLEncoder.encode(courses[i],"gb2312") + "'>選修</a><br>");}out.println("<hr>");Vector vCourses = (Vector)session.getAttribute("courses");out.println(sessionName + ",你已經選擇了下面的課程:<br>");if(vCourses != null){for(Enumeration e=vCourses.elements();e.hasMoreElements();){out.println((String)e.nextElement() + "<br>");}}} }

?

4、訪問效果?

步驟1, 進入 logon.html , 輸入用戶名,登錄?

步驟2, 點擊選修鏈接,模擬添加到購物車;

5、補充, 為啥要進行 URL 編碼;?

CoursesServlet類倒數25行 為啥要進行URL編碼, 參見 URLEncode 介紹,?

http://www.ruanyifeng.com/blog/2010/02/url_encoding.html

?簡單來說吧,??URL只能使用英文字母、阿拉伯數字和某些標點符號,不能使用其他文字和符號。比如,世界上有英文字母的網址"http://www.abc.com",但是沒有希臘字母的網址"http://www.aβγ.com"(讀作阿爾法-貝塔-伽瑪.com)。這是因為網絡標準RFC 1738做了硬性規定。這意味著,如果URL中有漢字,就必須編碼后使用。但是麻煩的是,RFC 1738沒有規定具體的編碼方法,而是交給應用程序(瀏覽器)自己決定。這導致"URL編碼"成為了一個混亂的領域。

為了避免以上URL編碼混亂, URL編碼規范應運而生。?

?

?

?

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的session实现购物车的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。