springMVC数据校验与单文件上传
spring表单标签:
<fr:from/> 渲染表单元素
<fr:input/>输入框组件
<fr:password/>密码框组件标签
<fr:hidden/>隐藏框组件标签0
<fr:textarea/>多行输入框组件标签
<fr:radiobutton/>单选框组件标签
<fr:checkbox/>复选框组件标签
<fr:select/>下拉列表组件标签
<fr:error/>显示表单数据校验所对应的错误信息
数据校验:
JSR 303是Java为Bean数据合法性检验所提供的标准框架。JSR 303通过在Bean属性上标注类似于@NotNull,@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。
JSR 303约束
@Null 被注解的元素必须为空
@NotNull 被注解的元素必须不为空
@AssertTrue 被注解的元素必须为true
@AssertFalse 被注解的元素必须为false
@Min(value) 被注解的元素必须有一个数字,其值必须大于等于指定的最小值
@Max(value) 被注解的元素必须有一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注解的元素必须有一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注解的元素必须有一个数字,其值必须小于等于指定的最大值
@Size(max,min) 被注解的元素的大小必须在指定的范围内
@Digits(integer,fraction) 被注解的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注解的元素必须是一个过去的日期
@Future 被注解的元素必须是一个将来的日期
@Pattern(value) 被注解的元素必须符合指定的正则表达式
Spring MVC支持JSR 303标准的校验框架,Spring的DataBinder在进行数据绑定时,可用时调用校验框架来完成数据校验工作,非常方便简洁。在Spring MVC中,可以直接通过注解驱动的方式来进行数据校验。
在User.java中需要做验证的属性上标注校验注解后,下一步就需要在Controller中使用注解所声明的限制规定来进行数据的校验,由于<mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在Controller的处理方法的入参上标注@Valid注解即可让SpringMVC在完成数据绑定之后,执行数据校验的工作。
注意:@Valid注解标示的参数后面,必须紧挨着一个BindingResult参数,否则Spring会在校验不通过时直接抛出异常。
数据校验实例:
<!--后台数据验证-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.1.GA
</version>
</dependency> <!--jboss logging-->
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.0.Final</version>
</dependency> <!--validation api-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA
</version>
</dependency> <!--slf4j api-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
2.配验证器:LocalvalidatorFactoryBean类
属性:HibernateValidator
<!--配置包扫描器-->
<!--配置包扫描器-->
<context:component-scan base-package="cn.Hibernate"></context:component-scan>
<bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
</bean> <!--mvc注解驱动-->
<mvc:annotation-driven validator="myValidator"></mvc:annotation-driven>
3.实体类打标记:
public class UserInfo { @Min(value =0,message = "成绩最小值为{value}")
@Max(value = 100,message = "最大成绩值为{value}")
private Integer score; @NotEmpty(message = "手机号不允许为空")
@Pattern(regexp = "^1[3456789]\\d{9}$",message = "手机号不正确")
private String phone; @NotEmpty(message = "用户名不能为空")
@Size(min = 3,message = "名字至少3个字符")
private String name;
4.Controller
@Controller
public class CollerHiber {
@RequestMapping("/first")
public ModelAndView doFirst(@Valid UserInfo info, BindingResult bindingResult) {
ModelAndView mv = new ModelAndView();
mv.setViewName("/index.jsp");
int errCount = bindingResult.getErrorCount();
if (errCount > 0) {
//证明模型试验失败
FieldError score = bindingResult.getFieldError("score");
FieldError name = bindingResult.getFieldError("name");
FieldError phone = bindingResult.getFieldError("phone");
if (score != null) {
mv.addObject("scoremsg", score.getDefaultMessage());
}
if (name != null) {
mv.addObject("namemsg", name.getDefaultMessage());
}
if (phone != null) {
mv.addObject("phonemsg", phone.getDefaultMessage());
}
mv.setViewName("/Hiber.jsp");
}
return mv;
}
}
创建一个页面,用来实现代码的展示:
当校验都输入正确之后就会跳转到下一个页面,如图所示:
单文件上传
单文件上传:
MultipartResolver 用于处理上传请求,将上传请求包装成可以直接获取文件的数据,从而方便操作,他的两个实现类:StanderdServletMultipartResover和CommonsMultipartResolver.
*StanderdServletMultipartResover:使用了servlet3.0标准的上传方式。
*CommonsMultipartResolver:使用了Apache的commons-fileupload来完成具体的上传操作。
使用CommonsMultipartResolver来完成上传,具体步骤如下:
1.导入jar文件
需要使用Apache Commons FileUpload组件,因此要在工程中导入commons-io-2.4jar,commons-fileupload-1.2.2jar.
2.配置MultipartResolver
首先使用CommonsMultipartResolver配置一个MultipartResolver解析器,关键实例如:
//配置MultipartResolver,用于上传文件,使用spring的commonsMultipartResolver
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="50000"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
*defaultEncoding:请求的编码格式,默认为ISO-8859-1,此处设置为UTF-8(defaultEncoding必须和JSP的pageEncoding设置一致,以便正常读取表单内容)
*maxUploadSize:上传文件大小上限,单位为字节。
实现文件上传的流程:Spring MVC会将上传文件绑定到MultipartFile对象中,MultipartFile提供了上传文件内容,文件名等。最后通过其transferTo()方法将文件存储到服务器上。
(1)MultipartFile对象作为控制器处理方法的入参(@RequeestParam(value="idPicPath",required=false)MultipartFilevattach),从MultipartFile对象中,可以获取上传文件的相关信息,其提供的方法如:
getBytes() : byte[]
getContentType() :String
getInputStream() :InputStream
getName() :String
getOriginalFilename() :String
getSize() :long
isEmpty() :boolean
transferTo(File) :void
(2)在处理方法中,首先通过MultipartFile对象是否为空来判断是否有上传的文件。若不为空,在进行上传处理,否则直接进行其他数据字段的常规保存。
if(!attach.isEmpty()){
//...上传操作
}
//调用userService.add(user)方法保存新增数据
(3)*定义上传目标路径,关键实例如:
String path=request.getSession().getServletcontext().getRealPath("statice"+File.separator+"uploadfiles");
*获取原文件名,关键代码如下:
String oldFileName=attache.getOriginalFilename();
*获取原文件后缀并进行判断:
String prefix=FilenameUtils.getExtension(oldFileName);
*获取原文件大小,并与规定的上传大小进行比较,若超过规定大小。
int filesize=500000;
if(attach.getSize()>filesize){
requset.setAttribute("uploadFileError","*上传文件大小不得超过500KB");
return "useradd";
}
单文件上传实例:
首先导入架包:
<!--文件上传的jar包-->
<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>1.4</version>
</dependency>
大配置:
<!--配置包扫描器-->
<context:component-scan base-package="cn.Fileuplode"></context:component-scan>
<!--配置文件上传的专用类-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
<mvc:annotation-driven/>
Controller:
@Controller
public class FileController {
@RequestMapping("/first")
public String doFirst(MultipartFile upload, HttpSession session){
/*获取到用户上的文件名称*/
String chile=upload.getOriginalFilename(); //文件短名称
/*将相对路径转化成绝对路径*/
String parpath=session.getServletContext().getRealPath("/uplode"); /*将file写入指定路径*/
File filepath=new File(parpath,chile);
try {
upload.transferTo(filepath);
return "/Fileuplode.jsp";
} catch (IOException e) {
e.printStackTrace();
return "/list.jsp";
}
}
}
创建一个上传文件的页面:
<h1>文件上传</h1>
<form action="/first" method="post" enctype="multipart/form-data">
文件 <input type="file" name="upload"/>
<input type="submit"/>
</form>
运行结果:
springMVC数据校验与单文件上传的更多相关文章
- SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...
- [转]SpringMVC单文件上传、多文件上传、文件列表显示、文件下载
一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+sta ...
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- SpringMVC(三) RESTful架构和文件上传下载
RESTful架构 REST全名为:Representational State Transfer.资源表现层状态转化.是目前最流行的一种互联网软件架构. 它结构清晰.符合标准.易于理解.扩展方便,所 ...
- Spring Boot2(十四):单文件上传/下载,文件批量上传
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox
系列目录 https://yunpan.cn/cZVeSJ33XSHKZ 访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...
- Struts2单文件上传原理及示例
一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里 ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
- SpringMVC(四)-- springmvc的系统学习之文件上传、ajax&json处理
资源:尚学堂 邹波 springmvc框架视频 一.文件上传 1.步骤: (1)导入jar包 commons-fileupload,commons-io (2)在springmvc的配置文件中配置解析 ...
随机推荐
- noip模拟赛 #2
万年rk2 我写挂大家都挂但是有人比我挂的少 我好不容易卡一波常数然后有人ak ... T1.不想写,等会放链接 T2 给一个方阵,每个地方有一个权值,把它划成两块,不能往回拐弯,求两块极差较大的那个 ...
- Python实现排序算法之快速排序
Python实现排序算法:快速排序.冒泡排序.插入排序.选择排序.堆排序.归并排序和希尔排序 Python实现快速排序 原理 首先选取任意一个数据(通常选取数组的第一个数)作为关键数据,然后将所有比它 ...
- AtCoder Grand Contest 004 C:AND Grid
题目传送门:https://agc004.contest.atcoder.jp/tasks/agc004_c 题目翻译 给你一张网格图,指定的格子是紫色的,要求你构造出两张网格图,其中一张你可以构造一 ...
- Out of resources when opening file ‘./xxx.MYD’ (Errcode: 24)解决方法
今天朋友向我反映网站出现错误:Out of resources when opening file './xxx.MYD' (Errcode: 24)错误是因为打开的文件数超过了my.cnf的--op ...
- jquery/原生js/css3 实现瀑布流以及下拉底部加载
思路: style: <style type="text/css"> body,html{ margin:; padding:; } #container{ posit ...
- 转载:数据库应用开发工具Toad使用笔记
由于网上TOAD中文教程很少,在网上摘抄了此文章便于学习,感谢原创者. TOAD使用笔记 1.把鼠标停在sql所在行,然后ctrl+Enter直接执行当前sql. 2.解决Toad对中文显示乱码问题( ...
- QualType in clang
http://clang.llvm.org/docs/InternalsManual.html#the-qualtype-class the QualType class is designed to ...
- maven导入jar包失败
找到原来的jar包位置,删除,然后重新导入,还是未成功.采取了网上的各种办法,还是不行.最简单的办法就是,重装下eclipse,以及maven配置.
- Elasticsearch Query DSL查询入门
本篇为学习DSL时做的笔记,适合ES新手,大佬请略过~ Query DSL又叫查询表达式,是一种非常灵活又富有表现力的查询语言,采用JSON接口的方式实现丰富的查询,并使你的查询语句更灵活.更精确.更 ...
- 求斐波那契数列第n位的几种实现方式及性能对比(c#语言)
在每一种编程语言里,斐波那契数列的计算方式都是一个经典的话题.它可能有很多种计算方式,例如:递归.迭代.数学公式.哪种算法最容易理解,哪种算法是性能最好的呢? 这里给大家分享一下我对它的研究和总结:下 ...