SpringMVC高级

首先先完成SpringMVC基础配置,详细见https://www.cnblogs.com/maomaodesu/p/12268886.html

文件下载

web中的文件下载,两个头一个流:Content-Type,Content-Disposition,文件的输入流和respones的输出流对接

文件上传(以单个文件为例,多文件上传同理)

SpringMVC集成了FileUpload组件,可以用于文件上传

文件上传前台的条件

提交方式必须是post

表单form中必须有文件项,表单项type="file"

表单form的enctype属性是多部分表单格式,即enctype="multipart/form-data"

多部分的表单格式:

把表单根据某个随机生成的分隔符分割为多个部分。这些部分,有的是普通表单项-->key value的字符串键值对,有的是文件项(就是我们上传的文件,文件项中内容更多,包含文件名、文件长度、文件类型、文件内容...)

文件上传原理:

文件上传后台接收数据的操作

引入FileUpload的依赖

配置文件上传时的多部分表单的解析器

UserController类:uploadMethod函数的参数位置用MultipartFile类型接收,其他普通项(如String)与以前接收方式一致。文件项MultipartFile对象内部封装了提交的文件的信息

结果:

空文件夹dataStore就有了文件

打印结果:

实际开发的时候,我们通过ServletContext对象可以获取服务器中的某个目录的绝对路径。

拦截器

拦截器的作用

SpringMVC拦截器interceptor和filter的区别

类比web中的过滤器Filter理解,它们的功能类似。

实现拦截器:

Controller类:

编写拦截器类实现HandlerInterceptor接口


在springmvc的配置文件中进行配置(配置拦截的路径,一般配置为Controller的方法 例如:/user/**)

执行流程

preHandle方法,拦截器执行的第一个方法,返回值决定了是否放行。

当preHandle方法放行时,目标资源执行,执行后,返回ModelAndView。然后到达postHandle方法中。在此处并没有真正渲染视图或返回响应,意味着此处可以修改视图名称或modle中的数据。

postHandle执行完成之后,才会去渲染视图,返回响应。

当所有步骤执行完成后,执行afterCompletion方法。

三个interceptor是如何执行的?


异常处理器

异常处理思路:

异常处理的原则:

编码时,尽量减少异常的产生

明确知道某些异常是具有提示作用的,可以自行捕获处理(获取参数并查找,当参数错误时查找不到结果会抛出异常来作为提示)

其他的一些异常,无法预知的或者需要通用处理的(错误),这些异常我们使用统一的异常处理器来处理。

简单异常映射处理器SimpleMappingExceptionResolver:

只能做错误页面跳转,不灵活

自定义异常处理器HandlerExceptionResolver:

写一个类实现HandlerExceptionResolver接口,实现其中的resolveException方法处理异常

把异常处理器交给springmvc框架管理,把自己写的类配置到springmvc的容器中即可,后续所有未捕获的异常会交由springmvc的异常处理器进行处理

posted @ 2020-02-12 20:38  卯毛  阅读(249)  评论(0编辑  收藏  举报