Spring MVC 3.0实战指南

更新时间:2023-05-23 13:31:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

LOGO

Spring MVC 3.0实战指南

参考《Spring 3.x企业应用开发实战》

目录1 2 3 4 5 6 7 Spring MVC框架简介 HTTP请求地址映射 HTTP请求数据的绑定 数据转换、格式化、校验 数据模型控制 视图及解析器 其它

Spring MVC 3.0新特性 支持REST风格的URL 添加更多注解,可完全注解驱动 引入HTTP输入输出转换器 (HttpMessageConverter) 和数据转换、格式化、验证框架无缝集成 对静态资源处理提供特殊支持 更加灵活的控制器方法签名,可完全独立于 Servlet API

参考《Spring 3.x企业应用开发实战》

Spring MVC框架结构HandlerMapping

<servletName>-servlet.xml2

DispatcherServlet1 7 6

3ModelAndView

5

HandlerAdapter 4

Model

8(JSP/XML/PDF,...)

ViewResolver

Handler

View

参考《Spring 3.x企业应用开发实战》

Spring MVC框架结构package com.baobaotao.web; ... @Controller ① 将UserController变成一个Handler @RequestMapping(“/user”) ② 指定控制器映射的URL public class UserController { @RequestMapping(value = “/register”) ③ 处理方法对应的URL,相对于 ②处的URL public String register() { return “user/register”; ④ 返回逻辑视图名 } }

参考《Spring 3.x企业应用开发实战》

框架的实现者DefaultAnnotation HandlerMapping

<servletName>-servlet.xml2

DispatcherServlet1 7 6

3ModelAndView"user/register"

5

AnnotationMethod HandlerAdapter 4

Model

8register.jsp

InternalResource ViewResolver

UserController

参考《Spring 3.x企业应用开发实战》

目录1 2 3 4 5 6 7 Spring MVC框架简介 HTTP请求地址映射 HTTP请求数据的绑定 数据转换、格式化、校验 数据模型控制 视图及解析器 其它

HTTP请求映射原理WEB容器

HTTP请求报文

Spring MVC 框架

Handler 处理方法

参考《Spring 3.x企业应用开发实战》

Spring MVC进行映射的依据①请求方法 ②请求URL ③HTTP协议及版本

④ 报 文 头

⑤ 报 文 体

参考《Spring 3.x企业应用开发实战》

通过URL限定:URL表达式@RequestMapping不但支持标准的URL,还支持Ant风格(即?、*和 **的字符,参见3.3.2节的内容)的和带{xxx}占位符的URL。以下URL都 是合法的: /user/*/createUser 匹配/user/aaa/createUser、/user/bbb/createUser等URL。 /user/**/createUser 匹配/user/createUser、/user/aaa/bbb/createUser等URL。 /user/createUser?? 匹配/user/createUseraa、/user/createUserbb等URL。 /user/{userId} 匹配user/123、user/abc等URL。 /user/**/{userId} 匹配user/aaa/bbb/123、user/aaa/456等URL。 company/{companyId}/user/{userId}/detail 匹配company/123/user/456/detail等的URL。

参考《Spring 3.x企业应用开发实战》

