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



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
	}
	@Override
	public 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.创建cookie
		Cookie cookie = new Cookie("prodHist",createValue(request,id));
		cookie.setMaxAge(1*30*24*60*60);//一个月
		//2.发送cookie
		response.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或没有prodHist
		if(cookies==null || prodHist==null){
			//直接返回传入的id
			return id;
		}
		
		// 3,21          2
		//String -> String[] ->  Collection :为了方便判断重复id
		String[] ids = prodHist.split(",");
		Collection colls = Arrays.asList(ids); //<3,21>
		// LinkedList 方便地操作(增删改元素)集合
		// Collection -> LinkedList
		LinkedList 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的cookie
		Cookie[]  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);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值