2012-06-25 29 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" 
相關問題