我编写了一个完成任务的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);
然而,这两个都产生了一个错误,说它无法找到我正在寻找的页面。
我正在寻找有关如何解决此问题的任何想法?
谢谢
答案 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中的虚拟文件夹。所以你不应该在你的请求或重定向路径中使用它。
第二,我猜你使用绝对路径到你的应用程序,但编码错误:
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"