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

来源:互联网 发布:移民英国 知乎 编辑:程序博客网 时间:2024/05/08 07:50
<!--Struts2 Chapter7 国际标签&文件的上传和下载Goal:掌握Struts中的国际化标签,实现中英文的切换,并且实现文件的上传和下载-->一,国际化标签:1,其实我们在前面已经学过了用JSTL来实现页面的中英文切换,步骤如下:1)创建资源属性文件,把要进行切换的关键字写在里面,注意要写多个文件以便实现切换:文件名必须是这样:文件名_语言类型_国家名缩写.propertieseg:language_zh_CN.properties   language_en_US.properties2)配置这个资源文件:关键字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)创建资源属性文件,把要进行切换的关键字写在里面,注意要写多个文件以便实现切换:文件名必须是这样:文件名_语言类型_国家名缩写.propertieseg:language_zh_CN.properties   language_en_US.properties2)在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中,方法与前面有点不同,这里是采用putServletActionContext.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打头,然后接上FileNameprivate String myDataFileName;//这个表示文件类型,必需以input中的name打头,然后接上ContentTypeprivate 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打头,然后接上FileNameprivate String[] myDataFileName;//这个表示文件类型,必需以input中的name打头,然后接上ContentTypeprivate 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 ForeverDate:2011-10-31 22:19Remark: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!-->
原创粉丝点击