zoukankan      html  css  js  c++  java
  • servlet匹配规则和顺序

    1.  写法
    ①完全匹配:以“/”开头,以字母(非“*”)结束
       如:<url-pattern>/test/list.do</url-pattern>
    ②目录匹配:以“/”开头且以“/*”结尾
       如:<url-pattern>/test/*</url-pattern>
       <url-pattern>/*</url-pattern>
    ③扩展名匹配:以“*.”开头,以扩展名结束
       如:<url-pattern>*.do</url-pattern>
    ④ “/” 用来表明对应的Servlet为应用默认的Servlet。在这种情况下Servlet路径是请求的URI去掉上下文路径并且路径信息为null。
    2.  匹配过程
    当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:<o:p></o:p>
    1.     精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先 进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。<o:p></o:p>
    2.     最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。<o:p></o:p>
    3.     扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action<o:p></o:p>
    4.     如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet
     
     
    =================================================
    1、jetty7中的实例:优先精确匹配,再*.js和*.css,最后在缺省匹配
     
    1. <servlet
    2.     <servlet-name>default</servlet-name
    3.     <servlet-class>com.alibaba.servlet.sample.ServletImport</servlet-class
    4. </servlet
    5. <servlet
    6.     <servlet-name>JSServlet</servlet-name
    7.     <servlet-class>com.alibaba.servlet.sample.JSServlet</servlet-class
    8. </servlet
    9. <servlet-mapping
    10.     <servlet-name>JSServlet</servlet-name
    11.     <url-pattern>*.js</url-pattern
    12. </servlet-mapping
    13. <servlet
    14.     <servlet-name>CSSServlet</servlet-name
    15.     <servlet-class>com.alibaba.servlet.sample.CSSServlet</servlet-class
    16. </servlet
    17. <servlet-mapping
    18.     <servlet-name>CSSServlet</servlet-name
    19.     <url-pattern>*.css</url-pattern
    20. </servlet-mapping
    21. <servlet
    22.     <servlet-name>OKServlet</servlet-name
    23.     <servlet-class>com.alibaba.servlet.sample.OKServlet</servlet-class
    24. </servlet
    25. <servlet-mapping
    26.     <servlet-name>OKServlet</servlet-name
    27.     <url-pattern>/ok.htm</url-pattern
    28. </servlet-mapping
  • 相关阅读:
    Leetcode Plus One
    Leetcode Swap Nodes in Pairs
    Leetcode Remove Nth Node From End of List
    leetcode Remove Duplicates from Sorted Array
    leetcode Remove Element
    leetcode Container With Most Water
    leetcode String to Integer (atoi)
    leetcode Palindrome Number
    leetcode Roman to Integer
    leetcode ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/lijiahong/p/5242661.html
Copyright © 2011-2022 走看看