struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第1頁
struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第2頁
struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第3頁
struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第4頁
struts2-開發(fā)指南Struts2內(nèi)容來源于googlecode_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

資 基 Struts2運行環(huán)境和安裝說明 實 創(chuàng)建Struts2工 拷貝基礎(chǔ)包到工 Struts2在Action中 只需用到 獲得 Struts2的SStruts2表單 Struts2返回 Struts2返回 使用 Struts2驗證框 創(chuàng)建xml內(nèi) Struts2 Struts2資ApacheStruts2OpensymphonyXWork/xworkOpensymphonyWebWorkStruts2運行環(huán)境和安裝說明struts-VERSION-all.zip是完全版struts-VERSION-lib.zip是必要庫版2.1 Struts2Struts1Struts2=WebWork對比配置文件:Struts1配置文件放在WEB-INF/struts-config.xml(可定制)下;Struts2的配置文件要放在WEB-INF/classes下控制器:Struts1的控制器是一個ActionServlet類;Struts2動作表單:Struts1的HTML表單對應(yīng)一個ActionForm類的實例,動作類可對應(yīng)配置的ActionForm,操作ActionForm進(jìn)行填充數(shù)據(jù)傳輸對象;Struts2的HTML表單直接映射成POJO,動作類中可直接POJO,操作對POJO的驗證。何一個POJO,但是最好是繼承ActionSupport類?。JSPStruts2OGNL來顯示各種對象模型,JSP自帶JSTLELEL常用來補(bǔ)充表單庫?。為什么最好是繼承ActionSupport類?Struts2的具體有哪些ActionSupport類的作用struts2不要求我們自己設(shè)計的action類繼承任何的struts基類struts接口,但是我們?yōu)榱朔奖銓崿F(xiàn)我們自己的action,大多數(shù)情況下都會繼承com.opensymphony.xwork2.ActionSupport類,并重寫此類里的publicStringexecute()throwsException方法。因為此類中實現(xiàn)了很多的實用借口,提供了很多默認(rèn)方法,這些默認(rèn)方法包括信息的方法、默認(rèn)的處理用戶請求的方法等,這樣可以大大的簡化Acion的開發(fā)。Struts2中通常直Action來封裝HTTP請求參數(shù),因此,Action類里還應(yīng)該包含與請求參數(shù)對應(yīng)的屬性,并且為屬性提供對應(yīng)的gettersetter方法。Struts2的具體有哪些:詳見Struts2工程Struts2到 找到struts-\apps\struts2-blank-.war解壓在web.xml中添加Struts2的過濾器(2.0和2.1的過濾器不同<!--<!--Struts2.1--<filter-name>struts2</filter-<filter- <filter-name>struts2</filter-<url-pattern>/*</url-</filter- <!--Struts2.0--<filter-name>struts2</filter-<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-<filter- <filter-name>struts2</filter-<url-pattern>/*</url-</filter- 拷貝基礎(chǔ)包到工程--freemarker-2.3.15.jar--模板引擎包commons-fileupload-1.2.1.jar--文件上傳包拷貝struts.xml(struts2-blank-\WEB-INF\src\java)到 <!--關(guān)閉動態(tài)方法調(diào)用關(guān)閉action名+感嘆號+方法名進(jìn)行方法調(diào)用<constantname="struts.enable.DynamicMethodInvocation"value="false"<constantname="struts.devMode"value="false"<includeextends繼承參數(shù),必須要有個.<package o" o"extends="struts-<!--name為 名稱--<action oWorld" 寫Action類(可以不繼承任何類,也可以繼承publicoActionprivateString默認(rèn)執(zhí)行方法publicString{System.out.println("world:"+//SUCCESS是result即result中沒有寫name, returnpublicpublicString{return}publicvoidsetMessage(String{this.message=}}Action接口,里面定義了一些返回的字符串常量(SUCCESS,INPUT,ERROR...),execute方法.ActionSupport類,Actioin接口的默認(rèn)實現(xiàn) oWorld.jsp頁面,message參<%@<%@taglibprefix="s"uri="/struts-tags"<!-- <h2>Message:<s:propertyoAction,帶message參數(shù) Struts2在Action中只需用到ActionContextctx=ActionContext.getContext();ctx.put("request","request");Map<String,Object>session=ctx.getSession();session.put("session","session");Map<String,Object>appliction=代碼獲得HttpServletRequestHttpServletRequestrequest=ServletActionContext.getRequest();HttpServletResponseresponse=ServletActionContext.getResponse();HttpSessionsession=request.getSession();ServletContextservletContext=接口獲得如果有多個Action需要用到request,可以寫個Action繼承接口,使用request的Action繼承再它/*/*繼承ServletRequestAware(獲得request),ServletResponseAware(獲得response),ServletContextAware(獲得ServletContext),SessionAware(獲得Session)接口*/publicclassFormActionimplementsServletRequestAware,ServletResponseAware{privateHttpServletRequestrequest;privateHttpServletResponseresponse; publicvoidsetServletRequest(HttpServletRequest{this.request=}publicvoidsetServletResponse(HttpServletResponse{this.response=}}//Struts2//Struts2中默 的是Action中execute方中的execute方法publicString{return}(只要在url中指定方法名稱就可以了.如:要oAction中的add()方法url:(加!和方法名字struts.xml中配置可以關(guān)閉動態(tài)方法(默認(rèn)是激活,可能會讓用戶方法沒有公開的方法,最好不用)--><constantname="struts.enable.DynamicMethodInvocation"value="false" 配置多個方<!--FormAction中的add<actionname="userActionAdd"class="com.struts2.form.FormAction"<!-- FormAction<actionname="userActionUpdate"class="com.struts2.form.FormAction" 使用通配符調(diào)用多個<!-name="*_*"class="com.struts2.form.{1}Actionmethod="{2}"url:user_list.action就是調(diào)用userAction中l(wèi)ist方法.method="{2}"->list(第二個*對應(yīng)的字符串method="{3}"->abd(第三個*對應(yīng)的字符串--<actionname="userAction_*"class="com.struts2.form.FormAction"

默認(rèn)類型,FreeMarker的集成把HTTP標(biāo)頭發(fā)送回用戶重定向到另一個URLRedirectAction(redirectAction)重定向到另一個

把一個InputStream流發(fā)送給瀏覽器( 用于與Velocity技術(shù)的集成發(fā)送普通文本,通常用來顯示JSP頁面的<!-<!-Chain用途是構(gòu)成一條動作鏈:前一個動作把控制權(quán)轉(zhuǎn)交給后一個動作,而前一個動作的狀態(tài)在后一個動作里仍保持.動作鏈能不用就不用,有可能把一套連續(xù)動作弄成一團(tuán)亂--<packagename="package1"extends="struts-<actionname="action1"<result<actionname="action2"<result<param<param<packagename="package2"namespace="/namespace2"extends="struts-<actionname="action3"<result<!--或者<result<param<action<result<param<!-<!-重定參數(shù):location:重定向的 表明是否把location參數(shù)的值視為一個OGNL表達(dá)式來解釋,默認(rèn)值為--<actionname="..."<resultname="success"內(nèi)部資源<!-外部資源(如果需要使用&和+之類的特殊字符必須使用轉(zhuǎn)義序列.如:&改 轉(zhuǎn)成--<!-<!-重定向到一個參數(shù):actionName:指定重定向Action的名 名空間(沒有此參數(shù),與本action同一個命名空間--<result或者<result<param參數(shù)<param<param<param<actionname="source_show"<resultname="success" Struts2_OGNL表達(dá)Struts2不支持el表達(dá)式,只能使用把各種映射關(guān)系(一些Map類型的對象)壓入OGNL表達(dá)式加上一個前綴 Context Object2 數(shù)//String[]colorsblue","green","red"}; 長3. 第一個元 List{"a","b","c"}//創(chuàng)建一個由3String構(gòu)成的4. cities["CA"]或者 cities中key為CA的元 %{}里面的表達(dá)式會被求值(%{#request.user.age>40}->trueorfalse,%{1+6}-<p>賦值,取值<!--頁面定義變量(本頁賦值用name要加#取值),default認(rèn)值賦值字符串要加'',不然是去Action對應(yīng)的變量.value="test"->在Action中找test變量--><s:setid="test1"<!--#request.get('javax.servlet.forward.context_path')必須經(jīng)過轉(zhuǎn)發(fā)到j(luò)sp才有值,直接jsp無值-- s:<s:propertyvalue="#msg"default="Struts2"/><br/><s:property--<s:if<s:if<div>中年人<s:elseif<div>年輕<p><b>iterator:</b>對集合迭代迭代斷是否為<s:if

<s:iteratorvalue="#request.userList"id="u"status="st">index:<s:propertyvalue="#st.index+1"/>&;是否第一個:<s:propertyvalue="#st.first"/>&;是否偶數(shù):<s:propertyvalue="#st.even"/>&;日期<s:datename="#u.birthday"format="yyyy-MM-dd迭代<s:if<s:iteratorvalue="#request.userMap"id="map"status="st">index:<s:propertyvalue="#st.index+1"/>&;是否第一個:<s:propertyvalue="#st.first"/>&;是否偶數(shù):<s:propertyvalue="#st.even"/>&;日期HH:mm:ss"/>&

<p><b>append:</b>對多個集合進(jìn)行合并合List<s:append<s:param<s:param<s:iteratorvalue="#newList"id="u"status="st">是否第一個:<s:propertyvalue="#st.first"/>&;是否偶數(shù):<s:propertyvalue="#st.even"/>&;<s:datename="#u.birthday"format="yyyy-MM-ddHH:mm:ss"/>&<s:append<s:param<s:param<s:iteratorvalue="#newListMap"id="map"status="st">是否第一個:<s:propertyvalue="#st.first"/>&;是否偶數(shù):<s:propertyvalue="#st.even"/>&;

顯示棧里的參數(shù)信息Struts2表單<!-<!-action="userAction!%{tip}"動態(tài)方法tip為Action中的變量submit--<s:formaction="userAction"namespace="/form"<!--userBean.id為Action中屬userBean中id值<s:hidden<s:textfieldname="userB"label="用戶名"<s:textfieldname="userBean.age" "<s:textfieldname="userBean.birthday"label="生日"<s:param<!- 不能回<s:passwordname="userBean.password" "<s:textareaname="userBean.des"label="描述"cols="35"<!--這種checkbox顯示出來是一行只有一個<s:iterator<s:checkboxname="userBean.likes"label="%{name}"--這種是一行多<s:checkboxlistlist="likeList"name="userBean.likes"listKey="id"listValue="name" <s:selectlist="likeList"listKey="id"listValue="name"headerKey="-1"headerValue="請選 --<!--value="1"設(shè)置默認(rèn),但是好像設(shè)置了不能回填<s:radiolist="#{'1':'男','2':'女'}" "<s:submitvalue="%{tip}"id="submitBut"Struts2文件上傳文件上傳jsp<s:form<s:formaction="fileAction"namespace="/file"method="POST"<!--name 對應(yīng)的參數(shù)名稱--<s:filename="files"<s:filename="files"<s:filename="files"<s:submitvalue="提交用//名稱要與jsp中的name相同(三個變量都要get,set)privateFile[]files;//要以File[]變量privateString[]//要以File[]變量privateString[]filesContentType;privateServletContextservletContext;//Action調(diào)用的上傳文件方publicStringexecute()ServletContextservletContextStringdataDir=servletContext.getRealPath("/file/upload");for(inti=0;i<files.length;i++)FilesaveFile=newFile(dataDir,filesFileName[i]);}return}配置上傳文件臨時文件夾(在struts.xml中配置<constantname="struts.multipart.saveDir" 文件url<a<a struts.xml配<actionname="fileAction" <!--typestream應(yīng)StreamResult處<resultname="down"<!-不管實際類型, 文件ContentType統(tǒng)一指定為application/octet-默認(rèn)為--<!-默認(rèn)就是inputStream,它將會指示StreamResultinputName屬性值getter法比如這里就是getInputStream()來獲 文件的內(nèi)容,意味著你的Action要有這個法--<param<!-默認(rèn)為 打開),設(shè)置為 ent將會告訴瀏覽 該文件,filename 件保有存時的文件名,若未指定將會是以瀏覽的頁面名作為文件名,如以作為文件名這這里使用的是動態(tài)文件名,${fileName},它將通過Action的getFileName()獲名--<param <param//Action//Action調(diào)用 文件方publicStringdown()return}//獲 文件的內(nèi)容,可以直接讀入一個物理文件或從數(shù)據(jù)庫中獲取內(nèi)publicInputStreamgetInputStream()throwsExceptionStringdir=servletContext.getRealPath("/file/upload");Filefile=newFile(dir,"icon.png");if(file.exists()) 文returnnew//和Servlet中不一樣,這里我們不需對輸出的中文轉(zhuǎn)碼為ISO8859-//將內(nèi)容(Struts2文 測試)直接寫入文件 的文件名必須是文本(txt)類//returnnewByteArrayInputStream("Struts2文 測試}return}//對于配置中的${fileName},獲 保存時的文件publicStringgetFileName(){StringfileName="圖標(biāo).png";try{//中文文件名也是需要轉(zhuǎn)碼為ISO8859-1,否則亂碼returnnewString(fileName.getBytes"ISO8859-1");}catch(UnsupportedEncodingException{return}}Struts21.1.jsonplugin2.struts.xmlpackageextends="json-<packagename="json"namespace="/json"extends="json-3.resultget開頭的方法2.struts.xmlpackageextends="json-<packagename="json"namespace="/json"extends="json-3.resultget開頭的方法<resulttype="json"user.id屬性<resulttype="json"<paramname="includeProperties">user屬性<resulttype="json"<paramname="excludeProperties">根對象只包含user<result<paramname="root">需要在配置時指定ignoreHierarchy為false:--><result<param5.5.在action中賦值,返回對應(yīng)的result在屬性get方法上面加@JSON(name="newName")json中的名稱@JSON(format="yyyy-MM-dd")格式化日期Struts2////直接調(diào)用responseOut方publicvoidresponseOut()throws{StringBuildersb=newsb.append("<?xmlversion=\"1.0\"encoding=\"UTF-8\"?>"); <user //HttpServletResponseresponse=response.setHeader("Cache-Control","no-cache");PrintWriterout=response.getWriter();Struts2////要添加publicclassUserBean{privateLongid;privateStringname;privateStringpassword;privateintage;privateDatebirthday;privateLongsex;privateSet<Long>likes;privateStringdes}publicclassLikeBeanprivateLongid;privateStringname;}publicclass//屬性要生成privateStringprivateUserBeanuserBean;privateList<LikeBean>likeList;privateList<UserBean>publicStringlist(){userList=newArrayList<UserBean>();userList.add(newUserBean("abc",19,newDate()));userList.add(newUserBean("def",70,newDate()));userList.add(newUserBean("ghi",40,newDate()));return"list";}//到添加頁publicStringlikeList=newArrayList<LikeBean>();likeList.add(newLikeBean(newLong(1),"上網(wǎng)"));likeList.add(newLikeBean(newLong(2),"讀書"));likeList.add(newLikeBean(newLong(3),"游戲tip="add";return"info";}//添加方法,Struts2會自動把對應(yīng)的值賦值給userBeanpublicStringadd(){return"toList";}publicStringtoUpdate(){likeList=newArrayList<LikeBean>();likeList.add(newLikeBean(newLong(1),"上網(wǎng)"));likeList.add(newLikeBean(newLong(2),"讀書"));likeList.add(newLikeBean(newLong(3),"游戲tip=System.out.println("updatename:"+userBean.getName());userBean=newUserBean("update",100,newDate());userBean.setId(newLong(101));userBean.setSex(newLong(2));userBean.setDes("Struts2用戶");Set<Long>likes=newHashSet<Long>();likes.add(newLong(2));likes.add(newLong(3));return"info";}//更新方publicStringreturn"toList";}//刪除方publicStringSystem.out.println("delname:"+userBean.getName());return"toList";}}struts.xml<packagename="form"namespace="/form"extends="struts-<!--使用通配符調(diào)用多個方法,method為*對應(yīng)的字符串--><actionname="userAction_*"class="com.struts2.form.FormAction"<!--方法返回的字符串對應(yīng)name,再轉(zhuǎn)發(fā)到頁面--><result<result<!--重定向Action,可以有Action名字和空間,參數(shù)--><resultname="toList"<!--空間參數(shù),不寫代表和當(dāng)前Action同一個空<param--jspjsp<!--重定向Action的名稱--><param<!--url帶的參數(shù),${userB}是動態(tài)參數(shù),值為Action的屬性userBean中name的值--><param<paramlist(列表頁面<!--<!--添 --<%@taglibprefix="s"uri="/struts-tags"<div><ahref="${pageContext.request.contextPath}/form/userAction_toAdd.action">添加斷用戶是否為空<s:if<div>用戶列表<!--遍歷用戶--><s:iteratorvalue="#request.userList"id="u"<s:property <s:property <s:property <!--格式化日期--><s:datename="#u.birthday"format="yyyy-MM-dd href="${pageContext.request.contextPath}/form/userAction_toUpdate.action?userB=${>修改 href="${pageContext.request.contextPath}/form/userAction_delete.action?userB=${>刪除</a><div>無用戶info.jsp(添加和修改頁面<!--<!--添 --<%@taglibprefix="s"uri="/struts-tags"<!--顯示標(biāo)記(添加/修改)<s:property<!--action="userAction_%{tip}"tip為Action中的標(biāo)記變量submit不加method<s:formaction="userAction"namespace="/form"<!--userBean.id為Action中屬性userBean中id的值--><s:hidden<s:textfieldname="userB"label="用戶名"<s:textfieldname="userBean.age" "<s:textfieldname="userBean.birthday"label="生日"<s:paramname="value"><s:datename="userBean.birthday"format="yyyy-MM-<!- <s:passwordname="userBean.password" "<s:textareaname="userBean.des"label="描述"cols="35"<!--這種checkbox顯示出來是一行只有一個<s:iterator<s:checkboxname="userBean.likes"label="%{name}"--這種是一行多個<s:checkboxlistlist="likeList"name="userBean.likes"listKey="id"listValue="name"label="<!--<s:selectlist="likeList"listKey="id"listValue="name"headerKey="-1"headerValue="--value="1<s:radiolist="#{'1':'男','2':'女'}" "<s:submitvalue="%{tip}"id="submitBut"Action置中一定要設(shè)置input回頁面添加驗證只要創(chuàng)建驗證的xml文件Actioninput返回頁面添加驗證只要創(chuàng)建驗證的xml文件創(chuàng)建xml文件名Action同包下,創(chuàng)建:Action類名-如:ValidateAction創(chuàng)建ValidateAction-<!--每<!--每個方法單獨配置一個Action--><!--在Action同包下,創(chuàng)建:Action類名-action方法配置名稱-validation.xml--><actionname="validateAdd"class="com.struts2.validator.ValidateAction"<!--要創(chuàng)建ValidateAction-validateAdd-validation.xml-->通配符配置<!--在Action同包下,創(chuàng)建:Action類名-action方法對應(yīng)的名稱-validation.xml--><actionname="validate_*"class="com.struts2.validator.ValidateAction"<!--要創(chuàng)建ValidateAction-validate_add-validation.xml,validate_add 這個action方法的路徑--注注意要驗證的方法不能叫這樣配置在form表單中要在<s:formaction="validate_add">中action寫好名稱,不能寫action="validate_",然后<s:submitvalue="提交"method="add"/>這樣會找不到對應(yīng)的配如果驗證出錯,返回input頁面時,那些存在ValueStack中的值會丟失,可以將Action實現(xiàn)Preparable接口,然后prepare()方法里初始化添加頁面需要的值.如果使用Preparable接口,必須在action配置中添加<interceptor-refname="paramsPrepareParamsStack"這樣prepare()才能得到form提交的參創(chuàng)建xml內(nèi)容<!DOCTYPEvalidatorsPUBLIC<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN" /xwork/xwork-validator-<!--要驗證<!--要驗證Action中UserBean的id字段,name="userBean.id"(userBean為Action<field<!--type要驗證的類型,short-circuit(默認(rèn)false),truerequiredstring失敗了 就不驗證了.--<!--field-validator下面可以有多個param元素,但是最多只能有一個message<field-validator<param<message>Pleaseentera</field-<field-validator Invalid</field-Struts內(nèi)建驗證程序(type的值保證字段的值不是空值null.空字符串不是空值<field<field<field-validator<message>Pleaseenterauser</field-param:trim(boolean)->true->去除前后空格<field<field<field-validator<param<message>Pleaseenterauser</field-<field<field-validator<param<message><message>Pleaseentera</field-param:min(int);max(int)<field<field<field-validator<param<param<message>year:1999-</field-<field<field<field-validator<paramname="min">1999-01-<paramname="max">2010-01-<message>birthday:1999-</field-給定的String值是否是一個電子<field<field<field-validator 給定的String值是否是一個合法的URL(要有前綴<field<field<field-validator<message>Invalid</field-驗證給定字段是否滿足一個OGNL表達(dá)式區(qū)別 不是一個字段驗證程序,失敗時將生成一個動作錯誤.(JSP中調(diào)<s:actionerror/>才顯示出錯信息fieldexpression是一個字段驗證程序,失敗時將拋出一個字段錯誤.(對字段驗證)param:expression(String)OGNL表達(dá)式publicpublicclassExpressionTestAction//屬性生成get,setprivateintmin;privateintmax;}<validator<paramname="expression">max>minumtemperaturemustbegreaterthanMinimum<!--jsp--publicpublicclassFieldExpressionTestAction//屬性生成get,setprivateintmin;privateintmax;}<field<field-validator<paramname="expression">max>minumtemperaturemustbegreaterthanMinimum</field-publicclassUserBean//屬性get,setprivateStringname;privateintage;}//UserBean-validation.xml(和UserBean放在同一個包中<field<field-validator<message>用戶名必須</field-<field<field-validator<param<param<message>Agemustbebetween18and</field-//Action的<!--userBean變量名--><field<field-validator<!--message會和UserBean驗證中的message一起顯示--><message>用戶:<</</field-如果另一個Action對UserBean使用另一個標(biāo)準(zhǔn)的驗證,可以創(chuàng)建新的驗證文件//UserBean-specific-//UserBean-specific-之前的驗證不同<field<field-validator<param<param<message>Agemustbebetween30and</field-//另一個Action的<field<field-validator<!--xml中擴(kuò)展的名字,執(zhí)行UserBean-specific-validation.xml的驗證--><param<message>用戶1:</</field-檢查對某個屬性進(jìn)行類型轉(zhuǎn)換是否會導(dǎo)致一個轉(zhuǎn)換錯誤<field<field<field-validatorAnagemustbean</field-驗證一個非空的字段值是不是足夠的長度<field<field<field-validator<param<param<message><message>length:6-</field-給定的值是否與一個給定的正則表達(dá)式匹<field<field<field-validator<param<![CDATA[\d\d\d\-\d\d\d\-Invalidphonenumberorinvalid</field-actionActionSupport類已經(jīng)實現(xiàn)了這個接口////繼承publicclassUserextendsActionSupport//屬性privateStringuserName;privateStringprivatestaticList<String>userNames=newArrayList<String>();static{}//驗證方publicvoidvalidate() //添加出錯信addFieldError("userName","'"+userName+"'hasbeen}}}}自定義驗證類要創(chuàng)建一個普通的驗證程序(非字段驗證程序),擴(kuò)展ValidatorSupport類.驗證失敗要從方法addActionError方法要創(chuàng)建一個字段驗證程序,擴(kuò)展FieldValidatorSupport類.驗證失敗要從validate方法addFieldError方法如果要能接受參數(shù),要在類中定義一個相應(yīng)的屬性,并生 編寫publicpublicclassStrongPasswordValidatorextendsFieldValidatorSupport//屬privateintminLength=-publicvoidsetMinLength(int{this.minLength=}publicint{return}//驗證方publicvoidvalidate(Objectobject)throws{StringfieldName=Stringvalue=(String)getFieldValue(fieldName,object);if(value==null||value.length()<=0){//usearequiredvalidatorforthese}if((minLength>-1)&&(value.length()<{addFieldError(fieldName,}elseif{addFieldError(fieldName,}}privatestaticfinalStringGROUP_1=privatestaticfinalStringGROUP_2="ABCDEFGHIJKLMNOPQRSTUVWXYZ";privatestaticfinalStringGROUP_3=" protectedbooleanisPasswordStrong(String{booleanok1=false;booleanok2=false;booleanbooleanok3=intlength=password.length();for(inti=0;i<length;i++){if(ok1&&ok2&&ok3){}Stringcharacter=password.substring(i,i+1);System.out.println("character:"+character);if{ok1=true;}if{ok2=true;}if{ok3=}}return(ok1&&ok2&&}}xml

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論