servlet学习总结六

来源:互联网 发布:建表语句属于sql 编辑:程序博客网 时间:2024/05/21 06:02

cookie和session:

http协议是无状态的,为了实现会话跟踪,使用cookie和session。

cookie是server向client写入的一段信息,使用键值对,name-value 存放。

session是保存在服务端的,客户端访问服务的时候,服务端将客户端的信息以某种形式保存起来。

session的实现是基于cookie的。

当client发出第一次请求的时候,server接受到请求,检查当前client是否存在session,如果不存在,则创建session并创建对应的唯一的sessionId(32位16进制 , 在tomcat中是JSESSIONID)分配给cookie,以name=SESSIONID value=具体的值, 保存在cookie中,这个sessionId 是服务端session的唯一凭证,当下次请求的时候,cookie会携带这个sessionid,服务端接受到请求后,根据sessionId匹配对应的session,与该客户端进行多次交互,从来来解决http无状态的问题。

我们项目组有时候需要来创建cookieUtil 来对cookie进行一些 增删改查 操作,网上有很棒 很详细的文章,这里我们用servlet来简单的做个实现。

向client写入cookie:

<span style="white-space:pre"></span>@Overridepublic void service(HttpServletRequest req,HttpServletResponse rsp) {RequestDispatcher rd = req.getRequestDispatcher("/servletTest1");req.setAttribute("testForward", "+_+ testForward +_+");Cookie cookie = new Cookie("name", "tom");Cookie cookie2 = new Cookie("password", "123456");cookie.setMaxAge(30*24*60*60);cookie2.setMaxAge(-1);rsp.addCookie(cookie);rsp.addCookie(cookie2);try {rd.forward(req, rsp);} catch (ServletException | IOException e) {e.printStackTrace();}}

查询cookie:

<span style="white-space:pre"></span>@Overridepublic void service(HttpServletRequest req,HttpServletResponse rsp){rsp.setCharacterEncoding("UTF-8");rsp.setHeader("content-type","text/html;charset=UTF-8");PrintWriter writer = null;try { writer = rsp.getWriter();} catch (IOException e) {e.printStackTrace();}writer.println("读取客户端 cookie");writer.println("<hr/>");Cookie[] cookies = req.getCookies();boolean flag = true;for (Cookie cookie : cookies) {if(cookie != null){flag = false;String name = cookie.getName();String value = cookie.getValue();writer.println("name:["+name+"]   value:["+value+"]");writer.println("<hr/>");}}if(flag){writer.println("本地 没有cookie");}else{writer.println("本地 cookie 读取完毕");}}

结果:


我们可以在浏览器查看


可以通过cookie.setMaxAge(n)来设置失效时期,当参数n=0的时候,删除cookie当n>0的时候,设置n秒之后失效,当n<0的时候,失效时间和浏览器绑定,随浏览器失效,默认为-1

JSESSIONID是只有在server创建sesison的时候才能创建,如果直接访问html文件是没有sessionId的。

在服务端获取sesison通过request.getSession(boolean);来获取,当参数为true时 如果client不存在session创建一个,存在直接使用,如果参数为false,当client不存在session,返回为null,存在的话直接使用。

tomcat中session的默认失效时间为30分,可以自己来设置sesison的失效时间

1.session.setMaxInactiveInterval();

2.

<span style="white-space:pre"></span><session-config><session-timeout>10</session-timeout></session-config>
3.修改tomcat的 web.xml文件

<span style="white-space:pre"></span><session-config><session-timeout>30</session-timeout></session-config>

它们的优先级  1>2>3

0 0
原创粉丝点击