严重: Servlet.service() for servlet [jsp] threw exception
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.ConditionalTagSupport
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
.
.
.
at java.lang.Thread.run(Thread.java:745)
五月 01, 2020 11:38:33 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [DispatcherServlet] in context with path [/Web-Chat] threw exception [java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport] with root cause
java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.ConditionalTagSupport
该异常出现原因是在tomcat服务器中缺少 jstl 相关地 jar 包
java.lang.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
.
.
.
at java.lang.Thread.run(Thread.java:745)
五月 01, 2020 11:43:36 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [DispatcherServlet] in context with path [/Web-Chat] threw exception [org.apache.jasper.JasperException: Failed to load or instantiate TagLibraryValidator class: [org.apache.taglibs.standard.tlv.JstlCoreTLV]] with root cause
java.lang.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
该异常同上
解决方法:在maven项目中添加依赖,一下三种方式均可解决,由于版本的不同,需要的依赖也不尽相同。
1、2006
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2、2011
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
3、2015
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
注意:dependency 标签下有一个 scope 属性,默认值为 compile
scope 标签的主要作用有两个
1、确定导入的jar包的有效区域(主程序区,测试区)
2、是否参与maven项目的打包
项目要部署到服务器上,是需要先将项目打包的。然而,并不是你导入项目的所有 jar 包都需要一同被打包,比如 junit 这个专门用来编写测试的包及其依赖,就没有必要一起打包进项目中。使用 scope 的不同取值就能告诉 maven 哪些jar包需要被一同打包,哪些不用。
scope标签的主要取值:
compile:对主程序和测试程序均有效,参与打包。
test: 只对测试程序有效,参与打包。
provided:对主程序和测试程序均有效,不参与打包。
//在web项目远程部署时,可能会遇到在本地测试好的项目在远程服务器上运行时找不到某个jar,可能的原因就是没有将该依赖参与打包。