SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

使用Spring MVC框架改造超市订单系统-1 单例模式 单例模式简介 BaseDao主要完成如下工作: (1)init()方法:负责从数据库配置文件(database.properties)中获取数据库连接的初始化参数 (2)Connection getConnection()方法:负责获取数据库连接,返回Connection实例 (3)ResultSet execute(Connection,PreparedStatement,Strin... 阅读详情

2018年1月28日

功能:利用Springmvc 实现单文件上传;使用了MultipartResolver接口,入参为MultipartFile数组,区别《SpringMVC(23):使用springmvc+spring+jdbc 优化订单管理系统的示例(单文件上传功能的实现)》;
【1】项目jar包与文件框架


图1


图2

【2】View层,在useradd.jsp添加了以下代码:

   <br>
	<h5>以下为上传-多文件测试</h5>
	  <form action="${pageContext.request.contextPath }/user/uploadb" method="post" enctype="multipart/form-data">
	      <div>
		      <input type="hidden" id="errorinfo" value="${uploadFileError}">         
		                文件1:<input type="file" name="uploadFile"/><br/><br/>
	      </div>
	      <div>
		      <input type="hidden" id="errorinfo" value="${uploadFileError}">
		                文件2:<input type="file" name="uploadFile"/><br/><br/>	      
	      </div>
	      <input type="submit" value="上传"/>
   </form>   


注意之处:1、springmvc处理多文件上传,增加file标签即可,但需要注意上传文件的组件名(file的name属性)要一致,这样才能以数组的形式传递给控制器的处理方法。

显示效果:


图3

注意之处:1、文件名要全英文,中文可能会在传输乱码或者报错! 2、文件路径要全英文,中文可能会在传输乱码或者报错!


【3】 需要在springmvc配置文件进行MultipartResolver注册(springmvc-servlet.xml):

  	<!-- 配置MultipartResolver -->
  	<bean id="multipartResolver" 
  	  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  	 	<property name="maxUploadSize" value="5000000"></property>
  	 	<property name="defaultEncoding" value="UTF-8"></property> 
  	 </bean>

注意之处: 1、这里设置了请求的编码格式,设置为UTF-8,要和JSP的pageEncoding设置一样,才能便于读取;2、maxUploadSize,上传文件的大小上限,单位是字节(Byte);


【4】Controller控制器,主要是对文件上传确定后的一些后台处理(文件名称、大小、格式是否合格),因此,只需要在UserController.java文件添加处理方法:

	@RequestMapping(value="/uploadb",method=RequestMethod.POST)
	public String test2(User user,HttpSession session,
			HttpServletRequest request,
			@RequestParam(value="uploadFile",required=false)MultipartFile[] uploadFiles) throws SQLException{
		String errorInfo = null;
		String idPicPath = null;
		String workPicPath = null;
		boolean flag = true;
		//获取保存文件的绝对路径
		String path = request.getSession().getServletContext().getRealPath("statics"+File.separator+"uploadfiles");
		System.out.println("2.1 uploadFile path ===>"+path);
		
		for(int i=0;i<uploadFiles.length;i++){
			MultipartFile uploadFile = uploadFiles[i];
			if(!uploadFile.isEmpty()){
				if(i==0){
					errorInfo = "uploadFileError!";
				}else if(i==1){
					errorInfo = "uploadWpError!";
				}
				String oldFileName = uploadFile.getOriginalFilename();
				String prefix = FilenameUtils.getExtension(oldFileName);
				int filesize = 500000;
				if(uploadFile.getSize() > filesize){
					request.setAttribute("uploadFileError", "* 上传大小不得超过5000KB");
					System.out.println("* 上传大小不得超过5000KB");
					return "useradd";
				}else if(prefix.equalsIgnoreCase("jpg")
						   || prefix.equalsIgnoreCase("png")
						   || prefix.equalsIgnoreCase("jpeg")
						   || prefix.equalsIgnoreCase("pneg")){
					//上传格式正确,重命名文件
					String fileName = System.currentTimeMillis()+RandomUtils.nextInt(1000000)+"_Personal.jpg";
					System.out.println("2.2 new fileName===>"+uploadFile.getName());
					//新建这么一个文件,FILE API
					File targetFile = new File(path,fileName); 
					if(!targetFile.exists()){
						targetFile.mkdirs();
					}
					//保存
					try{
						//上传
						uploadFile.transferTo(targetFile);
					}catch (Exception e){
						e.printStackTrace();
						request.setAttribute("uploadFileError", "* 上传失败! ");
						System.out.println("* 上传失败! ");
						return "useradd";
					}
					if(i==0){
						idPicPath = path+File.separator+fileName;
						log.info("2.3 idPicPath==>"+idPicPath);
					}else if(i==1){
						workPicPath = path+File.separator+fileName;
						log.info("2.4 workPicPath==>"+workPicPath);
					}
					
				}else{
					request.setAttribute("uploadFileError", "* 上传格式错误!");
					System.out.println("* 上传格式错误!");
					return "useradd";
				}
			}
		}
		if(flag){
			return "redirect:/user/userlist";
//			user.setCreatedBy(((User)session.getAttribute("user")).getId());
////			user.setCreationDate(new Date());
//			user.setIdPicPath(idPicPath);
//			user.setWorkPicPath(workPicPath);
//			if(userService.add(user)){
//				System.out.println("2.5 success.");
//				return "redirect:/user/userlist";
//			}
		}
		return "useradd";
	}

【5】运行结果:

打印日志:

2.1 uploadFile path ===>D:\java_ee_eclipse\mmb_workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp4\wtpwebapps\springmvc5\statics\uploadfiles
2.2 new fileName===>uploadFile
18/02/02 16:31:45 INFO Controller.UserController: 2.3 idPicPath==>D:\java_ee_eclipse\mmb_workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp4\wtpwebapps\springmvc5\statics\uploadfiles\1517561127316_Personal.jpg
2.2 new fileName===>uploadFile
18/02/02 16:31:45 INFO Controller.UserController: 2.4 workPicPath==>D:\java_ee_eclipse\mmb_workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp4\wtpwebapps\springmvc5\statics\uploadfiles\1517560634935_Personal.jpg


图4



Spring mvc + Spring + Spring jdbc 整合 demo 立即下载

相关推荐

Spring MVC JDBC 项目 事例 实例

Spring spring mvc MVC jdbc JDBC 例子 项目 springMVC+jdbc完全事例,不含其他框架。 增删改差齐全,数据库oracle。表结构等没有上传,根据bean自己写很简单的

springMvc

1.spring MVC 1)MVC模型 M-Model模型层: 负责业务逻辑,包含两层 业务数据和业务处理,比如实体类,Dao,service都属于模型层 2)V-View是视图层:负责显示界面和用户交互(收集用户信息),属于视图层的组件是不包含业务逻辑和控制逻辑的jsp 3)C-Controller:是模型层与视图层的桥梁,用于控制流程,比如在servlet项目中单一控制器ActionServ...

