【每天学一点】JAVA Cookie相关

  又是一个人的一天,老师今天打电话来说明天的组会不开了,反正也没打算去呢。老师问我什么时候回去,。。。。我什么时候回去啊,我也不知道啊。哎,不知道学什么好。
  


  今天学了JAVA的servlet中的cookie,编写了一个浏览历史纪录的程序
  有4个文件,一个对象类,一个处理类,一个servlet显示,一个增加cookie
  

//实体对象.java
package cn.cookieTest;

public class Entity {
    private String Id;
    private String Name;
    private String Ttype;
    private double Price;

    public String getName() {
        return Name;
    }
    public void setName(String name) {
        Name = name;
    }
    public String getTtype() {
        return Ttype;
    }
    public void setTtype(String ttype) {
        Ttype = ttype;
    }
    public double getPrice() {
        return Price;
    }
    public void setPrice(double price) {
        Price = price;
    }
    @Override
    public String toString() {
        return "Entity [Id=" + Id + ", Name=" + Name + ", Ttype=" + Ttype + ", Price=" + Price + "]";
    }

    public Entity(String id, String name, String ttype, double price) {
        super();
        Id = id;
        Name = name;
        Ttype = ttype;
        Price = price;
    }
    public String getId() {
        return Id;
    }
    public void setId(String id) {
        Id = id;
    }
    public Entity() {
        super();
        // TODO Auto-generated constructor stub
    }




}



//数据处理.java
package cn.cookieTest;

import java.util.ArrayList;
import java.util.List;

/***
 * 存放对实体内容的CRUD
 * 
 * @author reimu
 *
 */

public class DAO {

    /***
     * 模拟数据库
     */

    private static List<Entity> data=new ArrayList<Entity>();
    //只执行一次
    static{
        for(int i=1;i<=10;i++){
            data.add(new Entity(""+i,"sp"+i,"type"+i,i));
        }
    }



    /***
     * 提供查寻方法
     */
    public Entity findById(String i){
        for(Entity e:data){
            if(e.getId().equals(i))
                return e;
        }
        return null;
    }

    public List<Entity> findAll(){
        return data;
    }



}



//servlet显示.java
package cn.cookieTest;

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 implementation class ListServlet
 */
@WebServlet("/ListServlet")
public class ListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //response.getWriter().append("Served at: ").append(request.getContextPath());

        response.setContentType("text/html;charset=utf-8");
        /**
         * 模拟流量过的商品
         */
//      
//      Cookie cookie=new Cookie("hid", "3,2,1");
//      response.addCookie(cookie);




        DAO dao=new DAO();
        List<Entity> list=dao.findAll();

        //显示到屏幕上
        PrintWriter writer = response.getWriter();
        String str="";
        for(Entity e:list){
            str+=("<a href='"+request.getContextPath()+"/dataServlet?id="+e.getId()+"'>"+e.toString()+"</a>"+"</br>");
        }


        /***
         * 最近浏览的商品
         * 
         */
        str+="最近浏览的商品有:</br>";

        String hid=" ";
        Cookie[] cookies=request.getCookies();
        for(int i=0;cookies!=null&&i<cookies.length;i++){
            if(cookies[i].getName().equals("hid")){
                hid=cookies[i].getValue();
                String[] ids=hid.split(",");


                //显示
                for(String id:ids){
                    Entity et=dao.findById((id));
                    str+=("</br>"+et.toString());
                }

            }   
        }


        writer.write(str);


    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}



//增加cookie.java
package cn.cookieTest;

import java.io.IOException;
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;

/**
 * Servlet implementation class dataServlet
 */
@WebServlet("/dataServlet")
public class dataServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public dataServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */

    public String creatCookie(HttpServletRequest request,String id){
        String hidval=null;
        Cookie[] cookies = request.getCookies();
        for(int i=0;cookies!=null&&i<cookies.length;i++){
            if(cookies[i].getName().equals("hid")){
                hidval=cookies[i].getValue();
                break;
            }
        }

        if(hidval==null){
            return id;
        }

        //String->String[]->Collection
        String[] str=hidval.split(",");
        Collection cols=Arrays.asList(str);
        //LinkedList 方便CRUD
        LinkedList<String> ll=new LinkedList<>(cols);
        //不超过3个
        if(ll.size()<3){
            if(ll.contains(id)){
                ll.remove(id);
                ll.addFirst(id);
            }else{
                ll.add(id);
            }
        }else{
            if(ll.contains(id)){
                ll.remove(id);
                ll.addFirst(id);
            }else{
                ll.addFirst(id);
                ll.removeLast();
            }
        }

        StringBuffer sb=new StringBuffer();
        for(String ob:ll){
            sb.append(ob+",");

        }
        String s=sb.toString();

        return s.substring(0, s.length()-1);



        //return str;
    }




    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setContentType("text/html;charset=utf-8");
        String id=request.getParameter("id");
        Cookie c=new Cookie("hid", creatCookie(request, id));
        c.setMaxAge(3600);
        response.addCookie(c);
        String str="<a href='"+request.getContextPath()+"/ListServlet'>点击返回</a>";

        response.getWriter().write(str);

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值