使用JSTL访问从Spring Controller到JSP的映射时出错
我有一个弹簧控制器,我在其中返回一个名为“model”的Map;模型包含一些值,但重要的还包含一个ArrayList
。现在我将这个Map返回给我的JSP,而在我的JSP中使用JSTL来获取ArrayList
它会抛出错误。使用JSTL访问从Spring Controller到JSP的映射时出错
<c:forEach items="${model.result}" var="data" varStatus="status"> <!-- result is my ArrayList -->
<c:out value="${data.url}" /> <!-- here url is data inside my result arraylist -->
</c:forEach>
产生的错误是:
root cause
java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587)
at javax.servlet.jsp.jstl.core.LoopTagSupport.doFinally(LoopTagSupport.java:323)
at jsp_servlet._jsp.__searchsuccess._jsp__tag3(__searchsuccess.java:294)
at jsp_servlet._jsp.__searchsuccess._jspService(__searchsuccess.java:137)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
它的工作原理Tomcat服务器上的罚款,但是当我Weblogic上部署它(9.2)服务器它给人的错误。我的类路径条目:
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-fileupload-1.1.1.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-io-1.2.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/hibernate-validator-4.0.2.GA.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/log4j-1.2.14.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/slf4j-api-1.5.6.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/slf4j-log4j12-1.5.6.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-asm-3.0.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-beans-3.0.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-context-3.0.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-core-3.0.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-expression-3.0.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-web-3.0.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/spring-webmvc-3.0.3.RELEASE.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/validation-api-1.0.0.GA.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/log4j-1.2.9.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/servlet-2.3.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre6">
<attributes>
<attribute name="owner.project.facets" value="jst.java"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/jstl-1.2.jar"/>
<classpathentry kind="output" path="WebContent/WEB-INF/classes"/>
更新:我已删除了JSTL-1.2.jar现在我得到一个编译错误:
searchsuccess.jsp:1:5: No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during pa
rsing of the .tld file.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
^----^
searchsuccess.jsp:1:5: No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during pa
rsing of the .tld file.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
^----^
at weblogic.servlet.jsp.JavelinxJSPStub.compilePage(JavelinxJSPStub.java:298)
at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:200)
at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:164)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:235)
at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:394)
按堆栈跟踪,
java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587)
JSTL <c:forEach>
标签期待的方法PageContext#getELContext()
。这个方法在JSP 2.1中引入。因此,此异常表明您正在使用JSTL 1.2,而您的容器不支持JSP 2.1,或者您已将运行时类路径与不支持JSP 2.1的容器的servlet容器特定的JSP库混杂在一起。运行时类路径包括webapp的/WEB-INF/lib
文件夹和Java的JRE/lib
和JRE/lib/ext
文件夹。
你应该从未放servletcontainer在这些文件夹中的特定库,如jsp-api.jar
,servlet-api.jar
,el-api.jar
,j2ee.jar
,javaee.jar
,etc..etc ..这些文件,你通常在servletcontainer本身的/lib
文件夹中看到。例如。 Tomcat/lib
。它使你的webapp不可移植到目标servlet容器。您正在运行此Web应用程序的目标servletcontainer有这些库已经。如果你这样做是为了克服JSP/Servlet包的编译错误,那么你应该以不同的方式解决它。另请参见How do I import the javax.servlet API in my Eclipse project?
更新:根据您的更新,你使用的Weblogic 9.2这是一个Servlet 2.4/JSP 2.0容器。它根本不支持JSP 2.1/JSTL 1.2。您需要删除JSTL 1.2库。如果我没有弄错,Weblogic已经提供了JSTL 1.1。否则,您需要自己将其包含在类路径(/WEB-INF/lib
文件夹)中。您可以在our JSTL wiki page中找到JSTL 1.1下载链接。
java.lang。NoSuchMethodError:javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext; at javax.servlet.jsp.jstl.core.LoopTagSupport.unExposeVariables(LoopTagSupport.java:587) at javax.servlet.jsp.jstl.core.LoopTagSupport.doFinally(LoopTagSupport.java:323) at jsp_servlet._jsp。 __searchsuccess._jsp__tag3(__ searchsuccess.java:294) at jsp_servlet._jsp .__ searchsuccess._jspService(__ searchsuccess.java:137) at weblogic.servlet.jsp.JspBase.service(JspBase.java:34) – GOK
hey man its gud one你把它放在....请看看我编辑过的帖子..希望你清楚,并得到图片;; – GOK
删除'jstl-1.2.jar'。 Weblogic已经与JSTL 1.1一起提供。 Weblogic 9.2仅支持Servlet 2.4/JSP 2.0。 JSTL 1.2需要Servlet 2.5/JSP 2.1。因此这个例外。 – BalusC
你的webapp中是否有el-api.jar?
请看下面的帖子:
http://www.coderanch.com/t/526731/JSP/java/java-lang-NoSuchMethodError-javax-servlet
-Kaj :)
单独存在'el-api.jar'不能导致这种特殊的异常。更甚者,'el-api.jar'在JSP 2.1之前并不存在。在JSP 2.0中,它是作为'jsp-api.jar'的一部分发布的(至少在Tomcat中)。 EL根据JSP 2.1从JSP中提取。查看http://*.com/questions/4812755/difference-between-jsp-el-jsf-el-and-unified-el/4812883#4812883了解EL历史。 – BalusC
另外,我看到的地方....不使用JSP-api.jar文件,但它不是的情况下我,因为我没有任何jsp-api.jar在我的web应用程序..:P – GOK