Spring MVC

什么叫MVC

模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计思想。它主要通过分 离模型、视图及控制器在应用程序中的角色将业务逻辑从界面中解耦。通常,模型负责封装应用程序数 据在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来自用户的请 求,并调用后台服务(service或者dao)来处理业务逻辑。


Spring MVC是什么?

Spring MVC是Spring家族中的一个web成员,它是一种基于Java的实现了Web MVC设计思想的请求 驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指 的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring MVC也是要简化我们日常Web 开发的。

Spring MVC是服务到工作者思想的实现。中央控制器是DispatcherServlet;应用控制器拆为处理器 映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;支持本地化/国 际化(Locale)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大 的约定大于配置(惯例优先原则)的契约式编程支持。


Spring MVC 请求处理流程分析

Spring MVC框架也是一个基于请求驱动的Web框架,并且使用了前端控制器模式(是用来提供一个集 中的请求处理机制,所有的请求都将由一个单一的处理程序处理来进行设计,再根据请求映射规则分发 给相应的页面控制器(动作/处理器)进行处理。首先让我们整体看一下Spring MVC处理请求的流程:

1. 首先用户发送请求,请求被SpringMvc前端控制器(DispatherServlet)捕获;

2. 前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI,调用HandlerMapping;

3. 前端控制器(DispatherServlet)获得返回的HandlerExecutionChain(包括Handler对象以及 Handler对象对应的拦截器);

4. DispatcherServlet 根据获得的 HandlerExecutionChain,选择一个合适的HandlerAdapter。(附 注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法);

5. HandlerAdapter根据请求的Handler适配并执行对应的Handler;HandlerAdapter(提取Request 中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程 中,根据配置,Spring将做一些额外的工作: HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定 的响应信息。 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等数据格式化: 数据格式化。 如将字符串转换成格式化数字或格式化日期等 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中)

6. Handler执行完毕,返回一个ModelAndView(即模型和视图)给HandlerAdaptor

7. HandlerAdaptor适配器将执行结果ModelAndView返回给前端控制器。

8. 前端控制器接收到ModelAndView后,请求对应的视图解析器。

9. 视图解析器解析ModelAndView后返回对应View;

10. 渲染视图并返回渲染后的视图给前端控制器。

11、最终前端控制器将渲染后的页面响应给用户或客户端 


Spring MVC 优势

1. 清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映(HandlerMapping)、 处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对 象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

2. 分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;

3. 和Spring 其他框架无缝集成,是其它Web框架所不具备的;

4. 可适配,通过HandlerAdapter可以支持任意的类作为处理器;

5. 可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;

6. 功能强大的数据验证、格式化、绑定机制;

7. 利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;

8. 本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

9. 强大的JSP标签库,使JSP编写更容易。

还有比如RESTful(一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条 件。它主要用于客户端和服务器交互类的软件,目前了解即可)风格的支持、简单的文件上传、约定大 于配置的契约式编程支持、基于注解的零配置支持等等。


Spring MVC 环境搭建

1.开发环境

Idea + Maven + Jdk1.8 + Jetty

2.新建 Maven webApp

Idea 下创建 springmvc01 工程

3.pom.xml 坐标添加

4.配置 web.xml

        spring.xml 配置

        页面控制器的编写

        添加视图页面

        启动 jetty 服务器


URL 地址映射配置

@RequestMapping

通过注解 @RequestMapping 将请求地址与方法进行绑定,可以在类级别和方法级别声明。类级别的 注解负责将一个特定的请求路径映射到一个控制器上,将 url 和类绑定;通过方法级别的注解可以细化 映射,能够将一个特定的请求路径映射到某个具体的方法上,将 url 和类的方法绑定。

映射单个 URL

@RequestMapping("") 或 @RequestMapping(value="")

映射多个 URL

@RequestMapping({"",""}) 或 @RequestMapping(value={"",""})

映射 URL 在控制器上

用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径


参数绑定

客户端请求的参数到控制器功能处理方法上的参数的绑定,对于参数绑定非常灵活。

基本数据类型

通过注解 @RequestParam 标记一个形参为请求参数。

(注解声明在形参的前面) * 可以通过注解的属性设置相关内容 * 设置参数的参数名

(别名) name 

  (@RequestParam(defaultValue = "18", name = "userAge")

包装类型

字符串类型

数组类型

JavaBean 类型

List 类型

此时 User 实体需要定义对应 list 属性。(对于集合的参数绑定,一般需要使用 JavaBean 对象进行包 装)

Set 类型

Set 和 List 类似,也需要绑定在对象上,而不能直接写在 Controller 方法的参数中。但是,绑定Set数 据时,必须先在Set对象中add相应的数量的模型对象。

Map 类型

Map最为灵活,它也需要绑定在对象上,而不能直接写在Controller方法的参数中。


请求转发与重定向

SpringMVC 默认采用服务器内部转发的形式展示页面信息。同样也支持重定向页面。

重定向

重定向是发一个302的状态码给浏览器,浏览器自己去请求跳转的网页。地址栏会发生改变。

重定向以 redirect: 开头

页面中获取参数值

        ${param.参数名}

请求转发

请求转发,直接调用跳转的页面,让它返回。对于浏览器来说,它无法感觉服务器有没有forward。 地址栏不发生改变。可以获取请求域中的数据。

请求转发以 forward: 开头

页面中获取数据

        获取传递的参数:${param.参数名}

        获取请求域的数据:${请求域中设置的名称}


 JSON 数据开发

基本概念Json

在企业开发中已经作为通用的接口参数类型,在页面(客户端)解析很方便。SpringMVC 对于 json 提供了良好的支持,这里需要修改相关配置,添加 json 数据支持功能

@ResponseBody

该注解用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式 后,写入到 Response 对象的 body 数据区。

返回的数据不是 html 标签的页面,而是其他某种格式的数据时(如 json、xml 等)使用(通常用于 ajax 请求)。

@RequestBody

该注解用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行 解析,然后把相应的数据绑定到要返回的对象上 ,再把 HttpMessageConverter 返回的对象数据绑定到 controller 中方法的参数上。


使用配置

.添加 json相关坐标

修改配置文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值