Spring MVC 2018-10-18

1.helloWorld

1.spring-config.xml
2.web.xml

init-param不配置,有默认文件,位于/WEB-INF/<servlet-name>-servlet.xml
3.注解方法:

@RequestMapping("/helloworld") 注解来映射请求的URL

public Stringhello(){

    System.out.println("hello World!");

    return "success"; }

通过配置试图解析器,可跳转到/WEB-INF/views/success.jsp页面

2.@RequestMapping 映射请求

1.除了修饰方法,还能修饰类

2.method属性,指定请求方式

例如:@RequestMapping(value="/testMethod", method = RequestMethod.POST)

3.params 、headers 请求参数和请求头等于或者不等于指定数值

4.支持通配符

?匹配文件名中一个字

*匹配文件名中任意字

** ** 匹配多层径

5.目标方法中取参数 @PathVariable

3.REST 资源表现层转化

GET 获取资源 /order/1

POST 新建资源 /order

PUT 更新资源 /order/1

DELETE 删除资源 /order/1

在web.xml文件中配置

4.映射请求参数

获取请求参数

get获取请求参数  order?username=ai&age=12

获取请求头参数

获取cookie中的参数

5.使用POJO对象绑定请求参数值-支持级联属性

Spring MVC 会按照请求参数名和 POJO 属性名进自动的匹配,为该对象填充属性值。支持级联属性。

6.Sevlet原生api作为参数

7.处理模型数据 ModelAndView

目标返回方法的返回值可以使ModelAndView类型

其中可以包含视图和模型类型

success.jsp

内部原理:

springmvc会把modelandview的model中的数据放到request域对象中。

8.处理模型数据的Map

可从requestScope中获取


9.参数放入session中--只能放在类的上面,不能放在方法的上面

在Controller的类上面添加注解,可通过属性和对象类型把对象放入session中

@SessionAttributes(value={"user","password"},types={String.class})

10.ModelAttribute注解

使用场景:

①注解标记的方法,会在每个目标方法执行之前被springMVC调用

②可以修饰目标方法POJO类型的入参, 其value属性值有如下作用:

>SpringMvc会使用value属性值再implicitModel中查找对应的对象,若存在则会直接传入到目标方法的入参中

>SpringMVC会把value为key,POJO类型的对象为value,存入到request中

运行流程:

1.执行该注解的方法从数据库中去除对象,把对象放入Map中,键位:User--键名需要与目标方法的入参类型的第一个字母小写的字符串一致

2.springmvc从Map中取出User对象,并把表单的请求参数赋值给该User对象的对应属性

3.springmvc把上述对象传入目标方法的参数。

源码分析的流程:

1.调动@ModelAttribute注解修饰的方法,实际上把@ModelAttribute方法中Map的数据放在了implicitModel中。

2.解析请求处理器的目标参数,实际上目标参数来自于WebDatBinder对象的target属性

2.1创建WebDataBinder对象:

① 确定objectName属性:若传入的attributeName是空串,则objectName为类名第一个字母小写。

注意:attributeName.若目标方法的POJO属性使用了@ModelAttribute来修饰,则attributeName值即为@ModelAttribute的value属性值。

② 确定target属性:

>在implicitModel中查找,attributeName对应的属性值。若存在,ok。

>若不存在:则验证当前Handler是否使用了@SessoinAttribute进行修饰,若使用了,则尝试从Session中获取attrName所对应的属性值。若Session中没有对应的属性值,则抛出异常。

>若Handler没有使用@SessionAttribute进行修饰,或@SessionAttribute中没有使用value值指定的key和attrName相匹配,则通过反射创建了POJO对象。

2.2 spingmvc把请求表单的请求参数赋给了WebDataBinder的target对应的属性

2.3.SpringMvc会把WebDataBinder的attrName和target给到implicitModel

2.4把WebDataBinder的target作为参数传递给目标方法的入参


11.springMVC如何确定pojo的类型

12.视图解析器

无论返回String、View或ModelMap等类型,SpringMVC会在内部装配称一个ModelAndView对象,包含逻辑名和模型对象的视图。

SpringMVC借助视图解析器(ViewResolver)得到最终的物理视图-View对象。

视图对象由视图解析器负责实例化,由于是无状态的(每个请求创建新的对象),不会有线程安全问题。

13.mvc:view-controller标签

可直接按相应转发的页面,而无需进过Handler的方法,在spring 配置xml文件中添加

<mvc:view-controller path="/success" view-name="success"></mvc:view-controller>

使用该标签,需使用mvc:annotation-driven标签,否则controller不起作用

<mvc:annotation-driven></mvc:annotation-driven>

14.自定义视图

1.在spring配置文件中配置,通过order设置优先级,数值越小约高,默认视图解析器优先级最低

<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="100"></bean>

2.创建视图类,实现View接口,并进行@Controller注释

3.返回字段为类名即可调用视图

15.重定向

在目标方法返回的路径前加 forward:/ 和redirect:/

16.CRUD

一、按照helloWorld进行配置,再为了能够获取到delete和put请求

把post请求转为delete或put请求

web.xml配置

二、增加操作,使用spring的表单标签,在jsp页面中添加以下代码

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

form表单标签可以更快速的开发出表单页面,且更方便的进行表单值的回显,可通过modelAttribute属性指定绑定的模型属性,若没有指定该属性,则默认从request域对象中读取command的表单bean,如果该属性不存在,则会发生错误。request域中的对象,即在handler中存入map的对象。path:表单字段,对应html元素的那么属性,支持级联属性

<form:form action="emp" method="post" modelAttribute="employee">

    LastName:<form:input path="lastName"></form:input>

</form:form>

三、删除操作

1.SpringMVC处理静态资源

问题:优雅的REST风格的资源URL不希望带.html或.do等后缀。若将DispatcherServlet请求映射配置为/,则SpringMVC将获取WEB容器的所有请求,包括静态资源的请求,SpringMVC会将他们当成一个普通的请求处理,因此找不到对应的处理器将导致错误。

解决:再SpringMVC的配置文件中配置

<mvc:default-servlet-handler/><mvc:annotation-driven></mvc:annotation-driven>

default-servlet-handler 将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,它会进入DispatcherServlet的请求进行筛选,如果发现是没有经过映射的请求,就将请求交由WEB应用服务器默认的Servlet处理。如果不是静态资源的请求,才由DispatcherServlet继续处理。

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

推荐阅读更多精彩内容

  • 不知如何向你开口 我这贪生怕死的焦虑 做了最坏的打算 或许就能听到医生说好的期望 病友交流经历 竟是有些自我怀疑的...
    小玛蟈阅读 124评论 0 0
  • 大暑的清晨,滨江风光带的大堤上已经是人头攒动,有晨练跑步的、有跳广场舞的大爷大妈、有劳作的园林工人、还有抖空竹、打...
    老果树阅读 187评论 4 3
  • 幼儿床是孩子休息主要地方,为了让孩子安心睡眠,不可设在横梁下,不可面向有强烈阳光的窗户,不可太靠近窗户或落地窗,不...
    栩樦阅读 328评论 0 0
  • 夜深了…我还是翻来覆去的无法入睡,正因为住的地方太靠街边,街边夜宵摊偶尔会传来一阵阵酗酒猜拳的吵闹声,我起了床点着...
    钉子户111阅读 173评论 0 0
  • 我的生活不能没有酒 张 敏 我的生活不能没有酒 但我决不是嗜酒如命的酒徒 我怕我的血管萎缩 热血再不会燃烧 ...
    禹乡墨韵书画阅读 674评论 3 12