Spring MVC介绍

JavaEE应用的分层模型:

  1、Domain Object(领域对象,及数据模型)层

  2、DAO(Data access Object,数据访问对象)层

  3、Service(业务逻辑)层

  4、Controller(控制)层

  5、view(表现)层

JavaEE应用的组件:

  1、表现层组件

  2、控制层组件

  3、业务逻辑层组件

  4、DAO组件

  5、领域对象组件(数据模型)

MVC思想将一个应用分成三个基本部分:Model(模型)、View(视图)、Controller(控制器)

Spring MVC与Struts相比,优势:

  1、拥有强大的灵活性,非侵入性和可配置性

  2、提供了一个前端控制器DispatcherDervlet,开发者无须额外开发控制器对象

  3、分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器

  4、可以自动绑定用户输入,并正确的转换数据类型

  5、使用一个名称/值的map对象实现更加灵活的模型数据传输

  6、内置了常用的校验器

  7、支持国际化

  8、支持多种视图技术

  9、提供了jsp标签库

Spring MVC的DespatherServlet

  继承自Httpservlet基类,是处理请求的控制器,核心功能是分发请求,分发给对应处理的Java类,Spring中称Handler

  开发Handle:

    1、实现Controller接口,Controller接口必须实现handlerRequest方法,只能处理一个单一的请求动作

    2、基于注解的控制器,可处理多个请求动作,需要在配置文件加扫描注解配置

DespathcerSelvlet装配每种组件的细节:

  1、本地化解析器(只允许一个实例)
  2、主题解析器(只允许一个实例)

  3、处理器映射器(允许多个实例)

  4、处理器适配器(允许多个实例)

  5、处理器异常解析器(允许多个实例)

  6、视图名称解析器(只允许一个实例)

  7、视图解析器(允许多个实例)

  8、文件上传解析器(只允许一个实例)

  9、FlashMap映射管理器

Spring MVC执行流程

  

  1、用户向服务器发送请求被Spring的前端控制器DispatcherSevlet截获

  2、DispatcherServlet对请求URL进行解析,得到URI(请求资源标识符),然后根据该URI调用HandleMapping获得该Handler配置的所有相关的对象,包括Handle对象以及Handle对象对应的拦截器,这些对象会被封装到一个HandleExecutionHcain对象当中返回

  3、DispatcherServlet根据获得的Handle,选择一个合适的HandlerAdapter

  4、提取请求中的模型数据,开始执行Handler(Controller)

    1)消息转换:将请求消息(如:Json、xml等数据)转换成一个对象,将对象转换为指定响应信息

    2)数据转换:对请求对请求消息进行数据转换(类型转换)

    3)数据格式化:对请求消息进行数据格式化,如将字符串转换成格式化数字或格式化日期

    4)数据验证:验证数据的有效性(长度格式等)验证结果存储到BindingResult或Error中

  5、Handler执行完成后,向DispatcherServlet返回一个ModelAndView

  6、DispatcherServlet根据返回的ModelAndView对象,选择一个合适的ViewResolver(视图解析器)

  7、ViewResolver结合ModelAndView来渲染视图

  8、将视图渲染结果返回给客户端

SpringMVC常用注解

  @Controller:提示该类为一个控制器,及Handle

  @RequestMapping:提示Spring用哪一个类的方法来处理请求

    1、value属性:将URL映射到方法上,为RequestMapping的唯一属性

    2、method属性:指该方法处理哪些请求方式,默认所有方式

    3、consumes属性:指定该方法处理何种类型的请求,如consumes="application/json"

    4、produces属性:该属性指定返回的内容类型

    5、params属性:该属性指定request中必须包含某些参数

    6、headers属性:该属性指定request中必须包含某些指定的header值

    Model与ModelMap使用

      添加:model.addAttribute("key",value);      modelMap.addAttribute("key",value); 

      取值:model.asMap().get("key");    modelMap.get("key");

    ModelAndView

  @RequestParam:用于指定将指定的请求参数赋值给方法中的形参,在形参前加

           参数:value=“参数名称”,required=true/false,default=“默认值”

  @PathVariable:可以获取请求URL中的动态参数,在形参前加

           参数:value=“名称”,默认绑定同名参数

  @RequestHeader:用于将请求的头信息区数据映射到功能处理方法的参数上

           参数:name=“绑定的参数名称”,value=“别名”,required=true/false,default=“默认值”

  @CookieValue:用于将请求的Cookie数据映射到功能处理的方法的参数上

          参数:name="绑定的名称",value=“别名”,required=true/false,default=“默认值”

  @SessionAttribute:允许我们有选择的指定Model中哪些属性需要转存到HttpSession

          参数:name,value,types

          注:只能声明在类上,不能声明在方法上

  @ModelAttribute:将请求参数绑定到model对象

  @RequestBody:

  @ResponseBody

