javaee之Struts2辅助功能

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方法


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方法


下图是今天总结的验证图



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值