Filter(过滤器)
过滤器:可以用来过滤网站的数据、解决编码问题、实现登录验证和权限拦截等等
就像写Servlet要实现Servlet一样,编写过滤器要实现Filter接口
然后,主要的任务就是编写doFile(req, response, fileChain)方法
fileChain.doFile(req, response);这条语句必须要写,请求经过过滤器就会停止,不会继续传下去
下面写的过滤器可以解决中文乱码的问题:
public class CharacterEncodingFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Web服务器启动的时候CharsetEncodingFilter就会初始化");
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletResponse.setContentType("text/html;");
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
System.out.println("CharsetEncodingFilter执行前...");
// 让我们的请求继续走,如果不写,程序到这里就会拦截停止
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("CharsetEncodingFilter执行后...");
}
public void destroy() {
System.out.println("Web服务器关闭的时候CharsetEncodingFilter会被销毁");
}
}
过滤器和Servlet一样,也需要注册和路径映射:
<!-- 注册Filter -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!-- 这个路径代表servlet目录下的所有请求都会经过这个过滤器 -->
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>