




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章Servlet核心技术 6 1Servlet基础 6 2Servlet生命周期 6 3使用Servlet 6 4获取运行环境信息 6 5Servlet中会话设置 6 6Servlet中异常设置 6 7Servlet过滤器 6 8Servlet监听器 Servelt与Servlet容器 Web浏览器 服务器 Web服务器 HTTP请求 静态页面 Servlet容器 jsp Servlet 数据库 HTTP响应 Servlet容器的概念 Servlet容器为JavaWeb应用提供运行时环境 它负责管理Servlet和JSP的生命周期 以及管理它们的共享数据 Servlet容器也称为JavaWeb应用容器 或者Servlet JSP容器 目前最流行的Servlet容器软件括 TomcatResinJ2EE服务器 如Weblogic 中也提供了内置的Servlet容器 Web程序结构1 一个web应用程序是由一组Servlet HTML页面 类 以及其它的资源组成的运行在web服务器上的完整的应用程序 以一种结构化的有层次的目录形式存在 组成web应用程序的这些文件要部署在相应的目录层次中 根目录代表整个web应用程序的 根 通常将web应用程序的目录放在webapps目录下 在webapps目录下的每一个子目录都是一个独立的web应用程序 子目录的名字就是web应用程序的名字 也就是web应用程序的 根 用户通过web应用程序的 根 来访问web应用程序中的资源 Web程序结构2 Servlet规范中定义了web应用程序的目录层次 Web应用程序的根目录 属于此Web应用程序的所有文件都存放在这个目录下 存放Web应用程序的部署描述符文件web xml 存放Servlet和其他有用的类文件 存放Web应用程序需要用到的JAR文件 这些JAR文件中可以包含Servlet Bean和其他有用的类文件 web xml文件包含Web应用程序的配置和部署信息 Web程序结构3 几点说明 WEB INF目录下的classes和lib目录都可以存放Java的类文件 在Servlet容器运行时 Web应用程序的类加载器将首先加载classes目录下的 其次才是lib目录下的类 如果这两个目录下存在同名的类 起作用的将是classes目录下的类 WEB INF是一个特殊的目录 所有字母都要大写 这个目录并不属于Web应用程序可以访问的上下文路径的一部分 对客户端来说 这个目录是不可见的 但该目录下的内容对于Servlet代码是可见的 配置任意目录下的Web应用程序1 在Web服务器中可以配置虚拟目录 而虚拟目录所对应的真实目录可以在任何路径下 在Tomcat服务器中 主要在XML配置文件中通过元素的设置来完成的 一个元素就表示一个Web应用程序 运行在特定的虚拟主机中 元素是元素的子元素 可以在conf server xml文件中设置Context元素 元素的常用属性 配置任意目录下的Web应用程序2 元素是元素的子元素 可以在conf server xml文件中设置Context元素 使用docBase属性指定Web应用程序的真实路径 将属性reloadable设置为true Tomcat在运行时会自动监测Servlet类的改动 如果发现有类被更新 Tomcat服务器将自动重新加载该Web应用程序 这样 在开发时 就不需要频繁重启Tomcat了 配置任意目录下的Web应用程序3 还可以在conf目录下依次创建Catalina localhost目录 然后在localhost目录下为test这个Web应用程序建立test xml文件 编辑这个文件输入以下内容从Tomcat5开始 不建议直接在server xml文件中配置元素 因为server xml文件作为Tomcat的主要配置文件 一旦Tomcat启动后 将不会再读取这个文件 因此无法在Tomcat服务器启动后发布Web应用程序 如果在其他地方配置元素 那么在Tomcat运行时 也可以发布Web应用程序 从Tomcat5 5开始 在 conf Catalina localhost目录下创建XML配置文件来配置Web应用程序 Tomcat将以XML文件的文件名将作为Web应用程序的上下文路径 而不理会在元素的path属性中指定的上下文路径是什么 由于Tomcat5 5之后的版本是以XML配置文件的文件名作为Web应用程序的上下文路径的 因此在配置元素时 可以不使用path属性 6 1Servlet基础 6 1 1Servlet技术功能 6 1 2Servlet特征 Servlet是1997年由Sun和其它的几个公司提出的一项技术 使用该技术能将HTTP请求和响应封装在标准Java类中来实现各种Web应用方案 Servlet是使用Java语言编写的服务器端程序 它能够接受客户端的请求并产生响应 与常规的CGI程序相比 Servlet具有更好的可移植性和安全性 以及更强大的功能等特点 Servlet是对支持Java的服务器的一般扩充 它最常见的用途就是扩展Web服务器 即 每当请求到达服务器时 Servlet负责对请求做出相应的响应 Servlet最常见的功能包括以下几种 Servlet技术功能 基于客户端的响应 给客户端生成并返回一个包含动态内容的HTML页面 可生成一个HTML片段 并能将其嵌入到现有HTML页面中 能够在其内部调用其它的Java资源并与多种数据库进行交互 可同时与多个客户机进行连接 包括接收多个客户机的输入以及并将结果返回给多个客户机 在不同的情况下 可将服务器与Applet的连接保持在不同的状态 对特殊的处理采用MIME类型过滤数据 将定制的处理提供给所有服务器的标准例行程序 例如 Servlet可以修改如何认证用户 Servlet特征 1 Servlet是传统CGI的替代品 它能够动态的生成Web页面 与其他的动态网页编程技术相比 Servlet具有以下几点非常明显的特征 高效性传统CGI中 对每个请求都要启动一个新的进程 启动进程所需要的开销在有些情况下就可能很大 而Servlet在服务器上仅有一个Java虚拟机在运行 每个Servlet请求都作为持久性进程中的一个单独线程得以执行 相对于传统CGI而言 显然效率要高得多 方便性Servlet提供了大量的实用工具例程 例如 自动解析和编码HTML表单数据 读取和设置HTTP头 处理Cookie 跟踪会话等等 功能强大许多传统CGI程序很难完成的工作使用Servlet就可轻松完成 例如Serlet能够直接和Web服务器交互 而普通的CGI程序则不能 Servlet还能够在各个应用程序之间共享数据 使得数据库连接池之类的功能很容易实现 Servlet特征 2 跨平台性Servlet采用Java语言编写 在有Java运行环境的任何操作系统上都可运行 成本低许多廉价甚至免费的Web服务器可供个人或小规模网站使用 而且对于现有的服务器 即使它不支持Servlet 要加上这部分功能也往往是免费的 或只需要极少的投资 可扩展性Servlet采用Java语言编写 而且得到了广泛的支持 因此基于Servlet的应用具有很好的扩展性 6 2Servlet生命周期 6 2 1加载并初始化Servlet 6 2 2处理客户端请求 6 2 3卸载Servlet Servlet的生命周期如图所示 Servlet容器响应客户请求的过程 ServletAPI 加载并初始化Servlet Servlet加载和实例化是由容器来负责完成的 加载和实例化Servlet其实指的是将Servlet类载入JVM Java虚拟机 中并初始化 将Servlet类载入JVM中的时机存在一下3种可能 当服务器启动时 浏览器第一次接收请求时 根据管理员要求 当服务器启动时 首先容器会定位Servlet类 然后加载它 容器加载Servle类以后 就会实例化该类的一个或者可能多个实例 Servlet被实例化后 容器会在客户端请求以前用init 方法初始化它 并传递实现ServletConfig接口的对象 执行完init 方法后 Servlet就会处于 已初始化 状态 在初始化阶段 Servlet实例可能会抛出ServletException异常或UnavailableException异常 处理客户端请求 Servlet初始化完毕以后 就可以用来处理客户端的请求了 当客户端发来请求时 容器会首先为请求创建一个ServletRequest对象和ServletResponse对象 其中ServletRequest代表请求对象 ServletResponse代表响应对象 然后会调用service 方法 并把请求和响应对象作为参数传递 从而把请求委托给Servlet 在每次请求中 ServletRequest对象负责接受请求 ServletResponse对象负责响应请求 在HTTP请求的情况下 容器会调用与HTTP请求的方法相应的doXXX 方法 例如 若HTTP请求的方式为GET 容器会调用doGet 方法 若HTTP请求的方式为POST 容器会调用doPost 方法 Servlet在处理客户端请求的时候有可能会抛出ServletException异常或者UnavailableException异常 卸载Servlet Servlet的卸载是由容器定义和实现的 因为资源回收或其他原因 当Servlet需要销毁时 容器会在所有Servlet的service 线程完成之后 或在容器规定时间后 调用Servlet的destroy 方法 以此来释放系统资源 比如数据库的连接等等 在destroy 方法调用之后 容器会释放Servlet实例 该实例随后会被Java的垃圾收集器所回收 如果再次需要这个Servlet处理请求 Servlet容器会创建一个新的Servlet实例 Servlet容器响应客户请求的过程 Servlet引擎检查是否已经装载并创建了该Servlet的实例对象 如果是 则直接执行第 步 否则 执行第 步 装载并创建该Servlet的一个实例对象 调用该Servlet的构造器调用Servlet实例对象的init 方法进行初始化 创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象 然后调用Servlet的service 方法并将请求和响应对象作为参数传递进去 WEB应用程序被停止或重新启动之前 Servlet引擎将卸载Servlet 并在卸载之前调用Servlet的destroy 方法 Servlet容器响应客户请求的过程 6 3使用Servlet 在应用程序中 所有的Servlet都必须直接或者间接地实现javax servlet Servlet接口 而我们在开发过程中最常使用的则是扩展javax servlet Servlet接口的实现类javax servlet GenericServlet和其子类javax servlet http HttpServlet 认识第一个Servlet 1 一个普通的Servlet只需扩展javax servlet GenericServlet即可 GenericServlet类定义了一个普通的 协议无关的Servlet 使用GenericServlet类可使编写Servlet变得简单 例如 创建一个简单的Servlet 主要代码如下 publicclassServletSampleextendsGenericServlet publicvoidservice ServletRequestrequest ServletResponseresponse throwsServletException IOException response setCharacterEncoding GBK 设置响应的编码类型为GBKPrintWriterout response getWriter 获取输出对象out println out println 这是第一个Servlet的例子 out println out close 关闭输出对象 认识第一个Servlet 2 配置web xml文件 通过元素和元素实现 其中元素用来定义 元素用来为Servlet配置映射路径 ServletSamplesunyang ServletSampleServletSample servlet 程序的运行结果如图所示 Servlet映射的细节 AnyName action AnyName do 同一个Servlet可以被映射到多个URL上 即多个元素的子元素的设置值可以是同一个Servlet的注册名 在Servlet映射到的URL中也可以使用 通配符 但是只能有两种固定的格式 一种格式是 扩展名 另一种格式是以正斜杠 开头并以 结尾 缺省Servlet 如果某个Servlet的映射路径仅仅为一个正斜杠 那么这个Servlet就成为当前Web应用程序的缺省Servlet 凡是在web xml文件中找不到匹配的元素的URL 它们的访问请求都将交给缺省Servlet处理 也就是说 缺省Servlet用于处理所有其他Servlet都不处理的访问请求 在 conf web xml文件中 注册了一个名称为org apache catalina servlets DefaultServlet的Servlet 并将这个Servlet设置为了缺省Servlet 当访问Tomcat服务器中的某个静态HTML文件和图片时 实际上是在访问这个缺省Servlet HttpServletRequest简介 ServletAPI中定义的ServletRequest接口类用于封装请求消息 HttpServletRequest是专用于HTTP协议的ServletRequest子接口 它用于封装HTTP请求消息 在service 方法内部调用HttpServletRequest对象的各种方法来获取请求消息 使用HttpServlet 1 创建用于Web的Servlet 需要扩展javax servlet http HttpServlet HttpServlet可用于处理HTTP请求 例如 创建用于Web的Servlet 使用HttpServlet 2 配置web xml文件 ServletSamplesunyang HttpServletSampleServletSample httpServlet 程序的运行结果如图所示 6 4获取运行环境信息 6 4 1获取Servlet信息 6 4 2获取服务器端信息 6 4 3获取客户端信息 运行环境信息包括Servlet信息 服务器端信息和客户端信息 获取Servlet信息 1 Servlet信息包括Servlet的初始化参数 Servlet的初始化参数名和Servlet名称 这些信息通常都是配置在web xml中的 可通过javax servlet ServletConfig接口中定义的方法来获取 1 获取Servlet的初始化参数 在Web xml文件中 元素的相关配置代表Servlet的初始化参数 在Servlet中这些参数的获取是通过ServletConfig接口的getInitParameter 方法来完成的 getInitParameter 方法的语法格式如下 publicStringgetInitParameter Stringname 语句中 参数name为元素的值 getInitParameter 方法的返回值为元素的值 获取Servlet信息 2 2 获取Servlet初始化参数名 在web xml文件中 元素的值即为Servlet初始化参数名 获取Servlet初始化参数名通过ServletConfig接口的getInitParameterNames 方法来完成 该方法的语法格式如下 publicEnumerationgetInitParameterNames getInitParameterNames 方法的返回值为一个枚举对象 Enumeration 和getInitParameter 方法一样 该方法也可在GenericServlet的子类中直接调用 获取Servlet信息 3 3 获取Servlet名称 可通过ServletConfig接口的getServletName 方法来获取Servlet在web xml文件中的注册名称 该方法的语法格式如下 publicStringgetServletName getServletName 方法的返回值为元素的值 若Servlet未注册 则返回类名 获取服务器端信息 1 服务器端信息包括服务器名 服务器端口号 服务器的属性信息等 Servlet通过ServletContext和ServletRequest接口提供的相关方法可获取这些服务器端信息 这些方法的名称及其作用如表所示 ServletContext接口 Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象 ServletContext对象被包含在ServletConfig对象中 调用ServletConfig getServletContext方法可以返回ServletContext对象的引用 由于一个WEB应用程序中的所有Servlet都共享同一个ServletContext对象 所以 ServletContext对象被称之为application对象 Web应用程序对象 功能 获取WEB应用程序的初始化参数记录日志application域范围的属性访问资源文件获取虚拟路径所映射的本地路径WEB应用程序之间的访问ServletContext的其他方法 获取WEB应用程序的初始化参数 为WEB应用程序设置初始化参数的好处在于不需要修改Servlet源程序 就可以改变一些参数信息 ServletContext getInitParameterNames方法用于返回一个包含WEB应用程序的所有初始化参数名称的Enumeration集合对象 ServletContext getInitParameter方法用于返回某个指定名称的初始化参数值 在web xml文件的根元素中增加子元素 如下所示 companyNameit315 new application域范围的属性 application对象 ServletContext对象 内部有一个哈希表集合对象 存储进application对象内的哈希表集合对象中的每对关键字 值被称为application对象的属性 存储在application对象中的属性也被称之为application域范围的属性 application域范围的属性可以被当作该WEB应用程序范围内的全局变量使用 ServletContext接口中定义了4个分别用于增加 删除 访问application域范围的属性的方法 getAttributeNames方法getAttribute方法removeAttribute方法setAttribute方法 获取虚拟路径所映射的本地路径 getRealPath Stringpath 方法 用于返回某个虚拟路径所映射的本地文件系统路径 获取服务器端信息 2 应用举例 Servlet主要代码如下 获取服务器端信息 3 在XML文件中配置之后 运行结果如图所示 获取客户端信息 1 客户端信息包括客户端主机名 客户端IP地址 客户端端口号 客户端的请求参数等 Servlet通过ServletRequest接口或其子接口HttpServletRequest提供的相关方法可获取客户端信息 这些方法的名称及其作用如表所示 获取客户端信息 2 实例 Servlet主要代码如下 获取客户端信息 3 配置Web xml文件 运行结果如图所示 6 5Servlet中会话设置 6 5 1获取HttpSession对象 6 5 2在HttpSession对象中保存数据 6 5 3在HttpSession对象中读取数据 获取HttpSession对象 当需要为客户端建立session时 Servlet容器会给每一个用户建立一个HttpSession对象 获取HttpSession对象的方式是通过调用HttpServletRequest接口提供的以下两个方法 publicHttpSessiongetSession publicHttpSessiongetSession Booleancreate 使用无参数的getSession 方法会获取一个HttpSession对象 而对于带参数的getSession 方法 如果当前请求不属于任何会话 而且参数create值为true 则创建一个新会话 否则返回null 此后所有来自同一个的请求都属于这个会话 在HttpSession对象中保存数据 获取到HttpSession对象后 通过HttpSession对象的setAttribute 方法通过绑定一对名字 值数据 可将相关数据保存到当前会话中 如果会话中已经存在该名字则替换它 setAttribute 方法的语法格式如下 publicvoidsetAttribute Stringname Objectvalue 参数name是绑定到会话中的属性名称 参数value是属性的值 在HttpSession对象中读取数据 HttpSession提供的getAttribute 方法可读取存储在会话中的对象 该方法的语法格式如下 publicObjectgetAttribute Stringname 参数name的值为setAttribute Stringname Objectvalue 方法中设置的name的值 6 6Servlet中异常设置 1 在Servlet中 可使用两种处理异常的方式 在try catch语句的catch语句块中直接生成并输出异常信息的页面 或者将异常转发到异常处理的Servlet或JSP页面中 在web xml文件中通过元素指定异常处理 第一种方式和普通的Java类中处理异常的方式类似 第二种方式则是由Servle规范提出的 其优点就是这种处理方式属于整个Web程序的异常处理 它使得Web程序以一种统一的方式在不同的服务器中显示异常信息 下面看一个实例 6 6Servlet中异常设置 2 1 创建两个JSP页面 名称分别为 exception jsp 和 notFind jsp 其中exception jsp用来处理数组下标越界的异常 notFind jsp用来处理404错误代码 数组下标越界异常页面请求中出现数组下标越界异常 404错误处理页面当前请求的页面不存在 notFind jsp exception jsp 6 6Servlet中异常设置 3 2 创建Servlet类ExceptionServlet ava 该类可产生一个数组下标越界异常 代码如下 publicclassExceptionServletextendsHttpServlet protectedvoiddoGet HttpServletRequestreq HttpServletResponseresp throwsServletException IOException this doPost req resp protectedvoiddoPost HttpServletRequestreq HttpServletResponseresp throwsServletException IOException intnum newint 2 num 3 0 数组下标越界 6 6Servlet中异常设置 4 3 在web xml中配置类ExceptionServlet和元素 6 6Servlet中异常设置 5 4 运行结果 当请求ExceptionServlet时 则出现如图1所示的页面 当请求一个不存在的页面时 则出现如图2所示的页面 图1 图2 6 7Servlet过滤器 6 7 1Servlet过滤器工作原理 6 7 2Servlet过滤器配置 6 7 3Servlet过滤器典型应用 Servlet过滤器工作原理 Servlet过滤器其实就是一种小型的 可插入的Web组件 它能够对Servlet容器的请求和响应进行拦截和处理 不能生成请求和响应 Servlet过滤器介于与之相关的Servlet或JSP页面与客户端之间 工作原理 当某个资源与Servlet过滤器关联后 对该资源的所有请求都会经过Servlet过滤器 Servlet过滤器在Servlet被调用之前会检查请求对象 Request对象 并决定是将请求转发给过滤器链中的下一个资源还是中止该请求并响应用户 若请求被转发给过滤器链中的下一个资源处理后 Servlet过滤器会检查响应对象 Response对象 进行处理后返回给用户 其工作原理如图所示 Servlet过滤器配置 1 配置Servlet过滤器包括下面两个步骤 1 命名Servlet过滤器和指定Servlet过滤器相应的实现类 并且可选择指定传递至Servlet过滤器的初始化参数 配置代码如下 FilterNamepackage classNameParamName1ParamValue1ParamName1ParamValue1 Servlet过滤器配置 2 2 将Servlet过滤器映射至URL或Servlet 这是通过元素来实现的 将Servlet过滤器映射至URL的配置代码如下 FilterName path 元素和元素的子元素一致 元素指定了过滤器的映射路径 Servlet过滤器还可映射至Servlet FilterNameServletName 元素和元素的子元素一致 元素指定过滤器映射的Servlet的名称 Servlet过滤器典型应用 1 创建过滤器须实现javax servlet Filter接口 该接口内定义了3个方法 init FilterConfigconfig 用于初始化过滤器 并其内获取web xml文件中配置的过滤器初始化参数 doFilter ServletRequestreg ServletResponseres FilterChainchain 用于进行过滤操作 该方法的第一个参数为ServletRequest对象 此对象给过滤器提供了对进入的信息 包括表单数据 Cookie和HTTP请求头 的完全访问 第二个参数为ServletResponse 用于响应使用ServletRequest对象访问的信息 通常在简单的过滤器中忽略此参数 最后一个参数为FilterChain 该参数用来调用过滤器链中的下一个资源 destroy 用于销毁过滤器 Servlet过滤器典型应用 2 创建过滤器实例 1 创建Servlet过滤器 IPFilter java 它可以过滤用户的IP地址 以进行访问控制 该过滤器IPFilter的关键代码如下 publicclassIPFilterimplementsFilter protectedFilterConfigfilterConfig protectedStringfilterIP 需要过滤的IP地址 初始化过滤器 publicvoidinit FilterConfigconfig throwsServletException this filterConfig config filterIP config getInitParameter filterIP 获取被过滤的IP地址if filterIP null filterIP Servlet过滤器典型应用 3 过滤操作 publicvoiddoFilter ServletRequestreg ServletResponseres FilterChainchain throwsIOException ServletException RequestDispatcherreqDispatcher reg getRequestDispatcher error jsp StringremoteIP reg getRemoteAddr 获取本地IP地址if remoteIP equals filterIP 如果该IP地址被过滤 将转向错误页面reqDispatcher forward reg res else 否则将请求转发给过滤器链中的其他资源chain doFilter reg res 销毁过滤器 publicvoiddestroy this filterConfig null Servlet过滤器典型应用 4 2 在web xml文件中配置IPFilter过滤器 在配置文件中定义了一个名为filterIP的参数 它的值为192 168 70 82 表示IP地址为192 168 70 82的用户将被拒绝访问 在web xml文件中配置过滤器如下 IPFiltersunyang IPFilterfilterIP192 168 70 82IPFilter Servlet过滤器典型应用 5 3 建立测试IPFilter过滤器的JSP页面 success jsp 和 error jsp 欢迎页面欢迎访问吉林省三扬科技咨询有限公司 拒绝访问对不起 您的IP地址禁止访问该网站 success jsp error jsp Servlet过滤器典型应用 6 4 运行结果 当IP地址非192 168 70 82的用户访问success jsp时 运行结果如图1所示 当IP地址非192 168 70 82的用户访问success jsp时 运行结果如图2所示 图1 图2 6 8Servlet监听器 6 8 1Servlet监听器工作原理 6 8 2Servlet监听器类型 6 8 3Servlet监听器典型应用 Servlet监听器工作原理 Servlet监听器是Web应用程序事件模型的一部分 当Web应用中的某些状态发生改变时 Servlet容器就会产生相应的事件 比如创建ServletContext对象时触发ServletContextEvent事件 创建HttpSession对象时触发HttpSessionEvent事件 Servlet监听器可接收这些事件 并可以在事件发生前 发生后可以做一些必要的处理 Servlet监听器类型 1 根据监听对象的不同 Servlet2 4规范将Servlet监听器划分为以下3种 ServletContext事件监听器 用于监听应用程序环境对象 HttpSession事件监听器 用于监听用户会话对象 ServletRequest事件监听器 用于监听请求消息对象 1 ServletContext事件监听器 对ServletContext对象进行监听的接口有ServletContextAttributeListener和ServletContextListener 其中ServletContextAttributeListener用于监听ServletContext对象中属性的改变 包括增加属性 删除属性和修改属性 ServletContextListener用于监听ServletContext对象本身的改变 例如ServletContext对象的创建和销毁 Servlet监听器类型 2 ServletCo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西藏流散僧尼管理办法
- 企业环境安全培训计划课件
- 企业火灾安全培训课件
- 纪委规范案件管理办法
- 2025年国家工作人员学法用法考试题库附参考答案
- 中级消防设施操作员试题考试题库含答案
- 出租屋安全培训方案课件
- 企业安全巡查培训内容课件
- 新媒体环境下的文化传播转型-洞察及研究
- 企业安全学习培训总结课件
- 2021版十八项医疗质量安全核心制度附流程图
- 门窗安装用工合同模板
- 人教版(2024年新版)七年级上册美术全册教学设计
- 人教版六年级数学上册第一单元测试卷
- 心电图并发症预防及处理
- TCECA-G 0286-2024 户式空气源热泵水机三联供系统技术规范
- 多感官体验融合算法与模型
- 2020六年级上册综合实践教案(苏少版)
- 安踏门店员工劳动合同
- JT-T-155-2021汽车举升机行业标准
- 校园文化建设规划和实施方案
评论
0/150
提交评论