解决 “The absolute uri: xxx cannot be resolved in either web.xml or the jar files“

本文介绍了解决在Eclipse中使用Tomcat部署Maven项目时遇到的500错误的方法,主要针对JSTL和Spring标签库无法解析的问题。提供了禁用Servemoduleswithoutpublishing模式及调整依赖配置两种解决方案。

背景(Background)

  • 使用Eclipse + Tomcat + Maven Project组合
  • 在Eclipse中启用了Serve modules without publishing模式来部署Maven Project到Tomcat
  • 在Eclipse中,Tomcat以调试模式运行

问题(Problem)

用浏览器访问Maven Project中一个页面(该页面用到jstl),服务器响应500错误,消息是:

The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application

用浏览器访问Maven Project中一个页面(该页面用到spring-tag),Tomcat响应500错误,消息是:

The absolute uri: http://www.springframework.org/tags/form cannot be resolved in either web.xml or the jar files deployed with this application

解决(Solution)

方法1

不要在Eclipse中启用Serve modules without publishing模式来部署项目到Tomcat。
如果喜欢折腾,可以尝试方法2

方法2

设Maven Project的pom.xml有

<!--jstl-->
<dependency>
	<groupId>org.apache.taglibs</groupId>
	<artifactId>taglibs-standard-spec</artifactId>
	<version>1.2.5</version>
</dependency>
<dependency>
	<groupId>org.apache.taglibs</groupId>
	<artifactId>taglibs-standard-impl</artifactId>
	<version>1.2.5</version>
</dependency>

<!--spring-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>4.3.6.RELEASE</version>
</dependency>
第1步:把内含相关tld的jar文件复制到META-INF/lib中

spring-webmvc-4.3.6.RELEASE.jartaglibs-standard-impl-1.2.5.jar这些jar文件中的META-INF目录包含报错uri对应tld文件,在当前用户目录中.m2\repository中搜索找到它们,并将其复制到项目src/main/webapp/WEB-INF/lib

第2步:在pom.xml中调整dependency

让相关的dependency使用WEB-INF/lib中的文件,指定scope为system并指定systemPath为WEB-INF/lib中相应jar文件的路径

<!--jstl-->

<dependency>
	<groupId>org.apache.taglibs</groupId>
	<artifactId>taglibs-standard-impl</artifactId>
	<version>1.2.5</version>
	<scope>system</scope>
	<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/taglibs-standard-impl-1.2.5.jar</systemPath>
</dependency>

<!--spring-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>4.3.6.RELEASE</version>
	<scope>system</scope>
	<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/spring-webmvc-4.3.6.RELEASE.jar</systemPath>
</dependency>

### JSP 文件运行时出现 HTTP 500 错误的原因及解决方法 在使用 IntelliJ IDEA 运行 JSP 文件时,如果遇到 **HTTP Status 500 – Internal Server Error**,可能涉及多个方面的问题。以下是常见的几种原因及其对应的解决方案: --- #### 1. **JSP 自定义标签导致的 500 报错** 当使用自定义标签(taglib)时,如果配置不当或路径错误,可能会导致 `file not found` 或 URI 无法解析等问题。例如: - **报错信息:** - `HTTP Status 500 – Internal Server Error file: xxx not found` - `The absolute uri: xxx cannot be resolved in either web.xml or the jar files deployed with this application` **解决方法:** - 确保自定义标签库的 TLD 文件正确配置,并放置在 `WEB-INF` 目录下。 - 检查 JSP 页面中引用的 taglib URI 是否与 TLD 文件中的 `<uri>` 标签匹配。 - 如果是通过 Maven 构建项目,确保依赖项已正确引入,并且构建后包含相关的 JAR 包 [^1]。 --- #### 2. **数据库连接问题导致的 500 错误** 在 Java Web 项目中,若 JSP 页面或 Servlet 需要访问数据库,而数据库连接失败,则可能导致服务器抛出异常并返回 500 错误。例如: - **报错信息:** - `javax.servlet.ServletException: java.sql.SQLException: The server time zone value ' й ׼ʱ ' is unrecognized...` **解决方法:** - 在 JDBC URL 中明确指定时区参数,例如: ```java jdbc:mysql://localhost:3306/your_database?serverTimezone=UTC ``` - 确保 MySQL 数据库服务正常运行,并且用户名、密码、数据库名等配置正确。 - 检查是否缺少必要的 JDBC 驱动包,如 `mysql-connector-java`,并将其添加到项目的依赖管理中 [^2]。 --- #### 3. **Tomcat 版本与 JDK 不兼容导致的编译错误** Maven 默认使用的 Tomcat 插件版本可能与当前项目所用的 JDK 版本不兼容,从而导致 JSP 编译失败,页面返回 500 错误。 - **报错信息:** - `Unable to compile class for JSP` **解决方法:** - 修改 `pom.xml` 文件,将默认的 Tomcat 插件版本升级为兼容 JDK 1.8 的版本(如 Tomcat 7 或 Tomcat 9),示例代码如下: ```xml <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>8080</port> <path>/</path> <uriEncoding>UTF-8</uriEncoding> <server>tomcat7</server> </configuration> </plugin> ``` - 确保 Tomcat 的 `web.xml` 文件配置符合当前 Servlet 规范(如 3.1 或更高) [^3]。 --- #### 4. **JSP 页面语法或逻辑错误** 如果 JSP 页面中存在语法错误或未处理的异常,也可能导致服务器内部错误。 **解决方法:** - 查看控制台输出或日志文件(如 `catalina.out` 或 `localhost.log`),找到具体的错误堆栈信息。 - 使用 `<%@ page isErrorPage="true" %>` 声明错误页面,并通过 `exception` 对象输出异常信息进行调试。 - 确保所有 Java 代码片段(如 `<% ... %>`)没有语法错误,并且变量作用域合理。 --- #### 5. **部署路径或资源路径配置错误** 有时由于部署路径配置不正确,或者静态资源(如 CSS、JS、图片)路径错误,也可能引发 500 错误。 **解决方法:** - 检查项目的 `web.xml` 和 `pom.xml` 中的上下文路径(context path)是否一致。 - 使用相对路径或通过 EL 表达式 `${pageContext.request.contextPath}` 动态获取项目根路径,避免硬编码路径。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值