java.lang.ClassNotFoundException: javax.servlet.../Failed to load or instantiate TagLibraryValidator

严重: 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,可能的原因就是没有将该依赖参与打包。

猜你喜欢

转载自blog.csdn.net/weixin_40307206/article/details/105884720