2010-03-27 111 views
14

我不知道在JSP中是否有解決Spring控制器問題的良好實踐。Spring + JSP url構建最佳實踐

假設我有控制器:當然在JSP

@Controller 
class FooController { 

    // Don't bother about semantic of this query right now 
    @RequestMapping("/search/{applicationId}") 
    public String handleSearch(@PathVariable String applicationId) { 
    [...] 
    } 
} 

我可以這樣寫:

<c:url value="/search/${application.id}" /> 

但它是非常難以改變的網址即可。如果你熟悉的Rails/Grails的,那麼你現在這個問題怎麼解決:

redirect_to(:controller => 'foo', :action = 'search') 

但在春天有這麼多UrlMappers。每個UrlMapper都有自己的語義和綁定方案。類似Rails的方案根本行不通(除非你自己實現)。我的問題是:在Spring中有沒有更方便的方法來解決來自JSP的控制器?

回答

10

我希望我理解你的問題。我想你的問題是當url字符串在jsp和控制器映射中時如何維護url。

你的控制器應該做邏輯,你的JSP應該做輸出。構建Url應該是處理它的控制器的責任。所以

class SearchController { 

    @RequestMapping("/search/{applicationId}") 
    public String handleSearch(@PathVariable String applicationId) { 
    [...] 
    } 

    public String getUrl(Long applicationId) { 
     return "/search/" + applicationId; 
    } 
} 

class StartController { 
    private SearchController controller; 

    @ModelAttribute("searchUrl") 
    public String getSearchUrl() { 
     return fooController.getUrl(applicationId); 
    } 
} 

,並在您start.jsp做

<c:url value="${searchUrl}" /> 
+0

嗯...非常方便的url構造方式。謝謝 – 2010-04-20 12:04:01

+1

+1直到現在,我還是頭疼@ @ ModelAttribute-on-a-method。謝謝! – 2010-05-19 19:00:18

0

嘗試使用Apache作爲前端重新映射的URL:

http://www.simonecarletti.com/blog/2009/01/apache-rewriterule-and-query-string/

這種方式,你可以改變從查詢字符串的applicationID參數轉換成一個友好的URL。

此外,這裏是mod_rewrite的文檔: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

+0

我知道的例子是在PHP,但它應該重寫你的網址爲友好的URL反正。如果你使用的是JSP/Spring或你打算使用什麼,這並不重要。) – leeand00 2010-03-30 21:14:43

+0

(此外,你需要將你的Servlet容器連接到Apache,以便Apache的請求被轉發到你的Servlet容器,以及通過Apache返回給用戶的響應)。 – leeand00 2010-03-30 21:18:39

+1

我不確定這是否適合他的問題。無論哪種方式,Java EE方式都是這樣的過濾器:http://tuckey.org/urlrewrite/ – BalusC 2010-03-30 21:23:38