您确实需要了解项目中源的布局、已部署的 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
不对其进行硬编码的情况下获取。