Web程序設(shè)計課件:Servlet技術(shù)_第1頁
Web程序設(shè)計課件:Servlet技術(shù)_第2頁
Web程序設(shè)計課件:Servlet技術(shù)_第3頁
Web程序設(shè)計課件:Servlet技術(shù)_第4頁
Web程序設(shè)計課件:Servlet技術(shù)_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Servlet2025/5/211主要內(nèi)容2025/5/21《Web程序設(shè)計》21Servlet基礎(chǔ)2Servlet原理3JSP頁面與Servlet交互4綜合示例本章課程目標(biāo)知識目標(biāo)掌握Servlet基本語法、工作原理與開發(fā)過程;理解Servlet部署方式、與JSP頁面交互原理與交互過程。能力要求:能根據(jù)需要編寫Servlet主要處理方法能針對模塊需求設(shè)計Servlet與JSP頁面的交互及實現(xiàn)2025/5/21《Web程序設(shè)計》39.1Servlet基礎(chǔ)Servlet,全稱JavaServlet,是JavaEE的核心技術(shù)之一。它是用Java編寫的服務(wù)器端程序,用于開發(fā)動態(tài)web資源的技術(shù),其主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)web內(nèi)容。Servlet沒有main方法,不能夠獨立的運行,它的運行需要容器的支持,Tomcat是最常用的JSP/Servlet容器。Servlet運行在Servlet容器中,并由容器管理從創(chuàng)建到銷毀的整個過程。2025/5/21《Web程序設(shè)計》4Servlet規(guī)范解析創(chuàng)建Servlet需要繼承自HttpServlet或GenericServlet類Servlet接口ServletConfig接口GenericServlet抽象類HttpServlet抽象類2025/5/21《Web程序設(shè)計》5(1)Servlet接口

Init方法在容器啟動時被容器調(diào)用(當(dāng)load-on-startup設(shè)置為負(fù)數(shù)或者不設(shè)置時會在Servlet第一次用到時才被調(diào)用),只會調(diào)用一次;getServletConfig方法用于獲取ServletConfig;service方法用于具體處理一個請求;getServletInfo方法可以獲取Servlet相關(guān)的信息,如作者、版權(quán)等,這個方法需要自己實現(xiàn),默認(rèn)返回空字符串;destroy主要用于在Servlet銷毀(一般指關(guān)閉服務(wù)器)時釋放一些資源,也只會調(diào)用一次。2025/5/21《Web程序設(shè)計》6//javax.servlet.ServletpublicinterfaceServlet{publicvoidinit(ServletConfigconfig)throwsServletException;publicServletConfiggetServletConfig();publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException;publicStringgetServletInfo();publicvoiddestroy();}(2)ServletConfig接口ServletConfig是指Servlet的配置信息,可以讀取在web.xml中定義Servlet時通過init-param標(biāo)簽配置的參數(shù),這些參數(shù)和值都是用ServletConfig來保存的。

getServletName用于獲取Servlet的名字,也就是我們在web.xml中定義的servlet-name;getInitParameter方法用于獲取init-param配置的參數(shù);getInitParameterNames用于獲取配置的所有init-param的名字集合;getServletContext用于獲取Servlet的上下文信息,返回ServletContext對象。2025/5/21《Web程序設(shè)計》7(3)GenericServletGenericServlet是Servlet的默認(rèn)實現(xiàn),主要實現(xiàn)了三個方法:

實現(xiàn)了ServletConfig接口,可以直接調(diào)用ServletConfig里面的方法;

提供了無參的init方法,即空的Servlet初始化方法;

