【问题标题】:many url-pattern for the same servlet同一个 servlet 的许多 url 模式
【发布时间】:2012-02-18 04:51:48
【问题描述】:

我需要在两个不同的 url 上映射同一个 servlet。我使用 netbeans 7.0.1 来管理我的整个项目,所以我使用它友好的界面来修改 web.xml 文件。 netbeans 创建的是这样的:

<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>/url</url-pattern>
</servlet-mapping>

tomcat 5.5 读取此内容时不会发出任何错误,但只有第二个模式有效,而第一个模式被忽略。

google了一下,发现tomcat的正确方式是这样的:

<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>fred</servlet-name>
    <url-pattern>/url</url-pattern>
</servlet-mapping>

所以,我的问题是:这是 tomcat 中的错误吗?其他容器接受什么语法?

【问题讨论】:

    标签: tomcat servlets web.xml netbeans-7


    【解决方案1】:

    我想这更多地与容器/netbeans 使用的 servlet 规范有关,而不是容器的问题。您的 net beans 似乎正在使用规范 2.5 来构建 servlet 映射,因此您得到了

    <servlet-mapping>
       <servlet-name>fred</servlet-name>
       <url-pattern>*.jsp</url-pattern>
       <url-pattern>/url</url-pattern>
    </servlet-mapping>
    

    阅读更多关于此here 的信息。它说

    以前版本的 servlet 模式只允许在一个单一的 url 模式 过滤器映射。对于映射到多个 URL 的过滤器,这会导致不必要的 整个映射子句的重复。

    【讨论】:

    • 我会说如果tomcat使用旧规范(2.4)并且不接受新语法,它至少应该给出一个错误。或者 netbeans 应该使用旧语法以获得兼容的 web.xml。不是吗?新容器是否接受带有许多 servlet 映射节的旧语法?
    • @eppesuig 我很确定它们中的大多数都是向后兼容的 :) 并且 2.5 servlet 规范 XSD 肯定允许这样做。
    • @eppesuig 如果您对答案感到满意,您可以点击问题旁边的勾号并/或如果这对您有任何帮助,您可以投票给答案。接受答案将提高您在此论坛中的声誉。
    • 我最好检查一下我的所有设置。碰巧我的 netbeans 中有所有 tomcat 服务器,即 tomcat 5.5、tomcat 6 和 tomcat 7。但是我不能选择 tomcat 5.5 作为测试我的应用程序的服务器。我的项目似乎有一个名为 Java EE 5 的属性,因此它不适用于实现 servlet 2.4 的容器。这是因为 Java EE 5 隐含了 Servlet 2.5。所以我倾向于认为netbeans创建的web.xml必须只满足Servlet 2.5。在这种情况下,我认为唯一的错误是在 Tomcat 5 中。我会向 tomcat 作者报告。
    【解决方案2】:

    Tomcat 容器将支持 3 种 url 模式:

    1. 完整的字符序列
    2. /*
    3. *. ext(星号表示任何东西)

    /* 建议仅用于一个单一的框架

    如果你使用多个框架,那么推荐.*

    【讨论】:

    • URL 模式 #2 可以是 /somestring/*,其中 somestring 可以包含 / 字符。第四种模式,/ 本身,指定应用程序的默认 servlet。 Servlet Specification 3.1 支持使用""(空字符串)的第五种模式。在主题 映射规范 下检查适合您的 servlet 版本的 Servlet 规范以获取详细信息。
    猜你喜欢
    • 2011-12-14
    • 2013-05-10
    • 2015-07-13
    • 2019-08-29
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多