2014-02-21 84 views
3

前幾天我問過這個問題,但現在出現了一個新問題。我的網頁需要訪問這些網址:春天 - 映射多個網址模式

/product/* //(this will be an id or anything else) 
/shopcart/* //(GET, ADD...) 
/*.html 

我必須訪問不同的HTML頁面以獲得一些webapp信息。在webapp上,你可以通過id索取一些產品,你可以看到一個詳細的網頁和他的所有規格。另外,我有一個購物車,您可以在其中添加產品,每次添加產品時都會在服務器會話中保存。

如果我想恢復有關購物車中產品的信息,我訪問/shopcart/get並將所有信息轉換爲JSON格式。我有這個配置到我的web.xml爲:

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:applicationContext.xml</param-value> 
</context-param> 

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/product/*</url-pattern> 
    <url-pattern>/shopcart/*</url-pattern> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

的問題就來了,我可以訪問/product/1從產品1得到的所有規格,但我得到同樣的,如果我使用/shopcart/1。如果我在我的控制器中指定了@RequestMapping("product")(例如),我將不得不訪問/product/product/1,我不希望這樣。我該如何解決這個問題?

這些都是我的控制器:

@Controller 
public class ProductController { 

    @RequestMapping("{id}") 
    public ModelAndView get(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @PathVariable String id) { 
     Map<String, Object> model = new HashMap<String, Object>(); 
     //data recovering 
     return new ModelAndView("product", model); 
    } 
} 

@Controller 
public class CartController { 

    @Autowired 
    private JacksonConverter JacksonConverter; 

    @RequestMapping(value = "/shopcart/get", method = RequestMethod.GET) 
    public void get(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { 
     // data recovering 
     httpServletResponse.setContentType("application/json; charset=utf-8"); 
     httpServletResponse.setStatus(HttpServletResponse.SC_OK); 
     httpServletResponse.getWriter().print(json); 
    } 
} 
+0

將調度程序映射到'/'並使用註釋映射每個控制器/方法到它們的url(s) – 2014-02-21 18:37:22

+0

我很失望:/我試圖找到一種方法來解決我的配置問題,當最簡單方式一直在那裏,但現在我無法訪問我的CSS和JS資源:S,它們不在我的'WEB-INF'中 – DaGLiMiOuX

回答

3

我得到這個問題的soluiton。

首先感謝RC他在評論中的回答。我想用它來訪問我的網址的正確方法將迎刃而解輕易改變我的servlet-mapping在我web.xml這樣:

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

並添加到我的控制器正確的路徑是這樣的:

@Controller 
@RequestMapping("product") 
public class ProductController { 

    @RequestMapping("{id}") 
    public ModelAndView get(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @PathVariable String id) { 
     ... 
    } 

@Controller 
@RequestMapping("shopcart") 
public class CartController { 

    @Autowired 
    private JacksonConverter JacksonConverter; 

    @RequestMapping(value = "get", method = RequestMethod.GET) 
    public void get(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { 
     ... 
    } 

但這不是你需要的。在我的情況下,我無法加載我的CSSJS資源。所以,你需要指定春天在哪裏你resorces,加入到這一點你的servlet配置(在我的情況dispatcher-servlet.xml):

<mvc:resources mapping="/resources/**" location="/resources/"/> 

/resources url必須在你的資源在哪裏被改變。現在,你只需要添加到您的JSP頁面和所有的資源,這將被載入:

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/resources/css/main.css"> 
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/main.js"></script> 

鏈接資源的解決方案:Spring can't load my css files

提示:如果你移動你的CSSJS資源轉換爲文件夾,如/resources/css/resources/js,不要忘記再次構建您的項目,因爲您的網頁將無法訪問它們。