Настроить web.xml(Tomcat 5) для одного сервлета для обработки всех входящих запросов?
В принципе, я хочу, чтобы один сервлет обрабатывал весь входящий запрос независимо от пути. Я нахожусь в среде совместного размещения с доступом для настройки моего собственного файла web.xml.
У меня есть следующий конфигурационный файл в web.xml, но он не работает на Tomcat 5:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Redirect</display-name>
<servlet>
<display-name>Redirect</display-name>
<servlet-name>Redirect</servlet-name>
<servlet-class>com.Redirect</servlet-class>
<init-param>
<param-name>host</param-name>
<param-value>www.myredirectdomain.com</param-value>
</init-param>
<init-param>
<param-name>redirect-type</param-name>
<param-value>301</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Redirect</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Вышеописанное работает для чего-либо, начиная с каталога в пути, например:
www.mydomain.com/anypath1/anypath2...
www.mydomain.com/anypath1
Однако это не помогло:
www.mydomain.com/ or
www.mydomain.com
Я также пробовал следующее отображение сервлета:
<servlet-mapping>
<servlet-name>Redirect</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
С тем же результатом. Ни один из них не работал... У кого-нибудь есть предложения?
Ответы
Ответ 1
Tomcat 5 реализует спецификацию Servlet 2.4. Его можно скачать здесь:
JCP Servlet 2.4 Spec
На стр. 86 - SRV.11.2 описывает, как указать отображения сервлета. Если я понимаю, что вы пытаетесь сделать правильно, вы пытаетесь перехватить каждый запрос (независимо от пути) к вашему серверу с помощью одного сервлета. Для этого ваш webapp должен быть установлен в контексте по умолчанию ( "ROOT" ) в случае Tomcat, и вашему сервлету необходимо сопоставить сервлет по умолчанию в вашем web.xml. Ваше сопоставление в вашем web.xml является правильным.
<servlet-mapping>
<servlet-name>Redirect</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Я думаю, что проблема, с которой вы сталкиваетесь, связана с контекстом ROOT. Что вы видите на экране www.mydomain.com/и www.mydomain.com? Вы не упомянули, если ваша общая среда хостинга дает вам полный доступ к вашей собственной конфигурации Tomcat, но если вы можете получить доступ и изменить свой каталог $TOMCAT5_HOME/conf, есть несколько способов сделать эту работу для вас.
Возможно, самый чистый способ - добавить следующее:
< Context path="" debug="0" docBase="your-app">
до $TOMCAT5_HOME/conf/server.xml. Это предполагает, что ваши приложения называются "ваш-app.war".
Надеюсь, что это поможет.
Ответ 2
<url-pattern>/*</url-pattern>
должен работать. Ваш webapp должен быть развернут в корневом контексте. По умолчанию tomcat использует webapp с именем ROOT; однако вы можете изменить его, чтобы искать другой webapp в вашем server.xml.
Другим подходом было бы создание ServletFilter для выполнения работы и сопоставление с ней таким же образом. Для каждого подхода есть плюсы и минусы (фильтр сервлетов и сервлетов). Однако, из вашего примера, похоже, что вы просто хотите отправить все на другой сайт, так что либо он должен работать.
Ответ 3
Шаблон/* определенно вызовет ваш сервлет Redirect. Вы отлаживали ваш сервлет, чтобы узнать, получил ли он запрос на этот URL-адрес? Что вы имеете в виду, это не сработало? Вы получили какую-либо ошибку или что произошло?
Ответ 4
Вы пробовали
<url-pattern>*</url-pattern>
?