为了账号安全,请及时绑定邮箱和手机立即绑定

Java Web开发技术应用——过滤器

难度初级
时长 1小时40分
学习人数
综合评分9.53
339人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.3 逻辑清晰
  • 过滤器分类(通过<dispatcher>标签)
    通过<dispatcher>标签的值不同把过滤器分类.此标签中有四个值可以选择,可以同时选择多个.
    包括request、forword、include、error

    假设同一个过滤器关联了index.jsp与main.jsp.此过滤器的<dispatcher>标签值为request.
    在过滤器中的doFilter()方法中
    public void doFilter(ServletRequest req,ServletResponse rep,FilterChain chain){
    HttpServletRequest request=(HttpServletRequest)req;
    HttpServletResponse response=(HttpServletResponse)rep;
    response.sendRedirect(request.getContextPath()+"/main.jsp");
    }
    当用户访问index.jsp页面时,便会被过滤器截取.并执行doFilter()方法中的重定向去main.jsp页面.但main.jsp也关联了此过滤器,过滤器会截取到重定向新Web资源的请求.因此又会调用doFilter()方法中的重定向去main.jsp.所以是死循环的状态.

    因为重定向是属于request的行为.因此会被<dispatcher>标签值为request的过滤器截取到.即<dispatcher>标签值为request的过滤器可以截取重定向新Web资源的请求.

    当过滤器的doFilter()方法中用 request.getRequestDispatcher("/main.jsp").forward(arg0, arg1)请求转发到main.jsp.此时当用户请求访问index.jsp时,便会被过滤器截取,并且执行doFilter()方法,然后请求转发到main.jsp页面.此时用户可以访问到main.jsp页面,并没有被过滤器截取.因为请求转发属于forward行为.因此<dispatcher>标签值为request的过滤器是截取不了通过请求转发去新Web资源的请求.尽管<url-pattern>设置了main.jsp关联过滤器,但仍然截取不了.

    请求转发:浏览器的地址栏不会变化,性能相对更好一些,因为获取的资源是没有二次讲过浏览器的<br><br>
    重定向:浏览器的地址栏是会变化的,获取资源的时候经过了二次通过浏览器发送请求的过程。

    以下内容源自其他同学,当然,自己百度搜索一下也是一样的
    这个也是一个参考:http://jingyan.baidu.com/article/37bce2be71adad1002f3a2c7.html
    1.请求转发
    请求转发是指将请求再转发到另一资源(一般为JSP或Servlet)。此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变
    请求转发使用RequestDispatcher接口中的forward()方法来实现,该方法可以把请求转发到另外一个资源,并让该资源对浏览器的请求进行响应
    RequestDispatcher rd = request.getRequestDispatcher(path); rd.forward(request,response);
    或request.getRequestDispatcher(path) .forward(request,response);

    2.重定向
    重定向是指页面重新定位到某个新地址,之前的请求失效,进入一个新的请求,且跳转后浏览器地址栏内容将变为新的指定地址
    重定向是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求
    response.sendRedirect(path);

    forward转发 :一次请求一次回应 服务器跳转
    sendredirect重定向: 两次请求两次回应 客户端跳转

    由于sendredirect是request,会激活REQUEST类型的过滤器,因此要注意,是否会形成重定向循环

    request 过滤request请求
    forward 过滤重定向请求
    include 过滤include请求

    查看全部
  • 1.什么是过滤器?<br>
    过滤器是web服务器端的一个组件,可以截获用户的请求和web资源的响应,对请求和响应进行过滤
    2.过滤器的工作原理?<br>
    原理:用户发送请求到过滤器,过滤器将用户请求发送到web资源,web资源将响应发送到过滤器,过滤器将响应发送给用户
    3.过滤器的工作周期
    a.在web容器启动的时候实例化,调用初始化方法,每次有请求响应过来调用doFilter()方法,服务器容器关闭的时候调用销毁方法。

    查看全部
  • 过滤器的生命周期

    查看全部
  • 这里有点难,请多看多操作几次。
    查看全部
  • 总结: 过滤器的生命周期: 实例化(web.xml)--〉初始化(init())--〉过滤(doFilter())--〉销毁(destory()) 1.过滤器的概念: 过滤器是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息过滤。 1.概念:过滤器是一个服务器上的组件,它可以截取用户端的请求和相应信息,并对其过滤 2.工作原理: 用户请求--〉过滤器将用户请求发送至Web资源--〉web资源--〉web响应发送至过滤器--〉过滤器--〉过滤器将web的响应返回给用户 3.过滤器的生命周期: 实例化(web.xml)--〉初始化(init())--〉过滤(doFilter())--〉销毁(destory()) 4.过滤器的API: init()、doFilter()、destory() 5.多个过滤器(过滤器链) 6.过滤器分类 7.过滤器实例:登录过滤器和编码过滤器 服务器会按照web.xml中过滤器定义的先后顺序组装成一条链
    查看全部
    1 采集 收起 来源:总结

    2017-09-27

  • 本节主要讲解了过滤器的两大分类:request和forward,其中过滤的默认规则是request方式 假设有两个页面:index.jsp和main.jsp,都使用了默认的过滤规则, 如果在过滤器的doFilter1方法中把index.jsp重定向到main.jsp页面上,则会死循环,因为sendRediect的过滤类型是request,当重定向时跳转到main.jsp的过滤规则也是request,会继续触发main.jsp的过滤器,从而陷入死循环; 而若是请求转发,其默认过滤规则是forward,当请求转发到main.jsp后,main.jsp的过滤规则是request而不是forward,所以不触发过滤; 当然,如果把请求转发的规则改为forward,那么也会陷入循环; 或者在jsp上写入script代码<jsp:forward page="/main.jsp">也会匹配过滤规则决定导致会不会产生死循环的结果;
    查看全部
  • 过滤器的工作原理: 拦截用户请求或容器响应,按规则通过或拦截用户的请求,
    查看全部
  • Web应用允许多个过滤器来过滤页面请求——联想现实生活中的例子是最好理解的啦!比如:为了获得更加干净的水,可能需要多个过滤器来进行过滤。 这个时候就分为两种情况了 1:多个过滤器过滤的URL不同,那么此时的多个过滤器是互不相干的,各过滤各的,互不干扰 2:多个多虑期过滤的URL相同,那么此时的多个过滤器就形成了一个过滤器链,此时就有个一个问题了Web容器现将对应的请求给谁过滤呢?处理规则也很简单,就是根据在Web.xml文件中配置的声明的顺序来决定,那个先过滤那个在过滤
    查看全部
  • 只学有用,只接触有用的,马上或者将来要用到的。不看其他的……无关痛痒,暂时用不到的!
    查看全部
  • 過濾器是服務器端的組件
    查看全部
  • web.xml配置 <filter> <filter-name>Filter的名字<filter-name/> <filter-class>Filter的类名称(过滤器类完整的名字包括包名)</filter-class> //初始化信息可以是零对或多对 <init-param> <description>描述信息可以省略或放在此位置</description> <param-name>参数名称</param-name> <param-value>参数的值</param-value> </init-param> </filter> <filter-mapping> <filter-name>Filter的名字<filter-name/> <url-pattern>url </url-pattern>//当用户请求的URL和指定的URL匹配时将触发过滤器工作 <dispacher></dispacher>//可以是零对或多对 值为:Request|include|forward|error 未设定时默认值为Request </filter-mapping>
    查看全部
  • 过滤器的过滤方式要注意勾选 过滤器和servlet其实就是对访问路径的一种控制处理,servlet将内容传递给用户,过滤器改变路径。 通过不同的路径访问方式,request aysn include等可以采取相应的过滤器进行处理 监听器则是对网页中的参数request application httpsession变化的监听,做出相应的处理动作。 过滤器和监听器都要实现相应的接口。监听器实现的接口也就确定了其监听的类型。过滤器则在web.xml中配置访问路径方式的过滤
    查看全部
  • 我来说一下为什么sendRedirect会陷入死循环,而getRequestDispatcher.forward不会。 因为前者是使用的过滤器类型是request,访问index.jsp页面时,触发过滤器,重定向到main.jsp,由于过滤器类型是request,所以会继续触发main.jsp的过滤器,所以会陷入死循环。 后者在访问index.jsp的时候,过滤器类型是request,所以会触发过滤器,然后利用转发的方式访问main.jsp,这时候过滤器的类型是forward,而此时web.xml中定义的匹配main的过滤器类型还是request,所以不执行main所匹配的过滤器,因此只执行一次。
    查看全部
  • Web应用允许多个过滤器来过滤页面请求——联想现实生活中的例子是最好理解的啦!比如:为了获得更加干净的水,可能需要多个过滤器来进行过滤。 这个时候就分为两种情况了 1:多个过滤器过滤的URL不同,那么此时的多个过滤器是互不相干的,各过滤各的,互不干扰 2:多个多虑期过滤的URL相同,那么此时的多个过滤器就形成了一个过滤器链,此时就有个一个问题了Web容器现将对应的请求给谁过滤呢?处理规则也很简单,就是根据在Web.xml文件中配置的声明的顺序来决定,那个先过滤那个在过滤
    查看全部
  • 1.在web容器启动时依据web.xml实例化 一次 2.初始化 init() 一次 3.过滤 doFilter() 多次 4.销毁 destroy() 一次 web容器关闭
    查看全部

举报

0/150
提交
取消
课程须知
童鞋们,过滤器是Java Web开发的内容。学习前需要掌握Java基础知识、并熟悉JSP和Servlet。如未学习上述知识,可移步网站相关课程。
老师告诉你能学到什么?
通过本课程的学习,你可以了解过滤器的基础知识,并可以自己动手编写过滤器。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!