cookie购物车
cookie購物車為例(使用serlvet)
先點擊購買,將數據存儲到cookie中,在點擊去結算
首先建立數據庫連接:
DBSource 接口
SimpleDBSource 類:
package com.dao;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class SimpleDBSource implements DBSource {public void closeConn(Connection conn) {try {if (conn != null && !conn.isClosed()) {conn.close();}} catch (Exception ex) {ex.printStackTrace();}}public Connection getConn() {String driver = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/test";String username = "root";String password = "root";Connection conn = null;try {Class.forName(driver);conn = DriverManager.getConnection(url, username, password);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;} }用來跳轉頁面的serlvet:(訪問時使用這個serlvet)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html");request.setCharacterEncoding("utf-8");ProductDao dao = new ProductDao();List<ProductBean> products = dao.select(1);request.setAttribute("products", products);request.getRequestDispatcher("product1.jsp").forward(request, response);}jsp頁面:
buy.do(點擊購買)去的serlvet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html");request.setCharacterEncoding("utf-8");int id = Integer.parseInt(request.getParameter("id"));int number = Integer.parseInt(request.getParameter("number"));//獲取cookie數組Cookie cookies[] = request.getCookies();//判斷cookie是否已經存在數值if(cookies==null){//Cookie存數值為鍵值對的形式,類型是StringCookie cookie = new Cookie(id+"",number+"");System.out.println("id:"+id);System.out.println("number:"+number);//設置cookie的存儲有效時間cookie.setMaxAge(5000);//添加到responseresponse.addCookie(cookie);}else{//不為空,有的就在原有的基礎上添加,沒有的新建添加boolean flag = false;for(Cookie cook : cookies){//判斷cookie中是否已經存在了這個商品的id,如果有在原有的基礎上添加if(cook.getName().equals(id+"")){flag = true;System.out.println("cookvalue:"+cook.getValue());cook.setValue( (Integer.parseInt(cook.getValue()) + number)+"" );cook.setMaxAge(5000);response.addCookie(cook);break;}}//如果所添加的是一個新的,就新建一個if(flag==false){Cookie cookie = new Cookie(id+"",number+"");System.out.println("id:"+id);System.out.println("number:"+number);cookie.setMaxAge(5000);response.addCookie(cookie);}}//跳回原來的頁面PrintWriter out = response.getWriter();out.print("<script>history.go(-1);</script>");}pay.do(點擊去結算)所對應的serlvet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html");request.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");out.println("<HTML>");out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println("<script>");//刪除的方法out.println(" function deleteProduct(id){");//將id傳值到f1中out.println(" document.f1.id.value = id; document.f1.submit(); ");out.println("}");out.println("</script>");out.println(" <BODY>");out.println("<form action='delete.do' name='f1'>");out.println("<input type='hidden' name='id'>"); out.println("</form>");//設置表的邊框out.print("<table border = '1'>");out.print("<tr>");out.print("<td>商品名稱</td>");out.print("<td>商品數量</td>");out.print("<td>商品單價</td>");out.print("<td>商品總價</td>");out.print("<td>操作</td>");out.print("</tr>");//商品總價,初始值為0double total = 0;//獲取cookie數組Cookie cookies[] = request.getCookies();if(cookies != null){for(Cookie cook : cookies){//首先要判斷這個if(!cook.getName().equals("JSESSIONID") && !cook.getName().equals("Hm_lvt_080836300300be57b7f34f4b3e97d911")){out.print("<tr>");ProductDao dao = new ProductDao();//根據商品id查詢商品信息//int id = Integer.parseInt(cook.getName());ProductBean bean = dao.selectById(Integer.parseInt(cook.getName()));out.print("<td>"+bean.getProductname()+"</td>");//商品的購買數量out.print("<td>"+cook.getValue()+"</td>");out.print("<td>"+bean.getProductprice()+"</td>");//cookie為String需要轉換int,productTotal是此商品的總價double productTotal = Integer.parseInt(cook.getValue())*bean.getProductprice();out.print("<td>"+productTotal+"</td>");out.print("<td><a href='#' onclick=\"javascript:deleteProduct("+cook.getName()+")\">刪除</a></td>");out.print("</tr>");//全部商品的總價格total += productTotal;}}}out.print("<tr><td align='center' colspan='5'>商品總價:"+total+"</td></tr>");out.print("</table>");out.println(" </BODY>");out.println("</HTML>");out.flush();out.close();}delete.do(刪除)所對應的serlvet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html");request.setCharacterEncoding("utf-8");//?;癁镾tring才能和cookie比較String id = request.getParameter("id");//獲取cookie數組Cookie cookies[] = request.getCookies();if(cookies != null){for(Cookie cook : cookies){//首先要判斷這個if(!cook.getName().equals("JSESSIONID")){//判斷cookie的name鍵等于所傳的id,就進行刪除if(cook.getName().equals(id)){//cookie的刪除方式,就是把cookie的有效時間設置為0cook.setMaxAge(0);//添加到responsesresponse.addCookie(cook);break;}}}}//返回付款界面response.sendRedirect("pay.do");}web.xml配置文件:
<servlet><servlet-name>BuyServlet</servlet-name><servlet-class>com.servlet.BuyServlet</servlet-class></servlet><servlet-mapping><servlet-name>BuyServlet</servlet-name><url-pattern>/buy.do</url-pattern></servlet-mapping><servlet><servlet-name>product</servlet-name><servlet-class>com.servlet.productServlet</servlet-class></servlet><servlet-mapping><servlet-name>product</servlet-name><url-pattern>/product.do</url-pattern></servlet-mapping><servlet><servlet-name>PayServlet</servlet-name><servlet-class>com.servlet.PayServlet</servlet-class></servlet><servlet-mapping><servlet-name>PayServlet</servlet-name><url-pattern>/pay.do</url-pattern></servlet-mapping><servlet><servlet-name>DeleteServlet</servlet-name><servlet-class>com.servlet.DeleteServlet</servlet-class></servlet><servlet-mapping><servlet-name>DeleteServlet</servlet-name><url-pattern>/delete.do</url-pattern></servlet-mapping><filter><filter-name>cf</filter-name><filter-class>com.filter.CharacterFilter</filter-class></filter><filter-mapping><filter-name>cf</filter-name><url-pattern>/*</url-pattern></filter-mapping>監聽CharacterFilter,實現亂碼問題:
package com.filter;import java.io.IOException;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;public class CharacterFilter implements Filter{public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest request, ServletResponse response,FilterChain fc) throws IOException, ServletException {//FilterChain 過濾器鏈條request.setCharacterEncoding("gb2312");response.setCharacterEncoding("gb2312");//監聽器 session 觸發器 triggle // 聊天室 System.out.println("before filter");fc.doFilter(request, response);System.out.println("after filter");}public void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub}}總結
- 上一篇: 基于Revel+Layui框架快速入门教
- 下一篇: 什么是devicenet跟以太网啥区别