




已阅读5页,还剩84页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ArcGIS Server 9.2 for Java 讲座861、前言-为什么我们选择JSF,而不是其它framework 12、ArcGIS Server Java开发 JSF基础 23、ArcGIS Server Java ADF开发的JSF知识介绍 54、ArcGIS Server 开发初步 - 自定义工具 75、使用图片和TrueType字体进行标注 106、Server Java讲座-扩展Tasks框架 137、Server Java 开发实战-自定义command 198、ArcGIS Server Java 讲座-ADF 体系结构 第一部分 219、ArcGIS Server JAVA讲座-实现后台JSF Bean和前台Javascript的联动 2410、ArcGIS Server JAVA讲座 -AJAX基础 2511、ArcGIS Server JAVA开发讲座- ADF中的Ajax函数 2712、ArcGIS Server Java讲座-如何在用JSF在服务器端处理Ajax请求 2913、ArcGIS Server Java讲座-利用Ajax得到当前地图的比例尺(服务器端) 3214、ArcGIS Server Java讲座-用Ajax得到地图比例尺(客户端代码) 3315、ArcGIS Server JAVA 讲座 自定义Functionality 3516、ArcGIS Server Java讲座-用自定义functionality实现用户权限控制 3717、Server Java讲座-扩展Tasks框架 4218、ArcGIS Server Java讲座-自定义Tools开发 4819、ArcGIS Server Java讲座空间查询和高亮显示的实现 5220、Server Java 自定义开发Network Analysis 5421、ArcGIS Server开发控制图层是否可见 5922、航线查询问题Server Java的实现方法 5923、ArcGis 航线查询完全例子 6424、ArcGis Server 中 如何在Task中实现 下拉列表和 checkbox 和 radiobutton.(完整例子) 7325、ArcGIS Server开发标注 7426、ArcGIS Server Java开发-Born for SOA系列 前言 7527、ArcGIS Server Java开发-Born for SOA系列 Web Service基础 7528、ArcGIS Server Java讲座:Born For SOA-Server对于SOAP的支持 8129、Server Java开发-Born for SOA系列 通过代理类访问ArcGIS Server Web Service 841、前言-为什么我们选择JSF,而不是其它framework 在正式开讲之前,我们来探讨一下为什么要使用JSF来实现SERVER ADF,这也是很多开发商跟我讨论时经常会问到的问题。 世界上有300种Java的framework,这个数字是我几个月前听到的,现在可能已经不止这个数了。我曾经用过的framework包括Structs,Hibernate,Spring。这些framework不但能加速开发,而且会带来全新的程序设计理念。我当时的感觉是:原来程序还可以这样写! 当然,这些framework都是开源免费,你不用担心自己的良心受到谴责,也不用担心比尔盖茨半夜敲门收钱。 在这300多种framework中,ESRI为什么选择了JSF?各个framework有各个framework的好处。JSF最大的优点就是:像 Swing 和 AWT 一样,JSF 是一个可以提供一组标准的、可重用的 GUI 组件的开发框架。原因之一: 行为与表示的完全分离。 行为和表现不分离的一个典型例子是普通的JSP 技术,这一技术很好,因为很容易在 HTML(和类 HTML)页面中混合 Java 代码。这样我们就可以使用强大的Java API的功能。当然,很明显的坏处是行为表现黏合在一起。而且代码不容易重用。这让我想起刚使用JSP技术时,在文本编辑器下写JSP页面,读写数据库,并且在同一个页面上显示出来的痛苦回忆。 Model1架构的出现使开发人员可以用javabean的方式进行开发,舒服多了。当然,还有更好的。 这就不得不提到著名的MVC结构,(MVC) model-view-controller架构提供了一系列的设计模式,这些模式让你可以轻松地应用于程序地开发,特别是有界面程序的开发。现在又有多少的程序是没有界面的呢? Model包装了商业逻辑,也包含了数据持久的代码,包括存取数据库或者存取文件。Model最好不要跟View有任何关系,它最好不要知道谁将显示结果,是一个Swing界面,还是JSF界面,还是普通的JSP界面。为了做到这一点,事先的规划要花一些时间,但是相信我,这些花的时间带来的价值将超过你的想象。如果设计得当,许多用ArcGIS Engine开发的代码可以轻松在Server中使用,不需要修改任何代码。.net也是一样。 View只用来显示显示逻辑,不能有任何商务逻辑。controller是view和model的桥梁,它和model进行交互,并且把结果显示在Model中。显示页面的选择也由controller进行选择。我会在后面的讲座中详细解释JSF中的Controller的实现。 Structs,Spring都实现了MVC的架构。但是它们都没有像JSF这样,提供一个事件驱动的组件对象模型。大家可以想一想,一个平常在HTML中使用的标签, ,在JSF框架中变成了一个组件,这个组件还可以有事件,而且可以对这个事件可以进行编程。这是多么得激动人心啊! GIS程序需要和用户进行良好地交互,选择一个事件驱动的framework,可以更加容易编程和实现。 原因之二: 事件容易捆绑到服务器端代码。JSF提供了多个事件驱动的GUI控件, 比如最最常见的command button。这些command button会产生事件,我们有机会对事件进行编程;我在以前的讲座中曾经讲过,ArcGIS Server的MapControl和command button是兄弟,他们都继承自ponent.UICommand;是不是感觉很奇妙啊?继承自UICommand的原因是要利用UICommand的很多事件,对鼠标在Map Control上的动作,比如放大,缩小,需要产生事件,这些事件提交到相应的监听器,监听器会对事件进行处理。有关于MapControl的问题先提这些,在后面的讲座中我会详细解释。 举一个简单的例子吧,一个最简单不过的fullextent工具,如果我自己来写,可以写成这样:这个按钮,用来缩放到全图,它的监听器是绑定到getMapBean的getFullMap方法,在该方法里面,我会将地图的大小缩放到全图范围。代码我会稍后贴上来。这就是JSF的事件捆绑到服务器代码的功能。普通的一个button,点击事件可以映射到后台Bean的某一个方法,在后台方法里面执行商业逻辑,进行数据存取。这个概念跟普通的Swing程序的事件和监听器机制十分类似,Java程序员们看了肯定倍感亲切。注意,刚才这个button没有利用任何ADF的类,在我们的ADF中,所有要建大厦的材料都已经给您准备好,fullExtent功能只需要三行代码即可实现。事件容易捆绑到服务器端代码,这是ESRI选择JSF作为我们ADF底层的另外一个重要的原因。2、ArcGIS Server Java开发 JSF基础 有很多开发人员问我,如果我已经有了一个JSP的Application,为了使用JSF,为了使用我们新版的ArcGIS Server的Java ADF,我需要重新修改写我的程序以让它们适应整个JSF框架么?这是一个很有意思的问题,我可以想象出大家头皮发麻,左右为难的感觉,这也引出了今天的话题,Servlet容器是如何对JSF的程序进行处理的呢? 随便找一个JSF的Application,可以是我们的ArcGIS Server的Sample,也可以是任何您从网上下载的JSF例子,打开web.xml文件,你就可以看到该文件里面有如下的servlet映射: Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet *.jsf 这是Java程序员最熟悉不过的Servlet配置了,该Servlet映射是什么意思呢?将所有对后缀名为jsf的请求,都交由javax.faces.webapp.FacesServlet来处理。哦,另外插一句,JSF的标准是公开的,如果你觉得这个FacesServlet不好,你大可以自己写一个JSF处理Servlet。将所有对jsf的请求自己来处理。事实上,已经有人这么做了,这就是Myfaces,可以参考Apache的网站。言归正转,如何将JSF的应用集成到已经有的应用程序中呢,您一定已经想到了。事实上事情很简单,在访问某个JSF页面的时候,映射到某个目录即可。这个目录在web.xml进行了设置,比如下面的配置就可以把所有的对faces的请求,让Face Servlet来处理: Faces Servlet /faces/* 所以,如果你在根目录了放了一个hello.jsp页面,这个jsp页面使用了JSF框架,那么你在访问这个jsp页面时用http:/servername/faces/hello.jsp就可以了,你的容器会把这样的请求提交Face Servlet来处理,这个时候,就轮到Face Servlet来大显身手了,它会忠实地执行你的请求。 JSF的Managed Bean是保存在session中的,所以你在JSF页面和普通JSP之间切换页面的时候,不会丢失信息,反过来也一样。JSF自己有自己的Page Navigation系统,但是它仍然可以跟普通的JSP页面互相切换,我们在后面的讲座中会讲到。 所以如果你已经存在的一个项目,想上我们的ArcGIS Server,利用其基于JSF的ADF进行开发,也是完全可以的。当然,新的应用最好用JSF框架开发,开始时可能需要一点时间去学习,对于你后面会用到的强大的JSF的功能,这些投资是完全值得的。 欢迎大家进入美妙的JSF的世界。 了解了Servlet是如何处理你的JSF请求的,那么接下去我们来看看,让JSF程序跑起来需要什么必要条件,一个Servlet容器是必需的,这个一般取决于公司给我们配什么,或者客户要求什么。一般免费的好选择是Tomcat,价格便宜量又足,我们大家都用它。当然如果项目大,经费充足,IBM的J2EE容器Websphere和Bea公司的 Weblogic也是一个好选择。选用大公司J2EE容器有一个好处,即使三更或者五更出了问题,你照样可以拍着桌子让他们的工程师过来帮你解决问题,如果你用我们ESRI的软件,你也可以这样;而用免费的软件三更出了问题只有我们自己出马了,当然,google和百度在这个时候看在点击率的份上,还是可以拉我们一把的。除了一个好的容器,还需要一个JSF的实现,用SUN的Reference Implementation总是不会错的,人家是标准的制定者嘛,名字也起做“参考实现”,写来让你参考的。也可以选择功能更加强大的Myfaces。ESRI的ArcGIS Server ADF遵循标准的JSF,所以ADF可以跑在Sun 的JSF实现,或者Myfaces上。我们这次所有的教程都是基于sun的标准的JSF实现。还有其它的JSF实现,大家可以根据自己的爱好,择优选择之。如果你觉得都不好用,大可以参考标准自己写一个实现,除了你的老板(要投入更多的开发经费)和你的team (要干更多的活) ,是没有人有意见的。如果您像我一样选择了SUN的参考实现,那么去SUN的网站上去下载一个JSF的开发包吧,如果不想下载,随便找一个Server Java ADF的例子,在WEB-INF/lib目录里面有JSF的包,名为jsf-api.jar和jsf-impl.jar的两个包就是;注意那个JSP的标准标签库jstl.jar,把它跟jsf的包放在一起,你不一定用标准标签库,但是JSF用到了它。我把JSF的doc放在这里给大家下载,因为这个东西实在不好找,有人知道好的下载URL,可以在这里贴一个。把这些包放在一个web application的lib目录里面有,你的程序你可以使用JSF的强大功能了。让我也来俗气一下,写一个简单的hello world作为今天的结束吧。注意在你的web application里面的web.xml配置文件添加了Face Servlet的声明和URI映射。 欢迎来到ArcGIS Server ADF 世界 保存后访问Http:/servername:port/faces/hello.jsp即可,如果页面能够出来,那么恭喜您,您已经迈入了JSF wonderland的大门。3、ArcGIS Server Java ADF开发的JSF知识介绍ArcGIS Server 的Java ADF 开发使用到了JSF的知识,下面结合ArcGIS Server的开发,介绍一下JSF的知识Struts和JSF/Tapestry都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的MVC模式框架。首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Command模式,每个继承Action的子类都必须实现一个方法execute。在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为application event,application event和component event相比是一种粗粒度的事件。struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。而这种情况使用JSF就可以方便实现,#login.userId表示从名为login的JavaBean的getUserId获得的结果,这个功能使用struts也可以实现,name=login property=userId 关键是第二行,这里表示如果userId的值改变并且确定提交后,将触发调用类UserLoginChanged的processValueChanged(.)方法。JSF可以为组件提供两种事件:Value Changed和 Action.相当于struts中表单提交Action机制,它的JSF写法如下:从代码可以看出,这两种事件是通过Listerner这样观察者模式贴在具体组件字段上的,而Struts此类事件是原始的一种表单提交Submit触发机制。如果说前者比较语言化(编程语言习惯做法类似Swing编程);后者是属于WEB化,因为它是来自Html表单。基本配置Struts和JSF都是一种框架,JSF必须需要两种包JSF核心包、JSTL包(标签库),此外,JSF还将使用到Apache项目的一些commons包,这些Apache包只要部署在你的服务器中既可。JSF包下载地址:/j2ee/javaserverfaces/download.html选择其中Reference Implementation。JSTL包下载在/site/downloads/downloads_taglibs-standard.cgi所以,从JSF的驱动包组成看,其开源基因也占据很大的比重,JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿。上述两个地址下载的jar合并在一起就是JSF所需要的全部驱动包了。在ArcGIS Server的项目下的lib目录下有相关的库文件如下:commons-beanutils.jar commons-collections.jar commons-digester.jar commons-lang-2.0.jar commons-logging.jar jsf-api.jar jsf-impl.jar jstl.jar standard.jar与Struts的驱动包一样,这些驱动包必须位于Web项目的WEB-INF/lib,和Struts一样的是也必须在web.xml中有如下配置:Faces Servletjavax.faces.webapp.FacesServlet1 Faces Servlet*.faces 这里和Struts的web.xml配置相似,简直一模一样。正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml配置文件:/index.jsplogin/welcome.jsp usercom.corejsf.UserBean session 在Struts-config.xml中有ActionForm Action以及Jsp之间的流程关系,在faces-config.xml中,也有这样的流程,我们具体解释一下Navigation:举例:如果在mapviewer.jsp中有一个事件:action的值必须匹配form-outcome值,上述Navigation配置表示:如果在index.jsp中有一个login事件,那么事件触发后下一个页面将是welcome.jspJSF有一个独立的事件发生和页面导航的流程安排,这个思路比struts要非常清晰。UI界面JSF和Struts一样,除了JavaBeans类之外,还有页面表现元素,都是是使用标签完成的,Struts也提供了struts-faces.tld标签库向JSF过渡。使用Struts标签库编程复杂页面时,一个最大问题是会大量使用logic标签,这个logic如同if语句,一旦写起来,搞的JSP页面象俄罗斯方块一样,但是使用JSF标签就简洁优美:如果authenticationBean中inboxAuthorized返回是假,那么这一行标签就不用显示,多干净利索!缺点:JSF这类框架面临的最大问题,它大量的使用了标签库,目前流行的网页制作工具(如deamweaver)又没有提供足够的支持,所以只能依靠挖掘dataTable标签的各个属性,并且大量依赖css才能实现页面的美化。如果java世界能有一个强大的JSF IDE,能够提供一样的能力,那么JSF也许会更容易流行。4、ArcGIS Server 开发初步 - 自定义工具 在Server生成的Web App中,页面的工具按钮可以分为两类:l命令(Command):A command is an element on a JSP page that triggers a server side action without any further interaction on the client. An example of a command in the sample application is the zoom to full extent button. Once the user clicks the button, a method is called on the server。不与用户通过界面交互。l工具(Tool):A tool has further client side interaction before calling a method on the server. An example of a tool in this application is zoom to rectangle. Once the user clicks the button, drags a rectangle over the map indicating the area they want to zoom to, and then a method is called on the server。与用户通过界面交互。一、继承接口public Interface com.esri.adf.web.faces.event.MapToolAction void execute(MapEvent event);lMapToolAction 接口代表由MapControl控件事件所激活的服务器端工具,系统已预设继承此接口的类:PanToolAction(平移),ZoomInToolAction(放大),ZoomOutToolAction(缩小)lMapControl 创建MapEvent 事件并将其传给继承接口的工具类的 execute(MapEvent) 函数,The business logic for the tool should be implemented in this method according to the event。二、工具在JSP页面上的tag表达如下:三、注册managed-bean将所写的类作为一个managed-bean注册到faces-config.xml,并用WebContext实例作为其初始化参数:ToolClasscom.brsc.MyToolClassrequest webContext #mapContext四、注释:1 JSP的Tag中serverAction写入继承MapToolAction接口的类(全称),代表对于此工具服务器端要进行的操作 execute(MapEvent event)用户也可以使用任何Managed Bean的函数作为工具对应的方法,只要这个函数使用如下声明:public void anyMethodName(MapEvent event)JSP标签使用serverMethod ,如下:这样,MapControl也会将适当的MapEvent 事件传入此函数。2 JSP的Tag中clientAction写入客户端鼠标选择的方式:EsriMapPoint 点选EsriMapLine 线EsriMapRectangle 四边形EsriMapCircle 圆EsriMapOval 椭圆EsriMapPolyline 多线EsriMapPolygon 多边形EsriMapPan 移动 对应Server端的几何形状(附图)3 MapEvent代表客户端进行操作产生的事件,一般会用到MapEvent的public WebGeometry getWebGeometry()函数来得到客户端输入的几何形状/Returns the WebGeometry in screen coordinates corresponding to /the client action performed by the user. 来获得客户端产生的形状,这些Geomentry一般都是screen坐标,需要用toMapGeometry(WebMap)转换为 地图坐标 。一般操作如下:public void myToolMethod(MapEvent event) WebContext ctx = event.getWebContext(); WebGeometry screenGeom = event.getWebGeometry(); WebGeometry mapGeom = screen.toMapGeometry(ctx.getWebMap(); .4 JSP的Tag中clientPostBack l 设置为false,刷新地图,并且刷新页面; l 设置为true,只刷新地图,不刷新页面;5、使用图片和TrueType字体进行标注直奔主题吧,接上个主题的讲座的内容,讲讲如何用图片进行标注。在前面一个讲座我们已经说明,如何对选中的物体进行高亮显示。而且这一部分工作是在ADF这一端完成的。那么有的时候,我们进行高亮显示的时候,不仅仅希望只是设置颜色,我们希望能够用图片或者truetype字体进行标注。比如在犯罪地点放一个坏人之类的功能。我们来看看实现原理,关键是两个类,WebTrueTypeMarkerSymbol和WebPictureMarkerSymbol,没啥好说的,直接用代码来说明吧:先来看看普通的点标注: WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(arg0.getWebContext().getWebMap();WebSimpleMarkerSymbol markers =null;markers = new WebSimpleMarkerSymbol();markers.setAntialiasing(true);markers.setColor(255,0,0);markers.setWidth(8);markers.setOutlineColor(255,0,0);markers.setMarkerType(WebSimpleMarkerSymbol.CIRCLE);markers.setPicture(bytInput);GraphicElement ge=new GraphicElement();ge.setGeometry(pt);ge.setSymbol(markers);WebGraphicsgraphics=arg0.getWebContext().getWebGraphics();graphics.addGraphics(ge);arg0.getWebContext().refresh();注意webgraphicsymbol的setPicture方法的参数不是图片目录,而是图片的二进制数组,所以需要用文件IO把图片读取进来。当然,如果用户访问量很大,线程就不安全了,大家可以在application启动时进行读取,放在context的某个attribute里面。我原来认为是通过设置路径方式实现,这样又可能可以搞定gif图形的闪烁,但是现在实验结果是不行。设置图片标注的代码如下:WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(arg0.getWebContext().getWebMap();/图片在servelet容器里面目录 String picPath=FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()+imagesangle.gif;File myFile = new File(picPath); FileInputStream myStream= newFileInputStream(myFile); BufferedInputStream buf = newBufferedInputStream(myStream);byte bytInput = newbyte(int)myFile.length();buf.read(bytInput, 0, (int) myFile.length();buf.close();myStream.close();WebPictureMarkerSymbol markers=newWebPictureMarkerSymbol(); markers.setPicture(bytInput);GraphicElement ge=new GraphicElement();ge.setGeometry(pt);ge.setSymbol(markers);WebGraphics graphics=arg0.getWebContext().getWebGraphics();graphics.addGraphics(ge);arg0.getWebContext().refresh();在jsf文件里面添加如下代码,调用图片标注工具,进行测试:图片标注的结果如下:用图片做markSymbol我们也可以使用TrueType字体里面的矢量字体对图形进行符号化显示,这也是我们经常使用的方法,具体代码如下:webMap=arg0.getWebContext().getWebMap(); WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(webMap); WebTrueTypeMarkerSymbol trueMarkerSymbol=new WebTrueTypeMarkerSymbol(); /注意使用系统里面已经安装的字体 trueMarkerSymbol.setFontName(ESRITransportation & Civic);/设置索引 trueMarkerSymbol.setCharacterIndex(8); trueMarkerSymbol.setFontColor(255,0,0); trueMarkerSymbol.setFontSize(20); trueMarkerSymbol.setFontStyle(WebTrueTypeMarkerSymbol.BOLD);GraphicElement ge=new GraphicElement(); ge.setGeometry(pt); ge.setSymbol(trueMarkerSymbol);WebGraphicsgraphics=arg0.getWebContext().getWebGraphics(); graphics.addGraphics(ge);arg0.getWebContext().refresh();把上面的代码放在一个点击工具里面,在jsf文件中用如下代码进行调试:TrueType字体标注的结果如下图所示: 6、Server Java讲座-扩展Tasks框架 Tasks框架是一个很有意思的东西。如果你对Tasks框架还没有概念,你可以参考一下web map application那个Sample,左边浮动的放大工具,查询工具都是用Tasks框架构成。有人会问,既然已经有了command和tools,为什么还需要tasks呢?事实上tasks的目的是不同的;我们可以看一下web map application,可以看到,相同类型的button和toos组合在一起,组成一个逻辑单元,这就是tasks的选择条件。我们来看看如何编写Tasks,编写Tasks是非常有意思的事情。Tasks跟tools一样,也是一个普通的Java类即可,这个Java类可以从Object直接继承。请看下面的Task的例子:1publicclassJSTasks2publicvoiddoSomething()3System.out.println(Taskbuttonclicked.);456这个tasks实在是简单吧,看看怎么部署上去,我们在xml文件中做如下定义:12jsTask3com.cj.ucdemo.JSTasks4session5这个配置文件也非常简单,那么看来所有的诀窍在与如何在JSP页面里面使用它。我们来看看:1添加一个task标签,把这个标签的mapId值指向地图控件”Map0”,讲它的值指向我们刚才定义的Managed Bean。访问一下,大家看看下面的浮动窗口结果:是不是很令人惊奇啊?事实上我们这个Bean中只有一个方法,但是Tasks框架聪明地把这个方法名给提取出来,作为button的名字。你点击一下这个按钮,在后台就可以看到执行了这个方法,打印出了一条信息。简单的说:方法就是按钮!有了上个Task的基础, 我们来看其它的Task就驾轻就熟了。事实上,整个Task就是一个类,Task的Caption就是这个类的类名。里面的每一个Public方法都是Task浮动条上的一个按钮。那么参数怎么办呢?我们来加一个参数,并且加上一个它的get方法和set方法:1Stringparameter;2publicStringgetParameter()3returnparameter;45publicvoidsetParameter(Stringparameter)6this.parameter=parameter;7看看我们的task工
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB14-T 1585-2025 葡萄绿枝嫁接技术规程
- 高中语文人教版必修二《诗经-氓》课件
- 餐饮店股权转让与供应链优化协议
- 水利枢纽采石场租赁合同示范文本
- 2025年公共关系与传播学考试试题及答案
- 2025年国际贸易与经济合作试卷及答案
- 2025年城市规划与设计专业考试真题及答案
- 湖北省武汉市武昌区2025届高三下学期5月质量检测(三模) 数学试题【含答案】
- 郴州环保科技公司劳动合同管理
- 农村地区柴油发电设备采购与安装服务合同
- 项目延期申请表
- 体系文件编号规则
- 患者突发昏迷应急预案演练脚本-
- 计算机应用基础-终结性考试试题国开要求
- 2023年全国统一高考真题物理试卷(新课标ⅰ)(含答案及解析)
- 2023年05月四川省广安市司法局公开招考2名劳务派遣制司法行政辅助人员笔试题库含答案解析
- 公司“三基”工作检查评比细则(抢维修管理)
- 《安装条》浙江省建筑设备安装工程提高质量的若干意见
- 分布式系统复习题与答案
- 甘肃水资源概况
- 运动员简历模板
评论
0/150
提交评论