You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse中Maven+JSF项目整合Bootstrap WebJars遇RES_NOT_FOUND错误求助

解决JSF + Maven整合Bootstrap WebJars时的RES_NOT_FOUND错误

我来帮你排查这个困扰多日的问题,结合你提供的pom.xml和web.xml配置,我发现几个关键的调整点,应该能解决资源找不到的问题:

1. 配置WebJars资源的Servlet映射

JSF容器默认不会处理/webjars/*路径的请求,需要在web.xml中添加映射,让容器能正确解析这些资源请求。打开你的web.xml,添加以下配置:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/webjars/*</url-pattern>
</servlet-mapping>

这个配置会让容器的默认Servlet处理所有WebJars资源的请求,避免JSF拦截这些路径导致404。

2. 修复Maven资源复制配置

你的pom.xml里的maven-dependency-plugin只处理了swagger-ui的资源,完全没涉及Bootstrap、jQuery这些你需要的WebJars,导致这些资源根本没被复制到项目的输出目录中。

推荐替换成更通用的maven-resources-plugin,自动复制所有WebJars资源到正确的位置:

<build>
    <plugins>
        <!-- 保留你现有的maven-compiler-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <!-- 添加这个资源复制插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version>
            <executions>
                <execution>
                    <id>copy-webjars</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/resources/webjars</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${project.build.directory}/webjars</directory>
                                <includes>
                                    <include>**/*</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <finalName>EverGreen</finalName>
</build>

3. 移除冲突的依赖

你的pom.xml中同时引入了javax.servlet:servlet-api:2.5和javax:javaee-web-api:8.0,这两个依赖存在版本冲突(Java EE 8对应Servlet 4.0)。建议删除单独的servlet-api依赖,因为javaee-web-api已经包含了所有需要的Java EE组件API:

<!-- 删掉这个依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

4. 正确引用WebJars资源

在你的index.xhtml中,确保资源引用路径正确。可以用两种方式引用:

方式一:JSF标签引用(推荐)

<h:outputStylesheet library="webjars" name="bootstrap/3.2.0/css/bootstrap.min.css" />
<h:outputScript library="webjars" name="jquery/3.3.1/jquery.min.js" />
<h:outputScript library="webjars" name="bootstrap/3.2.0/js/bootstrap.min.js" />

方式二:普通HTML标签引用

<link rel="stylesheet" href="#{request.contextPath}/webjars/bootstrap/3.2.0/css/bootstrap.min.css" />
<script src="#{request.contextPath}/webjars/jquery/3.3.1/jquery.min.js"></script>
<script src="#{request.contextPath}/webjars/bootstrap/3.2.0/js/bootstrap.min.js"></script>

⚠️ 注意:路径中的版本号必须和pom.xml里对应依赖的版本完全一致,比如Bootstrap是3.2.0,jQuery是3.3.1,不要写错。

最后一步:清理重建项目

在Eclipse中执行以下操作:

  1. 右键项目 → Run As → Maven Clean
  2. 右键项目 → Run As → Maven Install
  3. 重新部署项目到服务器

完成后打开浏览器开发者工具(F12),查看网络请求标签,确认Bootstrap等资源的请求状态是否为200,而不是404。

内容的提问来源于stack exchange,提问作者Zubair CH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:44:40