﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-无晴岁月-文章分类-Java综合</title><link>http://www.blogjava.net/dezz/category/1236.html</link><description>忘却昨日的哀伤，天色已渐苍茫，踏上征途，继续寻觅着自己的天涯……</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 02:37:39 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 02:37:39 GMT</pubDate><ttl>60</ttl><item><title>[转]我与TOMCAT不得不说的二三事</title><link>http://www.blogjava.net/dezz/articles/4027.html</link><dc:creator>Dezzalize</dc:creator><author>Dezzalize</author><pubDate>Thu, 05 May 2005 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/dezz/articles/4027.html</guid><wfw:comment>http://www.blogjava.net/dezz/comments/4027.html</wfw:comment><comments>http://www.blogjava.net/dezz/articles/4027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dezz/comments/commentRss/4027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dezz/services/trackbacks/4027.html</trackback:ping><description><![CDATA[<p><font size="2">转自CSDN的一篇文章,学习用,不是灌水啊~~</font></p>

<p><font size="2">谨以此文送给所有正在使用TOMCAT或者打算使用的人们，向TOMCAT的所有开发人员致敬！&nbsp;</font></p>

<p><font size="2">一、小猫TOMCAT其实很可爱</font></p>

<p><font size="2">2003年底，我换公司了，同样也换了WEBAPP，TOMCAT出现在我的面前（以前使用weblogic），我有点茫然，免费的东西真的能用的
好么？担心ING……（其实是在火星呆太久）出门一打听，原来此猫出自名门－jakarta项目，2001年度最具创新的java产品(Most
Innovative Java
Product)，又有JAVA的老大SUN的力捧（官方推荐的servlet和jsp容器），以后就靠它吃饭了。不说二话，搞起来先：</font></p>

<p><font size="2">1、&nbsp; 安装</font></p>

<p><font size="2">TOMCAT最新版本是5.0.29（<a href="http://jakarta.apache.org/site/binindex.cgi">http://jakarta.apache.org/site/binindex.cgi</a>）</font></p>

<p><font size="2">如果在WINDOWS下它可以自动找到你的JDK或者set JAVA_HOME=c:/jdk</font></p>

<p><font size="2">在LINUX下需要先解压，然后设置JAVA_HOME</font></p>

<p><font size="2">export JAVA_HOME=/usr/local/jdk</font></p>

<p><font size="2">2、&nbsp; RUN</font></p>

<p><font size="2">设置完毕后就可以运行tomcat服务器了，进入tomcat的bin目录，WINDOWS下用startup启动tomcat，linux下用startup.sh，相应的关闭tomcat的命令为shutdown和shutdown.sh。</font></p>

<p><font size="2">启动服务后在浏览器里输入<a href="http://localhost:8080/">http://localhost:8080</a>来测试一下</font></p>

<p><font size="2">3、&nbsp; 目录结构</font></p>

<p><font size="2"><br>
Bin：存放启动和关闭tomcat脚本。</font></p>

<p><font size="2">Conf：包含不同的配置文件,server.xml(Tomcat的主要配置文件)。</font></p>

<p><font size="2">Work：存放jsp编译后产生的class文件。</font></p>

<p><font size="2">Webapp：存放应用程序示例，以后你要部署的应用程序也要放到此目录。</font></p>

<p><font size="2">Logs：存放日志文件</font></p>

<p><font size="2">Comm./server/shared：这三个文件夹下的LIB文件夹放jar文件。</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">一、让数据库连接池转起来</font></p>

<p><font size="2">作为一个J2EE程序员大家手上可能会有现成的JDBC
数据库连接池，其实这没有太大的必要，因为象weblogic……企业级WEBAPP都有自己的连接池，大家不要费力直接使用吧，效率也很不错，再也不用
羡慕.NET的ADO了（以前作MS从来不担心数据连接，ADO确实用起来很爽），如果想实现一个 JDBC connection pool
的注意事项有：</font></p>

<p><font size="2">1. 有一个简单的函数从连接池中得到一个 Connection。</font></p>

<p><font size="2">2. close 函数必须将 connection 放回 数据库连接池。</font></p>

<p><font size="2">3. 当数据库连接池中没有空闲的 connection， 数据库连接池必须能够自动增加 connection 个数。</font></p>

<p><font size="2">4. 当数据库连接池中的 connection 个数在某一个特别的时间变得很大，但是以后很长时间只用其中一小部分，应该可以自动将多余的 connection 关闭掉。</font></p>

<p><font size="2">5. 如果可能，应该提供debug 信息报告没有关闭的 new Connection 。 </font></p>

<p><font size="2">网上有各种各样的连接池代码，抄过来改改吧，嘿嘿～</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">这里介绍如何配置TOMCAT的连接池，以SQLSERVER为例：</font></p>

<p><font size="2">步骤1：安装SQLSERVER的JDBC驱动</font></p>

