異常處理和驗(yàn)證控件_第1頁(yè)
異常處理和驗(yàn)證控件_第2頁(yè)
異常處理和驗(yàn)證控件_第3頁(yè)
異常處理和驗(yàn)證控件_第4頁(yè)
異常處理和驗(yàn)證控件_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

異常處理和驗(yàn)證控件第1頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月本章內(nèi)容錯(cuò)誤處理使用驗(yàn)證服務(wù)控件第2頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月5.1錯(cuò)誤處理一.異常處理異常:發(fā)生不同類型的錯(cuò)誤。拋出異常:系統(tǒng)或程序本身向外聲明一個(gè)異常發(fā)生。異常類:錯(cuò)誤的種類,都是特定類的對(duì)象。錯(cuò)誤頁(yè)面:一個(gè)特定的錯(cuò)誤頁(yè)面。處理異常:出現(xiàn)錯(cuò)誤時(shí)不希望只是出現(xiàn)錯(cuò)誤頁(yè)面,而是能對(duì)錯(cuò)誤直接處理。處理錯(cuò)誤的方法(級(jí)別):

1.在類級(jí)

2.在頁(yè)面級(jí)

3.在應(yīng)用程序級(jí)第3頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月二.在類級(jí)(程序中)使用try…catch語句塊處理異常try{doubledVal1=Convert.ToDouble(txtValue1.Text);doubledVal2=Convert.ToDouble(txtValue2.Text);doubleresult=dVal1/dVal2;labMessage.Text=txtValue1.Text+"/"+txtValue2.Text;labMessage.Text+="="+result;}catch(FormatExceptionex1){labMessage.Text="Pleaseenteravalidnumber";}catch(Exceptionex2){labMessage.Text="Unabletocomputeavaluewiththesevalues";}第4頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月有時(shí)需要使用finally做最后的處理,無論是否發(fā)生異常。try{//Openadatabaseconnection//ExecuteSQLstatement}catch(DbExceptionex){//Handledatabaseexception}finally{//Closedatabaseconnectionifitexists}第5頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月1.異常開銷不是多有的問題都需要使用異常來對(duì)待,如接受用戶數(shù)據(jù)的輸入。下面的處理方法并不是很合適:try{SomeBusinessObject.Login(email);

//Othercodedependentuponasuccessfullogin}catch(Exceptionex){//Displaymessagethatemailwasnotfound}使用下面的處理方法程序?qū)⒏咏眩篵oolokay=SomeBusinessObject.Login(email);if(!okay){//Displayerrormessageonpage}else{//Othercodedependentuponasuccessfullogin}第6頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月2.可能的異常處理策略當(dāng)有異常出現(xiàn)時(shí)有四種處理策略:通過捕獲異常來吞掉它,并且繼續(xù)正常執(zhí)行而忽略異常。在catch語句塊中完全處理異常。不捕獲異常而忽略它(讓其他類來處理它)。捕獲異常并重新拋出它,以便某個(gè)其它的類來處理它。說明:第一種方法根本不合適。屬于典型的不負(fù)責(zé)任。第二種方法最理想,但難以做到,不是什么問題自己都能夠解決。第三種方法也比較多見,有時(shí)候自己無能力處理,只好交給別人處理。第四種方法也比較多見,根據(jù)情況進(jìn)行處理,并將錯(cuò)誤上報(bào)。第7頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月try{//Othercodethatcausesanexception}catch(Exceptionex){//Dosomethingwithexception//Rethrowexceptionthrow;

或thrownewException(myMessage,ex);}第8頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月三.頁(yè)面級(jí)的異常處理ASP.NET提供了一個(gè)Page_Error事件,專門處理頁(yè)面級(jí)異常。看下面的事例。publicpartialclassPageExceptionTest:System.Web.UI.Page{ protectedvoidPage_Load(objectsender,EventArgse){BuggyMethod();}privatevoidBuggyMethod(){//Deliberatelythrowanexceptiontosimulate//uncaughtexceptionthrownewApplicationException("Yourbuggycodecausedanexception.");}

privatevoidPage_Error(objectsender,EventArgse){Exceptionex=Server.GetLastError();Response.Write("<h1>Anerrorhasoccurred</h1>");Response.Write("<h2>"+ex.Message+"</h2>");Response.Write("<pre>"+ex.StackTrace+"</pre>");Context.ClearError();//防止缺省錯(cuò)誤頁(yè)面顯示

}}Page_Error中不允許使用控件,所以只能使用Response.Write輸出數(shù)據(jù)。第9頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月通常不使用Page_Error事件處理器,一般使用Application_Error處理器,它屬于應(yīng)用程序一級(jí),比頁(yè)面級(jí)更有優(yōu)勢(shì)。第10頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月四、應(yīng)用程序級(jí)的異常處理有兩種方法:使用Application_Error處理器使用錯(cuò)誤頁(yè)面重定向1.使用Application_Error處理器Application_Error處理器比Page_Error更有優(yōu)勢(shì),它能處理所有頁(yè)面級(jí)的錯(cuò)誤。需要說明的是,Application_Error處理器定義在Global.asax文件中(可通過添加全局應(yīng)用程序類添加)。第11頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月下面例子把接收到的任何異常輸出到WindowsEventLog,可通過事件查看器瀏覽。voidApplication_Error(objectsender,EventArgse){ stringmsg="Url"+Request.Path+"Error:"+ Server.GetLastError().ToString(); try{//createtheWebErrorseventsourceifweneedtostringlogName="WebErrors";

if(!EventLog.SourceExists(logName))EventLog.CreateEventSource(logName,logName);//addanewerroreventtothelogEventLoglog=newEventLog();log.Source=logName;log.WriteEntry(msg,EventLogEntryType.Error);}catch(Exceptionex){//notmuchwecandowiththisexceptoutputittodebuggerDebug.WriteLine(ex.Message);}}第12頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月也可以把錯(cuò)誤形成郵件發(fā)送到指定的郵件中或把信息記錄到自定義文件中。見教材P180。第13頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月2.使用自定義錯(cuò)誤頁(yè)面如果在Page_Error和Application_Error中不使用Context.ClearError方法,則錯(cuò)誤會(huì)重定向到缺省的錯(cuò)誤頁(yè)面。錯(cuò)誤的頁(yè)面在開發(fā)環(huán)境和非開發(fā)環(huán)境下是不同的,開發(fā)環(huán)境下可以看到錯(cuò)誤的詳細(xì)信息。也可以將錯(cuò)誤頁(yè)面重定向到一個(gè)自定義的頁(yè)面,這需要修改配置文件。<system.web><customErrors

mode="On"defaultRedirect="FriendlyErrorPage.aspx"><error

statusCode="404"redirect="custom404.aspx"/><error

statusCode="500"redirect="custom500.aspx"/></customErrors></system.web>第14頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月5.2使用驗(yàn)證服務(wù)器控件驗(yàn)證控件用來測(cè)試用戶的輸入并設(shè)置輸入是否通過測(cè)試的屬性。驗(yàn)證控件需要引用頁(yè)面上其他的輸入控件。在用戶輸入時(shí),ASP.NET頁(yè)框架將用戶輸入傳遞到一個(gè)或多個(gè)適當(dāng)?shù)尿?yàn)證控件,由驗(yàn)證控件對(duì)輸入的信息進(jìn)行驗(yàn)證。ASP.NET提供了五種基本的驗(yàn)證類型控件和一個(gè)驗(yàn)證總結(jié)控件(ValidationSummary),它們分別由不同的驗(yàn)證控件來實(shí)現(xiàn)。第15頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月驗(yàn)證控件控件名稱說明RequiredFieldValidator確保輸入控件的值不為空,即必須輸入了數(shù)據(jù)CompareValidator使用比較運(yùn)算符(小于、等于、大于等)將用戶的輸入與另一控件的常數(shù)值或?qū)傩灾颠M(jìn)行比較。RangeValidator檢查用戶的輸入是否在指定的上下邊界之間??梢詸z查數(shù)字、字母或日期對(duì)內(nèi)的范圍。可以將邊界表示為常數(shù)。RegularExpressionValidator檢查輸入是否與正則表達(dá)式定義的模式匹配。該驗(yàn)證類型允許檢查可預(yù)知的字符序列,如社會(huì)保障號(hào)、電子郵件地址、電話號(hào)碼、郵政編碼等中的字符序列。CustomValidator使用您自己編寫的驗(yàn)證邏輯檢查用戶的輸入。ValidationSummary以摘要的形式顯示頁(yè)上所有驗(yàn)證程序的驗(yàn)證錯(cuò)誤。第16頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月下面展示了RequiredFieldValidator控件的使用<asp:TextBoxID="txtUserName"runat="server"/><asp:RequiredFieldValidatorId="reqUser"runat="server"

