zoukankan      html  css  js  c++  java
  • servlet配置url-pattern的匹配规则

    <servlet>
      	<servlet-name>hello</servlet-name>
      	<servlet-class>com.qf.servlet.HelloServlet</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>hello</servlet-name>
      	<url-pattern>/hello</url-pattern>
      </servlet-mapping>

    扩展名匹配

    url-pattern配置的内容是*.aa、*.bb、*.jsp这种类型的

      <servlet>
      	<servlet-name>hello</servlet-name>
      	<servlet-class>com.qf.servlet.HelloServlet3</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>hello</servlet-name>
      	<url-pattern>*.hello</url-pattern>
      </servlet-mapping>

    路径匹配

    1.全路径匹配:请求访问的url的地址必须与url-pattern配置的内容完全一致

      <servlet>
      	<servlet-name>hello</servlet-name>
      	<servlet-class>com.qf.servlet.HelloServlet3</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>hello</servlet-name>
      	<url-pattern>/aa/bb/hello</url-pattern>
      </servlet-mapping>

    2.路径匹配:前半段完全匹配,后半段存在*(*是通配符,可以代表任何字符串);以/开始,以*结束;/aa/*可以是/aa/bb,也可以是/aa/cc..............

      <servlet>
      	<servlet-name>hello</servlet-name>
      	<servlet-class>com.qf.servlet.HelloServlet3</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>hello</servlet-name>
      	<url-pattern>/aa/*</url-pattern>
      </servlet-mapping>
    

      注意:/aa/*/*这种url-pattern配置,url访问时必须是/aa/*/aa,/aa/*/bb这种才可以访问,也就是中间这个*并不是通配符,只是一个普通字符

    路径匹配和扩展名匹配不可以同时使用,下面几个配置全是不合法的

    <url-pattern>/aa/*.hello</url-pattern>
    <url-pattern>/*.hello</url-pattern>
    <url-pattern>a*.hello</url-pattern>

    注意:

    < url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
    < url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)

    当一个url与多个servlet的匹配规则可以匹配时,则按照 “ 完全匹配路径 > 最长路径>扩展名”这样的优先级匹配到对应的servlet

    • servlet1 的url-pattern是 /test,servlet2的url-pattern是 /* ,访问的url为http://localhost:8080/test ,容器就会先进行完全路径匹配,发现/test正好被servlet1精确匹配,那么就去调用servlet1,不会去管servlet2
    • servlet1的url-pattern为/test/*,servlet2的url-pattern为/test/a/*,访问的url是http://localhost:8080/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servlet2
    • servlet1的url-pattern是*.action ,servlet2的url-pattern为 /* ,访问的url为http://localhost:8080/test.action,这个时候容器就会优先进行路径匹配,而不是去匹配扩展名,这样就去调用servlet2
  • 相关阅读:
    call/cc 总结 | Scheme
    用call/cc合成所有的控制流结构
    词法作用域 vs 动态作用域
    数论部分第二节:埃拉托斯特尼筛法
    1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
    C++面向对象作业1
    数论部分第一节:素数与素性测试【详解】
    基数排序与桶排序,计数排序【详解】
    计蒜客:百度的科学计算器(简单)【python神解】
    优质免费在线学习网站【自用】
  • 原文地址:https://www.cnblogs.com/qf123/p/10044765.html
Copyright © 2011-2022 走看看