资源:是网络上的一个实体,或者是网络上的一个具体信息,每一个资源对应一个特定的URI(统一资源定位符),要访问该资源,访问它的URI就可以了。
表现层:把资源的具体形式表现出来。
状态转化:每发出一个请求,就代表客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端,因此客户端想要操作服务器,必须通过某种手段,让服务器发生状态转化。在HTTP协议里面有四种基本操作来实现状态转化:GET用来获取资源、PUT用来更新资源、DELETE用来删除资源、POST用来新建资源。
REST即Representation State Transfer 表现层状态转化。
浏览器form表单只支持GET、POST请求,而DELETE、PUT等method并不支持,Spring3.0添加了一个过滤器,可以将这些请求转化为标准的http方法,使得支持GET、POST、DELETE、PUT,各种用法如下:
package com.seven.demos; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; /** * Created by hu on 2016/4/2. */ @RequestMapping("/SpringMvc") @Controller public class SpringMvcTest { private final String SUCCESS="success"; /* * 使用@RequestParam绑定请求参数 * value:参数名 * required:是否是必须的。默认是true,表示请求参数中必须包含对应的参数,若不存在,抛出异常 * */ @RequestMapping("/handle1") public String test1(@RequestParam(value = "userName",required = true)String userName,@RequestParam("age")int age){ return SUCCESS; } /* * 使用@RequestHeader绑定请求报头的属性值 * 请求头包含了若干属性,服务器可据此获知客户端的信息,通过@RequestHeader即可将请求头中的属性值绑定到处理方法的入参中 * */ @RequestMapping("/handle2") public String test2(@RequestHeader("Accept-Encoding")String encoding,@RequestHeader("Keep-Alive")long keepAlive){ return SUCCESS; } /* * 使用@CookieValue绑定请求中的Cookie值 * */ @RequestMapping("/handle3") public String test3(@CookieValue(value = "sessionId",required = false)String seesionId){ return SUCCESS; } }
此外,还可以使用POJO对象绑定请求参数值,SpringMvc会按照参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,并且支持级联属性:
/* * 支持如下的URL * .../handle4?name=hu&department.departmentId=123&department.departmentName=Officer * */ @RequestMapping("/handle4") public String test4(User user){ return SUCCESS; }
/* * 还可以使用Servlet API作为入参 * */ @RequestMapping("/hanle5") public void test5(HttpServletRequest request,HttpServletResponse response){ } @RequestMapping("/handle6") public ModelAndView test6(HttpSession session){ return null; }