zoukankan      html  css  js  c++  java
  • 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)                          

                  

  • 相关阅读:
    JavaScript中变量的相互引用
    HTTP深入浅出 http请求
    AJAX 状态值(readyState)与状态码(status)详解
    关于 contentWindow, contentDocument
    使用CSS3改变文本选中的默认颜色
    IE去掉链接虚线框的几个方法
    各浏览器的鼠标位置测试
    我是如何对网站CSS进行架构的
    Javascript之继承(原型链方式)
    PhoneGap学习地址 / PhoneGap API介绍:Events
  • 原文地址:https://www.cnblogs.com/fg-fd/p/9539673.html
Copyright © 2011-2022 走看看