Struts2文件的上传和下载
在Struts2中需要下载的条件还是有三个,设置form表单的method为post,en属性为multipart/form-data,在input中的type为file
文件的下载需要在Action和struts.xml中进行配置
在struts.xml中,需要把result的type设置为stream,并且在其中设置参数<param>,需要设置三个参数
contentDisposition:attachment;filename=文件的属性名
inputName:此参数必须要配置一个流参数,并且设置的这个参数要在Action中定义get方法
文件上传的关键,在于在表单设置的input的name属性的字段,需要在Action中定义一个参数,并且还要设置三个参数为
字段Name,字段ContentType,字段
同时还要设置该三个字段的set方法,并且字段的类型为File,多个文件为File[]。
struts2的表单数据验证
在struts2中提供了一个机制在Action执行之前来对表单数据进行校验,原理是通过一个过滤器com.opensymphony.xwork2.validator.ValidationInterceptor
验证的方式有两种:
1、代码的验证:
(1)全局的验证
在Action中需要重写一个方法为validate(),在方法里面写入逻辑代码
(2)局部的验证
在Action中写validateXXX(),XXX代表为哪个具体的方法,如validateReg()、validateLogin()...表示为Action中的某个具体的代码进行校验
2、配置文件的验证:
(1)全局的验证
不需要在Action中重写方法,需要在Action的同目录下创建,Action类名-validation.xml
(2)局部的验证
在Action的同目录下创建,Action类名-方法的访问路径-validation.xml
在配置验证文件中需要声明文件的类型在:/com/opensymphony/xwork2/validator/validators/default.xml,主要是参考验证的type属性
另外的配置文件验证:
StudentAction-validation.xml
同时通过今天的学习,我总结到一个小技巧:
在Struts2中需要下载的条件还是有三个,设置form表单的method为post,en属性为multipart/form-data,在input中的type为file
文件的下载需要在Action和struts.xml中进行配置
在struts.xml中,需要把result的type设置为stream,并且在其中设置参数<param>,需要设置三个参数
contentDisposition:attachment;filename=文件的属性名
inputName:此参数必须要配置一个流参数,并且设置的这个参数要在Action中定义get方法
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;
public class Down extends ActionSupport {
File file= null;
public InputStream getFileName() {
try {
file = new File("d:/exam.xml");
FileInputStream filename = new FileInputStream(file);
return filename;
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public String getFilename(){
return file.getName();
}
//下载的Action
public String down(){
return "down";
}
}
文件上传的关键,在于在表单设置的input的name属性的字段,需要在Action中定义一个参数,并且还要设置三个参数为
字段Name,字段ContentType,字段
同时还要设置该三个字段的set方法,并且字段的类型为File,多个文件为File[]。
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
public class Upload extends ActionSupport {
//1、上传的文件名字
private File attach;
public void setAttach(File attach) {
this.attach = attach;
}
//2、设置文件的文件名
private String attachFileName;
public void setAttachFileName(String attachFileName) {
this.attachFileName = attachFileName;
}
//3、设置文件的类型
private String attachContentType;
public void setAttachContentType(String attachContentType) {
this.attachContentType = attachContentType;
}
//普通表单的属性
private String email;
public void setEmail(String email) {
this.email = email;
}
public String upload() throws IOException{
System.out.println(attach);
System.out.println(attachFileName);
System.out.println(attachContentType);
System.out.println(email);
FileUtils.copyFile(attach, new File("D:/html/"+attachFileName));
return SUCCESS;
}
}
struts2的表单数据验证
在struts2中提供了一个机制在Action执行之前来对表单数据进行校验,原理是通过一个过滤器com.opensymphony.xwork2.validator.ValidationInterceptor
验证的方式有两种:
1、代码的验证:
(1)全局的验证
在Action中需要重写一个方法为validate(),在方法里面写入逻辑代码
(2)局部的验证
在Action中写validateXXX(),XXX代表为哪个具体的方法,如validateReg()、validateLogin()...表示为Action中的某个具体的代码进行校验
2、配置文件的验证:
(1)全局的验证
不需要在Action中重写方法,需要在Action的同目录下创建,Action类名-validation.xml
(2)局部的验证
在Action的同目录下创建,Action类名-方法的访问路径-validation.xml
在配置验证文件中需要声明文件的类型在:/com/opensymphony/xwork2/validator/validators/default.xml,主要是参考验证的type属性
import com.opensymphony.xwork2.ActionSupport;
public class StudentAction extends ActionSupport {
private Student student;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
/**
* 要进行验证,需要重写validate的方法,这是定义全局的验证
*/
@Override
public void validate() {
if(student != null){
//验证的是用户名的为空和长度规则,addFieldError则为添加错误
if(student.getName() ==null || student.getName().equals("")){
addFieldError("name.error", "用户名不能为空");
}else if(!student.getName().matches("[0-9a-zA-Z]{6,20}")){
addFieldError("name.error", "规则不对");
}
}
}
/**
* 这是定义对于某个方法的验证为局部验证
*/
public void validateReg() {
if(student != null){
//验证的是用户名的为空和长度规则,addFieldError则为添加错误
if(student.getName() ==null || student.getName().equals("")){
addFieldError("name.error", "用户名不能为空");
}else if(!student.getName().matches("[0-9a-zA-Z]{6,20}")){
addFieldError("name.error", "规则不对");
}
}
}
public String list(){
System.out.println("查询学生");
return SUCCESS;
}
public String reg(){
System.out.println(student);
return SUCCESS;
}
}
另外的配置文件验证:
StudentAction-student_list-validation.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
<validators>
<!-- name属性表示需要进行验证的名字 -->
<field name="student.name">
<!-- type属性:可以根据xwork下的validate.xml查看
requestString:表示必须填写字符串
stringlength:表示填写的字符串的长度
regex:表示填写的字符串所符合的正则表达式
-->
<field-validator type="requestString">
<message>有误</message>
</field-validator>
</field>
<!--
type:stringlength属性,表示所要验证的字符串的长度
param:表示在type这个属性下所需要设置的字段
-->
<field name="student.name">
<field-validator type="stringlength">
<param name="minlength">6</param>
<param name="maxlength">20</param>
<message>有误</message>
</field-validator>
</field>
</validators>
StudentAction-validation.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.dtd">
<validators>
<!-- name属性表示需要进行验证的名字 -->
<field name="student.name">
<!-- type属性:可以根据xwork下的validate.xml查看
requestString:表示必须填写字符串
stringlength:表示填写的字符串的长度
regex:表示填写的字符串所符合的正则表达式
-->
<field-validator type="requestString">
<message>有误</message>
</field-validator>
</field>
<!--
type:stringlength属性,表示所要验证的字符串的长度
param:表示在type这个属性下所需要设置的字段
-->
<field name="student.name">
<field-validator type="stringlength">
<param name="minlength">6</param>
<param name="maxlength">20</param>
<message>有误</message>
</field-validator>
</field>
</validators>
同时通过今天的学习,我总结到一个小技巧:
Action传数据到xml配置文件,需要在Action中设置一个属性,提供get方法
xml配置文件传数据到Action,则需要在Action中设置一个属性,提供set方法
下图是今天总结的验证图