欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring学习笔记2之表单数据验证、文件上传实例代码

程序员文章站 2024-03-13 07:59:33
在上篇文章给大家介绍了spring学习笔记1之ioc详解尽量使用注解以及java代码,接下来本文重点给大家介绍spring学习笔记2之表单数据验证、文件上传实例代码,具体内...

在上篇文章给大家介绍了spring学习笔记1之ioc详解尽量使用注解以及java代码,接下来本文重点给大家介绍spring学习笔记2之表单数据验证、文件上传实例代码,具体内容,请参考本文吧!

一、表单数据验证

用户注册时,需要填写账号、密码、邮箱以及手机号,均为必填项,并且需要符合一定的格式。比如账号需要32位以内,邮箱必须符合邮箱格式,手机号必须为11位号码等。可以采用在注册时验证信息,或者专门写一个工具类用来验证;来看下在springmvc中如何通过简单的注释实现表单数据验证。

在javax.validation.constraints包下面,定义了多个注解。比如:

@notnull: 所注解元素的值必须不能为null。注:表单中不填写任何数据直接提交,并不意味着为null,而是空字符串。

@size: 所注解的元素必须为string、集合或者数组,并且长度要符合给定的范围。

@past: 所注解的元素的值必须是一个过去的时间。

@digits: 所注解的元素必须是数字,并且它的值必须有指定的位数。

@pattern: 所注解的元素的值必须匹配给定的正则表达式

另外,在org.hibernate.validator.constraints包下面,定义了更多的注解。比如:

@email: 匹配email格式。

@url: 匹配url格式。

下面看一下在springmvc中如何使用。

1、首先在pom.xml文件中载入需要的

<dependency>
<groupid>javax.validation</groupid>
<artifactid>validation-api</artifactid>
<version>1.1.0.final</version>
</dependency>
<dependency>
<groupid>org.hibernate</groupid>
<artifactid>hibernate-validator</artifactid>
<version>5.2.4.final</version>
</dependency>

需要注意的是,javax.validation只是定义了校验api,必须添加api的实现才行,比如org.hibernate.validator,否则会报错。

2、在类的属性上添加注解,以user.java为例。

public class user implements serializable {
@size(min = 32, max = 32, message = "uuid应该为32位字符串")
private string id;
@size(min = 1, max = 32, message = "账号长度应该在1-32位之间")
private string username;
@notempty(message = "密码不能为空")
private string password;
@notempty(message = "email不能为空")
@email(message = "email格式不正确")
private string email;
@size(min = 11, max = 11, message = "手机号长度为11位")
private string cellphone;
}

message: 如果表单数据验证失败,可以显示的错误信息。

3、在usercontroller中应用校验功能,添加@valid注解即可。

以usercontroller.java为例:

@controller
@requestmapping("/user")
public class usercontroller {
private userservice userservice;
@autowired
public usercontroller(userservice userservice) {
this.userservice = userservice;
}
@requestmapping(value = "/register", method = requestmethod.post)
public string processregistration(@valid user user, errors errors) { //@valid,user对象应用校验功能
if (errors.haserrors()) { //如果表单验证失败,返回注册页面
return "register";
}
if (user.getid() == "")
user.setid(uuid.randomuuid().tostring().replaceall("-", ""));
if (user.getregdate() == 0)
user.setregdate(new date().gettime());
userservice.adduser(user);
return "redirect:/user/" + user.getusername();
}
}

4、编写jsp文件,展示页面,以register.jsp为例:

<%@ page contenttype="text/html;charset=utf-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<%@ page session="false" %>
<html lang="en">
<head>
<title>register</title>
<link rel="stylesheet"
type="text/css"
href="<c:url value="/resources/style.css" />" >
</head>
<body>
<sf:form method="post" action="/register/user/register" commandname="user">
<%-- 如果表单数据验证失败,显示错误信息 --%>
<sf:errors path="*" element="div" cssclass="errors"/><br />
<table align="center">
<tr>
<td>username: </td>
<td><sf:input path="username" csserrorclass="errors"/></td>
</tr>
<tr>
<td>password: </td>
<td><sf:password path="password" csserrorclass="errors"/></td>
</tr>
<tr>
<td>email: </td>
<td><sf:input path="email" csserrorclass="errors"/></td>
</tr>
<tr>
<td>cellphone: </td>
<td><sf:input path="cellphone" csserrorclass="errors"/></td>
</tr>
</table><br />
<input type="submit" value="register"/>
</sf:form>
</body>
</html>

最终效果如下:

Spring学习笔记2之表单数据验证、文件上传实例代码

二、文件上传

在spring中,文件上传很简单,只需要3步即可。

1、如果我们配置的dispartcherservlet继承了abstractannotationconfigdispatcherservletinitializer的话,重载customizeregistration()方法来配置multipart的具体细节。

@override
protected void customizeregistration(servletregistration.dynamic registration) {
//限制上传文件的大小不超过2mb,整个请求不超过4m,所有上传的文件都要写到磁盘中
registration.setmultipartconfig(new multipartconfigelement("/tmp/uploads", 2097152, 4194304, 0));
}

2、配置multipart解析器。

//配置multipart解析器
@bean
public multipartresolver multipartresolver() throws ioexception {
return new standardservletmultipartresolver();
}

3、处理multipart请求。对于用户上传的文件等信息,可以用byte[]数组来表示,但更推荐spring提供的multipartfile接口。它提供了更多功能,比如获取文件名、文件大小、文件类型等。

@requestmapping(value = "/{username}", method = requestmethod.post)
public string showuserinfo(@requestpart("icon") multipartfile icon) throws ioexception {
icon.transferto(new file("/users/pingping/projects/ideaprojects/spring/register/src/main/webapp/uploads/" + icon.getoriginalfilename()));
return "user";
}

transferto(file dest)方法: 将文件写入到系统中。

写个页面测试,看指定的文件目录下文件是否已上传成功。

<form method="post" enctype="multipart/form-data">
<label>上传头像图片?</label>
<input type="file" name="icon" accept="image/jpeg, image/png" value="选择文件"/>
<button type="submit">确定</button>
</form> 

1、参考文献:spring实战(第4版)。

2、github地址:。

以上所述是小编给大家介绍的spring学习笔记2之表单数据验证、文件上传实例代码,希望对大家有所帮助