什么是过滤器?
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。
过滤器语法格式
创建一个类实现Filter接口
public class MyFilter implements Filter{}
重写接口中的方法
public void destroy() { //销毁的方法}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
/*初始化方法 接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
}
在web.xml文件中配置
<filter>
<filter-name>过滤器名称</filter-name>
<filter-class>过滤器所在的路径</filter-class>
</filter>
<filter-mapping>
<filter-name>过滤器名称</filter-name>
<url-pattern>需要过滤的资源</url-pattern>
</filter-mapping>
多个过滤器执行顺序
先执行的后结束
后执行的先结束
统一设置编码方式
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理
HttpServletReqeust requst = (HttpServletRequest)req;
requst.setCharacterEncoding("utf-8");
FilterChain.doFilter(req, resp);//调取下一个servlet或filter
}
通过过滤器来禁止特定用户访问页面
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理
HttpServletRequest request = (HttpServletRequest)req;
HttpServletRequest response = (HttpServletResponse)resp;
requst.setCharacterEncoding("utf-8");
String username = request.getSession().getAttribute("username");
String requestURI = request.getRequestURI();//获取请求地址
if(requestURI.endsWith("/") || requestURI.endsWith("error.jsp")||requestURI.endsWith("login.jsp"||username!=null){
FilterChain.doFilter(req, resp);//调取下一个servlet或filter
}else{
response.sendRedirect("/Error.jsp");
}
}