tomcat配置和连接池原理.docx
- 文档编号:20104466
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:35
- 大小:30.33KB
tomcat配置和连接池原理.docx
《tomcat配置和连接池原理.docx》由会员分享,可在线阅读,更多相关《tomcat配置和连接池原理.docx(35页珍藏版)》请在冰豆网上搜索。
tomcat配置和连接池原理
tomcat6.0如何配置虚拟目录?
tomcat6.0不能列目录?
一、具体配置方法如下:
找到TOMCAT的安装目录,再打开conf目录下的server.xml.
将元素 \testservlet"/>加入元素 (不清楚话,可以参考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中找到 将其中的 设置改为true即可解决此问题 Tomcat6.0连接池配置 1.Tomcat6.0连接池配置 2. 1.配置tomcat下的conf下的server.xml中的host标签中添加连接池配置: 3. 4.1. 5.2. auth="Container" 6.3. type="javax.sql.DataSource" 7.4. driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" 8.5. url="jdbc: microsoft: sqlserver: //localhost: 1433;databasename=hrms" 9.6. username="sa" 10.7. password="123456" 11.8. maxActive="100" 12.9. maxIdle="30" 13.10. maxWait="10000"/> 14. 15.2.配置你的应用下的web.xml中的web-app标签之间加入: 16.1. 17.2. 18.3. 19.4. 20.5. 21.6. 22.3.把连接数据库的第三方驱动放到common/lib下面就ok了 23.4.测试程序我就不写了 24. 25.Tomcat5.5x连接池配置 26. 27.方式一、全局数据库连接池 28.1、通过管理界面配置连接池,或者直接在tomcat\conf\server.xml的GlobalNamingResources中增加 29. microsoft: sqlserver: //localhost: 1433;DatabaseName=mydb"maxActive="4"/> 30.2、在tomcat\webapps\myapp\META-INF\context.xml的Context中增加: 31. 32.这样就可以了。 33.方式二、全局数据库连接池 34.1、同上 35.2、在tomcat\conf\context.xml的Context中增加: 36. 37.方式三、局部数据库连接池 38.只需在tomcat\webapps\myapps\META-INF\context.xml的Context中增加: 39. microsoft: sqlserver: //localhost: 1433;DatabaseName=mydb"maxActive="4"/> 40.参数说明: 41.driveClassName: JDBC驱动类的完整的名称; 42.maxActive: 同时能够从连接池中被分配的可用实例的最大数; 43.maxIdle: 可以同时闲置在连接池中的连接的最大数; 44.maxWait: 最大超时时间,以毫秒计; 45.password: 用户密码; 46.url: 到JDBC的URL连接; 47.user: 用户名称; 48.validationQuery: 用来查询池中空闲的连接。 49.以上三种方式在tomcat5.5.4下都可以。 另外,sqlserver的jdbcdriver是从微软网站上下载的sqlserverjdbc(sp3)。 50. 51.tomcat5.0连接池配置 52.在tomcat的下面路径(Tomcat\conf\Catalina\localhost)下建一个xml文件,内容如下 53. 54. 55. 56. 57. 58. 59. --MaximumnumberofdBconnectionsinpool.Makesureyou 60. configureyourmysqldmax_connectionslargeenoughtohandle 61. allofyourdbconnections.Setto0fornolimit. 62. --> 63. 64. 65. 66. 67. --MaximumnumberofidledBconnectionstoretaininpool. 68. Setto0fornolimit. 69. --> 70. 71. 72. 73. 74. --MaximumtimetowaitforadBconnectiontobecomeavailable 75. inms,inthisexample10seconds.AnExceptionisthrownif 76. thistimeoutisexceeded. Setto-1towaitindefinitely. 77. --> 78. 79. 80. 81. 82. --MySQLdBusernameandpasswordfordBconnections --> 83. 84. 85. 86. 87. 88. 89. 90. 91. --ClassnameforJDBCdriver--> 92. 93. 94. 95. 96. --Autocommitsetting. Thissettingisrequiredtomake 97. Hibernatework. Oryoucanremovecallstocommit().--> 98. 99. 100. 101. 102. --TheJDBCconnectionurlforconnectingtoyourMySQLdB. 103. TheautoReconnect=trueargumenttotheurlmakessurethatthe 104. mm.mysqlJDBCDriverwillautomaticallyreconnectifmysqldclosedthe 105. connection. mysqldbydefaultclosesidleconnectionsafter8hours. 106. --> 107. 108. 109. jtds: sqlserver: //url/filedb;charset=gb2312;autoReconnect=true 110. 111. --Recoverabandonedconnections--> 112. 113. 114. 115. 116. --SetthenumberofsecondsadBconnectionhasbeenidle 117. beforeitisconsideredabandoned. 118. --> 119. 120. 121. 122. 123. --LogastacktraceofthecodewhichabandonedthedB 124. connectionresources. 125. --> 126. 127. 128. 129. 130. 使用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公司提供的文档是怎么描述这两个类的。 publicinterfaceInvocationHandler InvocationHandleristheinterfaceimplementedbytheinvocationhandlerofaproxyinstance. Eachproxyinstancehasanassociatedinvocationhandler. Whenamethodisinvokedonaproxyinstance, themethodinvocationisencodedanddispatchedtotheinvokemethodofitsinvocationhandler. SUN的API文档中关于Proxy的描述很多,这里就不罗列出来。 通过文档对接口InvocationHandler的描述我们可以看到当调用一个Proxy实例的方法时会触发Invocationhanlder的invoke方法。 从JAVA的文档中我们也同时了解到这种动态代理机制只能接管接口的方法,而对一般的类无效,考虑到java.sql.Connection本身也是一个接口由此就找到了解决如何接管close方法的出路。 首先,我们先定义一个数据库连接池参数的类,定义了数据库的JDBC驱动程序类名,连接的URL以及用户名口令等等一些信息,该类是用于初始化连接池的参数,具体定义如下: publicclassConnectionParamimplementsSerializable { privateStringdriver;//数据库驱动程序 privateStringurl;//数据连接的URL privateStringuser;//数据库用户名 privateStringpassword;//数据库密码 privateintmi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- tomcat 配置 连接 原理