2012-06-25 85 views
1

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

我曾尝试:

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

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

但是这些都具有产生一个错误说,它不能找到我要找的页面。

我在寻找关于如何解决这个问题的任何想法?

谢谢

+1

是不是在你的IDE web内容的文件夹?这不应该在你的网址。 – rickz

回答

3

你真的需要了解你的项目的源代码的布局之间的差别,部署Web应用程序的布局,并在服务器应用程序的布局。

部署的Web应用程序的结构如下:

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 

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

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

当您重定向(这是从正向完全不同),您可以重定向到任何URL(同一Web应用程序,在同一台主机上的另一个Web应用程序,或www.google.com如果你喜欢)。如果您重定向到同一Web应用程序的某个资源,则不需要发送http://localhost:8080部分,但需要发送上下文路径(后跟web应用程序中的资源路径),并且还应始终使用encodeRedirectURL方法(除非你不关心用户依靠URL重写而不是cookie进行会话管理):

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

request.getContextPath()用于获取/foo没有硬编码。

+1

对。我编辑了我的答案,使其更清晰。 –

0

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

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

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

  1. 有关于输入法有点失误:

的http://本地主机:8080 /富/ 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" 
相关问题