




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 日志及異常處理我們學(xué)習(xí)過(guò)Java異常處理和JSP的相關(guān)課程。本章,我們將對(duì)Web應(yīng)用程序中得異常集中處理。對(duì)于情況嚴(yán)重的系統(tǒng)異常我們需要將其寫(xiě)入日志文件,對(duì)于用于操作不規(guī)范的異常我們應(yīng)該給出客戶友好的提示信息。在本章中我們將講解如何使用lor4j框架來(lái)實(shí)現(xiàn)日志文件的記錄,以及如何設(shè)計(jì)web應(yīng)用程序的結(jié)構(gòu)來(lái)實(shí)現(xiàn)相應(yīng)異常的處理。5.1 日志概述5.1.1 日志簡(jiǎn)介軟件的運(yùn)行過(guò)程離不開(kāi)日志。日志的主要作用是記錄一些重要的操作信息,比如應(yīng)用權(quán)限的修改、程序運(yùn)行的系統(tǒng)異常、導(dǎo)致致命錯(cuò)誤的異常,日志文件記錄的信息一般包括錯(cuò)誤類型、時(shí)間、錯(cuò)誤點(diǎn)。日志文件能夠幫助用戶提前發(fā)現(xiàn)和避免災(zāi)難,并且找到系統(tǒng)發(fā)
2、生的根本原因。位程序的升級(jí)、維護(hù)提供有力保障。比如當(dāng)你開(kāi)發(fā)完一個(gè)項(xiàng)目、并交互給客戶使用后發(fā)現(xiàn)在客戶的環(huán)境中不能運(yùn)行。由于是以window服務(wù)的防是啟動(dòng)的web服務(wù)器,所有不能使用控制臺(tái)的方式查看異常信息,這時(shí)將給維護(hù)人員或?qū)嵤┤藛T將無(wú)從下手。但如果將系統(tǒng)的異常信息記錄到日志文件中,維護(hù)人員或?qū)嵤┤藛T就可以根據(jù)日志文件中記錄的運(yùn)行信息解決問(wèn)題。也就是說(shuō)在我們開(kāi)發(fā)的系統(tǒng)中需要將運(yùn)行的一些信息、狀態(tài)、過(guò)程使用文件流的方式將其寫(xiě)在硬盤(pán)的某一個(gè)文件或多個(gè)文件中,這就是我們所說(shuō)的日志記錄。5.1.2 log4j簡(jiǎn)介log4j是Apache的一個(gè)開(kāi)放源代碼項(xiàng)目,log4j框架是用Java語(yǔ)言編寫(xiě)的標(biāo)準(zhǔn)日志記
3、錄框架。作為Jakarta項(xiàng)目的一部分,它在Apache軟件許可證(Apache Software License)下分發(fā),以速度和靈活性為中心概念:log4j環(huán)境是完全可配置的,通過(guò)使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過(guò)定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過(guò)程。最令人感興趣的就是,這些可以通過(guò)一個(gè)配置文件來(lái)靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼。此外,通過(guò)Log4j其他語(yǔ)言接口,您可以在C、C+、.Net、PL/SQL程序
4、中使用Log4j,其語(yǔ)法和用法與在Java程序中一樣,使得多語(yǔ)言分布式系統(tǒng)得到一個(gè)統(tǒng)一一致的日志組件模塊。而且,通過(guò)使用各種第三方擴(kuò)展,您可以很方便地將Log4j集成到J2EE、JINI甚至是SNMP應(yīng)用中。log4j的好處在于:l 通過(guò)修改配置文件,就可以決定log信息的目的地控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等。l 通過(guò)修改配置文件,可以定義每一條日志信息的級(jí)別,從而控制是否輸出。在系統(tǒng)開(kāi)發(fā)階段可以打印詳細(xì)的log信息以跟蹤系統(tǒng)運(yùn)行情況,而在系統(tǒng)穩(wěn)定后可以關(guān)閉log輸出,從而在能跟蹤系統(tǒng)運(yùn)行情況的同時(shí),又減少了垃圾代碼(Syste
5、m.out.println(.)等)。l 使用log4j,需要整個(gè)系統(tǒng)有一個(gè)統(tǒng)一的log機(jī)制,有利于系統(tǒng)的規(guī)劃。5.2 log4j的使用log4j是apache提供的開(kāi)源的第三方框剪,也就是在在j2ee開(kāi)發(fā)包中并沒(méi)有對(duì)log4j的支持,當(dāng)我們需要使用log4j時(shí)必須添加相應(yīng)的jar包。根據(jù)前面對(duì)于log4j的介紹我們知道它是通過(guò)配置文件來(lái)設(shè)置輸入的內(nèi)容、格式、目標(biāo),所以我們也必須掌握l(shuí)og4j配置文件的編寫(xiě)。最后還需在代碼中添加log4j的調(diào)用。由此可知log4j日志系統(tǒng)的使用步驟有:添加log4j支持、配置log4j配置文件、在java代碼中調(diào)用log4j記錄日志。5.2.1 添加log4j
6、首先需要獲取log4j的jar包,可以在apache的官方網(wǎng)站中下載、其下載頁(yè)面路徑是/,該頁(yè)面中包含log4j的所有版本下載,如:1.2、1.3、2.0。下載后將其保存在指定目錄中。然后就可以將log4j的jar包添加到web應(yīng)用程序中。選擇web應(yīng)用程序項(xiàng)目點(diǎn)擊右鍵à【Properties】à【Java Build Path】出現(xiàn)如圖5-1所示的界面。圖5-1 添加jar包選擇【Libraries】à【Add External JARs】出現(xiàn)如圖5-2所示的文件選擇對(duì)話框。圖5-2 選擇log4j支持包選擇log
7、4j支持包完成添加。5.2.2 創(chuàng)建log4j配置文件log4j配置文件必須保存在源代碼跟目錄中、及src下,并且文件名是perties(也可以使用log4j.xml文件配置)。選擇src目錄點(diǎn)擊右鍵,選擇【New】à【File】選項(xiàng),彈出“新建文件”對(duì)話框,輸入文件名“perties”,點(diǎn)擊“完成”按鈕,創(chuàng)建工作結(jié)束,如圖5-3所示。圖5-3 創(chuàng)建配置文件src中的perties配置文件是專門(mén)用來(lái)配置日志信息的輸出內(nèi)容、格式等。該配置文件的內(nèi)容如下:# 配置到控制臺(tái)的日志信息輸出源 #log4j.appender.stdout
8、= org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = %d %m %n# 配置到文件的日志信息輸出源 #log4j.appender.f = org.apache.log4j.FileAppenderlog4j.appender.f.File = i:/test.loglog4j.a
9、ppender.f.layout = org.apache.log4j.PatternLayoutlog4j.appender.f.layout.ConversionPattern = %dyyyy-MM-dd HH:mm:ss %l %m %n# 設(shè)置日志信息的輸出級(jí)別和啟動(dòng)的輸出源 #log4j.rootLogger=warn,stdoutMyEclipse中屬性文件默認(rèn)的編碼格式為ISO-8859-1,該編碼不支持中文。當(dāng)屬性文件中包含中文內(nèi)容時(shí)將無(wú)法保存,此時(shí)可以修改文件的編碼格式,選擇菜單【W(wǎng)indow】à【Preferences】à【Genernal】à
10、;【Content Types】出現(xiàn)如圖5-4所示的文檔格式設(shè)置界面。圖5-4 修改編碼格式選擇圖5-4中的ContentTypes中的【Text】à【Java Properties File】,修改Default encoding的值為“UTF-8”,即將屬性文件的默認(rèn)編碼格式修改為“UTF-8”字符集。如圖5-5所示。圖5-5 修改編碼格式點(diǎn)擊【Update】à【OK】完成編碼格式修改。在perties文件中所配置的內(nèi)容包含如下幾點(diǎn):1、輸出源配置輸出源配置是指將日志信息以指定格式輸出到指定的目標(biāo),一般目標(biāo)分為兩種、即控制臺(tái)和文件。如果輸出目標(biāo)類是時(shí)控
11、制臺(tái)則使用org.apache.log4j.ConsoleAppder類實(shí)現(xiàn)輸出管理、目標(biāo)屬性為System.out(系統(tǒng)標(biāo)準(zhǔn)輸出流);如果輸出目標(biāo)是日志文件則使用org.apache. log4j.FileAppender類實(shí)現(xiàn)輸出管理、目標(biāo)屬性File登錄日志文件路徑和文件名。當(dāng)然日志文件輸出目標(biāo)除了控制臺(tái)、文件外還有HTML頁(yè)面等形式。2、輸出源布局配置輸出源都需要使用org.apache.log4j.PatternLayout類實(shí)現(xiàn)輸出日志內(nèi)容格式和布局管理,在配置文件中通過(guò)log4j.appender.f.layout.ConversionPattern配置PatternLayout
12、類的日志信息格式。%d表示在日志信息中出當(dāng)前系統(tǒng)時(shí)間、時(shí)間的格式通過(guò)后面的一個(gè)日期格式的字符串表達(dá)式控制(字符串表達(dá)式的格式和SimpleDateFormat)相同;%l表示在日志信息中輸出事件發(fā)生的文字,包括雷鳴、發(fā)生的線程、以及代碼中的行數(shù)。例如:輸出日志信息為:com.sanlian.javaWeb.ch5.Test.main(Test.java:16)說(shuō)明日志事件發(fā)生在Test類中的main線程中,在代碼中的行數(shù)為第16行;%p表示輸出日志信息的級(jí)別;%m用來(lái)輸出調(diào)用log4j代碼中的指定信息;%n用于輸出一個(gè)回車(chē)換行符。3、優(yōu)先級(jí)配置在log4j中的日志信息是有優(yōu)先級(jí)別的,通過(guò)log
13、4j.rootLogger配置。在log4j中的優(yōu)先級(jí)有:off、fatal、error、warn、info、debug、all或者您定義的級(jí)別。log4j建議只使用四個(gè)級(jí)別,優(yōu)先級(jí)從高到低分別是error、warn、info、debug。通過(guò)在這里定義的級(jí)別,您可以控制到應(yīng)用程序中相應(yīng)級(jí)別的日志信息的開(kāi)關(guān)。假如在一個(gè)級(jí)別為q的Logger中發(fā)生一個(gè)級(jí)別為p的日志請(qǐng)求,如果p>=q,那么請(qǐng)求將被啟用。比如在配置文件定義的輸出級(jí)別是info,則應(yīng)用程序中所有debug級(jí)別的日志信息將不被打印出來(lái)。因?yàn)閐ebug的優(yōu)先級(jí)別小于info,所以不會(huì)輸出。4、啟動(dòng)輸出源在配置文件中配置的輸出目標(biāo)不
14、會(huì)都起作用,只是使用到的輸出源才會(huì)起效,這需要在配置優(yōu)先級(jí)的log4j.rootLogger后添加相應(yīng)的輸出源,如配置文件中的:log4j.rootLogger=warn,stdout表示在設(shè)置輸出級(jí)別為warn的同時(shí)啟動(dòng)stdout輸出源,及日志信息將會(huì)輸出到控制臺(tái),但是不會(huì)輸出到e盤(pán)的test.log文件中。當(dāng)然在配置文件中也可以啟動(dòng)多個(gè)輸出源,如:log4j.rootLogger=warn,stdout,f表示將日志信息同時(shí)輸出在控制臺(tái)和e:/test.log文件中。5、注釋在屬性文件中(即后綴名為.properties的文件)使用“#”編寫(xiě)注釋。5.2.3 使用log4j輸出日志當(dāng)完成
15、支持添加和配置文件添加之后就可以在程序中使用log4j了。在例5-1中我們通過(guò)測(cè)試類來(lái)實(shí)現(xiàn)不同級(jí)別的日志信息輸出。例5-1:記錄日志信息package com.sanlian.javaWebAd.ch5;import org.apache.log4j.Logger;public class Test public static void main(String args) /獲得日志記錄器,這個(gè)記錄器將負(fù)責(zé)控制日志信息Logger log = Logger.getLogger(Test.class);/調(diào)用log對(duì)象的相應(yīng)方法輸出不同級(jí)別的日志信息/輸出fatal級(jí)別的日志信息log.fata
16、l("-fatal-");/輸出error級(jí)別的日志信息log.error("-error-");/輸出warn級(jí)別的日志信息log.warn("-warn-");/輸出info級(jí)別的日志信息("-info-");/輸出debug級(jí)別的日志信息("-debug-");在上例中,我們使用日志記錄器的相應(yīng)方法輸出了每種級(jí)別的日志信息。其輸出內(nèi)容如圖5-6所示。圖5-6 log4j輸出結(jié)果因?yàn)樵谂渲梦募性O(shè)置了輸出級(jí)別為warn,所以比warn級(jí)別低的info、debu
17、g信息沒(méi)有被輸出。又因?yàn)闆](méi)有在配置文件中啟動(dòng)文件輸出源,所示在i盤(pán)中不能找到test.log文件和日志信息。如果修改配置文件的級(jí)別和輸出源如下:log4j.rootLogger=debug,stdout,f運(yùn)行時(shí)將看到空臺(tái)的內(nèi)容如圖5-7所示。圖5-7 輸出所有級(jí)別的日志信息在i盤(pán)中生成的test.log內(nèi)容如圖5-8所示。圖5-8 日志文件對(duì)比5-7和5-8我們可以看出在日志文件中記錄的每個(gè)日志信息所發(fā)生的位置,這是因?yàn)槲覀冊(cè)谖募敵鲈吹牟季址绞街惺褂?l的緣故。5.3 web應(yīng)用程序架構(gòu)設(shè)計(jì)在web應(yīng)用程序中有很多的異常,如果不進(jìn)行相應(yīng)的處理在頁(yè)面將不能得到友好的提示信息,并且也不能為維護(hù)
18、人員提供技術(shù)保障。在web應(yīng)用程序中的異常通常分為兩種類型,即系統(tǒng)異常及業(yè)務(wù)異常。系統(tǒng)異常通常需要記錄到日志文件中,方便維護(hù)人員解決問(wèn)題;業(yè)務(wù)異常需要返回給客戶端作出友好的提示。結(jié)合MVC設(shè)計(jì)模式和log4j日志系統(tǒng)可以對(duì)系統(tǒng)進(jìn)行如圖5-9所示的架構(gòu),以便將系統(tǒng)異常記錄日志、將業(yè)務(wù)異常提示給客戶端。圖5-9 web應(yīng)用程序架構(gòu)圖圖5-9中的黑色實(shí)體線條表示請(qǐng)求走向和模塊調(diào)用走向。當(dāng)請(qǐng)求進(jìn)入web應(yīng)用程序是首先都必須經(jīng)過(guò)BaseServlet,然后才是執(zhí)行相應(yīng)的控制處理servlet,通過(guò)servlet調(diào)用業(yè)務(wù)方法,業(yè)務(wù)方法調(diào)用DAO訪問(wèn)數(shù)據(jù)庫(kù)。圖5-9中的紅色虛線表示異常處理的流程。在程序中異
19、??赡軙?huì)在每一個(gè)階段發(fā)生,但是所有的異常都向外拋出,一直拋到BaseServlet集中處理。為了能夠在BaseServlet中方便集中處理異常,我們?cè)诔绦蛑袆?chuàng)建兩個(gè)自定義異常類,分別是BizException、SysException。其實(shí)現(xiàn)代碼如下:BizSysException類package com.sanlian.javaWebAd.ch5.util;/* * 自定義業(yè)務(wù)異常 */public class BizException extends RuntimeException public BizException(String message)super(message);Sys
20、Exception類package com.sanlian.javaWebAd.ch5.util;/* * 自定義系統(tǒng)異常 */public class SysException extends RuntimeException public SysException(String message)super(message);BizException、SysException通過(guò)繼承RuntimeException可以降低代碼中異常手動(dòng)拋出的痛苦,因?yàn)檫\(yùn)行時(shí)異常不需要在方法中使用trycatch處理、也不需要在方法手使用throws顯示的聲明。在BaseServlet中通過(guò)判斷異常的類型來(lái)實(shí)
21、現(xiàn)不同的處理,其實(shí)現(xiàn)代碼如下:BaseServlet類package com.sanlian.javaWebAd.ch5.web.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;im
22、port com.sanlian.javaWebAd.ch5.util.BizException;public class BaseServlet extends HttpServlet Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException trysuper.service(request, response);catch(Exception e)/判斷異常的內(nèi)容if(e instanceof Bi
23、zException)/自定義異常,將異常信息保存到request中request.setAttribute("errorMessage", e.getMessage();elseString message = "系統(tǒng)正在升級(jí)維護(hù),請(qǐng)于管理員聯(lián)系!"request.setAttribute("errorMessage",message);/記錄日志 log4jLogger log = Logger.getLogger(BaseServlet.class);log.warn(e.getMessage();/跳轉(zhuǎn)到錯(cuò)誤頁(yè)面String
24、url = "/common/error.jsp"request.getRequestDispatcher(url).forward(request, response);在該BaseServlet中通過(guò)判斷異常類型進(jìn)行操作。如果是業(yè)務(wù)類型則直接將業(yè)務(wù)信息保存在request中,并跳轉(zhuǎn)錯(cuò)誤頁(yè)面顯示業(yè)務(wù)信息;如果是系統(tǒng)異常則將異常信息記錄到日志文件中,并保存一個(gè)友好的提示信息在request中,并跳轉(zhuǎn)到錯(cuò)誤頁(yè)面提示。普通的控制Servlet通過(guò)繼承至BaseServlet來(lái)實(shí)現(xiàn)異常的總處理。錯(cuò)誤頁(yè)面的實(shí)現(xiàn)代碼如下所示:error.jsp<% page language=
25、"java" pageEncoding="UTF-8"%><html><head> <title>錯(cuò)誤信息</title></head> <body> $requestScope.errorMessage </body></html>如例5-2通過(guò)該架構(gòu)完成用戶登錄操作。例5-2:用戶登錄通過(guò)如上的系統(tǒng)架構(gòu)可知登錄功能的流程如圖5-10所示。圖5-10 登錄流程圖數(shù)據(jù)庫(kù)名為DB,其中有一表個(gè)內(nèi)容如下:create table user_info ( us
26、er_id int identity(1,1) primary key, user_no varchar(15) not null, user_account varchar(30) not null, user_pass varchar(30) not null, user_name varchar(20) not null, user_pid varchar(18) not null, user_sex bit default(1) not null, user_birthday datetime not null, user_address varchar(100) null, user
27、_email varchar(50) null)創(chuàng)建和表相對(duì)應(yīng)的實(shí)體類UserInfo。1、DataUtil類DataUtil用于創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象和關(guān)閉數(shù)據(jù)庫(kù)連接對(duì)象,實(shí)現(xiàn)代碼如下:package com.sanlian.javaWebAd.ch5.pers;import java.sql.Statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;/* * 數(shù)據(jù)功能類 * 得到數(shù)據(jù)庫(kù)連接、關(guān)閉數(shù)據(jù)庫(kù)連接 */
28、public class DataUtil /* * 得到數(shù)據(jù)庫(kù)連接對(duì)象 */public static Connection getConn() throws ExceptionConnection conn = null;Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");String url = "jdbc:sqlserver:/localhost:1433;databaseName=DB"conn = DriverManager.getConnection(url,"
29、;sa","123456");return conn;/* * 關(guān)閉查詢 * param rs 結(jié)果集 * param st 上下文 * param conn 連接 */public static void closeConn(ResultSet rs,Statement st,Connection conn)try rs.close(); catch (Exception e) try st.close(); catch (Exception e) try conn.close(); catch (Exception e) /* * 關(guān)閉增、刪、該 * para
30、m st 上下文 * param conn 連接 */public static void closeConn(Statement st,Connection conn)try st.close(); catch (Exception e) try conn.close(); catch (Exception e) 2、UserDAO類該類稱為數(shù)據(jù)訪問(wèn)類。在web應(yīng)用程序中將所有的數(shù)據(jù)訪問(wèn)類統(tǒng)稱為數(shù)據(jù)訪問(wèn)層,主要用于對(duì)數(shù)據(jù)的數(shù)據(jù)進(jìn)行訪問(wèn),執(zhí)行增、刪、改、查sql語(yǔ)句。UserDAO類的實(shí)現(xiàn)代碼如下所示:package com.sanlian.javaWebAd.ch5.pers.dao;imp
31、ort java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import com.sanlian.javaWebAd.ch5.entity.UserInfo;import com.sanlian.javaWebAd.ch5.pers.DataUtil;import com.sanlian.javaWebAd.ch5.util.SysException;public class UserDAO public UserInfo queryByAccount(String account)Us
32、erInfo user = null;/定義數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象Connection conn = null;PreparedStatement q = null;ResultSet rs = null;try conn = DataUtil.getConn(); /得到連接/創(chuàng)建sql語(yǔ)句預(yù)編譯對(duì)象String sql = "select * from user_info where user_account=?"q = conn.prepareStatement(sql);/設(shè)置參數(shù)q.setString(1, account);/執(zhí)行rs = q.executeQuery(
33、);if (rs.next() user = new UserInfo();user.setUserAccount(rs.getString("user_account");user.setUserPass(rs.getString("user_pass");user.setUserName(rs.getString("user_name"); catch (Exception e) /將系統(tǒng)異常轉(zhuǎn)換為自定義系統(tǒng)異常throw new SysException(e.getMessage();finallyDataUtil.closeC
34、onn(rs, q, conn);return user;3、UserBiz類用戶信息業(yè)務(wù)類。在web應(yīng)用程序中所有的業(yè)務(wù)類組成了業(yè)務(wù)邏輯成,主要用于完成業(yè)務(wù)邏輯處理。比如登錄判斷,訂單處理等。UserBiz類的實(shí)現(xiàn)代碼如下:package com.sanlian.javaWebA;import com.sanlian.javaWebAd.ch5.entity.UserInfo;import com.sanlian.javaWebAd.ch5.pers.dao.UserDAO;import com.sanlian.javaWebAd.ch5.util.BizException
35、;public class UserBiz private UserDAO udao = new UserDAO();/* * 登錄業(yè)務(wù)方法 * param account 帳號(hào) * param pwd 密碼 * return */public UserInfo login(String account,String pwd)UserInfo emp = null;UserInfo temp = this.udao.queryByAccount(account);if(temp != null)if(pwd!=null && pwd.equals(temp.getUserPas
36、s()/登錄成功emp = temp;elsethrow new BizException("密碼錯(cuò)誤");elsethrow new BizException("賬號(hào)錯(cuò)誤");return emp;在登錄的業(yè)務(wù)方法中,根據(jù)客戶端輸入的帳號(hào)、密碼進(jìn)行驗(yàn)證,并使用業(yè)務(wù)異常的方式將業(yè)務(wù)信息返回到上一層(即控制層、Servlet中)。4、LoginServletpackage com.sanlian.javaWebAd.ch5.web.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sanlian.javaWebA.UserBiz;import com.sanlian.javaWebAd.ch5.entity.UserInfo;public class LoginSer
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 屋面防水勞務(wù)分包合同
- 文化創(chuàng)意產(chǎn)業(yè)發(fā)展項(xiàng)目投資合同書(shū)
- 運(yùn)輸承包合同書(shū)
- 吸糞車(chē)租賃合同
- 買(mǎi)賣(mài)中介居間合同
- 民宿預(yù)訂合同
- 鉆機(jī)承包合同
- 武漢工程大學(xué)郵電與信息工程學(xué)院《運(yùn)動(dòng)康復(fù)治療技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 昆明衛(wèi)生職業(yè)學(xué)院《JavaWeb框架應(yīng)用開(kāi)發(fā)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 永州師范高等專科學(xué)?!毒植拷馄蕦W(xué)1》2023-2024學(xué)年第二學(xué)期期末試卷
- 光伏電纜橋架敷設(shè)施工方案
- 特殊學(xué)生心理健康檔案表
- 文山-硯山天然氣支線管道工程項(xiàng)目環(huán)境影響報(bào)告書(shū)
- 新選供應(yīng)商初期考察表模板
- 《煤礦安全規(guī)程》安全生產(chǎn)月考試題庫(kù)
- 2023春下冊(cè)五年級(jí)語(yǔ)文《每課生字預(yù)習(xí)表》
- 車(chē)間領(lǐng)班求職簡(jiǎn)歷
- 八年級(jí)下物理校本作業(yè)(人教版)課時(shí)作業(yè)
- 05G359-3 懸掛運(yùn)輸設(shè)備軌道(適用于一般混凝土梁)
- (完整版)《城市軌道交通應(yīng)急處理》課程標(biāo)準(zhǔn)
- 2023年江蘇農(nóng)牧科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案解析
評(píng)論
0/150
提交評(píng)論