Skip to main content
 首页 » 编程设计

jsf之如何让 JSF 在 docker 容器中使用 spring-boot 应用程序

2024年02月24日11zdz8207

我有一个使用 spring-boot 1.4.0 和 JSF 2.2 (Mojarra 2.2.13) 构建的应用程序,在嵌入式 tomcat (8.5) 上运行。

当我本地运行应用程序时,它工作正常 - 无论我是使用 mvn spring-boot:run 还是 java 从 IDE 启动它-jar目标/myapp.jar

但是,当我在 Docker 容器内(使用 docker 1.12.1)启动应用程序时,一切都正常除了 JSF 页面。例如,像 /health 这样的 spring-boot-actuator 页面工作得很好,但是当尝试访问 /home.xhtml (一个 JSF 页面)时,我得到:

<小时 />

白标错误页面

此应用程序没有对 /error 的显式映射,因此您将其视为后备。

2016 年 10 月 12 日星期三 09:33:33 GMT 出现意外错误(类型=未找到,状态=404)。 /home.xhtml 在ExternalContext 中未作为资源找到

<小时 />

我使用 io.fabric8:docker-maven-plugin 构建 docker 镜像(基于带有 openjdk-8-jre 的 alpine),其中包括 /maven< 下的构建工件 位于 docker 容器内,并使用 java -jar/maven/${project.artifactId}-${project.version}.jar 来启动应用程序。

我使用端口 9000 而不是标准 tomcat 端口 (8080),这也是由 docker 镜像公开的。

我已经比较了本地 jar 和 docker 容器中包含的 jar,它们都有相同的内容。

如有任何帮助,我们将不胜感激。 提前致谢

请您参考如下方法:

XHTML 文件和其余 JSF 文件被放置在错误的目录中。

至少在使用 <packaging>jar</packaging> 时看来所有 JSF 内容都必须放在 src/main/resources/META-INF 下而不是src/main/webapp大多数 IDE 会自动将其放置在其中。

当 JSF 的东西在 src/main/webapp 时它没有被包含(或不在正确的位置)到 spring-boot-repackaged jar 文件中。

我的src/main/resources现在看起来像这样:

src 
└── main 
    └── resources 
        ├── application.yml 
        └── META-INF 
            ├── faces-config.xml 
            └── resources 
                ├── administration 
                │   └── userlist.xhtml 
                ├── css 
                │   └── default.css 
                ├── images 
                │   └── logo.png 
                └── home.xhtml