В настоящее время я занимаюсь разработкой веб-проекта с помощью веб-компонентов (сервлетов и JSP), компонент Jsp использует «элементы сценариев» для перенаправления запроса при возникновении исключения (особенно элемент директивы и атрибут errorPage
, например,следующий пример):
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" errorPage="Error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
</head>
<body>
<form name="formulario" method="get" action="http://localhost:8080/Pruebas/LanzaError">
User: <input type="text" name="user">
<input type="submit" value="Send">
</form>
</body>
</html>
Приведенный выше JSP вызывает LanzaError
Сервлет, который содержит следующий код в doGet
Метод:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (true) {
throw new ServletException("Error de Servlet");
}
}
Как вы можете видеть, намеренноЯ создал ServletException
.
Как я использовал атрибут errorPage
в элементе директивы, я думаю, JSP должен перенаправить на страницу Error.jsp
, которая содержит следующий код:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
</head>
<body>
<h1><%= exception.getLocalizedMessage() %></h1>
</body>
</html>
Однако этого не произошло, когда из сервлета было сгенерировано исключение.
Кто-нибудь знает, как я могу выполнить перенаправление на страницу Error.jsp, когда в сервлете было создано исключение ?.Я не хотел бы делать это с RequestDispatcher
кодом. Я хотел бы бросить исключение из метода (как подпись метода говорит: throws ServletException, IOException`).
Спасибо за вашу помощь.
Отредактировано --------------:
На веб-сайте ссылка Прочитал следующий комментарий:
Один из способов справиться с этим общим способом - использовать web.xml, как показано ниже:
<error-page>
<exception-type>java.io.IOException</exception-type >
<location>/ErrorHandler</location>
</error-page>
Я только что включил исключение ввода-вывода, но вы могли бы сказать SQLException, что вы вполне могли бы добавить еще одну страницу ошибкии другое место для того же.Точно так же можно сказать тип java.lang.Exception и один обработчик, обрабатывающий все.
¡Это работает !, однако если я добавлю элемент xml error-page
, то управление исключением будет абсолютным,т.е. все типы исключений, которые они разделяют среди сервлетов (или с одинаковым кодом состояния), должны иметь одну и ту же страницу с ошибкой (из-за этого способ был объявлен в дескрипторе web.xml).Пожалуйста, исправьте меня, если я ошибаюсь.
По этой причине я думаю, что в любых случаях, когда только один сервлет выбрасывает определенную страницу с ошибкой, наиболее подходящим является использование `RequestDispatche '(и таким образом вы делаетене нужно добавлять какой-либо другой новый элемент в web.xml).
Но теперь у меня возникла новая проблема. В этом коде я добавил RequestDispatcher:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
if (true) {
throw new ServletException("Error de Servlet");
}
}catch(Exception e) {
RequestDispatcher rd = request.getRequestDispatcher("/Error.jsp");
rd.forward(request, response);
}
}
Когда запрос имеетнаконец, достиг Error.jsp
, он не обнаруживает запрос как ошибку, по этой причине он не обнаруживает неявный объект exception
, а Error.jsp
вызывает nullPointerException
.Кто-нибудь знает, как мне поступить?
Другим способом doint может быть добавление атрибута объекта ответа из catch сервлета с сообщением об ошибке, но я не верю, что это будет правильный способ сделать это (это сделает маленькийпотеря атрибута isErrorPage
в веб-компоненте jsp).
Спасибо за ваше время.