2009-11-11 104 views
12

问题是: 我有一个web应用程序,此web应用程序部署到$TOMCAT_HOME/webapps/XXX目录。 我可以达到的http://localhost:8080/XXX地址 但我想到http://localhost:8080/YYY地址的网络应用程序。 添加以下到server.xml:Tomcat:一个web应用程序的两个上下文路径

<Server> 
    <Service> 
     <Engine> 
      <Host> 
       ....... 
       <Context path="/YYY" docBase="XXX"></Context> 
      </Host> 
     </Engine> 
    </Service> 
</Server> 

它帮助但是这个Tomcat启动两个Web环境和它引起了一些其他问题。 是否有可能为一个Web应用程序创建一个“多个”地址?

+0

@大卫拉比诺维茨:是有这个问题,你有兴趣的特定部分,因此赏金?由于Tomcat会在/ XXX和/ YYY上使用该应用程序,所以如果以这种方式进行映射。 – JoseK 2011-08-26 11:02:41

+0

难道你只是做一个JSP重定向?所以在tomcat/webapps/YYY /放置一个重定向或转发的index.jsp目录。 – 2011-08-30 10:47:07

+1

请问你为什么要这样做? Http服务器代理重定向将是实现它的最简单方法。 – 2014-06-10 12:03:25

回答

-3

尝试使用crossContext属性:

<Context path="/YYY" docBase="XXX" crossContext="true"></Context> 
+0

要清楚的是,它只能在使用'ServletContext#getContext()'访问它时启用返回其他上下文。然而,我不确定这个问题中的信息是如何适用的。 – BalusC 2009-11-11 17:02:23

+0

是的,你是对的。我已经仔细研究了一下,记得我对此有些困惑。对于那个很抱歉。在发布建议之前,应该多看一点。 – Eric 2009-11-11 18:40:48

+0

-1不回答问题 – Daniel 2014-06-06 06:16:06

3

web应用的URL被assebled如下:

PROTOCOL:// DOMAIN:PORT/CONTEXT /页面名

的解决方案具有两个不同地址上的相同应用程序如下所示:

  1. 如果您想要(仅在协议中有所不同)(比如,在http和https之间),然后在server.xml中只有2个连接器。

  2. 如果您想要在DOMAIN名称中有所不同,那么这是在DNS级别上解决的。

  3. 如果你想要在上下文名称(web应用程序名称)上有所不同,你应该把apache放在前面(mod_proxy或mod_ajp),然后创建一个重写规则(mod_rewrite)。假设所有从/a/*/b/*重写为/c/*

  4. 如果您想要区分页面名称,应该使用servlet映射。

把apache放在tomcat之前通过mod_proxy很容易,网上有很多资源。非常糟糕的是复制应用程序(将所有内容加载两次)。

至于你的问题,我会建议在server.xml重复。

<Context docBase="myapp" path="/address1" reloadable="true" /> 
<Context docBase="myapp" path="/address2" reloadable="true" /> 

这是内存杀手,以及会话机制,并发性等

+0

这并不能解决问题。你只需部署两个**不同的** webapps和**不是**。您必须使用URL重写。 – 2013-06-20 11:11:42

+0

1个Web应用程序在2个地址的解决方案在项目符号1,2,3中。没有一个提议意味着2个不同的webapps。您的评论要回答哪个解决方案(段落)? – 2013-07-04 11:13:24

+0

我面临同样的问题,第三个选项是最好的。但是,这给我带来了另一个问题。就我而言,我的web应用程序使用摘要式身份验证进行保护,并且在摘要中,浏览器发送的密码是一些或多或少复杂的包含URI的计算出来的哈希值。浏览器的URI不是webapp的URI(我用mod_rewrite修改了它),所以认证失败。如何解决这个问题的任何想法? – drublik 2014-12-01 15:00:44

相关问题