版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、服务器端小应用程序Servlet,1 Servlet概述 Servlet是一种专门的Java程序,它本身不能直接独立运行,只能运行于支持Servlet的服务器一方。它接收来自客户端的请求,将处理结果以动态网页形式返回客户端浏览器,以浏览器/服务器方式工作。多数Servlet应用采用三层结构。 第一层是客户表达层,它支持多种浏览器。复杂的用户界面的处理工作由HTML、Java Applet、JSP共同完成;简单的任务可以交给标准的HTML页完成。Applet从第二层的服务器下载到客户机。,第二层是业务层,由Java服务器构成,它一般利用多个Servlet、JavaBean来实现,作为用户服务和数
2、据服务之间的桥梁。 第三层是数据库服务,由数据库系统组成,该层用来定义、维护、访问和更新数据,以满足业务对数据的请求,它可以在特定的数据库管理系统中实现(图1)。 1.1 Servlet开发、运行环境 1.2 JBuilder下开发Servlet程序 例1 编写一个servlet,向客户端的浏览器输出“HELLO WORLD”以及服务器的时间等信息。 (1)在JBuilder中建立工程 D:WebAppWebApp.jpx。,图1 支持Servlet应用服务系统结构,(2)选择【File】【New】,进入图2窗口,选择【Web】【Servlet】【OK】,进入图3。 图2 项目类型选择,图3
3、Servlet开发向导1,(3)图3 中,选择默认的标准Servlet(Sdandart servlet),单击【Finish】,进入图4。 图4,(4)图4生成Web应用子目录,其中有自动生成的Web部署文件(web.xml)和存档文件(.war)。 (5)编辑图4自动生成的Servlet1程序。 (6)编译、运行例1。选择【Run】【Wev Run“Servlet1 using“Servlet1”】 JBuilder下运行Servlet1.java的结果如图5所示,同时生成存档文件(.war)。 (7)点击图5下部的【Web View Source】,进入图6所示的Servlet1.jav
4、a运行时输出的HTML网页代码。,图5 运行Servlet1.java显示的页面,图6 运行Servlet1.java输出的HTML网页,例1 Servlet1.java源程序如下。 import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class Servlet1 extends HttpServlet private static final String CONTENT_TYPE = text/html; charset=GBK; /Initial
5、ize global variables public void init() throws ServletException /Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws,ServletException, IOException response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println();
6、 out.println(Servlet1); out.println(); out.println(The servlet has received a GET. This is the reply.); out.println(); out.println(); out.close(); /Clean up resources public void destroy() ,1.3调用Servlet的过程 客户浏览器向Servlet服务器发送请求消息,消息中包含Servlet程序的URL地址。Servlet服务器接收到客户请求消息,负责运行客户指定的Servlet。如果这个Servlet还没
7、有被装载到服务器中,那么它首先从磁盘上或从网络中装载Servlet程序到服务器,然后再调用Servlet类中“init”、“Service”方法。Servlet第一次装载后,通常作为线程存在于服务器系统中,直到服务器停止或命令该线程撤消(destroy)。 Servlet运行过程如图7所示。,图7 Servlet运行结构,制作一个Servlet的完整过程,1 编写Servlet 引入用到的包 import javax.servlet.*; import javax.servlet.http.*; import java.io.*; 定义类的基本框架并继承HttpServlet public c
8、lass FirstServlet extends HttpServlet 编写成员方法 成员方法包括init、service、destroy。 2 编译Servlet javac FirstServlet.java,制作一个Servlet的完整过程,3 配置Servlet 在配置文件web.xml中进行配置 配置包括两部分,第一部分是Servlet的声明,第二部分是Servlet访问方式的设置。 首先是Servlet的声明 hello ch10.FirstServlet 配置访问该Servlet的方式 hello /hello ,制作一个Servlet的完整过程,4 部署Servlet 编译
9、好的文件需要放在Web应用的WEB-INFclasses下面 5 请求Servlet 对Servlet的访问与对JSP的访问基本相同,可以通过以下3种方式进行: 通过在浏览器中直接输入地址访问 :7001/test/hello 通过超链的形式访问 第一个Servlet 通过表单提交的方式访问 ,2 Servlet编程 现有三种Servlet,分别是标准Servlet、监听Servlet和过滤Servlet。 三种Servlet都必须继承javax.servlet和javax.servlet.http包中的GenericServlet类或它的子类HttpServle
10、t类。 监听Servlet涉及到实现监听器HttpSessionListener、ServletContextListener、HttpSessionAttributeListener或ServletContextAttributeListener接口,达到对Servlet生命周期中事件的监听处理;过滤Servlet涉及Filter接口的实现,达到对Servlet请求消息的过滤。,相关接口和类 javax.servlet.Servlet 用于定义所有Servlet必须实现的方法。 javax.Servlet.GenericServlet 抽象类,实现了Serlvet和ServletConfig
11、接口,用于定义通用的、与协议无关的Servlet 。 javax.Servlet.http.HttpServlet 继承自GenericServlet,主要用于派生用于Web站点的HTTP Servlet,也是一个抽象类。如果要编写一个HTTP Servlet,最少需要覆盖一个方法,通常是下面几个方法中的一个:doGet方法、doPost方法、doPut方法或者doDelete方法 必要的时候可以继承init和destroy方法、getServletInfo方法,相关接口和类 javax.Servlet.http.HttpServletRequest 是一个接口,能够为HTTP Servlet
12、提供请求信息 通常由服务器根据请求信息创建该接口的对象,然后把该对象作为参数去调用service方法 主要方法 getParameter和getParameterValues,前者获取单值表单元素的值,后者用于获取多值表单元素的值,getRemoteAddr,获取远程主机地址; getRemoteHost,获取远程主机; getServerName,获取服务器的名字; getServerPort,获取端口号; getProtocol,获取使用的协议; getMethod,获取请求方式; getQueryString,获取请求字符串; getRequestURL,获取请求的地址。,相关接口和类
13、javax.servlet.http.HttpServletResponse 也是一个接口,与HttpServletRequest相反,主要定义的是与响应相关的方法。 主要方法: 设置HTTP Header的方法 设置Cookie的方法 用于重定向的方法sendRedirect() javax.servlet.http.HttpSession 该接口提供了一种方式,能够保存用户在访问网站过程中的信息。,2.1 继承必须的类 1.继承GenericServlet GenericServlet类init( )方法仅在服务器装载Servlet时才由服务器自动调用它而执行一次。Servlet方法也是由
14、服务器来调用的。init只执行一次,它作为等待服务调用的线程存在,只有Servlet文件名和类名改变时,或者重新启动Servlet服务器,Servlet线程才重新初始化。 init仅有一个参数,那就是ServletConfig对象,它的主要任务是把Servlet运行配置信息(ServletConfig对象)存储起来。Servlet的配置信息是很重要的,所以,当程序员覆盖这个方法,时一定要在方法中通过调用super.init( )来完成ServletConfig对象存储。在init方法没执行完之前,所有客户对该Servlet的请求服务信息都会被阻塞,直到初始化完毕才得到处理。 与init方法相对
15、应的是destory方法。当服务器由于资源不足,如内存、磁盘空间不够,而要卸载Servlet时就调用它,释放该Servlet所占用的全部资源。 Service方法是类GenericServlet中最重要的方法。每次客户向服务器发出请求时,服务器就会调用这个方法。程序员若想对客户的请求进行响应的话,就必须覆盖这个方法,并在这个方法中加入,自己的代码来具体实现对客户的响应。 Service有两个参数,ServletRequest和ServletResponse。其中 ServletRequest保存了客户向服务器请求的种种属性,如客户的IP地址,客户传递给服务器的参数和参数长度等。 Servlet
16、Response的对象用来设置如何对客户进行响应,它有以下三个方法。 setContentType(String)用来设置对客户响应的类型。 setContentleng (int)用来设置对客户响应的长度; getOutputStream()返回对客户响应的输出流。,可以把输出流传递给ServletOutputStream对象,它是java.io.OutputStream的子类,通过它把应答数据送还到客户端的浏览器中。 2.继承HttpServlet HttpServlet是GenericServlet的子类,因此它也有init和destroy这两个生命周期方法,以及Service方法。 H
17、ttpServlet是针对当浏览器和服务器使用Http协议。类HttpServlet中有两个Service方法。一个是Service(ServletRequest,ServletResponse),它仅仅是从它的父类继承过来的。另一个是Service(HttpServletRequest,httpServletResponse),它是类HttpServlet的Service方法。,HttpServlet中的HttpServletRequest对象和HttpServletResponse对象与GenericServlet中的ServletRequst和ServletResponse的作用非常类似
18、,它们分别继承了ServletRequest和ServletResponse。 HttpServlet提供另外两个很重要的方法,doPost方法和doGet方法。用它们来支持HTTP的post和get方法。 2.2 标准Servlet应用编程 1.HTTP请求与响应协议,当浏览器向WWW服务器发出请求时,它就向服务器传递了请求信息,请求的信息包括:提出请求的浏览器名、浏览器能接收的数据类型等。在每次建立连接时客户机方和服务器方必须对它们的数据表示达成的协议。 HTTP的请求消息大体 如图8所示。,图8 GET提交FORM 请求消息,Servlet不支持图形用户界面,客户只是需要服务器提供正确的
19、快速的服务,因此它的主要工作是接收客户的请求并把对请示的处理结果返回给客户。若要想有个友好的界面,Servlet可以与Form或Applet相结合,来完成一些客户机/服务器应用。,2.访问Servlet的运行环境信息 Servlet中的ServletConfig对象封装了该Servlet在装载时的运行环境信息,在Servlet启动时,Servlet服务器执行init(ServletConfig config)方法,将该运行环境信息传递给Servlet。通过ServletConfig对象可以获得Servlet在装载时的运行环境信息。 例2 利用ServletConfig对象,访问Servlet运
20、行环境信息。 Servlet1简化的UML图如图9所示。 import java.io.*; import java.util.*; import javax.servlet.*;,图9 类Servlet简化的UML图,import javax.servlet.http.*; public class Servlet1 extends HttpServlet ServletContext context; public void init(ServletConfig config) throws ServletException super.init(config); context =con
21、fig.getServletContext(); public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException ,PrintWriter out=res.getWriter(); out.println(information about Servletconfig); out.println(pre); out.println(); /方法 getInitParameter返回指定初始化参数的值。 out.println(initial para
22、meter name: +getInitParameter(name); /*方法getInitParameterNames返回所有的初始化参数,并把它放到一个字符串数组中去。*/ Enumeration enume=context.getInitParameterNames(); if(enume!=null), boolean first =true; /方法hasMoreElements判断enum是否为空。 while(enume.hasMoreElements() if(first) out.println(Init Parameters); first=false; String
23、param=(String)enume.nextElement(); out.println(+param+: +context.getInitParameter(param); out.println(information about context of Servletconfig);,/方法getMimeType返回指定文件的类型,如果未知,则返回NULL。 out.println(getMimeType(): “ + context.getMimeType(Servlet1.html); out.println(getMinorVersion(): “ + context.getMi
24、norVersion(); out.println(getRealPath(): “ +context.getRealPath(/servlet); /*方法ServletInfo返回运行Servlet服务器的名称和版本。返回类型是一个形如serververtion的字符串*/,out.println(Servletconfig.Servletcontext .ServerInfo:“+context.getServerInfo(); out.println(Servletconfig.Servetcontext.ServletName:“+context.getServletContextN
25、ame(); /输出Servlet1有关信息 out.println(ServletInfo: +getServletInfo(); public String getServletInfo() return Servlet about ServletConfig; ,例2在JBuilder下运行结果如图5-10所示,它显示Servlet运行环境信息。,图10 例2 JBuilder下运行结果,3.获取客户请求信息的编程 类HttpServlet的Service方法: Service(HttpServletRequest,httpServletResponse)。其参数HttpServletR
26、equest对象包含的客户发送给服务器的请求信息,它是从父类ServletRequest继承过来。 例3 利用HttpServletRequest对象返回客户发送给服务器的请求信息。 import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*;,public class SnoopServlet extends HttpServlet public void doPost(HttpServletRequest req, HttpServletResponse res) thr
27、ows ServletException, IOException /发送给服务器的信息不能超过8K if (req.getContentLength() 8 * 1024) res.setContentType(text/html); ServletOutputStream out = res.getOutputStream(); /形成请求消息长度非正常的html页面, out.println(Too long Message! );,out.println(); out.println(); else doGet(req, res); public void doGet(HttpServ
28、letRequest req, HttpServletResponse res) throws ServletException, IOException res.setContentType(text/html); ServletOutputStream out = res.getOutputStream(); /形成请求消息各成分的html页面,out.println(); out.println(Snoop Servlet!); out.println(); out.println(); out.println(HttpUtils.getRequestURL(req).toString(
29、); out.println(); /下面的程序显示初始化参数 Enumeration enume = this.getInitParameterNames(); if (enume != null) ,out.println(Init Prameters); try while (enume.hasMoreElements() String param = (String) enume.nextElement(); out.println( + param + : + getInitParameter(param); catch (Exception e) e.printStackTrace
30、(); /下面的程序显示对象HttpServletRequest中所包含的信息,out.println(Request Information: ); out.println(); out.println(); /方法getMethod返回服务器处理信息所用的方法 print(out, Request method,req.getMethod(); /方法RequestURI返回请求的URI。 print(out, Request URI, req.getRequestURI(); /方法getProtocol返回客户方与服务器所用的协议 print(out, Request protocol
31、, req.getProtocol(); /方法getServletPath返回服务器处理请求的Servlet路径 print(out, Servlet path, req.getServletPath(); /方法getPathInfo返回附加的路径信息,它是可选的 print(out, Path Info, req.getPathInfo();,/方法getPathTranslated返回Servlet的绝对路径 print(out, Path translated, req.getPathTranslated(); /方法getQuerystring返回请求的查询字符串 print(ou
32、t, Query string, req.getQueryString(); /方法getContentLength返回请求的查询字符串的长度 print(out, Content length, req.getContentLength(); /方法getContent type返回客户送到服务器数据类型 print(out, Content type, req.getContentType();,/方法getServer name返回服务器名字 print(out, Server name, req.getServerName(); /方法getServerPort返回服务器的端口 pri
33、nt(out, Server port, req.getServerPort(); /方法getRemoteUser返回提出请求的客户方的名字 print(out, Remote user, req.getRemoteUser(); /方法getRemoteAddress返回提出请求的客户的地址 print(out, Remote address, req.getRemoteAddr();,/方法getAuthType返回鉴定类型 print(out, Authorization scheme, req.getAuthType(); out.println(pre); /下面的程序显示请求的首
34、部信息 Enumeration e = req.getHeaderNames(); if (e.hasMoreElements() out.println(Request headers:); out.println(); while (e.hasMoreElements() String name = (String) e.nextElement(); out.println( + name + : + req.getHeader(name); ,out.println(); out.println(); /下面的程序显示Servlet的参数 e = req.getParameterName
35、s(); if (e.hasMoreElements() out.println(Servlet parametes: ); out.println(); out.println(); while (e.hasMoreElements() String name = (String) e.nextElement(); out.println(); out.println(); ,/*向Servlet输入流输出两个字符串,若value值为null,则输出的第二个字符串是none*/ private void print(ServletOutputStream out, String name,
36、String value) throws IOException out.println( + name + : ); out.println(value = null ? if (value = -1) ,out.println( 例3在JBuilder下运行结果如图11所示。,图11 例3在JBuilder下运行结果(运行环境信息),The HelloWorld Servlet,import javax.servlet.*; import java.io.*; public class HelloServlet extends GenericServlet public void serv
37、ice(ServletRequest req, ServletResponse res) throws IOException, ServletException res.setContentType(text/plain); ServletOutputStream out = res.getOutputStream(); out.println(Hello, World!); ,DateServlet,import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; impor
38、t java.text.*; public class DateServlet extends HttpServlet public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException,DateServlet, Date today = new Date(); DateFormat df = DateFormat.getDateInstance(); String s = df.format(today); res.setContentType(te
39、xt/plain); ServletOutputStream out = res.getOutputStream(); out.println(s); ,HelloHttpServlet,import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class HelloHttpServlet extends HttpServlet public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException
40、, ServletException String name = req.getParameter(name); if (name = null) name = Joe; res.setContentType(text/plain); ServletOutputStream out = res.getOutputStream(); out.println(Hello, + name + !); ,import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import com.sun.image.codec.jp
41、eg.*; import java.awt.image.*; import java.awt.*; public class JPEGServlet extends HttpServlet public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException response.setContentType (image/jpeg);,JPEGServlet,ServletOutputStream out= response.getOutpu
42、tStream(); BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setColor(Color.green); g.fillRect(0,0,100,100); g.setColor(Color.red); g.drawOval(0,0,100,100); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(im
43、age); out.close();,index.html Servlet 计算整数的阶乘 点击“计算”,调用Servlet ,CounterServlet, ,import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class CounterServlet extends HttpServlet private static final String CONTENT_TYPE = text/html; charset=GBK; private int number; public void d
44、oPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType (CONTENT_TYPE);,PrintWriter out = response.getWriter();int n = 1; number = Integer.parseInt(request.getParameter(DATA); for (int i = 1; i + 计算结果 + ); out.println(); out.printl
45、n(TestServlet); out.println(); out.println(+number +! = + n + ); out.println(); out.close();,4. HttpSesion类对象和Cookie技术 利用HTTP协议客户和服务器对话时,客户端向服务器发送HTTP请求,服务器将根据客户的请求返回相应的响应信息,这样客户和服务器完成一次对话。如果要接着对话,一切从新开始。这就是说,上次对话的任何状态不保留到下一次对话。人们把这种通讯协议叫上下文无关的协议(或无状态协议)。但是,有的应用需要记住上次对话状态,如下一次对话需要上一次对话的用户名,传送来的参数。为此
46、,人们可以利用HttpSession类的对象或Cookie技术。,例4 HttpSession类对象的使用。 如果某客户浏览器在一段时间中持续访问服务器,那么这种情况称为浏览器和服务器在“对话”。一般而言,只要浏览器不关闭,那么就认为一直是进行同一个会话。关闭浏览器,再次启动浏览器相当于开始一次新的会话。 当客户第一次打开浏览器访问Servlet时,生成一个新的HttpSession类对象(session)。HttpServletRequest对象的getSession方法可得到该session对象。一旦得到session对象,就可以利用它设置会话参数。例如:计算客户在整个,会话过程中访问一个
47、Servlet页面的次数(见例4)。当第一次访问该Servlet时,session.isNew()判断的结果为true,以后每次都是false,同时页面访问次数(PageCount)的值随着每次访问刷新网页而增1。 访问session信息的Servlet程序如下: import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*;,public class ServletSession extends HttpServlet private static final String
48、pageCountKey = PageCount; public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String title = Session Information Page; String heading = Session Information; /*request对象的getSession方法可得到Session对象,getSession方法的参数如果为true,那么不是开始一个新Session。所以,
49、应该把这条语句放到service方法的最前面,当用户第一次访问到Servlet时就生成一个新的Session对象。*/,HttpSession session = request.getSession(true); /获得页面数 Integer sum = (Integer) session.getAttribute(pageCountKey); int ival = 0; if (sum != null) ival = Value(); System.out.println(Page Count= + ival); sum = new Integer(ival + 1); se
50、ssion.setAttribute(pageCountKey, sum); /修改session的页面数属性 response.setContentType(text/html);,PrintWriter out = response.getWriter(); /返回一个写响应数据的输出流 out.print( + title + ); out.print(); out.print( + heading + ); / session.getId()获得对象session的标识 out.println(Session ID= + session.getId() + ); out.println
51、(Created time = + new Date(session.getCreationTime() + );,out.println(Last Accessed time= +new Date(session.getLastAccessedTime() + ); out.println(NewSession? + session.isNew() + ); out.println(Inactive Interval= + session.getMaxInactiveInterval() + ); out.println(Requested Session Id= + request.get
52、RequestedSessionId() + from URL? ); out.println(Requested Session Id from URL? +request.isRequestedSessionIdFromCookie() + );,Enumeration sesNames = session.getAttributeNames(); while (sesNames.hasMoreElements() String name = sesNames.nextElement().toString(); Object value = session.getAttribute(nam
53、e); out.println(name + = + value + ); out.println( + name + = + value + ); out.println(); out.close(); 它运行结果如图12所示,图12 例4运行结果,如关闭浏览器,则停止使用Servlet。如重新启用该Servlet,这时PageCount的值变成1。 例5 Cookie 技术的使用 Cookie技术的实质是把上次对话所需要的状态保存到客户一个固定的文件中(Cookie)。当新一轮对话时,客户端向服务器发送的HTTP请求消息首部包含了Cookie文件中的内容。Cookie技术是服务器端将客户端
54、的状态信息存储在客户机,并且未来客户访问服务器时对存储信息进行访问、修改的机制。这一技术极大地扩充了基于Web的客户机与服务器对话能力。 当同一个客户再度向该服务器发出访问请求时,其磁盘上储存着的Cookie信息将被有针对性回送给,服务器,服务器端通过对这些信息的分析,掌握该用户先前访问的情况,客户端原有的Cookie将被适当地更新(图13)。服务器可以据此来跟踪用户,收集客户信息,这对于需要区别用户的场合(例如电子商务)特别有用。 因此为了保证安全,多数浏览器可设置是否使用Cookie。为了启用Cookie程序,首先要设置客户浏览器。 服务器借助Cookie识别出会话是否是新的。通常会话持续
55、的最大时间由服务器设置。服务器正确识别一次会话(Session)的条件不取决于服务器,而取决于用户浏览器是否允许使用Cookie。,图13 包含Cookie文件内容的Servlet消息,图14是例5-5 CookieServlet程序的简化UML图。,图14 CookieServlet简化的UML图,import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class CookieServlet extends HttpServlet public void service(HttpServlet
56、Request request, HttpServletResponse response) throws ServletException, IOException String title = Cookie Info Page; String heading = Cookie information is :; Cookie theCookie = null; Cookie cookies = request.getCookies();,/把浏览器输入的QueryString做为Cookie的名字 String cookieKey = request.getQueryString(); S
57、ystem.out.println(QueryString= + cookieKey); response.setContentType(text/html); /设置请求响应消息的类型 PrintWriter out = response.getWriter(); /获取请求响应消息的输出流 /如果有cookie值,则重构新的Cookie对象 if (cookieKey != null) String cookieValue = cookieKey + Value;,theCookie = new Cookie(cookieKey, cookieValue); /设置Cookie的生命期,参数以秒为单位,例如/设置生命期为10秒,10秒后刷新浏览器时就会/发现Cookie不存在了。 theCookie.setMaxAge(10); response.addCookie(theCookie); /write data or buidling web page. out.print( + title + ); out.print(); out.print( + heading+ );,if (cookies != null) for (int i = 0, n = cookies.length; i + cookiesi.getName(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 煤矿内部控制管理制度
- 煤矿运销科内部考勤制度
- 甲公司内部控制制度规定
- 监测站内部审计制度
- 监理内部考勤制度
- 科室内部奖金分配制度
- 科技馆内部制度
- 管委会内部竞聘上岗制度
- 粮仓进粮内部管理制度
- 贸易型企业内部控制制度
- 海底捞培训服务制度
- 2025年金融科技产品设计与运营指南
- 2026年湖南高速铁路职业技术学院单招职业倾向性测试模拟测试卷必考题
- 2025年重庆市政府采购评审专家考试真题含答案
- 2026年辽宁轻工职业学院单招职业适应性考试题库附答案解析
- 2026年电子病历等级测评服务合同
- 模块化数据中心钢结构焊接施工方案
- 影视造型课件
- 2026年企业补贴申请技巧与政策红利获取指南
- 学术英语写作(初阶) Unit 01
- 开挖机劳务合同范本
评论
0/150
提交评论