




已阅读5页,还剩85页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第七章JavaBean与表单处理,2,JSP程序开发模式,单纯的JSP页面编程在单纯的JSP编程模式下,通过应用JSP中的脚本标志,可直接在JSP页面中实现各种功能。这种模式很容易实现。缺点:因为将大部分的Java代码与HTML代码混淆在一起,会给程序的维护和调试带来很多的困难,而且对于整个程序的结构更是无从谈起。单纯的JSP页面编程模式是无法应用到大型、中型甚至小型的JSPWeb应用程序开发中。,3,JSP程序开发模式,JSP+JavaBean编程该模式是JSP程序开发经典设计模式之一,适合小型或中型网站的开发。利用JavaBean技术,可以很容易地完成一些业务逻辑上的操作,例如数据库的连接、用户登录与注销等。JavaBean是一个遵循了一定规则的Java类,在程序的开发中,将要进行的业务逻辑封装到这个类中,在JSP页面中通过动作标签来调用这个类,从而执行这个业务逻辑。此时的JSP除了负责部分流程的控制外,大部分用来显示页面,而JavaBean则负责业务逻辑的处理。下面将通过一个流程图说明该模式对客户端的请求进行处理的过程。,4,JSP+JavaBean编程,客户端,带有JSP引擎的Web服务器,用户通过客户端浏览器请求服务器,服务器将最终的结果返回给客户端浏览器进行显示,JSP页面,JavaBean,业务逻辑,数据库,在JavaBean中连接及操作数据库,或实现其他业务逻辑,在JSP页面中调用JavaBean,服务器接收用户请求后调用JSP页,JavaBean将执行的结果返回JSP页面,服务器读取JSP页面中的内容(将页面中的静态与动态内容相结合),5,优点:纯净的JSP页面因为业务逻辑和数据库操作已经从JSP页面中剥离出来,JSP页面中只需嵌入少量的Java代码甚至不使用Java代码。可重用的组件设计良好的JavaBean可以重用,甚至可以作为产品销售,在团队协作的项目中,可重用的JavaBean将会大大减少开发人员的工作量,加快开发进度。方便进行调试复杂的操作都封装在一个或者数个JavaBean中,错误比较容易定位。易维护易扩展系统的升级或者更改往往集中在一组JavaBean中,而不用编辑所有的JSP页面。,6,应用范围Model1模式的表现逻辑和控制逻辑全部逻辑耦合在页面中,这种处理方式对一些规模很小只有几个简单页面的项目比较适用,7,JSP程序开发模式,JSP+Servlet+JavaBean编程在JSP+JavaBean设计模式的基础上加入Servlet来实现程序中的控制层。在这种模式中,由Servlet来执行业务逻辑并负责程序的流程控制,JavaBean组件实现业务逻辑,充当着模型的角色,JSP用于页面的显示。可以看出这种模式使得程序中的层次关系更明显,各组件的分工也非常明确。下面将通过一个流程图说明该模式对客户端的请求进行处理的过程。,8,JSP+Servlet+JavaBean编程对客户端的请求进行处理的过程,客户端,带有JSP引擎的Web服务器,用户通过客户端浏览器请求服务器,服务器将最终的结果返回给客户端浏览器进行显示,JSP页面,JavaBean,业务逻辑,数据库,在JavaBean中连接及操作数据库,或实现其他业务逻辑,服务器接收用户请求后调用Servlet,Servlet根据用户请求调用JavaBean处理业务,服务器读取JSP页面中的内容(将页面中的静态与动态的内容相结合),请求,响应,Servlet,调用,转发,由Servlet转发请求到JSP页面,JavaBean将结果返回Servlet,在Servlet中将结果保存到请求对象中,9,JSP程序开发模式,MVC模式MVC(Model-View-Controller,模型视图控制器)是一种程序设计概念,它同时适用于简单的和复杂的程序。使用该模式可将待开发的应用程序分解为3个独立的部分:模型、视图和控制器。,10,JSP程序开发模式,提出这种设计模式主要是因为应用程序中用来完成任务的代码模型(也称为“业务逻辑”)通常是程序中相对稳定的部分,并且会被重复使用,程序与用户进行交互的页面视图,却是经常改变的。如果因需要更新页面而不得不对业务逻辑代码进行改动,或者要在不同的模块中应用到相同的功能而重复地编写业务逻辑代码,不仅降低了整体程序开发的进程,而且会使程序变得难以维护。因此,将业务逻辑代码与外观呈现分离,将会更容易地根据需求的改变来改进程序。,11,Model(模型):指的是业务逻辑的代码,是应用程序中真正用来完成任务的部分。View(视图):实际上就是程序与用户进行交互的界面,用户可以看到它的存在。视图可以具备一定的功能并应遵守对其的约束,在视图中不应包含对数据处理的代码,即业务逻辑代码。Controller(控制器):主要控制用户请求并作出响应。它根据用户的请求选择模型或修改模型,并决定返回怎样的视图。,12,在当今各类JSP网站开发标准中,有两种使用JSP的方式,他们分别被称为模式一和模式二。模式一是JSP+JavaBean的结合模式二是JSP+JavaBeanServlet的结合。这两种模式是当今大中型应用程序的基础,这两种模式中最重要的就是JavaBean的开发,JavaBean用来封装业务逻辑。,13,7.3剖析JavaBean,什么是组件?独立的模块外界不了解其内部实现外界通过其提供的接口对组件进行访问可以重用目前有代表性的组件技术COM、COM+、JavaBeans、EJB等,14,JavaBean组件和企业级EJB(EnterpriseJavaBean)组件EJB是J2EE的核心技术,它为开发服务器端应用程序组件提供了一个模型,利用这个模型来创建可移植性与分布式企业应用程序服务器或组件。EJB定义了一个用于开发基于组件的企业多重应用程序的标准。EJB是一个用来创建分布式、服务器端以及基于Java的企业应用程序组件的功能强大的组件模型。,15,16,7.3.1什么是JavaBean,JavaBean是Java的可重用组件技术,实质是一种符合某些命名和设计规范的Java类JavaBean通常封装成为具有特定功能或者处理某个业务(如连接数据库,访问数据库)应用:JSP页面内可以访问JavaBean的对象以及它的方法。在JSP的Web应用中集成JavaBean组件,由JavaBean中处理业务逻辑,然后在JSP中调用,而JSP页面着重网页界面的设计,可以实现业务逻辑和前台显示的部分分离。,17,使用JavaBean的好处:可以使得JSP页面变得清晰;节省软件开发时间(可以直接使用已经测试和可信的已有组件,避免了重复开发);降低系统维护的难度JavaBean的分类可视的JavaBean:传统的JavaBean应用于可视化界面(如java图形界面中使用的按钮、文本框或列表框等等)。非可视化的JavaBean:封装逻辑、封装数据,与JSP搭配使用。,18,7.3.2JavaBean的特征,通常一个标准的JavaBean有以下特征(编写规范):一定使用了package语句进行打包JavaBean是一个public类型的类有一个无参数的构造方法属性一般是私有的(即用private修饰)对属性值xxx的获取有相应的getXxx()方法,并且此方法是公有的(即用public修饰)若要获取的属性xxx为boolean类型则可以使用isXxx()方法对属性值xxx的设置有相应的setXxx()方法,并且此方法也是公有的(即用public修饰)需要实现java.io.Serializable接口。实现了Serializable接口的对象可以转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。,19,UserBean.javapackagejsp.test;publicclassUserBeanprivateStringuserName;/用户名privateStringpwd;/密码privateStringname;/真实姓名privateStringgender;/性别privateintage;/年龄privateStringemail;/电子邮件privateStringtel;/固定电话privateStringmphone;/手机publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetEmail()returnemail;publicvoidsetEmail(Stringemail)this.email=email;publicStringgetGender()returngender;publicvoidsetGender(Stringgender)this.gender=gender;publicStringgetMphone()returnmphone;publicvoidsetMphone(Stringmphone)this.mphone=mphone;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;,20,publicStringgetPwd()returnpwd;publicvoidsetPwd(Stringpwd)this.pwd=pwd;publicStringgetTel()returntel;publicvoidsetTel(Stringtel)this.tel=tel;publicStringgetUserName()returnuserName;publicvoidsetUserName(StringuserName)this.userName=userName;,21,Eclipse中编写JavaBean,Eclipse新建WebProject在src文件夹上新建package,如前例中的jsp.test在package上新建类,如前例中的UserBean,22,Eclipse中编写JavaBean,23,24,25,26,27,28,一个JavaBean编写完以后,需要将它编译成“.class”文件,并将此“.class”文件(连同其目录)放到本次应用的WEB-INFclasses目录之下(直接在Apache下使用时)。注意:用Eclipse编写会自动地把.class放到相应的class目录下,使用JavaBean,29,在JSP中使用JavaBean,需要使用以下几个动作元素标签:在网页中创建一个Bean对象标签:用于为Bean对象中的属性赋值标签:用于获取Bean对象中属性的值,30,SampleBean.javapackagebean;publicclassSampleBeanprivateStringsample=Hello,World;publicvoidsetSample(Strings)if(s!=null)sample=s;publicStringgetSample()returnsample;,Test1.jsp属性sample的初始值:属性sample的新值:,31,6.3.1调用JavaBean,该标签用来在JSP页面中创建一个JavaBean实例。语法如下:其中:id指定该JavaBean的实例变量的名称scope指定该Bean变量的有效范围request指在任何执行相同请求的JSP文件中使用Bean,直到页面执行完毕,session指从创建该Bean开始,在相同session下的JSP页面中可以使用该Bean;application指从创建该Bean开始,在相同application下的JSP页面中可以使用该Bean,32,33,比较在同一个页面输出效果一样使用动作元素可以指定作用域;在脚本段的作用域只限定在当前JSP页面。对于多个页面共享Bean情况,如果使用脚本段,每个页面都要实例化一个新的对象,会增加系统开销,34,访问JavaBean,标签用来获取Bean对象的属性值,并显示在页面上,其语法如下:name指出了要获取哪个bean的属性值,取值与useBean中id值相同;property指出要获取该bean的哪个属性值注意:在使用之前,必须有由所创建的Bean对象如果使用来检索的值是空值,那么将会产生NullPointerException例外;如果使用程序段或表达式来检索值,那么在浏览器上出现的是将是null(空值),35,例:还可以使用表达式调用其属性,例如在计算器实例中,下面两种表达式是等价的,36,设置JavaBean的属性,标签用来设置Bean对象的属性值。JSP语法格式如下:/,37,它有两种用法:第一,可以在jsp:useBean元素的外面(后面)使用jsp:setProperty。.不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。第二,把放入jsp:useBean元素的内部。.只有在新建Bean实例时才会执行,如果是使用现有实例,则不执行。,38,设置JavaBean的属性,设置Bean对象的属性的语法有多种:(1).简单bean属性设置其中:name指出是在操作哪个bean,property指出对该bean的哪个属性赋值,value用来指定给属性赋的值。例:,39,Eg.一个描述学生的beans,在一个JSP页面中获得一个这样的beans,其有效范围是page。在JSP页面中使用动作标签设置、获取该beans的属性。,40,Student.java:创建beans的源文件,publicclassStudentStringname=null;longnumber;doubleheight,weight;publicStringgetName()returnname;publicvoidsetName(StringnewName)name=newName;publiclonggetNumber()returnnumber;publicvoidsetNumber(longnewNumber)number=newNumber;,publicdoublegetHeight()returnheight;publicvoidsetHeight(doublenewHeight)height=newHeight;publicdoublegetWeight()returnweight;publicvoidsetWeight(doublenewWeight)weight=newWeight;,41,student.jsp,名字是:学号是:/身高是:米体重是:公斤,42,注意:如果将表达式的值设置为beans属性的值,表达式值的类型必须和beans的属性的类型一致。如果将字符串设置为beans的属性的值,这个字符串会自动被转化为beans的属性的类型。,43,(2).将单个属性值和输入参数关联用param代替value表示将一个form表单中传入参数的值赋给bean的某个属性。其中:name指出是在操作哪个bean,property指出对该bean的哪个属性赋值,而param表示传入参数的名字。,44,test2.html姓名:年龄:,TestBean.javapackagebean;publicclassTestBeanprivateStringuserName;privateintage;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetUserName()returnuserName;publicvoidsetUserName(StringuserName)this.userName=userName;,Test4.jsp,45,通过表单来指定beans的属性值。由于客户可能提交汉语的姓名,所以我们将TestBean.java文件中的getUserName()方法做以下改进:,publicStringgetUserName()()trybyteb=userName.getBytes(ISO-8859-1);userName=newString(b);returnuserName;catch(Exceptione)returnuserName;,46,(3)输入参数和bean属性值相同,可以简化这种用法将form表单中传入参数的值赋给bean的某个属性。要求:form表单中参数的名称要与propertyName一致,47,test1.html姓名:年龄:,TestBean.javapackagebean;publicclassTestBeanprivateStringuserName;privateintage;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetUserName()returnuserName;publicvoidsetUserName(StringuserName)this.userName=userName;,注意:property的属性名、form中参数的名字、Bean中的属性名、方法名要对应,Test2.jsp,48,标签,(4).将bean的所有属性与表单中参数关联在这种用法中,JSP容器会一个个检查传入的参数,如果某个传入参数的名字和bean中某个属性的名字相同,则将该参数的值赋给bean中的属性。使用这种方式可以一次为多个属性赋值,49,Test3.jsp,test1.html姓名:年龄:,TestBean.javapackagebean;publicclassTestBeanprivateStringuserName;privateintage;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicStringgetUserName()returnuserName;publicvoidsetUserName(StringuserName)this.userName=userName;,50,Pleaseenteryourusername:,publicclassLanguageBeanprivateStringname;publicvoidsetName(Stringname)=name;,beans.html,beans.jsp,mypackage.LanguageBean,执行过程,51,示例通过一个用户注册的例子来具体介绍这3个动作元素的使用方法,在ch04项目中建立一个名为TestBean的Java类用户登录文件register.htmlregister.jsp显示注册成功的用户的提交信息,52,register2.html改表单参数userName为xingming(即和JavaBean的属性名不一致),修改后的代码为姓名:register2.jsp:改为重新执行程序,输入数据并提交,53,eg.首先建立一个名为具有计算访客人数功能的JavaBean类Counter并且在程序中定义一个名为setCounter的方法用来设置属性值Count,并且定义为取得属性的方法getCounter。,Counter.javapackagebean;publicclassCounterpublicCounter()privateintCount=0;publicvoidsetCounter(intcount)Count=count;publicintgetCounter()return+Count;,54,运行效果,在page范围在request范围在session范围在Application范围,55,使用JavaBean处理表单数据,操纵HTML表单步骤1、写JSP原文件,创建一些HTML的表单并命名。2、在Java文件里写Bean,定义属性,GET或者SET方法来配合已经被你指定好名字的表单。3、回到JSP原文件中,增加标签来创建一个或者调用一个现成的Bean。4、增加标签设置HTML表单中需要SET方法的Bean的属性。5、增加标签设置HTML表单中需要GET方法的Bean的属性。6、如果需要处理更多的用户数据,用request对象。,56,eg1.用户通过form表单提交数据,提交的数据被处理后,再在Jsp文件中显示处理usingGetParameter.html让用户输入个人信息usingGetParameter.jsp将其一一输出eg2.使用Jsp+JavaBean形式处理表单。showInfo.jsp让用户输入个人信息服务器取得这些信息之后,利用show.java这个Javabean中的方法将其一一输出,57,补充JavaBean,该标签用来在JSP页面中创建一个JavaBean实例,并指定它的名字及作用范围。语法如下:,58,id属性,id属性代表JavaBean对象的变量名可为同一Bean类指定不同的id值,例如:,59,class属性,class属性JavaBean的类名CountBean不属于包CountBean属于test包,60,class属性分两种情况:如果在scope指定的范围内,该JavaBean对象不存在,则创建这个JavaBean对象,相当于执行以下语句Countid1=newCount();Countid2=newCount();若该JavaBean对象已经存在,则不创建新对象,而是直接获得已存在对象的引用。,61,scope属性,scope属性表明JavaBean对象存在的范围,可为如下几个值:page(默认)requestsessionApplication以上作用范围使越来越大。,62,request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。举个简单的例子:jsp1.jspjsp2.jsp,63,运行jsp1.jsp可以正常显示数据,因为作用范围是request,相当于调用了request.setAttribute()方法,jsp2页通过request.getAttribute来获得这个bean.如果把request改为page,就会抛出NullPointerExceptioin.一个请求可以跨好几个JSP(include和forword)和Servlet(如filter).不过这里有一个需要注意的就是区别和.如果上面的改为,即使scope为page也是正确的,是编译时包含,是运行时包含.前者就相当于宏,编译时替代,后者相当于函数,运行时返回.,64,page作用域,客户每次请求访问JSP页面时,都会创建一个新的JavaBean对象。JavaBean对象的有效范围仅是客户请求访问的当前页面。JavaBean对象在下列情况下会结束生命期:客户请求访问的当前页面执行完毕并向客户端发回响应。客户请求访问的当前页面通过标记将请求转发到另一个文件。,65,request作用域,客户每次请求访问JSP页面时,都会创建一个新的JavaBean对象。JavaBean对象的有效范围是:客户请求访问的当前JSP网页和当前JSP网页共享同一个客户请求的页面,即当前JSP网页中指令以及标记包含的其它JSP文件当所有共享同一个客户请求的JSP页面执行完毕并向客户端发回响应时,JavaBean对象结束生命期。,66,session作用域,只有当不同客户请求访问JSP页面时,才会创建一个新的JavaBean对象。JavaBean对象的有效范围是同一个Session中的所有JSP文件。JavaBean对象被创建后,存在于整个Session的生命周期内。,67,application作用域,在整个Web应用中只会创建一个JavaBean对象。JavaBean对象的有效范围是Web应用中的所有JSP文件。JavaBean对象被创建后,存在于整个Web应用的生命周期内。,68,下面看看具体的scope四个值的含义:Page:保存在pageContext对象中,有page范围的JavaBean实例只能在当前创建这个JavaBean的JSP文件中进行操作,这个实例只有在请求返回给客户端后或者转移到另外的JSP页面后才会释放掉。page范围的JavaBean常用于进行一次性操作的JavaBean,这样的Bean用的最多,比如大部分表单提交,Bean的一些计算处理等都可以使用page范围的JavaBean,69,Request有request范围的JavaBean实例可以在处理请求所有JSP页面中都存在,这个对象只有在请求全部处理完毕后才会被释放掉,request范围的JavaBean常用于共享同一次请求的JSP页面中,比如判断用户登录功能,如果用户名密码合法就可以forward到一个合法页面中,否则就forward到一个出错页面,当然转移后的页面仍然能够得到用户的输入。,70,SessionJavaBean对象是保存在session范围的JavaBean实例的生存周期是整个session,只有当session过期后才能释放掉,这样常用于共享同一session的JSP页面,比如购物车一般就是放在session中的或者登陆后的用户信息等也可以在session中,注意%page标签中不要设置session=false,否则在这个JSP页面中session将不会起作用,幸好JSP默认session=true,所以可以不必管它了。,71,application-JavaBean对象保存在application对象中,有application范围的JavaBean对象的生存周期是整个application。这就意味着这样的JavaBean的生存周期是整个应用程序,当webServer停掉才会消失掉。这样的常用于共享同一application的JSP程序中,比如程序中一些经常用到配置东西如数据库连接URL,全局的计数器或者是聊天室中人员信息等。,72,执行过程,73,通过Bean提供的setXXX()方法设置Bean的简单属性和索引属性,语法如下:其中propertyDetails可为如下之一property=“*”property=“propertyName”property=“propertyName”param“paramNameproperty=“propertyNamevaluepropertyValue,74,标记,property=“*”设置Bean的所有属性,要求Bean属性的名字和类型必须与request对象中参数相匹配由于form传递的数据类型都是String,JSP会自动将参数转换成Bean属性对应的类型若没有Bean属性对应的request参数值或参数值为空,则相应的Bean属性不会设置任何值,75,标记,property=“propertyName”设置Bean指定的属性,要求Bean属性的名字和类型必须与request对象中参数相匹配由于form传递的数据类型都是String,JSP会自动将参数转换成Bean属性对应的类型若没有Bean属性对应的request参数值或参数值为空,则相应的Bean属性不会设置任何值,76,标记,property=“propertyName”param“paramName当Bean属性的名字和request参数的名字不同时使用该方法进行设置由于form传递的数据类型都是String,JSP会自动将参数转换成Bean属性对应的类型若request参数值为空,则相应的Bean属性不会设置任何值,77,标记,property=“propertyNamevaluepropertyValue使用指定值而不是request参数来设置Bean属性value可为字符串或表达式。若是字符串,会自动转换成Bean属性对应的类型;若是表达式,则必须和Bean属性的类型一致若value为空,则相应的Bean属性不会设置任何值,78,Pleaseenteryourusername:,publicclassLanguageBeanprivateStringname;publicvoidsetName(Stringname)=name;,beans.html,beans.jsp,mypackage.LanguageBean,执行过程,79,80,标记,访问Bean属性的值,并将此值转换成字符串,插入到输出结果中。语法如下:,81,执行过程,publicclassLanguageBeanprivateStringname;publicStringgetName();,mypackage.LanguageBean,Hello,.,beans.jsp,转换成字符串,82,Jsp中访问JavaBean语法,使用page指令导入JavaBean类:%pageimport=包名.类名%使用标签声明JavaBean对象:注意:要给出完整的(包名.类名),否则报ClassNotFoundException例:上面的代码相当于:CountBeanbean=newCountBean();session.setAttribute(bean,bean);注意:如果在scope指定范围内,该JavaBean已存在,则不会生成新的JavaBean对象,而是直接获得已经存在的JavaBean对象的引用.,83,7.5.3使用GET/POST方法传递参数,第一种GET它将表单内容附加URL之后,中间用问号连接,然后传送至指定的程序做处理。http:/specifiedURL?Name1=Valueq=0.8”;Accept-Language:客户端所能识别的语言,格式:“Accept-Language:语言1:权重,语言2:权重”,如:”Accept-Language:zh,en;q=0.7”;Host:客户请求的主
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外研社六年级英语词汇学习指导手册
- 室内家具设计尺寸标准与人体工学研究
- 喀什大学《生物统计》2024-2025学年第一学期期末试卷
- 广西大学《无机非金属材料机械设备》2024-2025学年第一学期期末试卷
- 柳州铁道职业技术学院《工业工程导论》2024-2025学年第一学期期末试卷
- 滨州医学院《动画后期制作》2024-2025学年第一学期期末试卷
- 安徽林业职业技术学院《建筑材料力学》2024-2025学年第一学期期末试卷
- 湖南城市学院《计量经济及Stata应用》2024-2025学年第一学期期末试卷
- 重庆科技学院《环境数学模型》2024-2025学年第一学期期末试卷
- 重庆艺术工程职业学院《生物材料制备与加工》2024-2025学年第一学期期末试卷
- 中药制剂检验技术题库+参考答案
- DSM-V美国精神疾病诊断标准
- 劳动防护用品使用安全检查表
- 《简单教数学》读书心得
- 基础餐时胰岛素方案治疗儿童1型糖尿病患者
- 液压系统 基础知识
- 特灵RTAC控制系统
- GB/T 35770-2022合规管理体系要求及使用指南
- 社会组织规范化建设评价指标体系解读课件
- 英语剧本 小王子
- 民间信仰活动场所信息采集表
评论
0/150
提交评论