通过URL限定:绑定{xxx}中的值@RequestMapping("/{userId}") public ModelAndView showDetail(@PathVariable("userId") String userId){ ModelAndView mav = new ModelAndView(); mav.setViewName("

user/showDetail"); URL中的{xxx}占位符可以通过 mav.addObject("user", userService.getUserById(userId)); @PathVariable("xxx")绑定到操 return mav; 作方法的入参中。 }@Controller @RequestMapping("/owners/{ownerId}") public class RelativePathUriTemplateController {

如果@PathVariable不指定参数名, 只有在编译时打开debug开关 (javac -debug=no)时才可 行!!(不建议)

@RequestMapping("/pets/{petId}") public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { … } } 参考《Spring 3.x企业应用开发实战》

通过请求方法限定:请求方法请求方法,在HTTP中这被叫做动词(verb),除了两个大家熟知的 (GET和POST)之外,标准方法集合中还包含PUT、DELETE、HEAD 和OPTIONS。这些方法的含义连同行为许诺都一起定义在HTTP规范之 中。一般浏览器只支持GET和POST方法。序号 1 请求方法 GET 说明使用GET方法检索一个表述(representation)——也 就是对资源的描述。多次执行同一GET请求,不会对系 统造成影响,GET方法具有幂等性[指多个相同请求返回 相同的结果]。GET请求可以充分使用客户端的缓存。 POST方法,通常表示“创建一个新资源”,但它既不 安全也不具有幂等性(多次操作会产生多个新资源)。 DELETE,表示删除一个资源,你也可以一遍又一遍地 操作它,直到得出结果:删除不存在的东西没有任何问 题 幂等性同样适用于PUT(基本的含义是“更新资源数据, 如果资源不存在的话,则根据此URI创建一个新的资 源”)

2 3 4

POST DELETE PUT

参考《Spring 3.x企业应用开发实战》

通过请求方法限定:代码示例示例1: @RequestMapping(value=“/delete”) public String test1(@RequestParam("userId") String userId){ return "user/test1"; } 所有URL为<controllerURI>/delete的请求由test1处理(任何请求方法)

示例2: @RequestMapping(value="/delete",method=RequestMethod.POST) public String test1(@RequestParam("userId") String userId){ return "user/test1"; } 所有URL为<controllerURI>/delete 且请求方法为POST 的请求由test1处理

参考《Spring 3.x企业应用开发实战》

通过请求方法限定:模拟请求方法通过在web.xml中配置一个 org.springframework.web.filter.HiddenHttpMethodFilter 通过POST请求的_method参数指定请求方法,HiddenHttpMethodFilter 动态更改HTTP头信息。

HiddenHttpMethodFilter

POST HTTP请求

PUT HTTP请求

Spring MVC

method=PUT&...

参考《Spring 3.x企业应用开发实战》

通过请求/请求头参数限定:示例通过请求参数限定: @RequestMapping(value="/delete", params="userId") public String test1(@RequestParam("userId") String userId){ ... }

通过请求头参数限定:

@RequestMapping(value="/show",headers="content-type=text/*")② public String test2(@RequestParam("userId") String userId){ ...

}

参考《Spring 3.x企业应用开发实战》

通过请求/请求头参数限定:更多params和headers分别通过请求参数及报文头属性进行映射,它们 支持简单的表达式,下面以params表达式为例说明,headers可以参照 params进行理解之。

"param1":表示请求必须包含名为param1的请求参数。 "!param1":表示请求不能包含名为param1的请求参数。 "param1!=value1":表示请求包含名为param1的请求参数,但 其值不能为value1。 {"param1=value1","param2"}:请求必须包含名为param1和 param2的两个请求参数,且param1参数的值必须为value1。

参考《Spring 3.x企业应用开发实战》

目录1 2 3 4 5 6 7 Spring MVC框架简介 HTTP请求地址映射 HTTP请求数据的绑定 数据转换、格式化、校验 数据模型控制 视图及解析器 其它

通过注解绑定:示意图①请求方法 ②请求URL ③HTTP协议及版本 ④ 报 文 头

⑤ 报 文 体

@RequestParam 绑定请求参数 @RequestHeader 绑定请求头参数 @CookieValue 绑定Cookie的值

@PathVariable 绑定URL中的变量

public String handle1(...) 参考《Spring 3.x企业应用开发实战》

通过注解绑定:示例@RequestMapping(value="/handle1") public String handle1(@RequestParam("userName") String userName, @RequestParam("password") String password, @RequestParam("realName") String realName){ ... }@RequestMapping(value="/handle2") public String handle2(@CookieValue("JSESSIONID") String sessionId, @RequestHeader("Accept-Language") String accpetLanguage){ ... }

参考《Spring 3.x企业应用开发实战》

通过注解绑定:小心抛出异常@RequestParam有以下三个参数。 value:参数名。 required:是否必需,默认为true,表示请求中必须包含对应的参数名,如 果不存在将抛出异常。 defaultValue:默认参数名,设置该参数时,自动将required设为false。极 少情况需要使用该参数,也不推荐使用该参数。 @RequestMapping(value="/handle1") public String handle1(@RequestParam("userName") String userName,){ ... } 上面的处理方法 ,如果HTTP请求不包含“userName”参数时,将产生异 常!! 因此,如果不能保证存在”userName”的参数,必须使用: @RequestParam(value = "userName", required = false)

参考《Spring 3.x企业应用开发实战》

使用命令/表单对象绑定所谓命令/表单对象并不需要实现任何接口,仅是一个拥有若干属性的 POJO。Spring MVC按: “HTTP请求参数名 = 命令/表单对象的属性名” 的规则,自动绑定请求数据,支持“级联属性名”,自动进行基本类型数 据转换。 @RequestMapping(value = "/handle14") public String handle14(User user) { … }

userName=xxx&password=yyy

class User{ private String userName; private String password; }

参考《Spring 3.x企业应用开发实战》

本文来源:https://www.bwwdw.com/article/2xd4.html

Top