我有不同的webapps,它们共享web.xml配置的很大一部分。例如,某些servlet的映射方式对于所有应用程序都是相同的,但有些webapps具有自定义servlet,或其他过滤器或共享托管bean。
每个webapp都是我IDE中的一个不同项目。我想将web.xml的公共部分重构为“通用”项目,并让所有特定于应用程序的web.xml扩展“通用”web.xml。有可能这样做吗?
答案 0 :(得分:7)
是的,你可以。假设Eclipse(您的问题历史记录确认您正在使用它),只需创建一个" Web Fragment Project":
并将其与向导中的主项目相关联:
您可以根据需要(重新)在"部署程序集"中配置它。主Web项目的属性(或以任何其他方式配置构建,最终以主Web项目的/WEB-INF/lib
中的JAR结束)。
它基本上是一个具有以下文件夹结构的Java项目:
CommonWebProject
|-- com.example... (you can put e.g. @WebServlet classes here)
|
|-- META-INF
| |-- resources (you can put shared web resources here)
| | |-- common.css
| | |-- common.js
| | |-- template.jsp
| | :
| |
| |-- beans.xml
| |-- web-fragment.xml
| `-- MANIFEST.MF
:
/META-INF/resources
文件夹中的任何内容都以与WAR的webcontent相同的方式解析(我的Eclipse Luna SR1没有预先创建/resources
文件夹,因此您需要手动创造它)。而且,重要的是,WAR中已经具有相同名称的任何资源(包括类!)将具有优于JAR中的资源的加载优先级,因此您可以在必要时使用#34;覆盖"这种方式来自WAR的常见JAR资源。
请注意,web-fragment.xml
文件的名称必须与web.xml
完全相同,因此不能<?xml version="1.0" encoding="utf-8"?>
<web-fragment
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/web-fragment_3_0.xsd"
version="3.0"
>
<!-- Put shared web.xml config here. -->
</web-fragment>
。 IDE应该只为你自动生成一个,但为了完整起见,Servlet 3.0兼容的看起来像这样:
if(process.env.MYKEY) {
console.log('It is set!');
}
else {
console.log('No set!');
}
答案 1 :(得分:1)
如果您在glassfish上部署应用程序,则可以将常用配置放在default-web.xml
位置下的domain-dir\config\
文件中。
答案 2 :(得分:0)
通常,Web服务器具有定义默认web.xml的功能,可满足您的要求。我建议您探索您正在使用的Web服务器的选项。