Перенаправление на пользовательскую не найденную страницу JSP
У меня есть HttpServlet. Он перенаправляет пользователя на разные страницы JSP, в зависимости от действий, которые пользователь хочет сделать. Например http://localhost:8080/collections/index.do
перенаправляет на index.jsp. Различное действие, которое я держу в picocontainer как это
<component-instance key="index">
<com.epam.collections.web.IndexAction/>
</component-instance>
Когда пользователь пишет предыдущий URL в браузере -
1) Я получаю имя действия - index
String name = getActionName(req);
2) Получить действие от picocontainer
Action action = (Action) pico.getComponentInstance(name);
3) Выполнить действие - вернуть строку, которая представляет имя страницы JSP
String view = action.exec(req, resp);
где метод exec
public String exec(HttpServletRequest req, HttpServletResponse resp) {
return "index";
}
4) Переслать пользователю index.jsp page
getServletContext().getRequestDispatcher(
"/WEB-INFO/pages/" + view + ".jsp").forward(req, resp);
Я хочу переслать пользователя на страницу notfound.jsp
когда в picocontainer нет действия. Например, некоторые blabla.do
должен вернуться notfound.jsp
стр. Но когда я так делаю
if (action == null) {
getServletContext().getRequestDispatcher(
"/WEB-INF/jsp/notfound.jsp").forward(req, resp);
return;
}
так как getComponentInstance
возвращается null
когда действие не существует в XML-файле - у меня ошибка 500
Также я хочу перенаправить на эту страницу, когда я пишу что-то без .do
совсем. Например ddd.dd
, plain
и т. д. Но у меня ошибка 404.
1 ответ
1) для обработки ошибок 404 вам нужно настроить обработчик 404 в web.xml 2) вы получили 500 ошибок, возможно, что-то не так с вашей страницей jsp, вам нужно тщательно проверить код jsp 3) то, как вы используете pico, является антипаттерном, проверьте пико документы