Java Web 三大件


Java Web三大件:Servlet,Filter,Listener。

1. Servlet


1.1 什么是Servlet


Servlet是运行在web服务器或应用服务器上的程序,是 HTTP客户端的请求 和 HTTP服务器端的数据库或应用程序 之间的中间层。

他负责处理用户的请求,并根据请求生成相应的返回信息,提供给用户。

1.2 请求的处理过程


  1. 客户端发起一个http请求,比如get类型的请求。
  2. Servlet容器接收到请求,根据请求信息,封装成HttpServletRequest和HttpServletResponse对象。
  3. Servlet容器调用HttpServlet的init()方法,init方法只在第一次请求的时候被调用。
  4. Servlet容器调用Service()方法。Service()方法根据请求的类型,这里是get类型,分别调用doGet或者doPost方法,这里调用doGet方法。(doxxx方法中是自己写的业务逻辑)
  5. 业务逻辑处理完之后,返回给Servlet容器,容器再将结果返回给客户端。
  6. 容器关闭的时候,会调用destroy方法。

1.3 Servlet生命周期


  1. 服务器启动时(web.xml中配置load-on-startup=1,默认为0),或者第一次请求该Servlet时,就会初始化一个Servlet对象,也就是会执行初始化方法init(ServletConfig conf)。
  2. Servlet对象去处理所有的客户端请求,在service(ServletRequest req,ServletResponse res)方法中执行。
  3. 服务器关闭时,销毁这个Servlet对象,执行destory()方法。
  4. 由JVM进行垃圾回收。



2. Filter


2.1 什么是Filter


Filter也称为过滤器,是对Servlet技术的一个强补充。

2.2 功能


Filter是介于web容器和Servlet之间的过滤器,用于过滤未到达Servlet的请求或者由Servlet生成但还未返回响应。客户端请求从web容器到达Servlet之前,会先经过Filter,由Filter对request的某些信息进行处理之后交给Servlet。同样,响应从Servlet传回web容器之前,也会被Filter拦截,由Filter对response进行处理之后再交给web容器。


主要功能是:

  1. 在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest,根据需要检查HttpServletRequest,也可以修改 HttpServletRequest 的头和数据。
  2. 在HttpServletResponse到达 客户端 之前,拦截客户的HttpServletResponse,根据需要检查HttpServletResponse,也可以修改 HttpServletResponse 的头和数据。



2.3 基本工作原理


  1. Filter程序是一个实现了特殊接口的Java类,与Servlet相似,也是由Servlet容器进行调用和执行。
  2. 当在 web.xml 注册了一个Filter来对某个Servlet程序进行拦截处理时,它可以决定是否将请求继续传递给Servlet程序,以及对请求和响应消息是否进行修改。
  3. 当Servlet容器开始调用某个Servlet程序时,如果发现已经注册了一个 Filter 程序来对该Servlet进行拦截,那么容器不再直接调用Servlet的service方法,而是调用 Filter 的 doFilter 方法,再由 doFilter 方法来决定是否激活 Service 方法。
  4. 但是在 Filter.doFilter 方法中不能直接调用 Servlet 的service 方法,而是调用 FilterChain.doFilter 方法来激活目标 Servlet 的 service 方法,FilterChain 对象是通过 Filter.doFilter 方法的参数传递进来的。
  5. 只要在 Filter.doFilter 方法中调用 FilterChain.doFiler 方法的语句前后,增加某些程序代码,这样就可以在 Servlet 进行响应前后实现某些特殊功能。
  6. 如果在 Filter.doFilter 方法中没有调用 FilteChain.doFilter 方法,则目标 Servlet 的 service 方法不会被执行,这样通过 Filter就可以组织某些非法的访问请求。


2.4 Filter的生命周期


与Servlet一样,Filter的创建和销毁也是由web容器负责。

  1. web应用程序启动时,web服务器将创建Filter的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求做好拦截的准备工作。(filter对象只会创建一次,init方法也只会执行一次)
  2. 开发人员通过init方法的参数,可以获得代表当前filter配置信息的FilterConfig对象。
  3. Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在web容器卸载Filter对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。



2.5 Filter链


当多个Filter同时存在的时候,就组成了Filter链。

web服务器根据Filter在web.xml中的注册顺序,决定先调用哪个Filter。

当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法,通过判断FilterChain中是否还有Filter决定后面是否还调用Filter。



3. Listener


3.1 什么是Listener


Listener就是 Application、Session、Request 三大对象创建、销毁 或者往其中添加、修改、删除属性时自动执行代码的功能组件。



3.2 作用

Listener 是用于监听某些特定动作的监听器。当特定动作发生时,监听该动作的监听器就会自动调用对应的方法,可以使用监听器监听客户端的请求、服务端的操作等。通过监听器,可以自动出发一些动作,比如监听在线的用户数量,统计网站访问量、网站访问监控等。



3.3 常用接口


ServletContextListener:对Servlet上下文的创建和销毁进行监听。
ServletContextAttributeListener:监听Servlet上下文属性的添加、删除和替换。

HttpSessionListener:对Session的创建和销毁进行监听。Session的销毁有两种情况,一个中Session超时,还有一种是通过调用Session对象的invalidate()方法使session失效。

HttpSessionAttributeListener:对Session对象中属性的添加、删除和替换进行监听;

ServletRequestListener:对请求对象的初始化和销毁进行监听;
ServletRequestAttributeListener:对请求对象属性的添加、删除和替换进行监听。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值