提供了log方法,可以進行日志記錄。2025/5/21《Web程序設(shè)計》8(4)HttpServletHttpServlet是用HTTP協(xié)議實現(xiàn)的Servlet的基類,自己編寫Servlet時可以直接繼承它,不需要再重新實現(xiàn)Servlet接口。HttpServlet最主要的工作是重寫了service方法。在service方法中首先將ServletRequest和ServletResponse轉(zhuǎn)換為了HttpServletRequest和HttpServletResponse,然后根據(jù)Http請求的類型不同將請求路由到了不同的處理方法。2025/5/21《Web程序設(shè)計》9protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{//獲取請求類型Stringmethod=req.getMethod();//將不同的請求類型路由到不同的處理方法if(method.equals(METHOD_GET)){longlastModified=getLastModified(req);if(lastModified==-1){doGet(req,resp);}else{longifModifiedSince=req.getDateHeader(HEADER_IFMODSINCE);if(ifModifiedSince<lastModified){maybeSetLastModified(resp,lastModified);doGet(req,resp);}else{resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}}elseif(method.equals(METHOD_HEAD)){......Servlet的創(chuàng)建與運行創(chuàng)建Servlet時只需要繼承HttpServlet類,實現(xiàn)其中的doGet與doPost方法,其它方法采用HttpServlet中的默認(rèn)實現(xiàn)即可。2025/5/21《Web程序設(shè)計》10@WebServlet(“/firstServlet”)publicclassFirstServletextendsHttpServlet{privatefinalintID=-1;protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8");PrintWriterout=response.getWriter();//獲取請求頭的相關(guān)信息out.println("getMethod:"+request.getMethod()+"<br/>");out.println("getQueryString:"+request.getQueryString()+"<br/>");out.println("getProtocol:"+request.getProtocol()+"<br/>");out.println("getContextPath"+request.getContextPath()+"<br/>");}}上例代碼中,Servlet的路徑采用注解的方式“@WebServlet(“/firstServlet”)”,訪問時,直接在瀏覽器中輸入以下地址:其中,localhost是本機名稱,8080是Web服務(wù)器的端口,myweb是當(dāng)前應(yīng)用的名稱,firstServlet是通過注解定義的Servlet訪問路徑。這種請求方式下,默認(rèn)是采用get方式訪問Servlet,將直接由Servlet的doGet方法進行處理2025/5/21《Web程序設(shè)計》11

Servlet映射配置Servlet映射是指Servlet的mapping,即所處理的URL與Servletclass之間關(guān)系。目前Servlet映射的配置方式有兩種,一是web.xml方式,二是注解方式。2025/5/21《Web程序設(shè)計》12/SomeServlet?xxx=WebContainer/serv1com.samp.class1/serv2。。。。。。/servNURLMappingTablepackagecom.samp;publicclassclass1extendsHttpServlet...Web.xml注冊Servletweb.xml是web應(yīng)用的配置信息文件,存儲著整個web應(yīng)用的基礎(chǔ)參數(shù)、Servlet映射關(guān)系、初始參數(shù)等信息。2025/5/21《Web程序設(shè)計》13<servlet><servlet-name>MyFirstServlet</servlet-name><servlet-class>nchu.ss.servlet.FirstServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyFirstServlet</servlet-name><url-pattern>/firstServlet</url-pattern></servlet-mapping>注解(Annotation)從Servlet3.0開始支持使用注解方式來配置Servlet映射,即使用“@WebServlet”注解,在所定義的Servlet類聲明語句上方,添加該注解URL-Pattern與web.xml方式聲明一致,必須以“/”開頭的路徑,即相對于當(dāng)前應(yīng)用的根目錄。2025/5/21《Web程序設(shè)計》14@WebServlet(“URL-Pattern”)publicclassXXXServletextendsHttpServlet{......}示例2025/5/21《Web程序設(shè)計》15@WebServlet(“/firstServlet”)publicclassFirstServletextendsHttpServlet{///具體代碼}或者@WebServlet(urlPatterns=“/firstServlet”)publicclassFirstServletextendsHttpServlet{///具體代碼}Url-PatternURL-Pattern是服務(wù)器決定某個客戶端請求由哪個Servlet進行處理的依據(jù)服務(wù)器在接收到某個客戶端請求的完整URL后,將其中的主機號、IP和應(yīng)用名稱去除后,即進行URL-Pattern的匹配,如果匹配成功,就將請求交給該URL-Pattern映射的Servlet進行處理,否則,會報找不到資源錯誤。2025/5/21《Web程序設(shè)計》16

URL-Pattern匹配--精確匹配這種URL映射匹配時,定義的URL是一個完整的URL地址,不含任何通配符。2025/5/21《Web程序設(shè)計》17<servlet><servlet-name>MyServlet</servlet-name><servlet-class>xxxxxxxx</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/user/users.html</url-pattern><url-pattern>/index.html</url-pattern><url-pattern>/user/addUser.action</url-pattern></servlet-mapping>

URL-Pattern匹配--路徑匹配是指匹配規(guī)則定義為以“/”字符開頭,并以“/*”結(jié)尾的字符串,這個映射規(guī)則將用于路徑匹配。2025/5/21《Web程序設(shè)計》18<servlet><servlet-name>MyServlet</servlet-name><servlet-class>xxxxxxxx</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/user/*</url-pattern></servlet-mapping>

URL-Pattern匹配--擴展名匹配是指匹配規(guī)則定義為以“*.”開頭的字符串,這個規(guī)則將自動用于擴展名匹配。2025/5/21《Web程序設(shè)計》19<servlet><servlet-name>MyServlet</servlet-name><servlet-class>xxxxxxxx</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>*.jsp</url-pattern><url-pattern>*.action</url-pattern></servlet-mapping>

需要注意的是,url-pattern映射匹配過程是有優(yōu)先順序的,

精確匹配>目錄匹配>擴展名匹配而且當(dāng)有一個規(guī)則匹配成功以后,將不再匹配剩下的servlet映射規(guī)則。2025/5/21《Web程序設(shè)計》20主要內(nèi)容2025/5/21《Web程序設(shè)計》211Servlet基礎(chǔ)2Servlet原理3JSP頁面與Servlet交互4綜合示例Servlet類的對象從創(chuàng)建到銷毀所經(jīng)歷的階段稱為Servlet對象的生命周期。通常,Servlet的生命周期可分為以下幾個階段:(1)加載和實例化Servlet容器負(fù)責(zé)加載和實例化Servlet,創(chuàng)建出該Servlet類的一個實例。這個過程在整個生命周期中只會執(zhí)行一次。(2)初始化在處理用戶請求之前做一些設(shè)定的初始化工作。這個方法在整個生命周期中只會執(zhí)行一次。(3)處理請求在實例化和初始化階段完成后,Servlet實例就進入可以處理業(yè)務(wù)請求的狀態(tài)。(4)銷毀將一個Servlet實例從服務(wù)器中移除時2025/5/21《Web程序設(shè)計》22Servlet工作過程具體過程:當(dāng)客戶端瀏覽器向服務(wù)器請求后,首先到容器中檢索與請求匹配的Servlet實例是否存在。若不存在,則Servlet容器負(fù)責(zé)實例化對象;隨后,Servlet容器負(fù)責(zé)調(diào)用該實例的init()方法,做一些初始化工作;然后Servlet容器運行該實例的service()方法;若Servlet實例已經(jīng)存在,則容器框架直接調(diào)用該實例的service()方法,根據(jù)請求的方式自動運行與用戶請求相對應(yīng)的doXXX()方法來響應(yīng)用戶請求;若接收到服務(wù)器關(guān)閉或某個Servlet重新加載的消息,則調(diào)用該Servlet實例的destroy()方法。2025/5/21《Web程序設(shè)計》23Tomcat的容器模型2025/5/21《Web程序設(shè)計》24從上圖可以看出Tomcat的容器分為四個等級,Container容器、Engine、Servlet容器、Context。真正管理Servlet的容器是Context容器,一個Context對應(yīng)一個Web工程。Tomcat中Context容器是直接管理Servlet在容器中的包裝類Wrapper(StandardWrapper)的容器,所以Context容器如何運行將直接影響Servlet的工作方式。2025/5/21《Web程序設(shè)計》25主要內(nèi)容2025/5/21《Web程序設(shè)計》261Servlet基礎(chǔ)2Servlet原理3JSP頁面與Servlet交互4綜合示例在JavaEE的體系中,JSP與Servlet是主要的兩大組件,其中JSP主要負(fù)責(zé)頁面內(nèi)容結(jié)構(gòu)、數(shù)據(jù)展示、用戶交互,Servlet負(fù)責(zé)請求響應(yīng)、調(diào)度轉(zhuǎn)發(fā)、業(yè)務(wù)邏輯處理,兩者的有機結(jié)合形成了Web應(yīng)用的基本實現(xiàn)。JSP與Servlet的交互形式有兩大類,JSP轉(zhuǎn)向至Servlet,Servlet轉(zhuǎn)向至JSP,根據(jù)傳遞數(shù)據(jù)的方式和大小,又可以進一步細分。2025/5/21《Web程序設(shè)計》27JSP轉(zhuǎn)向至ServletJSP轉(zhuǎn)向至Servlet通常分為兩種情況,一是JSP將表單數(shù)據(jù)提交至Servlet端進行數(shù)據(jù)和業(yè)務(wù)處理;二是JSP端直接通過超鏈接跳轉(zhuǎn)至Servlet響應(yīng)的URL上,可能攜帶一定的參數(shù)數(shù)據(jù)。本質(zhì)上JSP轉(zhuǎn)向至Servlet可看成JSP提交數(shù)據(jù)至Servlet進行處理。提交的方式主要有兩種:Get和Post。2025/5/21《Web程序設(shè)計》28

Get方式Post方式操作方式直接在URL地址欄中輸入URL、網(wǎng)頁中的超鏈接、form中method為get、form中method為空時(默認(rèn)是get提交)。form中method屬性為post。數(shù)據(jù)傳送方式表單數(shù)據(jù)存放在URL地址后面。所有g(shù)et方式提交時HTTP中沒有消息體。表單數(shù)據(jù)存放在HTTP協(xié)議的消息體中以實體的方式傳送到服務(wù)器。傳送的數(shù)據(jù)量數(shù)據(jù)量長度有限制,一般不超過2kb。因為是參數(shù)傳遞,且在地址欄中,故數(shù)據(jù)量有限制。適合大規(guī)模的數(shù)據(jù)傳送。因為是以實體的方式傳送的。安全性安全性差。因為是直接將數(shù)據(jù)顯示在地址欄中,瀏覽器有緩沖,可記錄用戶信息。所以安全性低。安全性高。因為采用的是HTTPpost機制,是將表單中的字段與值放置在HTTPHEADER內(nèi)一起傳送到ACTION所指的URL中,用戶不可見。在用戶刷新時不會有任何提示會彈出提示框,詢問用戶是否重新提交2025/5/21《Web程序設(shè)計》29兩個方法的原型完全一致,只是方法名稱不同。這也反映了兩個方法的實際工作是一致的,只是對應(yīng)處理的請求方式不同。2025/5/21《Web程序設(shè)計》30protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException{......}protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException{......}Servlet轉(zhuǎn)向至JSPServlet轉(zhuǎn)向至JSP主要用于Servlet處理完業(yè)務(wù)邏輯后,跳轉(zhuǎn)至JSP頁進行結(jié)果的展示。此時,Servlet的跳轉(zhuǎn)方式有兩種:重定向與轉(zhuǎn)發(fā)請求。2025/5/21《Web程序設(shè)計》31(1)重定向這種方式下,Servlet在完成需要處理的業(yè)務(wù)邏輯后,將頁面重定向至某個JSP頁面,不需要傳遞大量或復(fù)雜的數(shù)據(jù)。重定向主要使用response對象的sendRedirect方法實現(xiàn)。該方法的原型如下:例如,當(dāng)前URL為

response.sendRedirect(“l(fā)ogin.jsp”)response.sendRedirect(“../error.jsp”)resonse.sendRedirect(“/index.jsp”)response.sendRedirect(“/index.html”)2025/5/21《Web程序設(shè)計》32publicvoidsendRedirect(Stringurl)如果需要傳遞少量參數(shù),可以通過在URL上附加queryString來完成,例如:通過上述語句,Servlet向login.jsp頁面跳轉(zhuǎn)時,附加了兩個參數(shù),failtype和msg,在login.jsp中就可以解析到這兩個參數(shù)。從原理上來看,用response.sendRedirect做轉(zhuǎn)向其實是向瀏覽器發(fā)送一個特殊的Header,然后由瀏覽器來執(zhí)行轉(zhuǎn)向,轉(zhuǎn)到url參數(shù)指定的頁面,所以用sendRedirect時,瀏覽器的地址欄上可以看到地址的變化。由于response.sendRedirect本質(zhì)上是瀏覽器進行的轉(zhuǎn)向,所以,參數(shù)數(shù)值上,新的JSP頁面將不能再共享原來Servlet對象中的request和response對象。2025/5/21《Web程序設(shè)計》33response.sendRedirect(“l(fā)ogin.jsp?failtype=2&msg=invalid_code”);(2)轉(zhuǎn)發(fā)請求使用這種方式時,Servlet在完成需要處理的業(yè)務(wù)邏輯后,將結(jié)果轉(zhuǎn)發(fā)至某個JSP頁面,此時會將相關(guān)的數(shù)據(jù)對象一起轉(zhuǎn)發(fā)至新頁面,可以在新頁面中使用這些數(shù)據(jù)對象。轉(zhuǎn)發(fā)請求采用了RequestDispatcher對象的forward方法,相當(dāng)于JSP頁面中的<jsp:forward>標(biāo)簽,具體的方法原型如下:2025/5/21《Web程序設(shè)計》34publicvoidforward(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException;與response.sendRedirect方法不同的是,這種方式轉(zhuǎn)發(fā)請求后,地址欄中的URL不會發(fā)生變化,依然是之前請求的那個URL。例如用戶從客戶端請求的是目標(biāo)資源A,A接受到請求后,使用forward這種方式將請求轉(zhuǎn)發(fā)到B,B中進行相應(yīng)的業(yè)務(wù)處理和數(shù)據(jù)展示。此時,瀏覽器的地址欄不會變,依然是A的URL。url參數(shù)是要跳轉(zhuǎn)的頁面,只能是當(dāng)前應(yīng)用下的某個資源URL,即這種方式不能跳出當(dāng)前應(yīng)用,跳轉(zhuǎn)至其它應(yīng)用的資源。2025/5/21《Web程序設(shè)計》35

例如,當(dāng)前URL為/user/listServlet,當(dāng)使用以下跳轉(zhuǎn)時:request.getRequestDispatcher(“user_list.jsp”).forward(req,res)request.getRequestDispatcher(“../login”).forward(req,res)request.getRequestDispatcher(“/error.jsp”).forward(req,res)2025/5/21《Web程序設(shè)計》36forward()一般用于MVC模式中,Servlet調(diào)用JavaBean進行業(yè)務(wù)處理和數(shù)據(jù)操作,將計算的結(jié)果返回至JSP視圖中進行數(shù)據(jù)展示,使用forward對象將計算的結(jié)果通過參數(shù)對象傳遞至JSP頁面中。例如,以下UserListServlet實現(xiàn)用戶信息列表的展示,通過UserDao查詢符合條件的數(shù)據(jù),將結(jié)果封裝后傳遞至user_list.jsp頁面進行展示。2025/5/21《Web程序設(shè)計》372025/5/21《Web程序設(shè)計》38///UserListServlet代碼片段...protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringkeyword=request.getParameter(“key”);//獲取參數(shù)keyUserDaodao=newUserDao();//通過key查詢符合條件的userList<UserVo>userlist=dao.listUserByKey(keyword);//將userlist放到request對象//中進行傳遞request.setAttribute(“user_list”,userlist);request.getRequestDispatcher(“user_list.jsp”).forward(request,response);}...<%--user_list.jsp代碼片段--%>...<%//從request中取出對象List<UserVo>list=(List<UserVo>)request.getAttribute (“user_list”);for(UserVouser:list){//對list進行遍歷//顯示每個user信息......}...%>JSP的本質(zhì)JSP的本質(zhì)是Servlet技術(shù)。如果客戶端請求的是一個JSP,則該JSP文件傳遞給JSP引擎,JSP引擎將JSP文件轉(zhuǎn)譯為Servlet的java文件,其實質(zhì)就是這個Servlet來處理客戶端的請求。2025/5/21《Web程序設(shè)計》39

轉(zhuǎn)換后的JSPServlet類均繼承自HttpJspBase類2025/5/21《Web程序設(shè)計》40主要內(nèi)容2025/5/21《Web程序設(shè)計》411Servlet基礎(chǔ)2Servlet原理3JSP頁面與Servlet交互4綜合示例假設(shè)MySql數(shù)據(jù)庫user_db中有一個用戶表(user),主要存儲用戶賬號的基本信息,主要的字段及類型說明如下2025/5/21《Web程序設(shè)計》422025/5/21《Web程序設(shè)計》43Login.jsp/userLoginLoginServletUserDaoDbUtilerror.jspUserUser.java2025/5/21《Web程序設(shè)計》44packagecn.nchu.ss.User;publicclassUser{/*用戶名*/privateStringusername;/*密碼*/privateStringpassword;/*用戶類型*/privateStringtype;/*有參構(gòu)造*/publicUser(Stringusername,Stringpassword,Stringtype){this.username=username;this.password=password;this.type=type;}/*無參構(gòu)造*/publicUser(){}DbUtil.java2025/5/21《Web程序設(shè)計》45publicclassDbUtil{privatestaticStringusername="root";privatestaticStringpassword="123456";privatestaticStringurl="jdbc:mysql://localhost:3306/user_db?"+"useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&"+"useSSL=false";publicstaticConnectiongetConnection(){Connectionconn=null;try{Class.forName("com.mysql.cj.jdbc.Driver");conn=DriverManager.getConnection(url,username,password);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}returnconn; }UserDao.java2025/5/21《Web程序設(shè)計》46publicStringuserLogin(Stringusername,Stringpassword,Stringtype)throwsSQLException{Connectionconn=DbUtil.getConnection();Stringsql="select*fromuserwhereusername=?";PreparedStatementpst=conn.prepareStatement(sql);pst.setString(1,username);ResultSetrs=pst.executeQuery();Useruser=null;if(rs==null){return"1";//用戶名不存在}else{//查到用戶if(rs.next()){user=newUser();user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setType(rs.getString("type"));}rs.close();pst.close();conn.close();}Login.jsp2025/5/21《Web程序設(shè)計》47<h2>歡迎使用xxx管理信息系統(tǒng)</h2><formname="form1"action="userLogin"method="post">用戶:<inputtype="text"name="username"><br>密碼:<inputtype="password"name="password"><br>類型:<selectname="utype"><optionvalue="1">用戶</option><optionvalue="2">管理員</option></select><br><inputtype="submit"value="提交"><divid="info"><%Stringi

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論