【发布时间】:2021-11-12 01:36:22
【问题描述】:
我正在写一个 Servlet 控制器。如果我不传递任何参数,它将捕获 Exception 并且响应将 sendRedirect 到 index.jsp
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, Exception {
response.setContentType("text/html;charset=UTF-8");
RequestDAO requestDAO = new RequestDAOImpl();
try (PrintWriter out = response.getWriter();) {
// get request
int rId = Integer.parseInt(request.getParameter("rId"));
Request req = requestDAO.getRequestById(rId);
sendDispatcher(request, response, "viewRequestMentor.jsp");
} catch (Exception e) {
Logger.getLogger(ViewMentorRequestDetailController.class.getName()).log(Level.SEVERE, null, e);
session.setAttribute("error", "Cant view request detail");
response.sendRedirect("index.jsp");
}
}
但是重定向不起作用,记录器显示异常
Severe: java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:518)
at controller.ViewMentorRequestDetailController.processRequest(ViewMentorRequestDetailController.java:76)
at controller.ViewMentorRequestDetailController.doGet(ViewMentorRequestDetailController.java:103)
【问题讨论】:
-
在您开始发送响应后,您将无法重定向。您需要查看日志以确定实际错误是什么。
-
当然,您会在日志中看到异常,您正在尝试捕获异常 - 然后您会立即设置错误并设置“Level.SEVERE”异常。重定向是否有效并且您看到异常?因为无论重定向是否有效,都会显示该异常。日志中是否还有另一个错误输出?
-
我不明白。我唯一的回应是在 catch 块中。它会显示您所看到的异常
-
@backwardforward 它显示两个异常 NullPointerException 因为我没有传递任何参数,当响应尝试发送重定向时出现 IllegalStateException