ControlToValidate="txtUserName"

Text="PleaseenteraUserName"/>其中兩個(gè)重要屬性ControlToValidate用來建立關(guān)聯(lián),Text顯示錯(cuò)誤提示。第17頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月一、表單驗(yàn)證過程表單數(shù)據(jù)的驗(yàn)證包括客戶端驗(yàn)證和服務(wù)器端驗(yàn)證客戶端驗(yàn)證:瀏覽器通過本地JavaScript腳本進(jìn)行驗(yàn)證,不需要與服務(wù)器交互,減少往返時(shí)間。效率高。服務(wù)器端驗(yàn)證:有些驗(yàn)證必須在服務(wù)器端進(jìn)行,因?yàn)樾枰c服務(wù)器上的數(shù)據(jù)進(jìn)行比較。兩種驗(yàn)證不是絕對(duì)分開的。有時(shí)因?yàn)榭蛻舳瞬恢С?,客戶端?yàn)證可能行不通,另外也存在一定的風(fēng)險(xiǎn)(存在腳本漏洞)。所以服務(wù)器端驗(yàn)證會(huì)更加安全。第18頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月1.客戶端驗(yàn)證過程客戶端驗(yàn)證就是驗(yàn)證的程序是在客戶端執(zhí)行,即控件轉(zhuǎn)換成相關(guān)的HTML元素和一些JavaScript程序,例如RequiredFieldValidator控件轉(zhuǎn)換后會(huì)有許多JavaScript代碼。見實(shí)例:ValidationSample.aspx UsingRequired.aspx可通過在瀏覽器查看源代碼,觀察生成的JavaScript代碼。第19頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月2.服務(wù)器端驗(yàn)證過程服務(wù)器端的驗(yàn)證需要在服務(wù)器端編寫相關(guān)驗(yàn)證程序。有時(shí)除了控件本身的驗(yàn)證以外,還需要編寫一定的程序進(jìn)行數(shù)據(jù)的檢查,例如和數(shù)據(jù)庫(kù)內(nèi)容的匹配比較,檢查用戶名是否已注冊(cè)等。見第5章實(shí)例:DisableClientValidation.aspx注意:Page.IsValid是頁(yè)面的屬性,當(dāng)為tue時(shí),說明客戶端控件合法,即驗(yàn)證控件驗(yàn)證通過。第20頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月3.常用驗(yàn)證屬性ControlToValidate:控件IDDisplay:錯(cuò)誤消息的顯示行為。可能的值是:None(不顯示驗(yàn)證消息),Static(占用固定的空間并顯示錯(cuò)誤消息),Dynamic(只有當(dāng)有錯(cuò)誤消息時(shí)分配空間并顯示消息).缺省值是Static.EnableClientScript:指示客戶端驗(yàn)證是否可用.缺省值是true.Enabled:驗(yàn)證控件是否可用ErrorMessage:驗(yàn)證失效,將要顯示在ValidationSummary控件中的錯(cuò)誤消息文本.ForeColor:驗(yàn)證實(shí)效,將要顯示錯(cuò)誤文本的顏色。缺省為Color.Red.IsValid:驗(yàn)證失效是否傳遞它的驗(yàn)證檢查,一般通過程序檢驗(yàn)時(shí)設(shè)置。SetFocusOnError:驗(yàn)證失敗,焦點(diǎn)是否移動(dòng)到相關(guān)控件。缺省為false.Text:驗(yàn)證失敗時(shí)顯示的錯(cuò)誤信息.ValidationGroup:指定驗(yàn)證控件所屬的驗(yàn)證組的名字.第21頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月二、RequiredFieldValidator控件RequiredFieldValidator控件用于在Web窗體頁(yè)面上保證用戶非空輸入,即對(duì)必填數(shù)據(jù)項(xiàng)已輸入數(shù)據(jù)而不會(huì)跳過。相關(guān)屬性:ControlToValidate屬性:設(shè)置相關(guān)聯(lián)控件。Display屬性:設(shè)置顯示方式,默認(rèn)為Static,可設(shè)置為Dynamic以保證多個(gè)相關(guān)聯(lián)驗(yàn)證控件的顯示信息都能動(dòng)態(tài)地顯示相關(guān)信息(即位置不固定)。ErrorMessages屬性:顯示的提示信息!InitialValue屬性:初始值,如果輸入控件的值與該值匹配,則驗(yàn)證失敗。見實(shí)例:UsingRequired.aspx第22頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月三、CompareValidator驗(yàn)證控件

