




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五讲 struts 学习一. struts基本知识介绍struts最早是作为apache jakarta项目的组成部分问世运做的。项目的创立者希望通过对该项目的研究,改进和提高java server pages (jsps)、servlet、标签库以及面向对象的技术水准。它的目的是为了帮助你减少在运用mvc设计模型来开发web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用servlets和jsp的优点来建立可扩展的应用,struts是一个不错的选择。1. mvc框架介绍mvc即model-view-controller的缩写,是一种常用的设计模式。mvc 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。 model(模型)模型包含应用程序的核心功能(应用对象)。模型封装了应用程序的状态。有时它包含的唯一功能就是状态。它对视图或控制器一无所知。 view(视图)视图提供模型的表示(它在屏幕上的表示)。它是应用程序的外观。视图可以访问模型的读方法(get),但不能访问写方法(set)。此外,它对控制器一无所知。当更改模型时,视图应得到通知。 controller(控制器)控制器对用户的输入作出反应(定义用户界面对用户输入的响应方式)。它创建并设置模型。 通常mvc框架的结构如下图:mvc框架可是,web 应用向软件开发人员提出了一些特有的挑战,最明显的就是客户机和服务器通过http协议连接,而由于http的无状态连接,使得控制器不能将应用程序的改变通知视窗。为了发现对应用程序状态的修改,浏览器必须重新查询服务器。所以,对于 web,需要修改标准的 mvc 形式。struts 的体系结构实现了model-view-controller设计模式的概念,它将这些概念映射到web应用程序的组件和概念中。形成了开发web应用的过程中最常用的框架:模型视窗控制器(mvc)框架。下图显示了 mvc 的 web 改写版,通常也称为 mvc model 2 或 mvc 2。mvc model 2框架(模式2体系架)2. struts框架介绍struts 是mvc的一种实现,它将 servlet和 jsp 标记(属于 j2ee 规范)用作实现的一部分。struts继承了mvc的各项特性,并根据j2ee的特点,做了相应的变化与扩展。一个前端控制组件(struts jsp tablib),一系列动作类(action),动作映射(action mapping),服务器端java bean 的自动填充(formbean),支持验证的web 表单,国际化支持(资源文件),组成了struts的主要内容。下面是struts 1.1中的mvc实现示意图:mvc实现示意图 控制:通过图,大家可以看到有一个xml文件struts-config.xml,与之相关联的是controller,在struts中,承担mvc中controller角色的是一个servlet,叫actionservlet。actionservlet是一个通用的控制组件。这个控制组件提供了处理所有发送到struts的http请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是action类的子类)。另外控制组件也负责用相应的请求参数填充 action from(通常称之为frombean),并传给动作类(通常称之为actionbean)。动作类实现核心商业逻辑,它可以访问java bean 或调用ejb。最后动作类把控制权传给后续的jsp 文件,后者生成视图。所有这些控制逻辑利用struts-config.xml文件来配置。 视图:主要由jsp生成页面完成视图,struts提供丰富的jsp 标签库: html,bean,logic,template等,这有利于分开表现逻辑和程序逻辑。有关标签库的知识我们将在后面进一步学习。 模型:模型以一个或多个java bean的形式存在。这些bean分为三类:action form、action、javabean or ejb。action form通常称之为formbean,封装了来自于client的用户请求信息,如表单信息。action通常称之为actionbean,获取从actionsevlet传来的formbean,取出formbean中的相关信息,并做出相关的处理,一般是调用java bean或ejb等。 流程:在struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向actionsevlet,actionsevlet根据struts-config.xml中的配置信息,将用户请求封装成一个指定名称的formbean,并将此formbean传至指定名称的actionbean,由actionbean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的formbean名称和actionbean名称,这些在struts-config.xml中配置。下图给出了客户端从发出请求到获得响应整个过程的图解说明:客户端从发出请求到获得响应整个过程的图解说明二 struts 程序结构1. struts主要组件组件列表:组件角色actionservlet控制器action 包含事务逻辑actionform显示模块数据actionmapping帮助控制器将请求映射到操作actionforward用来指示操作转移地对象actionerror、actionerrors用来存储和回收错误struts标签库可以减轻开发显示层次的工作 actionservlet类 框架中的控制器组件是有org.apache.struts.action.actionservlet类实现的,这个类是javax.servlet.http.httpservlet类的扩展。struts controller基本功能是: 截获用户的http请求。 把这个请求映射到相应的action类,如果这是此类收到的第一个请求,将初始化实例并缓寸。 创建或发现一个actionform bean实例(看配置文件是否定义),然后将请求过程移植到formbean(填充formbean)。 调用action实例的execute()方法并将actioform bean,action mapping对象,request和response对象传给它。 perform返回一个actionforword对象,此对象连接到相应的jsp页面. action 类action类真正实现应用程序的事务逻辑,它们负责处理请求。action 类是业务逻辑的一个包装。action 类的用途是将 httpservletrequest 转换为业务逻辑。要使用 action,请创建它的子类并覆盖 execute () 方法。如:public actionforword execute (actionmapping mapping,actionform form,httpservletrequest request,httpservletresponse response) actionform类对于actionform你可以从以下几个方面来理解它: actionform表示http窗体中的数据,可以将其看作是模型和视图的中介,它负责保存视图中的数据供模型或者视图使用。struts 1.1文档中把它比作http和action之间的防火墙,这体现了actionform具有的过滤保护的作用,只有通过actionform验证的数据才能够发送到action处理。 actionform是与一个或多个actionconfig关联的javabean,在相应的action的execute方法被调用之前,actionform会自动利用请求参数来填充自己(初始化属性)。 actionform是一个抽象类,你必须通过继承来实现自己的类。 actionform首先利用属性的getter和setter方法来实现初始化,初始化完毕后,actionform的validate方法被调用,你可以在其中来检查请求参数的正确性和有效性,并且可以将错误信息以actionerrors的形式返回到输入窗体。否则,actionform将被作为参数传给action的execute方法以供使用。actionform bean的生命周期可以设置为session(缺省)和request,当设置为session时,记得在reset方法中将所有的属性重新设置为初始值。 actionmapping类 actionmapping继承于org.apache.struts.config.actionconfig ,将特定请求映射到特定action的相关信息存储在actionmapping中,actionservelt将actionmapping传送到action类的execute()方法,action将使用actionmapping的findforward()方法,此方法返回一个指定名称的actionforward,这样action就完成了本地转发。若没有找到具体的actionforward,就返回一个null.actionmapping的方法: public exceptionconfig findexception(class type)-查找异常对象 public actionforward findforward(string name)-可在映射中动态添加actionforward: public string findforwards()-找到一个action可以使用的actionforward列表 public actionforward getinputforward() -得到本action的输入actionforard actionforward类actionforward类继承了org.apache.struts.config.forwardconfig。actionforward 目的是控制器将action类的处理结果转发至目的地。action类获得actionforward实例的句柄,然后可用两种方法返回到actionservlet,actionmapping实例被传送到execute()方法,使用actionmapping的findforward(string name)根据名称获取一个全局转发或本地转发。 actionerror、actionerrors类他们都是包含在org.apache.struts.action包里。用actionerror生成新的错误,把所有的错误储存在一个类似arraylist的actionerrors对象里。最后动态生成actionforward对象,以返回原页面。2 struts配置文件struts-config.xmlstruts-config.xml 主要框架: .path :http请求中虚拟目录的相对路径,用于识别这个动作映射。type :类名,将用于在处理这个请求的时候建立一个请求处理器实例。name :javabean的逻辑名称,也叫做表单bean,将用于保存表单数据。表单bean将用这个名称保存在指定的范围(scope)中。scope :保存bean时用请求或会话范围。.3. web配置文件web.xml设置应用程序最后的步骤是配置应用程序展开描述符(保存在文件web-inf/web.xml中)以包括所有必需的struts组件。作为一个指南使用例子程序的展开描述符,我们看到下面的条目需要被创建或修改。一、配置action servlet实例controller servlet支持的初始化参数在下面描述,拷贝自 actionservlet 类的 javadocs 。方括号描述如果你没有为那个初始化参数提供一个值时假设的缺省值。 application - 应用程序资源包基类的java类名。none. config - 包含配置信息的xml资源的上下文相关的路径。/web-inf/action.xml debug - 这个servlet的调试级别,它控制记录多少信息到日志中。0 digester - 我们在 initmapping() 中利用的digester的调试级别,它记录到system.out而不是servlet的日志中。0 forward - 使用的actionforward实现的java类名。org.apache.struts.action.actionforward mapping - 使用的actionmapping实现的java类名。org.apache.struts.action.actionmappingbase nocache - 如果设置为 true,增加http头信息到所有响应中使浏览器对于生成或重定向到的任何响应不做缓冲。false null - 如果设置为 true,设置应用程序资源使得如果未知的消息关键字被使用则返回 null。否则,一个包括不欢迎的消息关键字的出错消息将被返回。true二、配置action servlet映射有两种通常的方法来定义将被controller servlet处理的url - 前缀匹配和扩展匹配。每种方法的一个适当的映射条目将在下面被描述。 前缀匹配意思是你想让所有以一个特殊值开头(在上下文路径部分之后)的url传递给这个servlet。这样一个条目看起来可以象是这样:action/execute/*它意味着一个匹配前面描述的 /logon 路径的请求的url看起来象是这样:/myapplication/execute/logon这里 /myapplicationis 是你的应用程序展开所在的上下文路径。 另一方面,扩展映射基于url以一个跟着定义的一组字符的句点结束的事实而将url匹配到action servlet 。例如,jsp处理servlet映射到 *.jsp 模式这样它在每个jsp页面请求时被调用。为了使用 *.do 扩展(它意味着“做某件事”)映射条目看起来应该象是这样: action*.do并且一个匹配以前描述的 /logon 路径的请求的uri可以看起来象是这样: /myapplication/logon.do三、配置struts标记库下一步,你必须添加一个定义struts标记库的条目。这个条目看起来应该象是这样: /web-inf/struts.tld/web-inf/struts.tld它告诉jsp系统到哪里去找这个库的标记库描述符(在你的应用程序的web-inf目录,而不是在外部互联网上的某个地方)。添加struts组件到你的应用程序中,在你的应用程序运行时使用struts,你必须将 struts.tld 文件拷贝到你的 web-inf 目录,将 struts.jar 文件拷贝到你的 web-inf/lib 。 web.xml 主要框架:web工程名称 action org.apache.struts.action.actionservlet configweb-inf/.strutsexample.resources.applicationresources2action*.doindex.jsp./web-inf/struts-bean.tld/web-inf/struts-bean.tld三struts标签库介绍标签库在struts中占有重要的地位,所以学好、用好taglib(标签库)也就变成了攻克struts这道难关的必经通道。struts标签库主要由4组标签组成:lbean - 在jsp中操纵beanllogic - 在jsp中的流程控制lhtml - 产生html,显示表单值,用会话id解码urlltemplate - 使用动态模版可以构建一个使用了公共格式的页面。下面我们就来具体介绍这4组标签的用法。1. bean标签库 bean标签库的tld文件为struts-bean.tld,bean标签库中定义的标签可以分成4种类型:bean复制标签bean定义代码变量的标签bean描述标签bean消息国际化标签1.1 bean复制标记可定义新bean,可复制现有bean,还可从现有bean复制属性。标记用来:l 定义新字符串常数l 将现有的bean复制到新定义的bean对象l 复制现有bean的属性来创建新的bean 标记属性: 属性描述id新定义的bean脚本变量名称,必须设置type定义引入脚本变量的类value为id属性定义的脚本变量分配一个新的对象name目标bean的名称。若value属性没有设置,这个属性就必须设置propertyname属性定义的bean的属性名称,用来定义新的beanscope源bean的作用域。若没有设置,搜索范围是从页作用域到应用程序作用域toscope目标bean的作用域。若没有设置,默认值是页作用域例如:定义一个bean:源bean在页作用域中被拷贝大于请求作用域中的另一个bean:1.2 定义脚本变量的标记从多种资源中定义和生成脚本变量,这些资源包括cookie,请求参数,http标头等等。属性如下:属性描述id脚本变量和要定义的页作用域属性的名称namecookie/标头/参数的名称multiple如果这个属性设置了任意一个数值,所有匹配的cookie都会被积累并存储到一个cookie(一个数组)类型的bean里。若无设置,指定cookie的第一个值将作为cookie类型的值value如果没有匹配的cookie或数值,就返回这个属性指定的默认值例如:脚本变量名称是mycookie,用来创建这个属性的cookie的名称是username。脚本变量名称是myheader,请求标头的名称是accept-language.脚本变量名称是mypatameter,它保存的请求参数的名称也是myparameter.标记将对一个资源的响应进行检索,并引入一个脚本变量和字符串类型的页作用域属性。这个资源可以是一个页,一个actionforward或一个外部url。与的不同是资源的响应被存储到一个页作用域的bean中,而不是写入到输出流。属性如下:属性描述id脚本变量和要定义的页作用域属性的名称page一个内部资源forward一个actionforwardhref要包含的资源的完整url例如:脚本变量的名称是myinclude,要检索的响应来自资源myjsp?x=1。标记将检索web应用中的资源,并引入一个脚本变量和inputstream或字符串类型的页作用域属性。如果在检索资源时发生问题,就会产生一个请求时间异常。属性如下:属性描述id脚本变量和要定义的页作用域属性的名称name资源的相对路径input如果这个属性不存在,资源的类型就是字符串例如:脚本变量的名称是myresource,要检索的资源的名称是myresource.xml。1.3 显示bean属性 标记库中定义了标记,用来将bean的属性输送到封装的jsp页写入器。这个标记与类似,属性如下:属性描述name要进行属性显示的bean的名称property要显示的属性的名称。如果这个属性类有java.beans.propertyeditor,getastext()或tostring 方法会被调用scopebean的作用域,若没有设置,搜索范围是从页到应用程序作用域filter如果设置true,属性中的所有特殊html字符都将被转化为相应的实体引用ignore如果设置false,当发现属性时会产生一个请求时间异常,否则返回null例如:mybean的属性myproperty将会被显示,作用域为请求,如果发现任何html特殊字符都将被转化为相应的实体引用。1.4 消息标记和国际化strtus框架支持国际化和本地化。用户在他们的计算机中定义自己所在的区域,当web应用程序需要输出一条消息时,它将引用一个资源文件,在这个文件中所有的消息都使用了适当的语言。一个应用程序可能提供了很多资源文件,每个文件提供了用不同语言编写的消息。如果没有找到所选语言的资源文件,就将使用默认的资源文件。struts框架对国际化的支持是使用标记,以及使用java.util数据包中定义的locale和resourcebundle类来实现java2平台对这些任务的支持。java.text.messageformat类定义的技术可以支持消息的格式。利用此功能,开发人员不需了解这些类的细节就可进行国际化和设置消息的格式。用strtus实现国际化和本地化:第一步要定义资源文件的名称,这个文件会包含用默认语言编写的在程序中会出现的所有消息。这些消息以“关键字-值”的形式存储,如下:error.validation.location = the entered location is invalid这个文件需要存储在类的路径下,而且它的路径要作为初始化参数传送给actionservlet作为参数进行传递时,路径的格式要符合完整java类的标准命名规范。比如,如果资源文件存储在web-infclasses目录中,文件名是applicationrperties,那么需要传递的参数值是applicationresources。如果文件在web-infclassescomtest中,那么参数值就应该是com.test. applicationresources.为了实现国际化,所有的资源文件必须都存储在基本资源文件所在的目录中。基本资源文件包含的是用默认地区语言-本地语言编写的消息。如果基本资源文件的名称是applicationrperties,那么用其他特定语言编写的资源文件的名称就应该是applicationresources_perties(xx为iso编码,如英语是en)。因此这些文件应包含相同的关键字,但关键字的值是用特定语言编写的。actionservlet的区域初始化参数必须与一个true值一起传送,这样actionservlet就会在用户会话中的action.locale_key关键字下存储一个特定用户计算机的区域对象。现在可以运行一个国际化的web站点,它可以根据用户计算机上的设置的区域自动以相应的语言显示。我们还可以使用特定的字符串来替换部分消息,就象用java.text.messageformat的方法一样:error.invalid.number = the number 0 is valid我们可以把字符串0替换成任何我们需要的数字。标签属性如下:属性描述key资源文件中定义消息关键字locale用户会话中存储的区域对象的属性名称。若没有设置,默认值是action.locale_keybundle在应用程序上下文中,存储资源对象的属性的名称。如果没有设置这个属性,默认值是action.message_keyarg0第一个替换参数值arg1第二个替换参数值arg2第三个替换参数值arg3第四个替换参数值例如:资源文件中定义了一个消息:info.mykey = the numbers entered are 0,1,2,3我们可使用下面的消息标记: 这个信息标记输出到jsp页会显示为:the numbers entered are 5,6,7,82. logic标记(逻辑标记)逻辑库的标记能够用来处理外观逻辑而不需要使用scriptlet。struts逻辑标签库包含的标记能够有条件地产生输出文本,在对象集合中循环从而重复地产生输出文本,以及应用程序流程控制。它也提供了一组在jsp页中处理流程控制的标记。这些标记封装在文件名为struts-logic.tld的标记包中。逻辑标记库定义的标记能够执行下列三个功能: 条件逻辑 重复 转发/重定向响应2.1 条件逻辑struts有三类条件逻辑。1) 第一类可以比较下列实体与一个常数的大小: cookie 请求参数 bean或bean的参数 请求标头 以下列出了这一类标记:标记功能如果常数与被定义的实体相等,返回true如果常数与被定义的实体不相等,返回true如果常数大于等于被定义的实体,返回true如果常数小于等于被定义的实体,返回true如果常数小于被定义的实体,返回true如果常数大于被定义的实体,返回true这一类的所有标记有相同的属性属性描述value要进行比较的常数值cookie要进行比较的http cookie的名称header要进行比较的http请求标头的名称parameter要进行比较的http请求参数的名称name如果要进行比较的是bean或bean的属性,则这个属性代表bean的名称 property要进行比较的bean属性的名称scopebean的作用域,如果没有指定作用域,则它的搜索范围是从页到应用程序例如: the entered name is somename判断名为”name”的请求参数的值是否是”somename”。又如:the value of bean.prop is greater than 7判断在页的作用域中是否有一个名为”bean”的bean,它有一个prop属性,这个属性的值是否大于7。如果这个属性能够转化为数值,就进行数值比较,否则就进行字符串比较。2) 第二类条件标记定义了两个标记: 它们的功能是在计算标记体之前判断特定的项目是否存在。标记的属性和属性值决定了要进行检查的项目。属性描述cookie由这个属性指定的cookie将被检查是否存在header由这个属性指定的请求标头将被检查是否存在parameter由这个属性指定的请求参数将被检查是否存在name如果没有设置property属性,那么有这个属性指定的bean将被检查是否存在。如果设置了,那么bean和bean属性都将被检查是否存在。property检查有name属性指定的bean中是否存在指定的属性scope如果指定了bean的名称,这就是bean的作用域。如果没有指定作用域,搜索的范围从页到应用程序作用域。role检查当前已经确认的用户是否属于特殊的角色user检查当前已经确认的用户是否有特定的名称例如:the bean property p is present标记判断在页作用域中是否存在一个名为”bean”的bean,这个bean有一个prop属性。3) 第三类条件标记比较复杂,这些标记根据模板匹配的结果检查标记体的内容。换句话说,这些标记判断一个指定项目的值是否是一个特定常数的子字符串: 这些标记允许jsp引擎在发现了匹配或是没有发现时计算标记主体。属性如下:属性描述cookie要进行比较的http cookie的名称header要进行比较的的http标头的名称parameter要进行比较的的http请求参数的名称name若要对bean或bean的属性进行比较,这个属性是用户指定bean的名称location如果设置了这个属性的值,将会在这个指定的位置(索引值)进行匹配scope如果对bean进行比较,这个属性指定了bean的作用域。如果没有设置这个参数,搜索范围是从页到应用程序作用域property要进行比较的bean的属性名称value要进行比较的常数值例如: the parameter name is a sub-string of the string xyz from index 1标记检查名为”name”的请求参数是否是”xyz”的子字符串,但是子字符串必须从”xyz”的索引位置1开始(也就是说子字符串必须是”y”或”yz”)。2.2 重复标记在逻辑标记库中定义了标记,它能够根据特定集合中元素的数目对标记体的内容进行重复的检查。集合的类型可以是java.util.iterator,java.util.collection(或其子类arraylist等) , java.util.map或是一个数组。有三种方法可以定义这个集合: 使用运行时间表达式来返回一个属性集合的集合(包含bean的集合)。 将集合定义为bean,并且使用name属性指定存储属性的名称。 使用name属性定义一个bean,并且使用property属性定义一个返回集合的bean属性。当前元素的集合会被定义为一个页作用域的bean。属性如下,所有这些属性都能使用运行时表达式:属性描述collection如果没有设置name属性,它就指定了要进行重复的集合,(即:包含bean的集合)id页作用域bean和脚本变量的名称,它保存着集合中当前元素的句柄(即:当前bean)indexid页作用域jsp bean的名称,它包含着每次重复完成后集合的当前索引length重复的最大次数name作为集合的bean的名称,或是一个bean名称,它由property属性定义的属性,是个集合offset重复开始位置的索引property作为集合的bean属性的名称(即:包含bean的集合)scope如果指定了bean名称,这个属性设置bean的作用域。若没有设置,搜索范围从页到应用程序作用域type为当前定义的页作用域bean的类型例如:logic:iterate id=”currentint”collection=”type=”java.lang.integer”offset=”1”length=”2” 代码将从列表中的第一个元素开始重复两个元素并且能够让当前元素作为页作用域和java.lang.integer类型的脚本变量来使用。也就是说,如果mylist包含元素1,2,3,4等,代码将会打印1和2。2.3 转发和重定向标记1) 转发标记标记能够将响应转发给重定向到特定的全局actionforward上。actionforward的类型决定了是使用pagecontext转发响应,还是使用sendredirect将响应进行重定向。此标记只有一个”name”属性,用来指定全局actionforward的名称,例如:2) 重定向标记标记是一个能够执行http重定向的强大工具。根据指定的不同属性,它能够通过不同的方式实现重定向。它还允许开发人员指定重定向url的查询参数。属性如下:属性描述forward映射了资源相对路径的actionforwardhref资源的完整urlpage资源的相对路径namemap类型的页名称,请求,会话或程序属性的名称,其中包含要附加大哦重定向url(如果没有设置property属性)上的“名称-值”参数。或是具有map类型属性的bean名称,其中包含相同的信息(没有设置property属性)propertymap类型的bean属性的名称。bean的名称由name属性指定。scope如果指定了bean的名称,这个属性指定搜索bean的范围。如果没有设置,搜索范围从页到应用程序作用域paramid定义特定查询参数的名称paramname字符串类型的bean的名称,其中包含查询参数的值(如果没有设置paramproperty属性);或是一个bean的名称,它的属性(在paramproperty属性中指定)包含了查询参数值paramproperty字符串bean属性的名称,其中包含着查询参数的值paramscopeparamname定义的bean的搜索范围使用这个标记时至少要指定forward,href或page中的一个属性,以便标明将响应重定向到哪个资源。4.3 html标记struts html标记可以大致地分为以下几个功能:l 显示表单元素和输入控件l 显示错误信息l 显示其他html元素4.3.1 显示表单元素和输入控件struts将html表单与为表单操作而定义的actionform bean紧密联系在一起。表单输入字段的名称与actionform bean里定义的属性名称是对应的。当第一次显示表单时,表单的输入字段是从actionform bean中移植过来的,当表单被提交时,请求参数将移植到actionform bean实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理教学方法案例演示
- 云南临沧市2025年招标采购从业人员专业技术能力考试(招标采购合同管理中级)测试题库及答案
- 行政试用期工作总结
- 《监察法》培训课件
- 老年患者入院护理查房
- 广东省湛江市雷州市2023-2024学年高二上学期第一次月考化学试题含参考答案
- 有关转让的协议书5篇
- 2025年上海房屋租赁简单合同范本
- 酒店安保部月度工作总结
- 知识题库-检测机构知识竞赛试题及答案
- 知道智慧树实验室安全与防护满分测试答案
- 人行统计制度培训课件
- Unit 2 School life单元测试卷(含答案) 2025-2026学年译林版(2024)八年级英语上册
- 产品检验基础知识培训课件
- 来华留学生管理办法
- 宁波银行2025-2026年招聘考试笔试题内容历年考试真题
- 心力衰竭健康教育
- 学堂在线 新闻摄影 期末考试答案
- 统编版语文五年级上册 第一单元核心素养展示
- 校本研修教学课件
- 物业客服部日常工作
评论
0/150
提交评论