我的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。
所以我完全不知道发生了什么。任何意见都将不胜感激。
答案 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)
}