如何在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实例中部署一个应用程序。