日常运行异常jasper.JasperExceptior异常

本文介绍了解决在页面跳转过程中遇到的JSTL条件判断异常问题,通过调整<c:if>标签的使用方式,成功避免了异常的发生,并确保了不同状态能够正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在练习页面跳转时出现jasperException异常,
在报错的位置是<td>标签和jstl中c:if的使用出错了
在这里插入图片描述
修改之前的代码

<td>
	<c:if test="${list.orderStatus==1?"预定":"闲置"}">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</c:if>				
</td>

修改后的代码

<td>
	<c:if test="${list.orderStatus==1}">预定&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</c:if>
	<c:if test="${list.orderStatus==0}">闲置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</c:if>				
</td>

异常报告 消息 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core] 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 org.apache.jasper.JasperException: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core] org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:37) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:270) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:77) org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:248) org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:122) org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:408) org.apache.jasper.compiler.Parser.parseDirective(Parser.java:461) org.apache.jasper.compiler.Parser.parseElements(Parser.java:1289) org.apache.jasper.compiler.Parser.parse(Parser.java:130) org.apache.jasper.compiler.ParserController.doParse(ParserController.java:243) org.apache.jasper.compiler.ParserController.parse(ParserController.java:106) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:195) org.apache.jasper.compiler.Compiler.compile(Compiler.java:368) org.apache.jasper.compiler.Compiler.compile(Compiler.java:346) org.apache.jasper.compiler.Compiler.compile(Compiler.java:332) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:591) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:376) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:288) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ):注意 主要问题的全部 stack 信息可以在 server logs 里查看 Apache Tomcat/11.0.8
最新发布
06-23
<think>我们正在解决JSP中出现的`org.apache.jasper.JasperException:Theabsoluteuri:http://java.sun.com/jsp/jstl/corecannotberesolved`错误。这个错误通常发生在Tomcat服务器无法解析JSTL标签库的URI时。根据引用内容,我们可以总结出以下原因和解决方案:原因分析:1.**缺少JSTL库**:项目中没有包含JSTL的jar文件。2.**web.xml配置问题**:在`web.xml`中配置了标签库,但配置不正确或位置不当。3.**Tomcat版本兼容性**:不同版本的Tomcat可能需要不同版本的JSTL,或者Tomcat本身配置有问题。解决方案:1.**添加JSTL库**:将JSTL的jar文件放入项目的`WEB-INF/lib`目录下。对于Tomcat11,可以使用JSTL1.2版本。可以从Maven仓库下载:-`jakarta.servlet.jsp.jstl-api-1.2.7.jar`(API)-`jakarta.servlet.jsp.jstl-1.2.7.jar`(实现)2.**检查web.xml配置**(如果使用):在`web.xml`中添加标签库声明,但注意位置(必须放在`<jsp-config>`标签内,并且放在其他配置之前)。但根据引用[4]和[5],配置如下:```xml<jsp-config><taglib><taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri><taglib-location>/WEB-INF/c.tld</taglib-location></taglib><!--如果需要fmt标签库,可以添加--><taglib><taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri><taglib-location>/WEB-INF/fmt.tld</taglib-location></taglib></jsp-config>```但是,请注意,现代JSTL版本通常不需要在`web.xml`中配置,因为jar包中的`META-INF`目录下的`.tld`文件会被自动发现。因此,优先尝试添加jar包而不配置`web.xml`。3.**检查依赖冲突**:确保没有多个版本的JSTL库。4.**Tomcat配置**:如果问题仍然存在,可以尝试清理Tomcat工作目录(`work`目录)并重启Tomcat。步骤总结:1.下载正确的JSTLjar包(适用于JakartaEE9+,因为Tomcat11支持Servlet5.0,对应JakartaEE9)。2.将jar包放入`WEB-INF/lib`。3.如果项目中有`web.xml`且包含`<jsp-config>`,请检查配置是否正确,或者暂时删除该配置以测试自动发现是否生效。4.清理Tomcat的work目录并重启。补充说明:Tomcat10及以上版本使用JakartaEE,因此需要Jakarta版本的JSTL(即包名以`jakarta`开头)。如果使用旧的`javax.servlet`版本的JSTL(如JSTL1.1或更早),则会出现兼容性问题。因此,推荐使用以下依赖(Maven):```xml<dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId><version>1.2.7</version></dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>jakarta.servlet.jsp.jstl</artifactId><version>1.2.7</version></dependency>```或者手动下载这两个jar文件。§§相关问题§§1.如何为Tomcat11下载正确的JSTL版本?2.JSTL标签库在web.xml中配置的作用是什么?3.清理Tomcat工作目录的步骤是什么?</think>### 解决JSTL核心标签库解析失败问题 当在Tomcat 11中出现`org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved`错误时,通常由以下原因导致: #### 主要原因分析 1. **JSTL库缺失**(最常见) - 项目未包含JSTL实现库(如`jakarta.servlet.jsp.jstl-api`和`jakarta.servlet.jsp.jstl`) - 引用[1][^1]和引用[2][^2]均指出该问题 2. **web.xml配置错误** - 缺少或错误的`<taglib>`声明(如引用[4][^4]和引用[5][^5]所示) - 配置位置不当(需放在`<jsp-config>`最前面) 3. **Tomcat版本兼容性问题** - Tomcat 10+需使用Jakarta EE命名空间(非Java EE) - 旧版JSTL库不兼容(引用[3][^3]提到Tomcat配置问题) --- #### 解决方案(Tomcat 11) ##### ✅ 方法1:添加正确JSTL依赖(推荐) 1. **Maven项目**:在`pom.xml`添加: ```xml <!-- Jakarta EE 9+ 版本 --> <dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency> ``` 2. **手动添加JAR**: - 下载最新JSTL实现: - [jakarta.servlet.jsp.jstl-api-2.0.0.jar](https://repo1.maven.org/maven2/jakarta/servlet/jsp/jstl/jakarta.servlet.jsp.jstl-api/2.0.0/) - [jakarta.servlet.jsp.jstl-2.0.0.jar](https://repo1.maven.org/maven2/org/glassfish/web/jakarta.servlet.jsp.jstl/2.0.0/) - 放入项目`WEB-INF/lib`目录 ##### ✅ 方法2:配置web.xml(备用) ```xml <jsp-config> <taglib> <!-- 核心标签库 --> <taglib-uri>https://jakarta.ee/xml/ns/jakartaee/jstl/core</taglib-uri> <taglib-location>/WEB-INF/tld/c.tld</taglib-location> </taglib> <!-- 格式化标签库 --> <taglib> <taglib-uri>https://jakarta.ee/xml/ns/jakartaee/jstl/fmt</taglib-uri> <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location> </taglib> </jsp-config> ``` > ⚠️ 注意:需确保TLD文件存在于指定路径(从JSTL jar中提取) --- #### 验证步骤 1. **JSP页面声明**: ```jsp <%@ taglib prefix="c" uri="https://jakarta.ee/xml/ns/jakartaee/jstl/core" %> ``` 2. **测试代码**: ```jsp <c:set var="test" value="JSTL Works!"/> <c:out value="${test}"/> ``` 3. **清理Tomcat缓存**: ```bash rm -rf $CATALINA_HOME/work/Catalina/localhost/your_app/ ``` --- #### 版本兼容说明 | Tomcat版本 | 所需JSTL命名空间 | 实现库 | |------------|------------------------|----------------------------| | Tomcat 10+ | `jakarta.ee` 前缀 | `jakarta.servlet.jsp.jstl` | | Tomcat 9- | `java.sun.com` 前缀 | `javax.servlet.jsp.jstl` | > 引用[3][^3]确认Tomcat配置会影响URI解析,升级后必须使用Jakarta EE命名空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值