后期个人总结servlet入门笔记_第1页
后期个人总结servlet入门笔记_第2页
后期个人总结servlet入门笔记_第3页
后期个人总结servlet入门笔记_第4页
后期个人总结servlet入门笔记_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Servlet 的应用Servlet 是一种独立于和协议的服务器端的 Java 应用程序,可以生成动态的web 页面。它担当 Web 浏览器或其他 http 客户程序发出请求、与 http 服务器上的数据库或应用程序之间交互的中间层。主要内容:Web 应用程序开发过程、Servlet 的运行原理、Servlet 的生命周期等。Java Web 应用程序的开发过程开发Java Web 应用程序的大致流程设计目录结构:根据具体业务需要,遵照规范的目录结构设计好 Web 应用程序的目录结构。编写 Web 应用程序代码:编写业务逻辑所需的 Java 代码。编写部署描述文件:把 Servlet、初始化参

2、数等定义到部署描述文件 web.xml 中。编译代码:把编写好的 Java 源代码编译成字节码。将 Web 应用程序打包:把整个 Web 应用程序打成 War 包,以方便部署。部署 Web 应用程序:把打好的 War 包部署到 Web 服务器上。执行 Web 应用程序:启动 Web 服务器,利用客户端浏览器进行测试。注意:在具体的开发过程中,一般都会使用 IDE 工具,使用 IDE 工具进行 Web 应用程序开发时,只需要开发完成前三个步骤,其他步骤 IDE 工具可以自动完成。Servlet 概述Servlet 是用Java 编写的 Server 端程序,它与协议和无关。Servlet 运行于

3、Java 服务器中。Java Servlet 可以动态地扩展服务器的能力,并采用请求-响应模式提供 Web 服务。Servlet 简介Servlet 是使用Java Servlet 应用程序设计接口及相关类和方法的 Java 程序。它在Web 服务器上或应用服务器上运行并扩展了该服务器的能力。Servlet 装入 Web 服务器并在 Web 服务器内执行。Servlet 是以Java 技术为基础的服务器端应用程序组件,Servlet 的客户端可以提出请求并获得该请求的响应,它可以是任何 Java 程序、浏览器或任何设备。Servlet 运行原理当 Web 服务器接收到一个 HTTP 请求时,它

4、会先判断请求内容如果是静态网页数据,Web 服务器将会自行处理,然后产生响应信息;如果牵涉到动态数据,Web 服务器会将请求转交给 Servlet 容器。此时 Servlet 容器会找到对应的处理该请求的 Servlet 实例来处理,结果会送回 Web 服务器,再由 Web 服务器传回用户端。针对同一个 Servlet,Servlet 容器会在第一次收到 http 请求时建立一个 Servlet 实例,然后启动一个线程。第二次收到 http 请求时,Servlet 容器无须建立相同的 Servlet 实例,而是启动第二个线程来服务客户端请求。所以多线程方式不但可以提高 Web 应用程序的执行效

5、率,也可以降低 Web 服务器的系统负担。Servlet 的优点可移植性好:Servlet 是用Java 语言编写的,具有完善的 ServletAPI 标准,企业编写的 Servlet 程序,可以轻松地移植到其他服务器中。执行效率高:Servlet 请求到来的时候激活 Servlet,请求处理完,等待新的请求,新的请求将生成一个线程而不是进程。使用方便:Servlet 可以轻松地处理 HTML 表单数据,并和设置 HTTP 头,处理,会话。Servlet 的运行过程后:Servlet 程序是由 WEB 服务器调用,web 服务器收到客户端的 Servlet请求 Web 服务器首先检查是否已经装

