我遇到了一个错误,我可以使用GAE开发服务器成功渲染我网站上的所有页面,但是当我部署更新版本时,我会在每个页面上获得NPE。部署时我没有看到任何错误。没有任何JSP重新编译错误。
以下是一个示例异常:
Uncaught exception from servlet
java.lang.NullPointerException
at org.apache.jsp.WEB_002dINF.views.index_jsp._jspInit(index_jsp.java:25)
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:91)
...
我所做的更改主要是样式更改,有趣的是,如果我将index.jsp更新回原来的更改之前,我仍然会获得NPE。
我只是使用Sitemesh的标准JSTL。我已经禁用了sitemesh过滤器来规则,但仍然会收到错误。我还在使用1.6.3 SDK(因为maven-gae-plugin还没有更新)。
有没有办法查看GAE使用的已编译JSP?
答案 0 :(得分:0)
转到临时文件夹中的特定行号(25)。我不知道GAE中的临时文件夹位于何处。具体的行号可能是调用对象的方法,该方法为null或不初始化。这发生在jsp页面初始化期间,而不是在编译期间。
org.apache.jsp.WEB_002dINF.views.index_jsp._jspInit(index_jsp.java:25)
尝试清除临时工作文件夹,正如您所提到的,使用旧的jsp也会抛出错误。
我真的怀疑每个其他jsp页面都包含一些内联jsp页面,内联jsp也可能导致问题。
答案 1 :(得分:0)
java.lang.NullPointerException
at org.apache.jsp.WEB_002dINF.views.index_jsp._jspInit(index_jsp.java:25)
_jspInit()
方法不是您自己的JSP代码的一部分。它是JSP内部代码的一部分。您无法通过修复自己的JSP代码来修复它。
但是,当您在webapp的/WEB-INF/lib
文件夹中包含servletcontainer特定的JSP API JAR文件时,此异常是典型的,并且该JAR文件的不同 servletcontainer make / version比servletcontainer,你实际上将WAR部署到。
您绝对不应在/WEB-INF/lib
中包含servletcontainer特定库。全部删除它们。 servletcontainer是负责提供它们的人。 /WEB-INF/lib
应仅包含特定于webapp的库。另请参阅此答案,以解释为什么一些初学者在/WEB-INF/lib
中放弃servletcontainer特定库的最常见原因:How do I import the javax.servlet API in my Eclipse project?
答案 2 :(得分:0)
事实证明,切换到GAE 1.6.4 API解决了这个问题。我认为它可能是由上传1.6.3编译的JSP引起的。