5

基本上我想要一个 servlet 来处理所有传入的请求,而不管路径如何。我在共享托管环境中,可以配置我自己的 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 映射:

<servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

结果相同。都没有工作......有人有什么建议吗?

4

4 回答 4

4

Tomcat 5 实现了 Servlet 2.4 规范。可以在这里下载: JCP Servlet 2.4 Spec

在第 页。86 - SRV.11.2 它描述了如何指定 Servlet 映射。如果我理解您正在尝试正确执行的操作,那么您正在尝试使用单个 Servlet 拦截到您的服务器的每个请求(无论路径如何)。为此,您的 webapp 需要在 Tomcat 的情况下安装在默认上下文(“ROOT”)中,并且您的 Servlet 需要映射到 web.xml 中的默认 servlet。您在 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。这假设您的应用程序名为“your-app.war”。

希望这可以帮助。

于 2009-05-12T20:52:08.287 回答
1

<url-pattern>/*</url-pattern>应该管用。您的 webapp 需要部署在根上下文中。默认情况下,tomcat 使用名为 ROOT 的 webapp;但是,您可以将其更改为在 server.xml 中查找另一个 webapp。

另一种方法是创建一个 ServletFilter 来完成这项工作并以相同的方式映射它。每种方法(servlet 和 servlet 过滤器)各有利弊。但是,从您的示例来看,您似乎只想将所有内容发送到另一个站点,因此任何一个都应该可以工作。

于 2009-05-08T16:43:10.837 回答
0

Pattern /* 将明确调用您的 Redirect servlet。您是否调试过您的 servlet 以查看它是否收到了对该 url 的请求?你的意思是没有工作?你有没有得到任何错误或发生了什么?

于 2009-04-29T04:15:13.463 回答
-1

你试过了吗

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

?

于 2009-04-29T04:09:36.583 回答