为一个servlet配置web.xml(Tomcat 5)以处理所有传入请求?

时间:2009-04-29 03:09:21

标签: java tomcat servlets web.xml

基本上我想要一个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 个答案:

答案 0 :(得分:4)

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

on pg。 86 - SRV.11.2它描述了如何指定Servlet映射。如果我理解您正在尝试正确执行的操作,那么您将尝试使用单个Servlet拦截到服务器的每个请求(无论路径是什么)。为了实现这一点,在Tomcat的情况下,您的webapp需要挂载在默认上下文(“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”。

希望这有帮助。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

你试过吗

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