2012-11-29 49 views
1

我有一個項目應付(實際上過度)爲學校,並不能得到一些簡單的工作。來自Servlet的有效URL 404錯誤

我正在運行Netbeans 7.2.1,Glassfish 3.1.2.2和最新的Java JDK。

我有四個JSF頁面,index.xhtml ItemAdd.xhtml,ItemCatalog.xhtml和ItemDetail.xhtml以及一個servlet SessionServlet。我已經證實我可以直接到達每個頁面,即

http://localhost:8080/CMIS440Spitzer-Project2/faces/ItemDetail.xhtml 

的作品。但是,當我從一個JSF頁面到我的servlet,然後轉發請求時,我得到一個glassfish 404錯誤。

這是我這是在做轉發極其簡單的servlet代碼:

if (request.getParameter("target").contains("Add Item")) { 
     String URL = request.getContextPath() + "/faces/ItemAdd.xhtml"; 
     System.out.print(URL); 
     RequestDispatcher dispatcher = request.getRequestDispatcher(URL); 
     dispatcher.forward(request, response); 
    } 

一個控制檯,我得到它,我可以粘貼到瀏覽器中的追隨者,它的工作原理:

INFO: /CMIS440Spitzer-Project2/faces/ItemAdd.xhtml 

由於我收到控制檯消息我知道請求正在到達servlet,並且它正在打到正確的代碼塊,並且因爲我得到了一個Glassfish 404錯誤,我知道它正在轉發到正確的端口上的我的計算機。

RequestDispatcher有什麼問題?爲什麼這不起作用?

謝謝。

<rant> 

這包括了更多的問題,但我已經與PHP,Perl,C++,C,Java和其他一些工作。以前我從來沒有覺得一種語言(在這種情況下,JSF的Java實現)正在積極地試圖讓我的生活變得越來越困難。例如,在這個環境中許多需要的東西都是以地圖的形式出現的: 需要所有請求參數的列表,您需要一張地圖,需要所有會話參數的列表,您需要一張地圖等。但是在JSF中,您無法輕鬆通過地圖!爲什麼,因爲它很慢。我發現了一個基本上來自Java開發人員的Mea Culpa的鏈接,他提到它將是O(N)速度,因此速度會很慢。換句話說,Java JSF開發人員預先優化了我的代碼,並要求我將地圖轉換爲列表。

在這一點上,當我現在正在反思和訪問私有方法/屬性時,我得到了一些奇怪的錯誤 - 在我的代碼中,我正在做類似的任何事情。我使用標準的getter/setter來返回一個map keyset。

甚至不讓我開始getter/setter方法的命名約定(大寫轉換爲小寫,添加一個get /前方設置)

也許它的我,但是這整個設置似乎過於遲鈍,很難理解和不必要的複雜。

感謝您閱讀我的咆哮。我一直在這種方式,然後我認爲我應該和幾乎流淚試圖做簡單的東西。

</rant> 

回答

0

爲什麼要混合使用會話管理和JSF頁面的servlet?在使用JSF時,您不得不停止思考http請求/響應範式,這是一個事件驅動的框架,與桌面GUI編程有更多共同之處。當然,JSF是而不是這是最友好的web框架,但是你使它變得比它需要的複雜。

+0

因爲我不知道任何更好的,這是教練基本示例如何工作:-) – user1863569

+0

@ user1863569我很抱歉,但您以錯誤的方式使用此技術,導致許多不必要的挫折。你最好在Google上搜索一個教程並首先運行一個hello世界的例子,這樣你就可以得到你的方向 –

+0

我的問題是很多的例子都是圍繞着使用腳本let's或者jsf 1.x而浮動。也許我錯過了mvc 2範例,但我認爲這就是控制器所做的事情:獲取表單的結果,對模型數據進行一些處理,然後將其轉發到新視圖 – user1863569

0

您傳遞給getRequestDispatcher的路徑與上下文根相關。

通過向其添加上下文路徑,最後會出現/CMIS440Spitzer-Project2/CMIS440Spitzer-Project2/faces/ItemAdd.xhtml,這不存在。

(實際上,如果它有一個斜槓開始,因爲這一個呢。如果它不與它相對的servlet斜線開始是相對於上下文根。)

+0

非常令人沮喪的是我在例子中發現了這個完全相同的模式的多個例子。另外,爲什麼Glassfish 404錯誤不告訴你什麼路徑不可用?如果我看到我可以自己想出來。 – user1863569

+0

@ user1863569,您應該能夠創建一個自定義錯誤頁面,爲您提供這些以及其他有用的調試信息。至於爲什麼Glassfish沒有在默認情況下告訴你它......我想這可能被認爲是一種安全風險(webapp內部結構的信息公開)。 –

+0

因爲編程很難。這些工具不會爲你完成工作,完全是你。你在這裏的責任之一就是 - 確切地知道這項技術的工作原理。當你這樣做時,你不必再懷疑了,你只是知道,當你不知道你知道在哪裏尋找。 – Gimby