Spring MVC文件上传及全局异常处理器

添加依赖

<!--文件上传-->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

配置文件上传解析器

<!--配置文件上传解析器-->
<bean id="multipartResolver" 
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="5242880" />
    <property name="defaultEncoding" value="UTF-8" />
</bean>

测试

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    
        @RequestMapping(path="/upload")
        public String upload(HttpServletRequest request, 
                                 MultipartFile upload,Model model) throws IOException {
            System.out.println("springmvc方式的文件上传");
            //获取要上传的文件目录
            String path = 
                request.getSession().getServletContext().getRealPath("/uploads");
            System.out.println("path:"+path);
            //根据文件上传的目录创建File对象,如果不存在则创建1个File对象
            File file = new File(path);
            if(!file.exists()){
                //创建一个file对象
                file.mkdirs();
            }
            //获取文件上传名称
            String filename = upload.getOriginalFilename();
            //完成文件上传
            upload.transferTo(new File(path,filename));
    
            model.addAttribute("msg", "欢迎你 springmvc");
            return "success";
        }
    }
    
  • 在index.jsp里面定义超链接

        <form action="/account/upload" method="post" enctype="multipart/form-data">
            文件: <input type="file" name="upload"></input>
            <input type="submit" value="提交">
        </form>
    

全局异常处理器

如果不加以异常处理,错误信息肯定会抛在浏览器页面上,这样很不友好,所以必须进行异常处理。

异常处理思路

系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

1587697450668

创建异常处理器

@Component
public class CustomExceptionResolver implements HandlerExceptionResolver {

	@Override
	public ModelAndView resolveException(HttpServletRequest request,
					HttpServletResponse response, Object handler, Exception ex) {
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("message", ex.getMessage());
		modelAndView.setViewName("error");
		return modelAndView;
	}

}

测试

  • 编写controller
@Controller
@RequestMapping("/account")
public class AccountController {

   @RequestMapping("/findAccount14")
    public String findAccount14(Model model) {
        model.addAttribute("msg", "欢迎你 springmvc");
        //模拟异常信息
        int i = 10/0;
        return "success";
    }
}
  • 在index.jsp里面定义超链接
<a href="/account/findAccount14">异常处理器</a>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/323425.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql复制表的几种常用方法

遇到需要拷贝一个表及其数据的情况,总结了一下几种方法 1.使用 show create table 旧表 将结果拷贝出来,将旧表名换成新表名即可. 注意:该方法仅适用于拷贝表结构,不需要同步数据的情况 show create table 旧表名2.create table 新表 like 旧表 该语句将完全拷贝旧表结构, …

RT-Thread: 控制台调试串口波特率更改

说明&#xff1a;rt_kprintf 函数是RT 的一个调试接口使用的函数&#xff0c;波特率默认是 115200 &#xff0c;本文介绍更改这个波特率。 1.根据截图路径找到文件 serial.h 修改如下代码中关于波特率定义部分。 /* Default config for serial_configure structure */ #defin…

华为设备端口镜像设置

核心代码&#xff1a; observe-port int 编号 int 编号 mirror to observe-port both | inbound | outbound #both:将镜像端口的入和出流量同时复制到观察者端口 #inbound:将镜像端口的入流量复制到观察者端口 #outbound:将镜像端口的出流量复制到观察者端口配置后可使出入端口…

NLP论文阅读记录 - 2021 | WOS HG-News:基于生成式预训练模型的新闻标题生成

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 HG-News: News Headline Generation Based on a Generative Pre-…

特征工程-特征处理(二)

特征处理 二、时间特征处理 将原本的具体时间拆分为年月日等多个特征变量&#xff0c;同时可以引入在一天的某个时间段&#xff0c;或者是当天是否为节假日等其他条件&#xff0c;还可以进一步结合其他特征&#xff0c;进行前后一个时间段或是多个时间段时间的特征差值。 dt.…

初学者学习质量管理应怎样做?

建议有时间可以去学习下PMP的课程&#xff0c;里面包含质量管理&#xff0c;且是系统性的知识体系&#xff0c;都用得到的。 分享下质量管理七大工具&#xff0c;也是很好用的工具&#xff0c;可以学习下&#xff1a; 1. 因果图(鱼骨图) 因果图又称鱼骨图、石川图。它将问题…

如何在 SwiftUI 中使用 AccessibilityCustomContentKey 修饰符

文章目录 前言创建 User 结构体添加辅助修饰符使用新的修饰符使用修饰符来替换和覆盖数据可运行代码总结 前言 SwiftUI 3 发布了许多新的辅助功能 API&#xff0c;我们可以利用这些 API 以轻松的方式显著提高用户体验。本篇文章来聊聊另一个新的 API&#xff0c;我们可以使用 …

测试工程师必会能力之缺陷分析入门

