Настроить 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>

?