在使用JSTL标签时发生了如下异常:当修改了某个jsp页面时,刷新浏览器时会报如下错误,导致项目异常。错误现场如下:
-----------------------------------------------------------------------------------------------------------------------------------------------------------
异常: java.lang.NoSuchFieldError: deferredExpression
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: java.lang.NoSuchFieldError: deferredExpression
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:274)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
oilsb.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:20)
root cause
java.lang.NoSuchFieldError: deferredExpression
org.apache.taglibs.standard.tag.common.core.ForEachSupport.release(ForEachSupport.java:178)
org.apache.jasper.runtime.TagHandlerPool.release(TagHandlerPool.java:166)
org.apache.jsp.sitetotal_005fdisplay_jsp._jspDestroy(sitetotal_005fdisplay_jsp.java:44)
org.apache.jasper.runtime.HttpJspBase.destroy(HttpJspBase.java:61)
org.apache.jasper.servlet.JspServletWrapper.destroy(JspServletWrapper.java:425)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:139)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
oilsb.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:20)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
错误原因:
jstl版本冲突,也就是说项目中引入了两种版本的jstl库文件。遇到这个异常的时候是用jstl标签,是版本问题,由于MyEclipse添加Java EE5,其中自动包括了jstl1.2的版本,lib中又存在一个jstl1.1.2的jar包,把旧版本的删掉就可以了--注意同时删除掉tomcat项目里面的旧版本
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
解决方案:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>使用的是jstl.jar
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>使用的是jstl-1.1.2.jar或jstl-1.2.jar
工程中使用的标签必须统一,只用一个jar包。发布后检查Tomcat中jar包是否只有一个。