使Servlet重新加载调用它的页面

时间:2012-06-25 13:36:22

标签: jsp servlets

我编写了一个完成任务的Servlet,然后我希望它重新加载最初调用Servlet的JSP。 servlet运行enctype='multipart/form-data' JSP,这个JSP称为Uploadtest,每当我尝试运行以下任一代码时,我得到The requested resource (/project_name/WebContent/jsps/new.jsp) is not available

我试过了:

response.sendRedirect("/WebContent/jsp/Uploadtest.jsp");

getServletContext().getRequestDispatcher("/WebContent/jsps/Uploadtest.jsp").forward   (request, response); 

然而,这两个都产生了一个错误,说它无法找到我正在寻找的页面。

我正在寻找有关如何解决此问题的任何想法?

谢谢

2 个答案:

答案 0 :(得分:3)

您确实需要了解项目中源代码的布局,部署的Web应用程序的布局以及服务器中应用程序的布局之间的区别。

部署的webapp具有以下结构:

jsps
    Uploadtest.jsp
WEB-INF
    classes
        the compiled classes of your application
    lib
        the jars of your application

部署的应用程序中不存在WebContent目录。它就是Eclipse存储与webapp相关的源(JSP文件,图像等)的地方。

每个webapp都有一个上下文路径。如果您的webapp的上下文路径为/foo,则您必须在JSP的浏览器地址栏中键入的路径为:

http://localhost:8080/foo/jsps/Uploadtest.jsp

当您转发到另一个资源时,它始终是同一个Web应用程序的资源。所以你不需要指定上下文路径:

getServletContext().getRequestDispatcher("/jsps/Uploadtest.jsp").forward (request, response); 

当您重定向(与转发完全不同)时,您可以重定向到任何网址(相同的网络应用,同一主机上的其他网络应用或www.google.com,如果您愿意)。如果您重定向到同一个webapp的某个资源,则不需要发送http://localhost:8080部分,但是您需要发送上下文路径,然后是webapp中的资源路径,您也应该始终使用encodeRedirectURL方法(除非您不关心依赖于URL重写的用户而不是用于会话管理的cookie):

String redirect = 
    response.encodeRedirectURL(request.getContextPath() + "/jsps/Uploadtest.jsp");
response.sendRedirect(redirect);

request.getContextPath()用于获取/foo而无需对其进行硬编码。

答案 1 :(得分:0)

我认为您的问题是关于应用的结构和请求网址路径的规范。

首先我要指出的是,'WebContent'是eclipse中的虚拟文件夹。所以你不应该在你的请求或重定向路径中使用它。

第二,我猜你使用绝对路径到你的应用程序,但编码错误:

  1. 关于打字有一点错误:
  2.   

    http:// localhost:8080 / foo / jsp / Uploadtest.jsp

    根据您的描述,您应该输入:

    http://localhost:8080/foo/jsps/Uploadtest.jsp
    

    2

    getServletContext().getRequestDispatcher("/WebContent/jsps/Uploadtest.jsp").forward   (request, response); 
    

    你应该像这样添加你的转发网址的上下文路径:

    request.getContextPath() + "jsps/Uploadtest.jsp"