Я пытаюсь обработать исключение, используя конфигурацию ошибок 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)
Это то, что я нашел в одном из комментариев по ссылке в блогах ниже
Существует серьезная проблема с использованием "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