JSTL依赖问题org.apache.jasper.JasperException:uri: http://java.sun.com/jsp/jstl/core cannot be resolved [转]
这个问题其实挺简单的,但是有很多细节值得我们要注意。下面我分享一下自己解决此bug的过程,若你需要尽快解决这个bug的话可以不看我唠叨,解决办法在文末标红字体处。
- 首先是想按照慕课教程敲一下jstl的测试jsp的,结果发现出现错误org.apache.jasper.JasperException:The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application,很明显它在提示我jstl没有被找到,就是说我没有装好咯,但是我确实已经把jstl.jar以及standard.jar都导进去了啊,在eclipse的preferences里面也是放进了Java的BuildPath的,项目中的BuildPath也是有导进去了;
- 我想难道是包的问题,不对,我在官网下的包;
- 课程中老师也说了jstl和Servlet以及jsp版本对应挺敏感的,所以我感觉是版本对应出了问题;
- 上网查一下jstl1.1.2(老师给的版本就是1.1.2,为了不出其他差错就先用着1.1.2)对应哪一个版本,然后发现干货(在Tomcat Apache官网上找对应版本的文档说明,哈哈哈怪自己孤陋顾问,看到这个就以为是干活,还开心了一会儿),https://blog.csdn.net/shuaixianbohou/article/details/17081275这位大佬说他在tomcat的官网和百度百科找到的资料如下 tomcat官网上(更新至20181123_当然我是把最新的写在这了)
http://tomcat.apache.org/whichversion.html JSTL与Servlet,JSP要求的版本对应(来自JSTL的百度百科) - 好了知道哪个版本对应哪个版本了,那怎么知道自己是哪个版本的呢,无意中我找到了又一位大佬的博客:http://vvssonline.iteye.com/blog/1462817他说了如何使用jsp文件查询Server、Servlet、JSP和jdk版本的方法:
-
Server info: <%= application.getServerInfo() %><br>
-
Servlet version: <%= application.getMajorVersion() %>.<%= application.getMinorVersion() %><br>
-
JSP version: <%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %><br>
-
Java version: <%= System.getProperty("java.version") %><br>
-
- 按照方法查到了我的Servlet和JSP的,发现跟jstl1.1.2的版本是可以对应的上的鸭,那我就懵逼了,打击对菜鸟来说有点痛苦了啊,这是个蛇皮问题?
- 想了挺久的但是没想到,然后继续百度继续找,发现很多博客的各位大佬都有遇到过类似的问题,但是跟我的问题有点小区别,我死马当活马医的试了还是不行。我曾以为是jdk或者tomcat的问题,结果捣鼓了一下午发现了坑太多,跟着线索搞到最后提示要我换个eclipse,打扰了,我还是线下找大佬吧。
在这捣鼓的过程中我也学到了一些其他的东西,最主要的是对Eclipse的操作熟悉了许多,什么英文对应什么常用的功能基本上都心里有数(我英语不是很好,以前配置eclipse项目的时候几乎是看见一个不会的英文单词就去查有道,这样子也能搞但是效率低,经过这次bug的修补我感觉自己跟Eclipse亲切了许多);
其次的收获是去Oracle官网找jdk的时候发现一些旧版本的jdk下载有个烦人的bug,老是在下载到最后差不多就要完成的时候就卡死了(有一个是下载任务卡死了,但是文件能打开,可是这个文件却删除不了),最后是从博客的大佬们提供的百度云上面下载的;
最后一个小收获(其实解决了是自己的一个记忆的bug,之前总是弄错却又不知道是怎么弄好的)是在 项目 --> 右键 --> Build Path --> Configuration Build Path --> Java Build Path --> Libraries --> Add Library… --> Server Runtime中为项目导入Apache Tomcat的服务 - 在找线下大佬之前我想着好像有那么一点头绪,于是我跟着感觉我跟自己说试最后一遍吧(说起来有点悬乎,可就是有些时候有点灵光一闪什么的就有感觉了,感觉自己还是挺幸运的哈哈),于是我找啊找终于找到了又又一位大佬的博客:https://blog.csdn.net/qq_30967869/article/details/79026562,他简直是我的救星啊。解决方法1:将jstl的两个依赖的jar包(可以在Maven本地仓库中找到),然后放到tomcat的lib目录下。OK解决了,舒爽的。真的很感谢各位大佬,谢谢你们!
- 后来我顿时觉悟,天呐,慕课老师JessicaJiang就在课程上讲过,解决方法2:要把依赖的jar包放到项目的WEB-INF下的lib里,因为她说放build path的话跟项目联系强度低,不是很安全(其实在第五步的时候看到的那位大佬的博客里面是有写到这种方法的,我当时却是没有注意到),我试了试,发现这也是可以的。这个修bug的过程给我最大的收获就是认识到认真和细心是很重要的,这是作为一个优秀程序员的基本。
- 到了最后一步我想了想,为什么导入Maven本地仓库的jstl.jar和standard.jar没起作用呢,非得要将他们放到%CATALINA_HOME(tomcat根目录)%/lib或者%project%(项目根目录)/WebContent或者WebRoot/WEB-INF/lib呢?期待能有大佬为小子解惑,感激不尽!
此文中个人见解居多,仅供参考,其中不乏错误之处,还请各位发现错误能评论指错,感激不尽!
转自:https://blog.csdn.net/hungry_fish/article/details/84403605