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

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

难度初级
时长 1小时40分
学习人数
综合评分9.53
339人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.3 逻辑清晰
  • 过滤器链(Web项目支持多个过滤器)

    定义:如果两个或者多个过滤器拦截的URL路径规则不同,则互不影响,如果相同,就构成了过滤器链。

    过滤器链

    过滤器链执行过程


    问题:

    1、Web项目中多个过滤器是如何实现的?

    2、多个过滤器对应同一个用户路径执行顺序如何?

    注意:过滤器的初始化方法是按照filter-name的字母排序的,排在后面的字母先加载初始化方法。

    查看全部
  • 过滤器案例

    知识点1:实现过滤器功能,前提是实现javax.servlet.Filter这个接口。

    知识点2:实现Filter接口的三个方法简介。

    【a】init():过滤器的初始化方法,Web容器创建过滤器实例后将调用这个方法,这个方法通过方法参数FilterConfig可以读取web.xml文件中的过滤器的参数。

    【b】doFilter():该方法完成实际过滤操作,过滤器的核心方法,当用户请求访问与过滤器关联的URL时,Web容器将先调用该方法。FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发、重定向将请求资源转发到其他资源。

    【c】destory():Web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源。(多数情况用不到)

    Web.xml中过滤器的配置(filterChain.doFilter(servletRequest, servletResponse)相当于访问目标资源)


    问题环节:

    【1】过滤器是否能改变用户请求的Web资源呢?也就是能否改变用户请求的路径?

    答:可以,比如:登录,检测到不符合要求,则可以跳转到登陆页面。

    【2】过滤器能否直接返回数据,能不能直接处理用户请求?

    答:不可以,因为Filter不是标准的Servlet,不能把数据直接返回到用户请求,只能跳转到Web请求的资源,或者跳转、重定向到其他的Web资源。


    查看全部
  • 过滤器的工作原理和生命周期

    工作原理:

    https://img1.sycdn.imooc.com//5cf7a70c0001417410490661.jpg

    生命周期:(分为4种

    【a】实例化:Web容器通过Web.xml配置,启动Web容器时会自动加载过滤器,只会实例化一次。

    【b】初始化:加载一些初始化信息,调用过滤器的init()方法,进行初始化的一些相关操作,只会执行一次。

    【c】过滤:调用过滤器中的doFilter()方法,执行n次的,捕获的每一个请求都会执行该方法。

    【d】销毁:调用过滤器的destory()方法,当Web容器关闭时,调用该方法。

    查看全部
  • Java Web过滤器简介:过滤用户请求(不符合规则的进行一定处理)。

    过滤器定义:服务器端的组件(因为请求都必须要到达服务器端,然后再进行返回),可以截取用户端的请求与响应信息,并对这些信息过滤。

    常用操作:

    1、通过过滤器可以实现权限功能(判断是否登录状态,同一页面登录前和登录后拥有不同显示效果)。

    2、当访问一个界面,结果找不到的时候,就会提示错误,可以通过过滤器做一些人性化的提示,提高用户体验。

    课程目标:

    一:工作原理

    二:生命周期(包括哪些生命周期,以及每个生命周期都要执行哪些方法)

    三:过滤器分几种类型(根据不同业务请求,有不同的过滤器)

    四:登录验证及编码转换演示两个实战案例

    查看全部
  • 过滤器的生命周期
    查看全部
  • 过滤器的异步处理:

    https://img1.sycdn.imooc.com//5cbb142d0001eeb313660768.jpg

    https://img1.sycdn.imooc.com//5cbb145200019bed13660768.jpghttps://img1.sycdn.imooc.com//5cbb146e00019c6813660768.jpg

    查看全部
  • 总结: 过滤器的生命周期: 实例化(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中过滤器定义的先后顺序组装成一条链

    查看全部
    0 采集 收起 来源:总结

    2019-03-31

  • @JavaWeb----过滤器编码转换

    在web.xml中配置
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.filter.LoginFilter</filter-class>
        <!-- 指定部分页面,在代码中实现对这些页面放行 -->
        <init-param>
          <param-name>noLoginPaths</param-name>
          <param-value>index.jsp;login.jsp;LoginServlet;fail.jsp</param-value>
        </init-param>
        <init-param>
          <param-name>charset</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
    </filter>

    在Filter中
    private FilterConfig config = null;

    public void init(FilterConfig arg0) throws ServletException {
     config = arg0; // 将实例化时的init-param存入config
    }

    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
       throws IOException, ServletException {
     String charset = config.getInitParameter("charset"); // 从config中获得字符集
        if(charset==null){
          charset = "UTF-8";
        }
        request.setCharacterEncoding(charset); // 设定字符集为UTF-8
    }
    查看全部
    0 采集 收起 来源:编码转换案例

    2019-03-31

  • 登录验证过滤器: 过滤规则:通过检查session中是否有用户信息来判断是否已经登录,登录则放行,未登录则重定向到登录页 过滤的路径: 1.简单的将要过滤的路径添加到配置文件中过(但经常会很多不推荐) 2.使用/*过滤所有,此时有一些不应过滤的路径(比如登录页本身),只能在doFilter中判断并放行.一种好的方式是:将不过滤的路径通过init-param提交,在doFilter通过循环来判断,这样只需要将不过滤的路径加到配置文件中即可 此外这一节演示了设置和读取init-param的方法

    查看全部
    0 采集 收起 来源:登录案例

    2019-03-31

  • 根据过滤器的规则,过滤器得等servlet执行结束才能停止,所以如果servlet执行很久,过滤器得等很久,所以说呢,为了使得过滤器早点执行结束,就让servlet在后台执行,过滤器提前结束,这就是异步过滤器的优点所在
    @WebServlet(asyncSupported = true, displayName = "/AsyncServlet", urlPatterns={"/servlet/AsyncServlet"})

    asyncSupported = true 是必须开启用以支持异步

    @WebFilter(filterName="AsynFilter",asyncSupported=true,value={"/servlet/AsyncServlet"},dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC})


    asyncSupported = true 是必须开启用以支持异步
    dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC}
    DispatcherType.REQUEST必须要加上,否则过滤器就不会生效了

    同时注意在过滤的地址和servlet的地址必须相同

    查看全部
  • request    用户直接访问页面时(eg:请求response.sendredirect请求重定向),Web容器将会调用过滤器
        forward   目标资源通过RequestDispatcher的forward访问时,该过滤器被调用  <jsp:forward也能触发
        include    目标资源通过RequestDispatcher的include访问时,该过滤器被调用   <jsp:include也能触发    
        error        目标资源通过声明式处理机制调用时,该过滤器被调用

    <error-page>
        <error-code>404</error-code>//500
        <location>/error.jsp</location>
        </error-page>
    <filter>
            <filter-name>ErrorFilter</filter-name>
            <filter-class>com.imooc.filter.ErrorFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>ErrorFilter</filter-name>
            <url-pattern>/error.jsp</url-pattern>
            <dispatcher>ERROR</dispatcher>
        </filter-mapping>

    @error.jsp
    您输入的路径有误!

    @ErrorFilter.java
    public void doFilter(ServletRequest servletrequest,
    ServletResponse servletresponse, FilterChain filterchain)
    throws IOException, ServletException {
    System.out.println("检测到有错误的信息!");
    filterchain.doFilter(servletrequest, servletresponse);//注意:放行
    }
    Servlet3.0中加入了@引言的这种方式.

    @WebFilter用来将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器.(部署理解为项目发布,就会把Web.xml文件与项目的文件读取在Web容器里,部署的时候容器就会识别注解,将相应的类部署为过滤器.启动服务器才执行过滤器的初始化方法.)

    则添加过滤器不需要再web.xml中配置.直接在过滤器类里加入@WebFilter声明即可.

    filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源,只要该资源的URL与URL模式匹配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。

    过滤器filter-mapping的<servlet-name>标签意思是过滤器关联Servlet,当某些用户请求访问Servlet的时候,会被过滤器截取请求.(即Web容器会调用过滤器的doFilter()方法)

    过滤器filter-mapping的<url-pattern>标签意思是过滤器关联的URL地址.当用户访问关联的URLWeb资源时,会被过滤器截取请求.(即Web容器会调用过滤器的doFilter()方法)

    图中上部分是Servlet3.0配置过滤器的方法.下部分是Servlet2.5的配置过滤器方法


    查看全部
  • 为什么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文件中配置的声明的顺序来决定,那个先过滤那个在过滤

    查看全部
  • JAVA过滤机制——第一个过滤器案例 1、创建一个过滤器类 ,继承自servlet下的Filter 2、重写三个方法init() doFilter() destroy()方法 (1)init()初始化:这个方法可以读取web.xml文件中的过滤器初始化参数。通过参数FilterConfig arg0可以获取更多参数 (2)doFIlter()核心:完成实际的过滤操作。当用户请求访问与过滤器【关联的URL】时,Web容器将先调用过滤器的doFilter方法,FilterChain arg2参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发,重定向将请求转发给其他资源。 (3)web容器在消耗过滤器前调用该方法,用于释放过滤器占用的资源。(大多数情况用不到)

    查看全部
  • 一.过滤器的工作原理
    用户发送请求到过滤器,过滤器将用户请求发送到web资源,web资源将响应发送到过滤器,过滤器将响应发送给用户
    二.过滤器的工作周期
    1.实例化阶段-->一启动服务器就会从Web容器的web.xml文件中自动去加载实例化过滤器.且只会实例化一次.即生成了过滤器. 2.初始化阶段-->生成过滤器之后便是初始化,加载一些初始化信息.调用init()方法.且只执行一次. 3.过滤阶段-->执行过滤器的doFilter()方法进行过滤.执行n次的,凡是过滤器捕获到用户的请求,都会执行这个过滤方法. 4.销毁阶段-->当Web容器关闭即服务器关闭的时候,便执行destroy()方法销毁.

    查看全部

举报

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

微信扫码,参与3人拼团

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

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