数据从页面传到后台: jsp---->拦截器--->后台处理 返回---> 拦截器--->jsp
java web 过滤器跟拦截器的区别和使用分别介绍如下:
1、过滤器的使用
Filter主要对客户端的请求和服务器的响应进行过滤,使用场景:
客户端的请求到达服务器,服务器真正开始处理这个请求之前,要经过Filter的过滤
服务器真正的处理完这个请求,生成响应之后,要经过Filter的过滤,才能将响应发送给客户端
作用:可以通过Filter技术,对web服务器管理的所有web资源,例如JSP、Servlet、静态文件或静态 html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
配置Filter
同开发Servlet一样,写完了类,接下来就是配置了,我们需要在webxml文件中配置Filter。具体的配置和Servlet配置如出一辙。
<filter>
<filter-name>log</filter-name>
<filter-class>comjellythinkpractiseLogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log</filter-name>
<url-pattern>/</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
上面配置中比较重要的就是url-pattern和dispatcher了。
过滤类:
public class LogFilter implements Filter
{
private FilterConfig config;
public void init(FilterConfig config)
{
thisconfig = config;
}
public void destroy()
{
thisconfig = null;
}
// 这个方法是Filter的核心方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
// 对用户的请求进行处理
ServletContext context = thisconfiggetServletContext();
long begin = SystemcurrentTimeMillis();
// 输出过滤信息
Systemoutprintln("开始过滤");
>
2、拦截器的使用:
拦截器的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。
1在SpringMVC的配置文件中加上支持MVC的schema
xmlns:mvc=">
<beans xmlns=">
这样在SpringMVC的配置文件中就可以使用mvc标签了,mvc标签中有一个mvc:interceptors是用于声明SpringMVC的拦截器的。
你好,要想知道哪个好,要说一下两者的区别,拦截器是struts的或者spring mvc框架封装的,过滤器是java ee自身的过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url。主要为了减轻服务器负载。减少压力
拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法。比如可以用拦截器做一些权限管理 或者log之类的事情。
两者作用是不同的。如果单纯的统计,建议还是使用过滤器比较好
希望可以解决你的问题拦截器的工作原理:
当接收到一个>当然有这个概念
struts只是 java的一个封装而已。什么框架都是基于java的。
过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url。主要为了减轻服务器负载。减少压力
拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法。比如可以用拦截器做一些权限管理 或者log之类的事情。
两者作用是不同的。
javaxwsrsextProviders 是JAX-RS 20定义的一种辅助接口,其实现类用于辅助REST框架完成过滤和读写拦截的功能,可以使用@Provider 注解标注这些类。Providers接口一共定义了四个方法,分别用来获取MessageBodyReader,MessageBodyWriter,ExceptionMapper,ContextResolver
Jersey 之所以支持那么多中响应实体的传输格式,是因为其底层实体Providers具备的对不同格式的处理能力。Jersey内部提供了丰富的MessageBodyReader和MessageBodyWriter 接口的实现类,用于处理不同格式的表述
如上图,请求流程中存在三种角色,分别是:用户,REST客户端和REST服务器,请求始于请求的发送,止于调用Resonse的readEntity()方法
(1)用户请求提交数据,客户端接收请求,进入第一个扩展点:客户端请求过滤器 ClientRequestFilter 的filter()方法
(2)请求处理过滤完毕后,流程进入第二个扩展点:客户端写拦截器WriterInterceptor实现类的aroundWriterTo() 方法,实现对客户端序列化 *** 作的拦截
(3)客户端消息体写处理器MessageBodyWriter 执行序列化,流程从客户端过渡到服务器端
(4)服务器接收请求,流程进入第三个扩展点:服务器前置请求过滤器ContainerRequestFilter实现类 的filter()方法
(5)过滤器处理完毕后,服务器根据请求匹配资源方法,如果匹配到相应的资源方法,流程进入第四个扩展点:服务器后置请求过滤器ContainerRequestFilter 实现类 的filter() 方法
(6)后置请求过滤器处理完毕后,力促进入第五个扩展点:服务器读拦截器ReaderInterceptor实现类 的aroundReadFrom() 方法,拦截服务器端反序列化 *** 作
(7)服务器消息体读处理器MessageBodyReader 完成对客户端数据流的反序列化,服务器执行匹配的资源方法
(8)REST请求资源的处理完毕后,流程进入第六个扩展点:服务器响应过滤器 ContainerResponseFilter 实现类 的filter() 方法
(9)过滤器处理完毕后,流程进入第七个扩展点:服务器写拦截器WriterInterceptor实现类 的aroundWriterTo() 方法,实现对服务器端序列化到客户端这个 *** 作的拦截
(10)服务器消息体写处理器MessageBodyWriter 执行序列化,流程返回到客户端一侧
(11)客户端接收响应,流程进入第八个扩展点:客户端响应过滤器ClientResponseFilter 实现类 的filter() 方法
(12)过滤处理完毕后,客户端响应实例response 返回到用户一侧,用户执行responsereadEntity(),流程进入第九个扩展点:客户端拦截器ReaderInterceptor实现类 的aroundReadFrom() 方法,对客户端反序列化进行拦截
(13)客服端消息体读处理器MessageBodyReader 执行反序列化,将Java类型的对象最终作为readENtity()方法的返回值
JAX-RS-20定义的4种过滤器扩展点接口,供开发者实现其业务逻辑,按请求处理流程的先后顺序为:客户端请求过滤器(ClientRequestFilter) -------> 服务端请求过滤器(ContainerRequestFilter)-------->服务端响应过滤器(ContainerResponseFilter)——>客户端响应过滤器(ClientResponseFilter)
ClientRequestFilter
ClientResponseFilter
ContainerRequestFilter
ContainerResponseFilter
Jersey 内部实现了几个典型应用的拦截器,他们是成对出现的
ReaderInterceptor
WriterInterceptor
编码解码拦截器(ContentEncoder)
优先级的定义使用注解 @Priority ,优先级的值是一个整数值,对于ContainerReauest,PreMatchContainerRequest,ClientRequest 和读写拦截器 采用升序策略,数值越小,优先级越高;对于ContainerResponse和ClientResponse采用降序策略,数值越大,优先级越高
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)