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文件中配置

 <filter>
<!--        给Filter起一个别名-->
        <filter-name>AdmitFilter</filter-name>
<!--        Filter的全类名-->
        <filter-class>Filter_impl</filter-class>
    </filter>
    <filter-mapping>
<!--       <filter-name>表示当前的拦截路径给哪一个Filter使用 -->
        <filter-name>AdmitFilter</filter-name>
<!--    <url-pattern>表示拦截路径     /映射到web目录下,*表示全部-->
        <url-pattern>/admit/*</url-pattern>
    </filter-mapping>

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

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

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

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

 

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

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

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔雀南飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值