JAVAEE细细看 框架07 - SpringMVC的文件上传和异常处理机制

SpringMVC文件上传与拦截器详解
本文详细介绍了SpringMVC中的文件上传机制,包括配置依赖、解析器设置、多文件上传处理以及异常处理机制。同时,深入探讨了SpringMVC拦截器的使用,从创建自定义拦截器到配置应用,全面解析其工作原理。

1.SpringMVC的文件上传

1.1 文件上传三要素

  1. 必须包含表单项type=“file”

  2. 表单的提交方式是post

  3. 表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

<h3>用户注册-文件上传</h3>
<form action="fu" method="post" enctype="multipart/form-data">
    姓名: <input type="text" name="name" /> <br/>
    年龄: <input type="text" name="age" /> <br/>
    头像: <input type="file" name="headImg" /> <br/>
    <input type="submit" value="注册">
</form>

1.2 文件上传

1.2.1 添加依赖
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.3</version>
</dependency>
1.2.2 配置文件解析器

注意:

  1. 在SpringMVC.xml中配置文件解析器

  2. 文件解析器的Id,必须为"multipartResolver"

<!--配置文件上传解析器-->
<bean id="multipartResolver"
    		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--上传文件的编码类型-->
    <property name="defaultEncoding" value="UTF-8"/>
    <!--文件上传的总大小(10M)-->
    <property name="maxUploadSize" value="10485600"/>
    <!--单个文件的大小(5M)-->
    <property name="maxUploadSizePerFile" value="5242800"/>
</bean>
1.2.3 使用

注意:

​ 1. 在Controller的方法参数中,书写MultipartFile类型的参数。

​ 2. 参数名字必须和表单中“文件上传项”的name属性保持一致

@RequestMapping("/upload")
@ResponseBody
public void fileUpload(String name, int age, MultipartFile headImg) throws IOException {

}
1.2.4 保存文件
@RequestMapping("/upload")
@ResponseBody
public void fileUpload(String name, int age, MultipartFile headImg) throws IOException {
    //获取普通项    
    System.out.println(name);
    System.out.println(age);
    
	//处理文件上传项
    //0.判断文件是否为空
    if (!headImg.isEmpty()) {
        //1.获取上传文件的文件名称
        String filename = headImg.getOriginalFilename();  //6b.jpeg
        //2.处理文件名
        filename = new Date().getTime() + "_" + filename; //1573701830347_6b.jpeg
        //3.保存该文件
        headImg.transferTo(new File("d:\\" + filename));
    }
}

1.2 多文件上传

1.2.1 表单代码
<form action="/upload" method="post" enctype="multipart/form-data">
    姓名: <input type="text" name="name" /> <br/>
    图片1: <input type="file" name="uploadFile"><br/>
    图片2: <input type="file" name="uploadFile"><br/>
    <input type="submit" value="提交">
</form>
1.2.2 后台代码

注意:

​ 多文件上传时,只要把MultipartFile类型变为数组即可。

​ 但是,要求数组名字,必须和表单中“文件上传项”的name属性保持一致

@RequestMapping("/upload")
@ResponseBody
public void fileUpload(String name, MultipartFile[] uploadFile) throws IOException {
    
}

2.SpringMVC的拦截器

2.1 拦截器概述

Spring MVC 的拦截器类, 似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。

2.2 拦截器使用

2.2.1 创建自定义拦截器

定义一个类,实现HandlerInterceptor接口,重写preHandle方法

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 		Object handler) {
        System.out.println("MyInterceptor拦截器执行了...");
        //返回true表示放行,返回false表示不放行
        return true;
    }
}
2.2.2 配置自定义拦截器

在springmvc配置文件中.配置拦截器

<!--配置拦截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--拦截所有请求-->
        <mvc:mapping path="/**"/>   
        <!--放行"/user/login"-->
        <mvc:exclude-mapping path="/user/login"/>	
        <!--配置拦截器类-->
        <bean class="com.itheima.interceptor.LoginInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>
2.2.3 注意事项

1.拦截器的拦截规则,针对的进入springmvc流程的那些请求.

2.HandlerInterceptor接口中有三个方法:

​ preHandler 在目标方法执行之前执行

