当我尝试重定向到另一个页面时,我得到了这个异常java.lang.IllegalStateException
我有以下代码:当我尝试重定向到另一个页面时,我得到了这个异常java.lang.IllegalStateException,java,jakarta-ee,Java,Jakarta Ee,我有以下代码: util.library.mvc.Controller=>从Servlet扩展的控制器 modules.user.controllers.UpdateController=>控制器实现 在控制器父类中,我有一个包含以下内容的方法: public void redirect(HttpServletResponse response, String url) throws IOException { response.sendRedirect(url); }
public void redirect(HttpServletResponse response, String url)
throws IOException
{
response.sendRedirect(url);
}
但当我尝试在控制器实现上使用它时,会出现以下异常:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Integer id = Integer.parseInt(request.getParameter("id"));
UserRepository users = new UserRepository(request);
User user = users.getUser(id);
// My validation :
if (user == null) {
this.redirect("list"); // throws me an exception
}
request.setAttribute("user", user);
request.setAttribute("action", "update");
request.setAttribute("legend", "Update User");
this.render(request, response, "/user/form");
}
我收到了西班牙语的异常消息,但我将其翻译如下:
java.lang.IllegalStateException: I can not forward after response has been carried out.
util.library.mvc.Controller.render(Controller.java:31)
modules.user.controllers.UpdateController.doGet(UpdateController.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
但是,当我在此上下文中使用此方法时:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
User user = new User();
user.populate(request);
UserRepository userRepository = new UserRepository(request);
userRepository.update(user);
this.redirect(response, "list");
}
它很好用
有什么帮助吗?您需要了解什么是重定向 当你使用
response.sendRedirect(url);
Servlet容器向客户端返回一个HTTP响应,其中包含一个302状态代码和一个指向重定向应该指向的URI的位置
头。换句话说,您告诉客户端向Location
头中的URI发送newGET请求
一旦Servlet容器发送了这个HTTP响应,响应处理就完成了。如果您尝试使用HttpServletResponse
执行任何其他操作,比如转发到JSP,您将得到一系列异常
当您转发到JSP时,您希望Servlet容器呈现JSP的内容并将其写入HTTP响应,但是使用sendRedirect
,您已经发送了HTTP响应。如果你正在重定向,你不能让它发生
如何预防它取决于你自己 您需要了解什么是重定向 当你使用
response.sendRedirect(url);
Servlet容器向客户端返回一个HTTP响应,其中包含一个302状态代码和一个指向重定向应该指向的URI的位置
头。换句话说,您告诉客户端向Location
头中的URI发送newGET请求
一旦Servlet容器发送了这个HTTP响应,响应处理就完成了。如果您尝试使用HttpServletResponse
执行任何其他操作,比如转发到JSP,您将得到一系列异常
当您转发到JSP时,您希望Servlet容器呈现JSP的内容并将其写入HTTP响应,但是使用sendRedirect
,您已经发送了HTTP响应。如果你正在重定向,你不能让它发生
如何预防它取决于你自己 您需要了解什么是重定向 当你使用
response.sendRedirect(url);
Servlet容器向客户端返回一个HTTP响应,其中包含一个302状态代码和一个指向重定向应该指向的URI的位置
头。换句话说,您告诉客户端向Location
头中的URI发送newGET请求
一旦Servlet容器发送了这个HTTP响应,响应处理就完成了。如果您尝试使用HttpServletResponse
执行任何其他操作,比如转发到JSP,您将得到一系列异常
当您转发到JSP时,您希望Servlet容器呈现JSP的内容并将其写入HTTP响应,但是使用sendRedirect
,您已经发送了HTTP响应。如果你正在重定向,你不能让它发生
如何预防它取决于你自己 您需要了解什么是重定向 当你使用
response.sendRedirect(url);
Servlet容器向客户端返回一个HTTP响应,其中包含一个302状态代码和一个指向重定向应该指向的URI的位置
头。换句话说,您告诉客户端向Location
头中的URI发送newGET请求
一旦Servlet容器发送了这个HTTP响应,响应处理就完成了。如果您尝试使用HttpServletResponse
执行任何其他操作,比如转发到JSP,您将得到一系列异常
当您转发到JSP时,您希望Servlet容器呈现JSP的内容并将其写入HTTP响应,但是使用sendRedirect
,您已经发送了HTTP响应。如果你正在重定向,你不能让它发生
如何预防它取决于你自己 问题出在这个if块中
if (user == null) {
this.redirect("list"); // throws me an exception
}
你忘了在这里放回车。因此,它会重定向,然后在渲染中执行某些操作并转发到另一个页面
应该如此
if (user == null) {
this.redirect("list"); // throws me an exception
return;
}
希望这有帮助。问题出在这个if块中
if (user == null) {
this.redirect("list"); // throws me an exception
}
你忘了在这里放回车。因此,它会重定向,然后在渲染中执行某些操作并转发到另一个页面
应该如此
if (user == null) {
this.redirect("list"); // throws me an exception
return;
}
希望这有帮助。问题出在这个if块中
if (user == null) {
this.redirect("list"); // throws me an exception
}
你忘了在这里放回车。因此,它会重定向,然后在渲染中执行某些操作并转发到另一个页面
应该如此
if (user == null) {
this.redirect("list"); // throws me an exception
return;
}
希望这有帮助。问题出在这个if块中
if (user == null) {
this.redirect("list"); // throws me an exception
}
你忘了在这里放回车。因此,它会重定向,然后在渲染中执行某些操作并转发到另一个页面
应该如此
if (user == null) {
this.redirect("list"); // throws me an exception
return;
}
希望这对您有所帮助。请按如下方式重写您的代码
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Integer id = Integer.parseInt(request.getParameter("id"));
UserRepository users = new UserRepository(request);
User user = users.getUser(id);
// My validation :
if (user != null) {
request.setAttribute("user", user);
request.setAttribute("action", "update");
request.setAttribute("legend", "Update User");
this.render(request, response, "/user/form");
} else {
this.redirect("list");
}
}
按如下方式重写代码
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Integer id = Integer.parseInt(request.getParameter("id"));
UserRepository users = new UserRepository(request);
User user = users.getUser(id);
// My validation :
if (user != null) {
request.setAttribute("user", user);
request.setAttribute("action", "update");
request.setAttribute("legend", "Update User");
this.render(request, response, "/user/form");
} else {
this.redirect("list");
}
}
按如下方式重写代码
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Integer id = Integer.parseInt(request.getParameter("id"));
UserRepository users = new UserRepository(request);
User user = users.getUser(id);
// My validation :
if (user != null) {
request.setAttribute("user", user);
request.setAttribute("action", "update");
request.setAttribute("legend", "Update User");
this.render(request, response, "/user/form");
} else {
this.redirect("list");
}
}
按如下方式重写代码
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Integer id = Integer.parseInt(request.getParameter("id"));
UserRepository users = new UserRepository(request);
User user = users.getUser(id);
// My validation :
if (user != null) {
request.setAttribute("user", user);
request.setAttribute("action", "update");
request.setAttribute("legend", "Update User");
this.render(request, response, "/user/form");
} else {
this.redirect("list");
}
}
让我们获取完整的堆栈跟踪。异常显然发生在
render
方法中。让我们看看。让我们获得完整的堆栈跟踪。异常显然发生在render
方法中。让我们看看。让我们获得完整的堆栈跟踪。异常显然发生在render
方法中。让我们看看。让我们获得完整的堆栈跟踪。异常显然发生在render
方法中。让我们看看。谢谢你的解释。谢谢你的解释。谢谢你的解释。谢谢你的解释。