




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaEE学习笔记1、应用程序的的三层结构:1,表示层:由用户界面和用于生成界面的代码组成。2,中间层:包含系统的业务和功能代码。3,数据层:负责完成存取数据库的数据和对数据进行封装。2、格式化的数据流,比如html数据流,就是进行了html格式化,通过网络传到客户端浏览器中,浏览器就能识别这样的数据,其他格式的数据或者未格式化的数据是不能识别的。text/plain代表的是未格式化的文本。3、客户端浏览器发送浏览请求,服务器把没有JSP代码的静态html网页传给客户端浏览器,当客户端填写了有关数据后,点击提交并把相关数据(参数)传递过去,服务器端有含有JSP代码的网页,然后服务器找到这个网页,并执行其中的代码,然后生成具有html格式的数据流通过网络回传到客户端浏览器中,这样就完成了请求回应的过程。这个原理同样也适合ASP,以及ASP.net,只不过ASP.net是代码网页分开而已。4、在JSP技术出现之前,如果想生成HTML页面,那就只有再服务器端运行JAVA程序,并输出(打印)HTML格式内容。运行在服务器端的JAVA程序就是Servlet。5、什么是Servlet? import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet Public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException response.setContentType(text/html;charset=gb2312); PrintWriter out=response.getWriter(); out.println(); out.println( Servlet); out.println( ); out.println(你好,欢迎来到Servlet世界); out.println( ); out.println( ); out.close(); public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException doGet(request,response); 创建的Servlet类必须继承HttpServlet类实现doGet()或者doPost()6、转发:对应的Servlet代码:dispatcher.forward(request,response); 转发是在服务器端起作用的,当使用forward()方法时,Servlet容器传递HTTP请求,从当前的Servlet或JSP到指定的Servlet或JSP,此过程仍然在request作用范围内。转发后,浏览器的地址栏内容不变。 重定向:对应的Servlet和JSP代码都是response.sendRedirect(ch02/ok.jsp); 重定向是在用户的浏览器端工作的,是Servlet对浏览器做出响应后,浏览器再次发送一个新请求,到sendRedirect(ch02/ok.jsp);指定的ok.jsp页面。重定向后,浏览器的地址栏内容发生变化。 转发和重定向:在刚刚学习转发和重定向的时候,在使用方面哪种方式进行页面的跳转,这是困扰很多学员的问题。其实他们之间有一个很清晰的区别,那就是数据的传递。如果你想把数据通过request作用域传递到下一个页面或Servlet,那就使用转发。反之,就使用重定向。7、session是由服务器也就是Web容器创建的。8、java语言为我们提供了一种序列化机制,可以把一个实现了Serializable接口的对象转换成一组byte数据,在用到这个对象的时候,能把这些byte数据恢复出来,重新构建那个对象。那么序列化有什么好处呢?程序在运行时,会产生对象,这些对象会随着程序的停止而消失,但是我们想把这些对象保存下来,让这些对象在程序运行终止后,仍然存在,可以让程序再次运行时读取这些值,或者在其他程序中使用这些保存下来的对象,在这种情况下,我们可以使用序列化来完成。9、网页中传到服务器上参数,是通过request对象的getParameter方法实现获取到的。10、集合类中的Map接口和Set接口,我们通过Map接口中的keySet()方法,可以把Map中的Key键以Set形式返回,再通过toArray()方法,将Set对象转换为Object类型数组,之后我们来遍历数组,以数组元素为key值,取出Map中所存储的数据。Set就是没有重复元素的集合。Set接口是继承了Collection接口,并被其他类如HashSet类、TreeSet所实现的接口,在Set接口中,为我们提供了一些常用的方法:Object toArray() 返回一个包含Set中所有元素的数组 int size() 返回Set中的元素数 boolean add() 返回Set中添加元素 boolean isEmpty() 返回Set中不包含元素,则返回true11、常用的集合类和接口:List接口、ArrayList类、LinkedList类、Map接口、HashMap类,以及Set接口与HashSet类。 List接口:该接口与其实现类是容量可变的列表,可按索引访问集合中的元素,是有序的集合。 Collection接口 List接口 Set接口 ArrayList类 LinkedList类 HashSet类 TreeSet类ArrayList是以Array方式实现的List,允许快速随即存取,相对于LinkedList不适合进行插入和移除元素操作。LinkedList提供最佳顺序存取,适合插入和移除元素。Set接口:是一种不包含重复元素的Collection,也就是说在Set中最多只能有一个null HashSet能够快速定位一个元素,但是它要求存入HashSet的对象必须元素实现HashCode()方法。 TreeSet将放入其中的元素按需存放。Map接口:不同于List和Set,它不继承与Collection接口。它的层次结构如图所示: Map接口 Hashmap类 Properties类12、JSP技术是在Servlet技术的基础上形成的,它的主要任务是简化页面的开发。在编写程序的时候,我们把大量的Java代码卸载了JSP页面中,进行程序控制和业务罗逸的操作,而这违背了JSP技术的初衷,为程序员和美工带来了很大困扰,为了解决这个问题,在进行项目设计时采用MVC设计模式。13、MVC设计模式: 是一种流行的软件设计模式,它把系统分为以下3个模块。 模型(Model):对应的组件是JavaBean(Java类)。可以分为业务模型和数据模型,他们代表应用程序的业务逻辑和状态。 视图(View):对应的组件是JSP或HTML文件。提供可交互的客户界面,向客户显示模型数据。负责展示数据、获得用户输入的部分。 控制器(controller):对应的组件是Servlet。相应客户的请求,根据客户的请求来操作模型,并把模型那个的乡音结果经由视图展现给各户。负责从V接收用户输入,调用M(Model),返回数据到V(view) 14、在程序中,我们要经常建立与数据库的连接,之后再关闭这个连接。这些操作是频繁的,并且是耗费资源的。在进行企业级开发时需要稳健和高效的数据访问层(DAO) 完成对数据库的GRUD操作。 能够处理数据库发生的各种错误。 可以灵活地修改配置。 提供方便使用的工具。 高性能。15、数据库连接池(由JDBC2.0中提供的javax.sql.DataSource来实现)在初始化的时候将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。16、DataSource对象是由Web容器(Tomcat)提供的,因此不能再程序中采用创建一个实例的方式来生成DataSource对象,而需要采用JAVA的另一个技术JNDI(Java Naming and Directory Interface),来获得DataSource对象。 可以简单的把JNDI理解为一种将对象和名字绑定的技术,容器生产处对象,这些对象都和唯一的名字绑定。外部程序可以通过名字来获得该对象。 javax.naming.Context提供了查找JNDI Resource的接口,例如,可以通过以下代码获得名称为jdbc/books的数据源的引用: Context ctx=new InitialContext(); DataSourceds=(DataSource)ctx.lookup(java:comp/env/jdbc/books); 得到DataSource对象后,可以通过DataSource的getConnection()方法来获得数据库连接对象Connection。当程序结束数据库访问后,应该调用Connection的close()方法,及时将Connection返回给数据库连接池。 lookup(String name) 返回与指定的名字绑定的对象。17、JNDI的配置 我们已经了解了只要知道数据源的名称,就可以获得DataSource对象,但是数据源名称是在哪里设置的呢? 1,context.xml文件的配置 在Tomcat根目录confcontext.xml文件中节点中添加信息,内容如下: ./原有配置 的属性: name Resource 的JNDI名字 auth 指定管理Resource的Manager,它有两个可选值:Container和Application。Container表示由容器来创建Resource,Application表示由Web应用来创建和管理Resource type 指定Resource所属的Java类名 maxActive 指定数据库连接池中处于活动状态的数据库连接的最大数目,取值为0,表示不受限制 maxIdle 指定数据库连接池中处于空闲状态的数据库连接的最大数目,取值为0,表示不受限制 maxWait 指定数据库连接池中的数据库连接处于空闲状态的最长时间(以毫秒为单位),超过这一时间将会抛出异常。取值为-1,表示可以无限制等待。 driverClassName 指定连接数据库的JDBC驱动程序 url 指定连接数据库的URL 2,web.xml文件的配置 在应用程序中的WEB-INFweb.xml文件中节点下添加信息,内容如下: E-Books DataSource jdbc/books javax.sql.DataSource Container ./其他配置信息 res-ref-name 指定所引用资源的JNDI名字,与元素中的name属性对应 res-type 指定所引用资源的类名字,与元素中的type属性对应。res-auth 指定管理Resource的Manager,与元素中的auth属性对应。 3,添加数据库驱动文件 通过数据源(DataSource)访问数据库,由于数据源由Tomcat创建并维护 ,所以必须把JDBC驱动程序复制到Tomcat的common/lib目录下。18、把有关数据库配置的信息写在文件中,并且保存在项目内,在程序中读取文件中的信息,从而进行数据库连接。在java中提供了Properties类,来读取.properties(属性)文件。在项目默认路径下(src)创建文件,名称为perties(名称可以自定义,扩展名必须为properties)。 在程序中调用Properties类的load()方法时,系统把perties文件的内容加载到内存中。因为Properties类继承了Hashtable,Properties类把=之前的内容添加到Hashtable对象的Key值,并同时添加Key值对应的value 通过.properties文件形式只能保存String类型的信息。 InputStream getResorceAsStream(String name):该方法打开并读取一个String类型参数指定的文件到系统内存中,以方便获得文件信息。 Class.forName(String classname):该方法生成以一个String类型参数指定的classname的Class对象。 Object类: 是所有类的根类,我们自定义的类都默认地继承与这个类,所以所有的类(包括数组)都具有这个类的方法。 Object类的常用方法有以下3种: getClass():返回一个对象的运行时类。 toString():返回该对象的字符串表示,在Object类中是返回对象的地址信息 equals(Object obj):判断obj与当前对象是否相等。19、为了扩展和完善JSP标准动作,由JSP标准标签库专家组和JSP2.0专家组共同开了JSP表达式语言(EL).可以把EL理解成是不使用JAVA来访问JAVA对象或者变量的一种方法。 EL语言语法: $EL 表达式 1.点操作符 在使用EL时,EL表达式一般由两部分组成,如$,其中,.被称作点号操作符,在点号操作符左边可以是一个JavaBean对象,也可以是EL隐式对象,点号右边可以是一个JavaBean属性,也可以是一个映射键。 2.操作符 如果使用EL操作数组,应使用,如$list020、在EL中只能进行逻辑的运算,但是不能进行逻辑的控制,也就是说,在使用了El表达式后,还是无法实现无脚本JSP页面。这时候,我们还要借助JSTL来共同完成。 JSTL标准标签库(java Server Pages Standard Tag Library)包含用于编写和开发JSP页面的一组标准标签,它可为用户提供一个无脚本环境。在此环境中,用户可以使用标签编写代码,而无须使用Java脚本。JSTL包含各种标签,如迭代标签、条件标签和SQL标签。迭代标签、条件标签用于处理页面流程控制,SQL标签用于访问数据库和更新数据库表数据。 JSTL标准标签库 核心标签库 SQL标签库 通用标签 条件标签 迭代标签 update set if forEach param remove query outtaglib是JSP指令的一种,它的作用是在JSP页面中,将标签库描述符文件(.tld)引入该页面中,并设置前缀,利用标签的前缀去使用标签库描述符文件中的标签。taglib指令的语法如下: 通用标签:通用标签用于在JSP页面内设置、删除变量和显示变量值。共有三个:set、remove、out。 :设置指定范围内的变量值,如果该变量不存在,则创建它。 :用于删除变量。 计算表达式并将结果显示在页面上。 其中,value指定表达式或变量。21、条件标签 /条件为true时,执行的代码 test指定条件,通常使用EL方式进行条件的运算:$条件运算,运算符可以使用、=,也可以使用and,or,还可以使用It、eq、gt等;var指定变量,并把El运算结果赋值给改变量。scope指定变量的范围。22、迭代标签 /循环体内容 其中,var指定变量的名称;items指定要遍历的对象集合,可以是数组、list和Map。23、隐式对象El隐式对象是一组标准的类,JSP容器向用户提供类中的方法和变量。在El中常用的隐式对象和它们在功能上的区别如下: 隐式对象作用域访问对象 参数访问对象 JSP隐式对象 pageScope param pageContext requestScope paramValues sessionScope applicationScopeJSP标准动作和JSTL中的通用标签里都同时指定它的范围,共4种:page、request、session、application相对应的对象为pageScope、requestScope、sessionScope和applicationScope。pageScope:返回页面范围内的变量名,这些名称已映射至相应的值requestScope:返回请求范围内的变量名,这些名称已映射至相应的值,sessionScope返回session中的变量值。24,参数访问对象在JSP页面中,经常会进行接收其他页面或者Servlet传递过来的参数,El为我们提供了参数访问对象来获取这些参数值,如$param 返回客户端的请求参数的字符串值paramValues 返回映射至客户端的请求参数的一组值。25、JSP隐式对象JSP和EL有一个公共对象:pageContext。EL可以通过pageContext来访问JSP中其他的隐式对象(request、session等),如: $ pageContext.request.requestURIpageContext: 提供对用户请求和页面信息的访问。25、web服务在java方面使用XFire框架技术是一种十分简单的方法。XFire是一个免费的开源SOAP框架,它不仅可以极大方便地实现Web服务的环境,并且可以提供许多Web服务规范中的高级特征。首先要下载XFiresessionScope:返回会话范围内的变量名,这些名称已映射至相应的值applicationScope:返回应用范围内的变量,并将变量名映射至相应的值如果在获取变量值时,不使用作用域访问对象,系统就会按照page、request、session、application的顺序来查找。使用资源管理器在项目src目录下创建META-INF文件夹,并在该文件夹下创建xfire文件夹,然后在xfire文件夹下创建services.xml文件 CreditCard /CreditCard y2javaee.sg.ch09.ProcessCredit y2javaee.sg.ch09.ProcessCreditCard name 指定当前服务的名称,它会被客户端应用程序所使用,指定服务的名称空间指定元素所绑定的class类(接口),如果指定的是接口,那么就由来指定接口的实现类。XFire本身是基于Servlet的程序,为了确保应用程序能够访问到web服务,所以要对web.xml文件进行修改,添加如下代码: XFireServlet org.codehaus.xfire.transport.htt.XFireConfigurableServlet XFireServlet /servlet/XFireServlet/* XFireServlet /services*.do 所有以do结尾的请求全部派发给控制器(controller)层Java中的命名规则.NET中的命名规则表示层表示层包括JSP页面和对应的后台Servlet(或Struts的Action Bean和Form Bean代码),放在web包下业务逻辑层放在biz包下,类名(或接口名)后缀为Biz。Biz是business的缩写命名空间后缀为BLL数据访问层放在dao包下,类名(或接口名)后缀为DAO。Dao是Data Acess Object的简写 命名空间后缀为DAL实体对象放在entity包下命名空间后缀为Models $null=requestScope.msg?“”:requestScope.msg表示:只要给request设置了msg属性就显示报错信息。可以简写成:$null=msg?”:msg26、主流框架技术1、Struts框架Struts是最早的Java开源框架之一,也是现在Java Web框架的事实标准,现有的绝大多数Java Web应用程序都是基于Struts框架构建的。Struts是MVC设计模式一个优秀的实现。Struts定义了通用的Controller(控制器),通过配置文件(一般是struts-config.xml)隔离了Model和View,以Action的概念对用户请求做了封装,使代码更清晰易读。Struts还提供了自动将请求的数据填充到对象中以及页面标签等简化编码的工具。Struts使开发大型Java Web项目成为可能。2、Hibernate框架Hibernate是一个优秀的持久化框架,负责简化将对象数据保存到数据库中或从数据库中国读取数据并封装到对象的工作。通过简单配置和编码即可替代JDBC繁琐的程序代码。Hibernate处理数据库的操作的方式代表了当前的趋势。3、Spring框架Spring的出现改变了Java世界。它的目标是使现有的JavaEE技术更易用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。它主要作为依赖注入容器和AOP实现存在。还提供了声明式事务、对DAO层的支持等简化开发的功能。Spring还可以很方便地与Struts、Hibernate等技术集成。大名鼎鼎的SSH集成框架指的就是Struts+Spring+Hibernate的技术框架。使用这个集成框架将使我们的应用程序更加健壮、稳固、轻巧和优雅。这也是当前最流行java技术框架。4、DWR框架DWR是一个Ajax框架,使Ajax开发更加轻松。Ajax是一种通过javascript代码异步请求服务器资源的技术,可以在不刷新当前页面的情况下取的服务器端的最新数据并更新页面显示。基于Struts开发的应用由3类组件构成:控制器组件、模型组件和视图组件。控制器组件包括ActionServlet,是Struts的核心控制器,还包括自定义的action类(AddAction),代表客户的一个操作(比如:登录或注册),自定义的Action类继承自Struts提供的org.apache.struts.action.Action。模型组件并不由Struts提供,一般由普通的接口和JavaBean充当,需要我们自己编码实现。视图组件一般由JSP实现,还包括自定义的ActionForm类(AddForm)和Struts标签。自定义的ActionForm类用于封装request中的数据,Struts可以将request中的数据自动填充到ActionForm类中,以避免繁琐的request.getParameter()和类型转换代码。自定义的ActionForm类继承自Struts提供的org.apache.struts.action.ActionForm。Struts还提供了一系列自定义标签以简化页面的编码。ActionServlet在系统启动的时候加载struts-config.xml配置文件。struts-config.xml配置文件中包含与Action、ActionForm、页面转发等相关的配置信息。可见,Struts只是一个应用程序的“半成品”,但已经约束了在其基础上构建应用程序的规则,并给我们的代码开发工作提供了便利。要使用Struts首先要将Struts库文件添加到项目,然后在WEB-INF下建立struts-config.xml配置文件,组后,在web.xml中正确配置ActionServlet。这些是使用Struts开发准备工作,要再正式开发开始前做好。每个Action中都必须实现一个execute方法。Public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)Request代表客户请求对象,response参数是响应对象;form参数中封装了页面传入的数据,mapping参数封装了页面转发的配置的信息。方法返回类型ActionForward,表示执行完操作后将要转发到的JSP页面。27、ActionServlet是Strut最核心的组件。在web容器启动的时候,ActionServlet被初始化,加载strut-config.xml配置文件(这也是为什么当struts配置文件修改的时候需要重新启动web容器)。Struts处理请求的过程如下:、当客户端浏览器发起请求到Action时,ActionServlet首先对请求进行一系列的处理:根据请求的路径和配置信息找到对应的Action Bean和Form Bean,比如前面加法器的例子,当提交表单发送http:/localhost:8080/zf2/add.do请求到服务器的时候,ActionServlet就会根据Struts配置信息查找path属性为“/add”的ActionBean,于是找到AddAction:并得知Action的name属性为“addForm”,于是找到AddForm的实例(如果不存在就创建)、在确定将要调用的Action Bean和对应的Form Bean后,就将请求中包含的值填充到Form Bean中(Action可以不关联任何ActionForm,所以这一步是可选的)。在调用Action的execut方法钱,ActionServlet还需要准备好ActionMapping参数,ActionMapping中包含了该Action的配置信息。、然后Struts将请求分发至相应的Action Bean处理,ActionMapping参数、ActionForm参数、request和response都作为参数传给处理请求Action Bean的execute方法。Action调用业务逻辑方法,得到返回值,并返回ActionForward对象。、控制权重新回到ActionServlet,ActionServlet根据Action返回的ActionForward对象转发到相应的JSP页面。、处理结果返回给浏览器。需要注意的是:1、 ActionServlet将控制权转到页面的时候采用的是转发的方式(request.getRequestDispatcher(url).forward(request.response);),所以转发到页面的request和Action方法参数中的request是同一个请求,数据可以通过request对象的attribute属性传递。ActionForm根据对应Action的scope属性配置不同而生命周期有所不同。一般情况下,scope属性设为request,则每次请求开始时ActionServlet创建新的ActionForm的值,在页面中取出。 在框架中,定义了许多类或对象,他们能够自动完成一些功能,这些类都会固定的执行一些方法,然后只要我们找到这些方法,我们就能够丰富它的功能,或改变它的功能。 Struts运行过程Struts-config.xml控制器ActionServletActionFormAction模型javabean客户浏览器视图JSP28、DispatchAction通常一个Action只能完成一个一种业务操作,通过扩展org.apache.struts.actions.DispatchAction实现的Action类可以完成一组相关的几种业务操作。扩展自DispatchAction的Action类不必定义execute方法,而是创建一些实现实际业务操作的方法,如doadd()、dosubstract等,但这些业务方法的传入参数和返回值和普通Action类的execute方法 与普通Action的配置基本一致,只是多了一个parameter属性。这个属性告诉struts从请求对象中找名称为operate的参数值,参数值是什么就到CalcAction中执行同名的方法。29、Struts错误处理机制使用MyEClipse工具给项目增加S投入特色支持时,将自动增加一个名称为ApplicationRperties资源文件到项目中,并在、struts-config.xml中配置了对这个属性文件的引用。 Parameter=”com.appache.jb.applicationResources”/ 为了支持国际化,Struts的报错信息通过先在资源文件中定义然后再引用的方式实现。applicationResources文件内容:errors.header=errors.footer=error.validate.number=divisor cannot be 0.错误信息将显示为 divisor cannot be 0.可以使用Resourcebundle Editor属性编辑插件编辑属性文件。2、 修改对应Action代码Public class CalcAction extends DispatchAction Public ActionForward doDivide() calcForm myForm=(CalcForm)form; ActionMessages errors=new ActionMessages(); If(myform.getNum2()=0) Errors.add(“error2”,new ActionMessage(“error.validate.number”);If(!error.isEmpty()Super.saveErrors(request,errors);Return mapping.findForward(“input”);Return mapping.findForward(“result”);首先定义ActionMessages类型的变量errors用于保存出错信息,根据业务逻辑进行判断,对出错的情况添加出错信息到errors中。语法如下:Errors.add(“error2”,new ActionMessage(“error.validate.number”);Error.validate.number对应到资源文件中的属性名称。Error2是出错信息名,在页面上显示错误时可根据名称来引用出错信息。对同一个名称,可以添加多个出错信息。如果不是需要单独指定错误信息,在页面里统一显示错误信息即可,则可以将错误信息添加到:ActionMessages.GLOBAL_MESSAGE名下,代码如下:Errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage(“error.validate.number”);最后,判断errors中是否有错误信息,如果有,则使用saveErrors方法保存错误信息到request对象中,并转发到页面上。3、 在页面上显示报错信息 我们使用Struts标签来显示错误信息,首先在页首声明标签。标签通过property属性指定引用的错误信息名,并且将资源文件中的error.header和error.foo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省西畴县2025年上半年事业单位公开遴选试题含答案分析
- 河北省兴隆县2025年上半年事业单位公开遴选试题含答案分析
- 河北省青县2025年上半年公开招聘村务工作者试题含答案分析
- 河北省滦南县2025年上半年事业单位公开遴选试题含答案分析
- 河北省井陉县2025年上半年公开招聘村务工作者试题含答案分析
- 2025版幼儿托管班安全责任合作协议范本
- 2025年二手房买卖合同代办与房产交易全程保障服务合同
- 2025年度酒店客房室内装饰设计与施工合同
- 2025年创城工程墙面粉刷施工经费合同书
- 2025年度军事演习专用柴油发电机租赁服务合同
- DB31/ 741-2020碳酸饮料单位产品能源消耗限额
- 2024生产安全事故应急预案
- 矿用电机车永磁电机驱动及能量回馈系统:技术革新与应用实践
- 医院后勤管理的安全风险防控措施
- 2025-2030木薯市场发展现状调查及供需格局分析预测研究报告
- 小儿推拿店员合同协议
- 雾化吸入技术课件
- 医疗废物管理知识培训课件
- 商业地产策划案例(购物中心)
- 银行押运人员管理制度
- 信息系统授权制度
评论
0/150
提交评论