<p><font size="2">SQLSERVER的JDBC驱动其实就是三个JAR文件，msbase.jar/mssqlserver.jar/msutil.jar，将这三个文件拷贝到你的/tomcat_home/common/lib目录下去就可以了。</font></p>

<p><font size="2">步骤2：修改server.xml文件</font></p>

<p><font size="2">具体代码如下：</font></p>

<p><font size="2">&lt;Context path="test" docBase="F:\yourroot" debug="5" reloadable="true" crossContext="true"&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt" timestamp="true"/&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Resource name="jdbc/SqlServerDB" auth="Container" type="javax.sql.DataSource"/&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ResourceParams name="jdbc/SqlServerDB"&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;factory&lt;/name&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;
</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Maximum number of dB connections in pool. Make sure
you configure your mysqld max_connections large enough to handle all of
your db connections. Set to 0 for no limit.--&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxActive&lt;/name&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;50&lt;/value&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Maximum
number of idle dB connections to retain in
pool.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set to 0 for no
limit.--&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxIdle&lt;/name&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;20&lt;/value&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Maximum time to wait for a dB connection to become
available&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in ms, in this example 0.5 seconds. An Exception is
thrown if&nbsp;&nbsp;&nbsp; this timeout is exceeded. Set to -1 to wait indefinitely.
--&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxWait&lt;/name&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;500&lt;/value&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- msSQL dB username and password for dB connections --&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;username&lt;/name&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;sa&lt;/value&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;password&lt;/name&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;sa&lt;/value&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Class name for SQLServer2000 JDBC driver --&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;driverClassName&lt;/name&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt;
</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- The JDBC connection url for connecting to your MS SQL
Server dB.The autoReconnect=true argument to the url makes sure that
the mm.Sql Server JDBC Driver will automatically reconnect if mysqld
closed the connection. mysqld by default closes idle connections after
8 hours.--&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;url&lt;/name&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;value&gt;jdbc:microsoft:sqlserver://10.0.254.11:1433;databaseName=yourdb&lt;/value&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--must use &amp;amp; not use&nbsp; &amp; --&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ResourceParams&gt; </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Context&gt;</font></p>

<p><font size="2">步骤三：程序调用</font></p>

<p><font size="2">package dbmanage;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">import java.sql.CallableStatement;</font></p>

<p><font size="2">import java.sql.Connection;</font></p>

<p><font size="2">import java.sql.Date;</font></p>

<p><font size="2">import java.sql.PreparedStatement;</font></p>

<p><font size="2">import java.sql.ResultSet;</font></p>

<p><font size="2">import java.sql.SQLException;</font></p>

<p><font size="2">import java.sql.Statement;</font></p>

<p><font size="2">import java.util.Enumeration;</font></p>

<p><font size="2">import java.util.Hashtable;</font></p>

<p><font size="2">import java.util.Vector;</font></p>

<p><font size="2">import javax.naming.Context;</font></p>

<p><font size="2">import javax.naming.InitialContext;</font></p>