6、载并创建了该 Servlet 的实例对象。如果是,则直接执行第步,否则,执行第步。 装载并创建该 Servlet 的一个实例对象。 调用 Servlet 实例对象的 init()方法。 创建一个用于封装 HTTP 请求消息的 HttpServletRequest 对象和一HTTP 响应消息的 HttpServletResponse 对象,然后调用 Servlet 的 service()方法并将请求和响应对象作为参数传递进去。 WEB 应用程序被停止或重新启动之前,Servlet 引擎将卸载 Servlet,并在卸载之前调用 Servlet 的 destroy()方法。Servlet 接口实现类

7、:1、HttpServlet 指能够处理 HTTP 请求的 servlet,它在原有 Servlet 接口上添加了一些与HTTP 协议处理方法,它比 Servlet 接口的功能更为强大。因此开发时,通常应继承这个类,而避免直接去实现 Servlet 接口。在编写 Servlet2、HttpServlet 在实现 Servlet 接口时,覆写了 service 方法,该方法体内的代码会自动判断用户的请求方式,如为 GET 请求,则调用 HttpServlet 的 doGet 方法,如为t 请求,则调用 dot 方法。因此,开发在编写 Servlet 时,通常只需要覆写 doGet 或dot 方法

8、,而不要去覆写 service 方法。Servlet 的一些细节(1)1、:由于客户端是通过 URL 地址web 服务器中的资源,所以 Servlet 程序若想被外界,必须把 servlet 程序到一个 URL 地址上,这个工作在 web.xml 文件中使用元素完成。元素和servlet-map2、元素用于Servlet,它包含有两个主要的子元素:和,分别用于设置 Servlet 的名称和 Servlet 的完整类名。3、一个元素用于一个已的 Servlet 的一个对外路径,它包含有两个子元素:和,分别用于指定 Servlet 的名称和Servlet 的对外路径。Servlet 的一些细节(2

9、):1、同一个 Servlet 可以被到多个 URL 上,即多个元素的子元素的设置值可以是同一个 Servlet 的名。2、在 Servlet到的 URL 中也可以使用*通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。AnyName*.doAnyName/action/*Servlet 的一些细节(3):对于如下的一些关系:Servlet1到 /abc/*Servlet2到 /*Servlet3到 /abcServlet4到 *.do问题:当请求 URL 为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个 servl

10、et 响应Servlet 引擎将调用 Servlet1。当请求 URL 为“/abc”时,“/abc/*”和“/abc”都匹配,哪个 servlet 响应Servlet 引擎将调用 Servlet3。当请求 URL 为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个 servlet 响应Servlet 引擎将调用 Servlet1。当请求 URL 为“/a.do”时,“/*”和“*.do”都匹配,哪个 servlet 响应Servlet 引擎将调用 Servlet2。当请求 URL 为“/yyy/a.do”时,“/*”和“*.do”都匹配,哪个 servlet 响应Serv

11、let 引擎将调用 Servlet2。Servlet 的一些细节(4):1、Servlet 是一个供其他 Java 程序(Servlet 引擎)调用的 Java 类,它不能独立运行,它的运行完全由 Servlet 引擎来控制和调度。2、针对客户端的多次 Servlet 请求,通常情况下,服务器只会创建一个 Servlet 实例对象,也就是说 Servlet 实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至 web 容器退出,servlet 实例对象才会销毁。3、在 Servlet 的整个生命周期内,Servlet 的 init 方法只被调用一次。而对一个 Servlet 的每次

12、请求都导致 Servlet 引擎调用一次 servlet 的 service 方法。对于每次请求,Servlet 引擎都会创建一个新的 HttpServletRequest 请求对象和一个新的HttpServletResponse 响应对象,然后将这两个对象作为参数传递给它调用的 Servlet 的service()方法,service 方法再根据请求方式分别调用 do方法。Servlet 的一些细节(5):1、如果在元素中配置了一个元素,那么 WEB 应用程序在启动时,就会装载并创建 Servlet 的实例对象、以及调用 Servlet 实例对象的 init()方法。举例:invoker.a

13、pache.catalina.servlets.InvokerServlet22、用途:为 web 应用写一个 InitServlet,这个 servlet 配置为启动时装载,为整个 web 应用创建必要的数据库表和数据。Servlet 的一些细节(6):1、如果某个 Servlet 的路径仅仅为一个正斜杠(/),那么这个 Servlet 就成为当前Web 应用程序的缺省 Servlet。2、凡是在 web.xml 文件中找不到匹配的元素的 URL,它们的请求都将交给缺省 Servlet 处理,也就是说,缺省 Servlet 用于处理所有其他 Servlet 都不处理的请求。3、在confwe

14、b.xml 文件中,了一个名称为.apache.catalina.servlets.DefaultServlet 的 Servlet,并将这个 Servlet 设置为了缺省Servlet。4、当Tomcat 服务器中的某个静态 HTML 文件和Servlet。时,实际上是在这个缺省线程安全:1、当多个客户端并发同一个 Servlet 时,web 服务器会为每一个客户端的请求创建一个线程,并在这个线程上调用 Servlet 的service 方法,因此 service 方法内如果了同一个资源的话,就有可能线程安全问题。2、如果某个 Servlet 实现了 SingleThreadM来调用其 se

15、rvice 方法。接口,那么 Servlet 引擎将以单线程模式3、SingleThreadM接口中没有定义任何方法,只要在 Servlet 类的定义中增加实现SingleThreadM接口的即可。4、对于实现了 SingleThreadM接口的 Servlet,Servlet 引擎仍然支持对该 Servlet 的多线程并发,其采用的方式是产生多个 Servlet 实例对象,并发的每个线程分别调用一个独立的 Servlet 实例对象。5、实现 SingleThreadM接口并不能真正解决 Servlet 的线程安全问题,因为 Servlet引擎会创建多个 Servlet 实例对象,而真正意义上

16、解决多线程安全问题是指一个 Servlet 实。事实上,在 Servlet API 2.4 中,已经将例对象被多个线程同时调用SingleThreadM标记为 Deprecated(过时的)。ServletConfig 对象:1、在 Servlet 的配置文件中,可以使用一个或多个始化参数。为 servlet 配置一些初2、当 servlet 配置了初始化参数后,web 容器在创建 servlet 实例对象时,会自动将这些初始化参数封装到 ServletConfig 对象中,并在调用 servlet 的 init 方法时,将 ServletConfig对象传递给 servlet。进而,程序员通

17、过 ServletConfig 对象就可以得到当前 servlet 的初始化参数信息。3、阅读 ServletConfigAPI,并举例说明该对象的作用:获得字符集编码获得数据库连接信息获得配置文件ServletConfig 对象在Servlet 的配置文件中,可以使用一个或多个为 servlet 配置一些初始化参数。当servlet 配置了初始化参数后,web 容器在创建 servlet 实例对象时,会自动将这些初始化参数封装到 ServletConfig 对象中,并在调用 servlet 的 init 方法时,将ServletConfig 对象传递给 servlet。进而,程序员通过 Se

18、rvletConfig 对象就可以得到当前servlet 的初始化参数信息。阅读ServletConfig API,并举例说明该对象的作用:获得字符集编码获得数据库连接信息获得配置文件WEB 容器在启动时,它会为每个 WEB 应用程序都创建一个对应的 ServletContext对象,它代表当前 web 应用。ServletConfig 对象中了 ServletContext 对象的,开发在编写 servlet时,可以通过 ServletConfig.getServletContext 方法获得 ServletContext 对象。也可以使用 this.getServletContext 方法

19、由于一个 WEB 应用中的所有 Servlet 共享同一个 ServletContext 对象,因此Servlet 对象之间可以通过 ServletContext 对象来实现通讯。多个 Servlet 通过ServletContext 对象实现数据共享。ServletContext 对象通常也被称之为 context 域对象。(request,ses,page)setribute(),getribute();ServletContext 应用获取WEB 应用的初始化参数。 datax实现Servlet 的转发。RequestDispatcher rd =getServletContext().

20、getRequestDispatcher(“/1.jsp”);rd.forward(request,response);如何把数据传到 1.jsp ?(可以通过 request 域,不能用 context 域)简介lWeb 服务器收到客户端的 http 请求,会针对每一次请求,分别创建一个用于代表请求的 request 对象、和代表响应的 response 对象。lrequest 和 response 对象即然代表请求和响应,那要获取客户机提交过来的数据,只需要找 request 对象就行了。要向客户机输出数据,只需要找 response 对象就行了。HttpServletResponse 简

21、介lWEB 服务器回送给 WEB 客户端的 HTTP 响应消息分为三个部分:状态行响应消息头利用ServletContext 对象资源文件。得到文件路径资源文件的三种方式.properties 文件(属性文件)ServletConfig 和 ServletContext 的区别整个 Web 应用只有一个 ServletContext,在部署 Web 应用的时候,容器会建立这一个 ServletContext 对象,这个上下文对 Web 应用中的每个 Servlet 和JSP 都可用。Web 应用中的各个 Servlet 都有自己的 ServletConfig,它只对当前 Servlet 有效。

22、消息正文(也叫实体内容)lServlet API 中定义的 ServletResponse 接口类用于创建响应消息。lHttpServletResponse 是于 HTTP 协议的ServletResponse 子接口,它用于封装HTTP 响应消息。lHttpServletResponse 定义了一系列用于描述各种 HTTP 状态码的常量。l在service()方法调用 HttpServletResponse 对象的各种方法来创建响应消息。产生响应状态行lHTTP 响应消息的响应状态行包括 HTTP 版本、状态代码和一条相关的提示信息:HTTP/1.1 200 OKlHttpServletRe

23、sponse 中定义了若干与状态码数值对应的常量,每个常量的名称以前缀 SC(Sus Code 的简写)开头,然后是状态码在 HTTP 1.1 规范中所表示的状态信息的英文单词的组合,每个单词之间用下划线连接,且所有字母都大写。状态码 404 对应的常量为 HttpServletResponse.SC_NOT_FOUNDlsetSus 方法用于设置 HTTP 响应消息的状态码,并生成响应状态行。lsendError 方法用于发送表示错误信息的状态码(一般是 404,找不到客户机所请求的资源)到客户端,并清除缓冲区中的内容。构建响应消息头laddHeader 与 setHeader 方法ladd

24、Header 与 setHeader 方法laddDateHeader 与 setDateHeader 方法lsetContentLength 方法lsetContentType 方法:用于设置 Servlet 输出内容的 MIME 类型,对于 HTTP 协议来说,就是设置 Content-Type 响应头字段的值。如“text/html;charset=UTF-8”lsetCharacterEncoding 方法:用于设置输出内容的 MIME中的字符集编码,对HTTP 协议来说,就是设置 Content-Type 头字段中的字符编码部分。Servlet 的中文输出问题原理l浏览器接收到的中文

25、字符并不是中文符号本身,而是它的某种字符集编码的数据。l浏览器必须使用正确的字符集编码进行查看,才能将它所接收到的数据显示为正确的中文字符。l当 Servlet 程序仅仅需要输出纯文本格式的响应正文时,通常应调用 ServletResponse对象的 getWriter 方法返回一个 PrWriter 对象,然后使用这个 PrWriter 对象将文本内容写入到客户端。lJava 程序中的字符文本在内存中是以 unicode 编码的形式存在的,PrWriter 对象在输出字符文本时,需要先将它们转换成其他某种字符集编码的字节数组后输出。lServletResponse 对象的 getWriter

26、 方法返回的 PrWriter 对象默认使用 ISO8859-1字符集编码进行 Unicode 字符串到字节数组的转换,由于 ISO8859-1 字符集中根本就没有中文字符,Unicode 编码的中文字符将被转换成无效的字符编码后输出给客户端。Servlet 的中文输出问题解决办法lServletResponse 接口中定义了 setCharacterEncoding、setContentType 等方法来指定 ServletResponse.getWriter 方法返回的 PrWriter 对象所使用的字符集编码。l调用 ServletResponse 接口中定义的 setContentTy

27、pe 方法,在 HTTP 响应消息的Content-Type 头字段中指定响应正文的字符集编码。使用模拟响应消息头l问题:利用 HTTP 消息的响应头字段,可以让浏览器完成各种有用的功能,但是,这需要通过编写 WEB 服务器端的程序来实现。如果不会服务器端编程的普通 HTML 页面制作者也想借助 HTTP 消息的响应头字段来实现一些特殊功能,他们该怎么办呢?l解决方案:HTML 语言中专门定义了的 http-equiv 属性来在 HTML 文档中模拟 HTTP 响应消息头,当浏览器到 HTML 文档中具有 http-equiv 属性的时,它会用与处理 WEB 服务器发送的响应消息头一样的方式来

28、进行处理。l举例:response 细节lgetOutputStream 和 getWriter 方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStrerwriter 对象。lgetOutputStream 和 getWriter 这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。lServlet 程序向 ServletOutputStream 或 PrWriter 对象中写入的数据将被 Servlet 引擎从 response 里面获取,Servlet 引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。lSerlve

29、t 的 service 方法结束后,Servlet 引擎将检查 getWriter 或 getOutputStream 方法返回的输出流对象是否已经调用过 close 方法,如果没有,Servlet 引擎将调用 close 方法关闭该输出流对象。Response 输出验证:package com.hbsi.response;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;importjava.awt.image.BufferedImage;import

30、java.io.IOException;import java.util.Random;importjavax.imageio.ImageIO;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Response3 extends HttpServlet private sic finalWIDTH

31、=130;private sic finalHEIGHT=30;public voiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException BufferedImageimage= new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_RGB);Graphics g =image.getGraphics();setBackGround(g);setBorder(g);setRandomLine(g);setR

32、andomNum(g);response.setContentType(image/jpeg);response.setHeader(Pragma,no-cache);response.setHeader(Cache-Control,no-cache);response.setHeader(Expires,-1);ImageIO.write(image,JPEG,response.getOutputStream();u7684u4e00u4e86u662fu6211u4e0du5728u4ebau4eecu6709u6765u4ed6u8fd9u4e0au7740u4e2au5730priva

33、te void setRandomNum(Graphics g) g.setFont(new Font(宋体,Font.BOLD,20);Randomrandom = new Random();String base= u7684u4e00u4e86u662fu6211u4e0du5728u4ebau4eecu6709u6765u4ed6u8f d9u4e0au7740u4e2au5730;x=10;for(i=0;i4;i+)rand =random.next(base.length()-1);String str =base.charAt(rand)+;g.setColor(newColo

34、r(random.next(255),random.next(255),random.next(255);degree =random.next()%30;(Graphics2D)g).roe(degree*Math.PI/180, x, 20);g.drawString(str,x, 20);(Graphics2D)g).roe(-degree*Math.PI/180, x, 20);x +=30;private void setRandomNum1(Graphicsg) g.setFont(new Font(宋体,Font.BOLD,20);Random random= new Rando

35、m();x=10;for(i=0;i4;i+)String str =String.valueOf(random.next(10);g.setColor(newColor(random.next(255),random.next(255),random.next(255);degree =random.next()%30;(Graphics2D)g).roe(degree*Math.PI/180, x, 20);g.drawString(str,x, 20);(Graphics2D)g).roe(-degree*Math.PI/180, x, 20);x +=30;private voidse

36、tRandomLine(Graphics g) g.setColor(Colreen);Random random= new Random();for(i=0;i5;i+)x1 = random.next(WIDTH);y1 = random.next(HEIGHT);x2 = random.next(WIDTH);y2 = random.next(HEIGHT);g.drawLine(x1, y1, x2, y2);private void setBorder(Graphicsg) g.setColor(Color.BLUE);g.drawRect(1,1, WIDTH-2,HEIGHT-2

37、);private void setBackGround(Graphicsg) g.setColor(Color.WHITE);g.fillRect(0,0,WIDTH,HEIGHT);public voiddot(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException doGet(request,response);结果如下:随机产生 4 个颜色随机的汉字,并且随机添加 5 条干扰线Response 重定向:package com.hbsi.response;im

38、port java.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class Response5 extends HttpServlet public voiddoGet(HttpServletRequest request, HttpServletResponse resp

39、onse)throws ServletException,IOException response.getWriter().write(aaaaaaa);response.sendRedirect(/servletdemo/index.jsp);public voiddot(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException doGet(request, response);index.jspbasehref=My JSP index.jspstarting pa

40、ge!-首页 如下:上图为输入地址,因为重定向会转入其他地址,成功后如下图:l会话?在日常生活中,从拨通到挂断之间的一连串的你问我答的过程就是一个会话。会话可简单理解为:用户开一个浏览器,点击多个超,服务器多个 web 资源,然后关闭浏览器,整个过程称之为一个会话。l会话过程中要解决的一些问题?每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据。保存会话数据的两种技术:l是客户端技术,服务器把每个用户的数据以的形式写给用户各自的浏览器。当用户使用浏览器再去服务器中的 web 资源时,就会带着各自的数据去。这样,web 资源处理的就是用

41、户各自的数据了。lSesSes是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的 ses对象,由于 ses为用户浏览器独享,所以用户在服务器的 web 资源时,可以把各自的数据放在各自的 ses中,当用户再去服务器中的其它 web 资源时,其它 web 资源再从用户各自的 ses中取出数据为用户服务。介绍l是一种在客户端保持 HTTP 状态信息的技术,它好比商场的卡。l是在浏览器WEB 服务器的某个资源时,由 WEB 服务器在 HTTP 响应消息头中附带传送给浏览器的一片数据,WEB 服务器传送给各个客户端浏览器的数据是可以各不相同的。l一旦 WEB 浏览器保

42、存了某个,那么它在以后每次该 WEB 服务器时,都应在 HTTP 请求头中将这个回传给 WEB 服务器。lWEB 服务器通过在 HTTP 响应消息中增加 Set-响应头字段将请求头字段将给浏览器,浏览器则通过在 HTTP 请求消息中增加WEB 服务器。回传给APIljavax.servlet.http.,response 接口也中定义了一个类用于创建一个add方法,它用于在其响应头中增加一个相应的 Set-头字段。 同样,request 接口中也定义了一个 get类的方法:s 方法,它用于获取客户端提交的。public(Stringname,String value)setValue 与 ge

43、tValue 方法setMaxAge 与 getMaxAge 方法setPath 与 getPath 方法set与 get方法getName 方法Set-:username=qiujy;=localhost;path=/:username=qiujy;$Path=/jsp_04_servlet细节l一个只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。l一个 WEB 站点可以给一个 WEB 浏览器发送多个,一个 WEB 浏览器也可以存储多个 WEB 站点提供的。l浏览器一般只允许存放 300 个,每个站点最多存放 20 个,每个的大小限制为 4KB。l如果创建

44、了一个,并将他发送到浏览器,默认情况下它是一个会话级别的(即在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该在磁盘上,则需要使用 maxAge,并给出一个以秒为的时间。将最大时效设为 0 则是命令浏览器删除该。l注意,删除时,path 必须一致,否则不会删除Sesl和附加 URL 参数都可以将上一次请求的状态信息传递到下一次请求中,使用但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度。lSes的技术是一种将会话状态保存在服务器端的技术 ,它可以比喻成是医院给卡和医院为每个保留的的结合方式。l客户端需要接收、和回送 Ses的会话标识号,Ses可以且通常是借助来传递会话标识号。如何理解 SesSes的机制lServlet API 规范中定义了一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论