#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. Точно. Это любопытное упущение, учитывая, сколько работы было проделано над ним более десяти лет.