版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39984761/article/details/81207307
过滤器是java web中相当重要的组成成分,是JavaWeb三大组件之一,它与Servlet很相似。不过过滤器有以下三条特性:
过滤器是用来拦截请求的,而不是处理请求的。
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。
其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。
原理示意图如下
Filter开发经常有以下三个步骤:
1. 新建java类实现javax.servlet.Filter接口
2. 将新Filter实现类注册到web.xml
3. 设置url-partten,设置过滤链接
让我们以一个字符集过滤器为例,演示一下全过程
1, 新建java类实现javax.servlet.Filter接口
package common;
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.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CharacterFilter implements Filter {
private Log log = LogFactory.getLog(CharacterFilter.class);// 使用Log4j输出提示信息
String encoding="UTF-8";
public void init(FilterConfig filterConfig) throws ServletException {
String config=filterConfig.getInitParameter("encoding");
log.info("字符集过滤器初始化");
if(config!=null&&!"".equals(config)){
encoding=config;
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void destroy() {
// TODO Auto-generated method stub
log.info("字符集过滤器销毁");
}
}
2,将新Filter实现类注册到web.xml
3,设置url-partten,设置过滤链接
注册完成后,字符集过滤器就设置好了。
以上就是一个过滤器的实例,其他的过滤器都是类似的实现方法。
字符集通常的用途有:
统一全站字符编码。
登录验证。
字符过滤