javaweb中jstl无法解析的错误解决方法
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jstl/core]
一.问题的产生
在javaweb项目中引入了,jstl 的c 标签,一运行发现在Tomcat log 中报错无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jstl/core]
,
在浏览器中报错 : "Type 异常报告
消息 org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
描述 服务器遇到一个意外的情况,阻止它完成请求。"
二.我的开发环境
jdk 1.8
maven 3.8.1
已经导入所需的依赖
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
三.解决办法
将jstl1.2或standard-1.1.2的c-1_0-rt.tld文件复制到WEB-INF目录下,重新发布项目,运行正常。
四.验证过程如下(高手请绕行)
1.新建一个空maven项目,命名为test-jstl
2.将新建的test-jstl项目作为父项目,然后新建父项目的子模块
3.添加所需依赖(我的maven使用的是阿里的源)
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
4.添加web支持
5.将jstl或者standard META-INF目录下的 c-1_0-rt.tld复制到项目WEB-INF目录下,注意要放在WEB-INF的根目录下,不要放在二级目录下
6.编写验证测试页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html>
<head>
<title>测试jstl标签应用</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
<p>我的工资为: <c:out value="${salary}"/><p>
</c:if>
</body>
7.配置tomcat
8.添加Atifacts
9.运行tomcat查看结果页面
注意点
1.c-1_0-rt.tld一定要放在WEB-INF的根目录下
2.jsp页面将<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
改为<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>