2013-06-01 1 views
7

Я пытаюсь сопоставить шаблон сервлета, который соответствует обоимServlet отображение с несколькими (двумя) подстановочных знаков, разделенных косой чертой

/server/abcDef/1432124/adfadfasdfa 

и

/server/abcDef/abcd/12345 

значения «1432124» и «ABCD» являются не фиксировано и может быть множеством значений. Поэтому по существу мне нужно соответствовать /abcDef/*/* - исправлен только abcDef.

Есть ли способ сопоставить это? Действительно, я ищу что-то вроде следующий:

<servlet-mapping> 
    <servlet-name>abcDefServlet</servlet-name> 
    <url-pattern>/server/abcDef/*/*</url-pattern> 
</servlet-mapping> 

ответ

11

Согласно Servlet Specification, URL модель, заканчивающаяся «/ *» будет соответствовать всем запросам к предыдущему пути. Таким образом, в том, как вы делали это, вы должны ввести следующую URL, чтобы добраться до abcDefServlet:

http://myapp.com/server/abcDef/*/<wildcard> 

Что вы можете сделать, хотя это добавить несколько шаблонов URL в одном отображении сервлета. Например:

<servlet-mapping> 
    <servlet-name>abcDefServlet</servlet-name> 
    <url-pattern>/server/abcDef/1432124/*</url-pattern> 
    <url-pattern>/server/abcDef/abcd/*</url-pattern> 
</servlet-mapping> 

Update:

С 1432124 и abcd не фиксированные значения, вы можете смело добавить следующее отображение:

<servlet-mapping> 
    <servlet-name>abcDefServlet</servlet-name> 
    <url-pattern>/server/abcDef/*</url-pattern> 
</servlet-mapping> 

А потом лечить любые значения которые появляются после abcDef внутри самого сервлета, остроумие h:

req.getPathInfo() 
+0

Извините, что я должен был упомянуть, что «1432124» и «abcd» не являются фиксированными и могут быть множеством значений. Поэтому по существу мне нужно сопоставить/abcDef/*/* - исправлен только abcDef. Я отредактирую свой вопрос, чтобы быть очень ясным. – Sai

+0

@Sai: Хорошо. Я также обновил ответ. Пожалуйста, проверь это. – Cassio

+2

** обновленная ** часть является правильной. +1 – informatik01