比較兩個(gè)控件的輸入是否符合程序設(shè)定。同樣該控件也必須設(shè)置一個(gè)需要驗(yàn)證的控件與之關(guān)聯(lián)。如比較兩次輸入的口令是否一致。CompareValidator相關(guān)屬性ControlToValidate:需比較的控件之一。ControlToCompare:比較的控件之二(可省,使用屬性ValueToCompare)Operator:定義要執(zhí)行的比較類型。包括:EqualNotEqualGreaterThanGreaterThanEqualLessThanLessThanEqualDataTypeCheck檢查數(shù)據(jù)類型是否與Type屬性指定的類型一致。Type:分為String、Integer、Double、Date和Currency。ErrorMessage:設(shè)置當(dāng)驗(yàn)證失敗時(shí)出現(xiàn)的錯(cuò)誤信息。ValueToCompare:指定控件將要比較的常量見實(shí)例:UsingCompare.aspx第23頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月四、RangeValidator驗(yàn)證控件用于計(jì)算輸入控件的值,以確定該值是否在指定的上限與下限之間。RangeValidator相關(guān)屬性ControlToValidate屬性:指定要驗(yàn)證的輸入控件。MinimumValue和MaximumValue屬性:分別指定有效范圍的最小值和最大值。Type屬性:用于指定要比較的值的數(shù)據(jù)類型。在執(zhí)行任何比較之前,先將要比較的值轉(zhuǎn)換為該數(shù)據(jù)類型。類型同前。見實(shí)例:UsingRange.aspx第24頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月五、RegularExpressionValidator驗(yàn)證控件用于確定輸入控件的值是否與某個(gè)正則表達(dá)式所定義的模式相匹配。該驗(yàn)證類型允許檢查可預(yù)知的字符序列,如身份證號(hào)、電子郵件地址、電話號(hào)碼、郵政編碼等中的字符序列。RegularExpressionValidator相關(guān)屬性:屬性ValidationExpression指定用于驗(yàn)證輸入控件的正則表達(dá)式。正則表達(dá)式是一種語言,它可以明確描述文本字符串中的模式。通過特定的表達(dá)式語法規(guī)則驗(yàn)證表達(dá)式的合法性。例如:下面是正則表達(dá)式的一些示例

