2012-01-27 50 views
0

我有支持/ {servlet} /历史的需求,并且有许多servlet需要支持此功能。我正在使用Tomcat,FWIW。我可以在Servlet映射中组合这些url模式吗?

以下工作,但我想知道是否有一种方法可以将所有模式合并到一行,并避免为每个需要支持历史模式的servlet添加url模式。我试过了几个选项,但都失败了。

<servlet> 
    <servlet-name>History</servlet-name> 
    <servlet-class>com.foo.HistoryServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>History</servlet-name> 
    <url-pattern>/aDifferentServlet/history/*</url-pattern> 
    <url-pattern>/someOtherOne/history/*</url-pattern> 
    <url-pattern>/anotherExample/history/*</url-pattern> 
</servlet-mapping> 
... 
<servlet> 
    <servlet-name>aDifferentServlet</servlet-name> 
    <servlet-class>com.foo.aDifferentServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>aDifferentServlet</servlet-name> 
    <url-pattern>/aDifferentServlet/*</url-pattern> 
</servlet-mapping> 
... 

谢谢。

+0

你是什么意思,“对于每个servlet”?您将单个servlet映射到多个路径。 – 2012-01-27 16:05:02

+0

对不起,我指的是url-patterns中的servlet *。每条路径都代表一个servlet。对于servletA,我需要支持通过servletA,B,C等获取所有内容的历史记录。 – 2012-01-27 16:09:40

回答

3

为了只有一个URL模式,你需要指定一个共同的前缀(文件夹)格式,如:/history/*或后缀(扩展)像*.history的模式。您不能在两侧使用通配符匹配的网址格式,例如*/history/*。最好的办法是将历史小服务程序映射到/history/*,并相应地将URL更改为例如/history/aDifferentServlet(此部分可在历史小服务程序中使用request.getPathInfo())。

如果更改URL是不可取的,那么只要请求URI与*/history/*模式匹配,就需要创建Filter或重写它们转发给历史servlet的servlet。

0

模式可以以星号结尾或以一个开头(表示文件扩展名映射)。

更多信息在:

http://javapapers.com/servlet/what-is-servlet-mapping/#&slider1=1

The url-pattern specification: 

     *A string beginning with a ‘/’ character and ending with a ‘/*’ 
     suffix is used for path mapping. 
     *A string beginning with a ‘*.’ prefix is used as an extension mapping. 
     *A string containing only the ’/’ character indicates the "default" 
     servlet of the application. In this case the 
     servlet path is the request URI minus the context path and the path 
     info is null. 
     *All other strings are used for exact matches only. 
+0

对不起,我应该更清楚了。实际的servlet名称不是servlet *,只是为了掩盖真实姓名。想更像/ doStuff,/ aDifferentServlet,/登录等。 – 2012-01-27 16:11:58

+0

像上面这样?编辑映射。你总是一个历史,这是共同的部分权利? – fmucar 2012-01-27 16:33:58

+0

感谢您的帮助,但这似乎并不奏效。 – 2012-01-27 16:40:44