【javaweb】基础之cookie

前言

关于这些知识,在2018年上半年都已经学完了,但是一直没有整理,今天我就把这些东西都整理下来,供大家学习交流。


cookie

1. 什么是cookie
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入JSESSIONID用于标记一个会话(session),这样服务器可以知道该用户是否合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。


2. cookie的属性
name:必须

value:必须的

comment:可选的。注释

path: 可选的,如果不设置路径,那么只有设置该cookie的URI及其子路径可以访问(一般设置为"/")

写Cookie的程序的访问路径是:http://localhost:8080/JavaWeb/servlet/CookieDemo

其中:localhost就是域名;/JavaWeb/servlet就是当前Cookie的path

若访问的地址的URI包含着cookie的路径,即URI.startWith(cookie的路径),为true,则客户端将该cookie带给服务器。

比如浏览器存的cookie的路径是/JavaWeb
      现在访问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo 则带该cookie
      现在访问的地址是:http://localhost:8080/JavaWeb/CookieDemo 则带该cookie

若浏览器存的cookie的路径是/JavaWeb/servlet/
      访问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo 则带该cookie
      访问的地址是:http://localhost:8080/JavaWeb/CookieDemo 则不带该cookie

如果一个cookie的路径设置成了/JavaWeb,意味着浏览器访问当前应用下的所有资源时都会带着该cookie给服务器。

domain:可选的。该Cookie所属的网站域名。(apache.org)默认值。

maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。单位是秒
          如果是0,说明要删除。

version:可选的。


代码1:
设置cookie

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Cookie cookie=new Cookie("name","Tom");
        //设置Maximum Age
        cookie.setMaxAge(1000);
        //设置cookie路径为当前项目路径
        cookie.setPath(request.getContextPath());
        //添加cookie
        response.addCookie(cookie);
    }

获取cookie

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        Cookie[] cookies=request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                String name=cookie.getName();
                String value=cookie.getValue();
                out.write(name+"="+value);
            }
        }
    }

代码2:

//        cookie,里面设置的是用户名
        Cookie cookie = new Cookie("username", username);
        /**
         * 这个设置是干什么的呢
         */
        cookie.setPath("/");//这个方法代表可以在本应用下共享cookie
2,获取cookie的时候要在jsp界面上获取。
在jsp登录界面:
<%
    String name = "";
    Cookie[] cookies = request.getCookies();
    for (int i = 0; cookies != null && i < cookies.length; i++) {
        if ("username".equals(cookies[i].getName()))
            name = cookies[i].getValue();
    }
%>

jsp

在界面获取的时候要这样获取:
用户名: <input type="text" name="username" value="<%=name%>"><br>

注意:

在刚开始写的时候,发现页面没有显示,以为是没有跳转成功,最后发现是setattribute的那个参数搞反了。
在使用cookie的时候,想直接在服务器上写,最后发现要跳转到另一个界面,在login界面就不能够获取到值了。
在使用cookie获取值得时候,也发现了cookie的值不对应的问题,最后发现需要判断,详情见代码。
在idea中创建web工程的时候,刚开始没有发现新建servlet的文件,最后在下面找到了。里面有类名,要放在哪个目录下,最后要配置一下web.xml中的map。
在servlet自动生成的doget和dopost方法中,需要在dopost方法中添加,this.doget(request,reponse);


不能击败你的,会使你更强大

猜你喜欢

转载自blog.csdn.net/qq_41346335/article/details/88374703
今日推荐