标签:
Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一
Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架
Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
支持 REST 风格的 URL 请求
采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性
步骤:
–加入 jar 包
–在 web.xml 中配置 DispatcherServlet
<!-- 实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的. 默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml -->
–加入 Spring MVC 的配置文件
<!-- 配置自定扫描的包 --> <context:component-scan base-package="com.atguigu.springmvc"></context:component-scan> <!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean>
–编写处理请求的处理器,并标识为处理器
1 @Controller 2 public class HelloWorld { 3 /** 4 * 1. 使用 @RequestMapping 注解来映射请求的 URL 5 * 2. 返回值会通过视图解析器解析为实际的物理视图, 对于 InternalResourceViewResolver 视图解析器, 会做如下的解析: 6 * 通过 prefix + returnVal + 后缀 这样的方式得到实际的物理视图, 然会做转发操作 7 * /WEB-INF/views/success.jsp 8 */ 9 @RequestMapping("/helloworld") 10 public String hello(){ 11 System.out.println("hello world"); 12 return "success"; 13 } 14 }
–编写视图
Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求
1). 类定义处: 提供初步的请求映射信息。相对于 WEB 应用的根目录
2). 方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL相对于 WEB 应用的根目录
@RequestMapping 的 value、method、params 及 heads 分别表示请求 URL、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射
更加精确化。
params 和 headers支持简单的表达式:
param1: 表示请求必须包含名为 param1 的请求参数
!param1: 表示请求不能包含名为 param1 的请求参数
param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
{“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1
method取值有 RequestMethod.POST, RequestMethod.GET 等。
?:匹配文件名中的一个字符
*:匹配文件名中的任意字符
**: 匹配多层路径
URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。
@RequestMapping("/testPathVariable/{id}") public String testPathVariable(@PathVariable("id") Integer id) { System.out.println("testPathVariable: " + id); return SUCCESS; }
REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用
资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。URI 即为每一个资源的独一无二的识别符。
表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层
状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。
具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。
示例:
/order/1 HTTP GET :得到 id = 1 的 order –
/order/1 HTTP DELETE:删除 id = 1的 order –
/order/1 HTTP PUT:更新id = 1的 order –
/order HTTP POST:新增 order –
HiddenHttpMethodFilter:浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求。
1 <!-- 2 配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POST 请求 3 --> 4 <filter> 5 <filter-name>HiddenHttpMethodFilter</filter-name> 6 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 7 </filter> 8 9 <filter-mapping> 10 <filter-name>HiddenHttpMethodFilter</filter-name> 11 <url-pattern>/*</url-pattern> 12 </filter-mapping>
1 <form action="springmvc/testRest/1" method="post"> 2 <input type="hidden" name="_method" value="PUT"/> 3 <input type="submit" value="TestRest PUT"/> 4 </form> 5 <br><br> 6 7 <form action="springmvc/testRest/1" method="post"> 8 <input type="hidden" name="_method" value="DELETE"/> 9 <input type="submit" value="TestRest DELETE"/> 10 </form> 11 <br><br> 12 13 /** 14 * 如何发送 PUT 请求和 DELETE 请求呢 ? 1. 需要配置 HiddenHttpMethodFilter 2. 需要发送 POST 请求 15 * 3. 需要在发送 POST 请求时携带一个 name="_method" 的隐藏域, 值为 DELETE 或 PUT 16 * 17 * 在 SpringMVC 的目标方法中如何得到 id 呢? 使用 @PathVariable 注解 18 * 19 */ 20 @RequestMapping(value = "/testRest/{id}", method = RequestMethod.PUT) 21 public String testRestPut(@PathVariable Integer id) { 22 System.out.println("testRest Put: " + id); 23 return SUCCESS; 24 } 25 26 @RequestMapping(value = "/testRest/{id}", method = RequestMethod.DELETE) 27 public String testRestDelete(@PathVariable Integer id) { 28 System.out.println("testRest Delete: " + id); 29 return SUCCESS; 30 }
@RequestParam 来映射请求参数. value 值即请求参数的参数名, required 该参数是否必须. 默认为 true. defaultValue 请求参数的默认值
@RequestMapping(value = "/testRequestParam") public String testRequestParam( @RequestParam(value = "username") String un, @RequestParam(value = "age", required = false, defaultValue = "0") int age) { System.out.println("testRequestParam, username: " + un + ", age: " + age); return SUCCESS; }
1 /** 2 * 了解: 映射请求头信息 用法同 @RequestParam 3 */ 4 @RequestMapping("/testRequestHeader") 5 public String testRequestHeader( 6 @RequestHeader(value = "Accept-Language") String al) { 7 System.out.println("testRequestHeader, Accept-Language: " + al); 8 return SUCCESS; 9 }
1 /** 2 * 了解: 3 * 4 * @CookieValue: 映射一个 Cookie 值. 属性同 @RequestParam 5 */ 6 @RequestMapping("/testCookieValue") 7 public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) { 8 System.out.println("testCookieValue: sessionId: " + sessionId); 9 return SUCCESS; 10 }
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。
具体支持以下类型: HttpServletRequest ; HttpServletResponse ;HttpSession; java.security.Principal ; Locale InputStream ;OutputStream ;Reader ;Writer
SpringMVC RequestMapping & 请求参数
标签:
原文地址:http://www.cnblogs.com/linyueshan/p/5884413.html