Filter过滤器的生命周期和Servlet一样,过滤器的生命周期分为四个阶段
- 实例化,实现javax.servlet.Filter接口
- 读取过滤器的初始化函数,调用init()方法
- 完成对请求或过滤的响应,调用doFilter()方法
- 销毁过滤器,调用destroy()方法
Filter过滤器的几种用法
1.编码格式的过滤,加配置
public class CharacterEncodingFilter implements Filter {
private String encoding;
@Override
public void destroy() {
System.out.println("过滤器被销毁");
encoding=null;
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
System.out.println("测试执行...");
req.setCharacterEncoding(encoding);
//req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=UTF-8");
chain.doFilter(req, resp);
}
@Override
public void init(FilterConfig fc) throws ServletException {
System.out.println("过滤器初始化");
System.out.println("init先执行哟。。。");
encoding = fc.getInitParameter("encoding");
}
}
web.xml需要配置的文件
<filter>
<description>这是字符乱码过滤器</description>
<filter-name>CharactorEncodingFilter</filter-name>
<filter-class>com.wcent.filter.CharactorEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharactorEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.页面安全
如没有登录的用户没有权限访问某些页面,需要得到session值
第二种配置,直接在java文件中配置 @WebFilter导入 javax.servlet.annotation.WebFilter
//description 名称,随便取
//filterName 类名
//urlPatterns 需要加安全的文件路径,如/view下的所有jsp文件/*
@WebFilter(description = "这是安全过滤器", filterName = "SecurityFilter", urlPatterns = { "/view/*" })
public class SecurityFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest rep =(HttpServletRequest)request;
HttpServletRequest resp =(HttpServletRequest)response;
HttpSession session = rep.getSession();
if (null == session.getAttribute("j_u")) {
// 重定向到登录页面
// resp.sendRedirect(rep.getContextPath() + "/index.jsp");
return;
}
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}