




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
tomcat6.0如何配置虚拟目录?tomcat6.0不能列目录?一、 具体配置方法如下:找到TOMCAT的安装目录,再打开conf目录下的server.xml.将元素〈Contextpath="/testservlet"docBase=〃D:\testservlet〃/>加入元素<host></host>中间。(不清楚话,可以参考XML这门语言,非常有用)D:\testservlet为实际目录,而/testservlet为虚拟目录,在地址栏敲入http://localhost:8080/testservlet实际访问的目录为D:\testservlet,我们给D:\testservlet做了一个映射。二、 问题描述:以前的tomcat5.5时比如说当访问目录test时,它会把test目录下的文件列出来,但是在tomcat6.0中就提示没有!要把全名输入了才行,如http://locahost/test/tes.jsp才能正常显示,但如果是http://localhost/test它就提示没有,这是不是配置上的问题!或者是6.0故意这样做的?三、 解决方案:5.5的也是关闭了目录浏览功能的,你说的应该是5.0的,这个主要是处于安全性的考虑。要是你的目录下没有默认首页,那你的这个目录下的文件列表就泄露给别人了。这个是个配置选项,你可以手动打开,开发时有用,但是生产环境就最好关闭。配置选项在TOMCAT/conf/web.xml中找到<servlet><servlet-name>default</servlet-name><servlet-class〉org.apache.catalina.servlets.DefaultServlet</servlet-class〉<init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet>将其中的<init-param><param-name>listings</param-name><param-value>false</param-value></init-param>设置改为true即可解决此问题Tomcat6.0连接池配置Tomcat6.0连接池配置1.配置tomcat下的conf下的server.xml中的host标签中添加连接池配置:<Contextpath=〃/hrms"docBase=〃hrms"debug二〃5〃reloadable=〃true"crossContext=〃true〃>1.<Resourcename=〃jdbc/sql〃2. auth=〃Container”3. type=〃javax.sql.DataSource〃4. driverClassName=〃com.microsoft.jdbc.sqlserver.SQLServerDriver"5. url=〃jdbc:microsoft:sqlserver://localhost:1433;databasename二hrms〃6. username=〃sa〃7. password="123456〃8. maxActive="100〃9. maxIdle="30"10. maxWait="10000"/></Contxt>2.配置你的应用下的web.xml中的web-app标签之间加入:1.<resource-ref>2. <description>DBConnection</description>3. <res-ref-name>jdbc/sql</res-ref-name>4. <res-type>javax.sql.DataSource</res-type>5. <res-auth>Container</res-auth>6.</resource-ref>3.把连接数据库的第三方驱动放到common/lib下面就ok了4.测试程序我就不写了24.Tomcat5.5x连接池配置26.方式一、全局数据库连接池1、通过管理界面配置连接池,或者直接在tomcat\conf\server.xml的GlobalNamingResources中增加<Resourcename=〃jdbc/mydb"type=〃javax.sql.DataSource”password=〃mypwd”driverClassName=〃com.microsoft.jdbc.sqlserver.SQLServerDriver”maxIdle=〃2〃maxWait=〃5000〃validationQuery=〃select1"username=〃sa〃url=〃jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb”maxActive=〃4〃/>2、在tomcat\webapps\myapp\META-INF\context.xml的Context中增加:<ResourceLinkglobal=〃jdbc/mydb〃name=〃jdbc/mydb〃type=〃javax.sql.DataSource〃/>这样就可以了。方式二、全局数据库连接池1、同上2、在tomcat\conf\context.xml的Context中增加:<ResourceLinkglobal=〃jdbc/mydb〃name=〃jdbc/mydb〃type=〃javax.sql.DataSource〃/>方式三、局部数据库连接池只需在tomcat\webapps\myapps\META-INF\context.xml的Context中增加:<Resourcename=〃jdbc/mydb〃type=〃javax.sql.DataSource”password=〃mypwd〃driverClassName=〃com.microsoft.jdbc.sqlserver.SQLServerDriver”maxIdle=〃2〃maxWait=〃5000〃validationQuery=〃select1"username=〃sa〃url=〃jdbc:microsoft:sqlserver://localhost:1433;DatabaseName二mydb〃maxActive=〃4〃/>参数说明:driveClassName:JDBC驱动类的完整的名称;maxActive:同时能够从连接池中被分配的可用实例的最大数;maxIdle:可以同时闲置在连接池中的连接的最大数;maxWait:最大超时时间,以毫秒计;password:用户密码;url:到JDBC的URL连接;user:用户名称;validationQuery:用来查询池中空闲的连接。以上三种方式在tomcat5.5.4下都可以。另外,sqlserver的jdbcdriver是从微软网站上下载的sqlserverjdbc(sp3)。50.tomcat5.0连接池配置在tomcat的下面路径(Tomcat\conf\Catalina\localhost)下建一个xml文件,内容如下<Resourcename=〃jdbc/test〃auth=〃Container〃type=〃javax.sql.DataSource〃/>
54.<ResourceParamsname=〃jdbc/test〃>55.〈parameter〉56.<name>factory</name>57.<value>mons.dbcp.BasicDataSourceFactory</value>58.</parameter>59.<!--MaximumnumberofdBconnectionsinpool.Makesureyou60.configureyourmysqldmax_connectionslargeenoughtohandle61.allofyourdbconnections.Setto0fornolimit.62.-->63.<parameter>64.<name>maxActive</name>65.<value>100</value>66.</parameter>67.<!--MaximumnumberofidledBconnectionstoretaininpool.68.Setto0fornolimit.69.-->70.<parameter>71.<name>maxIdle</name>72.<value>30</value>73.</parameter>74.<!--MaximumtimetowaitforadBconnectiontobecomeavailable75.inms,inthisexample10seconds.AnExceptionisthrownif76.thistimeoutisexceeded.Setto-1towaitindefinitely.77.-->78.<parameter>79.<name>maxWait</name>80.<value>10000</value>81.</parameter>82.<!--MySQLdBusernameandpasswordfordBconnections -->83.<parameter>84.<name>username</name>85.<value>sa</value>86.</parameter>87.<parameter>88.<name>password</name>89.<value>test</value>〈/parameter〉<!--Classname for JDBC driver -->〈parameter〉<name>driverClassName</name><value>net.sourceforge.jtds.jdbc.Driver</value></parameter><!--Autocommit setting. This settingisrequiredtomakeHibernatework.Oryoucanremovecallstocommit().--><parameter><name>defaultAutoCommit</name><value>true</value></parameter><!--TheJDBC connectionurlforconnectingtoyourMySQLdB.TheautoReconnect=trueargumenttotheurlmakessurethatthemm.mysqlJDBCDriverwillautomaticallyreconnectifmysqldclosedtheconnection. mysqldbydefaultclosesidleconnectionsafter8hours.--><parameter><name>url</name><value>jdbc:jtds:sqlserver://url/filedb;charset=gb2312;autoReconnect=true</value></parameter><!--Recover abandoned connections --><parameter><name>removeAbandoned</name><value>true</value></parameter><!--Setthe number of seconds a dB connectionhasbeenidlebeforeitisconsideredabandoned.--><parameter><name>removeAbandonedTimeout</name><value>60</value></parameter><!--Logastack traceofthecodewhichabandonedthedBconnectionresources.-->〈parameter〉<name>logAbandoned</name><value>true</value></parameter></ResourceParams>使用JAVA中的动态代理实现数据库连接池作者通过使用JAVA中的动态代理实现数据库连接池,使使用者可以以普通的jdbc连接的使用习惯来使用连接池。数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的连接数据库对服务性能来讲是一个瓶颈,使用缓冲池技术可以来消除这个瓶颈。我们可以在互联网上找到很多关于数据库连接池的源程序,但是都发现这样一个共同的问题:这些连接池的实现方法都不同程度地增加了与使用者之间的耦合度。很多的连接池都要求用户通过其规定的方法获取数据库的连接,这一点我们可以理解,毕竟目前所有的应用服务器取数据库连接的方式都是这种方式实现的。但是另外一个共同的问题是,它们同时不允许使用者显式的调用Connection.close()方法,而需要用其规定的一个方法来关闭连接。这种做法有两个缺点:第一:改变了用户使用习惯,增加了用户的使用难度。首先我们来看看一个正常的数据库操作过程:intexecuteSQL(Stringsql)throwsSQLException{Connectionconn=getConnection();//通过某种方式获取数据库连接PreparedStatementps=null;intres=0;try{ps=conn.prepareStatement(sql);res=ps.executeUpdate();}finally{try{ps.close();}catch(Exceptione){}try{conn.close();//}catch(Exceptione){}}returnres;}使用者在用完数据库连接后通常是直接调用连接的方法close来释放数据库资源,如果用我们前面提到的连接池的实现方法,那语句conn.close()将被某些特定的语句所替代。第二:使连接池无法对之中的所有连接进行独占控制。由于连接池不允许用户直接调用连接的close方法,一旦使用者在使用的过程中由于习惯问题直接关闭了数据库连接,那么连接池将无法正常维护所有连接的状态,考虑连接池和应用由不同开发人员实现时这种问题更容易出现。综合上面提到的两个问题,我们来讨论一下如何解决这两个要命的问题。首先我们先设身处地的考虑一下用户是想怎么样来使用这个数据库连接池的。用户可以通过特定的方法来获取数据库的连接,同时这个连接的类型应该是标准的java.sql.Connection。用户在获取到这个数据库连接后可以对这个连接进行任意的操作,包括关闭连接等。通过对用户使用的描述,怎样可以接管Connection.close方法就成了我们这篇文章的主题。为了接管数据库连接的close方法,我们应该有一种类似于钩子的机制。例如在Windows编程中我们可以利用HookAPI来实现对某个WindowsAPI的接管。在JAVA中同样也有这样一个机制。JAVA提供了一个Proxy类和一个InvocationHandler,这两个类都在java.lang.reflect包中。我们先来看看SUN公司提供的文档是怎么描述这两个类的。publicinterfaceInvocationHandlerInvocationHandleristheinterfaceimplementedbytheinvocationhandlerofaproxyinstance.Eachproxyinstancehasanassociatedinvocationhandler.Whenamethodisinvokedonaproxyinstance,themethodinvocationisencodedanddispatchedtotheinvokemethodofitsinvocationhandler.SUN的API文档中关于Proxy的描述很多,这里就不罗列出来。通过文档对接口InvocationHandler的描述我们可以看到当调用一个Proxy实例的方法时会触发Invocationhanlder的invoke方法。从JAVA的文档中我们也同时了解到这种动态代理机制只能接管接口的方法,而对一般的类无效,考虑到java.sql.Connection本身也是一个接口由此就找到了解决如何接管close方法的出路。首先,我们先定义一个数据库连接池参数的类,定义了数据库的JDBC驱动程序类名,连接的URL以及用户名口令等等一些信息,该类是用于初始化连接池的参数,具体定义如下:publicclassConnectionParamimplementsSerializable{privateStringdriver;驱动程序//数据库privateStringurl;接的URL//数据连privateStringuser;用户名//数据库privateStringpassword;密码//数据库privateintminConnection=0;//初始化连接数privateintmaxConnection=50;//最大连接数privatelongtimeoutValue=600000;//连接的最大空闲时间privatelongwaitTime=30000;果没有可用连接最大的等待时间//取连接的时候如
其次是连接池的工厂类ConnectionFactory,通过该类来将一个连接池对象与一个名称对应起来,使用者通过该名称就可以获取指定的连接池对象,具体代码如下:/***连接池类厂,该类常用来保存多个数据源名称合数据库连接池对应的哈希*©authorliusoft*/publicclassConnectionFactory{//该哈希表用来保存数据源名和连接池对象的关系表staticHashtableconnectionpools=null;static{connectionpools=newHashtable(2,0.75F);}/***从连接池工厂中获取指定名称对应的连接池对象©paramdatasource连接池对象对应的名称©returnDatasource返回名称对应的连接池对象©throwsNameNotFoundException 无法找至U指定的连接池*/publicstaticDatasourcelookup(Stringdatasource)throwsNameNotFoundException{Objectds=null;ds=connectionPools.get(dataSource);if(ds==null||!(dsinstanceofDatasource))thrownewNameNotFoundException(datasource);return(Datasource)ds;}/***将指定的名字和数据库连接配置绑定在一起并初始化数据库连接池©paramname 对应连接池的名称©paramparam 连接池的配置参数,具体请见类©return©throws出该异常©return©throws出该异常©throws置中的驱动程序类©throws程序类有误©throws类©throwsDatasource如果绑定成功后返回连接池对象定名字name定名字name已经绑定则抛无法找到连接池的配连接池配置中的驱动无法实例化驱动程序无法正常ClassNotFoundExceptionillegalAccessExceptioninstantiationExceptionsQLException
连接指定的数据库*/publicstaticDatasourcebind(Stringname,ConnectionParamparam)throwsNameAlreadyBoundException,classNotFoundException,illegalAccessException,instantiationException,SQLException{DataSourceimplsource=null;try{lookup(name);thrownewNameAlreadyBoundException(name);}catch(NameNotFoundExceptione){source=newDataSourceimpl(param);source.initConnection();connectionPools.put(name,source);}returnsource;}/***重新绑定数据库连接池*重新绑定数据库连接池@paramname@paramparamConnectionParam对应连接池的名称连接池的配置参数,具体请见类©return©throws©return©throws出该异常©throws置中的驱动程序类©throws程序类有误©throws类©throws连接指定的数据库无法找到连接池的配连接池配置中的驱动无法实例化驱动程序无法正常DataSource如果绑定成功后返回连接池对象NameAlreadyBoundException一定名字name已经绑定则抛ClassNotFoundExceptionillegalAccessExceptioninstantiationExceptionSQLException*/publicstaticDataSourcerebind(Stringname,ConnectionParamparam)throwsNameAlreadyBoundException,ClassNotFoundException,illegalAccessException,instantiationException,SQLException{try(unbind(name);}catch(Exceptione)()returnbind(name,param);}/***删除一个数据库连接池对象@paramname©throwsNameNotFoundException*/publicstaticvoidunbind(Stringname)throwsNameNotFoundException{Datasourcedatasource=lookup(name);if(datasourceinstanceofDataSourceimpl){DataSourceimpldsi=(DataSourceimpl)dataSource;try{dsi.stop();dsi.close();}catch(Exceptione){}finally{dsi=null;}}connectionPools.remove(name);}}ConnectionFactory主要提供了用户将将连接池绑定到一个具体的名称上以及取消绑定的操作。使用者只需要关心这两个类即可使用数据库连接池的功能。下面我们给出一段如何使用连接池的代码:Stringname="pool";Stringdriver="sun.jdbc.odbc.JdbcOdbcDriver";Stringurl="jdbc:odbc:datasource";ConnectionParamparam=newConnectionParam(driver,url,null,null);param.setMinConnection(l);param.setMaxConnection(5);param.setTimeoutvalue(20000);ConnectionFactory.bind(name,param);System.out.println("binddatasourceok.");//以上代码是用来登记一个连接池对象,该操作可以在程序初始化只做一次即可//以下开始就是使用者真正需要写的代码Datasourceds=ConnectionFactory.lookup(name);try(for(inti=0;i<10;i++){Connectionconn=ds.getConnection();try{testSQL(conn,sql);}finally{try{conn.close();}catch(Exceptione){}}}}catch(Exceptione){e.printStackTrace();}finally{ConnectionFactory.unbind(name);System.out.println("unbinddatasourceok.");System.exit(0);}从使用者的示例代码就可以看出,我们已经解决了常规连接池产生的两个问题。但是我们最最关心的是如何解决接管close方法的办法。接管工作主要在ConnectionFactory中的两句代码:source=newDataSourceImpl(param);source.initConnection();DataSourceImpI是一个实现了接口javax.sql.DataSource的类,该类维护着一个连接池的对象。由于该类是一个受保护的类,因此它暴露给使用者的方法只有接口DataSource中定义的方法,其他的所有方法对使用者来说都是不可视的。我们先来关心用户可访问的一个方法getConnection/***@seejavax.sql.DataSource#getConnection(String,String)*/publicConnectiongetConnection(Stringuser,Stringpassword)throwsSQLException{//首先从连接池中找出空闲的对象Connectionconn=getFreeConnection(O);if(conn==null){//判断是否超过最大连接数,如果超过最大连接数//则等待一定时间查看是否有空闲连接,否则抛出异常告诉用户无可用连接if(getConnectionCount()>=connParam.getMaxConnection())conn=getFreeConnection(connParam.getwaitTime());else(//没有超过连接数,重新获取一个数据库的连接connParam.setUser(user);connParam.setPassword(password);Connectionconn2=DriverManager.getConnection(connParam.getUrl(),user,password);//代理将要返回的连接对象-Connection_conn=new_Connection(conn2,true);synchronized(conns)(conns.add(_conn);}conn=_conn.getConnection();}}returnconn;}/***从连接池中取一个空闲的连接@paramnTimeout 如果该参数值为0则没有连接时只是返回一个null*否则的话等待nTimeout毫秒看是否还有空闲连接,如果没有抛出异常©returnConnection©throwsSQLException*/protectedsynchronizedConnectiongetFreeConnection(longnTimeout)throwsSQLException{Connectionconn=null;Iteratoriter=conns.iterator();while(iter.hasNext()){_Connection_conn=(_Connection)iter.next();if(!_conn.isinuse()){conn=_conn.getConnection();_conn.setinuse(true);break;}}if(conn==null&&nTimeout>0)(//等待nTimeout毫秒以便看是否有空闲连接try(Thread.sleep(nTimeout);)catch(Exceptione)()conn=getFreeConnection(0);if(conn==null)thrownewSQLExceptionC没有可用的数据库连接");}returnconn;}DataSourceImpI类中实现getConnection方法的跟正常的数据库连接池的逻辑是一致的,首先判断是否有空闲的连接,如果没有的话判断连接数是否已经超过最大连接数等等的一些逻辑。但是有一点不同的是通过DriverManager得到的数据库连接并不是及时返回的,而是通过一个叫_Connection的类中介一下,然后调用_Connection.getConnection返回的。如果我们没有通过一个中介也就是JAVA中的Proxy来接管要返回的接口对象,那么我们就没有办法截住Connection.close方法。终于到了核心所在,我们先来看看_Connection是如何实现的,然后再介绍是客户端调用Connection.close方法时走的是怎样一个流程,为什么并没有真正的关闭连接。/***数据连接的自封装,屏蔽了close方法*©authorLiudong*/class-ConnectionimplementsinvocationHandler{privatefinalstaticStringclose_method_name="close";privateConnectionconn=null;//数据库的忙状态privatebooleaninUse=false;//用户最后一次访问该连接方法的时间privatelonglastAccessTime=System.currentTimeMillis();_Connection(Connectionconn,booleaninuse){this.conn=conn;this.inuse=inuse;}/**Returnstheconn.©returnConnection*/publicConnectiongetConnection(){//返回数据库连接conn的接管类,以便截住close方法Connectionconn2=(Connection)Proxy.newProxylnstance(conn.getClass().getClassLoader(),conn.getClass().getinterfaces(),this);returnconn2;}/***该方法真正的关闭了数据库的连接©throwsSQLException*/voidclose()throwsSQLException{//由于类属性conn是没有被接管的连接,因此一旦调用close方法后就直接关闭连接conn.close();}/**Returnstheinuse.©returnboolean*/publicbooleanisinuse(){returninuse;}/**©seejava.lang.reflect.invocationHandler#invoke(java.lang.object,java.lang.reflect.Method,java.lang.object)*/publicObjectinvoke(Objectproxy,Methodm,object[]args)throwsThrowable{Objectobj=null;//判断是否调用了close的方法,如果调用close方法则把连接置为无用状态if(CLOSE_METHOD_NAME.equals(m.getName()))setinuse(false);elseobj=m.invoke(conn,args);//设置最后一次访问时间,以便及时清除超时的连接lastAccessTime=System.currentTimeMillis();returnobj;}/**ReturnsthelastAccessTime.©returnlong*/publiclonggetLastAccessTime(){returnlastAccessTime;}/**Setstheinuse.©paraminuseTheinusetoset*/publicvoidsetinuse(booleaninuse){this.inuse=inuse;}}一旦使用者调用所得到连接的close方法,由于用户的连接对象是经过接管后的对象,因此JAVA虚拟机会首先调用_Connection.invoke方法,在该方法中首先判断是否为close方法,如果不是则将代码转给真正的没有被接管的连接对象conn。否则的话只是简单的将该连接的状态设置为可用。到此您可能就明白了整个接管的过程,但是同时也有一个疑问:这样的话是不是这些已建立的连接就始终没有办法真正关闭?答案是可以的。我们来看看ConnectionFactory.unbind方法,该方法首先找到名字对应的连接池对象,然后关闭该连接池中的所有连接并删除掉连接池。在DataSourceImpl类中定义了一个close方法用来关闭所有的连接,详细代码如下:/***关闭该连接池中的所有数据库连接©returnint返回被关闭连接的个数©throwsSQLException*/publicintclose()throwsSQLException{intcc=0;SQLExceptionexcp=null;iteratoriter=conns.iterator();while(iter.hasNext()){try{((_Connection)iter.next()).close();cc++;}catch(Exceptione){if(einstanceofSQLException)excp=(SQLException)e;}}if(excp!=null)throwexcpreturncc;该方法一一调用连接池中每个对象的close方法,这个close方法对应的是—Connection中对close的实现,在—Connection定义中关闭数据库连接的时候是直接调用没有经过接管的对象的关闭方法,因此该close方法真正的释放了数据库资源。以上文字只是描述了接口方法的接管,具体一个实用的连接池模块还需要对空闲连接的监控并及时释放连接,详细的代码请参照附件。手动编写连接池packagecom.connection;2.importjava.io.IOException;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.util.HashMap;9.importjava.util.Map;importjava.util.Properties;12.importcom.util.PropertiesHelper;14.importoracle.jdbc.driver.OracleConnection;16.publicclassConnectionPool{privatestaticMap<Connection,Boolean>pool=newHashMap<Connection,Boolean>();19.publicstaticDataBasedb=null;21.privatestaticPropertiesprop;23.privatestaticintPOOLSIZE=5;25.26.publicstaticsynchronizedvoidinit(Stringfile){if(pool.size()==0){try{30.prop=readProperties(file);}catch(IOExceptione){e.printStackTrace();
1.82.try{Class.forName(prop.getProperty(〃driver〃));}catch(ClassNotFoundExceptione){thrownewRuntimeException(e);}if(prop.getProperty(〃poolsize〃).length()>0)POOLSIZE=Integer.parseInt(prop.getProperty(〃poolsize〃));for(inti=0;i<POOLSIZE;i++){pool.put(newConnection(),true);}}}privatestaticsynchronizedConnectionnewConnection(){Connectionconn=null;try{Stringurl=prop.getProperty(〃url〃);conn=DriverManager.getConnection(url,prop);conn.setTransactionIsolation(Integer.parseInt(prop.getProperty(〃islation〃)));conn.setAutoCommit(false);}catch(SQLExceptione){e.printStackTrace();}returnconn;}publicstaticvoidcloseAll(){for(Connectionc:pool.keySet()){try{c.close();}catch(SQLExceptione){e.printStackTrace();}}}publicstaticConnectiongetConnection(){synchronized(pool){for(Connectionco
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八下语文期中小卷1(答案)
- 专业英语 Unit 3教案学习资料
- 2024年份9月家庭昆虫饲养员物种逃逸应急处理条款
- 角膜塑形镜验配基础知识
- 建筑行业会计基础知识
- 《优雅弧线:撑杆跳高》课件
- 激光开孔最小直径
- 电子商务合作协议委托书
- 货车合伙协议书二零二五年
- 2024-2025学年中考历史复习- 阶段检测卷四(世界史)(含答案)
- 2025资阳辅警考试题库
- 第一篇 专题三 计算题培优3 带电粒子在交变场和立体空间中的运动-2025高考物理二轮复习
- 学校保洁方案
- T-SCSF 0004-2020 海洋牧场海藻场建设技术规范
- 血液透析患者心力衰竭的护理
- 2025高职单招考试(语文)试题(附答案)
- 江苏省2021-2022学年二年级下学期数学期中备考卷一(南京专版)
- 大学生创新创业思维导图
- TCI 535-2024 铝合金液态模锻模具技术条件
- 胰岛素泵护理管理规范
- 2025年河南工业贸易职业学院单招职业适应性测试题库及答案参考
评论
0/150
提交评论