首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否为一个servlet配置web.xml (Tomcat5)来处理所有传入的请求?

是否为一个servlet配置web.xml (Tomcat5)来处理所有传入的请求?
EN

Stack Overflow用户
提问于 2009-04-29 03:09:21
回答 4查看 16K关注 0票数 5

基本上,我希望一个servlet处理所有传入的请求,而不管路径是什么。我在共享主机环境中,可以配置我自己的web.xml文件。

我在web.xml中配置了以下内容,但它在Tomcat5上不起作用:

代码语言:javascript
复制
<?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>

上述方法适用于以路径中的目录开头的任何内容,例如:

代码语言:javascript
复制
www.mydomain.com/anypath1/anypath2...
www.mydomain.com/anypath1

但是,对于以下情况不起作用:

代码语言:javascript
复制
www.mydomain.com/ or
www.mydomain.com

我还尝试了以下servlet映射:

代码语言:javascript
复制
<servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

结果是一样的。都不管用。有人有什么建议吗?

EN

回答 4

Stack Overflow用户

发布于 2009-05-12 20:52:08

Tomcat5实现了Servlet2.4规范。可在此处下载:JCP Servlet 2.4 Spec

在pg上。86 - SRV.11.2它描述了如何指定Servlet映射。如果我没弄错的话,您是在尝试用一个Servlet拦截到您的服务器的每个请求(不管是什么路径)。为此,您的webapp需要在默认上下文(“根”)下挂载(对于Tomcat ),并且您的Servlet需要映射到web.xml中的默认servlet。您在web.xml中的映射是正确的。

代码语言:javascript
复制
<servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

我认为你遇到的问题是根上下文的问题。访问www.mydomain.com/和www.mydomain.com会显示什么?你没有提到你的共享主机环境是否允许你完全访问你自己的Tomcat配置,但是如果你可以访问和修改$TOMCAT5_HOME/conf目录,有几种方法可以让它为你工作。

可能最干净的方法是添加以下内容:

代码语言:javascript
复制
< Context path="" debug="0" docBase="your-app">

到$TOMCAT5_HOME/conf/server.xml。这里假设您的应用程序名为" your -app.war“。

希望这能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2009-05-08 16:43:11

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

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

票数 1
EN

Stack Overflow用户

发布于 2009-04-29 04:15:13

Pattern /*将明确地调用您的重定向servlet。你有没有调试你的servlet,看看它是否收到了对这个url的请求?你的意思是没有起作用?你有没有收到任何错误或者发生了什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/800725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档