http(s)?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?用于驗(yàn)證InternetURL\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*用于驗(yàn)證EMAL[a-zA-Z]{4,8}必須為英文字母,最少四個(gè)字符,最多八個(gè)字符

\d{6}6位的整型數(shù)據(jù)

ASP.NET關(guān)于正則表達(dá)式的說明見P195。在有些網(wǎng)站提供相關(guān)資源。見實(shí)例:UsingRegExp.aspx第25頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月使用正則表達(dá)式1.使用RegEx類有時(shí)需要在程序中使用正則表達(dá)式,通過程序來對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。這就需要使用到RegEx類。RegEx類包含在System.Text.RegularExpressions命名空間。見教材實(shí)例:ScrapeHeadings.aspx注意:實(shí)例對(duì)于中文頁(yè)面將顯示亂碼,需要增加第二行的語句:WebClientclient=newWebClient();client.Encoding=Encoding.UTF8;stringcontent=client.DownloadString(txtUrl.Text);第26頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月2.正則表達(dá)式和安全SQL注入攻擊是常見的一種服務(wù)器攻擊手段。利用網(wǎng)站合法的SQL語句進(jìn)行注入,以達(dá)到竊取數(shù)據(jù)的、控制服務(wù)器的目的。例如,認(rèn)證網(wǎng)頁(yè)中會(huì)有型如:

select*fromadminwhereusername='XXX'and password='YYY'

的語句,若在正式運(yùn)行此句之前,沒有進(jìn)行必要的字符過濾,則很容易實(shí)施SQL注入。如在用戶名文本框內(nèi)輸入: abc’or1=1

在密碼框內(nèi)輸入:123則SQL語句變成:

select*fromadminwhereusername='abc’or1=1andpassword='123’

不管用戶輸入任何用戶名與密碼,此語句永遠(yuǎn)都能正確執(zhí)行,用戶輕易騙過系統(tǒng),獲取合法身份。防止注入的有效方法是對(duì)用戶輸入的數(shù)據(jù)進(jìn)行驗(yàn)證,確保數(shù)據(jù)是合法的。第27頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月看下面的示例<asp:TextBoxID="txtName"runat="server"></asp:TextBox><asp:RegularExpressionValidatorID="regName"runat="server"ControlToValidate="txtName"ValidationExpression="^[a-zA-Z'.\s]{1,50}"Text="Enteravalidname"/>

