美文网首页
SpringMVC学习(一)

SpringMVC学习(一)

作者: 一条小袍袍YoY | 来源:发表于2017-12-31 18:06 被阅读0次

SpringMVC 学习笔记

@RequestMapping

@RequestMapping注解用于为控制器指定可以处理哪些URL请求,在类和方法定义上都可以标注,

  • 在类上定义:提供初步的映射信息,相对于web应用的根目录。
  • 在类方法上定义:提供进一步的细分映射信息,在类映射路径的基础上进行映射定义。如果类上没有定义映射,则方法上定义的映射路径相对于web应用的根目录。

DispatcherServlet在截获HTTP请求后,就通过控制器上@RequestMapping信息确定该请求的具体映射路径,从而确定该请求对应的处理方法。

@ResquestMapping请求路径映射的多种方式

  1. 根据请求路径URL,对应注解属性value。
  2. 根据请求方法,对应注解属性method。
  3. 根据请求参数,对应注解属性params。
  4. 根据请求头参数,对应注解属性headers。

上述四种映射方式可以同时使用,这样能够使请求路径的映射更加精确。

  • params、headers属性的几种用法
    • params={"param1"}:表示请求必须包含param1参数。
    • params={"!param1"}:表示请求必须不包含param1参数。
    • params={"param1=value1","param2=value2"}:表示请求必须包含param1和param2参数,但是param1的值不能是value1,param2的值必须是value2。

headers属性的用法和params属性的用法一样。

  • @ResquestMapping的映射属性value支持Ant风格的通配符注解
    • ?:匹配路径中的一个字符。
      • :匹配路径中的任意多个字符。
    • ** :匹配任意多层路径。

@PathVariable

@PathVariable映射URL绑定的占位符。通过@PathVariable可以将URL请求路径中的占位符参数绑定到对应的处理器方法的形式参数中。主要是处理“/path/{param}“这样的请求,用来将请求中的路径参数param对应到处理方法的形式参数上。

@RequestMapping(value="/path/{xxx}")
@PathVariable("xxx")

使用上述的注解方式,即可将URL中xxx绑定到处理器方法的形式参数中。

  • 如果处理器方法的形式参数名称和请求URL的占位符参数一样,则@PathVariable中可以为空。如果两者的名称不一样,则必须在@PathVariable中指定占位符参数的名称,这样才能正确绑定到方法的形式参数上。
  • 正是因为@PathVariable的特性,才使得SpringMVC支持REST风格的URL。

REST

REST:Representational State Transfer。(资源)表现层状态转化。

  • REST主要具有四种特性:

    • 资源:网络上的每一个实体,每一个URL请求的具体信息,诸如一段文字、图片、视频、音频等都可以作为一种资源,在系统中,是一种具体的存在。对于每一种资源,使用一个唯一的URI(统一资源定位符)标识。因此,对于特定资源的访问就是对特定URI的访问。
    • 表现层:把资源以何种的形式展现出来(这里的展现,是指资源在后端取出后,如何呈现给前端)。常用的可以采用JSON、XML、二进制、HTML、文本等。
    • 状态转化:状态转化指的是服务器端的状态转化。每发送一个请求,就表示客户端和服务器端的一次交互过程。HTTP协议是无状态的,即所有的状态都是保存在服务器端,HTTP请求本身并不会携带任何有关客户端和服务器端的状态。因此如果想控制服务器资源的状态,则客户端必须使用特定的方法,因为REST基于HTTP协议,因此,针对资源的状态转化对应于HTTP请求的四种方法:GET(获取)、PUT(更新)、POST(新建0和DELETE(删除)
  • HiddenHttpMethodFilter:可以将POST请求转化为PUT和DELETE请求。(form表单只支持GET和POST请求)使用HiddenHttpMethodFilter需要在web.xml中配置filter参数。

浏览器form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求,该过滤器为HiddenHttpMethodFilter。

<!--配置HiddenHttpMethodFilter,作用是可以把POST请求转化为PUT和DELETE请求-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

HiddenHttpMethodFilter的filter配置在web.xml中必须置于dispatcherservlet配置之前。

HiddenHttpMethodFilter的父类是OncePerRequestFilter,它继承了父类的doFilterInternal方法,工作原理是将jsp页面的form表单的method属性值在doFilterInternal方法中转化为标准的Http方法,即GET,、POST、 HEAD、OPTIONS、PUT、DELETE、TRACE,然后到Controller中找到对应的方法。

需要注意的是,由于doFilterInternal方法只对method为post的表单进行过滤。配置HiddenHTTPMethodFilter之后,在发送诸如PUT、DELETE请求时,应该通过form表单的形式。

<form action="..." method="post">  
        <input type="hidden" name="_method" value="put" />  
        ......  
</form>

而不是

<form action="..." method="put">  
        ......  
</form>

@RequestParam

在处理方法的形式参数上使用@RequestParam可以将请求参数传递给请求方法。主要是用来处理“/path?param1=?&&param2=?”这样的请求,提取其中的param1和param2并对应到处理方法的形式参数上

它有两个主要属性:

  • value:参数名。
  • required:是否必须。是一个boolean值,默认为true。表示请求参数中必须包含对应的参数,如果不存在,则会抛出异常。

@PathVariable和@RequestParam区别(类似于@PathParamhe和@QueryParam?)

@RequestHeader

请求头会包含若干个请求的属性信息,使用@RequestHeader可以将请求头中的属性值绑定到对应处理方法的形式参数上。

它与@RequestParam有一样的属性,使用方法一样。

@CookieValue

@CookieValue可以将请求中的cookie值绑定到处理方法的对应形式参数上。

它与@RequestParam有一样的属性,使用方法一样。

相关文章

网友评论

      本文标题:SpringMVC学习(一)

      本文链接:https://www.haomeiwen.com/subject/yqeagxtx.html