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

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

难度初级
时长 1小时40分
学习人数
综合评分9.53
339人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.3 逻辑清晰
  • 1、HttpRequest和ServletRequest区别
    2、FilterInit(FilterConfig)初始化的用法
    3、requset.getRequestURI()         //获取请求页面的相对路径
    4、String的方法str.indexOf("XXX")    //获取str内容"XXX"在那个位置第一位为0
    5、String的方法str.split(";")    //才分str为多个string,以";"为才分线

    request.getContextPath();
    save user info to session
    在doFilter中获得ServletRequest convert to HttpServletRequest之后,request.getSession,接着在获得的session中设置

    过滤的黑名单和白名单需要在FitlerConfig中配置
    对于白名单放行
    if true chain.doFilter
    黑名单跳转到相应的处理页面
    else response.sendRedirect

    FilterConfig配置
    filter url:/*(*号是全匹配)
    request.getRequestURI();(获得当前request请求的URI地址,用于判断是否合法请求)
    使用参数配置->init()->config.getInitParameter(name)(获得FilterConfig)

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

    2018-04-18

  • 1.概念:过滤器是一个服务器上的组件,它可以截取用户端的请求和相应信息,并对这些信息过滤<br>
    2.工作原理:<br>
    用户请求——》xml文件中如果过滤器可以匹配则截取,否则不走过滤器——》过滤器放行方法之前的代码——》web资源——》web的响应返回到过滤器,然后过滤器执行方兴方法之后的代码——》过滤器把web的响应返回给用户<br>
    <br>
    <br>
    3.过滤器的生命周期:
    实例化:web容器加载过滤器的配置信息<br>
    初始化:filterServlet中的init()方法获得配置信息,放到filterConfig对象里面<br>
    private FilterConfig cf;<br>
    public void init(FilterConfig arg0) throws ServletException {<br>
    cf = arg0;<br>
    }<br>
    过滤 :进行过滤操作<br>
    销毁:执行完毕销毁<br>
    <br>
    <br>
    4.过滤器的API:
    5.多个过滤器(过滤器链)<br>

    <br>
    6.过滤器分类<br>
    <br>

    7.过滤器实例:登录过滤器和编码过滤器

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

    2018-04-18

  • 我来说说我对异步过滤器的理解吧。根据过滤器的规则,过滤器得等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的配置过滤器方法.

    查看全部
  • 过滤器分类(通过<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请求

    查看全部
  • Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

    Filter有如下几个用处。
    在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
    根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
    在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
    根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

    Filter可负责拦截多个请求或响应;一个请求或响应也可被多个请求拦截。

    创建一个Filter只需两个步骤:
    创建Filter处理类(实现Filter接口).
    web.xml文件中配置Filter(配置<filter>与<filter-mapping>).

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>JavaWeb_001_fistFilter</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
     
      <filter>
      <filter-name>FistFilter</filter-name>
      <filter-class>com.filter.FistFilter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>FistFilter</filter-name>
      <url-pattern>/index.jsp</url-pattern>
      </filter-mapping>
     
      <filter>
      <filter-name>SecondFilter</filter-name>
      <filter-class>com.filter.SecondFilter</filter-class>
      </filter>
      <filter-mapping>
    <filter-name>SecondFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
      </filter-mapping>
     
    </web-app>

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

    查看全部
  • 过滤器大多数时间消耗在doFilter()方法中,doFilter()方法被Web容器调用,即被服务器调用,因为Web容器存在Tomcat容器中,Tomcat就是服务器.
    doFilter()方法同时传入ServletRequest Request、ServletResponse Response和Filter Chain对象的引用.然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源,(通过调用Filter Chain对象引用上的doFilter方法),之后在处理控制权返回该过滤器时处理响应.

    关于chain.doFilter(request,response)
    他的作用是将请求转发给过滤器链上的下一个对象.这里的下一下对象指的是下一个filter,如果没有filter那就是你请求的资源.一般filter都是一个链,在一个项目的web.xml中有几个<filter>.就有几个过滤器.
    request->filter1->filter2->filter3->....->request resource(请求的Web资源),然后得到Web资源的响应,再沿着链返回给request.



    查看全部
  • 过滤器xml配置

    查看全部
  • 分类

    查看全部
  • web.xml配置

    查看全部
  • 三个方法

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

    查看全部
  • 12

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

    2018-04-12

  • 11

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

    2018-04-12

举报

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

微信扫码,参与3人拼团

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

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