SpringMVC了解

MVC之视图

  • 概念

mvc是以设计界面应用程序为基础的的设计思想,通过分离模型 视图和控制器在应用程序中的角色,将业务逻辑从界面中解耦。
模型负责封装应用程序数据在视图层展示。
视图仅仅展示这些数据,不包括任何业务逻辑
控制器负责接收来自用户的请求,调用后台服务来处理这些业务逻辑,并收集这些数据以及准备模型在视图层展示。

常见框架: 运行性能从上到下。。。开发效率正好基本相反。
Jsp+servlet:
Struts1
Springmvc
Struts2+freemarker
Struts2+ognl

Springmvc
概念
轻量级web框架,使用了MVC框架模式的思想,将web层进行职责解耦,基于请求驱动,即使用请求-响应模型。提供了灵活的数据验证 格式化和数据绑定机制,约定大于配置的契约式编程。

好处
1. 简单 干净 简洁的进行web层开发,天生与spring集成。
2. 强大的约定大于配置的契约式编程。
3. 支持灵活的URL到页面控制器的映射。
4. 非常容易与其他视图技术集成。数据模型不再API中。放在一个model中(map数据结构实现),容易被其他框架使用
5. 灵活的数据验证 格式化和数据绑定机制。灵活的本地化解析
6. 更加简单的异常处理
7. 对静态资源的支持,支持Restful风格。
8. 测试简单

Springmvc流程分析
基于请求驱动的web框架,使用前端控制器模式进行处理,是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理来进行设计,再根据请求映射规则分发给相应的页面控制器进行处理。

执行步骤
1. 用户发送请求,请求被springmvc前端控制器捕获
2. 前端控制器对请求的URL解析获取请求URI,根据URI调用HandlerMapping
3. 前端控制器获得返回的HandlerExecutionChain,包括Handler和对应的拦截器
4. 根据HandlerExecutionChain,选择合适的HandlerAdapter,如果成功获得,拦截器会执行preHandler方法。
5. HandlerAdapter根据请求的Handler适配,并执行相应的Handler。
HandlerAdapter:
提取Request中的模型数据,填充Handler入参,开始执行Handler。
在入参过程中,根据配置spring将做额外的工作。

    HttpMessageConveter: 
        将请求信息转换成一个对象,将对象转换成指定的响应信息。
    数据转换:
        对请求信息进行数据转换,string转换成Integer和double等
    数据格式化:
        对请求信息进行数据格式化,string 转换成 格式化数字 和 格式化日期等
    数据验证:
        验证数据的有效性(长度  格式等),结果存在BindingResult 或则 Error中

6. Handler执行完毕,返回一个ModelAndView。
7. HandlerAdapter适配器将执行结果返回给前端控制器。
8. 前端控制器收到ModelAndView后,请求对应的视图解析器。
9. 视图解析器解析后返回对应View。
10. 渲染视图并返回渲染后的视图给前端控制器。
11. 前端控制器将页面响应给用户或则客户端。

Springmvc优势
1. 清晰的角色划分
2. 分工明确
3. 和spring无缝集成
4. 可适配,通过HandlerAdapter可以支持任意的类作为处理器。
5. 可定制,HandlerMapping ViewResolver等能够非常简单的定制。
6. 功能强大的数据验证 格式化和绑定机制。
7. 利用spring提供的Mock对象能够非常简单的进行web层单元测试
8. 本地化主题的解析的支持,更容易进行国际化和主题的切换。
9. 强大的JSP标签库。还有Restful风格支持,简单的文件上传,约定大于配置的契约式编程,基于注解的零配置支持等。

RESTful: 一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。

Spring配置
Web.xml中定义servlet定义请求分发器

Springmvc。Xml中
配置扫描包

请求映射 处理器与适配器配置

配置视图解析器
配置消息转换器

参数的绑定

简单数据类型
值必须存在,不传可以通过默认值代替
包装类型
值可以为空
字符串类型

数组类型

Vo类型

List类型
实体类要定义list属性

Set类型

Map数据类型
实体类有map属性

@SessionAttributes
用于声明session级别存储的属性,放置在处理类上。

请求转发和重定向
方法返回值中没有redirect就是转发,有就是重定向
会乱码
Return “redirect:。。。jsp页面地址。。。”
不会乱码
Attr。AddAttribute(…)
Return “redirect:地址”

Json数据开发
@ResponseBody
将controller方法的返回对象,通过适当的HttpMessageConveter转换为制定格式后,写入到response对象的body区域。
返回数据不是html页面,是其他格式数据时使用

@RequestBody
读取request请求的body部分数据,使用那个HttpMessageConveter进行解析,把相应的数据绑定到要返回的对象上,再把HttpMessageConveter返回的对象数据绑定到controller的方法参数上。

Json
JSON 是一种轻量级的数据格式,他基于 javascript 语法的子集,即数组和对象表示。由于使用的是 javascript 语法,因此JSON 定义可以包含在javascript 文件中,对其的访问无需通过基于 XML 语言来额外解析

 JSON不仅减少了XML解析带来的性能问题和兼容性问题,而且对于javascript来说非常容易使用,可以方便的通过遍历数组以及访问对象属性 来获取数据,其可读性也不错,基本具备了结构化数据的性质
JSON 另外一个优势是跨域可行性

拦截器 interceptor
拦截请求并进行相应的处理,权限验证 是否登录验证等

2种实现方法
实现接口
继承适配器

拦截器配置

Spring文件上传

Spring全局异常处理
3种方式
1. 使用springmvc提供的简单异常处理器
集成简单 良好的扩展性 对已有的代码没有入侵性等优点
仅能获取异常信息,要获取其他信息时不适用

  1. 实现spring的异常处理接口HandlerExceptionResolver自定义自己的异常处理器
    集成简单 良好的扩展性 对已有的代码没有入侵性等优点
    能获取异常信息和导致异常出现的对象,有利于提供更详细的异常处理信息

  2. 使用@ExceptionHandler注解实现异常处理
    集成简单 扩展性好
    无需spring配置,只需要controller层继承这个BaseController就好
    对已有代码有入侵,需要继承
    不能获取异常意外的信息。
    未捕获的异常处理
    在web.xml中配置错误页面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值