专栏首页黑马【SSM_07】SpringMVC-文件上传、拦截器、异常处理器

【SSM_07】SpringMVC-文件上传、拦截器、异常处理器

一、文件上传

1. 文件上传前端

① 文件上传表单三要素
    - method = "post"
    - enctype = "multipart/form-data"
    - 上传项 type = "file"
    
② 示例    
    <form action="/file" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="username" />
        文件名:<input type="file" name="uploadfile" />
        <input type="submit" value="上传"/>
    </form>

2. 文件上传后台

① 依赖
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.3</version>
    </dependency>

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>
    
② 文件上传解析器
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 编码格式 -->
        <property name="defaultEncoding" value="UTF-8" />
        <!-- 最大上传大小 -->
        <property name="maxUploadSizePerFile" value="10240000" />
    </bean>
    
③ controller
    @RequestMapping("/file")
    @ResponseBody
    public void uploadFile(String username, MultipartFile uploadfile) throws IOException {
        //获取后缀
        String sname = uploadfile.getOriginalFilename();
        String sub = sname.substring(sname.lastIndexOf("."), sname.length());

        //修改文件名
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
        String name = sdf.format(new Date()) + new Random().nextInt(100) + "_username=" +  username + sub;

        //保存文件至磁盘
        uploadfile.transferTo(new File("C:\\Users\\Demo_Null\\Desktop\\" + name));
    }

# 多文件上传
    - 在页面写多个 file, name 不同,后台接收多个
    - 在页面写对各 file, name 相同,后台使用同名数组接收

二、SpringMVC 拦截器 [ AOP 思想的具体实现 ]

1. 相关配置

<mvc:interceptors>
    <!-- 一个拦截器,可配多个 -->
    <mvc:interceptor>
        <!-- 拦截路径 -->
        <mvc:mapping path="/**" />
        <!-- 定义的拦截器 -->
        <bean class="全限定名" />
    </mvc:interceptor>
</mvc:interceptors>

# 不拦截某个路径  <mvc:exclude-mapping path="/login/**" />
# 拦截器需要实现 HandleInterceptor 接口并复写 proHandle、hostHandle、afterCompletion方法

2. 拦截器方法执行顺序

① 单个拦截器
    - proHandle 先于 Controller 执行【返回值为 true 时放行, false 拦截】
    - Controller 执行完成后 视图渲染前 hostHandle 执行
    - 整个过程完成后 afterCompletion 执行【proHandle 放行后,不论后面是否成功,此拦截器 afterCompletion 都会执行】
② 多个拦截器
    - proHandle 顺序执行
    - hostHandle、afterCompletion 逆序执行
    # 此处顺序为 配置文件定义拦截器的先后顺序

3. 过滤器和拦截器

① 使用范围
    - 过滤器
    	* 只要是 web 项目中都可以使用 过滤器和拦截器
    - 拦截器
    	* 只有 SpringMVC 项目才能使用 拦截器
② 作用范围
    - 过滤器
    	* 配置了 /* 之后 所有资源都会被拦截
    - 拦截器
    	* 配置了 /** 之后对于 HTML、JS、CSS、img等资源不会拦截,只能拦截 Controller 的方法

三、异常处理

1. 简单异常处器(SimpleMappingExceptionResolver)

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >
    <!-- 默认异常处理 -->
    <property name="defaultErrorView" value="error" />
    
    <!-- 指定异常处理 -->
    <property name="exceptionMappings" >
        <map>
        	<entry key="异常全限定名" value="视图名称" />
        </map>
    </property>
</bean>

2. 自定义异常处理器

① 创建一个 异常类, extends Exception implement HandleExceptionResolver 并 复写 resolverException 方法
② 声明一个异常处理器
<bean id="exceptionResolver"  class="自定义异常全限定名"/>

# 只有配置了自定义异常 且 抛出了 自定义异常 才会进入异常处理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringMVC文件上传、拦截器、异常处理

    使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver

    咕咕星
  • SpringMVC【校验器、统一处理异常、RESTful、拦截器】

    前言 本博文主要讲解的知识点如下: 校验器 统一处理异常 RESTful 拦截器 Validation 在我们的Struts2中,我们是继承ActionSupp...

    Java3y
  • SpringMVC-07 拦截器+文件上传下载

    SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。

    张小驰出没
  • javaweb-springMVC-55

    项目地址:https://github.com/Jonekaka/javaweb-springMVC-55

    全栈程序员站长
  • SpringMVC知识一锅烩

    Spring简介 SpringMVC和Struts2一样都是属于表现层的框架,将前段发出的请求分发给对应的后端处理器即Controller 处理流程 用户请求被...

    李家酒馆酒保
  • SpringMVC的笔记

    使用Spring MVC,配置DispatcherServlet是第一步。 DispatcherServlet是一个Servlet,所以可以配置多个Dispa...

    包子388321
  • SpringMVC源码解析之AsyncHandlerInterceptor异步的处理器拦截器

    继承HandlerInterceptor用的异步请求处理开始之后调用的回调方法。 当处理程序开始的异步请求, DispatcherServlet退出,而不调用...

    JavaEdge
  • SpringMVC学习笔记(五) --- 异常处理、图片上传、Json数据交互、RESTful支持、拦截器

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

    挽风
  • SpringMVC:进阶

    SpringMVC 默认用 MappingJackson2HttpMessageConverter 对 JSON 数据进行转换,需要加入 Jackson 的包;...

    RendaZhang
  • SSM第八讲 SpringMVC高级特性

    昨天我们将SpringMVC拦截后缀设置为*.form代表SpringMVC会拦截*.form结尾的后缀

    易兮科技
  • SpringMVC框架之第四篇

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    海仔
  • JavaEE开发之SpringMVC中的自定义拦截器及异常处理

    上篇博客我们聊了《JavaEE开发之SpringMVC中的路由配置及参数传递详解》,本篇博客我们就聊一下自定义拦截器的实现、以及使用ModelAndView对象...

    lizelu
  • SpringMVC -- 必知必会

    SpringMVC基于模型--视图--控制器(Model-View-Controller,MVC)模式实现,属于SpringFrameWork的...

    宋先生
  • SpringMVC入门终结篇

    如果采用上面的合并配置文件,那么相当于系统一起动只有一个IOC容器,这样一部分报错,整个容器就凉凉

    大忽悠爱学习
  • Spring MVC面试整理

    Spring MVC执行过程 1. 客户端的请求提交到dispatcherServlet 2. DispatcherServ...

    李家酒馆酒保
  • SpringBoot2----拦截器和文件上传功能

    Thymeleaf 模板布局 th:fragment、th:replace、th:insert、th:remove

    大忽悠爱学习
  • SpringMVC和Struts2的区别

    搜了好多两者相关的区别,感觉这个比较全面而且排版比较有规律,就选中了。最后会发出一些其他的链接可以参考对待。

    WindCoder
  • 一文读懂SpringMVC中的文件上传与下载

    这两天研究了一下 SpringMVC 中文件上传与下载,也遇到了一些坑,这里做个总结。

    Wizey
  • Springmvc最全(必会知识合集)带Java代码示例(保姆级别讲解)包会

    (4)ModelAndView 对象需要 new, 同时作为返回值类型

    CaesarChang张旭

扫码关注云+社区

领取腾讯云代金券