javaWeb(四)——cookie

一、cookie概述

Cookie 是在浏览器访问web服务器的某个资源时,由web服务器在http响应消息头中附带传送给浏览器的一个小文本文件。
cookie响应机制.png

二、利用cookie实现自动登陆
1 需求分析:①若可以获取到请求参数loginName,则打印出欢迎信息。同时把登陆信息写到cookie中去,并设置cookie的最大时效
②从cookie中获取用户信息,若存在,则打印欢迎信息
③ 若既没有请求参数,又没有cookie信息,则重定向到login.jsp

2 代码:① 首先写一个简单的登陆界面:


    
name:

②重点在判断用户是否已有cookie:
利用request.getParameter("name") 方法获取到提交的参数,返回的值不为空,那么说明此次登陆使用户从login.jsp跳转过来的,我们只需要为其设置一个cookie就好了

String name =request.getParameter("name");
if(name != null&&!name.trim().equals("")){
            
            Cookie cookie=new Cookie("name",name);
            cookie.setMaxAge(30);
            
            response.addCookie(cookie);
}

如果返回值为空,则说明此次访问不是从login.jsp跳转过来,我们需要在cookie列表中查找有无键为"name"的 cookie 如果有,这获取这个cookie的值。

else{
            Cookie[] cookies=request.getCookies();
            
            if(cookies!=null&&cookies.length>0){
                for(Cookie cookie:cookies){
                    String val=cookie.getValue();
                    
                    if(val!=null&&!val.trim().equals("")){
                        name=val;
                    }
                    
                }
            }
        }

最后我们来判断 name是否为空,如果为空,这说明此次访问既不是从login.jsp跳转而来,cookie中也不存在该用户信息,则重定向到login.jsp页面,反之 则打印欢迎信息。

if(name!=null){
            out.print("hello"+name);
        }else{
            response.sendRedirect("login.jsp");
        }

③运行结果:
第一次直接访问 index.jsp 页面时 浏览器会自动跳转到login.jsp


1.png

2.png

当提交页面后,再次访问index页面时,页面会直接打印欢迎信息。

三、显示最近浏览的网页

在做此案例之前我们先做一个小实验:
我们在jsp页面中加入一下代码

 <%
        Cookie[] cookies=request.getCookies();
        if(cookies!=null&&cookies.length>0){
            for(Cookie c:cookies){
                String cookieName=c.getName();
                String cookieValue=c.getValue();
                out.print("CookieName:"+cookieName+"CookieValue:"+cookieValue);
                out.print("
"); } } Cookie cookie=new Cookie("Name_1","123"); response.addCookie(cookie); %>

这串代码很简单 就是访问一次就加一个键值对完全相同的cookie,单看代码我们觉得 每次访问都会加一个相同的cookie,那么每次刷新应该会在页面上多打印出一个cookie,结果是不是这样呢?我们来看运行结果。


1.png

通过结果我们可以看到 无论我们刷新多少次 都只会打印出一个cookie!

接下来继续实验 :

<%
        Cookie tempCookie=null;
        Cookie[] cookies=request.getCookies();
        if(cookies!=null&&cookies.length>0){
            for(Cookie c:cookies){
                String cookieName=c.getName();
                String cookieValue=c.getValue();
                if(cookieName.equals("Name_1")){
                    tempCookie=c;
                }
                out.print("CookieName:"+cookieName+"CookieValue:"+cookieValue);
                out.print("
"); } }else{ Cookie cookie=new Cookie("Name_1","123"); response.addCookie(cookie); } if(tempCookie!=null){ tempCookie.setMaxAge(0); response.addCookie(tempCookie); }

第一次访问页面:


2.png

第一次刷新:


3.png

第二次刷新:
4.png
我们发现第二次刷新页面的时候我们cookie不见了,反观代码 我们只是将原cookie的值赋值给了tempcookie 然后我们将tempcookie声明时常设为0,结果我们发现原cookie 也消失了?由此我们得出结论:在一个页面中每个cookie都是独一无二的,一但出现了相同的cookie 那么这两个相同的cookie本质上就是一个cookie,一荣聚荣,一毁聚毁。

接下来可以开始我们的案例了

我们的案例分为两个jsp:A.jsp 用来展示页面 包括 网站超链接和最近浏览的网站。B.jsp 用来筛选符合条件的浏览历史共给A显示:

B.jsp:

Books.jsp Page




Book:<%=request.getParameter("book") %> Back <% String book=request.getParameter("book"); Cookie[] cookies=request.getCookies(); Cookie tempcookie=null; List bookList=new ArrayList(); if(cookies!=null&&cookies.length>0){ for(Cookie c:cookies){ String bookName=c.getName(); if(bookName.startsWith("ATSWU_BOOK_")){ bookList.add(c); if(c.getValue().equals(book)){ //如果发现当前传入的book 与 原有的cookie相同 则记录下来 out.print("11"); tempcookie=c; } } } } if(bookList.size()>=5&&tempcookie==null){ tempcookie=bookList.get(0); } if(tempcookie !=null){ tempcookie.setMaxAge(0); response.addCookie(tempcookie); } Cookie cookie=new Cookie("ATSWU_BOOK_"+book,book); response.addCookie(cookie); %> Back

A.jsp:

Andriod
    
Java
JavaWeb
C
Php
Go
Python
Linux
<% Cookie[] cookies=request.getCookies(); if(cookies!=null&&cookies.length>0){ for(Cookie c :cookies){ if(c.getName().startsWith("ATSWU_BOOK_")){ out.print(c.getValue()); out.print("
"); } } } %>

你可能感兴趣的:(javaWeb(四)——cookie)