filter过滤器
程序员文章站
2024-02-08 17:43:46
...
过滤器是对请求或相应进行过滤的一段程序,也就是,在系统发出请求时并不会先进入指定的位置,而是会先进入过滤器中执行过滤器中的程序,若过滤器放行才会进入指定的地址中。
过滤器书写的方式:(1)实现Filter接口。 (2)在类上添加@WebFilter(urlPattern="要过滤的目的路径") (3)在doFilter方法中控制请求是否前进到指定的位置
中文的编码是很多网站都需要重复书写的一段程序,所以,考虑到重复性,可以将中文编译的程序写入过滤器中,通过调用过滤器来实现中文编码的目的,可以有效地缓解代码书写中的重复性。
package filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class CharacterFilter 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("进入了CharacterFilter");
// 设置字符编码
servletRequest.setCharacterEncoding("utf-8");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
匹配路径的写法
****精确匹配:目标路径是过滤器路径就是什么,例如: /s1 /s2 ...
**** 前缀匹配:例如:有两个servlet,路径分别是 /user/s1, /user/s2
过滤器的匹配路径就可以写为: /user/ *,/ * 表示匹配此应用程序中所有路径
**** 后缀匹配:
*.后缀
注意: 后缀匹配不要以/开头, 精确匹配和前缀匹配需要以/开头,*.jsp 表示在请求到达所有jsp之前,经过此过滤器
思考:在登录案例中,能否将验证登录状态的代码加入到过滤器中,通过过滤器来实现?