基于WADE平臺的WEB應(yīng)用開發(fā)指南.doc_第1頁
基于WADE平臺的WEB應(yīng)用開發(fā)指南.doc_第2頁
基于WADE平臺的WEB應(yīng)用開發(fā)指南.doc_第3頁
基于WADE平臺的WEB應(yīng)用開發(fā)指南.doc_第4頁
基于WADE平臺的WEB應(yīng)用開發(fā)指南.doc_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

聯(lián)創(chuàng)科技長沙研發(fā)中心產(chǎn)品研發(fā)開發(fā)指南1 環(huán)境搭建1.1 開發(fā)所需工具 WEB服務(wù)器(Weblogic、Tomcat、Resin、Jetty等); 開發(fā)工具(Eclipse、Jcreator、Jbuilder等) 版本控制(WinCvs、TortoiseCVS等) 編譯打包(Ant,Eclipse等開發(fā)工具已內(nèi)置Ant工具)1.2 運行QuickStart應(yīng)用1、 運行WinCvs,點“登陸”,輸入版本控制服務(wù)器信息2、 從版本控制服務(wù)器上,檢出模塊(這里檢出quickstart應(yīng)用)3、 運行Ant編譯打包應(yīng)用進(jìn)入quickstart/build目錄,在dos窗口敲入ant命令 或 在集成了Ant工具的開發(fā)工具中運行ant4、 源碼目錄結(jié)構(gòu)+-etc 配置文件+-build 編譯腳本+-src 源文件+com.linkage.quickstart.bean 業(yè)務(wù)邏輯+com.linkage.quickstart.view 頁面邏輯+com.linkage.quickstart.util 工具文件+- web 頁面文件+- component 公共文件(來自component項目中)5、 配置Web服務(wù)器 配置連接池數(shù)據(jù)庫地址:50數(shù)據(jù)庫名稱:bosscrm2用戶名/密碼:sd_crm1/sdcrm1abc 配置JNDIJNDI必須與WEB-INF/classes/application.xml中配的JNDI一致 部署應(yīng)用6、 運行QuickStart應(yīng)用2 開發(fā)文檔編碼格式約束 如果是用JDBC實現(xiàn)的數(shù)據(jù)邏輯,必須需要DAO(關(guān)注具體sql的寫法)和Bean(關(guān)注業(yè)務(wù)邏輯)文件 代碼中不能使用try catch 方法,每個方法原形上寫上throws Exception 將異常拋出,由框架統(tǒng)一管理異常 不能使用System.out.println打印輸出調(diào)試信息,必須用內(nèi)置的log.debug,log.warn,.log.error輸出調(diào)試信息 提交版本規(guī)范,需要按/*$Id: VipInfo.java,v 1.9 2006/08/02 04:21:35 zhangc Exp $*/這種方式提交 方法需要寫注釋 每個頁面的頭文件中,將不再出現(xiàn) 等文件,通過在Body中指定自定義的wade:Body對象2.1.1 搭建新項目1、 復(fù)制quickstart應(yīng)用目錄,刪掉與新項目無關(guān)的文件,留下主要的配置文件2、 目錄結(jié)構(gòu)、文件說明+-src 源文件 +-com.linkage.xxx.bean 業(yè)務(wù)邏輯源文件(xxx目錄為新項目目錄) +-com.linkage.xxx.view 頁面邏輯源文件 +-com.linkage.xxx.util 輔助工具源文件 +-com.linkage.xxx.jwcs 組件類源文件+-web 頁面、資源文件 +-styles 樣式文件(.css) +-scripts 腳本文件(.js) +-component 公用頁面、資源文件 +-WEB-INF +-classes+-lib +-web.xml 需要更改Tapestry的ApplicationServlet的應(yīng)用名字 +-xxx.application Tapestry配置文件,文件名必須和web.xml配置的ApplicationServlet名字一致+-build 編譯腳本文件+-etc 配置文件 +-export 導(dǎo)入、導(dǎo)出配置文件 +-application.xml 應(yīng)用配置文件注:需要更改project/name的值,保持和web.xml中的配置一樣;更改database/jndi, database/username的值,例如: /設(shè)置默認(rèn)的連接名3、 運行ant,安裝應(yīng)用相關(guān)組件資源文件4、 在weblogic啟動腳本(startWebLogic.cmd)的java 命令中加上參數(shù):-Dorg.apache.tapestry.disable-caching=true -Dorg.apache.tapestry.enable-reset-service=true禁止Tapestry緩存功能,這樣修改Html文件后運行程序能夠直接生效。5、在服務(wù)器Domain下建立目錄:upload/attach:存放上傳附件upload/image:存放上傳圖片upload/export:存放定制導(dǎo)出文件upload/import:存放導(dǎo)入失敗文件upload/temp:存放臨時文件2.1.2 功能實現(xiàn)說明1. 需要的資源1、 業(yè)務(wù)邏輯類(JAVA) 注:如果業(yè)務(wù)邏輯是通過JDBC實現(xiàn)的,需要在bean目錄新建DAO,Bean文件2、 頁面邏輯類(JAVA) 注:銜接頁面與業(yè)務(wù)邏輯,需要建立與頁面對應(yīng)的Java文件3、 頁面文件(HTML)4、 頁面配置文件(PAGE)銜接頁面邏輯類與頁面文件的配置文件,主要定義頁面邏輯類的路徑,以及頁面需要使用的數(shù)據(jù)源,該文件與頁面文件同名并存放在同一個目錄例如:!-定義數(shù)據(jù)源,該數(shù)據(jù)源需要在頁面邏輯類中定義5、 將頁面配置到Tapestry應(yīng)用中在application文件中定義頁面的路徑,如:這樣,通過定義的page名字訪問頁面邏輯類2. 實現(xiàn)一個功能的步驟1、 在.application文件中注冊頁面的路徑2、 編寫ScheduleList.page文件3、 在page文件同目錄下編寫同名HTML文件,如ScheduleList.html4、 根據(jù)page文件中指定的文件路徑編寫java文件5、 編寫后臺邏輯(如果是JDBC邏輯,需編寫B(tài)ean和Dao文件,如果調(diào)用Tuxedo,需要編寫后臺程序)6、 配置菜單,在Sidebar.html新增菜單,如:日程管理3. 具體實現(xiàn)功能1. 新增信息 HTML寫法(參考quickstart/web/util/ScheduleList.html)說明:icon:圖標(biāo)路徑 redirectTo:調(diào)用頁面(component.util.ScheduleEdit)的方法(querySchedule) JAVA(PAGE)寫法(參考quickstart/src/./util/ScheduleEdit.java)public void createSchedule(IRequestCycle cycle) throws Exception PageData pd = getPageData();ScheduleBean bean = new ScheduleBean();bean.createInfo(pd, pd.getData(); /將頁面中獲取的數(shù)據(jù)提交給bean的createSchedule方法/如果是從查詢界面新開頁面,不用考慮傳遞參數(shù)pd.setTransferData(“cond”); /傳遞一組參數(shù)/如果是從查詢界面新開頁面,只需要設(shè)置參數(shù)一提示信息,需要跳轉(zhuǎn)的頁面和方法不需寫redirectToMsg(新增成功, SCHEDULE_LIST, querySchedules); /跳轉(zhuǎn)到頁面(SCHEDULE_LIST)的方法(querySchedules)或redirectToMsg(新增成功,選擇【繼續(xù)新增】跳轉(zhuǎn)到日程新增頁面,選擇【查看詳情】跳轉(zhuǎn)到日程詳情頁面,選擇【返回查詢】跳轉(zhuǎn)到日程查詢頁面, new String getPageName(), getPageName(), ITEM_LIST , new String inputItem, queryItem, setQueryCondition , new String 繼續(xù)新增, 查看詳情, 返回查詢 ); /成功后根據(jù)按鈕跳轉(zhuǎn)指定頁面 JAVA(BEAN)寫法(參考quickstart/src/./util/ScheduleBean.java) public void createSchedule(PageData pd, IData data) throws Exception UtilDAO dao = new UtilDAO(pd); data.put(SCHE_ID, dao.getSequence(SEQ_UTIL_SCHEDULE); /獲取SEQUENCE data.put(SCHE_CRSTAFF, pd.getContext().getStaffId(); /獲取登陸員工號 data.put(SCHE_CRTIME, common.getSysTime(); /獲取當(dāng)前時間 dao.insert(TF_DM_SCHEDULE, data); /將數(shù)據(jù)插入表(UTIL_SCHEDULE)中注:所有的數(shù)據(jù)都是以文本方式導(dǎo)入數(shù)據(jù)集中,包括時間(可以直接寫成yyyy-MM-dd HH:mm:ss這種格式的字符形式)2. 修改信息 HTML寫法(參考quickstart/web/./util/ScheduleList.html)說明:跳轉(zhuǎn)頁面并傳遞定義的參數(shù),將會將source指定的對象解析成url傳遞 JAVA(PAGE)寫法(參考quickstart/src/./util/ScheduleEdit.java)public void updateSchedule(IRequestCycle cycle) throws Exception PageData pd = getPageData();UtilBean bean = new UtilBean();bean.updateSchedule(pd, pd.getData();或/主要考慮同一個頁面如果打開多次,或者有多個人同時訪問,而在你更新之前已有人刪除或修改過信息的狀態(tài),這樣就需要傳遞目前獲取的關(guān)鍵數(shù)據(jù)列,如主鍵,狀態(tài)來識別信息是否能夠修改,假如刪除了,或者狀態(tài)已被變更過則不能刪除if (bean.updateSchedule(pd, pd.getData(), new String pd.getParamter(“SCHE_ID”), pd.getParameter(“SCHE_STATUS”) common.error(“修改失敗,信息在此前已被操作過”);/如果是從查詢界面新開頁面,不用考慮傳遞參數(shù)pd.setTransferData(“cond”);redirectToMsg(修改成功, SCHEDULE_LIST, querySchedules); JAVA(BEAN)寫法(參考quickstart/src/./util/ScheduleBean.java)寫法一:根據(jù)頁面獲取的data數(shù)據(jù)更新表public void updateSchedule(PageData pd, IData data) throws Exception UtilDAO dao = new UtilDAO(pd); dao.update(TF_DM_SCHEDULE, data); /從data中的數(shù)據(jù)更新至表(UTIL_SCHEDULE)中或dao.save(TF_DM_SCHEDULE, data); /從data中的數(shù)據(jù)更新至表(UTIL_SCHEDULE);寫法二:根據(jù)獲取的data數(shù)據(jù),以及能夠識別能否修改的關(guān)鍵列值匹配表中是否有此記錄,如果有返回true,否則返回true public boolean updateSchedule(PageData pd, IData data, String values) throws Exception UtilDAO dao = new UtilDAO(pd); if (!dao.update(UTIL_SCHEDULE, data, new String “SCHE_ID”,”SCHE_STATUS, values) return false; /從data中的數(shù)據(jù)更新至表(UTIL_SCHEDULE)中或if (!dao.save(UTIL_SCHEDULE, data, new String “SCHE_ID”,”SCHE_STATUS, values) return false; /從data中的數(shù)據(jù)更新至表(UTIL_SCHEDULE);return true;注:1、按主鍵和指定主鍵列修改如果,表UTIL_SCHEDULE沒有主鍵或者有多個主鍵,但希望指定相應(yīng)的列對數(shù)據(jù)更新,可以在update、save方法后面加上參數(shù)new String “SCHE_ID”, “SCHE_STATE” ,程序?qū)⒏鶕?jù)綁定的列名和值對數(shù)據(jù)更新,默認(rèn)沒有這個參數(shù)的話,是根據(jù)表結(jié)構(gòu)主鍵進(jìn)行更新如dao.save(UTIL_SCHEDULE, data, new String “SCHE_ID”, “SCHE_STATE” );按SCHE_ID和SCHE_STATE更新data中的數(shù)據(jù)2、save和update的區(qū)別update會將data中的所有數(shù)據(jù)更新,如果表字段原有的信息在data中沒有指定,則這些信息會被清空,而save則會先去查出原記錄的所有信息,再將需要更新的數(shù)據(jù)覆蓋后更新通常,如果只是部分更新表字段的數(shù)據(jù),則必須用save方法,除非data中的數(shù)據(jù)已經(jīng)包含所有需要修改的信息,則用update方法,這樣效率會高些3. 刪除信息 HTML寫法(參考quickstart/web/./util/ScheduleEdit.html) JAVA(PAGE)寫法(參考quickstart/src/./util/ScheduleEdit.java)public void deleteSchedule(IRequestCycle cycle) throws Exception PageData pd = getPageData();UtilBean bean = new UtilBean();bean.deleteSchedule(pd, pd.getParameter(sche_id);或/主要考慮同一個頁面如果打開多次,或者有多個人同時訪問,而在你更新之前已有人刪除或修改過信息的狀態(tài),這樣就需要傳遞目前獲取的關(guān)鍵數(shù)據(jù)列,如主鍵,狀態(tài)來識別信息是否能夠修改,假如刪除了,或者狀態(tài)已被變更過則不能刪除if (bean.deleteSchedule(pd, pd.getParamter(“SCHE_ID”), pd.getParameter(“SCHE_STATUS”) common.error(“刪除失敗,信息在此前已被操作過”);/如果是從查詢界面新開頁面,不用考慮傳遞參數(shù)pd.setTransferData(“cond”);redirectToMsg(刪除成功, SCHEDULE_LIST, querySchedules); JAVA(BEAN)寫法(參考quickstart/src/./util/ScheduleBean.java)寫法一:刪除數(shù)據(jù) public void deleteSchedule(PageData pd, String sche_id) throws Exception UtilDAO dao = new UtilDAO(pd); IData data = new DataMap(); data.put(SCHE_ID, sche_id); dao.delete(UTIL_SCHEDULE, data); /通過將data中錄入的主鍵數(shù)據(jù)刪除表(UTIL_SCHEDULE)中對應(yīng)的記錄寫法二:根據(jù)獲取的主鍵數(shù)據(jù),以及能夠識別能否刪除的關(guān)鍵列值匹配表中是否有此記錄,如果有返回true,否則返回true public boolean deleteSchedule(PageData pd, String sche_id, String sche_status) throws Exception UtilDAO dao = new UtilDAO(pd); IData data = new DataMap(); data.put(SCHE_ID, sche_id);data.put(SCHE_STATUS, sche_status); if (!dao.delete(UTIL_SCHEDULE, data, new String “SCHE_ID”, “SCHE_STATUS”) return false; /刪除記錄的同時和傳遞過來的指定數(shù)據(jù)列匹配,避免數(shù)據(jù)已經(jīng)被修改過狀態(tài)或已刪除注:同修改信息中可以綁定指定列進(jìn)行刪除,如dao.delete(TF_DM_SCHEDULE, data, new String “SCHE_ID”, “SCHE_STATE” );4. 批量操作數(shù)據(jù) HTML寫法(參考quickstart/web/./util/ScheduleList.html) JAVA(BEAN)寫法(參考quickstart/src/./util/UtilBean.java) 1、批量新增public void createSchedules(PageData pd, IDataset dataset) throws Exception UtilDAO dao = new UtilDAO(pd); / 給結(jié)果集列表添加數(shù)據(jù) for (int i=0; idataset.size(); i+) IData data = (IData) dataset.get(i); data.put(SCHE_ID, dao.getSequence(SEQ_SCHE_ID); data.put(SCHE_STATUS, SCHE_STATUS_NONOTIFY); data.put(CREA_STAFF, pd.getContext().getStaffId(); data.put(CREA_TIME, common.getSysTime(); dao.insert(TF_DM_SCHEDULE, dataset); /指定表名將數(shù)據(jù)列表批量新增 2、批量刪除 public void deleteSchedules(PageData pd, String sches) throws Exception UtilDAO dao = new UtilDAO(pd); /將數(shù)組轉(zhuǎn)成結(jié)果集列表 IDataset dataset = new DatasetList(); for (int i=0; isches.length; i+) IData data = new DataMap(); data.put(SCHE_ID, schesi); dataset.add(data); dao.delete(TF_DM_SCHEDULE, dataset); /指定表名將數(shù)據(jù)列表批量刪除 5. 查看信息 HTML寫法(參考quickstart/web/./util/ScheduleHtml.html) JAVA(PAGE)寫法(參考quickstart/src/./util/ScheduleEdit.java)public void querySchedule(IRequestCycle cycle) throws Exception PageData pd = getPageData();UtilBean bean = new UtilBean();IData info = (bean.querySchedule(pd, pd.getParameter(sche_id); /通過獲取主鍵值將查詢的數(shù)據(jù)放入數(shù)據(jù)源(info)中if (info = null) common.error(“您要查看的數(shù)據(jù)已不存在”); /如果數(shù)據(jù)已不存在,需要提示,避免數(shù)據(jù)已在此前被刪除過提示報錯setInfo(info); /如果是從查詢界面新開頁面,不用考慮傳遞參數(shù)pd.setTransferData(“cond”); JAVA(BEAN)寫法(參考quickstart/src/./util/ScheduleBean.java) public IData querySchedule(PageData pd, String inst_id) throws Exception UtilDAO dao = new UtilDAO(pd); IData data = new DataMap(); data.put(SCHE_ID, inst_id); return dao.queryByPK(UTIL_SCHEDULE, data); /通過將data中錄入的主鍵數(shù)據(jù)查詢表(UTIL_SCHEDULE)中對應(yīng)的記錄唯一記錄注:同修改信息中可以綁定指定列進(jìn)行查詢唯一記錄,如dao.queryByPK(UTIL_SCHEDULE, data, new String “SCHE_ID”, “SCHE_STATE” );6. 查詢數(shù)據(jù) HTML寫法(參考quickstart/web/./util/ScheduleList.html) JAVA(PAGE)寫法(參考quickstart/src/./util/ScheduleBean.java)public void querySchedules(IRequestCycle cycle) throws Exception PageData pd = getPageData();UtilBean bean = new UtilBean();IDataset dataset = bean.querySchedules(pd, pd.getData(condition, true), pd.getPagination(); /查詢出結(jié)果集setInfos(dataset); /將結(jié)果集放入數(shù)據(jù)源(infos)中setCondition(pd.getData(“cond”); JAVA(BEAN)寫法(參考quickstart/src/./util/ScheduleBean.java)public IDataset querySchedules(PageData pd, IData param, Pagination pagination) throws Exception UtilDAO dao = new UtilDAO(pd);return dao.querySchedules(param, pagination); JAVA(DAO)寫法(參考quickstart/src/./util/ScheduleDAO.java)寫法一: public IDataset querySchedules(IData param, Pagination pagination) throws Exception param.put(CREA_STAFF, pd.getContext().getStaffId(); SQLParser parser = new SQLParser(param); parser.addSQL(select sche.* from TF_DM_SCHEDULE sche where 1 = 1);parser.addSQL( and to_char(sche.SCHE_TIME, yyyy-mm-dd) = :START_DATE);parser.addSQL( and to_char(sche.SCHE_TIME, yyyy-mm-dd) = :END_DATE); parser.addSQL( and sche.SCHE_STATUS = :SCHE_STATUS);parser.addSQL( and sche.SCHE_TYPE = :SCHE_TYPE);parser.addSQL( and sche.CREA_STAFF = :CREA_STAFF);parser.addSQL( and sche.SCHE_SUBJECT like % | :SCHE_SUBJECT | %);parser.addSQL( order by sche.SCHE_STATUS,sche.CREA_TIME desc);return queryList(parser, pagination);注意:like 的 %必須與變量分開,否則無法正確解析變量寫法二: public IDataset querySchedules(IData param, Pagination pagination) throws Exception param.put(CREA_STAFF, pd.getContext().getStaffId(); StringBuffer sql = new StringBuffer(); sql.append(select sche.* from TF_DM_SCHEDULE sche); sql.append ( where sche.CREA_STAFF = :CREA_STAFF); sql.append ( and sche.SCHE_STATUS = :SCHE_STATUS);sql.append ( and sche.SCHE_TYPE = :SCHE_TYPE);sql.append ( order by sche.SCHE_STATUS,sche.CREA_TIME desc);return queryList(sql.toString(), param , pagination);寫法三:public IDataset querySchedules(String sche_id, Pagination pagination) throws Exception StringBuffer sql = new StringBuffer(); sql.append(select sche.* from UTIL_SCHEDULE sche);sql.append( where sche.SCHE_STATUS = ? );sql.append( order by sche.SCHE_STATUS,sche.SCHE_CRTIME desc);return queryList(sql.toString(),new Object sche_id , pagination);說明:1、編寫sql并執(zhí)行,注意,這里的sql中的動態(tài)數(shù)據(jù)都是用預(yù)處理sql形式,這樣可以減少數(shù)據(jù)庫解析sql的時間,以提高運行效率2、pd.getPagination()為獲取的分頁模型,用來解析分頁sql3、在DAO和Bean代碼重盡量不要使用pd.getParameter,pd.getData,pd.getPagination等方法,該類數(shù)據(jù)最好只在page類中使用,如果DAO,Bean中需要使用,需要以方法參數(shù)的方式使用,如:bean.queryList(PageData pd, IData param, Pagination pagination);4、如果參數(shù)是固定的,建議使用問號形式解析sql,否則建議使用冒號形式5、在展現(xiàn)表格數(shù)據(jù)時,如果需要用到rowIndex實現(xiàn)表格間隔行的效果,在page中定義7. 導(dǎo)入數(shù)據(jù) HTML寫法(參考quickstart/web/./util/ScheduleImport.html)1) 設(shè)置form對象屬性設(shè)置enctype=multipart/form-data /以文件流形式提交服務(wù)器,這樣服務(wù)器可以取到文件流2) /選擇文件3) 4) 注:file_name是下載導(dǎo)出模板的名稱,file_path是模板文件所在路徑 XML配置文件寫法1、導(dǎo)入需要的配置文件(參考quickstart/etc/./import/ScheduleList.xml)注:需要關(guān)注導(dǎo)入的excel列的輸入格式,如最大輸入長度,是否必填,日期、金額的格式等(參考quickstart/etc/./export/ScheduleImport.xml)2、導(dǎo)入失敗的數(shù)據(jù),需要配置的文件注:1、由于失敗的數(shù)據(jù)需要和輸入前的保持一致,故最好將所有列的配置設(shè)為type=1,將所有的數(shù)據(jù)生成時不做轉(zhuǎn)換都生成為文本格式,比如:如果設(shè)置了type=3(時間類型),并設(shè)置了format=yyyy-MM-dd HH:mm,如果導(dǎo)入的數(shù)據(jù)填的是2007-03-01,但由于指定了類型和格式,導(dǎo)出會將數(shù)據(jù)轉(zhuǎn)換為2007-03-01 00:00形式,這樣就丟失了數(shù)據(jù)的原有形式。2、導(dǎo)出的配置不需要設(shè)定格式 JAVA(PAGE)寫法(參考quickstart/src/./util/ScheduleImport.java)public void importSchedules(IRequestCycle cycle) throws Exception PageData pd = getPageData();IDataset dataset = ExcelParser.importExcel(pd, util/ScheduleList.xml, pd.getUploadFile(FILE_PATH).getStream()0; /通過指定的配置文件,以及頁面指定的excel導(dǎo)入數(shù)據(jù)文件取出數(shù)據(jù)集,如果excel中有多個單元表,則可以通過數(shù)據(jù)集數(shù)組獲取數(shù)據(jù)集注:如果要用到datasrc數(shù)據(jù)源校驗,importExcel方法必須有pd參數(shù)/* 執(zhí)行導(dǎo)入并獲取錯誤的數(shù)據(jù) */UtilBean bean = new UtilBean();IDataset failds = bean.importSchedules(pd, dataset);/* 將失敗的數(shù)據(jù)生成excel */if (failds.size() != 0) String file_id = ExcelParser.writeExcelByImport(pd, util/ScheduleImport.xml, new IDataset failds );/* 導(dǎo)入情況匯總,并下載導(dǎo)入失敗的數(shù)據(jù) */redirectToMsgByPopup(日程批量導(dǎo)入情況:共導(dǎo)入 + dataset.size() + 條,成功 + (dataset.size() - failds.size() + 條,失敗 + failds.size() + 條,請擊 + ExcelParser.getFailedLinkByImport(file_id, 日程批量導(dǎo)入失敗列表.xls) + 下載導(dǎo)入失敗文件); else re

溫馨提示

  • 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

提交評論