SpringMvc学习笔记(二)

SpringMvc学习笔记(二)

前言

       项目最先用到了.Net MVC,其实我的Web开发经历一开始就是MVC模式,学习SpringMvc的过程中,也发现很多类似之处,学习SpringMvc过程中更注重原理,之前更注重使用。下面记录学习的一些体会。

回顾总结

框架相关

  1. DispatcherServlet前端控制器:接收request,进行response
  2. HandlerMapping处理器映射器:根据url查找Handler。(可以通过xml配置方式,注解方式)
  3. HandlerAdapter处理器适配器:根据特定规则去执行Handler,编写Handler时需要按照HandlerAdapter的要求去编写。
  4. Handler处理器(后端控制器):需要程序员去编写,常用注解开发方式。
    Handler处理器执行后结果 是ModelAndView,具体开发时Handler返回方法值类型包括 :ModelAndView、String(逻辑视图名)、void(通过在Handler形参中添加request和response,类似原始 servlet开发方式,注意:可以通过指定response响应的结果类型实现json数据输出)
  5. View resolver视图解析器:根据逻辑视图名生成真正的视图(在springmvc中使用View对象表示)
  6. View视图:jsp页面,仅是数据展示,没有业务逻辑。

注解开发

       使用mvc注解驱动mvc:annotation-driven来进行处理器映射器和适配器的配置。

       @controller注解必须要加,作用标识类是一个Handler处理器。

       @requestMapping注解必须要加,作用:

1、对url和Handler的方法进行映射。

2、可以窄化请求映射,设置Handler的根路径,url就是根路径+子路径请求方式

3、可以限制http请求的方法。映射成功后,springmvc框架生成一个Handler对象,对象中只包括 一个映射成功的method。

       注解开发中的参数绑定,默认支持:

1、默认支持很多类型,HttpServletRequest、response、session、model/modelMap(将模型数据填充到request域)

2、支持简单数据类型,整型、字符串、日期

       只要保证request请求的参数名和形参名称一致,自动绑定成功

       如果request请求的参数名和形参名称不一致,可以使用@RequestParam(指定request请求的参数名),@RequestParam加在形参的前边。

3、支持pojo类型

       只要保证request请求的参数名称和pojo中的属性名一致,自动将request请求的参数设置到pojo的属性中。

       注意:形参中即有pojo类型又有简单类型,参数绑定互不影响。

使用技巧

数据校验

       springmvc使用的是hibernate的校验框架vaildation,但是和hibernate一点关系都没有。目的是解耦前台数据检验和错误信息返回。参考博文:SpringMVC数据验证.

数据回显

       提交数据失败之后,数据在填入表单。SpringMVC学习–数据回显.

统一异常处理

       Java异常类层次结构图:

关于异常可参考博文:深入理解java异常处理机制.

springmvc中异常处理思路是:系统的dao、service、controller出现都通过throwsException向上抛出,最后由springmvc的前端控制器交由异常处理器(一个系统只有一个,由框架提供)进行异常处理。

处理的思路是:解析出异常的类型,如果是自定义的直接取出异常信息,在错误页面展示。如果不是系统自定义的,构造一个自定义的异常类型,为未知错误。提供HandlerExceptionResolver接口

RESTful

       RESTful架构:是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。参考:SPRINGMVC中的RESTFUL架构风格 .

json交互

       json格式在接口调用中、html页面中常用,格式比较简单,解析还比较方便。

说明

       文中出现的图片,文字描述有些来自互联网,但是出处无法考究,如果侵犯您的相关权益,请联系我,核实后我会马上加上转载说明。谢谢!!!

坚持原创技术分享,您的支持将鼓励我继续创作!