2012-05-11 31 views
0

我一直在關注netbeans電子商務教程,他們設置了introduced a ControllerServlet來處理多個URL。控制器servlet處理多個url的推薦方法是什麼?

但是他們這樣做的方式基本上有一個大的if then else if聲明:

String userPath = request.getServletPath(); 

    // if category page is requested 
    if (userPath.equals("/category")) { 
     // TODO: Implement category request 

    // if cart page is requested 
    } else if (userPath.equals("/viewCart")) { 
     // TODO: Implement cart page request 

     userPath = "/cart"; 

    // if checkout page is requested 
    } else if (userPath.equals("/checkout")) { 
     // TODO: Implement checkout page request 

    // if user switches language 
    } else if (userPath.equals("/chooseLanguage")) { 
     // TODO: Implement language request 

    } 

這真的是在一個單獨的servlet處理多個網址推薦的方法?這種方法看起來很可怕,難以管理。

或者我錯過了一些明顯的方式來處理這個乾淨?

+0

這確實是可怕的。然而,真正體面的前端控制器要複雜得多。他們顯然希望爲初學者保持簡單。我想本教程更願意使用單獨的servlet(因爲Servlet 3.0通過'@ WebServlet'註釋而無需任何XML配置就可以很容易地將servlet註冊爲獨立的微型控制器),而不是在「Front Controller」設計中引入誤導性介紹。另請參閱此相關的問題/答案:http://stackoverflow.com/questions/3541077/design-patterns-web-based-applications – BalusC

+0

@BalusC謝謝。我同意他們應該在樣本中爲每個URL創建一個servlet,並且鏈接的答案再次確認了我關於解決問題的最初想法。非常感激。 –

回答

1

你應該使用像Stripes或Spring MVC這樣的MVC框架,它可以爲你處理這個(還有更多)。在這些框架中,您可以配置一個servlet來攔截對給定URL模式的所有請求(例如* .action),並且此servlet根據註釋和/或命名約定和/或配置分派到適當的操作。

+0

謝謝。是的,我知道Spring MVC(我同意它是一種更好的方式來處理它),但是這是爲了教授使用servlet的課程,所以我真的想知道普通香草servlet的最佳做法。 –

+0

如果您使用普通的servlet,那麼每個URL(或一組URL)都有一個servlet,或者重新實現您自己的MVC框架。但是已經有幾十個了,所以我會這樣做。 –

+0

是的謝謝。我可能會實現一個servlet,它有一個AbstractFactory來爲特定的URL生成一個處理程序,而不是依賴於第三方庫,但是在報告中指出我的課程重複這個輪子可能是一個壞主意,指出可以使這個更簡單的可用框架。感謝您的意見。 –

0

您可以使用ServletFilter並按以下方式配置您的web.xml以將客戶端請求重定向到相應的目標控制器。

從上面的代碼片段中,將使不斷變化的不同用戶路徑。

使用此方法,您可以根據您的要求將多個網址發送到相同(或多個)過濾器。

<filter> 
    <filter-name>My Filter</filter-name> 
    <filter-class>com.project.my.MYclass</filter-class> 
</filter> 


<filter-mapping> 
    <filter-name>My Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

我不明白這與我目前有什麼不同,它是一個類的註釋,它定義了它將處理哪個url,但所有url仍然由類中的相同方法處理?當過濾器匹配時,將調用指定類中的哪個方法('com.project.my.MYclass') –

+0

我沒有在上面提供的鏈接(或代碼片段)中看到註釋,所以在我看來,簡單的如果和其他條件塊被用來重定向的網址。如果它是所有請求的同一類,那麼您可能需要一個工廠模式來實現實現以促進低耦合。 –

相關問題