前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SSM_07】SpringMVC-文件上传、拦截器、异常处理器

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

作者头像
用户8250147
发布2021-02-04 10:49:50
5270
发布2021-02-04 10:49:50
举报
文章被收录于专栏:黑马黑马

一、文件上传

1. 文件上传前端
代码语言:javascript
复制
① 文件上传表单三要素
    - 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. 文件上传后台
代码语言:javascript
复制
① 依赖
    <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. 相关配置
代码语言:javascript
复制
<mvc:interceptors>
    <!-- 一个拦截器,可配多个 -->
    <mvc:interceptor>
        <!-- 拦截路径 -->
        <mvc:mapping path="/**" />
        <!-- 定义的拦截器 -->
        <bean class="全限定名" />
    </mvc:interceptor>
</mvc:interceptors>

# 不拦截某个路径  <mvc:exclude-mapping path="/login/**" />
# 拦截器需要实现 HandleInterceptor 接口并复写 proHandle、hostHandle、afterCompletion方法
2. 拦截器方法执行顺序
代码语言:javascript
复制
① 单个拦截器
    - proHandle 先于 Controller 执行【返回值为 true 时放行, false 拦截】
    - Controller 执行完成后 视图渲染前 hostHandle 执行
    - 整个过程完成后 afterCompletion 执行【proHandle 放行后,不论后面是否成功,此拦截器 afterCompletion 都会执行】
② 多个拦截器
    - proHandle 顺序执行
    - hostHandle、afterCompletion 逆序执行
    # 此处顺序为 配置文件定义拦截器的先后顺序
3. 过滤器和拦截器
代码语言:javascript
复制
① 使用范围
    - 过滤器
    	* 只要是 web 项目中都可以使用 过滤器和拦截器
    - 拦截器
    	* 只有 SpringMVC 项目才能使用 拦截器
② 作用范围
    - 过滤器
    	* 配置了 /* 之后 所有资源都会被拦截
    - 拦截器
    	* 配置了 /** 之后对于 HTML、JS、CSS、img等资源不会拦截,只能拦截 Controller 的方法

三、异常处理

1. 简单异常处器(SimpleMappingExceptionResolver)
代码语言:javascript
复制
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >
    <!-- 默认异常处理 -->
    <property name="defaultErrorView" value="error" />
    
    <!-- 指定异常处理 -->
    <property name="exceptionMappings" >
        <map>
        	<entry key="异常全限定名" value="视图名称" />
        </map>
    </property>
</bean>
2. 自定义异常处理器
代码语言:javascript
复制
① 创建一个 异常类, extends Exception implement HandleExceptionResolver 并 复写 resolverException 方法
② 声明一个异常处理器
<bean id="exceptionResolver"  class="自定义异常全限定名"/>

# 只有配置了自定义异常 且 抛出了 自定义异常 才会进入异常处理
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、文件上传
    • 1. 文件上传前端
      • 2. 文件上传后台
      • 二、SpringMVC 拦截器 [ AOP 思想的具体实现 ]
        • 1. 相关配置
          • 2. 拦截器方法执行顺序
            • 3. 过滤器和拦截器
            • 三、异常处理
              • 1. 简单异常处器(SimpleMappingExceptionResolver)
                • 2. 自定义异常处理器
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档