14. javaEE

在javax.servlet.http包下有个名为Cookie的类,通过该类就可以向客户端设置cookie数据了。

cookie的创建:

package cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class cookie extends HttpServlet {

   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建两个Cookie:
        //import javax.servlet.http.Cookie 导的是这个包
        //他就是以键 - 值得形式存在的啊
        Cookie cookie_1 = new Cookie("user", "bihu");
        Cookie cookie_2 = new Cookie("pass","a123456");
        
        //生成好了 接下来绑定到响应体中:
        response.addCookie(cookie_1);
        response.addCookie(cookie_2);
        
        //这样的话 用户GET请求页面 那么就会使用这两个Cookie!!
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

}

那么问题来了 ,我们可以在浏览器看到:

不仅仅内容是显示在外头 而且 到期时间也仅关闭窗口,我们还可以看到 还有路径,那么我们该学会如何去保护这些 和 设置这些:

 

设置绑定路径

默认绑定:

就是上面代码中的单纯设置Cookie 那么他会默认绑定路径,也就是途中看到的 /Cookie 如果你以后访问任何一个 : http://localhost:8080/Cookie/XXX,都会携带刚生成的Cookie,这就是默认绑定。

自定义绑定:

cookie除了默认绑定之外我们还可以手动设置其绑定路径:

具体看代码函数:

package cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class cookie extends HttpServlet {

   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建两个Cookie:
        //import javax.servlet.http.Cookie 导的是这个包
        //他就是以键 - 值得形式存在的啊
        Cookie cookie_1 = new Cookie("user", "bihu");
        Cookie cookie_2 = new Cookie("pass","a123456");
        
        //为Cookie绑定路径  你可以分开绑定 自定义的
        System.out.println(request.getContextPath());
        cookie_1.setPath(request.getContextPath() + "/bihu");
        cookie_2.setPath(request.getContextPath() + "/bihu");
        
        
        //生成好了 接下来绑定到响应体中:
        response.addCookie(cookie_1);
        response.addCookie(cookie_2);
        
        //这样的话 用户GET请求http://localhost:8080/Cookie/bihu/XXX页面 那么就会使用这两个Cookie!! 完全自定义的
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

}

其中  request.getContextPath(),返回当前页面所在的应用的名字,还有就是 默认的页面也可以用Cookie 我不知道为什么 但是其他不能,就是说 你绑定了路劲后,

你访问的URL必须包含 :  xxxxx:8080:/ 你绑定的路劲 / 你绑定的路劲 / XXX;

才有效 你自己可以用浏览器试试 或者 你用Fidder去抓包

设置cookie的有效时长
默认情况下, Cookie 是保存在浏览器的缓存中的,关闭浏览器后Cookie也就消失了。
开发者可以通过设置Cookie的有效时长,将Cookie写入到客户端硬盘文件中。
可以通过下面的方法设置有效时长


public void setMaxAge(int expiry)

其中expiry的单位为秒,整型。

参数取值特性:

  • 大于 0,则表示要将 Cookie 写入到硬盘文件中;
  • 小于 0,则表示 Cookie 存放在浏览器缓存中,与不设置时长等效;
  • 等于 0,则表示 Cookie产生后直接失效。

  

  注意可以设置cookie的值 ,用 Cookie 类中的 setvalue

  也可以重复添加cookie,但会替代之前的。

代码:

package cookie;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class cookie extends HttpServlet {

   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建两个Cookie:
        //import javax.servlet.http.Cookie 导的是这个包
        //他就是以键 - 值得形式存在的啊
        Cookie cookie_1 = new Cookie("user", "bihu");
        Cookie cookie_2 = new Cookie("pass","a123456");
        
        //设置cookie的有效时长:
        //public void setMaxAge(int expiry) 方法:
        /*
            * 大于 0,则表示要将 Cookie 写入到硬盘文件中;
             *小于 0,则表示 Cookie 存放在浏览器缓存中,与不设置时长等效;
                *等于 0,则表示 Cookie产生后直接失效。
          */    
        cookie_1.setMaxAge(60 * 60 * 24 * 15);    // 60 * 60 * 24 * 15 就是15天  注意的是 别设置几秒或几千秒 没用的啊 浏览器他不会计算的
        cookie_2.setMaxAge(60 * 60 * 24 * 15);
        
        
        //生成好了 接下来绑定到响应体中:
        response.addCookie(cookie_1);
        response.addCookie(cookie_2);
        
        //这样的话 用户GET请求http://localhost:8080/Cookie/bihu/XXX页面 那么就会使用这两个Cookie!! 完全自定义的
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

}

设置路径 和 日期我都讲了啊  至于加密 你自己去加密 但推荐Cookie别带中文!!!!

接下来我们学习如何获取啊 获取Cookie:

服务器端获取请求的cookie

HttpServletRequest 中有一个方法getCookies()专门用于读取请求中所携带的 Cookie 数据,该方法的返回值类型是Cookie数组

比如:携带cookie时即可访问 但是注意的是:没cookie时你别去获取 ,不然cookie 会为空 ,会空指针异常:

代码:

package Accept;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class AcceptCookie extends HttpServlet {
    
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //注意!确保访问AcceptCookie时 浏览器是携带者Cokkie的 不然为空的话会报空指针异常!!
        //用HttpServletRequest类种的 getCookies 方法来获取Cookie对象数组
        Cookie[] mCookie = request.getCookies();
        
        //获取好了 我们来遍历一下获取到的 Cookie:
        for(Cookie c : mCookie) {
            System.out.println("Cookie Name :" + c.getName());
            System.out.println("Cookie Velue :" + c.getValue());
            System.out.println("Cookie Time :" + c.getMaxAge() + "  S");
            System.out.println("Cookie Domain :" + c.getDomain());        //获取域
            System.out.println("Cookie Path :" + c.getPath());        //获取路径
            System.out.println("---------------------------------");
        }
        
        
        
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

}

我们打印下遍历结果: 都很准确的啊 更多的自己百度即可:

Cookie Name :user
Cookie Velue :bihu
Cookie Time :-1 S
Cookie Domain :null
Cookie Path :null
---------------------------------
Cookie Name :pass
Cookie Velue :a123456
Cookie Time :-1 S
Cookie Domain :null
Cookie Path :null
---------------------------------

练习

1.实现获取用户上一次访问时间的功能,即当用户访问服务器,如果是非第一次访问的话,需要将上一次访问服务器的时间给用户显示出来。

2.实现十天内免登陆的功能,当用户成功登陆后,十天内可以自动登录。用户名和密码直接写在代码中即可。

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14816474.html

原文地址:https://www.cnblogs.com/bi-hu/p/14816474.html