javabasic----Java基础篇(一) 485

SpringMVC+Spring+SpringJDBC整合框架

Spring,SpringMVC,SpringJDBC整合实现了登录功能,对于刚学习SpringMVC的同学来说应该是个不错的基础框架!

Spring MVC 和Spring JDBC

简单了解SpringMVC和SpringJDBC

Elaine2391的博客 713

spring+springMvc+jdbc 简易框架整合

自己做得简易 spring+springMvc+jdbc整合,可改进内容还很多,仅仅是个demo,tomcat使用的8.0

SpringMVC+Spring+mybatis+Mysql 客户关系管理系统 可用于毕业设计

整个项目采用Maven 搭建,框架采用SpringMVC+Spring+mybatis+Mysql (内含SQL脚本),导入后可以直接运行。

SpringJDBC结合SpringMVC

Spring雪梨作业之SpringJDBC结合SpringMVC

FF小迷糊吖~ 569

Spring mvc、 Spring、 Spring jdbc 整合实例源码

Spring mvc、 Spring、 Spring jdbc 整合实例源码

SpringMVC+Spring+JDBC

一.项目需求 1.使用Spring+SpringMVC+JDBC实现用户的登录和注销操作,并添加全局的异常处理。 二.解决思路 2.1.创建工程,添加项目的依赖。 2.2.创建用户实体类。 2.3.创建数据访问层接口以及实现类。‘ 2.4.创建业务逻辑层的接口以及实现类。 2.5.创建控制器类,用来接收请求和处理请求。 2.6.配置Spring,SpringMVC以及Web.xml核心配置文件,并在Web.xml文件中加载Spring和SpringMVC的核心配置文件。 项目依赖下载地址:

qq_43498110的博客 800

原生jdbc超市订单管理系统

原生jdbc超市订单管理系统,适合新手来试炼,里面是一个完整的java Web项目

mipi协议中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)协议中,calibration(校准)和scramble(加扰)模式是两个重要的特性,它们分别用于优化数据传输的准确性和减少信号干扰。

flomingo1的专栏 2397

SSM电商直播订单管理系统1gfsp

通过这些功能的有机结合,实现订单的快速生成、处理、跟踪及售后服务,为电商企业提供全面的订单管理解决方案。它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索,使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。通过本研究,预期将开发出一套适用于电商直播场景的订单管理系统,能够显著提升订单处理效率,优化用户购物体验,为电商企业提供有力的技术支持,推动电商直播行业的健康发展。,处理前端请求并提供业务逻辑。

ck3019的博客 944

Ansys Fluent DPM模型实战:旋风分离器颗粒轨迹仿真全流程解析(附案例文件)

本文详细解析了使用Ansys Fluent中的离散相模型进行旋风分离器颗粒轨迹仿真的全流程。从几何简化、网格策略到物理模型界定,重点阐述了DPM模型的关键设置步骤,包括单向耦合假设、颗粒注入与受力配置,并提供了结果分析与优化方法,帮助工程师精准模拟气固分离过程,提升设计效率。

sunny的博客 702

【课程设计】ssm生鲜超市管理系统的设计与实现毕业设计源码261635

