软件架构设计实践- 基于SSM框架 课件 第8章 Spring MVC高级功能_第1页
软件架构设计实践- 基于SSM框架 课件 第8章 Spring MVC高级功能_第2页
软件架构设计实践- 基于SSM框架 课件 第8章 Spring MVC高级功能_第3页
软件架构设计实践- 基于SSM框架 课件 第8章 Spring MVC高级功能_第4页
软件架构设计实践- 基于SSM框架 课件 第8章 Spring MVC高级功能_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于SSM框架的软件架构设计实战Software

Architecture

Design

Practice

Based

on

SSM

Framework第8章Spring

MVC高级功能12345拦截器异常处理文件上传下载静态资源访问JSON数据交换和RESTful应用拦截器拦截器拦截器的概念拦截器(Interceptor)可以拦截对处理器的调用,并允许在处理器执行前和(或)执行后进行一些操作拦截器可以为所有处理器提供统一的可插拔功能,可以让处理器专注于业务逻辑从作用看,拦截器与Servlet的过滤器有相似之处,它们的区别主要体现在过滤器会拦截<url-pattern>中配置的所有请求资源,拦截器只拦截对处理器的调用拦截器Spring

MVC中的拦截器需要实现HandlerInterceptor接口,它允许在三个时机插入处理代码,对应三个拦截器方法:处理器执行前(preHandle)处理器执行完毕(postHandle)视图渲染完成(afterCompletion)拦截器拦截器方法的执行顺序拦截器拦截器要点:preHandle中定义执行处理器代码之前要执行的操作,postHandle中定义执行处理器代码之后要执行的操作,afterCompletion中定义视图渲染完毕之后要执行的操作preHandle返回值是布尔类型,返回true表示放行,如果后面还有拦截器,则执行下一个拦截器的preHandle,如果没有其它拦截器,则执行处理器代码;返回false表示拦截,不再执行后面的代码三个方法中的Object类型参数,表示被拦截的处理器postHandle中的ModelAndView类型参数,代表处理器返回的ModelAndView拦截器配置拦截器要想拦截器起作用,还需要在配置文件中进行配置,也就是要告诉Spring

MVC要拦截哪些处理器。拦截器拦截器配置要点:<mvc:mapping>一定要有,并且要在<mvc:exclude-mapping>之前<mvc:mapping>和<mvc:exclude-mapping>都可以有多个**代表多层路径,*代表单层路径要想使用mvc命名空间,需要先声明拦截器拦截器链SpringMVC允许同时在一个处理器上配置多个拦截器,作用在一个处理器上的多个拦截器就形成了拦截器链。在配置拦截器链时,只需在<mvc:interceptors></mvc:interceptors>标签中使用多个<mvc:interceptor></mvc:interceptor>标签进行配置即可。拦截器多个拦截器的执行顺序异常处理异常处理Spring

MVC异常处理概述提供了一个统一的异常处理手段,这样一方面可以使程序员专注于业务逻辑,另一方面也可以提供一个相对友好的出错界面。SpringMVC提供了一系列的异常处理机制,它们基于一个统一的接口HandlerExceptionResolver,这一接口有多个实现类,它们以不同的方式处理不同的异常。异常处理自定义全局异常处理器:使用方法自定义异常处理类装配异常处理类异常处理异常处理类异常处理说明异常处理类里重写resolveException()方法。Exception类入参是需要处理的异常。Object类入参是触发异常的处理器,其具体类型是HandlerMethod。方法返回ModelAndView,这个ModelAndView类的对象会代替产生异常的处理器返回的ModelAndView类对象返回给前端控制器,可以在这里指定产生异常时需要渲染给客户端的视图。文件上传下载文件上传下载文件上传SpringMVC提供了MultipartResolver接口,专门用于处理文件上传。当收到请求时,前端控制器的checkMultipart()方法会调用MultipartResolver的isMultipart()方法判断请求中是否包含文件。如果请求数据中包含文件,则调用MultipartResolver的resolveMultipart()方法对请求的数据进行解析,同时将HttpServletRequest类对象封装为MultipartHttpServletRequest类对象,并将文件数据封装到MultipartFile类的对象中,传递给处理器。文件上传下载MultipartResolver接口有两个实现类:StandardServletMultipartResolver:基于Servlet实现文件上传,不需要额外的依赖项,但对容器支持的Servlet版本有要求,需要在web.xml中配置文件上传相关信息,是Spring

