前几天我问过这件事,但现在出现了一个新问题。我的网页需要访问这些网址:
/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 :(得分:3)
我得到了解决这个问题的解决方案。
首先,感谢 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) {
...
}
但这不是你所需要的。在我的情况下,我无法加载CSS
和JS
资源。因此,您需要指定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 can't load my css files
提示:如果您要将CSS
和JS
资源移动到/resources/css
和/resources/js
等文件夹中,请不要忘记再次构建项目,因为您的网页不会访问它们。