版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,Struts,Sunny Liu weiliu_,内 容,Struts 简介 Struts 控制器组件 Struts 视图组件 Validator 验证框架 Struts 标签库 Struts 的国际化,JSP Model2回顾,Struts实现的MVC机制,Struts实现的MVC机制,视图(View) 视图就是一组JSP文件和其它表示层组件,在这些组件中没有业务逻辑,也没有模型信息,只有标签,这些标签可以是标准的JSP标签或客户化标签,如:Struts标签库中标签。 通常把Struts框架中的ActionForm Bean也划分在视图中。,Struts实现的MVC机制,视图(View),
2、Struts实现的MVC机制,控制器(Controller) 控制器由ActionServlet类和Action类来实现。 ActionServlet主要负责接受请求,根据配置文件struts-config.xml的配置信息,把请求转发给适当的Action对象。 Action类负责调用模型的业务方法,更新模型的状态,并帮助控制应用程序的流程。,Struts实现的MVC机制,控制器(Controller),Struts实现的MVC机制,模型(Model) 模型表示应用程序的状态和业务逻辑。对于大型应用,业务逻辑通常由Java Bean或EJB组件来实现。,Struts实现的MVC机制,模型(Mo
3、del), 应用程序数据 .,交互,Struts的工作流程,接受客户请求,检索匹配的ActionMapping对象。 创建ActionForm对象,保存并验证数据。 根据ActionMapping实例调用Action对象。 Action对象调用相应的模型组件,返回ActionForward对象。 ActionForward对象指向的jsp组件生成动态页面,响应给客户。,Struts的工组流程,开发简单的Struts应用,任务场景 需要一个普通用户登入的WEB应用,并检查用户名与密码是否为“user”。另外,“admin”用户不得从此入口登录。,开发简单的Struts应用,解题思路 步骤1:确定
4、视图组件 JSP、ActionFormBean 步骤2:确定控制器组件 ActionBean 步骤3:确定模型组件 JavaBean 步骤4:创建配置文件 struts-config.xml 步骤6:结果验证,开发简单的Struts应用,确定视图组件ActionFormBean,public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) ActionErrors errors=new ActionErrors(); if(userName=null | userName.length()1) e
5、rrors.add(userName,new ActionError(jsp.error.userName); if(userPassword=null |userPassword.length()1) errors.add(userPassword,new ActionError(jsp.error.userPassword); return errors; ,开发简单的Struts应用,确定控制器组件ActionBean,public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletReques
6、t request, HttpServletResponse response) LoginForm loginForm = (LoginForm) form; LoginBean obj=new LoginBean(); if(obj.login() return (mapping.findForward(success); return (mapping.findForward(error);,开发简单的Struts应用,确定模型组件JavaBean,public boolean login() if ( this.userName.equalsIgnoreCase(user) ,开发简单
7、的Struts应用,创建配置文件struts-config.xml, ,开发简单的Struts应用,结果验证,验证,登录成功。 转到成功页面。,回到登录入口。提示错误消息。,Struts控制器机制,Struts中的控制器组件 ActionServlet组件 Action组件,Struts控制器机制,控制器层的生命周期,Struts控制器机制,各组件的控制机制 控制器组件主要完成任务 接受用户请求。 根据用户请求,调用合适的模型组件来执行相应的业务逻辑。 获取业务逻辑执行结果。 根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户。,Struts控制器机制,ActionServlet的
8、init()方法的时序图 初始化过程,ActionServlet组件,各组件的控制机制 ActionServlet类 ActionServlet的process()方法,protected void process(HttpServletRequest request, HttpServeltResponse response) throws IOException, ServletException ModuleUtils.getInstance().selectModule(request, getServletContext(); getRequestProcessor(getModul
9、eConfig(request).process(request, response); ,ActionServlet组件,各组件的控制机制 ActionServlet类 扩展ActionServlet类,Action组件,各组件的控制机制 Action类 Action类缓存 为了确保线程安全(thread-safe),在一个应用的生命周期中,Struts框架只会为每一个Action类创建一个Action实例,各组件的控制机制 Action类 ActionForward类,Action组件,各组件的控制机制 Action类 创建支持多线程的Action类,Action组件,各组件的控制机制 A
10、ction类 Action类的安全,Action组件,内置的Struts Action类的使用,Struts中常用的Action类 org.apache.struts.action.ForwardAction org.apache.struts.action.IncludeAction org.apache.struts.action.DispatchAction org.apache.struts.action.LookupDispatchAction org.apache.struts.action.SwitchAction,Struts中常用的Action类 org.apache.str
11、uts.action.ForwardAction,内置的Struts Action类的使用,Struts中常用的Action类 org.apache.struts.action.IncludeAction, ,内置的Struts Action类的使用,Struts中常用的Action类 org.apache.struts.action.DispatchAction,内置的Struts Action类的使用,Struts中常用的Action类 org.apache.struts.action.LookupDispatchAction,内置的Struts Action类的使用,Struts中常用的
12、Action类 org.apache.struts.action.SwitchAction SwitchAction类用于子应用模块之间的切换, ,内置的Struts Action类的使用,利用Token解决表单重复提交,org.apache.struts.action.Action类中提供了一系列和Token相关的方法: protented boolean isTokenValid(javax.servlet.HttpServletRequestRrequest) protented void resetToken(javax.servlet.HttpServletRequestRreque
13、st) protented void saveToken(javax.servlet.HttpServletRequestRrequest),任务场景 BookStoressh是一家网上在线购书的网站,该网站需要用户填入UserName和Password才能登录该网站进行各种各样的购书活动。但在此之前,没有注册的用户要在该网站上进行注册,才能进行登录。 因此,BookBookStoressh要有个注册功能。,利用Token解决表单重复提交,解题思路 步骤1:确定JSP页面及其相关信息。 步骤2:确定PrepareInsertAction类。 步骤3:确定insertAction类。 步骤4:配
14、置Struts配置文件。 步骤5:配置Web应用文件。 步骤6:保存、运行。,利用Token解决表单重复提交,确定PrepareRegisterAction类 execute()方法,public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception saveToken(request); return mapping.findForward(prepare ); ,利用Tok
15、en解决表单重复提交,确定RegisterAction类 execute()方法,利用Token解决表单重复提交,public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception ActionErrors errors = new ActionErrors(); if(!isTokenValid(request) errors.add(regForm, new ActionM
16、essage(error.invlid.token); saveErrors(request, errors); saveToken(request); return (new ActionForward(mapping.getInput(); else resetToken(request); ,利用Token解决表单重复提交,任务小结 通过在网页的表单中生成一个包含Token信息的隐藏字段来解决重复提交表单的问题。 采用Token来解决表单重复提交的问题要注意Action类的子类与页面之间的转发关系。,利用Token解决表单重复提交,视图概述,视图负责为客户提供可交互的网页内容。 视图就是
17、为了在交互时获得数据并发送数据,它不包含任何事务逻辑。 视图中不包含任何代码,只有标签。这些标签可以是HTML/JSP标准标签或者是客户化标签。 视图是模型的外在表现,同一模型可以有多种视图。,在Struts框架中,视图的组件: JSP页面 JSP标签库 ActionForm Bean 消息资源包(Resource Bundle) HTML JavaScript和样式表(stylesheet) 多媒体文件,视图概述,视图中JavaBean的使用,Struts应用中JavaBean应该遵守的规范 JavaBean中所有的属性都要提供get/set方法。特别地,数组类型的属性应该提供getXXX(
18、int Index)和setXXX(int Index, Element value) 必须提供不带参数的构造方法,数据传输对象(DTO: Data Transfer Object) DTO用于在不同层之间传递数据 使用DTO的优点 减少数据冗余,提高传输效率 层次之间独立,各层分工明确,视图中JavaBean的使用,Struts提供的DTO:ActionForm Bean Struts框架中提供了名为ActionForm的DTO,它主要用于视图层与控制层之间传递的HTML表单数据。同时,它还提供了表单数据验证的功能,可以初步过滤掉一些非法数据。,视图中JavaBean的使用,各层之间通过DT
19、O的数据传递(如下图),视图中JavaBean的使用,ActionForm的使用,ActionForm的生命周期 两种存在范围 Request 仅在当前的请求/响应生命周期中有效 Session 在整个HTTP会话中有效,Request和Session存在范围的图示,ActionForm的使用,任务一:如何使用ActionForm 任务场景: BookStoressh的网上在线购书系统,需要用户登录后才能进行各种购书活动,因此有个登录表单,用户通过UserName和Password进行登录。,ActionForm的使用,解题思路 步骤1:创建ActionForm子类。 步骤2:创建JSP页面。
20、 步骤3:创建Action子类。 步骤4:配置消息资源文件。 步骤5:配置ActionForm。 步骤6:配置Web应用文件。 步骤7:保存、部署。,ActionForm的使用,创建ActionForm Struts框架中ActionForm是一个抽象类。 HTML表单中的字段要与ActionForm的属性一一对应。 根据对应的登录表单,创建子类LoginForm 子类LoginForm的属性 属性的get/set方法 子类LoginForm的validate()方法 子类LoginForm的reset()方法,ActionForm的使用,ActionForm类中的validate()方法 控
21、制器调用validate()的条件 配置相应的映射 元素的name属性和元素的name属性匹配。 元素的validate属性为true validate()主要负责检查数据的格式和语法,ActionForm的使用,在LoginForm中的validate()方法,public class LoginForm extends ActionForm public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) ActionErrors errors = new ActionErrors(); if(g
22、etUserName() = null | getUserName().length() 1) errors.add(logError , new ActionError(bookStoressh.login.blank.username ); return errors; ,ActionForm的使用,if(getPassword() = null | getPassword().length() 1) errors.add(logError , new ActionError(bookStoressh.login.blank.password); return errors; return
23、 errors; ,ActionForm的使用,ActionForm类中的reset()方法 reset()方法用于恢复ActionForm属性的默认值。 在不同存在范围对reset()方法的使用,ActionForm的使用,配置ActionForm Struts-config.xml配置文件 元素 元素 元素,ActionForm的使用,对LoginForm的配置,在Struts配置文件中配置元素 ,ActionForm的使用,对LoginForm的配置,在Struts配置文件中配置元素时要注意name属性 ,ActionForm的使用,访问ActionForm,String userNam
24、e = (String)(LoginForm)form).getUsername(); String userPassword = (String)(LoginForm)form).getPassword();,ActionForm的使用,多表单跨页处理,多表单跨页处理 表单拆分到多个JSP页面 多表单对应的ActionForm ActionForm和多个Action映射,注释:在HTML表单中定义隐藏字段,用来标识当前页面。 例如: ,任务二:如何处理多表单跨页 任务场景: BookStoressh是一家网上在线购书的网站,该网站需要用户填入UserName和Password才能登录该网站进
25、行各种各样的购书活动。但在此之前,没有注册的用户要在该网站上进行注册,才能进行登录。因此,BookStoressh要有个注册功能。用户注册需要填写UserName、Password、Confirm Password和Email,并且要分页进行填写。,多表单跨页处理,解题思路 步骤1:确定要拆分的表单。 步骤2:确定拆分表单所对应的JSP页面。 步骤3:确定HTML表单与ActionForm之间的对应。 步骤4:配置ActionForm与Action的映射。 步骤5:保存、运行。,多表单跨页处理,多表单跨页处理,拆分表单 表单转发关系图,多表单跨页处理,HTML表单与ActionForm之间的对
26、应,insertContent.jsp中表单代码: insertContent_next.jsp中表单代码 ,多表单跨页处理,创建RegisterForm类要注意的要点: 提供和HTML表单的隐藏字段page对应的page属性 reset()方法只能把和当前正在处理的表单相关属性恢复为默认值 validate()方法仅对和当前表单相关的属性进行验证,多表单跨页处理,配置ActionForm与Action的映射, ,多表单跨页处理, ,动态ActionForm,动态ActionForm 历史背景 DynaActionForm的引入 DynaActionForm类是ActionForm类的子类。由
27、它实现了动态ActionForm。 动态ActionForm的reset()方法 DynaActionForm类中的initialize()方法 DynaActionForm类中的reset()方法,动态ActionForm,动态ActionForm 配置动态ActionForm, ,动态ActionForm,动态ActionForm 动态ActionForm的方法 DynaActionForm类中的initialize()方法 DynaActionForm类中的reset()方法,动态ActionForm,public void initialize(ActionMapping mappin
28、g) String name = mapping.getName(); if(name = null) return; FormBeanConfig config = mapping.getModuleConfig().findFormBeanConfig(name);,动态ActionForm,if(config = null) return; FormPropertyConfig props = config.findFormPropertyConfigs(); for(int i = 0; i props.length; i+) set(propsi.getName(), propsi.
29、initial); ,动态ActionForm,public void reset(ActionMapping mapping, HttpServletRequest request) initialize(mapping); ,动态ActionForm,访问动态ActionForm,public Object get(String name) public void set(String name, Object value),动态ActionForm,动态ActionForm 动态ActionForm的表单验证 DynaActionForm的validate()方法 Validate框架
30、配置动态ActionForm,Validator验证框架,回顾ActionForm的表单验证,控件收到视图组件发送的 HTTP 请求,创建 ActionForm 类,使用 ActionForm 的 reset() 方法重置 布尔值和字符串值,存储 ActionForm 类和所需的作用域参数,使用 validate() 方法验证 ActionForm 的对象,使用 HTTP 请求的值填充 ActionForm 类,Validator验证框架,Validator验证框架,. public ActionErrors validate(ActionMapping actionMapping, Http
31、ServletRequest httpServletRequest) ActionErrors errors=new ActionErrors(); if(userName=null)|(userName.equals() errors.add(ActionErrors.GLOBAL_MESSAGE,new ActionError(); return errors; .,Validator验证框架,必须通过程序代码来实现验证逻辑。 系统中包含相同的验证逻辑的时候,进行重复编程来完成相同的验证逻辑,降低了代码的可重用性。 基于以上缺点我们将利用Validator框架来为Str
32、uts应用灵活地配置验证规则,它具有灵活性、可插性等特性。,Validator验证框架,Validator验证框架控件 Validator框架由 David Winterfeldt创建 Validator框架具有可重用性、支持可插性等性质 Validator框架主要依赖的JAR文件: Jakarta-oro.jar:提供一组文本处理类,具有文本替换、过滤和分割等功能。 Commons-validator.jar:提供一个简单、可扩展的验证框架,包括通用的验证方法和验证规则。,Validator验证框架,Validator校验类 Validator校验类 :执行一个验证规则时Validator框
33、架调用的一个Java类。 Validator框架的Validator校验类本身提供了14种默认的校验规则如:email的isEmail(String) 校验该校验值是否为一个合法的E-mail,Validator验证框架,Validator配置文件 Validator框架用来配置验证规则的基于XML的两个文件(validator-rules.xml validator.xml)。 validator-rules.xml:通用校验规则配置文件,用来定义程序中可以使用的校验规则。 validator.xml:具体的校验配置文件,为具体的应用中的ActionForm配置所需的验证规则。,Valida
34、tor验证框架,资源配置文件:针对页面的显示内容和必需的报错信息而提供的资源文件。 JSP标签库:用于读取资源配置文件中的报错信息,并将其显示出来。,Validator验证框架,为了在Struts框架中使用Validator,可以采用插制把Validator加入到框架中,这需要在Struts配置文配置ValidatorPLugIn插件,代码如下:, ,Validator框架和ActionForm,Validator框架不能验证标准的ActionForm类,因此如要使用Validator框架,应采用ActionForm类的两个子类: ActionForm: DynaValidatorForm(支
35、持在动态ActionForm使用 Validator框架) ValidatorForm (支持在标准ActionForm使用Validator框架),Validator框架和ActionForm,ActionForm类及其子类的类框图如下:,在Struts中应用Validator框架,在Struts中使用Validator的步骤: 创建进行检验的ActionForm类 在Struts配置文件中配置和元素 把Validator框架使用的消息文本添加到应用的Resource Bundle中 在Validator.xml文件中为表单配置验证规则 在Struts配置文件中配置ValidatorPLug
36、In插件,在Struts中应用Validator框架,任务场景 BookStoressh的网上在线购书系统,需要用户注册后才能成为会员进行购买活动,因此需要一个注册网页作为入口,方便在线注册。为了便于系统以后升级你所在的项目组决定使用Validator验证框架来验证用户所输入的数据。,在Struts中应用Validator框架,客户要求如下: 姓名必须输入 密码必须大于6位字符且小于12位字符 年龄必须大于18小于30 填写的电子邮箱必须为正确的邮箱地址,在Struts中应用Validator框架,解题思路 步骤1:确定进行检验的ActionForm类 步骤2:在Struts配置文件中配置和元
37、素 步骤3:添加消息文本到应用的Resource Bundle 步骤4:在validation.xml文件中配置表单验证规则 步骤5:在Struts配置文件配置ValidatorPlugIn插件,在Struts中应用Validator框架,创建ActionForm类,public class CheckForm extends ValidatorForm private String userName; public String getUserName() return userName; ,在Struts中应用Validator框架,配置和元素, ,Struts中应用Validator框架
38、示例,配置和元素(续), ,在Struts中应用Validator框架,消息文本,#报错提示信息 errors.email=0不是正确的email地址 errors.maxlength=0必须小于12位的字符 errors.minlength=0必须大于6位的字符 errors.range=0必须大于1小于2 errors.required=0必须输入,在Struts中应用Validator框架,在Validation.xml中配置表单验证规则, mask $numericchar maxlength 12 minlength 6 ,创建自定义校验规则,任务场景 开发小组对BookStores
39、sh的网上在线购书系统的注册功能进行人性化设计:用户在填写密码长度不是正确长度的密码时,希望知道密码的准确要求长度。为了减少服务器负担,需要使用JavaScript在客服端进行表单验证。,创建自定义校验规则,解题思路: 创建包含验证方法的Java类(Validator校验类 ) 编辑validator-rules.xml文件或者另外创建验证规则配置文件 在Validation.xml文件中使用新创建的验证规则,创建自定义校验规则,创建包含验证方法的Java类,public class NewValidator1 implements Serializable public static boo
40、lean validateMinMaxLength( Object bean, ValidatorAction va, Field field, ActionErrors errors, HttpServletRequest request) String value = null; if (field.getProperty() != null ,创建自定义校验规则,编辑validator-rules.xml文件添加新的验证规则, ,创建自定义校验规则,在Validation.xml文件中使用新创建的验证规则, mask $numericchar maxlength 12 minlength
41、 6 ,在Validator框架中使用JavaScript,Validator框架进行浏览器客户端验证步骤如下: 在validator-rules.xml文件的元素中配置元素 在JSP页面中包含标签: (fromName属性指定要要验证的表单的名字),在Validator框架中使用JavaScript,对需要验证的表单,定义onsubmit事件:,Validator框架的国际化,Validator框架提供了I18N国际化支持,配置文件validator.xml的元素包含了language和country属性,可以用来设置语言和国家。,Struts 标签库,标签库的构件 标签处理程序类 标签库描
42、述符(TLD) 标签库指示,Struts 标签库,标签处理程序类 标签处理程序类包含标签要执行的代码,在程序运行时来提供标签的功能。每一个标签程序处理类代表一个标签。JSP引擎在解析标签的时,会利用标签描述符(TLD)来得到对应的标签库处理程序类。,Struts 标签库,标签库描述符(TLD) 标签库描述符是一个包含标签信息的XML文件。它描述标签库,并将其与标签处理程序类关联起来,该文档以.tld为扩展名,文件名为标签处理程序的文件名。,Struts 标签库,标签库指示 标签库指示又称做为taglib指示 ,在每个使用标签库的JSP页面中,标签库指示是必须的。taglib指示的uri属性是标
43、签库的定义属性,用来指示标签库 。,Struts HTML标签库,Struts HTML标签可以和标准的HTML元素完成相同功能其定义了许多标签,大体可以分为以下几类: 用于生成基本的HTML元素的标签 用于生成HTML表单的标签 显示错误或正常消息的标签,Struts HTML标签库,用于生成基本的HTML元素的标签 标签 标签 标签 标签 标签,Struts HTML标签库,生成基本的HTML元素的标签的描述,Struts HTML标签库,标签 用于在网页的开头生成HTML的元素。 标签有一个lang属性,用于显示用户使用的语言。如: 当客户浏览器使用中文语言,那么以上代码在运行时将被解析
44、为普通的HTML代码: ,Struts HTML标签库,标签 标签用于生成HTML元素。标签的属性: forward:指定全局转发链接 href:指定完整的URL链接 page:指定相对于当前网页的URL 标签 标签一般和标签一起使用,用于输出超链接中URI部分。,Struts HTML标签库,标签 用于在HTML页中嵌入图片。此外,它还允许包含请求变量,以便态控制图片的输出。如: 标签的page属性指定相对于当前页面的URI,以上代码生成如下的HTML内容: ,Struts HTML标签库,标签 在网页的部分生成HTML元素,而HTML元素用于生成当前网页的绝对URL路径。 如果在网页中使用
45、了标签,当该网页引用同一个应用的其他网页时,只需给出相对于当前网页的相对URL路径即可。,Struts HTML标签库,用于生成HTML表单的标签 标签 标签 标签 标签 标签 标签,Struts HTML标签库,用于生成HTML表单的标签的描述,Struts HTML标签库,标签 在Struts应用中,用标签创建表单 如: 以上代码生成如下的内容: 标签的action属性用来指定当用户提 交表单后,处理用户请求的组件。,标签 在表单上创建HTML文本框字段。 如: 标签的property属性指定字段的名字,它和ActionForm Bean中的一个属性匹配。 标签 在表单上生成隐藏字段 。如
46、: ,Struts HTML标签库,标签 标签用于生成表单的提交按钮。如: Submit 以上代码生成如下的HTML内容: ,Struts HTML标签库,标签 标签在表单中生成取消按钮。如: Cancel 以上代码生成如下HTML内容: ,Struts HTML标签库,标签 标签生成表单的复位按钮。使用方法如下:Reset 以上代码生成如下HTML内容: ,Struts HTML标签库,检查框和单选按钮标签 用于生成检查框和单选按钮标签的描述,Struts HTML标签库,标签 在表单上生成标准的HTML检查框。有两种可选值true和false。使用方法如下: 以上代码生成的HTML内容如下
47、: ,Struts HTML标签库,标签 它和标签一样,区别在于标签可以生成复选框,且和ActionForm Bean的关联方式不一样。使用方法如下:,private String strArray = new String0; public String getStrArray() return(this.strArray); public void setStrArray(String strArray) this.strArray = strArray; ,Struts HTML标签库, ,标签 标签提供HTML元素,表示单选按钮,多个标签可以成组使用。使用方法: 它们生成的HTML内容
48、如下:, ,Struts HTML标签库,下拉列表和多选标签 ,Struts HTML标签库,用于生成下拉列表和多选标签的描述,Struts HTML标签库,标签 标签用来生成HTML元素,在表单上创建下拉列表或多选列表。 标签 标签生成HTML元素。这个标签被嵌套在标签中,代表列表的一个可选项。,Struts HTML标签库,标签 标签提供一组HTML元素,在元素中可以包含多个元素。 标签 标签用于文件上传。 标签与标签 与 标签都用于输出消息。,Struts HTML标签库,Struts Bean标签库,Struts Bean标签库 Struts Bean标签库中的标签用来访问已经存在的JavaBean以及它们的属性,还可以定义新的Bean,把它存放在page范围内或者用户指定的范围内,供网页内其他元素访问。,Struts Bean标签
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人护理志愿者培训
- 2024-2025学年度执业药师模拟题库(各地真题)附答案详解
- T-4-1、2杂环化合物和生物碱
- 儿科护理中的沟通技巧与家属教育
- 2026年LinkedIn技能趋势报告AI工程运营效率成为增长最快技能
- 门急诊急危重症患者护理
- 2026年天津高考物理二轮复习讲练测重难02 力与直线运动(重难专练)(解析版)
- 建筑行业钢结构施工质量验收规范手册
- 2024-2025学年度收银审核员试题预测试卷含完整答案详解(全优)
- 2024-2025学年度烟草职业技能鉴定题库检测试题打印附参考答案详解(满分必刷)
- 北斗手持机操作教案
- 新概念英语青少版入门级A-unit1-hello课件
- 侧面碰撞保护-动态性能要求(FMVSS 214)
- 互联网+大赛路演PPT制作
- DB32∕T 3916-2020 建筑地基基础检测规程
- 更换风口操作规程
- SMED快速换模教程
- 2023年安徽省检察机关招聘聘用制书记员623人笔试备考题库及答案解析
- 汇川IS620系列伺服应用案例7一伺服非标应用
- GB/T 14692-2008技术制图投影法
- 机械制造技术基础 第2章
评论
0/150
提交评论