过滤器,拦截器,监听器,Servlet-----杂烩

JavaWeb三大组件:Filter过滤器、Listener监听器、Servlet程序

Servlet

Sevrlet是基于HTTP协议  运行在Tomcat容器中的按照servlet规范编写的一个Java类(Java程序/Web组件)拥有java的优点,编写一个Servlet就相当于写一个类,然后被编译为字节码文件,被动态的加载Tomcat服务器中运行,主要作用是接受请求和响应数据,SpringMVC的请求流程中的DispatcherServlet前端控制器是它的一个实现类。

Sevrlet接口定义的方法:

1.init(),初始化servlet对象,完成一些初始化工作。
它是由servlet容器控制的,该方法只能被调用一次。
2.service(),接受客户端请求对象,执行业务操作,利用响应对象响应客户端请求。
3.destroy(),当容器监测到一个servlet从服务中被移除时,容器调用该方法,释放资源。
4.getServletConfig(),ServletConfig是容器向servlet传递参数的载体。
5.getServletInfo(),获取servlet相关信息。

生命周期:

1.当客户端第一次请求Servlet时,Servlet被加载到内存中,容器会创建Servlet实例,并调用其init()方法进行初始化工作
2.容器创建请求对象和响应对象,然后调用Servlet的service()方法为客户端提供服务。
3.当Servlet不再被需要时,容器调用Servlet的destory()方法将Servlet实例销毁。

Filter过滤器

Filter过滤器是对Sevrlet容器请求和响应进行逻辑预处理的一个程序(接口),所以它的位置是在Servlet容器之前,主要作用是拦截请求和过滤响应,进行逻辑判断,例如权用户是否已经登陆、有没有权限访问该页面,对请求和响应的方法进行增强等等,一个Web容器中可以由多个Filter构成一个过滤链(FilterChain)

服务器启动时就创建该filter对象,服务器关闭时filter销毁。

完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter在对服务器响应进行后处理

生命周期:

 init(Filterconfig):代表filter对象初始化方法 filter对象创建时执行

 doFilter(ServletRequest,ServletResponse,FilterChain):代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法

destory():代表是filter销毁方法 当filter对象销毁时执行该方法

Listener监听器

Listener监听器是一个实现了特定接口的Java类;专门用于对特定域对象身上发生的事件或状态改变进行监听和相应处理,当被监视的对象发生创建或销毁,属性发生变化时,立即采取相应的行动

域对象:在某个范围之间,可以为Sevrlet之间提供共享数据的对象

三大域对象:

ServletContext:Sevrlet上下文。全局作用域对象,一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放,在Tomcat运行期间,可以为当前工程中所有的Sevrlet提供共享数据

HttpSession:会话作用域对象,由JavaWeb提供的,用来会话跟踪的类。在一次会话过程中,为本次参与会话的Sevrlet提供共享数据

ServletRequest:请求作用域对象,在一次请求过程中,为本次参与请求的所有Sevrlet提供共享数据

域对象的属性操作:

setAttribute()---设置对象的属性,如果不存在此属性,则会创建此属性。

getAttribute()---通过元素节点的属性名称获取属性的值。

removeAttribute()---删除指定的属性。

监听器主要就是监听这三个域对象的创建和销毁和属性的变化用于在事件发生前、发生后做一些必要的处理,例如        1.统计在线人数和在线用户        2.系统启动时加载初始化信息        3、统计网站访问量        4、记录用户访问路径。

Interceptor拦截器

拦截器是Spring的组件,由Spring框架支持的一个基于动态代理实现的拦截对象,它多用于拦截Controller。 

拦截器在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。比如日志,安全等。可以通过它来进行权限验证,或者判断用户是否登陆,例如12306 判断当前时间是否是购票时间。

过滤器和拦截器的区别:

1.实现原理不同:

拦截器是基于java的反射机制的。

过滤器是基于函数回调。

2.规范不同:

Filter是在Servlet规范中定义的,是Servlet容器支持的。

拦截器是在Spring容器内的,是Spring框架支持的。

3.使用范围不同:

因为过滤器Filter的使用要依赖于Tomcat等容器,所以它只能在Web程序中使用。

拦截器是Spring框架支持的,并不依赖Tomcat等容器,是可以单独使用的,不仅能应用在web程序中,也可以用于Application应用程序中。

4.拦截的请求范围不同

过滤器几乎可以对所有进入容器的请求起作用。

拦截器只会对Controller中请求或访问static目录下的资源请求起作用。

5.触发时机不同:

过滤器Filter只在Sevrlet前后起作用,在请求进入容器后,进入Servlet之前进行预处理,请求结束返回也是在servlet处理完后,返回给前端之前。

拦截器 Interceptor 是在请求进入servlet后,在进入Controller之前进行预处理的,可以深入到方法前后、异常抛出前后进行处理。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值