首先先完成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是如何执行的?