Наличие двух разных сервлетов, сопоставленных с одним и тем же шаблоном URL

#java #servlets #web.xml

#java #сервлеты #web.xml

Вопрос:

Я столкнулся с проектом J2EE, написанным другими. Когда я прихожу к web.xml , есть два разных сервлета, сопоставленных с одним и тем же шаблоном URL. Интересно, какова цель этого подхода. Как именно это работает и что такое puspose?

Вот соответствующая часть web.xml :

 <servlet>
    <servlet-name>fileDownload</servlet-name>
    <servlet-class>com.htsoft.core.web.servlet.FileDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>fileDownload</servlet-name>
    <url-pattern>/file-download</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>fileDownLoad</servlet-name>
    <servlet-class>com.kaiwii.oa.action.system.FileDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>fileDownLoad</servlet-name>
    <url-pattern>/file-downLoad</url-pattern>
</servlet-mapping>  
  

Комментарии:

1. Было бы неплохо вставить части xml.

2. я уже опубликовал web.xml довольный пока.

3. Это не одно и то же: в спецификации сервлета указано, что сопоставление шаблонов чувствительно к регистру.

Ответ №1:

Будет вызван только один сервлет; я не знаю механизма для обработки одного запроса с двумя сервлетами (и я не уверен, что это вообще будет означать).

Шаблоны URL-адресов сервлетов могут перекрываться, но наличие двух с одним и тем же URL-адресом не имеет смысла. Я не помню, запрещает ли это спецификация сервлета явно, однако сопоставление останавливается при первом сопоставлении. Метод сопоставления определен в спецификации.

Спецификация Servlet 2.4 PDF См. стр. 85

Комментарии:

1. Спецификация довольно ясна, что шаблоны URL должны проверяться в порядке их появления, поэтому сохраняется первое самое длинное совпадение. SRV 2.5.

2. @EJP Я думал, что это то, что сделала часть спецификаций сопоставления?

3. Я исправил свой комментарий, но в частях, в которых обсуждаются сопоставления фильтров и ограничения безопасности, явно указано web.xml порядок; #11.1, в котором обсуждается <сопоставление сервлетов>, нет.

4. @EJP Да, спецификация подразумевает это, но… вы знаете, насколько хорошо это работает.

5. Точно. Это любопытное упущение, учитывая, сколько работы было проделано над ним более десяти лет.