Servlet总结五

Servlet总结五一:多个Servlet之间数据共享实现方案1.ServletContext接口2.Cookie类 3.HttpSession接口 4.H

欢迎大家来到IT世界,在知识的湖畔探索吧!

一:多个Servlet之间数据共享实现方案

1.ServletContext接口

2.Cookie类

3.HttpSession接口

4.HttpServletRequest接口

二、ServletContext接口:

1.介绍:

1)来自于Servlet规范中一个接口。在Tomcat中存在servlet-api.jar在Tomcat中负责提供这个接口实现类

2)如果两个Servlet来自于同一个网站。彼此之间通过网站的ServletContext实例对象实现数据共享

3)开发人员习惯于将ServletContext对象称为【全局作用域对象】

2.工作原理:

每一个网站都存在一个全局作用域对象。这个全局作用域对象【相当于】一个Map.在这个网站中OneServlet可以将一个数据存入到全局作用域对象,当前网站中其他Servlet此时都可以从全局作用域对象得到这个数据进行使用。

3.全局作用域对象生命周期:

1)在Http服务器启动过程中,自动为当前网站在内存中创建一个全局作用域对象

2)在Http服务器运行期间时,一个网站只有一个全局作用域对象

3)在Http服务器运行期间,全局作用域对象一直处于存活状态

4)在Http服务器准备关闭时,负责将当前网站中全局作用域对象

进行销毁处理

*****全局作用域对象生命周期贯穿网站整个运行期间***

4.命令实现: 【同一个网站】OneServlet将数据共享给TwoServlet

OneServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response){

//1.通过【请求对象】向Tomcat索要当前网站中【全局作用域对象】

ServletContext application = request.getServletContext();

//2.将数据添加到全局作用域对象作为【共享数据】

application.setAttribute(“key1”,数据)

}

}

TwoServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response){

//1.通过【请求对象】向Tomcat索要当前网站中【全局作用域对象】

ServletContext application = request.getServletContext();

//2.从全局作用域对象得到指定关键字对应数据

Object 数据 = application.getAttribute(“key1”);

}

}

三、Cookie

1.介绍:

1)Cookie来自于Servlet规范中一个工具类,存在于Tomcat提供servlet-api.jar中

2)如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于Cookie对象进行数据共享

3) Cookie存放当前用户的私人数据,在共享数据过程中提高服务质量

4) 在现实生活场景中,Cookie相当于用户在服务端得到【会员卡】

2.原理:

用户通过浏览器第一次向MyWeb网站发送请求申请OneServlet。OneServlet在运行期间创建一个Cookie存储与当前用户相关数据OneServlet工作完毕后,【将Cookie写入到响应头】交还给当前浏览器。浏览器收到响应响应包之后,将cookie存储在浏览器的缓存一段时间之后,用户通过【同一个浏览器】再次向【myWeb网站】发送请求申请TwoServlet时。【浏览器需要无条件的将myWeb网站之前推送过来的Cookie,写入到请求头】发送过去此时TwoServlet在运行时,就可以通过读取请求头中cookie中信息,得到OneServlet提供的共享数据

3.实现命令: 同一个网站 OneServlet 与 TwoServlet 借助于Cookie实现数据共享

OneServlet{

public void doGet(HttpServletRequest request,HttpServletResponse resp){

//1.创建一个cookie对象,保存共享数据(当前用户数据)

Cookie card = new Cookie(“key1″,”abc”);

Cookie card1= new Cookie(“key2″,”efg”);

****cookie相当于一个map

****一个cookie中只能存放一个键值对

****这个键值对的key与value只能是String

****键值对中key不能是中文

//2.【发卡】将cookie写入到响应头,交给浏览器

resp.addCookie(card);

resp.addCookie(card1)

}

}

浏览器/用户 <———响应包 【200】

【cookie: key1=abc; key2=eft】

【处理结果】

浏览器向myWeb网站发送请求访问TwoServlet—->请求包 【url:/myWeb/two method:get】

【请求参数:xxxx ;Cookie key1=abc;key2=efg】

TwoServlet{

public void doGet(HttpServletRequest request,HttpServletResponse resp){

//1.调用请求对象从请求头得到浏览器返回的Cookie

Cookie cookieArray[] = request.getCookies();

//2.循环遍历数据得到每一个cookie的key 与 value

for(Cookie card:cookieArray){

String key = card.getName(); 读取key “key1”

Strign value = card.getValue();读取value “abc”

提供较好的服务。。。。。。。。

}

}

}

