0

我在我的一个项目中使用 OmniFaces ExtensionlessURL FacesViews 功能,并发现当 Web 应用程序被打包为 EAR 存档中的瘦 WAR 存档并部署到 Wildfly 容器或 WebSphere Liberty 时,此功能似乎不起作用配置文件容器。如果我尝试访问没有 .xhtml 后缀的页面,在这两个容器上都会出现 404 错误。

如果我将包含瘦 WAR 存档的相同 EAR 存档部署到 GlassFish 容器或 WebLogic 容器,则 ExtensionlessURL 功能将按预期工作,并且无需 .xhtml 后缀即可访问页面。

如果我部署一个包含普通 WAR 存档的 EAR 存档(即 OmniFaces jar 存储在 WAR 存档的 WEB-INF/lib 文件夹中),那么 ExtensionlessURL 除了在 WildFly 容器和 WebSphere Liberty Profile 容器上按预期工作GlassFish 和 WebLogic 容器。

我使用的 WildFly 版本是 9.0.2,WebSphere Liberty Profile 的版本是 8.5.5.7。我使用的 OmniFaces 版本是 2.2

我可以在我的配置中更改一些内容以允许 OmniFaces Extensionless URL 功能与 Wildfly 和 WebSphere Liberty 配置文件容器上的瘦 WAR 档案一起使用,还是这是一个错误?

为了解决这个问题,我创建了一个独立的示例,其中包含重现问题所需的最低限度。

web.xml 文件如下:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">

    <context-param>
        <param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
        <param-value>/*.xhtml</param-value>
    </context-param>

    <servlet>
        <servlet-name>facesServlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>facesServlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>

</web-app>

Maven WAR插件的配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>

Maven EAR 插件的配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.10.1</version>
    <configuration>
        <version>7</version>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
        <skinnyWars>true</skinnyWars>
        <modules>
            <webModule>
                <groupId>${project.groupId}</groupId>
                <artifactId>extensionless-web</artifactId>
                <context-root>/extensionless-web</context-root>
            </webModule>
        </modules>
    </configuration>
</plugin>

Maven EAR 项目还包含以下依赖项,用于从 WAR 项目中提取依赖项:

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>extensionless-web</artifactId>
    <version>${project.version}</version>
    <type>pom</type>
</dependency>
4

0 回答 0