6推荐使用的。CommonsMultipartResolver:基于ApacheCommonsFileUpload组件,需要额外的依赖项,需要在Spring配置文件中配置相关信息。文件上传下载使用步骤:在Spring配置文件中装配多部件解析器在web.xml的前端控制器中配置multipart文件上传下载装配多部件解析器StandardServletMultipartResolver配置multipart文件上传下载上传页面文件上传下载处理器代码文件上传下载说明处理器的第一个入参类型是MultipartFile,参数名file要与表单中的file表单域的name属性相同。处理器第二个入参的类型是HttpServletRequest,这里是为了在处理器中获取保存文件的物理路径。getOriginalFilename()方法作用是获取上传文件的原始文件名。transferTo()方法用于将MultipartFile中的文件数据转移到File对象中UUID类的randomUUID()方法作用是生产一个通用唯一识别码(UniversallyUniqueIdentifier),防止文件重名。文件上传下载文件下载一般来说,在浏览器中直接请求文件地址就可以下载了,但这样做有很多缺点,如:没办法获取下载状态,比如一共多少,传输了多少,传输是否出错等没办法控制下载过程一个更好的方法是,通过服务器的文件系统,先从磁盘上把文件读取进缓冲区,然后再通过程序发送给客户端,这样就可以控制整个下载过程了。文件下载使用ResponseEntity<>实现文件下载ResponseEntity<>类可以让处理器返回一个经序列化的实体对象,除此之外,ResponseEntity还支持设置响应头和状态码,使用ResponseEntity类,可以实现文件下载。文件下载处理器代码文件上传下载说明返回类型ReponseEntity<>的泛型为byte[],这样文件的字节流会被直接写入响应体内。HttpHeaders的setContentType()方法的参数是枚举类型MediaType.APPLICATION_OCTET_STREAM,它能将响应头中的ContentType设置为application/octet-stream。setContentDispositionFormData()方法的作用是将响应头中的ContentDisposition设置为“attachment;filename=xxx:”。静态资源访问静态资源访问问题的提出在配置前端控制器的Servlt映射时,将对网站的所有请求都交给前端控制器处理。前端控制器会拦截对网站的所有请求,然后调用处理器映射器对请求路径进行解析,并最终映射为对处理器方法的调用。这一过程中,对静态资源,如图片、HTML页面、CSS文件、JS文件等的请求也会进行映射,这显然是找不到对应的处理器方法的,因此会返回404错误。静态资源访问静态资源访问方法一:配置默认Servlet原理:在web.xml中配置名为default的Servlet映射,当请求以该映射路径开头的路径时,会交由Web容器的默认Servlet(即名为default的Servlet)处理,而不是由SpringMVC的前端控制器处理。静态资源访问静态资源访问方法二:注册DefaultServletHttpRequestHandler原理:在Spring配置文件中装配一个DefaultServletHttpRequestHandler,它是SpringMVC预定义的一个处理器,它的作用就是将所有请求转发到Web容器的默认Servlet去处理。由于它具有最低的映射优先级,因此不会影响前端控制器DispatcherServlet。静态资源访问静态资源访问方法三:配置资源映射原理:在Spring配置文件中配置资源映射,可将特定路径下的文件视为静态文件,对其的请求不再交给处理器映射器处理。location属性指明静态文件的实际路径,mapping属性指明静态文件的映射路径,其含义是将以“/img”开头的路径的请求视为对静态文件的请求,并将其映射到“/static/assets/img/”路径下,而不再交给处理器映射器进行处理。JSON数据交换

和RESTful应用JSON数据交换和RESTful应用概述最理想的Web应用程序:前后端分离,即前端和后端只存在数据耦合,这样的后端程序也称为Web

