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>
运行结果:

时间: 2024-11-06 10:41:54

springMVC数据校验与单文件上传的相关文章

springMVC之单文件上传

springmvc对form表单的支持已经很成熟,仅仅两步: 配置支持文件上传的bean:org.springframework.web.multipart.commons.CommonsMultipartResolver  同时设置文件编码.单次提交表单上传文件最大字节数.以及写文件时使用的缓冲区大小 开发处理:handler[org.hy.ssm.web.controller.FormController.uploadOne(MultipartFile)]  Java代码   /** * @

SpringMVC实现单文件上传、多文件上传、文件列表显示、文件下载

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar 整个相关的包如下: 整个工程目录如下: 二.配置web.xml和SpringMVC文件

SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程免费下载 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar 整个相关的包如下: 整个工程目录如下: 二.配置web.xml和Spr

Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据)

form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multipart/form-data"> {# 这里必须要请求头格式才能把上传文件的对象传过去 enctype="multipart/form-data"#} 姓名 <input type="text" name="user">

表单文件上传与文件下载

一.简介 使用form表单进行需要为form添加enctype="multipart/form-data" 属性,除此之外还需要将表单的提交方法改成post,如下 method="post". 二.示例 1.表单文件上传 网页代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 </head> 5 <body> 6 <form action="${pageC

Struts2单文件上传原理及示例

一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式. 2.multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里. 3.text/plain:这种方式主要适用于直接通过表单发送邮件的

关于Struts2单文件上传

要实现Struts2框架的文件上传,需要用到2个jar包 commons-fileupload-1.2.2.jar commons-io-2.0.1.jar 由于文件解析Struts2内部已经帮我们做好了,大大降低了开发难度,我们只需要在Action里设置好对应的参数,目录进行使用即可. 来个小示例: upload.jsp 这个页面的表单有三点需要注意的: 1.表单必须使用post方式提交 2.表单编码类型 enctype="multipart/form-data"   3.<s

实现单文件上传,页面局部刷新

实现单文件上传,页面不刷新 1.html <form name="fjUploadForm" enctype="multipart/form-data" method="post" action="fjFileInsert.action" onsubmit="return check()" target="fjUploadIFrame"> <input type=&qu

2014-07-23 利用ASP.NET自带控件实现单文件上传与下载

效果图 上传文件页面: 下载文件页面:  1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="upAndDown.SiteMaster" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict/