开源技术基础:TOMCAT的用法谨以此文送给所有正在使用TOMCAT或者打算使用的人们,向TOMCAT的所有开发人员致敬!一、小猫TOMCAT其实很可爱2003年底,我换公司了,同样也换了WEBAPP,TOMCAT出现在我的面前(以前使用weblogic),我有点茫然,免费的东西真的能用的好么?担心ING……(其实是在火星呆太久)出门一打听,原来此猫出自名门-jakarta项目,2001年度最具创新的java产品(MostInnovativeJavaProduct),又有JAVA的老大SUN的力捧(官方推荐的servlet和jsp容器),以后就靠它吃饭了。不说二话,搞起来先:1、安装TOMCAT最新版本是5.0.29()如果在WINDOWS下它可以自动找到你的JDK或者setJAVA_HOME=c:/jdk在LINUX下需要先解压,然后设置JAVA_HOMEexportJAVA_HOME=/usr/local/jdk2、RUN设置完毕后就可以运行tomcat服务器了,进入tomcat的bin目录,WINDOWS下用startup启动tomcat,linux下用startup.sh,相应的关闭tomcat的命令为shutdown和shutdown.sh。启动服务后在浏览器里输入来测试一下3、目录结构Bin:存放启动和关闭tomcat脚本。Conf:包含不同的配置文件,server.xml(Tomcat的主要配置文件)。Work:存放jsp编译后产生的class文件。Webapp:存放应用程序示例,以后你要部署的应用程序也要放到此目录。Logs:存放日志文件Comm./server/shared:这三个文件夹下的LIB文件夹放jar文件。1、配置server.xml文件没有什么好说的,看TOMCAT的文档比较有用,这里提供一些主要的东西吧。元素名属性解释serverport指定一个端口,这个端口负责监听关闭tomcat的请求shutdown指定向端口发送的命令字符串servicename指定service的名字Connector(表示客户端和service之间的连接)port指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求minProcessors服务器启动时创建的处理请求的线程数maxProcessors最大可以创建的处理请求的线程数enableLookups如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址redirectPort指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理connectionTimeout指定超时的时间数(以毫秒为单位)Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求)defaultHost指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的Context(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范)docBase应用程序的路径或者是WAR文件存放的路径path表示此web应用程序的url的前缀,这样请求的url为****reloadable这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序host(表示一个虚拟主机)name指定主机名appBase应用程序基本目录,即存放应用程序的目录unpackWARs如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序Logger(表示日志,调试和错误信息)className指定logger使用的类名,此类必须实现org.apache.catalina.Logger接口prefix指定log文件的前缀suffix指定log文件的后缀timestamp如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txtRealm(表示存放用户名,密码及role的数据库)className指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口Valve(功能与Logger差不多,其prefix和suffix属性解释和Logger中的一样)className指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息directory指定log文件存放的位置pattern有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多2、管理TOMCAT管理能力很强大,进入,自己慢慢管吧。实践出真知,我喜欢这样搞:^_^,一切尽在掌握。一、让数据库连接池转起来作为一个J2EE程序员大家手上可能会有现成的JDBC数据库连接池,其实这没有太大的必要,因为象weblogic……企业级WEBAPP都有自己的连接池,大家不要费力直接使用吧,效率也很不错,再也不用羡慕.NET的ADO了(以前作MS从来不担心数据连接,ADO确实用起来很爽),如果想实现一个JDBCconnectionpool的注意事项有:1.有一个简单的函数从连接池中得到一个Connection。2.close函数必须将connection放回数据库连接池。3.当数据库连接池中没有空闲的connection,数据库连接池必须能够自动增加connection个数。4.当数据库连接池中的connection个数在某一个特别的时间变得很大,但是以后很长时间只用其中一小部分,应该可以自动将多余的connection关闭掉。5.如果可能,应该提供debug信息报告没有关闭的newConnection。网上有各种各样的连接池代码,抄过来改改吧,嘿嘿~这里介绍如何配置TOMCAT的连接池,以SQLSERVER为例:步骤1:安装SQLSERVER的JDBC驱动SQLSERVER的JDBC驱动其实就是三个JAR文件,msbase.jar/mssqlserver.jar/msutil.jar,将这三个文件拷贝到你的/tomcat_home/common/lib目录下去就可以了。步骤2:修改server.xml文件具体代码如下:Contextpath=testdocBase=F:\yourrootdebug=5reloadable=truecrossContext=trueLoggerclassName=org.apache.catalina.logger.FileLoggerprefix=localhost_DBTest_log.suffix=.txttimestamp=true/Resourcename=jdbc/SqlServerDBauth=Containertype=javax.sql.DataSource/ResourceParamsname=jdbc/SqlServerDBparameternamefactory/namevalueorg.apache.commons.dbcp.BasicDataSourceFactory/value/parameter!--MaximumnumberofdBconnectionsinpool.Makesureyouconfigureyourmysqldmax_connectionslargeenoughtohandleallofyourdbconnections.Setto0fornolimit.--parameternamemaxActive/namevalue50/value/parameter!--MaximumnumberofidledBconnectionstoretaininpool.Setto0fornolimit.--parameternamemaxIdle/namevalue20/value/parameter!--MaximumtimetowaitforadBconnectiontobecomeavailableinms,inthisexample0.5seconds.AnExceptionisthrownifthistimeoutisexceeded.Setto-1towaitindefinitely.--parameternamemaxWait/namevalue500/value/parameter!--msSQLdBusernameandpasswordfordBconnections--parameternameusername/namevaluesa/value/parameterparameternamepassword/namevaluesa/value/parameter!--ClassnameforSQLServer2000JDBCdriver--parameternamedriverClassName/namevaluecom.microsoft.jdbc.sqlserver.SQLServerDriver/value/parameter!--TheJDBCconnectionurlforconnectingtoyourMSSQLServerdB.TheautoReconnect=trueargumenttotheurlmakessurethatthemm.SqlServerJDBCDriverwillautomaticallyreconnectifmysqldclosedtheconnection.mysqldbydefaultclosesidleconnectionsafter8hours.--parameternameurl/namevaluejdbc:microsoft:sqlserver://10.0.254.11:1433;databaseName=yourdb/value!--mustuse¬use&--/parameter/ResourceParams/Context步骤三:程序调用packagedbmanage;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.Date;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Enumeration;importjava.util.Hashtable;importjava.util.Vector;importjavax.naming.Context;importjavax.naming.In