1

我的 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。

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

4

2 回答 2

1

我忘了张贴这个答案。原来我正在关闭 JDBC 连接,所以 ResultSet 对象在它返回到 jsp 时无法访问。此后,我更新了该代码并将结果移出 ResultSet 对象并移入通过 HTTPRequest 对象传回的参数中。

于 2013-01-08T17:24:27.887 回答
0

将此用于您的 jsp 代码

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

          }   
于 2012-12-21T05:04:23.900 回答