API。数据交换涉及到的最重要问题就是数据的格式,需要有一种规范的格式,确保多数后台和前台技术都能解析。目前最流行的数据交换格式就是JSON。JSON数据交换和RESTful应用JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,它独立于编程语言,以纯文本来存储和表示数据,易于阅读和编写,也易于程序解析和生成,相比于XML,它占用更少存储空间,解析速度更快。JSON数据交换和RESTful应用JSON有两种数据结构:对象结构:以“{”开始,以“}”结束,中间是key:value形式的数据。期中,key必须为字符串,value可以是任意类型。多个key-value之间使用逗号(,)分割数组结构:以“[”开始,以“]”结束,中间是值的列表,用逗号分割,元素可以是多种类型。需要注意的是,如果用JSON存储单个数据,要使用数组结构,不能使用对象结构,因为对象结构要有keyJSON数据交换和RESTful应用序列化/反序列化工具:Jackson库JSON数据交换和RESTful应用处理器返回JSON方法一:使用ResponseEntity<>类处理器返回ResponseBody<>类的对象时,不再进行视图渲染,而是直接将ResponseBody<>类对象中封装的数据写入响应体中。如果我们在返回ResponseBody<>类对象时,直接将实体对象封装进去,SpringMVC就会调用相应的序列化方法,将实体对象序列化为JSON,并写入响应体内,这样就实现了处理器返回JSON。JSON数据交换和RESTful应用处理器代码JSON数据交换和RESTful应用处理器返回JSON方法二:使用@ResponseBody注解@ResponseBody注解使用在处理器方法上,使用@ResponseBody标记的处理器方法可以直接返回一个实体对象,SpringMVC会使用合适的序列化方法将其序列化后直接写入响应体。要使用@ResponseBody注解,需要在Spring配置文件中配置SpringMVC的注解驱动。JSON数据交换和RESTful应用处理器代码JSON数据交换和RESTful应用还可以在控制器类上使用@RestController注解,可以方便地使一个控制器类中的所有处理器返回JSON。JSON数据交换和RESTful应用处理器解析JSON方法一:使用RequestEntity<>类RequestEntity<>封装了整个请求,可以通过它的getBody()方法获取请求体数据,这个过程中SpringMVC会调用反序列化工具对请求体中的数据进行反序列化。JSON数据交换和RESTful应用处理器解析JSON方法二:使用@RequestBody注解@RequestBody注解用于标记处理器入参,它的作用是从请求体中读取数据,并通过适当的HttpMessageConverter进行转换后注入到其标记的实体对象内。JSON数据交换和RESTful应用REST(REpresentationalStateTransfer,表现层状态转移)的概念是一种Web应用设计风格,它描述的是在网络中客户端和服务器的一种交互形式。它的核心思想是使用URI定位资源,使用HTTP动词描述操作。如果一个架构符合REST原则,就称它为RESTful架构,相应的应用就称为RESTful应用。JSON数据交换和RESTful应用构造RESTful应用LeonardRichardson分析了百余种不同的Web服务,并根据它们与REST的兼容程度将它们分为四个等级,称为Richardson成熟度模型,它可以用于识别一个Web服务的成熟度级别,也为构建RESTfulWeb服务提供了切实可行的参考依据。JSON数据交换和RESTful应用Richardson成熟度模型Level0:POX(PlainOldXML)。除了使用XML作为数据交换,其余跟传统Web应用没有区别。Level1:资源。使用URL表示资源的位置,没有使用正确的HTTP动词。Level2:动词。正确使用了HTTP动词和HTTP状态码。Level3:超媒体。超媒体作为应用程序的状态引擎(HATEOAS,HypermediaAsTheEngineOfApplicationState)。包含了一些可发现性的自包含文档,是REST的最理想形态。JSON数据交换和RESTful应用构造RESTful应用第一步:在URL中使用资源地址,使用HTTP动词表示对资源的操作Bad:/getProducts/deleteOrder?orderId=1/getItemsByOrder?orderId=1Good:GET/products:willreturnthelistofallproductsPOST/products:willaddaproducttothecollectionGET/products/4:willretrieveproduct#4GET/orders/4/items:willretrievethelistofallitemsoforder#4GET/orders/4/items/1:willretriev

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论