java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext
相信各位很多用Tomcat在发布java web应用时,如果用到JSTL标签,并用到<c:forEach>的可能都碰到我这个问题,于是我在网上搜各位大虾们的解决之道,最多给的办法就是这一段:
经过tomcat版本变化后,又报出了此异常
java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
这是jstl引起的问题。
tomcat 6 实现了 servlet 2.5 和JSP2.1的规范相应的 tomcat 5 实现的是 2.4和2.0,想到tomcat5不支持JSTL1.2,于是替换JSTL1.1的包试试看后,问题解决。
解决方法 :移出工程lib目录中的 JSTL1.2.jar,添加standard-1.1.jar和JSTL1.1.jar
总结 :
jstl1.1版本由2个必要包构成:standard-1.1.jar和 JSTL1.1.jar;而jstl1.2版本只有一个必要包JSTL1.2.jar。(一开始在替换的过程中想当然的用JSTL1.1.jar换 JSTL1.2.jar,然后遗漏了standard-1.1.jar,耽搁了不少时间。)
经测试,tomcat6.0支持JSTL1.2版本,也支持JSTL1.1版 本;tomcat5.5只支持JSTL1.1(JSTL1.1一下版本未测试)
不建议将2个版本的3个包同时放在工程中,可能会发生版本冲突。(另外,实际 操作的时候发现JSTL1.2.jar和JSTL1.1.jar这2个包放一起可以在tomcat5.5和tomcat6.0上跑,鉴于 JSTL1.1.jar里面没有c.tld等文件,猜测JSTL1.1.jar里面只是放置了1.1的专用的类和信息)
但是我仔细检查了我的Tomcat版本,我的是Tomcat6.0.29,按理,我照大虾们给的办法就是在我的web应用的WEB-INF/lib/jstl-1.2.jar加上这个包就可以了,但事与愿违,不管我是加在我的web应用下,还是加在Tomcat/lib下,都还是报上面的错,我突然就想到看Tomcat的例子了,就D:\apache-tomcat-6.0.29\webapps\examples这个包下我找的例子,看到有关ForEach的例子了,我点了运行后,迭代成功了,我就纳闷了,看来与tomcat/lib 下面的包是没有关系的,然后我就找到这个例子对应的D:\apache-tomcat-6.0.29\webapps\examples\WEB-INF\lib包下,看有两包,standard.jar,jstl.jar,于是我把这两包导到我自己的web应用的lib的目录下,再测试,耶,就成功了。。。。。我那个高兴之后的失落突然就出来了。
这是为什么喃?
我把这两个standard.jar,jstl.jar包的内容,和jstl-1.2.jar的内容作了对比,实在找不到问题,今天太晚了。明天再研究一下原因。希望我的这个解决问题,对广大朋友有所帮助啊。