Struts2 Chapter7 国际标签&文件的上传和下载

<!--
	Struts2 Chapter7 国际标签&文件的上传和下载
	Goal:掌握Struts中的国际化标签,实现中英文的切换,并且实现文件的上传和下载
-->

一,国际化标签:
	1,其实我们在前面已经学过了用JSTL来实现页面的中英文切换,步骤如下:
		1)创建资源属性文件,把要进行切换的关键字写在里面,注意要写多个文件以便实现切换:
			文件名必须是这样:文件名_语言类型_国家名缩写.properties
			eg:	language_zh_CN.properties   language_en_US.properties
		2)配置这个资源文件:
			关键字1=值1
			关键字2=值2
			关键字3=值3
			.....
			注:如果值是中文则不能在source中进行书写,需要对其进行编辑然后由软件自动转为字节码
		3)在页面中引入标签库,并使用:
			<%@ taglib uri="java.sun.com/jsp/jstl/fmt" prefix="前缀"%>
			<前缀:setBundle baseName="[src目录下的properties文件的主文件名(就是不包含_zh_CN)]"/>
			<--在要写入文字的地方要这样写-->
			<前缀:message key="[properties文件中的key的名称]"/>
			
			eg:
			<%@ taglib uri="java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
			<fmt:setBundle baseName="language"/>
			<--在要写入文字的地方要这样写-->
			<fmt:message key="关键字1"/>
			<fmt:message key="关键字2"/>
			.....
		
	2,然后在struts中的用法呢前面的差不多~但是要优化得好一点,关键是可以进行手动切换!
		
		1)创建资源属性文件,把要进行切换的关键字写在里面,注意要写多个文件以便实现切换:
			文件名必须是这样:文件名_语言类型_国家名缩写.properties
			eg:	language_zh_CN.properties   language_en_US.properties
		2)在struts.xml文件中配置一个常量
			<constant name="struts.custom.i18n.resources" value="language"></constant>
			注:这个只能这样写,里面的内容是不能改的!
		3)在页面中引入struts标签库,并使用:
			<%@ taglib uri="/struts-tags" prefix="s"%>
			在需要切换语言的地方要这样写道:
			<s:text name="[properties文件中相对应的关键字]"/>
		4)最后~千万不能忘记的一步:在web.xml中在添加一个对*.jsp的过滤
		
		当然,当我们写了上面过后,其实这个并没有体现出struts中的国际标签的优势,
		体现其优势的要属下面的内容了:
		动态切换语言(前提是在上面个内容的基础上!):
		
		a)创建一个action类用来切换语言:
			public class LanguageAction{
				//定义两个属性,一个是语言名称,一个是国家名称
				private String language;
				private String country;
				//生成getter&setter,这个我就不写了
				...
				
				//切换语言的方法
				public String toggleIt(){
					//得到Locale对象(java.util.*)
					Locale locale=new Locale(language,country);
					//将locale放入session中,方法与前面有点不同,这里是采用put
					ServletActionContext.getContext().getSession().put("WW_TRANS_I18N_LOCALE",locale);
					//注:上面的那个put中的参数不能改
					//为了让切换能够立即生效,需要写下面内容
					ServletActionContext.getContext().setLocale(locale);
					//返回一个值好让action中的result进行处理
					return "transformed";
				}
			}
		
		b)配置一个action用来切换语言:
		<action name="*Language" class="com.shu.action.LanguageAction" method="{1}">
			<result name="transformed">需要切换的页面的路径</result>
		</action>
		
		c)然后只需要在页面中写入两个超链接就可以!
		eg:
			<a href="toggleItLanguage.action?language=zh&country=CN">[中文]</a>
			<a href="toggleItLanguage.action?language=en&country=US">[English]</a>
		
		这样就OK了!!
		
		再次强调:不要忘了在struts.xml中配置<constant>还有不要忘了在web.xml中配置过滤*.jsp的过滤器
		
		
