如何在Tomcat7.0中设置web应用程序的上下文路径
我知道我可以将我的webapp(或它的WAR文件)重命名为ROOT,但这是一种可怕的方式,IMHO。现在我查看了tomcat文档&上面写着 不建议将图元直接放置在中 server.xml文件 所以我尝试了另一种方法 单个上下文元素可以显式定义:在 应用程序文件中位于/META-INF/context.xml的单个文件 因此,我用以下代码创建了一个如何在Tomcat7.0中设置web应用程序的上下文路径,tomcat,tomcat7,root,context.xml,Tomcat,Tomcat7,Root,Context.xml,我知道我可以将我的webapp(或它的WAR文件)重命名为ROOT,但这是一种可怕的方式,IMHO。现在我查看了tomcat文档&上面写着 不建议将图元直接放置在中 server.xml文件 所以我尝试了另一种方法 单个上下文元素可以显式定义:在 应用程序文件中位于/META-INF/context.xml的单个文件 因此,我用以下代码创建了一个/META-INF/context.xml <?xml version="1.0" encoding="UTF-8"?> <Conte
/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/"/>
但在部署后,当我重新启动服务器时,它仍然无法在“/”处加载上下文,它仍然使用“/”
任何有用的指针。您可以做的是: 在
/conf/Catalina/localhost/
此ROOT.xml将覆盖该引擎和主机(Catalina和localhost)tomcat安装的根上下文的默认设置
在ROOT.xml文件中输入以下内容:
<Context
docBase="<yourApp>"
path=""
reloadable="true"
/>
然后一切都会好起来的 这是唯一对我有效的解决方案。将以下内容添加到
conf/server.xml
文件中的主机节点中
<Context path="" docBase="yourAppContextName">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
WEB-INF/WEB.xml
这个小代码对我来说很有用,它使用虚拟主机
<Host name="my.host.name" >
<Context path="" docBase="/path/to/myapp.war"/>
</Host>
下面的技巧对我很有效
1) 注释/删除tomcat的server.xml文件(conf文件夹内)中的以下配置
2) 删除驻留在tomcat webapps文件夹中的现有根文件夹(如果有)。并将war(例如:test.war)文件重命名为ROOT.war
请记住,将war文件重命名为ROOT.war时,“ROOT”应该是大写的
限制:您只能在一个tomcat实例中部署一个应用程序。我一个月来一直面临这个问题,将上下文标记放在server.xml中是不安全的,它会影响为所有其他主机部署上下文元素,对于大型应用程序,可能会出现连接错误,例如,您可能会通过名为domain2.com/domain1Folder的文件夹访问其他网站!!还加载了两次数据库会话连接!
另一种方法是放置具有完整路径的上下文标记的ROOT.xml文件,例如:
<Context path="" docBase="/var/lib/tomcat7/webapps/ROOT" />
在conf/catalina/webappsfoldername中
并将war文件作为ROOT.war部署到webappsfoldername中
并指定主机
这样
<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与app2相同,您可以在app1内通过服务器端会话登录后自动登录到app2?!
因此,您必须将用户会话保持在客户端缓存中,而不是使用jsessionid!
我们可以从localhost更改引擎名称来解决此问题。
但是让我们说,与tomcat一起玩比与其他猫一起玩需要更多的时间 最快也是最好的解决方案是在/conf/Catalina/localhost/ROOT.xml中包含以下内容
<Context
docBase="/your_webapp_location_directory"
path=""
reloadable="true"
/>
<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>
您的webapp将在http://://
上提供。不建议更新server.xml或ROOT.xml等服务器配置
您可以将context.xml配置文件放在web应用程序META-INF目录下,并包含上下文路径设置。这将覆盖默认服务器设置
i、 e:
转到Tomcat server.xml文件并将路径设置为空
在Tomcat9.0中,我只需在server.xml
<Context
docBase="/your_webapp_location_directory"
path=""
reloadable="true"
/>
<Context docBase="web" path="/web" reloadable="true" source="org.eclipse.jst.jee.server:web"/>
到
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>
WEB-INF/WEB.xml
重新启动Tomcat,确保当您访问127.0.0.1:8080时,它将以127.0.0.1:8080/apple的格式显示内容
我的项目是由netbeans创建的java web应用程序,我在项目配置中设置了上下文路径,没有其他事情,甚至我把apple.war放在了webapps文件夹中。对我来说,两个答案都有效
在/conf/Catalina/localhost中添加名为ROOT.xml的文件/
在server.xml中添加条目
WEB-INF/WEB.xml
注意:当您在上下文下声明docBase时,请忽略主机上的appBase
不过,我更喜欢将我的war名称转换为ROOT.war
,并将其放在webapps下。因此,现在来自其他战争(ContextPath)的不匹配url请求将进入这场战争。这是处理根(“/**”)上下文路径的更好方法李>
第二个选项是(双重)从Webapps文件夹加载wars。此外,它只需要未压缩的war文件夹,这是一个令人头痛的问题。在Tomcat 8.X中,在server.xml中的Tomcat主目录/conf/folder下,您可以在
标记下添加
标记,如下所示。但您必须重新启动服务器才能生效
<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" />
最简单、灵活的解决方案如下:
在${Tomcat_home}/config/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>
更改主机下的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>
WEB-INF/WEB.xml
通过上述方法,我们可以在webapps下添加具有不同上下文路径名的应用程序。这是否适用于常规webapps文件夹中的其他WAR?查看docs docbase,路径是/to/yourApp,路径必须为“”(因此为空字符串),这意味着根上下文要解决双重部署问题,您还可以同时设置这两个路径“部署启动”和“自动部署”f
<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>