从jsp重定向jsp - 错误"请求的资源不可用。"

时间:2015-01-18 10:52:28

标签: java jsp servlets

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

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

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

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

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

  

HTTP状态404 - /profile.jsp

     

输入状态报告

     

消息/profile.jsp

     

说明请求的资源不可用。

然而,当我再次去profile.jsp时,帖子就被创建了!有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您可以将sendRedirect与相对地址一起使用。例如,如果servlets URL是

  

http://www.serwer.com/yourwebapp/foo/ 的小服务程序

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

  

http://www.serwer.com/yourwebapp/foo/ 的酒吧/其他

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

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

因此sendRedirect("/bar/other")会将您重定向到

  

http://www.serwer.com/ 的酒吧/其他

以便您看到yourwebappfoo已从网址中删除。

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

  • 从重定向位置的开头删除/以使其相对于当前网址
  • / sendRedirect("/yourAppName/profile.jsp")之后添加应用名称(您可以/yourAppName使用mentioned by Roman C +1动态获取request.getContextPath()