2011-01-26 21 views
4

我有2個tomcat實例。都在代理Apache Apache httpds後面。我在春節控制器代碼如下所示:Spring RedirectView在不同的tomcat安裝中表現不同

@RequestMapping(value = "/doSuperSexyStuff", method = RequestMethod.GET) 
public String viewSuperSexyStuff() { 
    return "redirect:/mySuperSexyStuff"; 
} 

在Windows上我的第一個tomcat安裝我已經somedomain1.dev重定向到http://localhost:8080/myapp,一切完美的作品。重定向到http://somedomain1.dev/mySuperSexyStuff

在另一個tomcat安裝(這是在Linux上)重定向工作相對於上下文路徑和用戶最終在http://somedomain2.dev/myapp/mySuperSexyStuff這顯然是錯誤的。

我應該怎樣做,以忽略上下文路徑,只是將用戶重定向到他所屬的地方?

我的應用程序中的所有網址都是絕對的(包括jsps鏈接,重定向網址以及所有使用鏈接的地方)。我想這不是正確的做法:如果我必須實現網站的HTTPS版本,我會遇到麻煩。所以,如果你認爲我必須從根本上改變某些事情,請指出我的方向。

回答

6

而不是返回一個字符串,這是非常不靈活的,考慮返回一個觀點:

@RequestMapping(value = "/doSuperSexyStuff", method = RequestMethod.GET) 
    public View viewSuperSexyStuff(){ 
    return new RedirectView("/mySuperSexyStuff"); 
} 

重定向視圖有一個構造函數,採用布爾contextRelative所以下面會做上述相反的:

return new RedirectView("/mySuperSexyStuff", true); 

所有的網址應該是上下文相對的,除非你真的把它們指向你的網站,所以鏈接到css,圖像資產等應該在jsp中使用<c:url />標籤來解析路徑。

0

您可以實現此目標的方法之一是使用您的Web應用程序部署到根,而不是作爲上下文「myapp」。這是有道理的,因爲你有單獨的域配置。只需使用將所有文件放在tomcat根文件夾中即可。

0

Spring documentation for MVC說道路總是相對於你的上下文路徑。

至於我看到你有兩個選擇:

  • 使用絕對路徑在您的重定向例如「http:// somedomain ......」

  • 檢查您的configuration Web應用程序的上下文路徑

希望這有助於更進了一步......

相關問題