版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章Struts2高級應(yīng)用6.1類型轉(zhuǎn)換6.2數(shù)據(jù)校驗(yàn)的方法6.3Struts2實(shí)現(xiàn)國際化的方法6.1類型轉(zhuǎn)換器Struts2已經(jīng)內(nèi)建了字符串類型和如下類型之間相互轉(zhuǎn)換的轉(zhuǎn)換器。Boolean和boolean完成字符串和布爾值之間的轉(zhuǎn)換Character和char完成字符串和字符值之間的轉(zhuǎn)換Long和long完成字符串和長整型值之間的轉(zhuǎn)換Float和float完成字符串和單精度浮點(diǎn)值之間的轉(zhuǎn)換Double和double完成字符串和雙精度浮點(diǎn)值之間的轉(zhuǎn)換Date完成字符串和日期類型之間的轉(zhuǎn)換,默認(rèn)采用請求本地Locale的SHORT格式數(shù)組默認(rèn)情況下,數(shù)組元素是字符串集合在默認(rèn)情況下,假定集合元素類型為String,則創(chuàng)建一個(gè)新的ArrayList封裝所有字符串如果需要將HTTP請求參數(shù)轉(zhuǎn)換成上面這些類型,則無需開發(fā)者進(jìn)行任何特殊的處理6.1.1引用類型的轉(zhuǎn)換方式借助于內(nèi)置的類型轉(zhuǎn)換器,Struts2可以完成字符串與基本類型之間的類型轉(zhuǎn)換借助于OGNL表達(dá)式,Struts2允許以另一種方式將請求參數(shù)轉(zhuǎn)換成復(fù)合類型示例代碼(ognlConvert)User.javaloginAction.javastruts.xmlinput.jsp6.1.1引用類型的轉(zhuǎn)換方式User.javapublic
classUser{privateStringname;privateStringpass;//name屬性的setter和getter方法public
voidsetName(Stringname){=name;}publicStringgetName(){return
;}//pass屬性的setter和getter方法public
voidsetPass(Stringpass){this.pass=pass;}publicStringgetPass(){return
this.pass;}}public
classLoginActionimplementsAction{//User類型屬性封裝請求參數(shù)privateUseruser;privateStringtip;//user屬性的setter和getter方法public
voidsetUser(Useruser){this.user=user;}publicUsergetUser(){return
this.user;}//tip屬性的setter和getter方法public
voidsetTip(Stringtip){this.tip=tip;}publicStringgetTip(){return
this.tip;}6.1.1引用類型的轉(zhuǎn)換方式LoginAction.jsppublicStringexecute()throwsException{//通過user屬性的name屬性和pass屬性來判斷控制邏輯if(getUser().getName().equals(“j2ee")&&getUser().getPass().equals(“tust")){setTip("登錄成功");return
SUCCESS;}else{setTip("登錄失?。。?);return
ERROR;}}}6.1.1引用類型的轉(zhuǎn)換方式6.1.1引用類型的轉(zhuǎn)換方式struts.xml(片段)<actionname="login"class="org.crazyit.app.action.LoginAction"><resultname="success">/welcome.jsp</result><resultname="error">/error.jsp</result></action>6.1.1引用類型的轉(zhuǎn)換方式input.jsp(片段)<s:formaction="login"> <!--該表單域封裝的請求參數(shù)名為-->
<s:textfieldname=""label="用戶名"/> <!--該表單域封裝的請求參數(shù)名為user.pass-->
<s:textfieldname="user.pass"label="密碼"/> <tr> <tdcolspan="2"><s:submitvalue="轉(zhuǎn)換"theme="simple"/> <s:resetvalue="重填"theme="simple"/></td> </tr></s:form>6.1.1引用類型的轉(zhuǎn)換方式welcome.jsp(片段)<head><title>轉(zhuǎn)換成功</title></head><body><s:propertyvalue="tip"/><br/>用戶名為:<s:propertyvalue=""/><br/>密碼為:<s:propertyvalue="user.pass"/><br/></body>6.1.1引用類型的轉(zhuǎn)換方式Struts2會(huì)把參數(shù)的值賦給Action實(shí)例的user屬性的name屬性并將user.pass參數(shù)的值賦值給Action實(shí)例的user屬性的pass屬性。注意:系統(tǒng)必須為復(fù)合類(User類)提供無參構(gòu)造方法如果希望使用請求參數(shù)的形式為Action實(shí)例的user屬性的name屬性賦值,則必須為user屬性對應(yīng)的復(fù)合類(User類)提供setName()方法。因?yàn)镾truts2是通過調(diào)用該方法來為該屬性賦值的。當(dāng)然Action中還應(yīng)該包含getUser()方法。6.1.2自定義類型轉(zhuǎn)換需要把一個(gè)字符串轉(zhuǎn)換成一個(gè)復(fù)合對象電話號(hào)碼ser對象:abc,xyzStruts2不知道如何完成字符串和復(fù)合對象之間的轉(zhuǎn)換。例子:localConverterinput.jspLoginAction.java6.1.2自定義類型轉(zhuǎn)換6.1.2自定義類型轉(zhuǎn)換public
classLoginActionimplementsAction{//User類型屬性封裝請求參數(shù)privateUseruser;privateStringtip;//屬性的setter和getter方法publicStringexecute()throwsException{//通過user屬性的name屬性和pass屬性來判斷控制邏輯if(getUser().getName().equals(“j2ee")&&getUser().getPass().equals(“tust")){setTip("登錄成功");return
SUCCESS;}else{setTip("登錄失?。?!");return
ERROR;}}}6.1.2自定義類型轉(zhuǎn)換1、定義類型轉(zhuǎn)換器2、在Web應(yīng)用中注冊類型轉(zhuǎn)換器6.1.2自定義類型轉(zhuǎn)換自定義類型轉(zhuǎn)換1、實(shí)現(xiàn)TypeConverter接口XpublicinterfaceTypeConverter{publicObjectconvertValue(Mapcontext,Objecttarget,Membermember,StringpropertyName,Objectvalue,ClasstoType);}6.1.2自定義類型轉(zhuǎn)換2、繼承DefaultTypeConverter重寫convertValue()方法負(fù)責(zé)完成類型的轉(zhuǎn)換,雙向轉(zhuǎn)換:字符串User實(shí)例通過判斷參數(shù)toType(需要轉(zhuǎn)換的目標(biāo)類型)的類型toType==String.classtoType==User.classconvertValue()方法的參數(shù)和返回值的意義context:類型轉(zhuǎn)換的上下文,即Action的上下文value:需要轉(zhuǎn)換的參數(shù),根據(jù)轉(zhuǎn)換方向不一樣,其值亦不同toType:轉(zhuǎn)換的目標(biāo)類型√6.1.2自定義類型轉(zhuǎn)換
UserConverter.javapublic
classUserConverterextendsDefaultTypeConverter{//類型轉(zhuǎn)換器必須重寫convertValue方法,該方法需要完成雙向轉(zhuǎn)換publicObjectconvertValue(Mapcontext,Objectvalue,ClasstoType){//當(dāng)需要將字符串向User類型轉(zhuǎn)換時(shí)if(toType==User.class){//系統(tǒng)的請求參數(shù)是一個(gè)字符串?dāng)?shù)組String[]params=(String[])value;//創(chuàng)建一個(gè)User實(shí)例Useruser=newUser();//只處理請求參數(shù)數(shù)組第一個(gè)數(shù)組元素,并將該字符串以英文逗號(hào)分割成兩個(gè)字符串String[]userValues=params[0].split(",");//為User實(shí)例賦值user.setName(userValues[0]);user.setPass(userValues[1]);//返回轉(zhuǎn)換來的User實(shí)例returnuser;}為何是字符串?dāng)?shù)組而不是字符串?文本框:用戶輸入一個(gè)普通字符串下拉列表框(可選多項(xiàng)):對應(yīng)的請求參數(shù)是字符串?dāng)?shù)組。為了考慮到所有情形,因而把請求參數(shù)視為字符串?dāng)?shù)組。對于文本框中提供的請求參數(shù),轉(zhuǎn)換器把它當(dāng)成長度為1的數(shù)組。6.1.2自定義類型轉(zhuǎn)換else
if(toType==String.class){//將需要轉(zhuǎn)換的值強(qiáng)制類型轉(zhuǎn)換為User實(shí)例Useruser=(User)value;return"<"+user.getName()+","+user.getPass()+">";}return
null;}}6.1.2自定義類型轉(zhuǎn)換配置類型轉(zhuǎn)換器的方式:配置局部類型轉(zhuǎn)換器僅僅對某個(gè)Action的屬性起作用配置全局類型轉(zhuǎn)換器對所有Action的特定類型的屬性都會(huì)生效
局部類型轉(zhuǎn)換器的配置文件的名稱為“類名-perties”,其中類名為使用該類型轉(zhuǎn)換器的Action類的名稱。如LoginAperties
需要?jiǎng)?chuàng)建一個(gè)名為“perties”的配置文件。
6.1.2自定義類型轉(zhuǎn)換局部類型轉(zhuǎn)換器
(LoginAperties)與Action所在路徑一致增加的配置內(nèi)容<propName>=<ConvertClass><propName>:需要進(jìn)行類型轉(zhuǎn)換的屬性<ConvertClass>:類型轉(zhuǎn)換器的實(shí)現(xiàn)類LoginApertiesuser=org.crazyit.app.converter.UserConverter指定user屬性需要使用UserConverter類來完成類型轉(zhuǎn)換6.1.2自定義類型轉(zhuǎn)換局部類型轉(zhuǎn)換器只能對指定Action、指定屬性起作用如果應(yīng)用中有多個(gè)Action都包含了User類型的屬性,或者一個(gè)Action中包含了多個(gè)User類型的屬性,更適合用全局類型轉(zhuǎn)換器全局類型轉(zhuǎn)換器提供文件perties,置于應(yīng)用程序的類加載路徑下org.crazyit.app.domain.User=org.crazyit.app.converter.UserConverter指定org.crazyit.app.domain.User類型需要使用UserConverter來完成類型轉(zhuǎn)換6.1.2自定義類型轉(zhuǎn)換3、繼承StrutsTypeConverterStrutsTypeConverter類是DefaultTypeConverter類的子類實(shí)現(xiàn)了convertValue()方法,將兩個(gè)不同轉(zhuǎn)換方向替換成不同方法convertFromString()當(dāng)需要把字符串轉(zhuǎn)換成復(fù)合類型時(shí)convertToString()當(dāng)需要把復(fù)合類型轉(zhuǎn)換為字符串時(shí)改寫的UserConverter類參數(shù)說明注冊方法6.1.2自定義類型轉(zhuǎn)換改寫的UserConverter類publicclassUserConverterextendsStrutsTypeConverter
{ //實(shí)現(xiàn)將字符串類型轉(zhuǎn)換成復(fù)合類型的方法
publicObjectconvertFromString(Mapcontext ,String[]values,ClasstoClass) { //創(chuàng)建一個(gè)User實(shí)例
Useruser=newUser(); //只處理請求參數(shù)數(shù)組第一個(gè)數(shù)組元素,
//并將該字符串以英文逗號(hào)分割成兩個(gè)字符串
String[]userValues=values[0].split(","); //為User實(shí)例賦值
user.setName(userValues[0]); user.setPass(userValues[1]); //返回轉(zhuǎn)換來的User實(shí)例
returnuser; } 6.1.2自定義類型轉(zhuǎn)換//實(shí)現(xiàn)將復(fù)合類型轉(zhuǎn)換成字符串類型的方法
publicStringconvertToString(Mapcontext,Objecto) { //將需要轉(zhuǎn)換的值強(qiáng)制類型轉(zhuǎn)換為User實(shí)例
Useruser=(User)o; return"<"+user.getName()+"," +user.getPass()+">"; }}6.1.3類型轉(zhuǎn)換中的錯(cuò)誤處理在表示層處理數(shù)據(jù)過程中,經(jīng)常會(huì)出現(xiàn)沒有嚴(yán)格按照頁面要求進(jìn)行的數(shù)據(jù)錄入操作輸入電話號(hào)碼:02260274469實(shí)際上,表現(xiàn)層數(shù)據(jù)涉及兩個(gè)處理數(shù)據(jù)校驗(yàn)&類型轉(zhuǎn)換只有當(dāng)輸入數(shù)據(jù)時(shí)有效數(shù)據(jù)時(shí),才可以進(jìn)行有效地類型轉(zhuǎn)換有效類型轉(zhuǎn)換是基礎(chǔ),然后才做數(shù)據(jù)校驗(yàn)為了處理類型轉(zhuǎn)換錯(cuò)誤,Strus2提供了處理類型轉(zhuǎn)換錯(cuò)誤的攔截器,名稱為“conversionError”,在“struts-default.xml”文件包含對該攔截器的配置。此攔截器負(fù)責(zé)將對應(yīng)錯(cuò)誤封裝成表單域錯(cuò)誤(FieldError),并將它們放入ActionContext中。輸出出錯(cuò)信息:<s:fielderror/>6.1.3類型轉(zhuǎn)換中的錯(cuò)誤處理<s:fielderror/>輸出的錯(cuò)誤提示Struts2的表單標(biāo)簽使用xhtml主題時(shí),本身就會(huì)輸出錯(cuò)誤提示6.2數(shù)據(jù)校驗(yàn)的方法6.2.1數(shù)據(jù)校驗(yàn)的必要性6.2.2通過Action中的validate()方法實(shí)現(xiàn)校驗(yàn)6.2.3通過Xwork框架實(shí)現(xiàn)校驗(yàn)6.2.1輸入校驗(yàn)的必要性用戶在客戶端的瀏覽器中輸入信息,通過網(wǎng)絡(luò)提交到服務(wù)器,服務(wù)器對接收的信息進(jìn)行處理并將結(jié)果返回給用戶。要想保證這一過程能夠順利執(zhí)行就必須保證用戶提交信息的合法性。輸入校驗(yàn)確保數(shù)據(jù)信息的有效性保證Web應(yīng)用的安全性6.2.1輸入校驗(yàn)的必要性輸入校驗(yàn)分為兩部分:客戶端校驗(yàn):通常使用腳本語言校驗(yàn),例如JavaScript。校驗(yàn)輸入信息是否滿足一定的要求或滿足一定的結(jié)構(gòu),如校驗(yàn)輸入的文本是否為空校驗(yàn)輸入的文本是否是數(shù)字校驗(yàn)E-mail的格式是否正確優(yōu)點(diǎn):可以快速提示用戶輸入錯(cuò)誤,提高響應(yīng)速度。防止將無效數(shù)據(jù)發(fā)送到服務(wù)器,從而減輕服務(wù)器的負(fù)擔(dān)。6.2.1輸入校驗(yàn)的必要性服務(wù)端校驗(yàn):通過檢查HTTP請求信息以校驗(yàn)輸入是否正確有些數(shù)據(jù)必須通過程序交給服務(wù)器去處理,校驗(yàn)注冊的用戶名是否存在校驗(yàn)登錄的密碼是否正確另一個(gè)原因就是如果用戶瀏覽器禁用了腳本執(zhí)行,客戶端校驗(yàn)就會(huì)失效。安全性校驗(yàn)錯(cuò)誤登錄次數(shù)限制使用訪問來源校驗(yàn)實(shí)現(xiàn)方式通過Action中的validate()方法使用xWork校驗(yàn)框架6.2.2
編程方式實(shí)現(xiàn)輸入校驗(yàn)在Action類中手動(dòng)創(chuàng)建校驗(yàn)數(shù)據(jù)的代碼,包括:在execute()方法中實(shí)現(xiàn)校驗(yàn):使用validate()方法實(shí)現(xiàn)校驗(yàn):實(shí)現(xiàn)校驗(yàn)邏輯與業(yè)務(wù)邏輯的分離。validate*()的使用:可以為不同的方法配置其獨(dú)立的校驗(yàn)代碼只需將相同的校驗(yàn)邏輯放在validate()方法即可。6.2.2編程方式實(shí)現(xiàn)輸入校驗(yàn)validate*()使用的示例:publicclassValidateTestextendsActionSupport{ //省略屬性及其set、get方法
publicStringlogin(){ //用于登錄
return"login"; } publicStringregist(){ //用于注冊
return"regist"; } publicvoidvalidate(){ //相同的校驗(yàn)
//省略校驗(yàn)代碼
} publicvoidvalidateLogin(){//只對login()方法的請求執(zhí)行校驗(yàn)
//省略校驗(yàn)代碼
} publicvoidvalidateRegist(){//只對regist()方法的請求執(zhí)行校驗(yàn)
//省略校驗(yàn)代碼
}}6.2.2
編程方式實(shí)現(xiàn)輸入校驗(yàn)P.170ch6-3工程6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)使用validate方法校驗(yàn)時(shí),如果Web應(yīng)用中存在大量Action就需要多次重寫validate方法,這使得代碼非常繁瑣。Struts2的校驗(yàn)框架本質(zhì)上是基于XWork的validator框架,因此可以使用XWork的validator框架來對Struts2進(jìn)行數(shù)據(jù)校驗(yàn),以減少代碼量。使用XWork的validator框架實(shí)現(xiàn)數(shù)據(jù)校驗(yàn),只需編寫一個(gè)簡單的驗(yàn)證文件即可。
6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)修改ch6-3的例子將LoginAction.java中的validate()方法和validateLog()方法刪除在com.action包下創(chuàng)建驗(yàn)證文件LoginAction-validation.xml文件6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)驗(yàn)證文件的幾個(gè)關(guān)鍵問題命名規(guī)則校驗(yàn)配置方式校驗(yàn)器6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)命名規(guī)則actionName-validation.xml,actionName是指需要校驗(yàn)的Action的類名,且該文件與Action類同路徑當(dāng)用戶提交請求后,系統(tǒng)會(huì)自動(dòng)加載該文件完成對用戶請求的校驗(yàn)。當(dāng)一個(gè)Action中有多個(gè)業(yè)務(wù)處理方法,需要多個(gè)校驗(yàn)邏輯時(shí),定義校驗(yàn)文件actionName-methodName-validation.xml6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)Struts2框架的數(shù)據(jù)校驗(yàn)步驟Struts2框架中的類型轉(zhuǎn)換器對HTTP請求的數(shù)據(jù)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,得到符合類型的值使用Struts2中的Xwork校驗(yàn)框架進(jìn)行校驗(yàn)調(diào)用validateX()方法進(jìn)行數(shù)據(jù)校驗(yàn)調(diào)用validate()方法進(jìn)行數(shù)據(jù)校驗(yàn)6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)兩種配置校驗(yàn)文件的方式字段校驗(yàn)方式(Field-valiator)針對字段或?qū)傩?,在校?yàn)時(shí)任何一個(gè)字段都能夠返回一個(gè)明確的消息。非字段校驗(yàn)方式(Non-Fieldvalidator)將字段有效地組合到一起,不能對一個(gè)字段返回一個(gè)明確的消息。6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)字段校驗(yàn)方式<fieldname="birth"><field-validatortype="date"><!--下面指定日期字符串時(shí),必須使用本Locale的日期格式--><paramname="min">1900-01-01</param><paramname="max">2050-02-21</param><message>生日必須在${min}到${max}之間</message></field-validator></field>被校驗(yàn)的字段校驗(yàn)器名為校驗(yàn)器指定校驗(yàn)參數(shù)校驗(yàn)失敗后的提示信息6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)非字段方式<!—指定校驗(yàn)器名--><validatortype="date"><!--使用該校驗(yàn)器校驗(yàn)birth屬性--><paramname="fieldName">birth</param><!--指定日期校驗(yàn)器的范圍--><paramname="min">1900-01-01</param><paramname="max">2050-02-21</param><!--指定校驗(yàn)失敗后的輸出birth.rang對應(yīng)的國際化信息--><messagekey="birth.range"/></validator>6.2.3通過XWork校驗(yàn)框架實(shí)現(xiàn)校驗(yàn)器(valiator)requiredvalidator(必填校驗(yàn)器)requiredstringvalidator(必填字符串校驗(yàn)器)stringlengthvalidator(字符串長度校驗(yàn)器)regexvalidator(表達(dá)式校驗(yàn)器)emailvalidator(郵件校驗(yàn)器)urlvalidator(網(wǎng)址校驗(yàn)器)intvalidator(整數(shù)校驗(yàn)器)doublevalidator(雙精度數(shù)校驗(yàn)器)6.2.2編寫校驗(yàn)規(guī)則文件利用Struts2的校驗(yàn)框架進(jìn)行輸入驗(yàn)證例子:basicValidate無需對程序代碼做任何改變,只需編寫校驗(yàn)規(guī)則文件。regist.jspRegistAction.javaRegistAction-validation.xmlstruts.xml6.3國際化支持程序國際化是商業(yè)系統(tǒng)的一個(gè)基本要求今天的軟件系統(tǒng)不再是簡單的單機(jī)程序,往往都是一個(gè)開放系統(tǒng)。需要面對來自全世界各個(gè)地方的瀏覽者。因此,國際化是商業(yè)系統(tǒng)中不可缺少的一部分。Struts2的國際化是建立在Java國際化的基礎(chǔ)上通過提供不同國家/語言環(huán)境的消息資源,然后通過ResourceBuddle加載指定Locale對應(yīng)的資源文件,再取得該資源文件中指定key對應(yīng)的消息。Struts2框架對Java程序國際化進(jìn)行了進(jìn)一步的封裝,從而簡化了應(yīng)用程序的國際化。6.3.1國際化實(shí)現(xiàn)原理國際化即通常所說的i18n(Internationalization),是指程序能夠在不修改內(nèi)部代碼的前提下,根據(jù)不同的語言以及地區(qū)顯示相應(yīng)的界面。國際化中涉及到的幾個(gè)概念:國際化資源文件:保存各種版本語言編寫的消息。程序擁有自動(dòng)選擇國際化資源文件的功能。Locale:對應(yīng)區(qū)域/語言等信息。ResourceBundle:用來加載國際化資源。I18nInterceptor:Struts2提供的國際化攔截器,負(fù)責(zé)處理Locale相關(guān)信息。6.3.1國際化實(shí)現(xiàn)原理修改瀏覽器語言設(shè)置修改瀏覽器語言設(shè)置6.3.2準(zhǔn)備國際化資源文件Struts2的國際化資源文件以.properties結(jié)尾,文件名前綴可以任意命名。習(xí)慣上命名方式有以下3種:文件名前綴.properties。文件名前綴_語言種類.properties。文件名前綴_語言種類_國家代碼.properties語言代碼字段必須是有效的ISO(InternationalStandardizationOrganization,國際標(biāo)準(zhǔn)化組織)語言代碼,ISO-639標(biāo)準(zhǔn)定義的這些代碼格式為英文小寫、雙字符。6.3.2準(zhǔn)備國際化資源文件國家代碼字段語言語言代碼國家代碼漢語(Chinese)ZhCN英語(English)EnUS法語(French)FrFR德語(German)deDE日語(Japanese)jaJP意大利語(Italian)itIT6.3.2準(zhǔn)備國際化資源文件國際化資源文件的內(nèi)容結(jié)構(gòu)“key”=“value”“key”對應(yīng)消息名,可以任意命名,“value”則應(yīng)該是同一信息不同的語言表示,對于不同語言的配置文件,“key”都是一致的而“value”的內(nèi)容不同。
漢語的配置文件內(nèi)容為: hello=你好 英語的配置文件內(nèi)容為: hello=hello
法語的配置文件內(nèi)容為: hello=bonjour6.3.2準(zhǔn)備國際化資源文件根據(jù)國際化信息的作用范圍可以將國際化資源文件分為3種:全局范圍:包范圍Action范圍6.3.2準(zhǔn)備國際化資源文件全局范圍:該資源文件被放置在WEB-INF/classes路徑下,文件信息可以在整個(gè)工程范圍內(nèi)被使用。它在“struts.xml”中配置方式的為:<constantname="struts.custom.i18n.resources"value=""/>屬性value的值為全局范圍資源文件的文件名前綴6.4.2準(zhǔn)備國際化資源文件包范圍:該資源文件被放置在對應(yīng)包的根
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024屆貴港市重點(diǎn)中學(xué)高三年級四月考數(shù)學(xué)試題
- 采購合同維保內(nèi)容
- 編制合同心得體會(huì)
- 防汛應(yīng)急演練
- 銀行會(huì)計(jì)主管述職報(bào)告
- 遼寧省丹東市七校協(xié)作體2024-2025學(xué)年高一上學(xué)期11月期中地理試題
- 高考班考題昌黎文匯學(xué)校2024-2025學(xué)年第一學(xué)期期中考試高二化學(xué)試題
- 放射性示蹤在醫(yī)學(xué)影像中的作用
- 風(fēng)電電纜相關(guān)行業(yè)投資規(guī)劃報(bào)告范本
- 基礎(chǔ)地質(zhì)勘查服務(wù)相關(guān)項(xiàng)目投資計(jì)劃書
- 安全生產(chǎn)科技創(chuàng)新與應(yīng)用
- 豐田普拉多說明書
- 人工智能在文化傳承與遺產(chǎn)保護(hù)中的價(jià)值實(shí)現(xiàn)
- 2024年汽修廠開業(yè)計(jì)劃書
- ISTA標(biāo)準(zhǔn)-2A、2B、2C系列解讀(圖文)
- 科技成果轉(zhuǎn)化與應(yīng)用推廣
- 日間手術(shù)應(yīng)急預(yù)案方案
- 退費(fèi)賬戶確認(rèn)書
- 幼兒園小班《汽車滴滴響》
- 杭州娃哈哈精密機(jī)械有限公司新增年產(chǎn)40000臺(tái)展示冰柜產(chǎn)品生產(chǎn)線的技術(shù)改造項(xiàng)目環(huán)境影響報(bào)告
- 安徽省示范高中培優(yōu)聯(lián)盟2023-2024學(xué)年高一上學(xué)期冬季聯(lián)賽數(shù)學(xué)試題(含答案)
評論
0/150
提交評論