【问题标题】:What is the meaning of the leading slash / in Tomcat's <url-pattern>?Tomcat的<url-pattern>中前导斜杠/是什么意思?
【发布时间】:2014-10-30 18:20:41
【问题描述】:

我知道我不能对过滤器映射的&lt;url-pattern&gt; 使用正则表达式,但是否可以使用directory pattern 来指定任何包含单词myuniqws 的url,如下所示:

https://my.hostname.org/myuniqws/myport/soap?wsdl

我在想也许这是正确的语法:

<url-pattern>/*myuniqws*</url-pattern>

但我无法找到有关 Tomcat 的 &lt;url-pattern&gt; 语法的确切规则的文档。

上面的正则表达式会按我的意愿工作吗?


更新:

感谢下面的回答,我在 Java Servlet 规范中发现了以下部分,它基本上回答了我的问题。

12.2 映射规范

在 Web 应用程序部署描述符中,使用以下语法来定义 映射:

  • 以“/”字符开头并以“/*”后缀结尾的字符串用于 路径映射。
  • 以“*.”前缀开头的字符串用作扩展映射。
  • 空字符串 ("") 是一种特殊的 URL 模式,它精确映射到应用程序的上下文根,即 http://host:port/&lt;contextroot&gt;/ 形式的请求。在这种情况下,路径信息是“/”,servlet 路径和上下文路径是空字符串(“”)。
  • 仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。
  • 所有其他字符串仅用于完全匹配。

如果有效的web.xml(在合并来自片段和注释的信息之后)包含映射到多个 servlet 的任何 url 模式,那么部署一定会失败。

【问题讨论】:

    标签: regex tomcat url-pattern


    【解决方案1】:

    大概是指&lt;url-pattern&gt; 用于web.xml 中的过滤器映射。您可能不知道这一点,但web.xml 被定义为 Java Servlet 规范的一部分。您可以在此处找到 3.1 版本的完整文档(目前是最新最好的):

    https://jcp.org/aboutJava/communityprocess/final/jsr340/index.html

    如果您阅读第 12.2 节(“映射规范”),您可以准确了解识别出哪些类型的模式,包括您在上面请求的前缀映射。

    编辑 2014-11-04: 您应该知道CATALINA_HOME/conf/web.xml(或CATALINA_BASE/conf/web.xml,如果有的话)是部署在Tomcat 上的所有Web 应用程序的默认配置,并且您的Web 应用程序的WEB-INF/web.xml 是您自己的Web 应用程序的特定配置。这两个文件都应具有以下xmlns 语句,因此(通过它们的 URI)向您表明它们已被 Java Servlet 规范(或至少包含 servlet 规范的 Java EE)所涵盖:

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0">
    

    【讨论】:

    • 确实,我不知道Tomcat的web.xml其实和Java Servlet规范中的web.xml是一样的。 +1 并接受。
    猜你喜欢
    • 2013-10-24
    • 2021-06-15
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多