JSP-匯入taglib 出現classNotFound異常:java.lang.ClassNotFoundException: org.apache.taglibs.standard.tlv.Jst
阿新 • • 發佈:2018-11-02
案例
前端登入跳轉到指定jsp,報classNoFoundException,原因是頁面匯入 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 導致的
Caused by: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.jsp.common.index_005fmenu_jsp at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:132) at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:121) at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172) ... 52 more
在pom.xml新增如下配置發現也沒效果
<dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency>
解決方案
經網上搜索,是缺少jstl相關包的問題,剛才我們只是匯入了jstl-api,而沒有匯入jstl的實現,所以再匯入jstl 的實現。去mvnrepository上找jstl 的實現,基本上有兩個版本,一個是glassfish 的jstl-impl, 另一個是apache的taglibs-standard-impl,一直猶豫不決該用誰,最後在stackoverflow.com/a/25374024/1443527上發現網友分享了他實現的經驗,他用的是glassfish版本,所以我們也引人這個。由於tomcat7是相容j2ee 3.0規範的,所以我們將jstl 依賴的東西給去除掉,防止和tomcat自身的servlet jar包衝突,改正後的依賴為
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
</exclusion>
</exclusions>
</dependency>
順便說一下jstl-impl-1.2.jar 和taglibs-standard-impl-1.2.1.jar 的區別,這兩個包的內容很相似,後者應該是前者的一個再打包,因為Apache的taglibs工程從2009年以後一直處於停止狀態。
如果你要引人後者,那麼依賴應該為:
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.1</version>
</dependency>
參考文章:http://www.javacoder.cn/?p=195
---------------------
作者:Evan_Leung
來源:CSDN
原文:https://blog.csdn.net/evan_leung/article/details/51813842