Servlet—07—Cookie; Seesion;


 

一、Cookie

在学习Cookie之前,我们先写一下,一个servlet类里,重写父类service方法的具体步骤:

 1 service()
 2 {
 3     //设置请求编码格式
 4     //设置响应编码格式
 5     //获取请求信息
 6        //获取cookie数据
 7     //处理请求信息
 8     //响应处理结果
 9        //创建cookie数据
10      //响应cookie数据  
11        //(1)直接响应
12        //(2)请求转发到其他servlet类
13        //(3)重定向    
14  }              

 

大家对cookie可能满心疑问,不要着急,我们现在就来弄懂Cookie!

1.问题:
  不同的请求使用相同的请求数据, 但是只要请求结束,数据就被销毁了, 其他请求需要将公共数据重新发送;  这样,每次都要重新填写数据,非常麻烦!有没有什么好办法,把经常需要填写的数据,存储起来呢?
2.解决:
  有,那就是使用cookie技术!
3.特点:
  (1)服务器指挥, 浏览器端数据存储;
  (2)那些数据需要被存储是在服务器端进行声明的, 以响应的方式告诉浏览器;
  (3)不设置有效期浏览器关闭就会失效;
  (4)不适合的大量数据的存储;
4.作用:
  解决了不同请求之间数据共享的问题。

5.cookie有效期:

  cookie有效期可以单独设置,如果不设置默认保存在电脑内存中,  浏览器一旦关闭,  cookie数据就将被销毁;

  可以使用cookie.setMaxAge()来设置cookie的有效期,这样,cookie就保存在了电脑硬盘中,就算浏览器关闭,cookie数据也不会被销毁;

6.cookie有效路径:

  cookie.setPath("/虚拟项目名/**/);   

  如果不给cookie设置路径,  那么浏览器访问什么页面都会带上cookie数据,这样在一定程度上会让请求响应服务有延迟,影响用户体验;

  而我们只要设置cookie有效路径,那么,浏览器只有访问这个URL时,才会带上cookie数据;

 

 

 

 

二、Cookie代码实现 

1.

第一次请求,我们要在LoginServlet类中创建Cookie数据。

2.

 然后我们打开浏览器,输入:  localhost:8080/”虚拟项目名“/LoginServlet?a=a1&b=b1

检查一下响应头,我么们就可以发现,我们设置了set-cookie:b = b1;(服务器指挥,浏览器创建;)

 

 

 

3.

编写ServletC这个类,让这个类获取已经被浏览器存储的cookie数据。

获取cookie数据,记住要使用getCookies()方法,而不是getParameter()方法!

复习一遍!
getQueryString(),获取请求行中URL后的请求数据
getHeadName()、gitCookies(),获取请求头的数据
getParameter(),获取请求实体的数据

 

 4.

 然后我们打开浏览器,输入:  localhost:8080/”虚拟项目名“/LoginServlet?c=c1。

这个时候,我们就可以看到,浏览器已经把cookie放在请求头中了。

 

 

 

 

三、Session:

 

1.session的介绍:

 cookie虽好,但是cookie数据是储存在浏览器端的。当需要cookie存储的数据非常大的时候,将会严重影响浏览器的运行效率!

那么有没有其他办法存储共享数据呢?

有,那就是基于cookie技术的sesssion技术。

 

 

简单来说呢,就是服务器为每个servlet类创建一个session锁(锁里面有数据),这个锁放在服务器上,这个锁对应的钥匙用cookie技术实现,然后放在浏览器上;

浏览器再次请求服务器时,在请求头上,带上cookie钥匙,去打开对应的session锁,获取数据!👍

 

2.session的流程

(1)浏览器发送请求到servletA中,然后服务器调用rep.getSession()方法获取session对象,如果此次请求中,浏览器的cookie没有携带sessionID,则服务器创建新的session对象;如果携带了,则服务器则会检查此sessionID对应的session对象是否被销毁;

如果被销毁,则服务器创建新的session对象;如果未被销毁,则服务器把session对象返回;

(2)在session中存储数据、获取或删除数据;

    或者销毁session;

3.session的有效期:

设置session的有效期有三种方式

  • 1)session.setMaxInactiveInterval(int seconds); 
  • 2)在当前程序的web.xml中配置session-config ;
  • 3)在Tomcat的/conf/web.xml中配置session-config;
 4.session的特点:
  • 1)Session 技术,是依赖 Cookie 技术和服务器端的数据存储技术。
  • 2)由服务器端进行创建每个用户,独立拥有一个 session默认存储时间为 30分钟。浏览器不关闭,则session不失效,则同一请求的所有session都是同一个,数据都是一样的。
  • 3)我们创建好session后,应该把sessionID存储到cookie中,让浏览器存起来,但是这个动作我们不需要做,session的底层自动帮我们实现了。

 

 

四、Session代码实现:

1.如何创建session对象?

2.如何获取session对象的数据?

3.SerlvetD创建了session,那么ServletE如何根据sessionID获取session呢?

(和创建session对象的代码一样;这也证明了:

如果此次请求中,浏览器的cookie没有携带sessionID,则服务器创建新的session对象;如果携带了,则服务器则会检查此sessionID对应的session对象是否被销毁;

如果被销毁,则服务器创建新的session对象;如果未被销毁,则服务器把session对象返回;)

4.如何设置session数据?

 

 

 

 

 

 

 

posted @ 2019-09-07 17:59  Eric-Shen  阅读(143)  评论(0编辑  收藏  举报