如何在Tomcat 7.0中设置Web应用程序的上下文path

我知道我可以重命名我的webapp(或它的WAR文件)到ROOT,但这是一个可怕的方式来做到这一点,恕我直言。 现在我检查了tomcat文档,它说

不build议将元素直接放在server.xml文件中

所以我尝试了另一种方法。

单独的上下文元素可以被明确地定义:在/META-INF/context.xml里的应用程序文件中的单个文件中。

所以我用下面的代码创build了一个/META-INF/context.xml

 <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/"/> 

但是在部署完成后,当我重新启动服务器时,它仍然无法在“/”加载上下文,但仍然加载了"/<WEB_APP_NAME>"

任何指针都有帮助。

你可以做的是以下几点;

<catalina_home>/conf/Catalina/localhost/目录下添加一个名为ROOT.xml的文件,

这个ROOT.xml将覆盖该引擎和主机(Catalina和localhost)的tomcat安装的根上下文的默认设置。

将以下内容input到ROOT.xml文件中;

 <Context docBase="<yourApp>" path="" reloadable="true" /> 

这里, <yourApp>就是你的应用程序的名称.. 🙂

在那里,你的应用程序现在是默认的应用程序,并将显示在http://localhost:8080

但是,有一个副作用, 你的应用程序将被加载两次。 一次为localhost:8080和一次为localhost:8080/yourApp 。 要解决这个问题,你可以把你的应用程序OUTSIDE <catalina_home>/webapps并在ROOT.xml的docBase标记中使用相对或绝对path。 像这样的东西;

 <Context docBase="/opt/mywebapps/<yourApp>" path="" reloadable="true" /> 

然后它应该是一切OK!

这里遵循唯一的解决scheme,为我工作。 将其添加到conf / server.xml中的主机节点

 <Context path="" docBase="yourAppContextName"> <!-- Default set of monitored resources --> <WatchedResource>WEB-INF/web.xml</WatchedResource> </Context> 

转到Tomcat server.xml文件并将path设置为空白

这个小代码为我工作,使用虚拟主机

 <Host name="my.host.name" > <Context path="" docBase="/path/to/myapp.war"/> </Host> 

最快和可能是最好的解决scheme是在<TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml

 <Context docBase="/your_webapp_location_directory" path="" reloadable="true" /> 

你的webapp将会在http://<host>:<port>/

我面临这个问题一个月,将上下文标签放在server.xml中是不安全的,它会影响所有其他主机的上下文元素部署,对于大的应用程序,它连接错误也不是很好的隔离,例如,您可以通过文件夹名称domain2访问其他网站.com / domain1Folder !! 还有数据库会话连接加载两次! 另一种方式是把具有上下文标签的ROOT.xml文件放在完整path中:

  <Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" /> 

在conf / catalina / webappsfoldername中,并将war文件部署为webappsfoldername中的ROOT.war,并指定host

  <Host name="domianname" appBase="webapps2" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" > <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true"/> </Host> 

在这种方法也适用于相同types的应用程序用户会话不好隔离! 你可以在app1里面,如果app1与app2相同,你可以在通过服务器端会话自动login后login到app2? 所以你必须保持用户会话在客户端caching,而不是jsessionid! 我们可以从本地主机更改引擎名称来解决它。 但是让我们说玩tomcat需要更多的时间比与其他猫玩!

<Context docBase="yourAppName" path="" reloadable="true">

转到Tomcat server.xml文件并将path设置为空白

在Tomcat 9.0中,我只需要在server.xml更改以下内容

 <Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/></Host> 

 <Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/></Host> 

不build议更新server.xml或ROOT.xml等服务器configuration。

您可以在您的web应用程序META-INF目录下放置一个context.xmlconfiguration文件,其中包含上下文path设置。 这将覆盖默认的服务器设置?

即:

 <Context docBase="yourAppName" path="/yourAppPath" reloadable="true"> 

下面的技巧为我工作。

1)从tomcat的server.xml文件(conf文件夹内)注释/删除下面的configuration。

2)删除tomcat webapps文件夹内已有的ROOT文件夹(如有)。 并将您的战争(例如:test.war)文件重命名为ROOT.war。

请记住,在将war文件重命名为ROOT.war时,“ROOT”应该是大写字母。

限制:您只能在一个tomcat实例中部署一个应用程序。