Обработка исключений / ошибок сервлетов JSP

1

Я пытаюсь обработать исключение, используя конфигурацию ошибок JSP. Однако это терпит неудачу. Пожалуйста, укажите, где я делаю неправильно. Это не приложение для реального времени, я пробовал сценарий.

Начальная страница jsp:

Page1.jsp

<body>
    <form action="process.do" method="post">
        <input type="Submit" />
    </form>
</body>

web.xml

<servlet>
    <servlet-name>servlet1</servlet-name>
    <servlet-class>com.examples.example.Servlet1</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>servlet1</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<error-page>
    <exception-type>javax.servlet.ServletException</exception-type>
    <location>/errorpage.jsp</location>
</error-page>
<error-page>
    <exception-type>java.sql.SQLException</exception-type>
    <location>/errorpage.jsp</location>
</error-page>
<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/errorpage.jsp</location>
</error-page>

Servlet1.java

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String s = null;
            if (s.equals("")) {

            }
        } catch (Exception ex) {
            throw new ServletException("my custom exception message");
        }
    }

errorpage.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isErrorPage='true'%>
<html>
<head>
<title>Error Page</title>
</head>
<body>
    <%
        out.print("Error Message : ");
        out.print(exception.getMessage());
    %>
</body>
</html>

Вопрос. Я ожидаю, что эта страница ошибки будет отображаться. Но вместо этого я получаю ошибку HTTP 500, и это то, что я вижу в консольных журналах:

SEVERE: Servlet.service() for servlet [servlet1] in context with path [/simpleServlet] threw exception [my custom exception message] with root cause
javax.servlet.ServletException: my custom exception message
    at com.examples.example.Servlet1.doPost(Servlet1.java:48)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
Теги:
jsp
servlets

1 ответ

2
Лучший ответ

Это то, что я нашел в одном из комментариев по ссылке в блогах ниже

Существует серьезная проблема с использованием "errorpage" "isErrorpage" и объявления страницы ошибки в файле web.xml, она не отображается должным образом в Internet Explorer, по крайней мере, версии 6 и 7, вместо этого она показывает собственную страницу ошибок IE на стр. 404 и внутренняя ошибка сервера 500. Лучший подход - использовать обработку исключений Spring и определять представление ошибки по умолчанию для обработчика Spring Exception. таким образом, вы получите согласованное поведение по всему браузеру, потому что страница с ошибкой не будет рассматриваться как страница с ошибкой, а будет рассматриваться как другая страница jsp. Я потратил много времени, чтобы выяснить эту ошибку с IE6, вы можете сэкономить драгоценные время. Также существует другая теория, согласно которой IE и хром будут отображать собственную страницу ошибок, если размер страницы ошибки будет меньше 512 байт. Я тестировал это, но в моем случае, даже если размер был больше 512 байтов, он все еще показывал "Внутренняя ошибка сервера-500". Единственным решением, которое работало, было использование Spring Exception handling

Подробнее: http://javarevisited.blogspot.com/2012/01/error-page-in-java-web-application.html#ixzz2xZ35ziPQ

  • 0
    Спасибо. Я пытался открыть из Chrome и Firefox, и он работает, как ожидалось. Раньше я бегал с IE9. Удивление !! Я принимаю ответ, когда вы обратились к актуальной проблеме. Хотелось бы узнать, как это может зависеть от браузера!
  • 1
    @prash Это связано с: stackoverflow.com/questions/11544048/… Кажется, это можно изменить, сделав страницу длиннее.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню