网站模板定做wordpress 更新文章
网站模板定做,wordpress 更新文章,内蒙古seo公司,安康网站建设技巧一个、总结 简单的说#xff0c;Filter的作用就是拦截(Tomcat的)service#xff08;Request#xff0c;Response#xff09;方法。拿到Request、Response对象进行处理。然后释放控制。继续自己主动流转。其运用的还是“分层”的思想。至于为什么要增加这一层#xff0c;为… 一个、总结 简单的说Filter的作用就是拦截(Tomcat的)serviceRequestResponse方法。拿到Request、Response对象进行处理。然后释放控制。继续自己主动流转。其运用的还是“分层”的思想。 至于为什么要增加这一层为什么要对Request、Response对象进行拦截。个人感觉根本原因是为了对多个server资源Servlet、JSP等的请求、对应进行一些公共的设置。这里强调的是“多个”。假设是一个资源就没有设置Filter的必要由于仅仅须要在这个资源须要的地方之前设置Request、Response就可以。也就是“设置”放到哪里都能够由于非常多请求、响应有非常多共同的设置所以将共同之处抽出来作为一层。就是所谓的Filter。作用例如以下图 传统调用 加上Filter 二、FilterChain 当几个Servlet有一些同样的设置过滤而另几个Servlet有其他同样的设置……这样一个Filter是不能完毕全部的过滤所以就须要多个Filter协作来共同完毕这项任务。于是著名的FilterChain就出来了。那么这个FilterChain中的多个Filter是怎样协作的呢 每一个Filter的职能不同当一个Servlet的请求到达后这个请求就会沿着这条Filter链一个一个走过走到它须要的Filter时。这个Filter就会进行对它的Request、Response进行操作。完成后自己主动向下流转。这就是所谓的职责链模式。 每一个Filter有3个方法 Ø init(FilterConfig filterConfig) Ø doFilter(ServletRequest request, ServletResponse response, FilterChain chain) Ø destroy() 三个方法以下进行具体介绍依次运行一个Filter链中的多个Filter的运行顺序例如以下图 即运行第一个过滤器的chain.doFilter()之前的代码----第二个过滤器的chain.doFilter()之前的代码----……----第n个过滤器的chain.doFilter()之前的代码----所请求servlet的service()方法中的代码——所请求servlet的doGet()或doPost()方法中的代码----第n个过滤器的chain.doFilter()之后的代码----……----第二个过滤器的chain.doFilter()之后的代码----第一个过滤器的chain.doFilter()之后的代码。 三、主要接口与方法 首先Servlet过滤器API包括了3个接口它们都在javax.servlet包中各自是Filter接口、FilterChain接口和FilterConfig接口。使用 Ø 全部的过滤器都必须实现Filter接口。该接口定义了init(),doFilter()destory()三个方法。 Ø FilterChain接口作为了doFilter0方法的參数: doFilter(ServletRequest request, ServletResponse response,FilterChain chain) Ø FilterConfig接口作为了init()方法的參数: init(FilterConfig filterConfig) 也就是过滤器类将实现Filter接口然后使用这个过滤器类中的FilterChain和FilterConfig接口。该过滤器类的—个引用将传递给FilterChain对象以同意过滤器把控制权传递给链中的下一个资源。FilterConfig对象将由容器提供给过滤器以同意訪问该过滤器的初始化数据。以下对3个接口与所包括的方法进行简要介绍 Filter接口 1) public void init (FilterConfig filterConfig) throws ServletException 当開始使用servlet过滤器服务时。Web容器调用此方法一次。为服务准备过滤器即通过FilterConfig对象拿到过滤器的初始化參数。即配置文件里配置的信息。然后在须要使用过滤器的时候调用doFilter()。并传递配置信息。 2) public voiddoFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 每一个过滤器都接受当前的请求和响应且FilterChain过滤器链中的过滤器应该都是符合条件的都会被运行。doFilter方法中过滤器能够对请求和响应做它想做的一切通过调用他们的方法收集数据或者给对象加入新的行为。 过滤器通过传送至此方法的FilterChain參数调用chain.doFilter()将控制权传送给下一个过滤器。当这个调用返回后过滤器能够在它的 Filter方法的最后对响应做些其他的工作。假设过滤器想要终止请求的处理或得到对响应的全然控制则能够不调用下一个过滤器。而将其重定向至其他一些页面。当链中的最后一个过滤器调用chain.doFilter()方法时。将执行最初请求的Servlet。 3) public voiddestroy() 假设doFilter()法里的全部线程退出或已超时容器调用此方法。server调用destory()以指出过滤器已结束服务。用于释 放过滤器占用的资源。 FilterChain接口 1) public voiddoFilter(ServletRequest requestServletResponse response) throws java.io.IOExceptionServletException 此方法是由Servlet容器提供给开发人员的用于对资源请求过滤链的依次调用通过FilterChain调用过滤链中的下一个过滤 器假设是最后一个过滤器则下一个就调用目标资源。 FilterConfig接口 FilterConfig接口检索过滤器名、初始化參数以及活动的Servlet上下文。 1) public java.lang.String getFilterName() 2) public ServletContext getServletContex() 3) public java.lang.String getlnitParameter(java.lang.String name) 4) public java.util.Enumeration getlnitParameterNames() 四、配置使用 过滤器通过Web应用程序中的配置描写叙述符web.xml文件里的明。包含部分filter、filter-mapping filter。主要包含 1) filter-name和fflter-class两个必须的子元素 2) icon、init-param,display-name,description这4个可选的子元素。 filter-name子元素定义了—个过滤器的名字filter-class指定了由容器加载的实际类init-param子元素为过滤器提供初始化參数。 filter-mapping主要由 1) filter-name,servlet-name和url-pattem子元素组成。 servlet-name将过滤器映射到一个或多个Servlet上url-pattem将过滤器映射到—个或多个随意特征的URL的JSP页面。 url-pattem的4种配置方式 filterfilter-nameCharsetEncodingFilter/filter-namefilter-classcom.bjpowernode.drp.util.filter.CharsetEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueGBK/param-value/init-param/filter!--精确匹配不採用不论什么修饰符 --filter-mappingfilter-nameCharsetEncodingFilter/filter-nameurl-pattern/servlet/TestServlet/url-pattern/filter-mapping!--扩展匹配由*号和扩展名组成 --filter-mappingfilter-nameCharsetEncodingFilter/filter-nameurl-pattern*.jsp/url-pattern/filter-mapping!--路径前缀匹配。包括一个文件夹和一个/* --filter-mappingfilter-nameCharsetEncodingFilter/filter-nameurl-pattern/servlet/*/url-pattern/filter-mapping!--全匹配。使用/* --filter-mappingfilter-nameCharsetEncodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping 五、代码演示样例 Filter类 package com.bjpowernode.drp.util.filter;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.omg.CORBA.Request;
/*** 採用Filter允许处理字符集* author v-wangzhip*/
public class CharsetEncodingFilter implements Filter {private String encoding;Overridepublic void destroy() {// TODO Auto-generated method stub}Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//System.out.println(CharsetEncodingFilter----begin);//设置字符集request.setCharacterEncoding(encoding);//继续向下运行chain.doFilter(request, response);//System.out.println(CharsetEncodingFilter----end);}Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.encodingfilterConfig.getInitParameter(encoding);System.out.println(encoding---- encoding);}
}Web.xml配置 filterfilter-nameCharsetEncodingFilter/filter-namefilter-classcom.bjpowernode.drp.util.filter.CharsetEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueGBK/param-value/init-param/filterfilter-mappingfilter-nameCharsetEncodingFilter/filter-nameurl-pattern*.jsp/url-pattern/filter-mappingfilter-mappingfilter-nameCharsetEncodingFilter/filter-nameurl-pattern/servlet/*/url-pattern/filter-mapping 六、总结 个人感觉Filter是将多个请求-响应中公共的须要设置的东西提出来插入到请求-响应之间的一个中间层。多个Filter组成一个FilterChain。每一个Filter有自己的职能。能依照一定规则来处理到达的请求和响应体现了职责链模式。Filter仅仅对post请求起作用它提供了一种声明式服务。具有可插拔能力即能够任意开启和关闭。 版权声明本文博客原创文章博客未经同意不得转载。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89031.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!