缺陷分析也是测试工程师需要掌握的一个能力&#xff0c;但是很多时候大家只记得要提交缺陷、统计缺陷情况&#xff0c;而忽视了缺陷分析。 其实每个项目的缺陷记录都是有很大价值的&#xff1a; 在测试阶段分析当前缺陷情况&#xff0c;及时发现存在的问题并调整测试策略&…

2020年财政收支

偶感兴趣&#xff0c;花了点时间整理 有兴趣的可以参照下面的链接整理完整2022年的数据&#xff0c;2023年的数据还有12月份的数据未出&#xff0c;估计在这几天出。 附 2022年的财政收支情况 2022年基金支出预算表 2020年的社保收入是7.6万亿。 上图个税金额写错了&#xff0c…

软件测试|使用matplotlib绘制多种折线图

简介 在数据可视化领域&#xff0c;Matplotlib是一款非常强大的Python库&#xff0c;它可以用于绘制各种类型的图表&#xff0c;包括折线图。本文将介绍如何使用Matplotlib创建多种不同类型的折线图&#xff0c;并提供示例代码。 创建模版 在绘图之前&#xff0c;我们可以先…

9 微信小程序

拍卖功能 9 拍卖今日概要今日详细1.celery1.1 环境的搭建1.2 快速使用1.3 django中应用celery1.4 celery定时执行1.5 周期性定时任务 2.拍卖业务2.1 表结构2.2 数据初始化2.3 接口 9 拍卖 各位小伙伴想要博客相关资料的话关注公众号&#xff1a;chuanyeTry即可领取相关资料&…

二叉树简介

二叉树 二叉树是每个节点最多有两个子树的树结构&#xff0c;通常子树被称作“左子树”和“右子树”。 二叉树的遍历 二叉树的遍历主要有三种方式&#xff1a;前序遍历、中序遍历和后序遍历。 前序遍历&#xff1a;访问根节点 --> 遍历左子树 --> 遍历右子树中序遍历&…

基于AI视频智能分析技术的周界安全防范方案

一、背景分析 随着科技的不断进步&#xff0c;AI视频智能检测技术已经成为周界安全防范的一种重要手段。A智能分析网关V4基于深度学习和计算机视觉技术&#xff0c;可以通过多种AI周界防范算法&#xff0c;实时、精准地监测人员入侵行为&#xff0c;及时发现异常情况并发出警报…

SeaTunnel 海量数据同步工具的使用(连载中……)

一、概述 SeaTunnel 是一个非常易用&#xff0c;高性能、支持实时流式和离线批处理的海量数据处理产品&#xff0c;前身是 WaterDrop &#xff08;中文名&#xff1a;水滴&#xff09;&#xff0c;自 2021年10月12日更名为 SeaTunnel 。2021年12月9日&#xff0c;SeaTunnel 正式…

数字化和信息化概念

数字化和信息化&#xff0c;是两个不同的概念&#xff0c;它们各自有着特定的含义和应用场景。 1、数字化 数字化指的是将物理实体、过程或数据转化为数字形式的过程。这一过程中可能包括将纸质文档转化为电子文件、模拟信号转换成数字信号&#xff0c;或者是将实物产品转变…

RT-Thread: eeprom存储芯片 at24cxx软件包使用流程

说明&#xff1a;介绍 i2c 通讯接口的 eeprom at24cxx 读写测、试代码&#xff0c;代码基于 at24cxx 软件包实现。 使用步骤&#xff1a; * 1&#xff1a;在 RT-Thread Settings 中开启 【软件模拟I2C】 * 2&#xff1a;在 RT-Thread Settings 软件包中搜索 at24cxx 添加软件…

深入理解零拷贝技术

注意事项&#xff1a;除了 Direct I/O&#xff0c;与磁盘相关的文件读写操作都有使用到 page cache 技术。 粉丝福利&#xff0c; 免费领取C/C 开发学习资料包、技术视频/代码&#xff0c;1000道大厂面试题&#xff0c;内容包括&#xff08;C基础&#xff0c;网络编程&#xff…

浅讲人工智能,初识人工智能几个重要领域。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

PTA-7-4 堆排序

代码如下: #include<iostream> using namespace std; void change(int arr[], int n, int i); int main() {int n,i,end,arr[1000];cin >> n;for (i 0; i < n; i){cin >> arr[i];}//进行一次排序,把最大值放到顶端for (i n/2-1; i > 0; i--){change…

Linux 下GEO Server发布图层后,中文乱码解决方案

发布的图层&#xff0c;显示中文乱码&#xff0c;都是框框&#xff1a;如“口口” 第一步先查看Linux字符集 如下命令所示&#xff1a; 1.查看当前系统语言 echo $LANG2.查看安装的语言包 locale如果上面的命令执行后显示的是en_US.UTF-8&#xff0c;则说明当前语言系统及安…
最新文章