付費下載
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
一、經(jīng)典的MVC模二、Struts1.xMVC的實三、Struts1.x的主要組件JavaBeanAction可以分為Action、DispatchAction等不Struts和JSTLStruts-config.xml四、Struts1.x開發(fā)實例-登錄五、Struts2(WebWork)的Struts2MVC六、Struts2的主要組處于Model層的ActionJavaBean配置文件,配置有Action、Result七、Struts2的實例-登MyEclipse環(huán)境中建立一個新的web工程,名稱Struts2Login”,存放路徑在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解開該war包,在WEB-下出所有的jar包,這些jar包就是一個Struts2程序所需要的基礎jar包,把它們復制到新建的web工程的WEB-INF/lib 在 下建立一個類,包名mypack,類名UserAction,其代碼如下packagepackageimportpublicclassUserActionextends{privateStringusername;privateStringuserpass;publicString{return}publicvoidsetUsername(String{this.username=}publicString{return}publicvoidsetUserpass(String{this.userpass=}publicStringexecute()throwsExceptionif("Mike".equals(username)&&||" ".equals(username)&&"abc".equals(userpass))return"success";return}}在 <?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" 定義Action(login.action<actionname="login"定義轉(zhuǎn)發(fā)路徑對應的字符串名<result<result過濾所有的url 在 下編寫3個jsp頁面,index.jsp、Success.jsp和Error.jsp,注意這里把指令中pageEncoding設置為“utf-8”,就沒有中文問題<%@<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'index.jsp'starting提交到action--><formaction="login.action"參數(shù)名和action中的屬性名一樣<inputtype=text <inputtype=password<inputtype=submitname=submvalue="提交<inputtype=resetname=resetvalue="取消<%@<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'Success.jsp'starting歡<%@<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'Error.jsp'starting 1-21-3八、Struts2的中文亂碼解中有2種辦法可以解決這個問題:設置JSP頁面的pageEncoding=”utf-8”<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <Connectorport="8080"……2種方法可以解決POSTGET請求中的中文參數(shù)不能解決,GETTomcat<Connectorport="8080"……九、Struts2的Action中web對Struts2的Action就是一個普通的POJOWeb對象request、response、sessionapplicationActionAction中如何這些web對象呢?直接Web對HttpServletRequestrequest=ServletActionContext.getRequest();HttpServletResponseHttpServletRequestrequest=ServletActionContext.getRequest();HttpServletResponseresponse=ServletActionContext.getResponse();HttpSessionsession=ServletContextServletContextapplication=ActionActionContextcontext=com.opensymphony.xwork2.ActionContext是一Action執(zhí)行的上下文,Action執(zhí)行期間ActionContextcontext=Objectget(Object使用key來查找當前ActionContextMap返回一個Application獲得當前線程的ActionContextMapMapMap類型的HttpSession返回一個ValueStack類型OGNL向當前ActionContext設置application設置sessionMap我們推薦在程序中使用此方法來web對象。十、操作實例Struts2實現(xiàn)按類別查詢1-71-4Strut2Web應用配置文件,Struts2框架在其中配置了生成一個webproject,名稱為“Struts2按類別查詢”,指定存放路徑為f:\ packageimportjava.sql.Connection;importjava.sql.SQLException;packageimportjava.sql.Connection;importjava.sql.SQLException;publicclassDbConnpublicstaticConnection{Connectionconn=null;try{ conn=DriverManager.getConnection(}catch(ClassNotFoundExceptione)//TODOAuto-generatedcatchblock}catch(SQLExceptione)//TODOAuto-generatedcatchblock}return}}packagepackageimportjava.sql.Connection;importjava.util.ArrayList;importjava.util.List;importpublicclassBookOperpublicList<Book>selectByType(String{Connectionconn=db.DbConn.getConn();java.sql.PreparedStatementpstmt=null;java.sql.ResultSetrs=null;List<Book>data=newArrayList<Book>();try{pstmt=.prepareStatement("select.prepareStatement("selecttitle_id,title,type,pricefromtitleswheretype=?");pstmt.setString(1,type);rs=pstmt.executeQuery();while(rs.next()){Bookbook=newBook();}}catch(SQLExceptione)//TODOAuto-generatedcatchblock}finallyif(rs!=null)try{}catch(SQLExceptione)//TODOAuto-generatedcatchblock}if(pstmt!=null)try{}catch(SQLExceptione)//TODOAuto-generatedcatchblock}if(conn!=null)try{}catch(SQLExceptione)//TODOAuto-generatedcatchblock}}return}}數(shù)據(jù)持久化類packagepackage publicpublicclass{privateStringtitleid;privateStringtitle;privateStringtype;privatefloatpublicfloat{return}publicvoidsetPrice(float{this.price=}publicString{return}publicvoidsetTitle(String{this.title=}publicString{return}publicvoidsetTitleid(String{this.titleid=}publicString{return}publicvoidsetType(String{this.type=}生成Struts2的Action對象,在 packagepackageimportimportpublicclassBookActionextendsprivateStringtypeprivateBookOperbonewBookOperpublicStringgetType()returnreturn}publicvoidsetType(String{this.type=}publicStringexecute()throwsException//TODOAuto-generatedmethod//查詢結(jié)果放在requestreturnSUCCESS;"success"}}<?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <actionname="typequery"<!--name="success"--JSPindex.jsp<%@<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'index.jsp'starting <formaction="typequery.action"<inputtype=submitname=submvalue="查詢<%@<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-<%@taglib /jsp/jstl/core"prefix="c"Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'booklist.jsp'starting<table <c:forEachvar="book"<td>${book.type修改web.xml,在其中配置Struts2<?xml<?xmlversion="1.0"encoding="UTF-<web-appversion="2.4"xmlns="h" tomcat5.5以上版本中web程序為“type”,運行效果如圖1-8和1-91-81-9Action的分繼承ActionSupportpackagepackageimportcom.opensymphony.xwork2.ActionSupport;publicclass oWorldextendsActionSupport{privateStringmessage;publicStringgetMessage(){return}publicvoidsetMessage(String{this.message=}publicStringexecute()throwsExceptionTODOAuto-generatedmethodstubmessage="大家好!";return}}ActionSupport實現(xiàn)了Action接口,這個接口中定義了一些常量和execute interfacepublicstaticfinaljava.lang.StringSUCCESS="success";publicstaticfinaljava.lang.StringNONE="none";publicstaticfinaljava.lang.StringERROR="error";publicstaticfinaljava.lang.StringINPUT="input";publicstaticfinaljava.lang.StringLOGIN="login"; java.lang.Stringexecute()throws}publicclasscom.opensymphony.xwork2.ActionSupportimplements publicclasscom.opensymphony.xwork2.ActionSupportimplements publicvoidaddFieldError(java.lang.StringpublicStringexecute()throwspublicvoid}<?xmlversion="1.0"<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <action o" Struts2的ActionMVC模型層,Action中的方法代表業(yè)務邏輯,Action中的屬性代表請求中的參數(shù),當頁面請求參數(shù)較多的時候,把過多的參數(shù)對象的屬性定義在Action中JavaBeanModelDrivenActionActionAction實現(xiàn)ModelDriven接口,假如登錄頁面需要傳輸參數(shù)usernameuserpass2個參數(shù)封裝在一JavaBean中,然后Action中定義JavaBeanModel即可,代碼如下:packagepackage publicclassUserinfo{privateStringusername;privateStringpublicStringgetUsername(){returnusername;}publicvoidsetUsername(String{this.username=}publicString{return}publicvoidsetUserpass(Stringuserpass)this.userpassthis.userpass=}}packagepackageimportimportcom.opensymphony.xwork2.ModelDriven;publicclassUserActionextendsActionSupportimplementsModelDriven<Userinfo>{privateUserinfomodel=newUserinfo();publicStringexecute()throwsException//TODOAuto-generatedmethodstubreturnSUCCESS;}publicUserinfogetModel()//TODOAuto-generatedmethodstubreturnmodel;}}/>Userinfo中的屬性usernameModelDriven接口中的方法getModel()必須<?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <actionname="user"<%@<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-<%@tagliburi="/struts-tags"Stringpath=request.getContextPath();StringStringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'new.jsp'starting多方法的ActionAction來處理呢?我們有2種辦法來處理這個問題:一個Action對應一個業(yè)務邏輯,實現(xiàn)方便,但是Action數(shù)量多,struts.xml中需要配置一個Action對應多個業(yè)務邏輯,例如表的CRUD操作,含有多個業(yè)務邏輯,我們只寫一個Action來實現(xiàn),Action的數(shù)量沒有增加,struts.xml的配置也簡單,所以這種方法Action中自定義方法的和execute方法一樣,方法的調(diào)用路徑為“Action名稱!方法publicString方法名()throws 以用戶表Userinfo的CRUD操作為例,看一下多方法Actionpackagepackageimportimportimportcom.opensymphony.xwork2.ModelDriven;crudprivateUserServiceuserservice=newUserService();privateUserinfouserinfo=newUserinfo();//模型對象publicpublicUserinfogetModel()//TODOAuto-generatedmethodstubreturnuserinfo;}publicStringcreate()throwsreturnSUCCESS;}publicStringretrive()throwsException查詢結(jié)果放在requestreturn"list";}publicStringupdate()throwsreturnSUCCESS;}publicStringdelete()throws{;return}//默認的publicStringexecute()throws{return}}<?xmlversion="1.0"encoding="UTF-8"<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <actionname="CrudUser"<result2-1多方法ActionAction中表示跳轉(zhuǎn)的目的地使用了在struts.xml配置的字符串,格式為:<resultname=””type=””></result>,type可以有多種選擇,Struts2支持各種視圖技術,例如JSP、JSF、XML等,默認的是JSP。常見的type類型配置如下:<result<resultname=”b”<result<resultname=”b”重定向到JSP頁面,和response.sendRedirect(“”)<resultname=”a” <param<param的Action<param<param<result<param<param<result<param<param<param<param<param<param<param類型在用 文件(例如PDF文件等)等情況下非常有意義<resultname="success"<param<resultname="success"<paramjsfJSF的resulttitles:用于整合Titlesresultxslt:用于整合XML/XSLTresult這些視圖技術的支持,有些還需要導入相應的插件包,即Struts2提供的含有plugin字樣的jar包。packagepackageimportjavax.servlet.http.HttpServletRequest;importoper.UserOper;importimportcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionSupport;importcom.opensymphony.xwork2.ModelDriven;publicclassUserActionextendsActionSupportimplementsModelDriven<Userinfo>{privateUserinfouser=newprivateUserOperuo=newUserOper();publicUserinfogetModel(){//TODOAuto-generatedmethodreturn}publicStringprecreate()throws{return}publicStringcreate()throwsreturnselect();}publicStringdelete()throwsreturnselect();}publicStringupdate()throwsreturnselect();}publicStringselect()throws{ActionContext.getContext().put("userlist",uo.retriveAll());returnSUCCESS;}publicStringretrive()throwsExceptionUserinfomyuser=uo.retriveOne(user.getUserid()); return}publicvoid{}publicvoid{checkForm();","}publicvoidcheckForm()HttpServletRequestrequest=ifuser.getUsernamenull||user.getUsername().equals(""))this.addFieldError("username","用戶名不能為空"); ifuser.getUserpassnull||user.getUsername().equals(""))this.addFieldError("userpass"," //2 elseif if(user.getSfznull||user.getSfz().equals(""))this.addFieldError("sfz"," elseifuser.getSfz().matches("^\\d{17}[\\d|X]|\\d{15}$"))this.addFieldError("sfz"," if(user.get ()==null||user.get "," elseif(!user.get "," if(user.getBirthday()==null) if(user.getInterest()==null)this.addFieldError("interest"," if(user.getWorktime()<1||user.getWorktime()>100)ififuser.getIntronull||user.getIntro().equals(""))this.addFieldError("intro","簡介不能為空");}}<?xmlversion="1.0"encoding="UTF-8"<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" 修改后的xml自動加載<actionname="user"<result<result<?xmlversion="1.0"encoding="UTF-<!DOCTYPEvalidators"-//OpenSymphonyGroup//XWorkValidator"<fieldname--<field-validator<?xmlversion="1.0"encoding="UTF-<!DOCTYPEvalidators"-//OpenSymphonyGroup//XWorkValidator"<fieldname--<field-validator <field-validator<param<param age--<field<field-validator<param<param <field<field-validator<param<param<field<field-validator<field-validator行,即Action的局部資源文件StuAperties做如下修改,這樣當數(shù)據(jù)類型轉(zhuǎn)換異常的時2-9Strut2的在struts.xml在 下建立中文和英文的資源文件,中文資源文使用native2ascii工具把該文件轉(zhuǎn)換為unicodeerror=Sorry!YoucannotloginStringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'Login.jsp'starting<s:form<s:textfieldname="username"<s:passwordname="userpass"<s:submit<%@page<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-<%@tagliburi="/struts-tags"Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'Success.jsp'starting<s:property<s:text登錄失敗頁面Error.jspStringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"++path+<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<base<title>MyJSP'Error.jsp'starting<s:text中的屬性key用于資源文件,<s:textname=””/>中的name屬性用于資源文件在jsp頁面中使用庫指令引入后<%tagliburi=”/struts-tags”prefix=”s”%>,就可以使用所有的Struts2了。器(interceptor)是Struts2框架組成部分。很多功能都是構建在器基礎之上的,例如文件的上傳和、、數(shù)據(jù)類型轉(zhuǎn)換和數(shù)據(jù)有效性驗證等,Struts2利用器就是動態(tài)Action調(diào)用的對象。它提供了一種機制,使開發(fā)者可以定義一個特定的功能模塊,這個模塊可以在Action執(zhí)行之前或之后運行,也可以在一個Action執(zhí)行之前Action執(zhí)行。同時也提供了一種可以提取Action中可重用部分的方式。Struts2框架的Action被一個或者多個器(器棧)所包圍,所有的用戶請求都會被器所,然后交給Action處理,處理結(jié)果以邏輯視圖的方式返回給用戶。而這個調(diào)用的執(zhí)行流程,是由Strut2的配置文件(struts.xml)來實現(xiàn)的。面幾章中,沒有明確說明器,為什么可以直接調(diào)用Action呢?那是因為在Struts2框架中如果沒有顯式的器配置,則系統(tǒng)會調(diào)用默認的器來調(diào)用Action,在假設我們需要實現(xiàn)這么一個功能,在調(diào)用每個Action之前都能在控制臺打印出“oWorld”。這樣的一個功能使用Struts2器來實現(xiàn)最簡單。下面介紹一個具體的實現(xiàn)建立一個Action類MyAction.javapackagepackagepublicclassMyActionextendsActionSupportprivateintage;//publicprivateintage;//publicintgetAge(){return}publicvoidsetAge(int{this.age=}publicStringexecute()throwsException//TODOAuto-generatedmethodstubSystem.out.println("Actionexecute return}}packageinterceptor;packageinterceptor;importimportpublic oWorldInterceptorInterceptorpublicStringintercept(ActionInvocationarg0)throwsException//獲得被調(diào)用的ActionObjectaction=//打 //執(zhí)行Action或調(diào)用下一 Stringresult=//執(zhí)行完action后提returnresult; oWorldInterceptor.java,其代碼如下<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <actionname="test" 在struts.xml中加 器的配置,見struts.xml內(nèi)容<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <interceptorname=" <actionname="test"<!--action <interceptor-ref }}<%@pagelanguage="java"import="java.util.*"<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-<%@tagliburi="/struts-tags"prefix="s"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<title>MyJSP'Success.jsp'starting<h1>調(diào)用成功<s:property運行該web程序,在地址欄輸入,運行效果如圖4-1到4-2所示。4-1Action后的輸<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <!--定 器--<interceptorname=" <actionname="test" 器--<!--action 器<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <!--定 器--<interceptorname=" <actionname="test" 器--<!--action 器-- oworld"圖4-3加入默認器后的執(zhí)行結(jié)Struts2框架默認使用Common-fileUpload組件實現(xiàn)文件上傳,該組件將解析出HttpServletRequest請求中的文件域信息,并使用IO流方式,將文件保存在服務器的指定位Struts2框架中本身不帶有Common-fileUpload組件的jar包,需要自己后放在程序的WEB-INF/lib 中,需要2個jar包,一個是commons-fileupload-1.2.1.jar,可從網(wǎng)址mons/fileupload,另一個是commons-io-1.4.jar,可從mons/io/。<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-<%@taglib<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-<%@tagliburi="/struts-tags"prefix="s"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<title>MyJSP'index.jsp'starting上傳文件:<s:fileformenctypemultipart/form-data。enctype用來指定表單數(shù)據(jù)的編碼方式,有如下3個值。application/x-www-form-urlencoded:指定該值,則表單中的數(shù)據(jù)被編碼為Key-Value對,multipart/form-data:使用mime編碼,會以二進制流的方式來處理表單數(shù)據(jù),文件上傳privatejava.io.Filexxx;//封裝上傳文件的二進制內(nèi)容privateStringxxxFileName;//封裝上傳文件的文件名file類型表單域docAction中的java.io.Filedoc對于Action中的屬性docContentType。一般說來,為了上傳文件,如果表單稱為xxx,那么在privatejava.io.Filexxx;//封裝上傳文件的二進制內(nèi)容privateStringxxxFileName;//封裝上傳文件的文件名packagepackageimportjava.io.File;publicclassFileInfo{privateFiledoc;privateStringdocFileName;//封裝上傳文件的名稱屬性privateStringdocContentType封裝上傳文件的類型屬性privateStringtargetdir;//保存路徑privateStringtargetfilename保存的文件名publicFilegetDoc(){return}}publicvoidsetDoc(File{this.doc=}publicString{return}publicvoidsetDocContentType(String{this.docContentType=}publicString{return}publicvoidsetDocFileName(String{this.docFileName=}publicString{return}publicvoidsetTargetdir(String{this.targetdir=}publicString{return}publicvoidsetTargetfilename(String{this.targetfilename=}}用于文件上傳的Actionpackageaction;packageaction; importpo.FileInfo;importcom.opensymphony.xwork2.ModelDriven;publicclassFileUploadActionextendsActionSupportimplementsModelDriven<FileInfo>{FileInfofileinfo=newFileInfo();publicFileInfogetModel(){//TODOAuto-generatedmethodreturnreturn}publicStringexecute()throwsException//TODOAuto-generatedmethod//獲得服務器上保存上傳文件的 Stringrealpath=//把doc內(nèi)容 returnSUCCESS;}privatesynchronizedStringgenerateFileName(String{intposition=filename.lastIndexOf(".");Stringext=filename.substring(position);returnSystem.nanoTime()+ext;}}<?xmlversion="1.0"encoding="UTF-8"<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <actionname="fileupload"顯示結(jié)果頁面Success.jsp<%@<%@pagelanguage="java"import="java.util.*"<%@tagliburi="/struts-tags"prefix="s"<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01<title>MyJSP'Success.jsp'starting上傳文件類型:<s:propertyvalue="docContentType"/><br>上傳成功后文件位置:<s:propertyvalue="targetdir"/><br>上傳:<imgwidth=200height=200src="<s:property4-4圖4-5上傳后顯<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration <?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration <actionname="fileupload"<result允許上傳的文件類型<param<!--上傳文件的最大容量單位字節(jié)<param 4-64-7錯誤提示都是英文,如果要改成中文提示,需要配置全局資源文件轉(zhuǎn)換編碼成為unicode編碼。然后在struts.xml中引入該資源文件<constantname="struts.custom.i18n.resources"value="globalMessage"/>。4-84-9在struts.xml中配置<constantname="struts.multipart.saveDir"value="/tmp"/>用于指定上 packageimportimportcom.opensymphony.xwork2.ActionSupport;publicclassFileDownloadActionextends{privateStringinputpath;// privateStringcontenttype;//文件類型privateStringfilename;//文件名packageimportimportcom.opensymphony.xwork2.ActionSupport;publicclassFileDownloadActionextends{privateStringinputpath;// privateStringcontenttype;//文件類型privateStringfilename;//文件名publicjava.io.InputStream{}publicStringexecute()throwsException//調(diào)用相關業(yè)務邏輯方法動態(tài)設置信息inputpathupdfile/Bliss.jpg";contenttype="image/jpeg";//解決的中文文件名問.URLEncoder.encode("文件.jpg","utf-8");returnSUCCESS;}publicString{return}publicvoidsetContenttype(String{this.contenttype=}publicString{return}publicpublicvoidsetFilename(String{this.filename=}publicString{return}publicvoidsetInputpath(String{this.inputpath=}}Actionresult類型為stream<actionname="filedownload"<resultActionresult類型為stream<actionname="filedownload"<resultname="success"<param<param<param 地址欄輸 4-4-2-192-53Actionupdate()方法時執(zhí)行的驗證框架文Action局部資源文件,用于自帶的提示信packageaction;importpo.Userinfo;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionSupport;importcom.opensymphony.xwork2.ModelDriven;publicclassUserActionextendsActionSupportimplementspackageaction;importpo.Userinfo;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionSupport;importcom.opensymphony.xwork2.ModelDriven;publicclassUserActionextendsActionSupportimplementsprivateUserinfouser=newprivateUserOperuo=newUserOper();publicUserinfogetModel(){//TODOAuto-generatedmethodstubreturnuser;}publicStringprecreate()throws{return}publicStringcreate()throwsreturnselect();}publicStringdelete()throwsreturnselect();}publicStringupdate()throwsreturnselect();}publicpublicStringselect()throws{ActionContext.getContext().put("userlist",uo.retriveAll());returnSUCCESS;}publicStringretrive()throwsExceptionUserinfomyuser=uo.retriveOne(user.getUserid()); return}publicUserinfo{return}publicvoidsetUser(Userinfo{this.user=}}<?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" <!--修改后的xml<actionname="user*"class="action.UserAction"<result<result為create和update方法編寫驗證框架文件,命名方式為:<Action類名>-<別名>-validation.xml,和Action類放在同一個 <?xml<?xmlversion="1.0"encoding="UTF-<!DOCTYPEvalidators"-//OpenSymphonyGroup//XWorkValidator
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省佛山市南海區(qū)2025-2026學年上學期期末八年級數(shù)學試卷(含答案)
- 2025-2026學年甘肅省蘭州市榆中縣七年級(上)期末數(shù)學試卷(含答案)
- 五年級科學上冊期末試卷及答案
- 國家電網(wǎng)物資采購標準 新一代集控站設備監(jiān)控系統(tǒng)系列規(guī)范 第6部分:人機界面(2022版試行)
- 2020年山西省臨汾市康和中學高一英語上學期期末試卷含解析
- 2022~2023法院司法輔助人員考試題庫及答案第260期
- 2026年小學道德與法治五年級下冊培訓試卷
- 人教版八年級生物上冊第五單元-生物圈中的其他生物難點解析試題(含答案解析)
- 初中安全班隊課課件
- 八年級語文下冊期中試題附答案
- 【地理】期末重點復習課件-2025-2026學年八年級地理上學期(人教版2024)
- 2026年鄉(xiāng)村治理體系現(xiàn)代化試題含答案
- 通風設備采購與安裝合同范本
- 化工設備清洗安全課件
- 2026元旦主題班會:馬年猜猜樂新春祝福版 教學課件
- T∕ZZB 1815-2020 塑料 汽車配件用再生聚碳酸酯(PC)專用料
- 2025~2026學年吉林省吉林市一中高一10月月考語文試卷
- 天津市南開中學2025-2026學年高一上數(shù)學期末調(diào)研模擬試題含解析
- 麻辣燙創(chuàng)業(yè)商業(yè)計劃書范文
- 東呈集團內(nèi)部控制中存在的問題及對策研究
- 高科技產(chǎn)業(yè)園區(qū)運營管理手冊
評論
0/150
提交評論