2011-03-15 53 views
1

我正在使用Spring MVC構建一個Web應用程序,並且遇到問題。從多個URL返回視圖的問題

目前,如果我登錄,然後轉到Web應用程序的頁面上的話它正確地顯示在用戶主頁(正常的東西輪廓影像,細節等) - 那是所有偉大的。

但是,我正在嘗試構建功能,以便如果任何人使用url/user/username訪問站點,那麼它將重定向到控制器並嘗試使用用戶名「username」查找用戶 - if找到一個,然後加載所選用戶配置文件的視圖。

目前這一切都工作正常 - 但我想檢查,如果您已登錄並導航到/用戶/ mycurrentusername然後不加載普通的配置文件頁面,只需加載您在第一次登錄時看到的頁面..問題是,當我返回相同的看法,我爲主頁做,因爲我現在在url/user/*沒有頁面資源可以找到(圖像/ CSS),所以我得到的頁面,但沒有格式/圖像..

什麼是最好的解決辦法?有沒有更好的方法來處理這個問題?

(我也有問題,因爲它看起來對圖像/ CSS的/ URL /圖像..它再次閃光以我的用戶控制器的請求:()

幫助非常感謝!

回答

1

網址你正在創建你的樣式表等等,應該使用某種URL重寫標記來創建,以確保它們與根應用上下文相關,而不是當前的url。你使用什麼視圖技術?JSP?如果是這樣你會想這樣的事情<link rel="stylesheet" href="<c:url value='/css/styles.css'/>" type="text/css"/><c:url/>標籤將創建一個URL是有效恆定的,不會與你當前頁面請求更改。

至於你的控制器正在請求css/images等,請查看this question。總之,理想情況下,您希望使用像Tuckey的Url Rewrite過濾器之類的東西來確保您的DispatcherServlet未被調用以獲取靜態內容請求。

編輯:其實看起來像春天3.04有一個更好的解決這個現在比Tuckey的過濾器。 <mvc:resources/>看起來更容易設置。

+0

完美,謝謝 - 解決了這些問題! – rhinds 2011-03-19 15:29:16

1

因爲你可能被指定你的圖片和css源爲相對路徑的第一個問題。由於視圖是從不同的路徑渲染的,所以相對路徑也不同。請參閱Melv的答案,瞭解如何正確指定它們。

對於第二個問題,必須在spring mvc docs看看節15.12.4如何讓靜態請求通過調度的Servlet。

1

你基本上有三種選擇:

  1. 不要改變你的網絡環境。使所有的網址如http://myapp/myrequest?par1=val1。我之前做過這種應用程序,但是當有很多可能的操作時,URL將不會被組織。 「REST風格」網址更加漂亮,並且是前一段時間世界的趨勢。

  2. 在所有的內部網址中使用<c:url>。我認爲這不是一個糟糕的選擇,但是有很多樣板代碼,比乍一看更多。如果您使用JavaScript調用URL,必須注意哪個URL是正確的,並且可能很笨拙。

  3. 在我目前的研究中,我利用了<BASE>標籤。您必須在所有頁面的頭部包含<base href="http://myhost:8080/myapp/" />。然後,您可以將所有URL與您的應用程序的基本路徑相關聯。有一些缺點,但是我的首選。

編輯:回答你的問題。您可以通過這種方式獲得應用程序的根URL,而不是參數化您的應用程序:

<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/" /> 
+0

謝謝Sinuhe - 第三個選項,你會如何配置應用程序到不同的服務器?將oyu只需要參數化,並有一個構建/部署來處理它? – rhinds 2011-03-19 23:01:45