servlet过滤器filter
2018-01-10 23:05
232 查看
说明:web.xml的加载顺序是:【Context-Param】->【Listener】->【Filter】->【Servlet】,而同个类型之间的实际程序调用的时候的顺序是根据对应的Mapping的顺序进行调用。
Servlet过滤器是在Java Servlet 2.3 规范中定义的,它是一种可以插入的Web组件,它能够对Servlet 容器的接收到的客户端请求和向客户端发出的响应对象进行截获,过滤器支持对Servlet程序和JSP页面的基本请求处理功能,如日志、性能、安全、会话 处理、XSLT转换等。
Servlet过滤器本身不产生请求和响应,它只提供过滤作用,Servlet过滤器能够在Servlet程序(JSP页面)被调用之前检查 request对象,修改请求头和请求内容,在Servlet程序(JSP页面)被调用之后,检查response对象,修改响应头和响应内容。
2.Servlet过滤器可以被指定与特定的URL关联,只有当客户请求访问该特定的URL时,才会触发过滤器。
3.Servlet过滤器可以被串联成串,形成过滤链,协同修改请求和响应。
Servlet过滤器的作用
1.查询请求并作出相应的行动。
2.阻塞请求--响应对,使其不能进一步传递。
3.修改请求头和内容,用户可以提供自定义的请求。
4.修改响应头和内容,用户可以通过提供定制的响应版本实现。
5.与外部资源进行交互。
API中良好定义的标准接口来实现。
Web资源可以配置成为没有过滤器与之关联(默认情况)、与单个过滤器关联(典型情况),甚至是与一个过滤器链关联。其功能与Servlet一 样,主要是接收请求和响应对象,然后过滤器会检查请求对象,并决定是将该请求转发给链中的下一个过滤器,还是终止该请求并直接向客户端发会一个响应,如果 请求被转发了,它将被传递给过滤链中的下一个过滤器,或者Servlet程序(JSP页面),在这个请求通过过滤器链并被服务器处理后,一个响应将以相反 的顺序通过该过滤链发送回去,这样就给每个Servlet过滤器提供了根据需要处理响应对象的机会。
当过滤器在Servlet 2.3规范中首次引入时,只能过滤客户端和客户端所访问的指定Web资源之间的内容(请求/响应),如果该Web资源将请求转发给其它Web资源时,那就 不能向幕后委托的任何请求应用过滤器。Servlet 2.4 规范消除了这个限制,Servlet过滤器现在可以应用于J2EE Web环境中存在请求和响应的任何地方。可见,Servlet过滤器可以应用在客户端和Servlet程序之间、Servlet程序和Servlet程序 之间、Servlet程序和JSP页面之间、JSP页面和JSP页面之间,具有强大的能力和灵活性。
Servlet过滤器对请求的过滤
1.Servlet容器创建一个Servlet过滤器实例。
2.Servlet过滤器实例调用init()方法得到初始化参数。
3.Servlet过滤器实例调用doFilter()方法,根据初始化参数的值判断该请求是否合法,如果该请求不合法,则阻塞该请求,如果是合法请求,则调用chain.doFilter(request,response)方法将该请求向后转发。
Servlet过滤器对响应的过滤
1.过滤器截获客户端的请求。
2.重新封装ServletResponse,在封装后的ServletResponse中提供客户端自定义的输出流。
3.将请求向后转发。
4.Web组件产生响应。
5.过滤器从被封装的ServletResponse中获取客户自定义的输出流。
6.将响应内容通过客户自定义的输出流写入缓冲流。
7.在缓冲流中修改响应内容后清空缓冲流,输出响应内容。
<filter-mapping>元素用于将过滤器与URL关联,其属性有:
Servlet过滤器的创建步骤
1.创建一个实现了javax.servlet.Filter接口的类。
2.重写init(FilterConfig)方法,读入为过滤器配置的初始化参数,申请过滤器需要的资源。
3.重写方法doFilter(ServletRequest,ServletResponse,FilterChain),完成过滤操作,可以 从ServletRequest参数中得到全部的请求信息,从ServletResponse参数中得到全部的响应信息。
4.在doFilter()方法的最后,使用FilterChain参数的doFilter()方法将请求和响应后传。
5.对响应的Servlet程序和JSP页面注册过滤器,在部署描述文件(web.xml)中使用<filter-apping>和<filter>元素对过滤器进行配置。
1.init()[b]:在容器实例化过滤器市时被调用,主要为过滤器做初始化,该方法有一个FilterConfig类型的形参。
2.doFilter():这个方法用来完成真正的过滤操作,它有3个形式参数:ServletRequest参数包含请求信息,ServletResponse参数包含响应信息,FilterChain参数用来将请求和响应向后传递。
3.destroy():过滤器被撤消时调用这个方法,释放过滤器所 占有的资源。
[/b]
servlet过滤器的简单介绍
Servlet过滤器是 Servlet 程序的一种特殊用法,主要用来完成一些通用的操作,如编码的过滤、判断用户的登录状态。过滤器使得Servlet开发者能够在客户端请求到达 Servlet资源之前被截获,在处理之后再发送给被请求的Servlet资源,并且还可以截获响应,修改之后再发送给用户。Servlet过滤器是在Java Servlet 2.3 规范中定义的,它是一种可以插入的Web组件,它能够对Servlet 容器的接收到的客户端请求和向客户端发出的响应对象进行截获,过滤器支持对Servlet程序和JSP页面的基本请求处理功能,如日志、性能、安全、会话 处理、XSLT转换等。
Servlet过滤器本身不产生请求和响应,它只提供过滤作用,Servlet过滤器能够在Servlet程序(JSP页面)被调用之前检查 request对象,修改请求头和请求内容,在Servlet程序(JSP页面)被调用之后,检查response对象,修改响应头和响应内容。
Servlet过滤器的特点
1.Servlet过滤器可以检查和修改request和response对象。2.Servlet过滤器可以被指定与特定的URL关联,只有当客户请求访问该特定的URL时,才会触发过滤器。
3.Servlet过滤器可以被串联成串,形成过滤链,协同修改请求和响应。
Servlet过滤器的作用
1.查询请求并作出相应的行动。2.阻塞请求--响应对,使其不能进一步传递。
3.修改请求头和内容,用户可以提供自定义的请求。
4.修改响应头和内容,用户可以通过提供定制的响应版本实现。
5.与外部资源进行交互。
Servlet过滤器的体系结构
Servlet过滤器用于拦截传入的请求和传出的响应,并监视、修改或以某种方式处理 正在通过的数据流。Servlet过滤器是自包含、模块化的组件,可以将它们添加到请求/响应过滤链中,或者在不影响应用程序中其它Web组件的情况下删 除它们。Servlet过滤器只在改动请求和响应的运行时处理,因而不应该将它们之间嵌入到Web应用程序框架,除非是通过ServletAPI中良好定义的标准接口来实现。
Web资源可以配置成为没有过滤器与之关联(默认情况)、与单个过滤器关联(典型情况),甚至是与一个过滤器链关联。其功能与Servlet一 样,主要是接收请求和响应对象,然后过滤器会检查请求对象,并决定是将该请求转发给链中的下一个过滤器,还是终止该请求并直接向客户端发会一个响应,如果 请求被转发了,它将被传递给过滤链中的下一个过滤器,或者Servlet程序(JSP页面),在这个请求通过过滤器链并被服务器处理后,一个响应将以相反 的顺序通过该过滤链发送回去,这样就给每个Servlet过滤器提供了根据需要处理响应对象的机会。
当过滤器在Servlet 2.3规范中首次引入时,只能过滤客户端和客户端所访问的指定Web资源之间的内容(请求/响应),如果该Web资源将请求转发给其它Web资源时,那就 不能向幕后委托的任何请求应用过滤器。Servlet 2.4 规范消除了这个限制,Servlet过滤器现在可以应用于J2EE Web环境中存在请求和响应的任何地方。可见,Servlet过滤器可以应用在客户端和Servlet程序之间、Servlet程序和Servlet程序 之间、Servlet程序和JSP页面之间、JSP页面和JSP页面之间,具有强大的能力和灵活性。
Servlet过滤器对请求的过滤
1.Servlet容器创建一个Servlet过滤器实例。2.Servlet过滤器实例调用init()方法得到初始化参数。
3.Servlet过滤器实例调用doFilter()方法,根据初始化参数的值判断该请求是否合法,如果该请求不合法,则阻塞该请求,如果是合法请求,则调用chain.doFilter(request,response)方法将该请求向后转发。
Servlet过滤器对响应的过滤
1.过滤器截获客户端的请求。2.重新封装ServletResponse,在封装后的ServletResponse中提供客户端自定义的输出流。
3.将请求向后转发。
4.Web组件产生响应。
5.过滤器从被封装的ServletResponse中获取客户自定义的输出流。
6.将响应内容通过客户自定义的输出流写入缓冲流。
7.在缓冲流中修改响应内容后清空缓冲流,输出响应内容。
Servlet过滤器的发布
Seevlet过滤器设计完毕之后,必须对该过滤器进行发布(配置), 发布一个Servlet过滤器时,必须在项目的web.xml文件中加入<filter>元素和<filter- mapping>元素,<filter>元素用来定义一个过滤器,该元素的属性有:属性 | 描述 |
filter-name | 指定过滤器的名字 |
filter-class | 指定过滤器类 |
init-param | 指定过滤器的初始化参数 |
属性 | 描述 |
filter-name | 指定过滤器的名字 |
url-pattern | 指定与过滤器关联的URL |
Servlet过滤器的创建步骤
1.创建一个实现了javax.servlet.Filter接口的类。2.重写init(FilterConfig)方法,读入为过滤器配置的初始化参数,申请过滤器需要的资源。
3.重写方法doFilter(ServletRequest,ServletResponse,FilterChain),完成过滤操作,可以 从ServletRequest参数中得到全部的请求信息,从ServletResponse参数中得到全部的响应信息。
4.在doFilter()方法的最后,使用FilterChain参数的doFilter()方法将请求和响应后传。
5.对响应的Servlet程序和JSP页面注册过滤器,在部署描述文件(web.xml)中使用<filter-apping>和<filter>元素对过滤器进行配置。
package com.worknotes.util; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.hibernate.Session; import org.hibernate.Transaction; public class OpenSessionInViewFilter implements Filter { public void destroy() { } public void doFilter(S bc4f ervletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { response.setContentType("text/html;charset=UTF-8"); Session session = null; Transaction tx = null; try { session = HibernateUtil.currentSession(); tx = session.beginTransaction(); chain.doFilter(request, response); tx.commit(); } catch (Exception e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } } } public void init(FilterConfig config) throws ServletException { } }
<filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>sessionFactoryBeanName</param-name> <param-value>sessionFactory</param-value> </init-param> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>flushMode</param-name> <param-value>AUTO</param-value> </init-param> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
1.init()[b]:在容器实例化过滤器市时被调用,主要为过滤器做初始化,该方法有一个FilterConfig类型的形参。
2.doFilter():这个方法用来完成真正的过滤操作,它有3个形式参数:ServletRequest参数包含请求信息,ServletResponse参数包含响应信息,FilterChain参数用来将请求和响应向后传递。
3.destroy():过滤器被撤消时调用这个方法,释放过滤器所 占有的资源。
[/b]
相关文章推荐
- Servlet Filter 过滤器 对指定页面不拦截
- Servlet中的过滤器Filter详解
- jsp servlet中的过滤器Filter配置总结
- Jsp Servlet配置过滤器Filter
- Servlet中的过滤器Filter详解
- Servlet Filter(过滤器)
- Servlet中的过滤器Filter详解
- Servlet过滤器(Filter)
- Servlet中的过滤器Filter详解
- 使用java的过滤器filter备忘(HttpServletResponseWrapper)
- 理解Servlet过滤器(javax.servlet.Filter)
- Servlet3.0介绍~使用注解标注监听器(Listener)和过滤器(Filter)
- Jsp Servlet配置过滤器Filter
- Servlet中的过滤器Filter详解
- Java --- Servlet中的过滤器Filter
- Servlet Filter(过滤器)
- Servlet中的过滤器(拦截器)Filter与监听器Listener的作用和区别
- Servlet过滤器Filter和监听器
- Java Servlet Filter实现Web路径和用户日志过滤器
- 理解Servlet过滤器(javax.servlet.Filter)