Перенаправление на пользовательскую не найденную страницу 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, является антипаттерном, проверьте пико документы

Другие вопросы по тегам