Хаки, но выполнимо: сопоставьте его как <error-page>
на <error-code>
из 404
.
<servlet>
<servlet-name>errorServlet</servlet-name>
<servlet-class>com.example.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>errorServlet</servlet-name>
<url-pattern>/error</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/error</location>
</error-page>
Возможно, вы захотите изменить код состояния в сервлете всякий раз, когда вы хотите вернуть«действительный» ответ.
Альтернатива - позволить сервлету Spring прослушивать более конкретный url-pattern
.Например, /pages/*
.Затем вы могли бы при необходимости вывести Filter
вперед (на /*
), что примерно соответствует следующему:
if (new File(servletContext.getRealPath(request.getRequestURI())).exists()) {
chain.doFilter(request, response);
} else {
request.getRequestDispatcher("/pages" + request.getRequestURI()).forward(request, response);
}
, чтобы вы не видели / не нуждались /pages
в URL.
Обновление : согласно вашему новому вопросу:
ОБНОВЛЕНИЕ: Как насчет перезаписи URL?Обеспечивает ли GlassFish какую-то степень гибкости, как Apache с mod_rewrite?Таким образом, я мог бы перехватывать вещи до того, как они достигнут стадии отображения сервлета.
JSP / Servlet эквивалент аддона Apache HTTPD mod_rewrite
- это Tuckey UrlRewriteFilter
.