此處對(duì)輸入的數(shù)據(jù)做了要求,即匹配任何小寫字母大寫字母、單引號(hào)、逗點(diǎn)、空格,最少1個(gè),最多50個(gè)字符。第28頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月也可以在程序中作出檢驗(yàn)stringsource=(string)Cookie["someValue"];RegExreg=newRegEx("^[a-zA-Z'.\s]{1,50}");if(!reg.IsMatch(source)){//Sometypeoferrorhandlingwouldgohere}第29頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月六、CustomValidator控件自定義驗(yàn)證邏輯,需要?jiǎng)?chuàng)建一個(gè)服務(wù)器端驗(yàn)證函數(shù)用于執(zhí)行驗(yàn)證。如驗(yàn)證注冊(cè)用戶名在數(shù)據(jù)庫(kù)中是否已經(jīng)存在。用戶可以雙擊CustomValidator控件,也可以雙擊該控件的ServerValidate事件來完成自定義驗(yàn)證的代碼??聪旅娴氖纠?/p>

第30頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月下面這段代碼是用戶用于驗(yàn)證數(shù)據(jù)庫(kù)里的學(xué)生學(xué)號(hào)是否存在的函數(shù)。protectedvoidCustomValidator1_ServerValidate(objectsource,ServerValidateEventArgsargs){SqlConnectionconn=newSqlConnection("DataSource=LDB;InitialCatalog=Students;UserID=sa");conn.Open();intStuNO=args.Value;SqlCommandcmd=newSqlCommand("selectcount(*)fromstudentwherestuid="+StuNO,conn);intcount=Convert.ToInt32(cmd.ExecuteScalar());

if(count>0){args.IsValid=false;}else{args.IsValid=true;}}第31頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月下面方法檢查用戶輸入的是否是一個(gè)有效的未來日期protectedvoidcustDate_ServerValidate(objectsource,ServerValidateEventArgsargs){ stringsEnteredDate=args.Value; DateTimedt; boolconvertSuccessful=DateTime.TryParse(sEnteredDate,outdt); if(convertSuccessful&&dt>=DateTime.Today) args.IsValid=true;//validdateelse args.IsValid=false;//notavaliddate}args對(duì)象包含兩個(gè)屬性,Value保存了將要驗(yàn)證控件的字符串,IsValid用來設(shè)置輸入是否有效。第32頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月下面例子實(shí)現(xiàn)了對(duì)兩個(gè)文本框的驗(yàn)證。Enterusername:<br/><asp:TextBoxID="txtUser"runat="server"/><br/>Enteremail:<br/><asp:TextBoxID="txtEmail"runat="server"/><asp:CustomValidatorID="OrFieldValidator"runat="server"Text="Entereitherausernameoraemail"OnServerValidate="OrFieldValidator_ServerValidate"/>上面兩個(gè)文本框只用了一個(gè)驗(yàn)證控件,下面是驗(yàn)證控件的事件處理程序:protectedvoidOrFieldValidator_ServerValidate(objectsource,ServerValidateEventArgsargs){if(txtUser.Text.Length<=0&&txtEmail.Text.Length<=0)args.IsValid=false;elseargs.IsValid=true;}第33頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月自定義客戶端驗(yàn)證可通過設(shè)置控件的ClientValidationFunction屬性使驗(yàn)證在客戶端進(jìn)行。例如<asp:CustomValidatorID="OrFieldValidator"runat="server"Text="Entereitherausernameoraemail"

ClientValidationFunction="validateOrFields"OnServerValidate="OrFieldValidator_ServerValidate"/>此處既有服務(wù)器端驗(yàn)證,也增加了客戶端驗(yàn)證。客戶端驗(yàn)證不需要回傳,效率更高。第34頁(yè),課件共41頁(yè),創(chuàng)作于2023年2月使用客戶端驗(yàn)證需要定義客戶端驗(yàn)證函數(shù),并保證函數(shù)的簽名如下:

functionname(source,args)例如<scripttype="text/javascript">functionvalidateOrFields(source,args){varsUser=document.form1.<%=txtUser.ClientID%>.value;varsEmail=document.form1.<%=txtEmail.ClientID%>.value;

if(sUser==""&&sEmail==""){args.IsValid=false;

溫馨提示

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

評(píng)論

0/150

提交評(píng)論