<p><font size="2">import javax.sql.DataSource;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">import util.smartDateFormat;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">public class dbManager {</font></p>

<p><font size="2">&nbsp; /************************************</font></p>

<p><font size="2">&nbsp;&nbsp; * @param static private boolean VERBOSE ;</font></p>

<p><font size="2">&nbsp;&nbsp; * @param Statement theStatement;</font></p>

<p><font size="2">&nbsp;&nbsp; * @param PreparedStatement thePstmt;</font></p>

<p><font size="2">&nbsp;&nbsp; * @param Connection theConnection;</font></p>

<p><font size="2">&nbsp;&nbsp; ************************************/</font></p>

<p><font size="2">&nbsp; final static private boolean VERBOSE = true; //打印控制台控制</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; //static Logger logger = Logger.getLogger(dbManager.class.getName());</font></p>

<p><font size="2">&nbsp; private Context initCtx = null;</font></p>

<p><font size="2">&nbsp; private Context ctx = null;</font></p>

<p><font size="2">&nbsp; private DataSource ds = null;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; private long timeout = 5000;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; private Statement theStatement = null;</font></p>

<p><font size="2">&nbsp; private PreparedStatement thePstmt = null;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; /************************************</font></p>

<p><font size="2">&nbsp;&nbsp; * 初试化initCtx</font></p>

<p><font size="2">&nbsp;&nbsp; * 取得数据源对象</font></p>

<p><font size="2">&nbsp;&nbsp; ************************************/</font></p>

<p><font size="2">&nbsp; public</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbManager() {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; try {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; initCtx = new InitialContext();</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //init context，read config web.xml</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (initCtx == null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception("Initial Failed!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctx = (Context) initCtx.lookup("java:comp/env");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //find "jdbc/SqlServerDB" object&nbsp; this configruation in the SERVER.XML of Tomcat</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ctx != null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds = (DataSource) ctx.lookup("jdbc/SqlServerDB");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ds == null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception("Look up DataSource Failed!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; catch (Exception e) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log(e, "Can't get the Context!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp; }</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; /************************************</font></p>

<p><font size="2">&nbsp;&nbsp; * get Connection</font></p>

<p><font size="2">&nbsp;&nbsp; * @return Connection</font></p>

<p><font size="2">&nbsp;&nbsp; ************************************/</font></p>

<p><font size="2">&nbsp; public synchronized</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection getConnection() {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; //get connection and set to delay time</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; long startTime = new java.util.Date().getTime();</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; Connection con = null;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; while (con == null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; con = newConnection();</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (con != null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //log("Create New Connection!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log("连接超时，重新连接，等待" + timeout + "ms");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wait(timeout);</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (InterruptedException e) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log(e, "连接超时!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( (new java.util.Date().getTime() - startTime) &gt;= timeout) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log("Connection timeout!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; return con;</font></p>

<p><font size="2">&nbsp; }</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; private</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection newConnection() {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; Connection con = null;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; try {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; con = ds.getConnection();</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (con == null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception("Create Connection Failed!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; catch (Exception e) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log("Create Connection Failed!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e.getMessage());</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; return con;</font></p>

<p><font size="2">&nbsp; }</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; /************************************</font></p>

<p><font size="2">&nbsp;&nbsp; * release the connection</font></p>

<p><font size="2">&nbsp;&nbsp; * @param conn Connection</font></p>

<p><font size="2">&nbsp;&nbsp; * @param stmt Statement</font></p>

<p><font size="2">&nbsp;&nbsp; * @param pstmt PreparedStatement</font></p>

<p><font size="2">&nbsp;&nbsp; ************************************/</font></p>

<p><font size="2">&nbsp; public synchronized</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void freeConnection(Connection conn,</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Statement stmt,</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
PreparedStatement pstmt) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; try {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //close Statement</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (stmt != null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stmt.close();</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stmt = null;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //log("Close Statement......");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //close&nbsp; PreparedStatement</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pstmt != null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstmt.close();</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pstmt = null;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //log("Close PreparedStatement......");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; catch (Exception e) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(e.getMessage());</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; try {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //close Connection</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (conn != null) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.close();</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn = null;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //log("Close Connection......");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; catch (SQLException e) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log(e, "释放资源出错!");</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp; }</font></p>

<p><font size="2">&nbsp;</font></p>

<p> </p>

<p><font size="2">&nbsp; /************************************</font></p>

<p><font size="2">&nbsp;&nbsp; * write log file.</font></p>

<p><font size="2">&nbsp;&nbsp; * @param s String</font></p>

<p><font size="2">&nbsp;&nbsp; ************************************/</font></p>

<p><font size="2">&nbsp; private</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void log(String s) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; if (VERBOSE) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(new java.util.Date() + ":" + s);</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //logger.info(new java.util.Date()+s);</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp; }</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; /************************************</font></p>

<p><font size="2">&nbsp;&nbsp; * write log file.</font></p>

<p><font size="2">&nbsp;&nbsp; * @param ex Object</font></p>

<p><font size="2">&nbsp;&nbsp; ************************************/</font></p>

<p><font size="2">&nbsp; private</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void logerr(Object ex) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; if (VERBOSE) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println(new java.util.Date()+":"+s);</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //logger.error(ex);</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; }</font></p>

<p><font size="2">&nbsp; }</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp; /************************************</font></p>

<p><font size="2">&nbsp;&nbsp; * write log file.</font></p>

<p><font size="2">&nbsp;&nbsp; * @param e Throwable</font></p>

<p><font size="2">&nbsp;&nbsp; * @param msg String</font></p>

<p><font size="2">&nbsp;&nbsp; ************************************/</font></p>

<p><font size="2">&nbsp; private</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void log(Throwable e, String msg) {</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; System.out.println(new java.util.Date() + ": " + msg);</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; //logger.info(new java.util.Date() + ": " + msg, e);</font></p>

<p><font size="2">&nbsp; }</font></p>

<p><font size="2">……</font></p>

<p><font size="2">}</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">OK，你现在可以方便的使用连接池了，想要一个得一个，记得要释放哦，连接池的数量总是有限的。</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">二、中文问题照样很简单</font></p>

<p><font size="2">每个国家（或区域）都规定了计算机信息交换用的字符编码集，如美国的扩展 ASCII码, 中国的 GB2312-80，日本的 JIS
等，作为该国家/区域内信息处理的基础，有着统一编码的重要作用。字符编码集按长度分为
SBCS（单字节字符集），DBCS（双字节字符集）两大类。早期的软件（尤其是操作系统），为了解决本地字符信息的计算机处理，出现了各种本地化版本
（L10N），为了区分，引进了 LANG, Codepage
等概念。但是由于各个本地字符集代码范围重叠，相互间信息交换困难；软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来，作一
致处理，将特别的本地化处理内容降低到最少。这也就是所谓的国际化（I18N）。各种语言信息被进一步规范为 Locale
信息。处理的底层字符集变成了几乎包含了所有字形的 Unicode。</font></p>

<p><font size="2">现在大部分具有国际化特征的软件核心字符处理都是以 Unicode 为基础的，在软件运行时根据当时的
Locale/Lang/Codepage 设置确定相应的本地字符编码设置，并依此处理本地字符。在处理过程中需要实现 Unicode
和本地字符集的相互转换，甚或以 Unicode
为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸，任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。</font></p>

<p><font size="2">Java 语言内部是用 Unicode 表示字符的，遵守 Unicode V2.0。Java
程序无论是从/往文件系统以字符流读/写文件，还是往 URL 连接写 HTML 信息，或从 URL
连接读取参数值，都会有字符编码的转换。这样做虽然增加了编程的复杂度，容易引起混淆，但却是符合国际化的思想的。从理论上来说，这些根据字符集设置而进
行的字符转换不应该产生太多问题。而事实是由于应用程序的实际运行环境不同，Unicode
和各个本地字符集的补充、完善，以及系统或应用程序实现的不规范，转码时出现的问题时时困扰着程序员和用户。</font></p>

<p><font size="2">其实解决 JAVA 程序中的汉字编码问题的方法往往很简单，但理解其背后的原因，定位问题，还需要了解现有的汉字编码和编码转换。相信这样的东西大家都见过了</font></p>

<p><font size="2">new String(request.getParameter("test").getBytes("iso-8859-1"),"GBK")</font></p>

<p><font size="2">但这样的代码相信不是一个解决的办法，这样会增加程序的复杂度，写数据库，提交表单，URL中传中文参数，到处都是中文问题！作为一个连走路都要算
计最短距离的懒人，当然不愿天天叨念着new
String(request.getParameter("test").getBytes("iso-8859-1"),"GBK")，然汉战战兢兢
的处理各种字符转换的问题，我跋山涉水，翻山越岭，终于找到了完美的解决方式，在TOMCAT中只需要简单的配置，引入2个文件就可以轻松搞定。</font></p>

<p><font size="2">前提条件，每个页面使用</font></p>

<p><font size="2">&lt;%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*" errorPage="" %&gt;</font></p>

<p><font size="2">&lt;meta http-equiv="Content-Type" content="text/html; charset=GBK"&gt;</font></p>

<p><font size="2">地球人都知道的东西。</font></p>

<p><font size="2">步骤1：添加过滤器</font></p>

<p><font size="2">在TOMCAT中找到这2个文件RequestDumperFilter.java，
SetCharacterEncodingFilter.java，他们位于D:\Tomcat5.0.27\webapps\jsp-examples
\WEB-INF\classes\filters，加到你的工程文件里去，编译他们。</font></p>

<p><font size="2">步骤2：配置WEB.XML</font></p>

<p><font size="2">在web.xml里加入这一段</font></p>

<p><font size="2">……</font></p>

<p><font size="2">&lt;filter&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; &lt;init-param&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;GBK&lt;/param-value&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;</font></p>

<p><font size="2">&nbsp; &lt;/filter&gt;</font></p>

<p><font size="2">&nbsp; &lt;filter-mapping&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;</font></p>

<p><font size="2">&nbsp; &lt;/filter-mapping&gt;</font></p>

<p><font size="2">……</font></p>

<p><font size="2">看到没有？这样你就不用写那些麻烦的转换代码了，当然这样还不足以解决问题。</font></p>

<p><font size="2">步骤3：修改server.xml</font></p>

<p><font size="2">在server.xml修改2个地方</font></p>

<p><font size="2">&lt;Connector port="8080"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
enableLookups="false" redirectPort="8443" acceptCount="100"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="0" connectionTimeout="20000" </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
disableUploadTimeout="true" URIEncoding='GBK'/&gt;</font></p>

<p><font size="2">&lt;Connector className="org.apache.coyote.tomcat5.CoyoteConnector"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
port="8009" minProcessors="5" maxProcessors="75"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableLookups="true" redirectPort="8443"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
acceptCount="10" debug="0" connectionTimeout="0"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
useURIValidationHack="false" protocol="AJP/1.3"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URIEncoding='GBK'/&gt;</font></p>

<p><font size="2">OK，搞定！</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">三、APACHE和TOMCAT他们俩关系非同一般</font></p>

<p><font size="2">Apache和tomcat都是很优秀的软件，更可贵的是它们是免费的。其实他们2个都是jakarta项目的重要组成部分。按辈分来讲，
TOMCAT是APACHE的儿子，APACHE的专长是解析静态文件，CGI,PHP……图片……，儿子当然不能抢了老爹的饭碗，所以TOMCAT只有
在J2EE这个上面发愤图强，其实TOMCAT并非不能干他老爹的活，只是稳定性差点而已（偶没有明显的感觉，可能是商业炒作吧），现在大家明白为什么把
他们2个扯一起了吧，上阵还靠父子兵呢～</font></p>

<p><font size="2">把2个家伙整一起有大致有2种方法，一种是利用mod_jk2.so，一种是利用mod_jk_1.2.5_2.0.47.dll。这2个东东叫联接器（TOMCAT就是通过这家伙与apache勾搭上的）</font></p>

<p><font size="2">1、&nbsp; 利用mod_jk_1.2.5_2.0.47.dll在WINDOWS下整合</font></p>

<p><font size="2">步骤1：准备材料</font></p>

<p><font size="2">apache2.0.52</font></p>

<p><font size="2"><a href="http://apache.te8.com/dist/httpd/binaries/win32/apache_2.0.52-win32-x86-no_ssl.msi">http://apache.te8.com/dist/httpd/binaries/win32/apache_2.0.52-win32-x86-no_ssl.msi</a></font></p>

<p><font size="2">tomcat5.0.27</font></p>

<p><font size="2"><a href="http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.0.19/bin/jakarta-tomcat-5.0.27.exe">http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.0.19/bin/jakarta-tomcat-5.0.27.exe</a></font></p>

<p><font size="2">JDK（这个不用说了吧^_^）</font></p>

<p><font size="2">mod_jk_1.2.5_2.0.47.dll（关键是这个东东啊，找了我N久），据说在下面连接可以下到，最后在我同事那找到的。</font></p>

<p><font size="2"><a href="http://apache.linuxforum.net/dist/jakarta/tomcat-connectors/jk/binaries/win32/mod_jk_1.2.5_2.0.47.dll">http://apache.linuxforum.net/dist/jakarta/tomcat-connectors/jk/binaries/win32/mod_jk_1.2.5_2.0.47.dll</a></font></p>

<p><font size="2">安装apache\ tomcat\JDK。</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">步骤2：安装后设置环境变量</font></p>

<p><font size="2">设置我的电脑\属性\高级\环境变量\新建系统变量　变量名：JAVA_HOME 变量值：C:\JBuilderX\jdk1.4
(指向JDK的实际安装路径)；TOMCAT_HMOM 变量值：Tomcat5.0.27；lasspath
编辑变量值中加上　……;%JAVA_HOME%\bin;%JAVA_HOME%\lib;%TOMCAT_HOME%\bin;.;</font></p>

<p><font size="2">测试一下，访问<a href="http://localhost/">http://localhost</a>和<a href="http://localhost:8080/">http://localhost:8080</a>，默认安装是不会有什么错误的^_^</font></p>

<p><font size="2">把连接器mod_jk_1.2.5_2.0.47.dll　COPY到D:\Apache2\modules\下。</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">步骤3：apache配置</font></p>

<p><font size="2">在d:\Apache2\conf下找到httpd.conf，找到DirectoryIndex，在index.html后添加index.jsp；查找“listen”用于本机测试时：Listen 127.0.0.1:80，我的是这样设置的Listen *:80</font></p>

<p><font size="2">查找AddDefaultCharset设置为AddDefaultCharset off，这样APACHE将以你页面定义的字符集解析页面。</font></p>

<p><font size="2">在最后添加如下代码：</font></p>

<p><font size="2">&lt;VirtualHost *:80&gt; #localhost为本机，你可用本机ip</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; ServerAdmin <a href="mailto:darkxie@hotmail.com">darkxie@hotmail.com</a> #你的mail地址</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; DocumentRoot F:/uutang/uutang #你的项目组根目录</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; ServerName dark #你的服务名，若你的机器有域名，设为域名</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; ErrorLog logs/ErrorLog.txt #错误日志</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; CustomLog logs/CustomLog.txt common #访问日志</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; JkMount /servlet/* ajp13 #让Apache支持对servlet传送，用以Tomcat解析</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; JkMount /*.jsp ajp13 #让Apache支持对jsp传送，用以Tomcat解析</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; JkMount /*.do ajp13 #让Apache支持对struts的action传送，用以Tomcat解析</font></p>

<p><font size="2">&lt;/VirtualHost&gt;</font></p>

<p><font size="2">LoadModule jk_module modules/mod_jk_1.2.5_2.0.47.dll</font></p>

<p><font size="2">JkWorkersFile "D:/Tomcat5.0.27/conf/workers.properties"</font></p>

<p><font size="2">JkLogFile "D:/Tomcat5.0.27/logs/mod_jk2.log"</font></p>

<p><font size="2">JkLogLevel info</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">步骤4：tomcat配置</font></p>

<p><font size="2">在d:\Tomcat5\conf下新建一个workers.properties文件 .内容如下: </font></p>

<p><font size="2">workers.tomcat_home=d:\Tomcat5 #让mod_jk模块知道Tomcat</font></p>

<p><font size="2">workers.java_home=d:\jdk1.3&nbsp; #让mod_jk模块知道j2sdk</font></p>

<p><font size="2">ps=\ </font></p>

<p><font size="2">worker.list=ajp13 #模块版本,现有ajp13了,不要修改</font></p>

<p><font size="2">worker.ajp13.port=8009 #工作端口,若没占用则不用修改</font></p>

<p><font size="2">worker.ajp13.host=localhost #主机,若上面的Apache主机不为localhost,作相应修改</font></p>

<p><font size="2">worker.ajp13.type=ajp13 #类型</font></p>

<p><font size="2">worker.ajp13.lbfactor=1 #代理数,不用修改</font></p>

<p><font size="2">修改TOMCAT的server.xml文件：</font></p>

<p><font size="2">&lt;!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; &lt;Connector className="org.apache.coyote.tomcat5.CoyoteConnector"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
port="8009" minProcessors="5" maxProcessors="75"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableLookups="true" redirectPort="8443"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
acceptCount="10" debug="0" connectionTimeout="0"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
useURIValidationHack="false" protocol="AJP/1.3"</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" </font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URIEncoding='GBK'/&gt;</font></p>

<p><font size="2">让TOMCAT知道ajp13协议，apache和tomcat俩父子间靠这个协议沟通。</font></p>

<p><font size="2">测试一下，访问<a href="http://localhost/">http://localhost</a>和<a href="http://localhost:8080/">http://localhost:8080</a>，看到相同的页面没有？细心点，其实很简单，看看E文的帮助，搞定不成问题。</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">2、&nbsp; 利用mod_jk2.so（也叫JK2）整合</font></p>

<p><font size="2">jk2是一个jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip文件，主要用的
是其中的mod_jk2.so。其实利用mod_jk2.so整合和利用mod_jk_1.2.5_2.0.47.dll整合大同小异，只是换了个联接器
而已，现在一步一步整起来～</font></p>

<p><font size="2">步骤1：没有多说的，安装好TOMCAT和APACHE</font></p>

<p><font size="2">下载jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip，解压，将mod_jk2放到apache的安装文件夹下的modules文件夹中。</font></p>

<p><font size="2">步骤2：apache配置</font></p>

<p><font size="2">在/conf中加入一个work.properties文件，其内容如下：</font></p>

<p><font size="2">&lt;!--这个文件的作用不是很清楚，总之路径设置正确就行了。我的apache装在D:/Apache2，根据情况自己修改。--&gt;</font></p>

<p><font size="2">[shm]</font></p>

<p><font size="2">file=D:/ /Apache2/logs/shm.file</font></p>

<p><font size="2">size=1048576</font></p>

<p><font size="2">&lt;!--这个socket channel是必须的，port和host对应于tomcat端的设置。--&gt;</font></p>

<p><font size="2">#The socket channel</font></p>

<p><font size="2">[channel.socket:localhost:8009]</font></p>

<p><font size="2">port=8009</font></p>

<p><font size="2">host=localhost</font></p>

<p><font size="2">&lt;!--worker，必须的。--&gt;</font></p>

<p><font size="2">#define the worker</font></p>

<p><font size="2">[ajp13:localhost:8009]</font></p>

<p><font size="2">channel=channel.socket:localhost:8009</font></p>

<p><font size="2">&lt;!--url mapping，我的主要是.jsp和struts的.do，servlet的话设置成[uri:/xxx/*]之类的。--&gt;</font></p>

<p><font size="2">#uri mapping</font></p>

<p><font size="2">[uri:/*] #和第一种方式一样吧^_^</font></p>

<p><font size="2">[uri:/*.jsp]</font></p>

<p><font size="2">[uri:/*.do]</font></p>

<p><font size="2">worker=ajp13:localhost:8009</font></p>

<p><font size="2">在httpd.conf中，在LoadModule那里加入这句：</font></p>

<p><font size="2">LoadModule jk2_module modules/mod_jk2.so </font></p>

<p><font size="2">在最后加入这句：</font></p>

<p><font size="2">JkSet config.file "conf/work.properties"</font></p>

<p><font size="2">这是告诉apache去哪里找jk的配置的，根据具体情况修改。</font></p>

<p><font size="2">还要修改一下DirectoryIndex，DirectoryIndex index.html index.html.var
index.jsp查找“listen”用于本机测试时：Listen 127.0.0.1:80，我的是这样设置的Listen *:80。</font></p>

<p><font size="2">当然还有我们的虚拟目录：</font></p>

<p><font size="2">&lt;VirtualHost *:80&gt;</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; ServerAdmin <a href="mailto:darkxie@hotmail.com">darkxie@hotmail.com</a></font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; DocumentRoot F:/uutang/uutang</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; ServerName dark</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; ErrorLog logs/ErrorLog.txt</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; CustomLog logs/CustomLog.txt common</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; #JkMount /servlet/* ajp13</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; #JkMount /*.jsp ajp13</font></p>

<p><font size="2">&nbsp;&nbsp;&nbsp; #JkMount /*.do ajp13</font></p>

<p><font size="2">&lt;/VirtualHost&gt;</font></p>

<p><font size="2">&nbsp;</font></p>

<p><font size="2">步骤3：tomcat配置</font></p>

<p><font size="2">Tomcat的端口设置为8080。</font></p>

<p><font size="2">在/conf文件夹加入jk2.properties文件，其内容如下：</font></p>

<p><font size="2"># Set the desired handler list</font></p>

<p><font size="2">handler.list=apr,request,channelSocket</font></p>

<p><font size="2">#</font></p>

<p><font size="2"># Override the default port for the socketChannel</font></p>

<p><font size="2">channelSocket.port=8009</font></p>

<p><font size="2">TOMCAT自己已经生成了这个文件，找到相关的地方把注视去掉改一下就成。&nbsp;</font></p>

<font size="2">注意：用这种方式整合最好是自己编译mod_jk2.so文件，特别是在unix/linux下,我没有环境，制作mod_webapp.so没有自己作过。具体方法，自己去找吧。</font><img src ="http://www.blogjava.net/dezz/aggbug/4027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dezz/" target="_blank">Dezzalize</a> 2005-05-05 10:01 <a href="http://www.blogjava.net/dezz/articles/4027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]在Tomcat下JSP、Servlet和JavaBean环境的配置</title><link>http://www.blogjava.net/dezz/articles/4026.html</link><dc:creator>Dezzalize</dc:creator><author>Dezzalize</author><pubDate>Thu, 05 May 2005 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/dezz/articles/4026.html</guid><wfw:comment>http://www.blogjava.net/dezz/comments/4026.html</wfw:comment><comments>http://www.blogjava.net/dezz/articles/4026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dezz/comments/commentRss/4026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dezz/services/trackbacks/4026.html</trackback:ping><description><![CDATA[<font size="2">网上关于Tomcat下JSP的配置多如牛毛，我看过很多，大多数没有说清楚。要不就是描述不清楚，稍微错了一点就无法进行下去；还有的是功能没说清楚，
做哪一步到底是配置JSP还是Servlet还是配置数据源，常常不知所云。今天有幸在itpub寻得一篇贴子，虽然有一点小错误，但是大体来说很适合于
初学者，在此转出来，错误地方已更正。原贴：http://www.itpub.net/345002.html<br>
<br>
<br>
在Tomcat下JSP、Servlet和JavaBean环境的配置 <br>
创建时间: 2004-11-30<br>
文章提交: 孤独<br>
经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题，于是总结了一下如何tomcat下配置jsp、servlet和ben，希望对那些初学者有所帮助。 <br>
<br>
第
一步：下载j2sdk和tomcat：到sun官方站点（http://java.sun.com/j2se/1.4.2/download.html）
下载j2sdk，注意下载版本为Windows Offline Installation的SDK，同时最好下载J2SE 1.4.2
Documentation，然后到tomcat官方站点（http://www.apache.org/dist/jakarta/tomcat-
4/）下载tomcat（下载最新4.1.x版本的tomcat）； <br>
<br>
第二步：安装和配置你的j2sdk和tomcat：执行j2sdk和tomcat的安装程序，然后按默认设置进行安装即可。 <br>
1.安装j2sdk以后，需要配置一下环境变量，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.4.2）： <br>
JAVA_HOME=c:\j2sdk1.4.2 <br>
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;（.;一定不能少，因为它代表当前路径) <br>
path=%JAVA_HOME%\bin <br>
接着可以写一个简单的java程序来测试J2SDK是否已安装成功： <br>
public class Test{ <br>
public static void main(String args[]){ <br>
System.out.println("This is a test program."); <br>
} <br>
} <br>
将上面的这段程序保存为文件名为Test.java的文件。 <br>
然后打开命令提示符窗口，cd到你的Test.java所在目录，然后键入下面的命令 <br>
javac Test.java <br>
java Test <br>
此时如果看到打印出来This is a test program.的话说明安装成功了，如果没有打印出这句话，你需要仔细检查一下你的配置情况。 <br>
<br>
2.安装Tomcat后，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat）： <br>
CATALINA_HOME=c:\tomcat; <br>
CATALINA_BASE=c:\tomcat; <br>
然后修改环境变量中的classpath，把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去，修改后的classpath如下： <br>
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar; <br>
接着可以启动tomcat，在IE中访问http://localhost:8080 <br>
如果看到tomcat的欢迎页面的话说明安装成功了。<br>
<br>
第三步：建立自己的jsp app目录 <br>
1.到Tomcat的安装目录的webapps目录，可以看到ROOT，examples, tomcat-docs之类Tomcat自带的的目录； <br>
2.在webapps目录下新建一个目录，起名叫myapp； <br>
3.myapp下新建一个目录WEB-INF，注意，目录名称是区分大小写的； <br>
4.WEB-INF下新建一个文件web.xml，内容如下： <br>
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; <br>
<br>
&lt;!DOCTYPE web-app <br>
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" <br>
"http://java.sun.com/dtd/web-app_2_3.dtd"&gt; <br>
<br>
&lt;web-app&gt; <br>
&lt;display-name&gt;My Web Application&lt;/display-name&gt; <br>
&lt;description&gt; <br>
A application for test. <br>
&lt;/description&gt; <br>
&lt;/web-app&gt; <br>
5.在myapp下新建一个测试的jsp页面，文件名为index.jsp，文件内容如下： <br>
&lt;html&gt;&lt;body&gt;&lt;center&gt; <br>
Now time is: &lt;%=new java.util.Date()%&gt; <br>
&lt;/center&gt;&lt;/body&gt;&lt;/html&gt; <br>
6.重启Tomcat <br>
7.打开浏览器，输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。 <br>
<br>
第四步：建立自己的Servlet： <br>
1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个servlet程序，文件名为Test.java，文件内容如下： <br>
package test; <br>
import java.io.IOException; <br>
import java.io.PrintWriter; <br>
import javax.servlet.ServletException; <br>
import javax.servlet.http.HttpServlet; <br>
import javax.servlet.http.HttpServletRequest; <br>
import javax.servlet.http.HttpServletResponse; <br>
public class Test extends HttpServlet { <br>
protected void doGet(HttpServletRequest request, HttpServletResponse response) <br>
throws ServletException, IOException { <br>
PrintWriter out=response.getWriter(); <br>
out.println("&lt;html&gt;&lt;body&gt;&lt;h1&gt;This is a servlet test.&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"); <br>
out.flush(); <br>
} <br>
} <br>
2 .编译 <br>
将Test.java放在c:\test下，使用如下命令编译： <br>
C:\Test&gt;javac Test.java <br>
然后在c:\Test下会产生一个编译后的servlet文件：Test.class <br>
3
.将结构test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下，也就是
剪切那个test目录到classes目录下，如果classes目录不存在，就新建一个。
现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结构 <br>
4 .修改webapps\myapp\WEB-INF\web.xml，添加servlet和servlet-mapping <br>
编辑后的web.xml如下所示，红色为添加的内容: <br>
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; <br>
<br>
&lt;!DOCTYPE web-app <br>
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" <br>
"http://java.sun.com/dtd/web-app_2_3.dtd"&gt; <br>
<br>
&lt;web-app&gt;<br>
&lt;display-name&gt;My Web Application&lt;/display-name&gt; <br>
&lt;description&gt; <br>
A application for test. <br>
&lt;/description&gt; <br>
&lt;servlet&gt; <br>
&lt;servlet-name&gt;Test&lt;/servlet-name&gt; <br>
&lt;display-name&gt;Test&lt;/display-name&gt; <br>
&lt;description&gt;A test Servlet&lt;/description&gt; <br>
&lt;servlet-class&gt;test.Test&lt;/servlet-class&gt; <br>
&lt;/servlet&gt; <br>
&lt;servlet-mapping&gt; <br>
&lt;servlet-name&gt;Test&lt;/servlet-name&gt; <br>
&lt;url-pattern&gt;/Test&lt;/url-pattern&gt; <br>
&lt;/servlet-mapping&gt; <br>
&lt;/web-app&gt; <br>
这段话中的servlet这一段声明了你要调用的Servlet，而servlet-mapping则是将声明的servlet“映射”到地址/Test上 <br>
5 .好了，启动Tomcat，启动浏览器，输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.就说明编写的servlet成功了。 <br>
注意：修改了web.xml以及新加了class，都要重启Tomcat <br>
<br>
第四步：建立自己的Bean： <br>
1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个java程序，文件名为TestBean.java，文件内容如下： <br>
package test; <br>
public class TestBean{ <br>
private String name = null; <br>
public TestBean(String strName_p){ <br>
this.name=strName_p; <br>
} <br>
public void setName(String strName_p){ <br>
this.name=strName_p; <br>
} <br>
public String getName(){ <br>
return this.name; <br>
} <br>
} <br>
2 .编译 <br>
将TestBean.java放在c:\test下，使用如下命令编译： <br>
C:\Test&gt;javac TestBean.java <br>
然后在c:\Test下会产生一个编译后的bean文件：TestBean.class <br>
3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下， <br>
4 .在%CATALINA_HOME%\webapps\myapp下新建一个TestBean.jsp文件，文件内容为： <br>
&lt;%@ page import="test.TestBean" %&gt; <br>
&lt;html&gt;&lt;body&gt;&lt;center&gt; <br>
&lt;% <br>
TestBean testBean=new TestBean("This is a test java bean."); <br>
%&gt; <br>
Java bean name is: &lt;%=testBean.getName()%&gt; <br>
&lt;/center&gt;&lt;/body&gt;&lt;/html&gt; <br>
5
.好了，重启Tomcat，启动浏览器，输入http://localhost:8080/myapp/TestBean.jsp
如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。 <br>
<br>
这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码，自己多动手写代码以增强自己在这方面开发的能力了。</font><img src ="http://www.blogjava.net/dezz/aggbug/4026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dezz/" target="_blank">Dezzalize</a> 2005-05-05 09:50 <a href="http://www.blogjava.net/dezz/articles/4026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>