HTTP状态500 - 处理JSP页面时发生异常

时间:2012-12-21 04:21:30

标签: javascript jsp nullpointerexception tomcat7

我的Tomcat7部署正在发生一些奇怪的事情。不管怎样,或者我太累了。这是瘦的...

我有一个非常简单的Tomcat7 webapp,我正在通过Eclipse(Juno)开发。我的一个JSP文件包含一个表单。提交表单时,servlet查询数据库并通过session.setAttribute将两个参数返回给同一个jsp。

一切正常,但如果我开始使用servlet,我会突然在JSP页面上遇到HTTP 500错误。我能够解决它的唯一方法是通过一个奇怪的仪式,从JSP中删除所有与Java相关的内容,然后慢慢添加并刷新。我不知道这是Tomcat问题,Servlet问题,Firefox问题,还是上述的一些组合。

为清楚起见,这里有一些代码片段:

Jsp代码:

<html>
  ...
  <body>
    <script type='text/javascript'>
      var searchResults = '<%= ((String[][])session.getAttribute("searchResults")).length %>';
      var additionalResults = '<%= session.getAttribute("additionalResults") %>';
      ...
    </script>
    ...
  </body>
</html>

Tomcat错误:

org.apache.jasper.JasperException: An exception occurred processing JSP page /test.jsp at line 32


30:   <body>
31:     <script type='text/javascript'>
32:         var searchResults = '<%= ((String[][])session.getAttribute("searchResults")).length %>';
33:         var additionalResults = '<%= session.getAttribute("additionalResults") %>';
34: 


Stacktrace:        
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.NullPointerException
org.apache.jsp.test_jsp._jspService(test_jsp.java:93)

我知道数据库正在返回正确的值,因此第32行不应该抛出异常或NullPointer。第93行简单地说:

<div id="wrapper"> 

当第32行被注释掉时,我甚至得到了Tomcat错误?!?!

为了尝试调试,我将脚本标记的内容简化为:

alert('<%= session.getAttribute("searchResults") %>');

编辑我的servlet阅读:

public class MyServlet extends HttpServlet {

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String redirectedPage = "/test.jsp";
    request.getSession().setAttribute("searchResults", "Bob");
    RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher(redirectedPage);
    reqDispatcher.forward(request,response);
  }
}

但结果弹出显示'null'。我也尝试过多次重启MySQL和Tomcat。

所以我完全不知道发生了什么。任何意见都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我忘了发布这个答案。事实证明我正在关闭JDBC连接,因此当它返回到jsp时,ResultSet对象无法访问。我已经更新了该代码,并将结果从ResultSet对象中移出,并转移到我通过HTTPRequest对象传回的参数中。

答案 1 :(得分:0)

将此用于您的jsp代码

    if('<%= session.getAttribute("searchResults") %>' !="null")
          {
           var str = '<%= (String)session.getAttribute("searchResults") %>' 
           searchResults = str.length;
           alert(searchResults)

          }