二,文件的上传:
	以前在学javaWeb_adv时学过通过使用smartUpload来上传文件,但是学了struts后,我们要学会使用struts来上传文件!
	
	1)依旧是不能忘记在表单中写入: enctype="multipart/form-data" 这个不能写错也不能不写,表示复杂的表单数据!
	2)在表单中的<input type="file"/>中写入完整的信息:加入name属性,并且这个name必须和表单提交后的action中的名称相同:
		<input type="file" name="myData"/>
	3)在表单提交的action中写入以下属性:
	public class SubmitAction{
		//这个表示文件,注意,是File类型的(java.io.*)
		private File myData;
		
		//这个表示文件名,必需以input中的name打头,然后接上FileName
		private String myDataFileName;
		
		//这个表示文件类型,必需以input中的name打头,然后接上ContentType
		private String myDataContentType;
		
		//生成getter&setter~我就难得写了!
		....
		
		//文件上传的方法
		public void upLoadFile(){
			//创建流
			FileInputStream fin=null;
			FileOutputStrem fou=null;
			try{
				//创建流对象,其中需要一个File类型的参数,恰好我们的myData就是
				fin=new FileInputStream(myData);
				//获取根目录和文件名,并把文件写入至此!
				fou=new FileOutputStream(ServletActionContext.getServletContext().getRealPath("/")+myDataFileName);
				//创建字节数组来储存数据,其中的参数指的是长度,最好是1024的倍数,最要不超过2倍!
				byte[] data=new byte[1024];
				//储存每次读取的长度
				int count=0;
				//开始循环读取,当读取的长度<=0时,就说明读取完毕了!
				while((count=fin.read(data))>0){
					//开始写入数据,注意写的时候需要的参数
					fou.write(data,0,count);
				}
				//验收一下
				System.out.println("I made it!");
			}catch(Exception e){
			}finally{
				//还真是爱try呀
				try{
					if(fin!=null){
						fin.close();
					}
					if(fou!=null){
						fou.close();
					}
				}catch(Exception e2){}
			}
		}
	}
	
	3-2)多个文件上传:
		public class SubmitAction{
			//这个表示文件,注意,是File类型的(java.io.*)
			private File[] myData;
			
			//这个表示文件名,必需以input中的name打头,然后接上FileName
			private String[] myDataFileName;
			
			//这个表示文件类型,必需以input中的name打头,然后接上ContentType
			private String[] myDataContentType;
			
			//生成getter&setter~我就难得写了!
			....
			
			//文件上传的方法
			public void upLoadFile(){
				//创建流
				FileInputStream fin=null;
				FileOutputStrem fou=null;
				for(int i=0;i<myData.length;i++){
					try{
					//创建流对象,其中需要一个File类型的参数,恰好我们的myData就是
					fin=new FileInputStream(myData[i]);
					//获取根目录和文件名,并把文件写入至此!
					fou=new FileOutputStream(ServletActionContext.getServletContext().getRealPath("/")+myDataFileName[i]);
					//创建字节数组来储存数据,其中的参数指的是长度,最好是1024的倍数,最要不超过2倍!
					byte[] data=new byte[1024];
					//储存每次读取的长度
					int count=0;
					//开始循环读取,当读取的长度<=0时,就说明读取完毕了!
					while((count=fin.read(data))>0){
						//开始写入数据,注意写的时候需要的参数
						fou.write(data,0,count);
					}
					//验收一下
					System.out.println("I made it!");
					}catch(Exception e){
					}finally{
					//还真是爱try呀
					try{
						if(fin!=null){
							fin.close();
						}
						if(fou!=null){
							fou.close();
						}
					}catch(Exception e2){}
				}
			}
		}
				}
三,文件下载:有待更新!

<!--
Author:Lovingshu's Forever
Date:2011-10-31 22:19
Remark:Oh~God damn it!Tomorrow is Single Man's Day!But it's ok,now I feel nothing but 
my duty!What I want is not a girl firend but is a good job~I've bet my future,so,
I must try my best!
-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值