2009-04-29 2 views
5

В принципе, я хочу, чтобы один сервлет обрабатывал весь входящий запрос независимо от пути. Я нахожусь в среде общего хостинга с доступом для настройки моего собственного файла web.xml.Настроить web.xml (Tomcat 5) для одного сервлета для обработки всех входящих запросов?

Я следующее сконфигурировано в 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

ли вы попробовать

<url-pattern>*</url-pattern> 

?

+1

Нет, я дам вам попробовать, но не уверен, что это законный синтаксис. – 2009-04-29 16:20:58

0

Шаблон/* определенно вызовет ваш сервлет Redirect. Вы отлаживали ваш сервлет, чтобы узнать, получил ли он запрос на этот URL-адрес? Что вы имеете в виду, это не сработало? Вы получили какую-либо ошибку или что произошло?

+0

Сервлет Redirect получил только запрос, содержащий хотя бы каталог. Если я пошел прямо в домен, то есть www.mydomain.com или www.mydomain.com/, сервлет Redirect не был вызван. Сервлет Redirect работает по назначению. Ошибка, которую я получаю, запрещена. Однако, если я помещаю файл index.jsp в корневой каталог, я не получаю ошибки. – 2009-04-29 16:20:25

+0

Используйте , если вы не хотите использовать индексную страницу. –

+0

Я вижу, вы сейчас редактировали свой вопрос. У вас нет контекстного имени для вашего веб-приложения, где вы настроили web.xml или web.xml - это корневой контекст tomcat? Я сомневаюсь, что это сработает. Вы можете определить index.jsp в списке приветственных файлов и в jsp перенаправить запрос на ваш сервлет. –

1

<url-pattern>/*</url-pattern> должно работать. Ваш webapp должен быть развернут в корневом контексте. По умолчанию tomcat использует webapp с именем ROOT; однако вы можете изменить его, чтобы искать другой webapp в вашем server.xml.

Другим подходом было бы создать ServletFilter для выполнения работы и сопоставить ее так же. Для каждого подхода есть плюсы и минусы (фильтр сервлетов и сервлетов). Однако, из вашего примера, похоже, вы просто хотите отправить все на другой сайт, так что либо он должен работать.

4

Tomcat 5 реализует сервлет 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

Имеет ли значение, если Context path = "" или path = "/"? Я видел, как он был определен как «/» в прошлом. –

Смежные вопросы