用户:注册登录、首页、商品信息、供应商信息、商品销售 管理员:登录、商品销售管理、用户管理、商品信息管理、采购管理、分类信息管理

专业程序开发源的博客 3682

手把手教你用certificate-manager修复Vcenter证书过期问题(附密码重置技巧)

本文详细解析了Vcenter证书过期引发的503服务不可用、密码错误等典型故障现象,并提供了使用certificate-manager工具进行系统性修复的完整步骤。文章重点阐述了证书体系原理、精准诊断方法,并分享了在SSO验证失败时通过vdcadmintool重置密码的关键技巧,帮助管理员快速恢复平台并建立预防性运维策略。

swift5iosmith的博客 457

Zemax非序列模式新手入门:从零搭建一个抛物面反射镜系统(含灯丝光源与探测器设置)

本文详细介绍了如何在Zemax非序列模式下从零搭建抛物面反射镜系统,包括灯丝光源配置、反射镜建模和探测器设置等关键步骤。通过实战指南,帮助光学设计新手快速掌握非序列模式的应用技巧,特别适合处理复杂光线传播场景如反射镜系统和杂散光分析。

weixin_28717431的博客 436

JAVA计算机毕业设计宠物销售管理系统Mybatis+系统+数据库+调试部署

JAVA计算机毕业设计宠物销售管理系统Mybatis+系统+数据库+调试部署。springboot重大疫情背景下社区互助服务系统。springboot木材产销系统的生产管理模块。springboot老年人日间照料中心管理系统。ssm+sqlserver精品旅游项目管理系统。ssm基于javaweb的家庭财务管理系统。springboot校园资料在线分享网站。springboot校园快递柜存取件系统。

lkkj99的博客 108

奔图M6700-M6800-M7100-M7200 系列打印机拆解教程?

奔图M6700-M6800-M7100-M7200 系列打印机拆解教程?

m0_58098052的博客 1591

【课程设计】springboot校园闲置物品交易系统 毕业设计 521472

校园闲置物品交易系统采用Java编程语言和Springboot框架,采用MySQL数据库来建立数据之间的转换,主要实现了首页、站点管理(轮播图、公告栏)用户管理(管理员、注册用户、卖家)内容管理(留言交流、留言分类、闲置资讯、资讯分类)商城管理(闲置商城、分类列表、订单列表)更多管理(订单处理、数据统计)等功能,为买家和卖家建立了一套科学有效的管理流程,减少了传统商品销售出现的失误,同时也方便了人们进行购物。本系统界面简洁,使用人员可以迅速掌握,有效的提高了工作效率。...

WeiXin_DZbishe的博客 3370

GEE:基于 Landsat 数据集生成(1986-2024)月度合成地表温度(LST)时间序列数据

优快云@_养乐多_本文将介绍使用 Landsat 时间序列计算(1986-2024)月度合成地表温度(LST)时间序列数据集的代码。

养乐多的博客 1711

Android 15.0 系统开机屏幕设置默认横屏显示

在15.0的系统ROM产品定制化开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从 两部分来实现,一部分是系统开机动画横屏显示,另一部分是系统屏幕显示横屏显示,从这两方面就可以做到开机默认横屏显示了

安卓兼职framework和app工程师的博客 719

SpringMVC(17):使用springmvc+spring+jdbc 优化订单管理系统的示例(新增用户的功能实现)

SpringMVC(17):使用springmvc+spring+jdbc 优化订单管理系统的示例(新增用户的功能实现)

Diligence is the mother of success. 1547

Oracle EBS FA 如何打开关闭的资产会计期间?

用户“运行折旧”,误勾选为“关闭期间”,还有一部分资产还需要操作报废和调整,希望后台打开关闭的资产会计期。

陈显平的专栏-Oracle EBS 1029

利用SpringMVC和SpringJDBC搭建一个个人博客系统 实现登陆与注册功能

这学期选了javaweb课,做了一个小的个人博客系统,因为还要准备毕业论文,实在是没时间了,先把一个只有登陆与注册功能的发上来,以后有时间在补充。JavaWeb课程项目:个人博客系统姓名:姜博文 学号:PB14203249 1.框架概述1.1系统属性1.1.1前端页面展示:html,jsp1.1.2前后端交互js,jquery1.1.3后端后端语言:java后端框架:Spring主要是使用了其Sp...

bowean的博客 7664

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SpringMVC(22):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID修改供应商明细的功能实现)

SpringMVC(22):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID修改供应商明细的功能实现)

Diligence is the mother of success. 847

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SpringMVC(20):使用springmvc+spring+jdbc 优化订单管理系统的示例(通过REST风格实现查看户信息明细的功能实现)

SpringMVC(20):使用springmvc+spring+jdbc 优化订单管理系统的示例(通过REST风格实现查看户信息明细的功能实现)

Diligence is the mother of success. 515

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: SpringMVC(23):使用springmvc+spring+jdbc 优化订单管理系统的示例(单文件上传功能的实现)
下一篇: SpringMVC(25):使用springmvc 同时上传文件与数据(数据模型或基础类型数据)的示例
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值