如何将我的 Web 应用程序的上下文根设置为“/”。

Posted

技术标签:

【中文标题】如何将我的 Web 应用程序的上下文根设置为“/”。【英文标题】:How do I set my web application's context root to "/". 【发布时间】:2012-07-08 16:46:50 【问题描述】:

我在 Web 应用程序中设置上下文根时遇到问题。 我想将上下文根设置为“/”,但是当我启动我的应用程序服务器(jboss-5.1.0.GA)时,出现以下异常:

12:21:23,257 错误 [AbstractKernelController] 安装到开始时出错:name=jboss.web.deployment:war=/ state=Create mode=Manual requiredState=Installed org.jboss.deployers.spi.DeploymentException:部署 URL 文件的 Web 映射已存在:/D:/jboss-5.1.0.GA/jboss-5.1.0.GA/server/letu-prod/deploy/ATG.ear /store.war/ 在 org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:187) 在 org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142) 在 org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461) 在 org.jboss.web.deployers.WebModule.startModule(WebModule.java:118) 在 org.jboss.web.deployers.WebModule.start(WebModule.java:97) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) 在 org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) 在 org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 在 org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 在 org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) 在 org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206) 在 $Proxy38.start(未知来源) 在 org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42) 在 org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37) 在 org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) 在 org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) 在 org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) 在 org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 在 org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286) 在 org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631) 在 org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934) 在 org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) 在 org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984) 在 org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822) 在 org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) 在 org.jboss.system.ServiceController.doChange(ServiceController.java:688) 在 org.jboss.system.ServiceController.start(ServiceController.java:460) 在 org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163) 在 org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99) 在 org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46) 在 org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62) 在 org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50) 在 org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171) 在 org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439) 在 org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157) 在 org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178) 在 org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1210) 在 org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098) 在 org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 在 org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631) 在 org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934) 在 org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) 在 org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984) 在 org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822) 在 org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) 在 org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781) 在 org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702) 在 org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117) 在 org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70) 在 org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53) 在 org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:361) 在 org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) 在 org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631) 在 org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934) 在 org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) 在 org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984) 在 org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822) 在 org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553) 在 org.jboss.system.server.profileservice.repository.AbstractProfileService.activateProfile(AbstractProfileService.java:306) 在 org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:271) 在 org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461) 在 org.jboss.Main.boot(Main.java:221) 在 org.jboss.Main$1.run(Main.java:556) 在 java.lang.Thread.run(Thread.java:662)

有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

默认情况下。 JBoss 的部署文件夹中有一个 ROOT.war,它绑定到 / 上下文。 当其他一些应用程序也尝试将其上下文绑定到 / 时,早期版本的 JBoss 不会引发异常。

请看下面的链接

Web mapping already exists for deployment

【讨论】:

【参考方案2】:

我还在使用 eclipse indigo (STS 2.9.2) 运行 jBoss 5.1 我将我的 Web 项目设置保留到我的原始根上下文 myWarName.war 例如在 eclipse 中,但必须将 jBoss.web.xml 文件更改为这个:

来自:

<jboss-web>
     <context-root>myWarName</context-root>
</jboss-web>

收件人:

<jboss-web>
    <context-root>/</context-root>
</jboss-web>

然后我将 jBoss 部署文件夹下的 ROOT.war 重命名为 jBossROOT.war,如 Arun 的链接中所述,一切正常。我不想删除ROOT.war,所以我选择了这个选项。

【讨论】:

【参考方案3】:

默认情况下,Web 应用程序的上下文根(也称为上下文路径)设置为 Web 应用程序存档 (WAR) 的根名称(不带 .war 扩展名的名称)。您可以使用用于 EAR 部署的标准应用程序描述符(即 application.xml)或用于独立 WAR 的 JBoss AS Web 描述符(即 jboss-web.xml)覆盖上下文根。我们先来谈谈独立的 WAR。

独立 WAR 部署

您在独立的 WAR 中覆盖 web 应用程序的上下文路径(上下文根),该文件位于 WAR 的 WEB-INF 目录中的 jboss-web.xml 中。在这里,我们将上下文根设置为 /,这就是所谓的根上下文。当应用程序被分配到根上下文时,它将响应所有未被更具体的上下文根处理的请求。

/WEB-INF/jboss-web.xml(在 WAR 中)

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-web>  
    <context-root>/</context-root>  
</jboss-web>  

此文件可以配置许多其他设置。尽管不是必需的,但您可以将 XSD(或在早期版本中为 DTD)添加到 XML 根目录。让我们为 JBoss AS 5.1 添加 XSD,在 JBoss AS 模式目录中找到,并将上下文根更改为 /myapp。

/WEB-INF/jboss-web.xml(在 WAR 中)

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"  
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="  
      http://www.jboss.com/xml/ns/javaee  
      http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">  
   <context-root>myapp</context-root>  
</jboss-web>

(注意:如果您在部署时遇到问题,只需不使用架构声明即可)。

虽然在独立 WAR 中设置上下文路径的方式是专有的,但当部署在 EAR 中时,Java EE 确实提供了一种为 WAR 分配上下文路径的标准方法。

EAR 部署

当 Web 应用程序部署在 EAR 文件中时,上下文根在 EAR 的 application.xml 文件中指定,使用 Web 模块内的 context-root 元素。在以下示例中,bank-webapp.war 应用程序的上下文根设置为 /mymoney。

/META-INF/application.xml(在 EAR 中)

<application version="5" xmlns="http://java.sun.com/xml/ns/javaee"  
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="  
      http://java.sun.com/xml/ns/javaee  
      http://java.sun.com/xml/ns/javaee/application_5.xsd">  
   <module>  
      <ejb>bank-ejb.jar</ejb>  
   </module>  
   <module>  
      <web>  
         <web-uri>bank-webapp.war</web-uri>  
         <context-root>mymoney</context-root>  
      </web>  
   </module>  
</application>

【讨论】:

JBOSS 7.1.1 AS 未检测到“/WEB-INF/jboss-web.xml”

以上是关于如何将我的 Web 应用程序的上下文根设置为“/”。的主要内容,如果未能解决你的问题,请参考以下文章

为啥 WPF 将我的数据上下文设置为 MS.Internal.NamedObject?

如何在 Eclipse 中更改动态 Web 项目的上下文根?

如何设置 Spring 根上下文路径

将 QObject* 设置为 QMLEngine 根上下文属性

将QObject *设置为QMLEngine根上下文属性

将我的应用程序添加到 Finder 的上下文菜单?