信息转换

  HTTPMessageConverter<T>接口,将请求信息转换为一个对象,并将对象绑定到请求方法的参数中或输出为响应信息

  转换Json数据,MappingJackson2HttpMessageConverter,利用Jackson开源类包处理JSON格式的请求或响应信息

  转换XML数据,Jaxb2RootElementHTTPMessageConverter

         @XmlElement,@XmlRootElement

SpringMVC的标签库

  form标签,input标签,password标签,hidden标签,textarea标签,chechbox标签,checkboxes标签,radiobutton标签,radiobuttons标签,

  select标签,option标签,options标签,errors标签

SpringMVC的国际化

  SpringMVC的国际化是建立在Java国际化的基础之上的,也是通过提供不同国家/语言环境的消息资源,然后通过ResoutceBandle加载指定的locale对应的资源文件,再取得该资源文件中指定key对应的消息

  实现步骤:1、给系统加载国际化资源文件

       2、输出国际化:1)在视图页面上输出国际化消息,需要使用SpringMVC标签库

                2)在Controller的处理方法中输出国际化消息,需要使用org.springframework.web.servelt.support.RequestContext的getMessage()方法

  SpringMVC中选择语言区域,使用语言区域解析器

    LocaleResolver接口,其实现类:1、AcceptHeadeLocaleResolver(默认解析器)

                   2、SessionLocaleResolver

                   3、CookieLocaleResolver

    messages标签,需要导入Spring的标签库,<%taglib prefix="spring" uri="www.org/tages" %>

SpringMVC的数据转换、格式化和数据校验

  SringMVC会根据请求方法签名不同,将请求消息中的信息以一定的方式转换并绑定到请求方法参数中

  数据绑定流程

        

  数据转换

      java.beans包中提供了一个ProperyEditor接口

          缺点:

              1、只能用字符串和对象的转换,不适用于任意两个Java类型直接的转换

              2、对源对象及目标对象所在的上下文信息不敏感,在类型转换时不能利用这些上下文信息实施高级转逻辑

      ConverSionService:

              1、boolean  canConvert(Class<?> sourceType ,Class<?> tagetType)   判断是否可转型

              2、boolean  canConvert(TypeDescriptor sourceType,TypeDescriptor tagetType)

              3、<T> Tconvert(Object source,Class<?> tagetType)  将源类型转换为目标类型

SpringMVC的文件上传和下载

      SpringMVC会根据请求方法的签名不同,将请求消息中的信息以一定的方式转换并绑定到请求方法参数中

      文件上传:必须将表单的method设置为POST(SpringMVC默认只支持POST的请求,重写方法可加入自己想要的请求),并将enctype设置为mulitpatrt/form-data 

           使用Apache Commons FileUpload技术实现了一个MulitpartResolver实现类

           SpringMVC会将上传文件绑定到MulitpartFile对象中

           MulitpartFile类中方法

              1、byte[] getBytes()  获取文件数据

              2、String getContentType()  获取文件MINE类型,如imge/jpeg

              3、InputStream getInputSteam()  获取文件流

              4、String getName()  获取文件名

              5、String getDriginalFilename()  获取上传文件的原名

              6、long getSize()  获取文件字节大小

              7、blooean isEmpty()  判断文件是否为空

              8、void transferTo(File file)  将上传文件复制带本地磁盘

      文件下载

          SpringMVC提供了一个ResponseEntity类型,其可以方便的定义返回的HttpHeaders和HttpStatus

          拦截器:

              HandleInterceptorr接口:

                1、boolean preHandle(HttpsevrletRequest request,HttpServletResponse  response, Object handle)

                2、void postHandle(HttpsevrletRequest request,HttpServletResponse  response)

                3、void afterComplation(HttpsevrletRequest request,HttpServletResponse  response, Object handle,Exception exception)                          

              

原文地址:https://www.cnblogs.com/fg-fd/p/9539673.html