Eclipse中Maven+JSF项目整合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中执行以下操作:
- 右键项目 → Run As → Maven Clean
- 右键项目 → Run As → Maven Install
- 重新部署项目到服务器
完成后打开浏览器开发者工具(F12),查看网络请求标签,确认Bootstrap等资源的请求状态是否为200,而不是404。
内容的提问来源于stack exchange,提问作者Zubair CH