​ postHandle 在目标方法执行之后,视图对象返回之前执行

​ afterCompletion 在流程都执行完毕后执行

3.拦截器可以有多个,组成拦截器链

3. SpringMVC异常处理机制

3.1 异常处理的思路

系统的Dao、Service、Controller在出现异常时,都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vDB8rRTY-1585558986178)(img/7.png)]

3.2 异常处理两种方式

① 简单异常处理器SimpleMappingExceptionResolver

② 自定义自己的异常处理器,实现HandlerExceptionResolver接口

A. 简单异常处理器

简单异常处理器,是springmvc提前做好的处理器接口, 直接配置即可使用

<!--配置简单映射异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <!--默认错误视图-->
    <property name="defaultErrorView" value="forward:/error/errorMsg.jsp"/>       
    <property name="exceptionMappings">
        <map>
            <!--除零异常视图-->
            <entry key="ArithmeticException" value="forward:/error/arithmetic.jsp"/>  
            <!--类型转换异常视图-->
            <entry key="ClassCastException" value="forward:/error/classCast.jsp"/>       
        </map>
    </property>
</bean>
B. 自定义异常处理器

定义一个类,实现HandlerExceptionResolver接口,重写方法

public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();
        //判断出现的异常是什么异常
        if (ex instanceof ArithmeticException){
            //如果是除零异常
            //跳转到"forward:/error/arithmetic.jsp"
            modelAndView.setViewName("forward:/error/arithmetic.jsp");
        }else if (ex instanceof ClassCastException){
            //如果类型转换异常
            //跳转到"forward:/error/classCast.jspp"
            modelAndView.setViewName("forward:/error/classCast.jsp");
        }else{
            //其他异常
            //就跳转到exceptionPage页面
            modelAndView.setViewName("forward:/error/exceptionPage.jsp");
        }

        return modelAndView;
    }
}

配置异常处理器

<bean id="exceptionResolver" class="com.itheima.exception.MyExceptionResolver"/>
### JavaEE SpringMVC 云借阅图书管理系统资源说明 开发基于JavaEESpringMVC的云借阅图书管理系统时,需要确保系统具备完整的功能模块高质量的代码结构。以下是关于该系统的详信息及资源获取方式。 #### 系统概述 云借阅图书管理系统使用SSM(Spring+Spring MVC+MyBatis)框架构建[^2]。系统主要实现以下功能模块: - **用户登录模块**:支持用户注册、登录与注销操作。 - **图书管理模块**:提供新书推荐、图书查询、图书借阅、图书归还等功能。 #### 技术栈 根据引用内容,以下是系统的技术栈配置要求: - **开发语言**:Java[^1] - **框架**:SSM(Spring+Spring MVC+MyBatis) - **前端框架**:Bootstrap jQuery[^2] - **数据库**:MySQL[^1] - **开发工具**:Eclipse 或 IntelliJ IDEA[^1] - **服务器**:Tomcat 8+ - **JDK版本**:JDK 1.8+ - **数据库连接配置文件**:位于 `src\main\resources\application.yml` 中 #### 源码数据库SQL文件 为了获取完整的源码数据库SQL文件,可以参考以下方法: 1. **开源平台**:许多开发者会在GitHub等开源平台上分享类似的项目。可以通过搜索关键词“JavaEE SpringMVC 图书管理系统”找到相关项目。 2. **教育机构资源**:部分高校或培训机构会提供此类项目的完整代码文档。可以联系相关机构获取资源。 3. **商业平台**:一些技术论坛或资源网站(如优快云、码云)可能提供付费下载服务。确保选择信誉良好的平台以避免安全问题。 #### 示例代码片段 以下是数据库连接配置文件 `application.yml` 的示例代码: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/library_system?useSSL=false&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver ``` 以下是简单的图书查询SQL语句示例: ```sql SELECT * FROM books WHERE title LIKE '%${keyword}%'; ``` #### 注意事项 在运行项目前,请确保完成以下步骤: - 配置好数据库连接信息[^1]。 - 使用 Maven 版本 `apache-maven-3.3.9` 构建项目[^1]。 - 启动 Tomcat 服务器并访问系统入口页面。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值