2016-08-23 39 views
0

在Web應用程序(在Eclipse上開發)我希望用戶在瀏覽器中利用URL。 Web應用程序基於java spring mvc,控制器返回html頁面。 所有的html頁面都在WebContent/WEB-INF/views文件夾中。所有css \ javacript \ images都位於WebContent/resources/{css \ javacript \ images}文件夾中。如何在Spring MVC中使用url?

以下是該網址的web應用程序應該訪問

  1. 本地主機:8080 /項目/住宅 - home.html的
  2. 本地主機:8080 /項目/約 - 爲about.html
  3. 本地主機:8080 /項目/供應商 - 爲vendor.html(點擊時會顯示所有的供應商詳細列表)

現在我想實現對供應商

類別過濾器
  1. 本地主機:8080 /項目/供應商/中 - 爲vendor.html(重用頁面JS來dispaly唯一的醫療供應商明細表)
  2. 本地主機:8080 /項目/供應商/軍隊 - 爲vendor.html(重複使用JS頁面
  3. 本地主機dispaly只有軍隊供應商明細表):8080 /項目/供應商/其他 - 爲vendor.html(重用頁面JS來dispaly只有其他廠商的詳細名單)

進一步上vendor.html(可能是{all,med,army,other}供應商)點擊姓名鏈接並將網址設爲

本地主機:8080 /項目/供應商/中/ vendor_XX到diplay選擇vendor_XX的完整信息 - (在vendor_XX.html編碼)

所有提交的GET類型

首頁//vendor_XX.html

<html> 
<link rel="stylesheet" href="resources/css/mystyle.css" type="text/css" /> 

<a href="home">Home</a> 
<a href="vendor">Vendor</a> 
<a href="about">About</a> 

<a href="vendor/med">Medical</a> 
<a href="vendor/army">Army</a> 
<a href="vendor/other">Other</a> 

// and other non relevant stuff 
</html> 

vendor.html

<html> 

<link rel="stylesheet" href="resources/css/mystyle.css" type="text/css" /> 

<a href="home">Home</a> 
<a href="vendor">Vendor</a> 
<a href="about">About</a> 

<a href="vendor/med">Medical</a> 
<a href="vendor/army">Army</a> 
<a href="vendor/other">Other</a> 

// generating below 3 line dynamically with js 
<a href="vendor/med/vendor_xx">Vendor_XX</a> 
<a href="vendor/med/vendor_yy">Vendor_YY</a> 
<a href="vendor/other/vendor_zz">Vendor_ZZ</a> 

// and other non relevant stuff 
</html> 

我的控制器

@Controller 
public class AppController { 

@RequestMapping(value = "home", method = RequestMethod.GET) 
public String home() { 
return "home"; 
} 

@RequestMapping(value = "vendor", method = RequestMethod.GET) 
public String vendor() { 
return "vendor"; 
} 

@RequestMapping(value = "vendor/med", method = RequestMethod.GET) 
public String vendorMed() { 
return "vendor"; 
} 
@RequestMapping(value = "vendor/army", method = RequestMethod.GET) 
public String vendorArmy() { 
return "vendor"; 
} 
@RequestMapping(value = "vendor/med/vendor_xx", method = RequestMethod.GET) 
public String vendorMedXX() { 
return "vendor_xx"; 
} 
//all sample urls are given 
} 

資源文件夾添加到建設項目的路徑

本地主機:8080 /項目/供應商/中/ vendor_XX 考慮上述網址爲localhost:8080 /項目/ LEVEL_1/level_2 /匹配level_3

問題 1) - 除level_1以外的所有url都找不到css。 LEVEL_2網址需要CSS導入爲<link rel="stylesheet" href="../resources/css/mystyle.css" type="text/css" /> level_3網址需要CSS導入爲<link rel="stylesheet" href="../../resources/css/mystyle.css" type="text/css" />

問題1 - 你爲什麼不從資源彈簧負荷CSS。我錯過了什麼嗎?

2) - 的情況下,我點擊

<a href="home">Home</a> 

從LEVEL_1/LEVEL_2 vendor.html,它是針對LEVEL_1 /家。因此在控制器請求映射中找不到。

問題2 - 我們該如何重定向到localhost:8080/Project/home?

回答

0

網址與命令行中的路徑非常類似。

如果您位於/foo/bar/目錄並執行命令less file.txt,您將打開文件/foo/bar/file.txt,因爲您使用的是相對路徑。

如果你想打開文件/file.txt,你需要less ../../file.txt上去兩個目錄,或者只需要less /file.txt從根開始。

當你是誰URL的網頁上(也就是您在瀏覽器的地址欄中看到什麼)是http://localhost/Project/vendor/med/vendor_xx,和加載的文件在resources/css/mystyle.css,那麼瀏覽器就會從http://localhost/Project/vendor/med/resources/css/mystyle.css加載它,因爲你使用相對文件,而當前的「目錄」是http://localhost/Project/vendor/med/

要從正確的URL加載它,即http://localhost/Project/resources/css/mystyle.css,您需要使用../../resources/css/mystyle.css以上兩個目錄,或者您需要一個絕對路徑以根目錄開始:/Project/resources/css/mystyle.css

爲了避免硬編碼的項目(即/Project),你可以使用JSTL的C的上下文路徑:我stronly勸到幾乎總是使用,如絕對路徑URL標記,或者乾脆

href="${pageContext.request.contextPath}/resources/css/mystyle.css" 

以上,哪些工作從任何時候「目錄」你是。

+0

感謝伴侶,爲您的答案偉大的學習經驗,它的工作。兩個問題都解決了我用Thymeleaf來評估絕對路徑。 –

0

訪問你需要添加配置類ResourceHandler資源...

public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**") 
     .addResourceLocations("/resources/"); 
    } 

的網址,你可以使用Spring網址標籤:

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> 
<html> 
<link rel="stylesheet" href="<spring:url value="/resources/css/mystyle.css" htmlEscape="true"/>" type="text/css" /> 

<a href="<spring:url value="/home"htmlEscape="true"/>" >Home</a> 
// .... 
</html> 

對重定向可以使用「重定向:「前綴:

return "redirect:/redirectPath"; 

網上有很多例子可以使用它們點搜索...

+0

到您的答案我已經添加資源,接下來我使用HTML(而不是jsp)。 <%@taglib..%>不會在那裏炒鍋。對於重定向,我不想陷入處理重定向的循環。 –