4.Cookie销毁时机:

1.在默认情况下,Cookie对象存放在浏览器的缓存中。因此只要浏览器关闭,Cookie对象就被销毁掉

2.在手动设置情况下,可以要求浏览器将接收的Cookie存放在客户端计算机上硬盘上,同时需要指定Cookie在硬盘上存活时间。在存活时间范围内,关闭浏览器关闭客户端计算机,关闭服务器,都不会导致Cookie被销毁。在存活时间到达时,Cookie自动从硬盘上被删除

cookie.setMaxAge(60); //cookie在硬盘上存活1分钟

四:HttpSession接口:

1.介绍:

1)HttpSession接口来自于Servlet规范下一个接口。存在于Tomcat中servlet-api.jar其实现类由Http服务器提供。Tomcat提供实现类存在于servlet-api.jar

2)如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,此时借助于HttpSession对象进行数据共享

3)开发人员习惯于将HttpSession接口修饰对象称为【会话作用域对象】

2.HttpSession 与 Cookie 区别:【面试题】

1)存储位置: 一个在天上,一个在地下

Cookie:存放在客户端计算机(浏览器内存/硬盘)

HttpSession:存放在服务端计算机内存

2)数据类型:

Cookie对象存储共享数据类型只能是String

HttpSession对象可以存储任意类型的共享数据Object

3) 数据数量:

一个Cookie对象只能存储一个共享数据

HttpSession使用map集合存储共享数据,所以可以存储任意数量共享数据

4)参照物:

Cookie相当于客户在服务端【会员卡】

HttpSession相当于客户在服务端【私人保险柜】

3.命令实现: 同一个网站(myWeb)下OneServlet将数据传递给TwoServlet

OneServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response){

//1.调用请求对象向Tomcat索要当前用户在服务端的私人储物柜

HttpSession session = request.getSession();

//2.将数据添加到用户私人储物柜

session.setAttribute(“key1”,共享数据)

}

}

浏览器访问/myWeb中TwoServlet

TwoServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response){

//1.调用请求对象向Tomcat索要当前用户在服务端的私人储物柜

HttpSession session = request.getSession();

//2.从会话作用域对象得到OneServlet提供的共享数据

Object 共享数据 = session.getAttribute(“key1”);

}

}

4.Http服务器如何将用户与HttpSession关联起来cookie

5.getSession() 与 getSession(false)

1)getSession(): 如果当前用户在服务端已经拥有了自己的私人储物柜.要求tomcat将这个私人储物柜进行返回如果当前用户在服务端尚未拥有自己的私人储物柜要求tocmat为当前用户创建一个全新的私人储物柜

2)getSession(false):如果当前用户在服务端已经拥有了自己的私人储物柜.要求tomcat将这个私人储物柜进行返回如果当前用户在服务端尚未拥有自己的私人储物柜此时Tomcat将返回null

6.HttpSession销毁时机:

1.用户与HttpSession关联时使用的Cookie只能存放在浏览器缓存中.

2.在浏览器关闭时,意味着用户与他的HttpSession关系被切断

3.由于Tomcat无法检测浏览器何时关闭,因此在浏览器关闭时并不会导致Tomcat将浏览器关联的HttpSession进行销毁

4.为了解决这个问题,Tomcat为每一个HttpSession对象设置【空闲时间】这个空闲时间默认30分钟,如果当前HttpSession对象空闲时间达到30分钟此时Tomcat认为用户已经放弃了自己的HttpSession,此时Tomcat就会销毁掉这个HttpSession

7.HttpSession空闲时间手动设置

在当前网站/web/WEB-INF/web.xml

<session-config>

<session-timeout>5</session-timeout> <!–当前网站中每一个session最大空闲时间5分钟–>

</session-config>

五:HttpServletRequest接口实现数据共享

1.介绍:

1) 在同一个网站中,如果两个Servlet之间通过【请求转发】方式进行调用,彼此之间共享同一个请求协议包。而一个请求协议包只对应一个请求对象因此servlet之间共享同一个请求对象,此时可以利用这个请求对象在两个Servlet之间实现数据共享

