我目前正在重构已经存在了13年的网络应用程序。首先,我将依赖关系更新为Java SE 8,Tomcat 7和JSF 2.2。重构过程的下一个任务是将功能和相应的前端分成单独的模块。
我的目标是每个具有前端的单独模块负责其自己的路由和servlet映射。 " Core" -module应该将流量引导到相应的模块,让模块提供所需的内容。
这就是我面临巨大麻烦的地方。
问题的解决方法是以下教程(德语):https://www.tutorials.de/threads/modularisierbare-web-anwendungen-mit-jee6-web-profile-web-fragments.372772/,它是关于web片段(模块中的web.xml文件),可以很容易地包含在父web.xml中。 然而,核心模块无法覆盖所需的文件,我无法弄清楚原因。
请查看以下文件:
pom.xml(模块1(核心)的摘录):
<dependency>
<groupId>org.myapp</groupId>
<artifactId>myapp-frontendmodul</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
web.xml(模块1(核心)web.xml的摘录):
<web-app version="2.5" 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/j2ee/web-app_2_5.xsd" metadata-
complete="false">
[...]
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
[...]
由于我们刚刚开始重构,因此核心模块的一部分是一个Web应用程序。
各文件的文件夹结构(模块1(核心)):
各文件的文件夹结构(模块2):
pom.xml(模块2):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>myapp-production</artifactId>
<groupId>org.myapp</groupId>
<version>3.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<name>My App - Frontend Modul</name>
<artifactId>myapp-frontendmodul</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
web.xml(模块2):
<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"
id="myapp-frontendmodul">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-fragment>
AktuelleSchritteAlle.xhtml(模块2):
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
>
<f:view locale="de">
<h:body>
<h:outputText>test</h:outputText>
</h:body>
</f:view>
</html>
提前谢谢。