我已经编写了一个完成任务的 Servlet,然后我希望它重新加载最初调用 Servlet 的 JSP。 servlet 运行 enctype='multipart/form-data'
JSP,这个 JSP 称为 Uploadtest,每次我尝试运行以下代码时,我都会得到 The requested resource (/project_name/WebContent/jsps/new.jsp) 不可用
。
我试过:
response.sendRedirect("/WebContent/jsp/Uploadtest.jsp");
和
getServletContext().getRequestDispatcher("/WebContent/jsps/Uploadtest.jsp").forward (request, response);
但是这两个都产生了一个错误,说它找不到我正在寻找的页面。
我正在寻找有关如何解决此问题的任何想法?
谢谢
最佳答案
您确实需要了解项目中源代码布局、部署的网络应用程序布局以及服务器中应用程序布局之间的区别。
部署的 webapp 具有以下结构:
jsps
Uploadtest.jsp
WEB-INF
classes
the compiled classes of your application
lib
the jars of your application
部署的应用程序中不存在 WebContent 目录。它正是 Eclipse 存储 webapp 相关资源(JSP 文件、图像等)的地方。
每个 webapp 都有一个上下文路径。如果您的 Web 应用程序的上下文路径是 /foo
,则您必须在浏览器的地址栏中为 JSP 输入的路径为:
http://localhost:8080/foo/jsps/Uploadtest.jsp
当您转发到另一个资源时,它总是转发到同一网络应用程序的资源。所以你不需要指定上下文路径:
getServletContext().getRequestDispatcher("/jsps/Uploadtest.jsp").forward (request, response);
当您重定向(这与转发完全不同)时,您可以重定向到任何 URL(同一个网络应用程序、同一主机上的另一个网络应用程序,或者 www.google.com,如果您愿意)。如果你重定向到同一个webapp的某个资源,你不需要发送http://localhost:8080
部分,但是你需要发送上下文路径,后面是资源路径webapp,并且您还应该始终使用 encodeRedirectURL 方法(除非您不关心用户依赖 URL 重写而不是 cookie 进行 session 管理):
String redirect =
response.encodeRedirectURL(request.getContextPath() + "/jsps/Uploadtest.jsp");
response.sendRedirect(redirect);
request.getContextPath()
用于获取 /foo
而无需对其进行硬编码。
关于jsp - 使 Servlet 重新加载调用它的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190388/