3

我编写了一个完成任务的 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); 

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

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

谢谢

4

2 回答 2

3

您确实需要了解项目中源的布局、已部署的 webapp 的布局以及应用程序在服务器中的布局之间的区别。

部署的 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

当你转发到另一个资源时,它总是转发到同一个 webapp 的资源。所以你不需要指定上下文路径:

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

当您重定向时(这与转发完全不同),您可以重定向到任何 URL(同一个 webapp、同一主机上的另一个 webapp,或者如果您愿意,可以重定向到 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不对其进行硬编码的情况下获取。

于 2012-06-25T14:19:14.003 回答
0

我认为你的问题是关于应用程序的结构请求 url 路径的规范

我要指出的第一件事是“WebContent”是 Eclipse 中的虚拟文件夹。所以你不应该在你的请求或重定向路径中使用它。

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

  1. 打字有一点小错误:

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

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

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

2.

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

您应该将上下文路径添加到您的转发 url,如下所示:

request.getContextPath() + "jsps/Uploadtest.jsp"
于 2013-01-07T13:15:35.117 回答