重温Servlet学习笔记--Cookie对象

  首先要了解cookie必须得先了解http协议,,Cookie是http协议指定的,先由服务器保存cookie到浏览器,在下次浏览器请求服务器时把上次请求得到的cookie归还给服务器,cookie以键值对的形式保存在本地的缓存中.

  • HTTP协议规定:

    1. 1个cookie最大4kb
    2. 一个服务器最多向一个浏览器保存20个cookie
    3. 一个浏览器最多保存300个cookie

注意,不同浏览器还是略有差异,不是所有浏览器都老老实实的遵守这个规定.

  • cookie的用途举例:

    • 服务器使用cookie来跟踪客户端状态
    • 保存购物车
    • 显示上一次的登录名
  • Cookie的保存与获取:

我们在a.jsp中保存一个coookie,然后在b.jsp中获取到这个cookie,并遍历出来(因为比较简单,这里只提供代码部分):

//a.jsp的body部分
  <%
              Cookie cookie1=new Cookie("name","wang");
            response.addCookie(cookie1);
             Cookie cookie2=new Cookie("password","123");
             response.addCookie(cookie2);

    %>

//b.jsp的body部分
<%
        Cookie[] cookie1=request.getCookies();
        for(Cookie c:cookie1){
            out.print(c.getName()+":"+c.getValue()+"<br>");

        }

    %>
  • Cookie的存活时间(setMaxAge()方法):

  当服务器创建Cookie对象后,可以调用setMaxAge()方法设置Cookie的最大生命。

    • maxAge > 0:表示Cookie在客户端硬盘上保存的最大时间,单位为秒,如cookie.setMaxAge(60)表示该cookie对象的存活时间为60秒
    • maxAge < 0:表示Cookie不会被浏览器保存到硬盘上,而只在浏览器内存中存活,一旦客户端关闭浏览器在,那么Cookie就消失;
    • maxAge == 0:表示删除Cookie,例如客户端硬盘已经存在名为abc的Cookie,如果服务器再向客户端发送名为abc,并且maxAge为0的Cookie,那么表示删除客户端上的名为abc的Cookie。
  • Cookie的路径(path):

设置cookie的路径需要用到cookie.setPath(String path)方法.例如:cookie.setPath("/cookie1/a");

如果没有设置cookie的路径,那么cookie的路径默认为是当前资源所在的路径,例如:

    • 访问http://localhost:8080/MyCookieDemo/cookie1/AServlet时保存了一个cookie,那么它的默认路径就是/MyCookieDemo/cookie1
    • 访问http://localhost:8080/MyCookieDemo/cookie1/demo1/BServlet时保存了一个cookie,那么它的默认路径就是/MyCookieDemo/cookie1/demo1

了解完了cookie的path,那么问题来了,它的用处是什么呢?这玩意有毛用?

    假设现在有WEB应用A,向客户端发送了10个Cookie,这就说明客户端无论访问应用A的哪个Servlet都会把这10个Cookie包含在请求中!这是不科学的,因为也许只有AServlet需要读取请求中的Cookie,而其他Servlet根本就不会获取请求中的Cookie。这说明客户端浏览器有时发送这些Cookie是多余的,这时候就可以通过设置Cookie的path来指定浏览器在访问什么样的路径时,包含什么样的Cookie。

    请求路径如果包含了Cookie路径,那么会在请求中会包含这个Cookie,否则请求中不会包含这个Cookie。如果某cookie的路径是/myCookieDemo/cookie1;当我们访问http://localhost:8080/myCookieDemo/index.jsp时,请求头中就不会携带这个cookie,而如果访问的是http://localhost:8080/myCookieDemo/cookie1/index.jsp时,请求头中就会包含这个cookie,这个页面也就能获取到此cookie中保存的数据.

  • Cookie保存中文

    Cookie的name和value都是不能保存中文的,但可以先把中文转换成URL编码,然后在保存到Cookie的name和value中。下面是代码Demo:

String name = "姓名";
String value = "张三";
name = URLEncoder.encode(name, "utf-8");
value = URLEncoder.encode(value, "utf-8");

Cookie c = new Cookie(name, value);
response.addCookie(c);

