【问题标题】:Redirect after completion of view rendering on JSP exceptionJSP异常视图渲染完成后重定向
【发布时间】:2013-11-26 22:51:08
【问题描述】:

我正在尝试处理 JSP 视图抛出的异常。由于 Spring MVC 无法直接处理这些异常,因为它们超出了控制器的范围,因此我尝试通过 HandlerInterceptorAdapter 处理它们。

afterCompletion 方法让我可以访问从 JSP 抛出的异常,因此我可以使用唯一的错误 ID 记录异常。但除此之外,我还想向客户显示一个用户友好的错误页面。所以我的第一个想法是将用户重定向到我已经存在的错误页面,该页面显示了唯一的错误 ID。

但似乎重定向被忽略了。是否可以在这种方法中进行重定向?或者是不是可以改变响应,因为它已经被渲染了?

这是我的第一次尝试:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import de.lwv.mass2.client.web.controller.BasicExceptionHandlerController;

@Component
public class JspExceptionHandler extends HandlerInterceptorAdapter {

    private static Logger LOGGER = LoggerFactory.getLogger(JspExceptionHandler.class);

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

        if (ex != null) {
            final String uuid = BasicExceptionHandlerController.generateExceptionUUID();

            LOGGER.error("Exception: " + uuid, ex);
            // redirect
            response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
            response.sendRedirect(request.getContextPath() + "/error?id=" + uuid);
        }
    }
}

【问题讨论】:

  • 我也有同样的问题..

标签: jsp spring-mvc interceptor


【解决方案1】:

我认为在调用 afterCompletion 时响应已经提交(并且视图已呈现)。

作为替代建议,您可以将error-page 添加到您的web.xml,这将充当“捕获所有”处理程序 - 捕获源自 JSP 视图的异常和其他无法由 @987654325 处理的异常@

例如,您可以在 web.xml 中添加:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error</location>
</error-page>

你也可以通过错误码来定义这些:

<error-page>
    <error-code>500</error-code>
    <location>/error</location>
</error-page>

&lt;location&gt; 可以是另一个控制器、静态 HTML 页面或 JSP 视图 - 如下所示。

<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/jsp/500.jsp</location>
</error-page>

【讨论】:

猜你喜欢
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多