程序中的过滤器:双向过滤器
在Java中最小的程序单元是类,程序中的过滤器就是一个特殊的类鞠爱红
Servlet/Filter是Web的一个组件。
Web中过滤器的作用(简单理解为:过滤处在客户端和服务端资源之间):
过滤器可以对所有的请求或者响应做拦截操作。
1:以常规的方式调用资源(Servlet/JSP);
2:利用修改过的请求信息调用资源;
3:调用资源之后,但在响应到客户端之前,对响应做出修改;
4:阻止当前资源调用,代之转到其他资源。
过滤器在开发中的运用:
1:可以对请求中的字符做编码。
2:登录验证过滤器。
3:对敏感字(非法文字)进行过滤。
4:做MVC框架中的前端控制器(处理所有请求共同的操作,再分发)。
以下对Servlet开发和Filter开发作对比:
Servlet开发:
1:自定义一个类(XxxServlet),实现于javax.servlet.Servlet接口。
2:实现Servlet接口中的方法(init(初始化方法),service(处理请求))。
3:通过Tomcat来管理该Servlet程序(1:使用web.xml做相关配置; 2:WebServlet("/资源名"))。
<servlet>
<servlet-name>Servlet的别名</servlet-name>
<servlet-class>自定义Servlet的全限定名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet的别名</servlet-name>
<url-pattern>/资源名称</url-pattern>
</servlet-mapping>
注意:此时的url-pattern的文本内容是外界访问Servlet的资源名称。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Filter开发:
1:自定义一个类(XxxFilter),实现于javax.filter.Filter接口。
2:实现Filter接口中的方法(init(初始化方法),doFilter(执行过滤操作))。
3:通过Tomcat来管理该Filter程序(1:使用web.xml做相关配置; 2:WebFilter("/资源名"))。
<filter>
<filter-name>Filter的别名</filter-name>
<filter-class>自定义Filter的全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter的别名</filter-name>
<!-- 对哪些资源做过滤操作 -->
<url-pattern>/资源名称</url-pattern>
</filter-mapping>
注意:此时的url-pattern的文本内容是指Filter对哪一些资源进行过滤操作。
如: /hello.jsp :说明当前Filter只会对/hello.jsp做拦截/过滤。
/employee :说明当前Filter只会对/employee资源做拦截/过滤。
/system/* :说明当前Filter只会对以/system/作为前缀的资源做拦截/过滤。
/* :说明当前Filter会对所有资源做拦截/过滤。
FilterChain(过滤器链):多个过滤器按照一定的顺序,排列起来。
拦截器栈:程序中,存在多个过滤器的时候,过滤器的先后顺序由在web.xml中配置的<filter-mapping>的先后顺序来决定。