JavaWeb学习笔记-13过滤器

Posted Moon&&Dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb学习笔记-13过滤器相关的知识,希望对你有一定的参考价值。

过滤器

1、概念

过滤器可以拦截到指定的请求,对该请求拦截后可以进行对请求和响应进行操作,然后放行,可以自己去寻找对应的servlet或者其他过滤器。

使用的业务场景:

用户在客户端发送请求----> 拦截验证:是否为登陆的状态(session),如果是放行,不是的话跳转登陆。

定义:

servlet定义的一个web组件,用来拦截servlet请求,以便获取请求中的资源的参数,过滤的对象主要是客户端请求的web资源。

优点:

热插拔,随时用,随时也可以去掉,不会影响代码的执行。

使用:

1、书写一个类实现Filter接口。
2、重写接口的三个方法,分别是初始化,执行连接,销毁
3、配置注解@WebFilter,将需要过滤的页面的请求地址写入注解(也可以在web.xml中配置)

2、案例

// 拦截全部的请求
@WebFilter("/*")
public class CheckLoginFilter implements Filter {
    // 初始化过滤器,一般用来初始化一些参数
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

        // 初始化一些参数 encoding = utf-8;
    }

    // 过滤器执行业务的方法
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 转化对象,方便操作
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        // 做业务
        request.setCharacterEncoding("utf-8");
        // 验证是否登陆过:判断当前会话中是否包含user对象
        HttpSession session = request.getSession();
        // 获得当前对象
        Object user = session.getAttribute("user");
        // !!!要排除一些默认页面
        // 获取所有的请求资源
        String path = request.getRequestURI();
        // 判断path是否包含index.jsp
        if (path.contains("login.jsp")||path.contains("login")){
            filterChain.doFilter(request,response);
        }else{
            // user为空,对象没有绑定,没有登陆
            if (user == null) {
                response.sendRedirect("login.jsp");
            } else {
            // 可以用转发给下一个页面,但是太麻烦  不能转发给下一个过滤器,系统提供了filterChain
            // 直接使用filterChain的doFilter方法,自动去找寻,如果还有下一个过滤器,直接跳转下一个过滤器
            // 如果没有过滤器,会直接跳转对应的servlet,处理业务
                filterChain.doFilter(request,response);
            }
        } 
    }

    @Override
    public void destroy() {
 				System.out.println("我被销毁了");
    }
}

以上是关于JavaWeb学习笔记-13过滤器的主要内容,如果未能解决你的问题,请参考以下文章

JAVAWEB学习笔记13_servlet

JAVAWEB学习笔记24_filter实现自动登录和解决全局的编码问题

学习日记:关于javaweb filter中过滤了css文件的解决方法

JAVAWEB学习笔记23

javaweb-Servlet过滤器Filter

JAVAWEB学习笔记23_Listener和邮箱服务器