从 JSP 重定向 JSP - 错误 "The requested resource is not available."

Redirect JSP from JSP - error "The requested resource is not available."

我在社交网站上工作,遇到以下问题。在 profile.jsp 我有一个表单,用户可以在其中上传照片。此表单对 FileUploadHandler servlet 有一个操作,该 servlet 上传照片,然后将重定向发送到 uploadfileController.jsp,如下所示:

RequestDispatcher requestDispatcher;
requestDispatcher = request.getRequestDispatcher("/uploadfileController.jsp");
requestDispatcher.forward(request, response);

uploadfileController.jsp 中,我将此 post 插入到我的 MySQL 数据库中,然后将重定向发送到 profile.jsp

response.sendRedirect("/profile.jsp");

但随后我收到此错误消息:

HTTP Status 404 - /profile.jsp

type Status report

message /profile.jsp

description The requested resource is not available.

但是,当我再次访问 profile.jsp 时,post 已创建!有什么想法吗?

如果响应与 servlet 上下文相关,则将上下文路径添加到 URL。

String contextPath = request.getContextPath();
response.sendRedirect(response.encodeRedirectURL(contextPath + "/profile.jsp"); 

您可以使用 sendRedirect 和相对地址。例如,如果 servlets URL 是

http://www.serwer.com/yourwebapp/foo/servlet

并且您将使用 sendRedirect("bar/other") 您将被重定向到同一上下文中的不同资源

http://www.serwer.com/yourwebapp/foo/bar/other

但是,如果您在 sendRedirect 的开头添加 /,那么 / 将代表服务器的主目录,

http://www.serwer.com/
                     ^this one

所以 sendRedirect("/bar/other") 会将您重定向到

http://www.serwer.com/bar/other

如您所见,yourwebappfoo 已从 URL 中删除。

在你的情况下,问题似乎是缺少 yourwebapp。您可以通过多种方式解决它。例如,您可以:

  • 从重定向位置的开头删除 /,使其相对于当前 URL
  • / 之后添加应用程序名称,例如 sendRedirect("/yourAppName/profile.jsp")(您可以通过使用 request.getContextPath() 作为 +1 动态获取 /yourAppName 作为他的信息)