繁体   English   中英

Spring - 映射多个url-pattern

[英]Spring - Mapping multiple url-pattern

几天前我曾问过这个问题,但现在出现了一个新问题。 我的网页需要访问这些网址:

/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);
    }
}

我得到了解决这个问题的解决方案。

首先,感谢RC在评论中的回答。 我想用来访问我的网址的正确方法可以轻松地将我的web.xml servlet-mapping更改为:

<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资源。 所以,你需要在Spring中指定你的resorces,将它添加到你的servlet配置中(在我的例子中是dispatcher-servlet.xml ):

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

必须在资源所在的位置更改/resources网址。 现在,您只需将其添加到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无法加载我的css文件

提示 :如果要将CSSJS资源移动到文件夹(例如/resources/css/resources/js ,请不要忘记再次构建项目,因为您的网页不会访问它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM