• 过滤器


    1 什么是过滤器

     

    2 过滤链

     

    3 开发过滤器的三要素

     

    开发第一个过滤器:

     

    Dofilter参数:

    chain.dofilter,把请求依次向后传递

    配置web.xml文件

    4 过滤器的生命周期

    Init方法在应用启动时自动执行,但是init执行之后不会立即执行dofilter方法,因为dofilter方法执行的时期,是在每一个请求过来之后被dofilter方法进行拦截处理.

    在有请求过来后:

    应用关闭后,过滤器会被销毁

    5 过滤器的特性

    6 过滤器的两种开发方式

    1)配置形式

    2)注解形式

    如果有多个过滤器分别通过配置形式或注解形式定义,在请求过来时,会先通过配置形式的过滤器,再通过注解形式的过滤器.

     

    3)配置与注解如何选择

    - 配置形式维护性更好,适合应用全局过滤

    - 注解形式开发体验更好,适用于小型项目敏捷开发

    4)Web中文乱码的解决

    ServletRequest接口

    为什么参数中使用ServletRequest对象,还要在代码中将其强制转换成HttpServletRequest?

    这里就涉及到j2ee底层的机制了

    ServletRequest接口是最顶级的接口,这里定义了所有请求的共通特点.

     

    7 过滤器的开发技巧

    1)过滤器参数化

    过滤器为了增强灵活性,允许配置信息放在web.xml

    在web.xml中配置<init-param>设置过滤器参数

    如果有多个参数,就罗列多个<init-param>标签即可.

    在web.xml中配置     

    使用注解配置

     

    2)url-pattern设置过滤范围

     

    实际运用案例:

     

     

    精准匹配:

     

    前缀匹配:

    注意:

    / 映射的问题:

    -  / 指映射Web应用根路径,且只对Servlet生效

    - 默认首页index.jsp会让 / 失效

    / /* 含义不同,前者指向根路径,后者代表所有的URL

    实际应用案例:

     

    访问SampleServlet2

    如果有默认首页index.jsp,访问地址也是http://localhost:8080/url-pattern/

    那最后默认首页和过滤器过滤的Servlet URL哪个会生效呢?

    试着访问一下这个路径

    可以看到是默认首页生效了,同时控制台也没有打印任何内容。

     

    这里涉及到Tomcat一个底层机制,默认首页比Servlet优先级高。尽管在url中访问的是根路径,但是因为.xml配置了默认首页,实际上是隐式跳转到了index.jsp。因此,如果我们要拦截默认首页的话,要使用后缀匹配的方式*.jsp 或者 精准匹配 /index.jsp 才会生效。在实际开发中尽量不要使用index.jsp这个默认首页。

    另,如果想对根路径,jsp文件以及所有Servlet前缀的url都进行过滤,这种复合条件该如何编写?

    ①在web.xml的filter中增加多个对应的filter-mapping,包装名称一致,url依次编写即可。在程序执行的时候会按照这些url的编写顺序依次过滤。

    ②注解方式

    8 过滤链开发注意事项

    1)每一个过滤器应具有独职能

    2)过滤器的执行顺序以<filter-mapping>为准

    3)调用chain.doFilter()将请求向后传递。如果没有写这一句,只会匹配第一个,不会再往后匹配(请求不会向后传递)。

    使用web.xml配置url时,按照在配置文件中编写的位置决定;

    使用注解方式配置url时,是按照过滤器类名的排序规则来决定的,默认按照字母表升序排列且不区分大小写。实际开发中不建议用这种方式。

    9 项目中过滤器的应用场景

    1)多端设备自动匹配

    原理:根据过滤器拦截到的url得到所使用的设备,在前面加上相应的前缀。

    访问localhost:8080/index.html

    若识别出来是手机 加上moblie前缀localhost:8080/mobile/index.html

    若识别出来是PC 加上desktop前缀localhost:8080/desktop/index.html

    实践案例:

    实际开发一个项目若有多个应用,一般安装多个tomcat配置不同的端口,这样一个应用崩溃不会影响到其他的应用。同时上下文路径Context root 为 /。

     

     

    PC端访问时

    移动端访问时

     

     

  • 相关阅读:
    UNIX环境高级编程——信号(API)
    UNIX环境高级编程——信号之kill、raise、killpg、alarm、pause、abort、sleep、usleep、nanosleep和setitimer函数
    UNIX环境高级编程——信号基本概述和signal函数
    UNIX环境高级编程——进程关系
    UNIX环境高级编程——system函数
    [Training Video
    [Selenium]重写拖拽dragWidgetToElementContainner()
    [Selenium]Grid模式下运行时打印出当前Case在哪台node机器上运行
    [Java]通过java获取计算机名
    [Selenium]点击下拉框之后,从下拉列表选择元素进行点击很容易失败
  • 原文地址:https://www.cnblogs.com/superjishere/p/12673267.html
Copyright © 2020-2023  润新知