Javaweb--Filter过滤器的基本使用

Filter 什么是过滤器?

1、Filter过滤器是javaweb的三大组件之一。三大组件分别是,Servlet程序,Listener监听器,Filter过滤器

2、Filter过滤器它是Javaee的规范,也就是接口

3、Filter过滤器的作用是:拦截请求,过滤响应。一般拦截请求用的比较多

拦截请求常见的应用场景有:

1、权限检查

2、日记操作

3、事务管理

...等

 一些页面需要登录后才能操作,比如购物车页面,订单页面等,这时候就需要过滤请求,不是所有的请求都响应。而是过滤之后,再响应

这里写一个例子

public class Filter_impl implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
//拦截请求
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request=(HttpServletRequest)servletRequest;
        HttpSession session = request.getSession();//获取session
        //判断用户是否登录
        Object user = session.getAttribute("user");
        if(user==null){
            //请求转发到登录页面
            request.getRequestDispatcher("/login.jsp").forward(request,servletResponse);
        }


    }

    @Override
    public void destroy() {

    }
}

还需要到web.xml文件中配置

 

        AdmitFilter

        Filter_impl
    
    

        AdmitFilter

        /admit/*
    

Javaweb--Filter过滤器的基本使用_第1张图片

 a.jsp文件在在admit目录下,login.jsp在web目录下

这时候的session对象是不存在客户的,所以返回值为null,因此直接请求转发到登录页面

Javaweb--Filter过滤器的基本使用_第2张图片

这里有一个小问题,过滤器该不该使用请求转发呢?大概的原理是这样的

如果使用了请求转发,那么会先通过Filter过滤器才能访问到Servlet程序,这时候就有问题了,如果我这时候没有登录,我直接访问a.jsp文件,那么过滤器会直接让我访问login.jsp页面,但是这时候地址栏依然是admit目录下的,

 

这时候的请求会被拦截。所以应该使用重定向,login页面可以越过过滤器直接访问Servlet,写入信息之后再访问。 

或者第二种方法,拦截指定的页面,不将该目录下的所有页面都拦截

发现了原因,是因为使用了相对路径的情况,如果表单提交是绝对路径就可以了。

你可能感兴趣的:(笔记,java,前端,开发语言)