HTTP-статус 500 — при обработке JSP-страницы произошло исключение

Что-то действительно странное происходит с моим развертыванием Tomcat7. Либо так, либо я слишком устал. Вот худенькая...

У меня есть очень простое веб-приложение Tomcat7, которое я разрабатываю через Eclipse (Juno). Один из моих файлов JSP включает форму. Когда форма отправлена, сервлет запрашивает базу данных и возвращает два параметра обратно в тот же jsp через session.setAttribute.

Все работает нормально, но если я начну возиться с сервлетом, я внезапно получу ошибку HTTP 500 на странице JSP. Единственный способ, которым я смог решить эту проблему, - это пройти странный ритуал удаления всего контента, связанного с Java, из JSP, а затем медленно добавить его и обновить. Я не могу сказать, является ли это проблемой Tomcat, проблемой сервлета, проблемой Firefox или какой-то комбинацией вышеперечисленного.

Для ясности приведу несколько фрагментов кода:

JSP-код:

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

Ошибка Томката:

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"> 

Я даже получаю ошибку Tomcat, когда строка 32 закомментирована?!?!

Чтобы попытаться выполнить отладку, я упростил содержимое тега сценария следующим образом:

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

И отредактировал мой сервлет, чтобы он читал:

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);
  }
}

Но результирующее всплывающее окно показывает «ноль». Я также много раз пытался перезапустить MySQL и Tomcat в разном порядке.

Так что я в полной растерянности относительно того, что происходит. Мы будем очень признательны за любой вклад.


person Bob .    schedule 21.12.2012    source источник
comment
Вы пробовали '‹%= ((String)session.getAttribute(searchResults)).length %›'   -  person Satya    schedule 21.12.2012
comment
Вы уверены, что session.getAttribute("additionalResults") не равно null? Кроме того, ссылка на строку 93 относится к сгенерированному классу .java, а не к вашему файлу .jsp.   -  person quietmint    schedule 21.12.2012
comment
alert('‹%= session.getAttribute(searchResults)%›'); печатает 'null', но этого не должно быть.   -  person Bob .    schedule 21.12.2012


Ответы (2)


Я забыл опубликовать ответ на это. Оказалось, что я закрывал соединение JDBC, поэтому объект ResultSet был недоступен к тому времени, когда он вернулся в jsp. С тех пор я обновил этот код и переместил результаты из объекта ResultSet в параметры, которые я передаю обратно через объект HTTPRequest.

person Bob .    schedule 08.01.2013

используйте это для своего кода jsp

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

          }   
person Manish Nagar    schedule 21.12.2012
comment
Нет, это не сработает. session.getAttribute(searchResults) возвращает значение null, поэтому любые дополнительные вызовы просто вызывают исключение NullPointerException. Мне нужно понять, почему возвращается ноль, если я не изменяю код сервлета... - person Bob .; 21.12.2012
comment
сначала запустите свой сервлет, он перенаправит вас на вашу страницу jsp. - person Manish Nagar; 21.12.2012