Могу ли я объединить эти шаблоны URL в отображение сервлетов? - PullRequest
0 голосов
/ 27 января 2012

У меня есть требование для поддержки / {servlet} / history, и у меня есть много сервлетов, которые должны это поддерживать.Я использую Tomcat, FWIW.

Следующее работает, но мне интересно, есть ли способ объединить все шаблоны в одну строку и избежать добавления 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>
...

Спасибо.

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Чтобы иметь только один шаблон URL, необходимо указать общий шаблон префикса (папки), например /history/*, или шаблон суффикса (расширения), например *.history.У вас не может быть шаблона URL с подстановочными знаками с обеих сторон, например */history/*.Лучше всего, чтобы сервлет истории отображался на /history/* и изменил URL соответственно, например, на /history/aDifferentServlet (эта часть затем доступна request.getPathInfo() в сервлете истории).

При измененииURL нежелателен, вам нужно создать Filter или переписать сервлеты, которые они перенаправляют в сервлет истории, всякий раз, когда URI запроса соответствует шаблону */history/*.

0 голосов
/ 27 января 2012
Шаблон

может заканчиваться звездочкой или начинаться с единицы (для обозначения сопоставления расширений файлов).

дополнительная информация по адресу:

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.
...