Filter开发
本章将详细介绍Filter的定义和作用,还将介绍如何配置Filter。将详细介绍Filter的生命周期,以及一些常用的Filter,如非法文字过滤器、字符编码过滤器以及登录验证过滤器。
通过本章的学习,读者应该能够完成如下几个目标。
熟练掌握如何定义并配置Filter
理解Filter的生命周期
熟练掌握如何添加非法文字过滤器
熟练掌握如何添加字符编码过滤器
熟练掌握如何添加登录验证过滤器
1.1Filter简介
Filter的中文译名为过滤器。从字面名称就可以看出来Filter是用来进行过滤的。借助于过滤器可以实现如下功能。
(1)过滤非法文字和信息。
(2)设置统一字符编码。
(3)对用户进行登录验证。
(4)改变图片文件格式。
(5)对相应做压缩处理。
(6)对XML的输出使用XSLT来进行转换。
在Servlet 2.3之后,如果要添加Filter只需在web.xml中配置相关设定即可。可以非常方便的为Web项目添加新的Filter和修改现有的Filter,而不需要修改原有的Servlet、JSP以及其他静态页面文件。
1.2第一个Filter程序
Filter同Servlet类似同样也是一个Java类,所以其添加方式和普通的Java类完全相同。自定义的Filter类必须实现Filter接口,还必须实现Filter接口中定义的init()方法、doFilter()方法和destroy()方法。
其中init()方法和destroy()方法分别用来初始化和销毁时调用。doFilter()方法用来实现过滤,所有的处理代码都放置在该方法中。doFilter()方法接受三个参数,分别是request、response和chain。其中request和response用来传递给下一个Filter(如果有多个Filter)或者JSP和Servlet。chain则通过调用其doFilter方法来调用下一个Filter,获得调用原始的JSP或者Servlet等其他内容。
1.3Filter生命周期
Filter同Servlet类似也具有生命周期。Filter从生成到销毁必须进过如下几个步骤。
(1)生成Filter,并通过调用其init()方法来进行初始化。
(2)过滤用户请求,调用其doFilter()方法。
(3)调用destroy()方法进行销毁,并通过垃圾收集器进行收集清理。
2 常用Filter
本节将介绍一些常用的Filter,如非法文字过滤器、字符编码过滤器、登录验证器。
2.1非法文字过滤器
实现非法文字过滤器非常简单,首先通过Filter类中doFilter()方法的request参数来获得客户端的输入。然后通过对输出的文字进行判断并进行处理,如替换该非法文字或者提示输出非法文字要求重新输出等等。最后通过chain的doFilter方法来调用下一个Filter,获得调用原始的JSP或者Servlet等其他内容。
2.2字符编码过滤器
可以通过Filter来定义一个字符编码过滤器,这时就不需要在每个JSP页面中添加设置参数字符编码格式代码了。
2.3登录验证过滤器
可以通过Filter来定义一个登录验证过滤器,这时就不需要在每个JSP页面中添加判断用户合法性代码了。
具体配置:
静态及默认通过文件路径配置
<!-- 訪問路徑過濾及session登录校验过滤 -->
<filter>
<filter-name>Filter</filter-name>
<filter-class>com.***.filter.FilterDemo</filter-class>
<init-param>
<param-name>allowed</param-name>
<param-value>***.jsp,***.jpg</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 字符转码 -->
<filter>
<filter-name>EncodChar</filter-name>
<filter-class>com.***.filter.EncodChar</filter-class>
<init-param>
<param-name>ChangeWord</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodChar</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
------------------java类-------------------------
public class FilterDemo implements Filter{
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
*****
}
public void init(FilterConfig config) throws ServletException {
*****
}
}
本章将详细介绍Filter的定义和作用,还将介绍如何配置Filter。将详细介绍Filter的生命周期,以及一些常用的Filter,如非法文字过滤器、字符编码过滤器以及登录验证过滤器。
通过本章的学习,读者应该能够完成如下几个目标。
熟练掌握如何定义并配置Filter
理解Filter的生命周期
熟练掌握如何添加非法文字过滤器
熟练掌握如何添加字符编码过滤器
熟练掌握如何添加登录验证过滤器
1.1Filter简介
Filter的中文译名为过滤器。从字面名称就可以看出来Filter是用来进行过滤的。借助于过滤器可以实现如下功能。
(1)过滤非法文字和信息。
(2)设置统一字符编码。
(3)对用户进行登录验证。
(4)改变图片文件格式。
(5)对相应做压缩处理。
(6)对XML的输出使用XSLT来进行转换。
在Servlet 2.3之后,如果要添加Filter只需在web.xml中配置相关设定即可。可以非常方便的为Web项目添加新的Filter和修改现有的Filter,而不需要修改原有的Servlet、JSP以及其他静态页面文件。
1.2第一个Filter程序
Filter同Servlet类似同样也是一个Java类,所以其添加方式和普通的Java类完全相同。自定义的Filter类必须实现Filter接口,还必须实现Filter接口中定义的init()方法、doFilter()方法和destroy()方法。
其中init()方法和destroy()方法分别用来初始化和销毁时调用。doFilter()方法用来实现过滤,所有的处理代码都放置在该方法中。doFilter()方法接受三个参数,分别是request、response和chain。其中request和response用来传递给下一个Filter(如果有多个Filter)或者JSP和Servlet。chain则通过调用其doFilter方法来调用下一个Filter,获得调用原始的JSP或者Servlet等其他内容。
1.3Filter生命周期
Filter同Servlet类似也具有生命周期。Filter从生成到销毁必须进过如下几个步骤。
(1)生成Filter,并通过调用其init()方法来进行初始化。
(2)过滤用户请求,调用其doFilter()方法。
(3)调用destroy()方法进行销毁,并通过垃圾收集器进行收集清理。
2 常用Filter
本节将介绍一些常用的Filter,如非法文字过滤器、字符编码过滤器、登录验证器。
2.1非法文字过滤器
实现非法文字过滤器非常简单,首先通过Filter类中doFilter()方法的request参数来获得客户端的输入。然后通过对输出的文字进行判断并进行处理,如替换该非法文字或者提示输出非法文字要求重新输出等等。最后通过chain的doFilter方法来调用下一个Filter,获得调用原始的JSP或者Servlet等其他内容。
2.2字符编码过滤器
可以通过Filter来定义一个字符编码过滤器,这时就不需要在每个JSP页面中添加设置参数字符编码格式代码了。
2.3登录验证过滤器
可以通过Filter来定义一个登录验证过滤器,这时就不需要在每个JSP页面中添加判断用户合法性代码了。
具体配置:
静态及默认通过文件路径配置
<!-- 訪問路徑過濾及session登录校验过滤 -->
<filter>
<filter-name>Filter</filter-name>
<filter-class>com.***.filter.FilterDemo</filter-class>
<init-param>
<param-name>allowed</param-name>
<param-value>***.jsp,***.jpg</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 字符转码 -->
<filter>
<filter-name>EncodChar</filter-name>
<filter-class>com.***.filter.EncodChar</filter-class>
<init-param>
<param-name>ChangeWord</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodChar</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
------------------java类-------------------------
public class FilterDemo implements Filter{
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
*****
}
public void init(FilterConfig config) throws ServletException {
*****
}
}