我知道我可以将我的webapp(或它的WAR文件)重命名为 ROOT ,但这是一种可怕的方法,恕我直言。现在我查看了tomcat doc&它说
不建议直接在元素中放置元素 server.xml文件
所以我尝试了它建议的另一种方法。
可以明确定义单个上下文元素:在 应用程序文件中/META-INF/context.xml中的单个文件。
所以我使用以下代码
创建了/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>
但是在我重新启动服务器后部署它仍然无法在“/”处加载上下文时,它仍然使用"/<WEB_APP_NAME>"
任何有用的指针。
答案 0 :(得分:219)
您可以做的是以下内容;
在ROOT.xml
<catalina_home>/conf/Catalina/localhost/
的文件
此ROOT.xml将覆盖该引擎和主机(Catalina和localhost)的tomcat安装的根上下文的默认设置。
在ROOT.xml文件中输入以下内容;
<Context
docBase="<yourApp>"
path=""
reloadable="true"
/>
此处,<yourApp>
是您的应用的名称.. :)
然后,您的应用程序现在是默认应用程序,将显示在http://localhost:8080
然而,有一个副作用;您的应用程序将加载两次。一次为localhost:8080
,一次为localhost:8080/yourApp
。要解决此问题,您可以将应用程序放在<catalina_home>/webapps
外,并在ROOT.xml的docBase标记中使用相对或绝对路径。像这样的东西;
<Context
docBase="/opt/mywebapps/<yourApp>"
path=""
reloadable="true"
/>
然后一切都好!
答案 1 :(得分:13)
以下是唯一适合我的解决方案。将其添加到conf / server.xml
中的Host节点<Context path="" docBase="yourAppContextName">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
转到Tomcat server.xml文件并将路径设置为空白
答案 2 :(得分:3)
这个小代码对我有用,使用虚拟主机
<Host name="my.host.name" >
<Context path="" docBase="/path/to/myapp.war"/>
</Host>
答案 3 :(得分:3)
在Tomcat 9.0中,我只需要在server.xml
<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>
到
<Context docBase="web" path="" reloadable="true" source="org.eclipse.jst.jee.server:web"/>
答案 4 :(得分:2)
最快,可能是最佳解决方案是在<TOMCAT_INSTALL_DIR>/conf/Catalina/localhost/ROOT.xml
<Context
docBase="/your_webapp_location_directory"
path=""
reloadable="true"
/>
您的网络应用程序将在http://<host>:<port>/
答案 5 :(得分:1)
我遇到这个问题已经有一个月了,在server.xml中放置上下文标签是不安全的,它会影响为所有其他主机部署的上下文元素,对于大型应用程序,它需要连接错误也不是很好的隔离,例如你可以访问其他网站文件夹名称domain2.com/domain1Folder !!还加载了两次数据库会话连接! 另一种方法是将ROOT.xml文件放在具有完整路径的上下文标记中:
<Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />
在conf / catalina / webappsfoldername中 并将war文件部署为webappsfoldername中的ROOT.war 并指定主机 这样的
<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>
在这种方法中,对于相同类型的应用程序,用户会话也没有很好的隔离! 你可以在app1里面如果app1和app2相同你可以在服务器端会话登录后自动登录到app2吗? 因此,您必须将用户会话保留在客户端缓存中,而不是使用jsessionid! 我们可以从localhost更改引擎名称来解决它。 但是,让我们说与tomcat一起玩需要比与其他猫玩更多的时间!
答案 6 :(得分:1)
<Context docBase="yourAppName" path="" reloadable="true">
转到Tomcat server.xml文件并将路径设置为空白
答案 7 :(得分:1)
Tomcat 8: 经过多次搜索后,这只是工作代码: 在server.xml中
<!-- Set /apple as default path -->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="apple">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
</Host>
重启Tomcat,确保当您访问127.0.0.1:8080时,它将显示127.0.0.1:8080/apple中的内容
我的项目是由netbeans创建的java web应用程序,我在项目配置中设置了上下文路径,没有别的,甚至我把apple.war放在webapps文件夹中。
答案 8 :(得分:1)
对我来说,两个答案都有效。
<Context docBase="/tmp/wars/hpong" path="" reloadable="true" />
<Service name="Catalina2"> <Connector port="8070" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8743" /> <Engine name="Catalina2" defaultHost="localhost"> <Host name="localhost" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/tmp/wars/hpong" reloadable="true"> <WatchedResource>WEB-INF/web.xml</WatchedResource> </Context> </Host> </Engine> </Service>
注意:当您在上下文中声明docBase时,请忽略主机上的appBase。
ROOT.war
并将其放置在webapps下。因此,现在其他战争(contextpaths)发出的无与伦比的url请求将落入这场战争。这是处理ROOT(“ / **”)上下文路径的更好方法。 第二个选项是(两次)也从Webapps文件夹加载wars。另外,它只需要未压缩的war文件夹,这是令人头疼的。
答案 9 :(得分:0)
不建议更新服务器配置,如server.xml或ROOT.xml。
您可以将context.xml配置文件放在Web应用程序META-INF目录下,并包含上下文路径设置。这将覆盖默认服务器设置?
即:
<Context docBase="yourAppName" path="/yourAppPath" reloadable="true">
答案 10 :(得分:0)
在Tomcat 8.X中,在server.xml的tomcat主目录/ conf /文件夹下,您可以在<Context>
标记下添加<Host>
标记,如下所示。但是您必须重新启动服务器才能生效
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="${catalina.base}\webapps\<Your App Directory Name>" path="<your app path you wish>" reloadable="true" />
</Host>
或者,如果您正在使用Tomcat 7.X,则可以在项目的WEB-INF文件夹中添加context.xml文件。我使用的文件内容如下所示。对我来说很好。在这种情况下,您不必重新启动服务器。
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="${catalina.base}\webapps\<My App Directory Name>" path="<your app path you wish>" reloadable="true" />
答案 11 :(得分:0)
最简单,最灵活的解决方案如下: 在$ {Tomcat_home} /config/server.xml
内部在 Host 元素下更改 autoDeploy =“ false” deployOnStartup =“ false” ,如下所示。这是必须的。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="false">
在主机元素下添加以下行。
<Context path="" docBase="ServletInAction.war" reloadable="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
通过上述方法,我们可以在具有不同上下文路径名称的webapps下添加尽可能多的应用程序。
答案 12 :(得分:-6)
以下技巧对我有用。
1)在tomcat的server.xml文件(conf文件夹内)中注释/删除以下配置。
2)删除驻留在tomcat webapps文件夹中的现有ROOT文件夹(如果有)。并将您的战争(例如:test.war)文件重命名为ROOT.war。
请记住,在将war文件重命名为ROOT.war时,“ROOT”应为大写字母。
限制:您只能在一个tomcat实例中部署一个应用程序。