实现对web资源请求的拦截,完成特殊的操作,尤其是对请求的预处理。
1、过滤器的实现步骤
编写java类实现Filter接口,并实现其doFilter方法。
自动生成以下代码
package Filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class characterFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
// TODO Auto-generated method stub
}
}
doFilter过滤器的功能实现方法
init初始化时运行的方法
destroy过滤器销毁时的后期处理
doFilter方法中最后应该有 chain.doFilter(request, response);
chain为过滤器链,在doFilter结束后执行此话,代表本过滤结束进入下一个过滤器或执行操作。
2在web.xml文件中对filter类进行注册,并设置所拦截的资源。
1、注册过滤器
2、拦截映射配置
在web-app中配置
<filter>
<filter-name>characterFilter</filter-name> <!-- 过滤器名称 -->
<filter-class>Filter.characterFilter</filter-class> <!-- 过滤器地址 -->
</filter>
<filter-mapping>
<filter-name>characterFilter</filter-name> <!-- 哪个过滤器起作用 -->
<url-pattern>/*</url-pattern> <!-- 对什么请求进行过滤,,/*代表所有的请求 -->
</filter-mapping>
3、配置并获取过滤器的初始化参数
1、设置初始化参数
在web.xml中的web-app中filter中配置
<init-param>
<param-name>systemName</param-name>
<param-value>character Encoding</param-value>
</init-param>
<init-param>
<param-name>version</param-name>
<param-value>1.0</param-value>
</init-param>
param-name:参数名
param-value:参数值
2、获取初始化参数
在Filter类中添加FilterConfig属性的变量
private FilterConfig filterConfig;
得到filterConfig的set和get方法
public FilterConfig getFilterConfig() {
return filterConfig;
}
public void setFilterConfig(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
在init方法中获得传进来的FilterConfig并传给类属性
this.filterConfig=filterConfig;
3、使用初始化参数
在doFilter中
String systemName = filterConfig.getInitParameter("systemName");
获取参数值
3、doFilter代码编写 功能:字符编码的过滤
在web.xml中的web-app中filter中配置
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
doFilter中加入
request.setCharacterEncoding(filterConfig.getInitParameter("charset"));
如此在初始化时获得参数,执行时执行doFilter就完成了字符编码的过滤。
其他注意事项,很多情况下需要将request转换成HttpServletRequest类型
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponse hresponse = (HttpServletResponse)response;
filter-mapping配置的子元素dispatcher
当过滤器被调用前还要考虑资源被调用的方式
直接访问页面request方式 不修改dispatcher过滤器默认是request
include jsp中
forword 页面转换
error 错误信息
可以配置多个dispatcher