springMVC学习笔记(一)

使用@RequestMapping映射请求

除了修饰方法,还可以修饰类
- springMVC 使用 @RequestMapping注解,为控制器制定可以处理哪些URL请求

  • 在控制器的类定义及方法定义处都可标注@RequestMapping

    1. 类定义处:提供初步的请求映射信息。相对于WEB应用的根目录
    2. 方法处:提供进一步的细分映射信息。相对于类定义处的URL
      若类定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用的根目录
  • springDispatcherServlet截获请求后,就通过控制器上springDispatcherServlet
    提供的映射信息确定请求所对应的处理方法

映射请求参数,请求方法,请求头

  • 先了解基本的HTTP请求报头

    1. 请求方法
    2. 请求URL
    3. HTTP版本及协议
    4. 报文头
    5. 报文体
  • @RequestMapping除了可以使用请求URL映射请求外,还可以使用请求方法,
    请求参数,及请求头来映射请求

  • @RequestMapping的value method params headers分别代表
    请求的URL,请求方法,请求参数,请求头 的映射条件。
    它们之间是 “与” 的关系,联合使用多个条件可让请求映射更加精确

  • params 和headers支持简单的表达式

    1. param1:表示请求必须包含名为param1的请求参数
    2. !params1:表示请求不能包含名为param1的请求参数
    3. param1!=value1:表示请求包含名为param1的请求参数,但是
      其值不能为value1
    4. {“param1=value1”,”param2”}:表示请求必须包含param1
      param2两个请求参数,且param1参数的值必须为value1

SpringMVC_RequestMapping_Ant 路径

  • Ant风格资源地址支持3种匹配符

    1. 问号(?):匹配文件名中的一个字符
    2. 一个星号(*):匹配文件命中的任意字符
    3. 两个星号(**):匹配多层路径
  • @RequestMapping 还支持Ant风格的URL

    1. /user/*/createUser: 匹配 /user/aaa/createUser,/user/bbb/createUser等
    2. /user/**/createUser: 匹配 /user/createUser ,/user/aaa/bbb/createUser等
    3. /user/createUser??: 匹配 /user/createUseraa,/user/createUserbb等

@PathVariable 映射URL绑定的占位符

  • 带占位符的URL是Spring3.0新增的功能,该功能在springMVC向REST目标发展具有重大意义

  • 通过@PathVariable可以将URL中占位符绑定到控制器处理方法的入参中
    URL中的{xxx} 占位符可以通过@PathVariable(“xxx”)绑定的操作方法的入参中

REST

  • REST:(Representational State Transfer,简称REST)资源表现层状态转化,是目前最流行的一种互联网软件架构

    1. 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它
      可以使一段文本,一张图片,一首歌曲,一种服务….(一种具体的存在)
      可以用一个(URI)指向它,每种资源对应一个特定的URI。因此,URI就是每个资源独一无二的识别符。
    2. 表现层(Representation):把资源具体呈现出来的形式。
      如:文本可以用txt形式表现。或HTML,XML,JSON,甚至二进制格式表现

    3. 状态转化(State Transfer):每发出一个请求,就代表客户端和服务器的一次交互过程,
      HTTP协议:是一个无状态协议,即所有的状态都保存在服务端。因此,如果客户端想要操作服务器,就必须通过某种手段,让服务器端发生”状态转化”。这种转化石建立在表现层支行的。所以就是表现层转化。具体说就是
      HTTP协议里面的GET POST PUT DELETE。分别对应四种操作
      获取资源,新建资源,更新资源,删除资源

示例

HiddenHttpMethodFilter:浏览器Form表单只支持GET与POST请求,Spring3.0
添加了一个过滤器,可以将请求转换为标准的HTTP方法,使得支持GET POST PUT DELETE

HiddenHttpMethodFilter使用方法:
首先获取一个请求参数,参数名为”_method”

如何发送PUT DELETE请求
1. 配置HiddenHttpMethodFilter
2. 需要发送post请求
3. 表单中必须有一个隐藏域 其name=”_method” value=”PUT或DELETE”

在SpringMVC中如何得到通过REST 风格的url传过来的值:使用@PathVariable注解

请求处理方法签名

  • springmvc 通过分析 处理方法的签名,将HTTP请求信息绑定到处理方法的相应入参中

  • springMVC 对控制器 处理方法签名的限制很宽松,几乎可以按任何方式对方法进行签名

  • 必要时 可以对方法及方法的入参标注 进行相应的注解
    (@PathVariable @RequestParam @RequestHeader 等)
    springMVC框架会将HTTP请求信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理

  • 在处理方法入参处 使用@RequestParam可以把请求参数传递给请求方法

    1. value 参数名
    2. required:是否必须,默认为true,表示请求参数中必须包含对应的参数,否则会抛出异常
    3. defaultValue : required为false时,返回的默认值,
      如果不写,required为false时,会返回null
  • @RequestHeader 用来映射请求头信息,用法同@RequestParam

使用@CookieValue 绑定请求中的Cookie值

用法同@RequestParam

使用POJO对象绑定请求参数值

  • SpringMVC 会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性 如: dept.deptId ,dept.address.tel

使用servelt原生API

  • MVC的Handler方法可以接受那些ServletAPI类型的参数
    1. HttpServletRequest
    2. HtppServletResonse
    3. HttpSession
    4. java.security.Principal
    5. Local
    6. InputStream
    7. OutputStream
    8. Reader
    9. Writer

处理模型数据

  • SpringMVC 提供了以下几种途径输出模型数据
    1. ModelAndView 处理方法返回类型为ModelAndView时,方法体可通过该对象添加模型数据,
      SpringMVC会把ModelAndView 的view放到request的域对象中
    2. Map,Model:入参为
      org.springframework.ui.Model
      org.springframework.ui.ModelMap
      org.springframework.ui.Map
      时,处理发方法返回时,Map中的数据会自动添加到模型中
    3. @SessionAttributes:当模型中的某个属性暂存到HttpSession中,
      以便多个请求之间可以共享这个属性
    4. @ModelAttribute: 方法入参标注该注解后,入参的对象就后悔放到数据模型中

Model Map

  • SrpingMVC在内部使用了一个org.springframework.ui.Model接口存储模型数据

  • 具体步骤

    1. springMVC在调用方法前会创建一个隐含对象作为模型数据的存储容器
    2. 如果方法的入参为Map或Model类型 ,springMVC会将隐含模型的引用递归给这些入参
      在方法体内,开发者可以通过模型中的所有数据,也可以向模型中添加新的属性数据

SessionAttributes

  • 若希望在多个请求之间公用某个模型属性数据,则可以在控制器类上标注一个
    @SessionAttributes,SpringMVC将在模型中对应的属性暂存到HTTPSession中

** 该注解只能放在类上面

  • @SessionAttributes可以通过属性名指定需要放到会话的属性,–value
    还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中–types

    1. @SessionAttributes(types=User.class)将会隐含模型中所有类型为
      User.class的属性添加到会话中

    2. @SessionAttributes(value={“user1”,”user2”})

    3. @SessionAttributes(types={User.class,Dept.class})

    4. @SessionAttributes(value={“user1”,”user2”},types={User.class})

ModelAttribute

运行流程
1. 执行 @ModelAttribute修饰的方法:从数据库中去处对象(如User),把它放入Map,键为 对象名称的小写单词(如:user)
2. SpringMVC从Map中取出User对象,并把表单的请求参数赋给User对象的对应属性
3. SpringMVC 把上述对象传入目标方法的参数

  1. 在@ModelAttribute修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一直

你可能感兴趣的:(java,web)