SpringMVC学习(一)

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有一样的属性,使用方法一样。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容