JavaWeb会话管理之浏览过的商品

来源:互联网 发布:直播软件商业计划书 编辑:程序博客网 时间:2024/05/21 06:17



1.存放商品信息

package gz.itcast.hist.entity;public class Product {private String id;private String proName;private String proType;private double price;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getProName() {return proName;}public void setProName(String proName) {this.proName = proName;}public String getProType() {return proType;}public void setProType(String proType) {this.proType = proType;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public Product(String id, String proName, String proType, double price) {super();this.id = id;this.proName = proName;this.proType = proType;this.price = price;}public Product() {super();// TODO Auto-generated constructor stub}@Overridepublic String toString() {return "Product [id=" + id + ", proName=" + proName + ", proType="+ proType + ", price=" + price + "]";}}

2.对商品进行增删改查



package gz.itcast.hist.dao;import gz.itcast.hist.entity.Product;import java.util.ArrayList;import java.util.List;/* * 该类中存放对Product对象的增删改查 *  */public class ProductDao {//模拟"数据库",存放所有商品数据private static List<Product> data = new ArrayList<Product>();    /*     * 初始化商品数据     */static{//只执行一次for(int i=1; i<=10; i++){data.add(new Product(""+i,"笔记本"+i,"LNOO"+i,34.0+i));}}/* * 提供查询所有商品的方法 */public List<Product>findAll(){return data;}/* * 提供根据编号查询商品的方法 */     public Product findById(String id){     for(Product p:data){     if(p.getId().equals(id)){     return p;     }     }     return null;     }}

3.

在浏览器上显示商品详细

package gz.itcast.hist.servlet;import gz.itcast.hist.dao.ProductDao;import gz.itcast.hist.entity.Product;import java.io.IOException;import java.io.PrintWriter;import java.util.Arrays;import java.util.Collection;import java.util.LinkedList;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/* * 显示商品详细 *//** * 显示商品详细 * @author APPle * */public class DetailServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//1.获取编号String id = request.getParameter("id");//2.到数据库中查询对应编号的商品ProductDao dao = new ProductDao();Product product = dao.findById(id);//3.显示到浏览器PrintWriter writer = response.getWriter();String html = "";html += "<html>";html += "<head>";html += "<title>显示商品详细</title>";html += "</head>";html += "<body>";html += "<table border='1' align='center' width='300px'>";if(product!=null){html += "<tr><th>编号:</th><td>"+product.getId()+"</td></tr>";html += "<tr><th>商品名称:</th><td>"+product.getProName()+"</td></tr>";html += "<tr><th>商品型号:</th><td>"+product.getProType()+"</td></tr>";html += "<tr><th>商品价格:</th><td>"+product.getPrice()+"</td></tr>";}html += "</table>";html += "<center><a href='"+request.getContextPath()+"/ListServlet'>[返回列表]</a></center>";html += "</body>";html += "</html>";writer.write(html);/** * 创建cookie,并发送 *///1.创建cookieCookie cookie = new Cookie("prodHist",createValue(request,id));cookie.setMaxAge(1*30*24*60*60);//一个月//2.发送cookieresponse.addCookie(cookie);}/** * 生成cookie的值 * 分析: * 当前cookie值                     传入商品id               最终cookie值 *      null或没有prodHist          1                     1    (算法: 直接返回传入的id ) *             1                  2                     2,1 (没有重复且小于3个。算法:直接把传入的id放最前面 ) *             2,1                1                     1,2(有重复且小于3个。算法:去除重复id,把传入的id放最前面 ) *             3,2,1              2                     2,3,1(有重复且3个。算法:去除重复id,把传入的id放最前面) *             3,2,1              4                     4,3,2(没有重复且3个。算法:去最后的id,把传入的id放最前面) * @return */private String createValue(HttpServletRequest request,String id) {Cookie[] cookies = request.getCookies();String prodHist = null;if(cookies!=null){for (Cookie cookie : cookies) {if(cookie.getName().equals("prodHist")){prodHist = cookie.getValue();break;}}}// null或没有prodHistif(cookies==null || prodHist==null){//直接返回传入的idreturn id;}// 3,21          2//String -> String[] ->  Collection :为了方便判断重复idString[] ids = prodHist.split(",");Collection colls = Arrays.asList(ids); //<3,21>// LinkedList 方便地操作(增删改元素)集合// Collection -> LinkedListLinkedList list = new LinkedList(colls);//不超过3个if(list.size()<3){//id重复if(list.contains(id)){//去除重复id,把传入的id放最前面list.remove(id);list.addFirst(id);}else{//直接把传入的id放最前面list.addFirst(id);}}else{//等于3个//id重复if(list.contains(id)){//去除重复id,把传入的id放最前面list.remove(id);list.addFirst(id);}else{//去最后的id,把传入的id放最前面list.removeLast();list.addFirst(id);}}// LinedList -> String StringBuffer sb = new StringBuffer();for (Object object : list) {sb.append(object+",");}//去掉最后的逗号String result = sb.toString();result = result.substring(0, result.length()-1);return result;}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

4.查询商品

package gz.itcast.hist.servlet;import gz.itcast.hist.dao.ProductDao;import gz.itcast.hist.entity.Product;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/* * 查询所有商品的servlet */public class ListServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//1.读取数据库,查询商品列表ProductDao dao = new ProductDao();List<Product>list = dao.findAll();//2.把商品显示到浏览器PrintWriter Writer = response.getWriter();String html = "";html += "<html>";html += "<head>";html += "<title>显示商品列表</title>";;html += "</head>";html += "<body>";html += "<table border='1' align='center' width='600px'>";html += "<table>";html += "<tr>";html += "<th>编号</th><th>商品名称</th><th>商品型号</th><th>商品价格</th>";html += "</tr>";//遍历商品if(list!=null){for(Product p:list){html += "<tr>";///MyWeb3_hist/DetailServlet?id=1'访问DetailServlet的Servlet程序,同时传递名为id值为1的参数html += "<td>"+p.getId()+"</td><td><a href='"+request.getContextPath()+"/DetailServlet?id="+p.getId()+"'>"+p.getProName()+"</td><td>"+p.getProType()+"</td><td>"+p.getPrice()+"</td>";html += "</tr>";}}html += "</table>";/* * 显示浏览过的商品 */html += "最近浏览过的商品:<br/>";//取出prodHist的cookieCookie[]  cookies = request.getCookies();if(cookies!=null){for(Cookie cookie : cookies){if(cookie.getName().equals("prodHist")){String prodHist = cookie.getValue();String[] ids = prodHist.split(",");//遍历浏览过的商品for(String id : ids){//查询数据库,查询对应的信息Product p = dao.findById(id);//显示到浏览器html += ""+p.getId()+" "+p.getProName()+" "+p.getPrice()+"</br>";}}}}html += "</body>";html += "</html>";Writer.write(html);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}}


原创粉丝点击