同一个servlet的许多url-pattern

时间:2012-01-24 22:42:43

标签: tomcat servlets web.xml netbeans-7

我需要在两个不同的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读取而不会发出任何错误,但只有第二种模式有效,而第一种模式被忽略。

谷歌搜索我发现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中的一个错误吗?其他容器接受什么语法?

2 个答案:

答案 0 :(得分:42)

我想它更多地与容器/ netbeans使用的servlet规范有关,而不是容器的问题。您的网络bean似乎使用规范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-pattern   过滤器映射。对于映射到多个URL的过滤器,这会导致不必要的   重复整个映射条款。

答案 1 :(得分:1)

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

  1. 完整的角色序列
  2. /*
  3. *.分机(明星意味着什么)
  4. 建议仅在一个单一框架

    /*

    如果您使用多个框架,则建议使用.*