配置Web应用程序的上下文路径
问题描述:
我正在使用Eclipse
和Maven
构建java web应用程序。该应用程序将在jboss
(wildfly
)或tomcat
上运行。我想配置我的Web应用程序的上下文路径。配置Web应用程序的上下文路径
默认情况下,eclipse将上下文路径设置为等于eclipse项目的名称(参见project -> properties -> web project settings
)。但是,无论在那里显示的上下文路径如何,当我部署我的war文件时,war文件的名称将用作上下文路径,而不是eclipse中的设置。
我想知道如何配置在以下三种情况下的上下文路径:
- 当我在Eclipse中运行我的web项目,使用Eclipse的嵌入式服务器(如Tomcat或wildfly)。在这种情况下,它似乎正在接受项目名称。
- 当我用maven构建一个战争,并使用eclipse中的嵌入式服务器运行这个war文件。它似乎在采取战争文件的名称。
- 当我构建一个战争并将其部署到外部servlet容器(在eclipse之外)时。它似乎也将战争名称作为上下文路径。
上下文路径选择platform/eclipse/servlet容器是否依赖?有没有人记录每个容器的标准行为?有没有办法为所有平台和servlet容器配置/设置上下文路径,而不管构建/部署战争的方式和位置,更重要的是,战争名称与上下文路径不一样?
答
的唯一方法迄今设定的WAR的上下文根,使得它是独立使用的应用程序服务器的是:使之成为EAR的一部分,并且经由application.xml
提供上下文根:
<?xml version="1.0" encoding="UTF-8"?>
<application 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_6.xsd" version="6">
<display-name>EAR_NAME</display-name>
<module id="Module_***********">
<web>
<web-uri>YourWeb.war</web-uri>
<context-root>YourContextRoot</context-root>
</web>
</module>
</application>
即使在JAVA EE 6中,WAR的上下文根必须是jboss-web.xml
,glassfish-web.xml
或类似的特定于服务器的Web部署描述符的一部分。 Here是一个正式的例子。
我找不到类似的JAVA EE 7的例子,但我真的不认为这已经改变。 JEE7主要是围绕HTML5和JSON添加功能。
至少有一些答案,你会发现在这里:http://stackoverflow.com/a/664089/2365727 – michaldo
@michaldo恐怕信息有点过时(2009年),但至少它不能在不使用EAR文件(而不是WAR文件)的情况下以servlet-container不可知的方式完成是很有帮助的,谢谢 – user1884155