过滤器:
全称:Servlet过滤器 Servlet就是Servlet Servlet过滤器就是Servlet过滤器 翻译:Filter 功能:客户端发请求给服务端。 服务端回响应给客户端 进行代码的处理。 用处: 最常见的编码过滤器 登录校验过滤器 等等
如何实现:
一般放在filter包下
如何创建一个Filter
1.创建一个类
2.实现Filter接口 注意是Servlet下的Filter接口
3.重写该接口下的所有方法分别是init(初始化) destory(消亡) doFilter(过滤的相关代码)
4.添加注解 @WebFilter("/Xxx") Xxx表示我要过滤哪些请求或响应 一般来说都写/* 表示过滤所有请求
5.写相关代码。
6.根据条件进行放行。通过方法内部提供的参数:filterChain 进行放行
客串知识点:
过滤器又称拦截器 如果过滤器中没有写 “放行” 相关代码 项目将显示一个空白页面。
所以正确的写法: 如果过滤成功就放行。 如果过滤失败就跳转到指定页面
客串知识点2:
一个项目中可以存在多个过滤器 那么就存在一个过滤器的优先级问题
优先级的原则 也很简单:根据类名的首字母
客串知识点3:
过滤器内部提供的request和response 是ServletRequest ServletResponse
但是Servlet提供的request和response 是HttpServletRequest HttpServletResponse
然后HttpServletRequest的request和HttpServletResponse的response的功能 是远多于:
ServletRequest和ServletResponse的request和response
所以如果该过滤器只需要实现低级功能 就无须转换。
如果该过滤器需要实现高级功能就需要在方法的内部进行强转
HttpServletRequest req = (HttpServletRequest)servletRequest;
例如:
package com.yyzy.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter("/*")
public class AFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("我是A");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}