2) 在请求对象实现Servlet之间数据共享功能时,开发人员将请求对象称为【请求作用域对象】

2.命令实现: OneServlet通过请求转发申请调用TwoServlet时,需要给TwoServlet提供共享数据

OneServlet{

public void doGet(HttpServletRequest req,HttpServletResponse response){

//1.将数据添加到【请求作用域对象】中attribute属性

req.setAttribute(“key1”,数据); //数据类型可以任意类型Object

//2.向Tomcat申请调用TwoServlet

req.getRequestDispatcher(“/two”).forward(req,response)

}

}

TwoServlet{

public void doGet(HttpServletRequest req,HttpServletResponse response){

//从当前请求对象得到OneServlet写入到共享数据

Object 数据 = req.getAttribute(“key1”);

}

}

Servlet规范扩展—————–监听器接口

1.介绍:

1)一组来自于Servlet规范下接口,共有8个接口。在Tomcat存在servlet-api.jar包

2)监听器接口需要由开发人员亲自实现,Http服务器提供jar包并没有对应的实现类

3)监听器接口用于监控【作用域对象生命周期变化时刻】以及【作用域对象共享数据变化时刻】

2.作用域对象:

1)在Servlet规范中,认为在服务端内存中可以在某些条件下为两个Servlet之间提供数据共享方案的对象,被称为【作用域对象】

2)Servlet规范下作用域对象:

ServletContext: 全局作用域对象

HttpSession : 会话作用域对象

HttpServletRequest:请求作用域对象

3.监听器接口实现类开发规范:三步

1)根据监听的实际情况,选择对应监听器接口进行实现

2)重写监听器接口声明【监听事件处理方法】

3)在web.xml文件将监听器接口实现类注册到Http服务器

4.ServletContextListener接口:

1)作用:通过这个接口合法的检测全局作用域对象被初始化时刻以及被销毁时刻

2)监听事件处理方法:

public void contextInitlized() :在全局作用域对象被Http服务器初始化被调用

public void contextDestory(): 在全局作用域对象被Http服务器销毁时候触发调用

5.ServletContextAttributeListener接口:

1)作用:通过这个接口合法的检测全局作用域对象共享数据变化时刻

2)监听事件处理方法:

public void contextAdd():在全局作用域对象添加共享数据

public void contextReplaced():在全局作用域对象更新共享数据

public void contextRemove():在全局作用域对象删除共享数据

6.全局作用域对象共享数据变化时刻

ServletContext application = request.getServletContext();

application.setAttribute(“key1”,100); //新增共享数据

application.setAttribute(“key1”,200); //更新共享数据

application.removeAttribute(“key1”); //删除共享数据

八:Servlet规范扩展—————–Filter接口(过滤器接口)

1.介绍:

1)来自于Servlet规范下接口,在Tomcat中存在于servlet-api.jar包

2)Filter接口实现类由开发人员负责提供,Http服务器不负责提供

3)Filter接口在Http服务器调用资源文件之前,对Http服务器进行拦截

2.具体作用:

1)拦截Http服务器,帮助Http服务器检测当前请求合法性

2)拦截Http服务器,对当前请求进行增强操作

3.Filter接口实现类开发步骤:三步

1)创建一个Java类实现Filter接口

2)重写Filter接口中doFilter方法

3)web.xml将过滤器接口实现类注册到Http服务器

4.Filter拦截地址格式

1) 命令格式:

<filter-mapping>

<filter-name>oneFilter</filter-name>

<url-pattern>拦截地址</url-pattern>

</filter-mapping>

2) 命令作用:

拦截地址通知Tomcat在调用何种资源文件之前需要调用OneFilter过滤进行拦截

3)要求Tomcat在调用某一个具体文件之前,来调用OneFilter拦截

<url-pattern>/img/mm.jpg</url-pattern>

4)要求Tomcat在调用某一个文件夹下所有的资源文件之前,来调用OneFilter拦截

<url-pattern>/img/*</url-pattern>

5)要求Tomcat在调用任意文件夹下某种类型文件之前,来调用OneFilter拦截

<url-pattern>*.jpg</url-pattern>

6)要求Tomcat在调用网站中任意文件时,来调用OneFilter拦截

<url-pattern>/*</url-pattern>

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/34505.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信