欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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之前,经过此过滤器

思考:在登录案例中,能否将验证登录状态的代码加入到过滤器中,通过过滤器来实现?