SpringMVC快速入门第十一讲——SpringMVC实现Resultful服务

Restful就是一个资源定位及资源操作的风格,不是标准也不是协议,只是一种风格,是对http协议的诠释。

  • 资源定位:互联网所有的事物都可以抽象为资源,Restful风格的请求url中没有动词,只有名词,也没有参数,就像下面这样:

    https://liayun.blog.csdn.net/article/details/72514034
    
  • 资源操作:使用put、delete、post、get等不同方法对资源进行操作,分别对应添加、删除、修改以及查询。一般使用时还是以post和get为主,put和delete几乎使用不到。

例如,现在有这样一个需求:使用Restful方式实现商品信息查询。为了解决该需求,我们可以在ItemController类中添加一个如下方法。

/**
  * Resuful风格演示,/item/1
  * @param id
  * @return
  */
@RequestMapping("item/{id}") //{}就是一个占位符
public String itemQuery(@PathVariable("id") Integer ids, Model model) {
	//查询商品信息
	Item item = itemService.getItemById(ids);
	//model返回数据模型(数据模型通过Model返回)
	model.addAttribute("item", item);
	return "itemEdit";
}

@RequestMapping("item/{id}")注解中的{}表示占位符,所以请求的url可以是/item/1或者/item/2,继而可以在方法中使用@PathVariable注解来获取{}中的变量。@PathVariable注解用于将请求url中的模板变量映射到功能处理方法的参数上,也就是说当占位符参数名与方法参数名不一致时,可以通过@PathVariable注解来绑定。如果@RequestMapping注解中value属性的值为/item/{id},并且id和形参名称一致,那么@PathVariable注解中的内容就可以不用写了,即直接写为@PathVariable即可
除此之外,还要在前端控制器中针对Restful风格的请求进行配置,即将web.xml文件中的前端控制器配置改造成下面这个样子。


<servlet>
	<servlet-name>springmvc-webservlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
	<init-param>
		
		<param-name>contextConfigLocationparam-name>
		<param-value>classpath:spring/springmvc.xmlparam-value>
	init-param>
servlet>
<servlet-mapping>
	<servlet-name>springmvc-webservlet-name>
	<url-pattern>*.actionurl-pattern>
servlet-mapping>
<servlet-mapping>
	<servlet-name>springmvc-webservlet-name>
	
	<url-pattern>/url-pattern>
servlet-mapping>

在SpingMVC框架中,/即表示拦截所有请求,但不拦截jsp,/*即表示所有的都拦截,包括jsp,这里显然应该配置/,因为你想啊!假如说Controller类方法里面已经把数据处理完了,要跳转到jsp页面,如果你配置的是/*,这个jsp页面的跳转也会被拦截,那么就会报404错误了。
最后,为了测试,可以发布咱们的项目到Tomcat服务器上,并启动Tomcat服务器,在Google Chrome浏览器地址栏中输入http://localhost:8080/04-springmvc-mybatis/item/1这样的url地址进行访问,这时你就能看到如下图所示的效果了。
SpringMVC快速入门第十一讲——SpringMVC实现Resultful服务_第1张图片
但是这里有个问题,使用上面的配置后会拦截所有的请求(虽说不包括jsp),那么当然也会对静态资源进行拦截了,如此一来,DispatcherServlet也会解析静态资源,所以就会出错了。因此,我们要设置一下不让其解析静态资源,而SpringMVC中的标签可以实现对静态资源进行映射访问。如下是对js文件的访问配置:

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

SpringMVC快速入门第十一讲——SpringMVC实现Resultful服务_第2张图片
如果说我们把js文件夹放到工程的WEB-INF目录下,照理来说外界肯定是无法访问到的,但是我们非得访问呢?这时就可通过标签来对它进行映射访问了,如下图所示。
SpringMVC快速入门第十一讲——SpringMVC实现Resultful服务_第3张图片

你可能感兴趣的:(spring,mvc)