Java Web 过滤器和拦截器

1.什么是过滤器

1.过滤器配置

1.在学习SSH框架时我们经常会在web.xml中配置struts的过滤器

    <!--配置Struts2过滤器-->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <!--过滤mapping-->
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2.配置个人过滤器

     <!--配置过滤器 start-->
    <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>com.BoomMan.BookStore.Filter.CheckLoginFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--配置过滤器 end-->

2.为什么用过滤器

1.配置过滤器是为了在你请求发起或结束时,过滤器先作一些操作,比如日志记录、提交检查、资源释放等操作。
2.举个最最简单的例子,你写了个项目,xxx管理系统,要求用户输入用户名密码,核对之后才能操作。
如果不做过滤器,每个人都可以直接写个超链接,就进到你的页面里去了
3.过滤器就是用来过滤你访问的url信息的,过滤一些非法信息还有防止非法访问没有权限的内容等。
4.根据 配置的字符串 去拦截相应的请求,然后根据请求字符串执行相应的方法。。如果不采用过滤器的话 将无法判断到底执行哪个方法,,同理 servlet的执行也是一样的采用配置字符串 进行匹配执行对象方法的。

3.什么是拦截器

1.拦截器原理

拦截器使用
Struts2 拦截器 [Interceptor]
这里写图片描述(图片怕原作者挂掉,遂自己上传)
拦截器的工作原理如上图,每一个Action请求都包装在一系列的拦截器的内部。拦截器可以在Action执行直线做相似的操作也可以在Action执行直后做回收操作。

每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面。

2.拦截器配置

拦截器是在struts2的配置文件中配置即struts.xml中配置

 <!-- 声明拦截器 start -->

        <interceptors>
            <!-- 注册登录 -->
            <interceptor name="rightFilterInterceptor"
                         class="com.BoomMan.BookStore.interceptor.RightFilterInterceptor"></interceptor>
            <!-- 捕获URL拦截器 -->
            <interceptor name="catchUrlInterceptor"
                         class="com.BoomMan.BookStore.interceptor.CatchUrlInterceptor"></interceptor>
            <!-- 定义拦截器栈 -->
            <interceptor-stack name="BoomManInterceptorStack">
                <interceptor-ref name="catchUrlInterceptor"></interceptor-ref>
                <interceptor-ref name="rightFilterInterceptor"></interceptor-ref>
                <!--— 必须引用struts默认的拦截器 -->
                <interceptor-ref name="defaultStack">
                    <!-- 把  modelDriven.refreshModelBeforeResult 改为 true ,使modelDriven取得model以后的后处理中刷新model-->
                    <param name="modelDriven.refreshModelBeforeResult">true</param>
                    <!-- 文件大小 -->
                    <param name="fileUpload.maximumSize">60000</param>
                    <!-- 文件扩展名 -->
                    <param name="fileUpload.allowedExtensions">.jpg, .jpeg, .png, .bmp, .gif</param>
                    <!-- 文件内容类型 -->
                    <param name="fileUpload.allowedTypes">image/jpg, image/jpeg, image/pjpeg, image/png, image/bmp,
                        image/gif
                    </param>
                </interceptor-ref>

                <!-- paramsPrepareParamsStack拦截器栈会先传入参数,再调用 modelDriven 给把 model 压入栈顶
                         defaultStack拦截器不能在prepare拦截器钱前完成传参
                <interceptor-ref name="paramsPrepareParamsStack"></interceptor-ref>
                -->
            </interceptor-stack>
        </interceptors>
        <!-- 声明拦截器 end -->


        <!-- 全局引用拦截器 start -->
        <default-interceptor-ref name="BoomManInterceptorStack" />
        <!--这段在Action中引用-->
        <interceptor-ref  name ="BoomManInterceptorStack" />

类编写不赘述,方式较多。

4.拦截器过滤器比较

  1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
  3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
    百度知道答案
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值