




免费预览已结束,剩余57页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 Web框架应用 ServletJSP技术的两种使用模式MVC及StrutsJavaServerFace 2 1 Servlet Servlet 服务器端小程序 使用JavaServlet应用程序设计接口编写的Java程序 由服务器端调用和执行 Java编写的CGI 源于请求 响应模式 可以接收来自客户端浏览器的Http请求 并产生一个响应 然后将这个响应发送到客户端 是独立于平台和协议的服务器端的Java应用程序 可以生成动态的HTML页面 位于Web服务器内部 由Web服务器进行加载 该服务器必须包含支持Servlet的JVM 实质就是运行在服务器上的类 3 传统CGI处理方式HTML网页上放置字段 文字输入区 和 提交 submit 按钮 用户输入相应信息 单击 提交 数据会随同一个URL传给服务器 告诉它运行指定地方的一个CGI 通用网关接口 程序 对提交的数据进行处理 Web服务器提供 调用CGI程序 用标准数据流输入和输出 CGI程序负责做其他一切事情 首先 检查输入的数据 判断是否正确 如果不正确 CGI生成相应的HTML代码 以网页形式 由服务器传回给用户 用户需要重新输入 如果输入数据正确 CGI处理数据 也许要添加到数据库等 随后产生HTML网页 回传给用户 使用户看到处理后的结果 Applet处理方式使用客户端运行的小程序检查数据 然后发出数据 由服务器端程序接收和处理数据 存在问题 不确定客户端是否有JVM 或是JVM的什么版本 4 Servlet处理方式可移植性Servlet使用Java编写 Java具有跨平台性 Servlet的可移植性也很强 可以在不同的操作系统和应用服务器下移植运行 灵活Servlet接口非常精练 易于掌握 同时 又具有良好的扩展性 效率高传统CGI 每个请求都要启动一个新的进程 Servlet中 每个请求由一个轻量级的线程处理 当JSP网页第一次运行时 速度很慢 这是因为服务器要将这些JSP程序转换为Servlet 而一旦转换完毕 编译后常驻在内存中 访问JSP网页的速度就很快了 功能强大可以完成传统CGI很难实现的任务 如直接和服务器交互 在各个程序之间共享数据 数据库连接池的应用 5 Servlet与AppletApplet和Servlet程序中都没有main 方法 只有一些特定的方法用于启动 执行和退出 不同的是 Servlet不提供用户界面 运行在服务器端 而Applet提供用户界面 运行于客户端 Servlet和JavaBean一样 使用纯Java编写 不同的是 JavaBean不能独立运行 只是提供接口供JSP等访问 而Servlet可以独立运行 Servlet的生命周期装载Servlet 动态执行 创建一个Servlet实例 调用Servlet的init 方法 服务 如果容器接收到对此Servlet的请求 那么它调用service 方法 销毁 实例被销毁 调用destory 方法 6 7 Servlet的开发过程基于HTTP协议的Servlet必须引入javax servlet和javax servlet http包 HttpServletRequest对象包含了客户端请求的信息 可能通过该参数取得客户端的一些信息以及HTTP请求类型 HttpServletReponse对象用于完成Servlet与客户端的交互 通过HttpServletRequest getOutputStream 方法取得向客户端输出的输出流 向客户端发送HTML页面 编写doGet 方法 对于POST请求 调用doPost 方法 开发 部署一个简单的Servlet编写HelloWorldServlet java部署好Servlet的目录结构 在classpath环境变量中添加 D TOMCAT5 5 COMMON LIB servlet api jar D TOMCAT5 5 COMMON LIB jsp api jar在浏览器中直接执行编译好的HelloWorldServlet class 8 编辑web xml添加关于要执行的Servlet的标签 FirstServletservlet FirstServlet添加Servlet的映射标签 FirstServlet First在浏览器中执行http localhost 8080 myServlet First 9 10 11 使用HttpServlet处理客户端请求Servlet是请求驱动的 请求可能包含多个数据项 当Web容器接收到某个对Servlet的请求时 封装成一个HttpServletRequest对象 将此对象传给Servlet的对应的服务方法 doGet doPostdoGet用于获取服务器信息 并将其作为响应返回客户端 当由浏览器 或者通过HTML JSP直接访问Servlet的URL时 一般使用GET方式调用 例 doGetTestServlet java会存在安全性上的问题 12 doPost用于客户端把数据传送到服务器端 可以隐藏发送给服务器端的任何数据 适合发送大量的数据 例 doPostTestServlet javadoPut允许客户端把真正的文件存放在服务器上 而不仅仅传送数据doDelete允许客户端删除服务器端文件或者Web页面 doHead由容器调用以使此Servlet能够处理Trace请求 主要用于调试 不可以覆盖 doOptions处理客户端的Options调用 通过这个调用客户端可以获得此Servlet支持的方法 13 获得Servlet初始化参数Servlet可以配置一些初始化参数ServletConfig接口 获取这些参数例 JDBCServlet javajpeg form html 14 2 JSP开发常用技巧 在不同的页面之间共享数据把数据保存在Session中 useSession 通过cookie setcookie 通过隐含的表单把数据提交到下一页面通过ServletContext对象通过Application对象通过文件系统或者数据库在不同的用户之间共享数据通过ServletContext对象 聊天servletContext chat 通过Application对象 testApplication 通过文件系统或者数据库 15 3 JSP技术使用的两种模式 模式一model1 JSP JavaBeanJSP页面独自响应请求并把处理结果返回客户 所有的数据由Bean来处理 JSP实现页面的表现 实现了页面的表现和页面的商业逻辑相分离的两层结构 引起的问题 当大量使用此模式时 导致在页面中嵌入了大量的Java控制代码 如果业务逻辑复杂 将会更加严重 适合小型项目 实例 简易论坛的设计 16 17 JSP作为视图 同时也有部分控制器的作用 JavaBean组件作为模型和控制器组件 HTTP请求到达JSP时 首先设置JavaBeans组件的属性 然后调用其组件的方法JavaBean组件通过连接数据库来执行业务逻辑 最后 JavaBean组件把执行的结果返回给JSP显示 index jsp showTypeList jspshowSubList jspshowSingle jsp Single classSubSingle class 数据源storeDB MySql DB class 18 3 JSP技术使用的两种模式 模式二model2 JSP JavaBean Servlet遵循MVC模式 使用一个或者多个Servlet作为C Control 控制器 请求由前沿的Servlet接收并处理后 重新定向到JSP 每个Servlet通常只实现很少一部分功能 多个Servlet结合起来完成复杂的任务 对输入数据的检查和转换 通过JavaBean访问数据库 初始化JSP中要用到的JavaBean或对象 根据处理中不同分支和执行的结果 如成功或失败 决定转向哪个JSP等JavaBean作为M Model 模型 使用 实现各个具体的应用逻辑和功能 JSP即为V View 视图 19 20 客户端请求首先发送到Servlet Servlet通过JDBC连接数据库 执行数据库操作 完成后用JavaBean来封装执行的结果 将结果发送到请求对象中 最后把视图派发到显示的JSP页面 index jspissue jspreversion jsp 数据源storeDB MySql Single classSubSingle class showTypeList jspshowSubList jspshowSingle jsp IssueCard classReverseCard class DB class 21 4 MVC模式 MVC Model View ControllerModel 应用对象 模型 真正完成任务的代码 View 应用对象在屏幕上的表示 视图 应该具有一定的功能性并遵守可用性的约束 但不应该处理数据 界面的每一部分都只能包含采集数据的足够逻辑 并把它传递给设计模式中的其他组成部分以进行处理 Controller 定义用户界面对用户输入的响应方式 控制器 控制模型和视图之间的交互过程 决定向用户返回怎样的视图 检查通过界面输入的信息以及选择处理输入信息的模型 22 23 5 Struts框架 StrutsFramework是一种基于Java的技术框架 充分利用面向对象设计 代码重用以及 writeonce runanywhere 的优点 提供创建Web应用程序的框架 其中对应用程序的显示 表示和数据的后端代码进行了抽象 视图 JSP每一视图采用了定制标签库 由StrutsFramework 提供的JSP的页面 全部表单元素都是用定制标签编码 每一个表单都通过映射JSP到Servlet的请求这一方式指向控制器的特定入口点 控制器 JavaServlet负责视图与模型之间的交互 控制器的每个入口点都由名为struts config xml的配置文件设置 把来自视图的请求映射为特定的Java类以进行相应的操作 还指定下一视图的位置 模型 JavaBean对进入控制器的每个入口点来说 Bean的作用是存储从视图获取的信息 同时被称为 动作类 ActionClass 实现业务逻辑 24 假设 电子商务程序 1 现在程序要完成的操作任务是提交定单并返回定单号给客户 这就是关于做什么的问题 应该由Action类完成 2 但具体怎么获得数据库连接 插入定单数据到数据库表中 又怎么从数据库表中取得这个定单号 一般是自增数据列的数据 这一系列复杂的问题 这都是解决怎么做的问题 则应该由一个 假设名为orderBo 业务对象即Model来完成 orderBo可能用一个返回整型值的名为submitOrder 的方法来做这件事 3 Action则是先校验定单数据是否正确 如果正确则简单地调用orderBo的submitOrder方法来得到定单号 它还要处理在调用过程中可能出现任何错误 最后根据不同的情况返回不同的结果给客户 25 26 首先 控制器 Servlet 进行初始化工作 读取配置文件 struts config xml 为不同的struts模块初始化相应的ModuleConfig对象 控制器接收HTTP请求 并从ActionConfig中找出对应于该请求的Action子类 如果没有对应的Action 控制器直接将请求转发给JSP或者静态页面 否则控制器将请求分发至具体Action类进行处理 在控制器调用具体Action的execute方法之前 ActionForm对象利用HTTP请求中的参数来填充自己 JavaBean Action一般只包含execute 方法 它负责执行相应的业务逻辑 如果需要 它也进行相应的数据检查 执行完成后 返回ActionForward对象 控制器通过该对象进行转发工作 可以把Action要处理的业务逻辑封装在JavaBean中 若系统中还有EJB 可以通过JavaBean调用EJB来完成业务处理 如果没有EJB 直接在JavaBean中连接数据库 进行数据库相关操作 27 6 配置struts应用 Struts架构包含有自定义的标签库 struts html 创建动态HTML用户界面或者表格struts bean 将JavaBean代码放在JSP页面 通过标签实现 struts logic 管理有条件地产生输出文本 遍历对象collections以重复产生输出文本 应用流控制 struts template 可以作为创建动态的JSP模板 这些页面都拥有一个公共的外观或者共同的格式 配置工具 JDK和Servlet容器XML解析器 JAXP1 1 JavaAPIforXML 以上的解析器JDBC2 0以上的包 28 struts体系结构中所使用的组件 29 核心组件 ActionServletActionServlet继承自javax servlet http HttpServlet类 在Struts体系结构中扮演的角色控制器 主要负责将HTTP的客户请求信息组装后 根据配置文件的指定描述 转发到适当的处理器 ActoinServlet必须在配置文件 web xml 中描述 当用户向服务器端提交请求的时候 实际上信息首先发送到ActionServlet 一旦控制器获得了请求 其就会将请求信息传交给一些辅助类处理 这些辅助类知道如何去处理与请求信息所对应的业务操作 在Struts中 这个辅助类就是org apache struts action Action 通常开发者需要自己继承Aciton类 从而实现自己的Action实例 在收到请求后 ActionServlet会 1 为这个请求选择适当的Action2 如果需要 创建Action的一个实例3 调用Action的execute 方法 30 核心组件 ActionClasses一个Action类的角色 就像客户请求动作和业务逻辑处理之间的一个适配器 Adaptor 其功能就是将请求与业务逻辑分开 这样的分离 使得客户请求和Action类之间可以有多个点对点的映射 而且Action类通常还提供了其它的辅助功能 比如 认证 authorization 日志 logging 和数据验证 validation execute 方法 31 核心组件 ActionMapping将特定请求映射到特定Action的相关信息存储在ActionMapping中 ActionServelt将ActionMapping传送到Action类的perform 方法 Action将使用ActionMapping的findForward 方法 此方法返回一个指定名称的ActionForward 这样Action就完成了本地转发 若没有找到具体的ActionForward 就返回一个null 方法publicExceptionConfigfindException Classtype 查找异常对象publicActionForwardfindForward Stringname 在映射中动态添加 32 核心组件 ActionFromBean一个应用系统的消息转移 或者说状态转移 的非持久性数据存储 是由ActionFormBean的负责保持的 ActionForm的主要功能就是为Action的操作提供与客户表单相映射的数据 如果在客户指定的情况下 还包括对数据进行校验 Action负责对系统数据状态的保持 而Action则负责根据业务逻辑的需要 对数据状态进行修改 在改变系统状态后 ActionForm则自动的回写新的数据状态并保持 典型的ActionFrombean只有属性的设置与读取方法 getXXX 而没有实现事务逻辑的方法 只有简单的输入检查逻辑 使用的目的是为了存储用户在相关表单中输入的最新数据 以便可以将同一网页进行再生 同时提供一组错误信息 这样就可以让用户修改不正确的输入数据 而真正对数据有效性进行检查的是Action类或适当的事务逻辑bean 33 对于客户请求 Struts体系结构在处理ActionForm的时候 一般需要经历如下几个步骤 检查Action的映射 确定Action中已经配置了对ActionForm的映射 根据name属性 查找formbean的配置信息 检查Action的formbean的使用范围 确定在此范围下 是否已经有此formbean的实例 假如当前范围下 已经存在了此formbean的实例 而是对当前请求来说 是同一种类型的话 那么就重用 否则 就重新构建一个formbean的实例 formbean的reset 方法备调用 调用对应的setter 方法 对状态属性赋值 如果validatede的属性被设置为true 那么就调用formbean的validate 方法 如果validate 方法没有返回任何错误 控制器将ActionForm作为参数 传给Action实例的execute 方法并执行 34 Struts config xml 全局转发全局转发用来在JSP页之间创建逻辑名称映射 转发都可以通过对调用操作映射的实例来获得 global forwards forwardname global path Welcome jsp global forwards ActionMappingActionMapping对象进行框架内部的流程控制 可将请求URL映射到Action类 并且将Action类与ActionFormbean相关联 ActionServlet在内部使用这些映射 将控制转移到特定Action类实例 所有Action类使用perform 方法实现特定应用程序代码 返回ActionForward对象 其中包括响应转发的目标资源名称 35 Struts config xml ActionFormbeanActionServlet使用ActionForm来保存请求的参数 这些bean的属性名称与HTTP请求参数中的名称相对应 控制器将请求参数传递到ActionFormbean的实例 然后将这个实例传送到Action类 完整的类路径 JDBC数据源用 data sources 元素可以定义多个数据源 data sources data sourceid DS1 key conPool type org apache struts util GenericDataSource set propertyid SP1 autoCommit true description ExampleDataSourceConfiguration driverClass org test mm mysql Driver maxCount 4 minCount 2 url jdbc mysql localhost test user struts password ghq123 data source data sources 36 7 Struts的标签 与框架组件进行交互 自定义标签库主要有以下几类 Struts html标签 用于创建动态HTML用户界面或者表格Struts bean标签 将JavaBean放到jsp页面中 提供了加强方式 Struts logic标签 管理有条件地产生输出文本 应用流控制 Struts template标签 作为页面创建动态JSP模板Tiles标签 用来创建tiles样式的页面 Nested标签 允许标签嵌套使用前要在web xml中声明 WEB INF struts bean tld WEB INF struts bean tld在JSP文件中使用 37 Html标签库 38 39 Bean标签库 40 Logic标签库 41 Helloapp实例开发 应用Struts框架开发步骤 分析应用项目的需求应用需求套用基于MVC模式的Struts框架创建视图组件 包括HTML表单 hello jsp 和ActionFormBean HelloForm java 创建ApplicationResource properties资源文件数据验证 包括表单验证和业务逻辑验证创建控制器组件 HelloAction java创建模型组件 PersonBean java创建存放被各个模块共享的常量数据常量的java文件 Constants java创建配置文件 web xml和struts config xml编译 发布和运行helloapp应用 42 Helloapp实例开发 分析应用项目的需求接受用户输入的姓名 然后返回字符串 Hello 如果用户没有输入姓名就提交表单 将返回出错信息 提示用户首先输入姓名 如果用户输入的姓名为 Monster 将返回出错信息 拒绝 Monster 打招呼 为了演示模型组件的功能 使用模型组件来保存用户输入的姓名 43 运用Struts框架模型 包括一个JavaBean组件PersonBeanuserName属性和get set方法 save 方法用于存储数据 例如到数据库 视图 包括一个JSP文件 Hello jsp提供用户界面 接收用户输入 视图还包括一个ActionFormBean存放表单数据 并进行表单验证 如果用户没有输入 则返回错误信息 控制器 包括一个Action类HelloAction业务逻辑验证 如果用户输入 Monster 返回错误信息调用模型组件PersonBean的save方法 保存用户的输入决定将合适的视图返回给用户 web xml和struts config xml配置 44 创建视图组件视图包括两个组件 一个JSP文件 hello jsp提供用户界面 能够接受用户输入 并显示结果给用户没有任何Java代码使用Struts标签没有直接提供文本内容 由资源文件给出创建消息资源文件一个ActionFormBean HelloFormBean当用户提交HTML表单后 Struts框架将自动把表单数据组装到ActionFormBean中 ActionFormBean中的属性和HTML表单中的字段一一对应 还提供数据严整方法 及把属性重新设置为默认值的方法 实质是JavaBean 多了两个方法 Validate 方法用于表单验证Reset 方法把属性重新设置为默认值 45 创建控制器组件 包括ActionServlet类和Action类ActionServlet类是Struts框架自带的 它是整个Struts框架的控制枢纽 通常不需要扩展 Struts框架提供了可以供扩展的Action类 它用来处理特定的HTTP请求 HelloActionAction类的工作机制Action是org apache struts action Action的子类 子类应该覆盖父类的execute 方法 当ActionFormBean类被创建 并且表单验证顺利通过后 Struts框架就会调用Action类的execute 方法 execute 方法包含以下参数 ActionMapping 包含Action配置信息 和struts config xml文件中对应ActionForm 包含用户表单数据 当Struts框架调用execute 方法时 ActionForm中的数据已经通过了表单验证 HttpServletRequest 当前请求对象HttpServletResponse 当前响应对象 46 创建控制器组件 包括ActionServlet类和Action类访问封装的本地化文本Action类的execute 方法首先获得MessageResources对象 MessageResourcesmessage getResource request 访问文本信息 Stringtitle message getResource hello jsp title 业务逻辑验证Struts框架会根据ActionForward对象包含的转发信息把请求转发到恰当的视图组件 视图组件通过标签把request范围内的ActionMessage对象中包含的错误信息显示出来 提示用户修改错误 47 创建控制器组件 包括ActionServlet类和Action类访问模型组件HelloActionHelloAction类创建模型组件PersonBean对象并调用它的saveToPersistentStore 方法来保存userName属性 PersonBeanpb newPersonBean pb setUserName userName pb saveToPersistentStore Action类可以完成的其他功能 从模型中读取数据 用于被视图组件显示 和多个模型组件交互 依据从模型中获得信息 决定返回哪个视图 向视图组件传递数据Action将数据存放在request或session范围内方便向视图组件传递数据 request setAttribute Constants PERSON KEY pb request removeAttribute mapping getAttribute 转发HTTP请求给合适的视图return mapping findForward SayHello 48 创建模型组件 PersonBean创建存放常量的Java文件 Constants java创建配置文件web xmlservlet配置 taglib配置struts config xml 49 部署 发布和运行在浏览器中运行http localhost 8084 helloapp 在表单中输入信息 Servlet容器在web xml文件中寻找属性为 do 的元素 action doServlet容器依据以上元素在web xml文件中寻找匹配的元素 actionorg apache struts action ActionServletServlet容器在web xml文件中寻找属性为 do 的元素 action do servlet mapping 50 部署 发布和运行Servlet容器把请求转发给以上元素指定的ActionServlet ActionServlet依据用户请求路径 HelloWorld 在Struts配置文件中检索path属性为 HelloWorld 的Action元素 ActionServlet根据元素的name属性 创建一个HelloForm对象 把客户提交的表单数据传给HelloForm对象 再把HelloForm对象保存在元素的scope属性指定的request范围内 51 由于元素的validate属性为true ActionServlet调用HelloForm对象的validate 方法执行表单验证 当文本框中不输入姓名的时候 vallidate 方法返回一个ActionErrors对象 里面包含一个ActionMessage对象 封装了错误消息 消息key及文本为 hello no username error PleaseenteraUserNametosayhelloto ActionServlet把HelloForm的validate 方法返回的ActionErrors对象保存在request内 然后根据元素的input属性 把客户请求转发给hello jsp hello jsp的标签从request范围内读取ActionErrors对象 在从ActionErrors对象中读取ActionMessage对象 将其显示在页面 文本框中输入姓名 Monster 的时候 vallidate 方法返回ActionErrors对象 ActionServlet查找HelloAction实例是否存在 如果不存在就创建一个实例 然后调用HelloAction的execute 方法 HelloAction的execute 方法先进行逻辑验证 如果没有通过逻辑验证 就创建一个ActionMessage对象 这个ActionMessage对象封装了错误消息 execute 方法把ActionMessage对象保存在ActionMessages对象中 再把ActionMessages对象存放在request范围内 最后返回一个ActionForward对象 该对象包含的请求转发路径为元素的input属性指定的hello jsp 52 部署 发布和运行当文本框中输入其他姓名的时候 vallidate 方法返回ActionErrors对象中不包含任何ActionMessage对象 表示表单验证成功 HelloAction的execute 方法进行逻辑验证 这次通过了验证 然后执行相关的业务逻辑 最后调用ActionMapping findForward 方法 参数为 SayHello return mapping findForward SayHello ActionMapping findForward 方法从元素中寻找name属性为 SayHello 的子元素 然后返回与之对应的ActionForward对象 它代表的请求转发路径为 hello jsp HelloAction的execute 方法把ActionForward对象返回给ActionServlet ActionServlet再把客户请求转发给index jsp index jsp的标签从ResourceBundle中读取文本 把它们输出到网页上 最后生成动态网页 53 8 JavaServerFace 概述是Sun公司J2EE标准指定的Web应用框架 适应RAD RapidApplicationDevelopment 快速应用开发 化的社会 通过将丰富的 强大的UI组件 如文本框 列表框 分页面板和数据网格等 的支持引入Web开发领域 使得Web开发更加容易 JSF定义了 基础组件架构 定义了一种通用方式来建立UI部件 此架构能驱动标准的JSFUI组件 按钮 超链接 复选框 文本框等 也为第三方组件留出了空间 标准的UI部件 widget 集应用基础设施 JSF和桌面UI框架 如Swing或者SWT 之间的不同之处在于 JSF运行在服务器上 运行在标准JavaWeb容器中 再向客户显示HTML或者其他标记语言 54 8 JavaServerFace 55 8 JavaServerFace 幕后的技术HTTP 无状态 协议 解决 cookie和URL重写 Servlet 使用session JSP本质也是Servlet JSF应用具有UI组件 和后台bean相关联 产生应用逻辑所使用的事件 Faces使用ServletAPI作为其底层设施 应用开发人员可工作在更高的抽象层次 开发Web应用而无需过多关心HTTP或者ServletAPI自身的特定之处 Portlet 门户组件大多数Web应用都需要从数据存储中 通常是从数据库获得动态数据 portlet规范定义了PortletAPI 像ServletAPI一样 它定义了大量的底层细节 但是并没有简化UI开发或者屏蔽掉HTTP 56 8 JavaServerFace 幕
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 压力安全阀校验员培训课件
- 古县2025山西临汾市古县招聘事业单位人员31人笔试历年参考题库附带答案详解
- 南京市2025南京医科大学卫生分析检测中心招聘56人笔试历年参考题库附带答案详解
- 商品收纳师培训课件
- 2025长三角(宣城)产业投资有限公司招聘4人(安徽)笔试参考题库附带答案详解
- 卸车安全培训课件
- 2025河北唐山政务服务外包有限公司为服务项目招聘66人笔试参考题库附带答案详解
- 2025昆明渝润水务有限公司招聘15人笔试参考题库附带答案详解
- 2025年数字安徽有限责任公司所属企业社会招聘13人笔试参考题库附带答案详解
- 2025山东济南二机床集团(平阴)产业园有限公司招聘9人笔试参考题库附带答案详解
- 安静与智慧主题班会课件
- 家政服务企业社会责任报告样本
- 2025年汽车驾驶员(技师)考试试题及答案(含答案)
- 高血压护理查房ppt
- 全关节镜下FiberTape治疗后交叉韧带胫骨止点撕脱骨折课件
- 有限元和有限差分法基础超详细版本
- 《临建布置方案》word版
- 疑似预防接种异常反应(AEFI)监测与处理PPT课件
- 某某某污水处理厂施工组织设计
- (完整)地面硬化施工合同
- 幼儿园初级保育员全真模拟考试试卷C卷含答案
评论
0/150
提交评论