//在获取Cookie时,再使用URL解码即可。
Cookie[] cs = request.getCookies();
if(cs != null) {
for(Cookie c : cs) {
String name = URLDecoder.decode(c.getName(), "utf-8");
String value = URLDecoder.decode(c.getValue(), "utf-8");
System.out.println(name + "=" + value);
}
}
时间: 2024-10-23 13:47:28

重温Servlet学习笔记--Cookie对象的相关文章

重温Servlet学习笔记--session对象

session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servlet三大域对象之一,其他两个是request和application(servletContext),所以它也有setAttribute(),getAttribute(),等方法. HttpSession的会话范围是某用户从首次访问服务器开始,到该用户关闭浏览器结束,session对象会存活在这中间的

重温Servlet学习笔记--request对象

request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每个请求时,服务器都会创建一个request对象,把请求的数据封装到request中,然后在调用Servlet.service()中传递进去.我们在创建一个servlet时通常会使用doGet或者doPost方法,并没有看到service()方法,就是因为父类的service方法已经读取到了reque

重温Servlet学习笔记--response对象

在用户浏览网页时,服务器对于客户端浏览器做出的响应被封装成一个HttpServletResponse对象,要对浏览器操作只需要操作这个response对象即可.response的功能分类及介绍: 响应正文 response是响应对象.向客户端输出响应正文(响应体)可以使用response的响应流,response提供了两个响应流对象: PrintWriter printWriter = response.getWriter();  只能写字符流,如输出text信息 ServletOutputSt

重温Servlet学习笔记--servletContext对象

一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对象在tomcat启动时就创建,在tomcat关闭时才被销毁.有时候我们也把这个对象叫做application. ServletContext对象的作用就是在整个web应用的动态资源之间共享数据,比如在AServlet中向ServletContext中保存一个数据,然后在Bservelt中获取这个数据

重温Servlet学习笔记--编码问题

在说编码问题之前,首先先了解一下常见的字符编码: ISO-8859-1:  拉丁编码,不支持中文 gbk,gb2312,gb18030:系统默认编码,是中国的国标码 utf-8: 支持几乎所有语言的编码,一般我们同意用这个 为什么为出现乱码问题呢?我们知道web程序通常就是服务器和客户端之间的通信,服务器的默认编码是ISO,而浏览器的默认编码不太统一,一般浏览器会默认是gbk编码,这样,当传送数据的时候就会很容易出现乱码问题了. 响应(response)编码 服务器发送给客户端数据!响应是由re

SERVLET 学习笔记

SERVLET 学习笔记 一.Servlet基本定义 Servlet是服务器端上面运行的一段小的java程序,一个servlet就是一个简答的java类.通常servlet都是通过请求和返回的模式来被访问的,客户端通过resuest请求,servlet则通过response来返回需要的内容. 二.Tomcat容器等级 Tomcat容器等级分为四个等级,由内向外分别是:context容器àSERVLET容器àHOST(主机)容器àENGINE(引擎)容器.其中,CONTEXT容器,一个CONTEX

Servlet学习笔记(八)—— 自定义过滤器的编写改进:自定义实现FilterChain

笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,但是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤,最后response过滤,并且中间几项过滤的顺序不能动态改变.所以这里做个改进,实现一个过滤顺序的FilterChain. 多个Filter的执行顺序在这篇博文中得到很仔细的讲解,总结一点,多个过滤器的执行顺序是根据web.xml中不同<filter-mapping>的顺序来先后执行的,比如: <?xml version="1.0"

JavaWeb 后端 &lt;二&gt; 之 Servlet 学习笔记

JavaWeb 后端 <二> 之 Servlet 学习笔记 一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException ServletRequest req:代表着请

Servlet学习笔记(七)—— JSP概述

1.Servlet两个缺陷: ①所有HTML标签必须包在Java字符串中,使得发送HTTP响应十分繁琐: ②所有文本和HTML标签都必须进行硬编码,即使对表示层做极其微小的修改,也需要重新编译. 2.注释: (1)JSP备注:<% %>,不会发送到浏览器,不能嵌套 (2)HTML备注:<!-- -->,不被容器处理,直接发送到浏览器,用途之一是标识JSP页面.在处理带有许多JSP片段的应用程序时,开发者通过查看HTML源代码,可以轻松查出某个HTML代码部分生成了那个JSP页面.