﻿<?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-WOLF--执着-随笔分类-工具类</title><link>http://www.blogjava.net/sutao/category/24296.html</link><description>用文字记录学习的体验！</description><language>zh-cn</language><lastBuildDate>Sat, 24 Nov 2007 20:59:08 GMT</lastBuildDate><pubDate>Sat, 24 Nov 2007 20:59:08 GMT</pubDate><ttl>60</ttl><item><title>tomcat常识(apache)</title><link>http://www.blogjava.net/sutao/archive/2007/11/24/162781.html</link><dc:creator>苏醄</dc:creator><author>苏醄</author><pubDate>Sat, 24 Nov 2007 01:10:00 GMT</pubDate><guid>http://www.blogjava.net/sutao/archive/2007/11/24/162781.html</guid><wfw:comment>http://www.blogjava.net/sutao/comments/162781.html</wfw:comment><comments>http://www.blogjava.net/sutao/archive/2007/11/24/162781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sutao/comments/commentRss/162781.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sutao/services/trackbacks/162781.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff">一、小猫TOMCAT其实很可爱</span></p>
<p><span style="color: #0000ff">2003年底，我换公司了，同样也换了WEBAPP，TOMCAT出现在我的面前（以前使用weblogic），我有点茫然，免费的东西真的能用的好么？担心ING&#8230;&#8230;（其实是在火星呆太久）出门一打听，原来此猫出自名门－jakarta项目，2001年度最具创新的java产品(Most Innovative Java Product)，又有JAVA的老大SUN的力捧（官方推荐的servlet和jsp容器），以后就靠它吃饭了。不说二话，搞起来先：</span></p>
<p><span style="color: #0000ff">1、 安装</span></p>
<p><span style="color: #0000ff">TOMCAT最新版本是5.0.29（http://jakarta.apache.org/site/binindex.cgi）</span></p>
<p><span style="color: #0000ff">如果在WINDOWS下它可以自动找到你的JDK或者set JAVA_HOME=c:/jdk</span></p>
<p><span style="color: #0000ff">在LINUX下需要先解压，然后设置JAVA_HOME</span></p>
<p><span style="color: #0000ff">export JAVA_HOME=/usr/local/jdk</span></p>
<p><span style="color: #0000ff">2、 RUN</span></p>
<p><span style="color: #0000ff">设置完毕后就可以运行tomcat服务器了，进入tomcat的bin目录，WINDOWS下用startup启动tomcat，linux下用startup.sh，相应的关闭tomcat的命令为shutdown和shutdown.sh。</span></p>
<p><span style="color: #0000ff">启动服务后在浏览器里输入http://localhost:8080来测试一下</span></p>
<p><span style="color: #0000ff">3、 目录结构</span></p>
<p><span style="color: #0000ff">Bin：存放启动和关闭tomcat脚本。</span></p>
<p><span style="color: #0000ff">Conf：包含不同的配置文件,server.xml(Tomcat的主要配置文件)。</span></p>
<p><span style="color: #0000ff">Work：存放jsp编译后产生的class文件。</span></p>
<p><span style="color: #0000ff">Webapp：存放应用程序示例，以后你要部署的应用程序也要放到此目录。</span></p>
<p><span style="color: #0000ff">Logs：存放日志文件</span></p>
<p><span style="color: #0000ff">Comm./server/shared：这三个文件夹下的LIB文件夹放jar文件。</span></p>
<p><span style="color: #0000ff">1、 配置server.xml文件</span></p>
<p><span style="color: #0000ff">没有什么好说的，看TOMCAT的文档比较有用，这里提供一些主要的东西吧。</span></p>
<p><span style="color: #0000ff">元素名 <br />
属性 <br />
解释</span></p>
<p><span style="color: #0000ff">server <br />
port <br />
指定一个端口，这个端口负责监听关闭tomcat的请求</span></p>
<p><span style="color: #0000ff">shutdown <br />
指定向端口发送的命令字符串</span></p>
<p><span style="color: #0000ff">service <br />
name <br />
指定service的名字</span></p>
<p><span style="color: #0000ff">Connector(表示客户端和service之间的连接) <br />
port <br />
指定服务器端要创建的端口号，并在这个断口监听来自客户端的请求</span></p>
<p><span style="color: #0000ff">minProcessors <br />
服务器启动时创建的处理请求的线程数</span></p>
<p><span style="color: #0000ff">maxProcessors <br />
最大可以创建的处理请求的线程数</span></p>
<p><span style="color: #0000ff">enableLookups <br />
如果为true，则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名，若为false则不进行DNS查询，而是返回其ip地址</span></p>
<p><span style="color: #0000ff">redirectPort <br />
指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号</span></p>
<p><span style="color: #0000ff">acceptCount <br />
指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理队列中的请求数，超过这个数的请求将不予处理</span></p>
<p><span style="color: #0000ff">connectionTimeout <br />
指定超时的时间数(以毫秒为单位)</span></p>
<p><span style="color: #0000ff">Engine(表示指定service中的请求处理机，接收和处理来自Connector的请求) <br />
defaultHost <br />
指定缺省的处理请求的主机名，它至少与其中的一个host元素的name属性值是一样的</span></p>
<p><span style="color: #0000ff">Context(表示一个web应用程序，通常为WAR文件，关于WAR的具体信息见servlet规范) <br />
docBase <br />
应用程序的路径或者是WAR文件存放的路径</span></p>
<p><span style="color: #0000ff">path <br />
表示此web应用程序的url的前缀，这样请求的url为http://localhost:8080/path/****</span></p>
<p><span style="color: #0000ff">reloadable <br />
这个属性非常重要，如果为true，则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化，自动装载新的应用程序，我们可以在不重起tomcat的情况下改变应用程序</span></p>
<p><span style="color: #0000ff">host(表示一个虚拟主机) <br />
name <br />
指定主机名</span></p>
<p><span style="color: #0000ff">appBase <br />
应用程序基本目录，即存放应用程序的目录</span></p>
<p><span style="color: #0000ff">unpackWARs <br />
如果为true，则tomcat会自动将WAR文件解压，否则不解压，直接从WAR文件中运行应用程序</span></p>
<p><span style="color: #0000ff">Logger(表示日志，调试和错误信息) <br />
className <br />
指定logger使用的类名，此类必须实现org.apache.catalina.Logger 接口</span></p>
<p><span style="color: #0000ff">prefix <br />
指定log文件的前缀</span></p>
<p><span style="color: #0000ff">suffix <br />
指定log文件的后缀</span></p>
<p><span style="color: #0000ff">timestamp <br />
如果为true，则log文件名中要加入时间，如下例:localhost_log.2001-10-04.txt</span></p>
<p><span style="color: #0000ff">Realm(表示存放用户名，密码及role的数据库) <br />
className <br />
指定Realm使用的类名，此类必须实现org.apache.catalina.Realm接口</span></p>
<p><span style="color: #0000ff">Valve(功能与Logger差不多，其prefix和suffix属性解释和Logger 中的一样) <br />
className <br />
指定Valve使用的类名，如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息</span></p>
<p><span style="color: #0000ff">directory <br />
指定log文件存放的位置</span></p>
<p><span style="color: #0000ff">pattern <br />
有两个值，common方式记录远程主机名或ip地址，用户名，日期，第一行请求的字符串，HTTP响应代码，发送的字节数。combined方式比common方式记录的值更多</span></p>
<p><span style="color: #0000ff">2、 管理</span></p>
<p><span style="color: #0000ff">TOMCAT管理能力很强大，进入http://localhost:8080/，自己慢慢管吧。实践出真知，我喜欢这样搞：</span></p>
<p><span style="color: #0000ff">^_^，一切尽在掌握http://localhost:8080/manager/html 。</span></p>
<p><span style="color: #0000ff">一、让数据库连接池转起来</span></p>
<p><span style="color: #0000ff">作为一个J2EE程序员大家手上可能会有现成的JDBC 数据库连接池，其实这没有太大的必要，因为象weblogic&#8230;&#8230;企业级WEBAPP都有自己的连接池，大家不要费力直接使用吧，效率也很不错，再也不用羡慕.NET的ADO了（以前作MS从来不担心数据连接，ADO确实用起来很爽），如果想实现一个 JDBC connection pool 的注意事项有：</span></p>
<p><span style="color: #0000ff">1. 有一个简单的函数从连接池中得到一个 Connection。</span></p>
<p><span style="color: #0000ff">2. close 函数必须将 connection 放回 数据库连接池。</span></p>
<p><span style="color: #0000ff">3. 当数据库连接池中没有空闲的 connection， 数据库连接池必须能够自动增加 connection 个数。</span></p>
<p><span style="color: #0000ff">4. 当数据库连接池中的 connection 个数在某一个特别的时间变得很大，但是以后很长时间只用其中一小部分，应该可以自动将多余的 connection 关闭掉。</span></p>
<p><span style="color: #0000ff">5. 如果可能，应该提供debug 信息报告没有关闭的 new Connection 。 </span></p>
<p><span style="color: #0000ff">网上有各种各样的连接池代码，抄过来改改吧，嘿嘿～</span></p>
<p><span style="color: #0000ff">这里介绍如何配置TOMCAT的连接池，以SQLSERVER为例：</span></p>
<p><span style="color: #0000ff">步骤1：安装SQLSERVER的JDBC驱动</span></p>
<p><span style="color: #0000ff">SQLSERVER的JDBC驱动其实就是三个JAR文件，msbase.jar/mssqlserver.jar/msutil.jar，将这三个文件拷贝到你的/tomcat_home/common/lib目录下去就可以了。</span></p>
<p><span style="color: #0000ff">步骤2：修改server.xml文件</span></p>
<p><span style="color: #0000ff">具体代码如下：</span></p>
<p><span style="color: #0000ff">&lt;Context path="test" docBase="F:\yourroot" debug="5" reloadable="true" crossContext="true"&gt;</span></p>
<p><span style="color: #0000ff">&lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_DBTest_log." suffix=".txt" timestamp="true"/&gt; </span></p>
<p><span style="color: #0000ff">&lt;Resource name="jdbc/SqlServerDB" auth="Container" type="javax.sql.DataSource"/&gt; </span></p>
<p><span style="color: #0000ff">&lt;ResourceParams name="jdbc/SqlServerDB"&gt; </span></p>
<p><span style="color: #0000ff">&lt;parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;name&gt;factory&lt;/name&gt; </span></p>
<p><span style="color: #0000ff">&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt; </span></p>
<p><span style="color: #0000ff">&lt;/parameter&gt; </span></p>
<p><span style="color: #0000ff">&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; </span></p>
<p><span style="color: #0000ff">&lt;parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;name&gt;maxActive&lt;/name&gt; </span></p>
<p><span style="color: #0000ff">&lt;value&gt;50&lt;/value&gt; </span></p>
<p><span style="color: #0000ff">&lt;/parameter&gt;</span></p>
<p><span style="color: #0000ff">&lt;!-- Maximum number of idle dB connections to retain in pool. Set to 0 for no limit.--&gt; </span></p>
<p><span style="color: #0000ff">&lt;parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;name&gt;maxIdle&lt;/name&gt; </span></p>
<p><span style="color: #0000ff">&lt;value&gt;20&lt;/value&gt; </span></p>
<p><span style="color: #0000ff">&lt;/parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;!-- Maximum time to wait for a dB connection to become available in ms, in this example 0.5 seconds. An Exception is thrown if this timeout is exceeded. Set to -1 to wait indefinitely. --&gt; </span></p>
<p><span style="color: #0000ff">&lt;parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;name&gt;maxWait&lt;/name&gt; </span></p>
<p><span style="color: #0000ff">&lt;value&gt;500&lt;/value&gt; </span></p>
<p><span style="color: #0000ff">&lt;/parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;!-- msSQL dB username and password for dB connections --&gt; </span></p>
<p><span style="color: #0000ff">&lt;parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;name&gt;username&lt;/name&gt; </span></p>
<p><span style="color: #0000ff">&lt;value&gt;sa&lt;/value&gt; </span></p>
<p><span style="color: #0000ff">&lt;/parameter&gt;</span></p>
<p><span style="color: #0000ff">&lt;parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;name&gt;password&lt;/name&gt; </span></p>
<p><span style="color: #0000ff">&lt;value&gt;sa&lt;/value&gt; </span></p>
<p><span style="color: #0000ff">&lt;/parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;!-- Class name for SQLServer2000 JDBC driver --&gt; </span></p>
<p><span style="color: #0000ff">&lt;parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;name&gt;driverClassName&lt;/name&gt; </span></p>
<p><span style="color: #0000ff">&lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt; </span></p>
<p><span style="color: #0000ff">&lt;/parameter&gt; </span></p>
<p><span style="color: #0000ff">&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;</span></p>
<p><span style="color: #0000ff">&lt;parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;name&gt;url&lt;/name&gt; </span></p>
<p><span style="color: #0000ff">&lt;value&gt;jdbc:microsoft:sqlserver://10.0.254.11:1433;databaseName=yourdb&lt;/value&gt;</span></p>
<p><span style="color: #0000ff">&lt;!--must use &amp; not use &amp; --&gt;</span></p>
<p><span style="color: #0000ff">&lt;/parameter&gt; </span></p>
<p><span style="color: #0000ff">&lt;/ResourceParams&gt; </span></p>
<p><span style="color: #0000ff">&lt;/Context&gt;</span></p>
<p><span style="color: #0000ff">步骤三：程序调用</span></p>
<p><span style="color: #0000ff">package dbmanage;</span></p>
<p><span style="color: #0000ff">import java.sql.CallableStatement;</span></p>
<p><span style="color: #0000ff">import java.sql.Connection;</span></p>
<p><span style="color: #0000ff">import java.sql.Date;</span></p>
<p><span style="color: #0000ff">import java.sql.PreparedStatement;</span></p>
<p><span style="color: #0000ff">import java.sql.ResultSet;</span></p>
<p><span style="color: #0000ff">import java.sql.SQLException;</span></p>
<p><span style="color: #0000ff">import java.sql.Statement;</span></p>
<p><span style="color: #0000ff">import java.util.Enumeration;</span></p>
<p><span style="color: #0000ff">import java.util.Hashtable;</span></p>
<p><span style="color: #0000ff">import java.util.Vector;</span></p>
<p><span style="color: #0000ff">import javax.naming.Context;</span></p>
<p><span style="color: #0000ff">import javax.naming.InitialContext;</span></p>
<p><span style="color: #0000ff">import javax.sql.DataSource;</span></p>
<p><span style="color: #0000ff">import util.smartDateFormat;</span></p>
<p><span style="color: #0000ff">public class dbManager {</span></p>
<p><span style="color: #0000ff">/************************************</span></p>
<p><span style="color: #0000ff">* @param static private boolean VERBOSE ;</span></p>
<p><span style="color: #0000ff">* @param Statement theStatement;</span></p>
<p><span style="color: #0000ff">* @param PreparedStatement thePstmt;</span></p>
<p><span style="color: #0000ff">* @param Connection theConnection;</span></p>
<p><span style="color: #0000ff">************************************/</span></p>
<p><span style="color: #0000ff">final static private boolean VERBOSE = true; //打印控制台控制</span></p>
<p><span style="color: #0000ff">//static Logger logger = Logger.getLogger(dbManager.class.getName());</span></p>
<p><span style="color: #0000ff">private Context initCtx = null;</span></p>
<p><span style="color: #0000ff">private Context ctx = null;</span></p>
<p><span style="color: #0000ff">private DataSource ds = null;</span></p>
<p><span style="color: #0000ff">private long timeout = 5000;</span></p>
<p><span style="color: #0000ff">private Statement theStatement = null;</span></p>
<p><span style="color: #0000ff">private PreparedStatement thePstmt = null;</span></p>
<p><span style="color: #0000ff">/************************************</span></p>
<p><span style="color: #0000ff">* 初试化initCtx</span></p>
<p><span style="color: #0000ff">* 取得数据源对象</span></p>
<p><span style="color: #0000ff">************************************/</span></p>
<p><span style="color: #0000ff">public</span></p>
<p><span style="color: #0000ff">dbManager() {</span></p>
<p><span style="color: #0000ff">try {</span></p>
<p><span style="color: #0000ff">initCtx = new InitialContext();</span></p>
<p><span style="color: #0000ff">//init context，read config web.xml</span></p>
<p><span style="color: #0000ff">if (initCtx == null) {</span></p>
<p><span style="color: #0000ff">throw new Exception("Initial Failed!");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">ctx = (Context) initCtx.lookup("java:comp/env");</span></p>
<p><span style="color: #0000ff">//find "jdbc/SqlServerDB" object this configruation in the SERVER.XML of Tomcat</span></p>
<p><span style="color: #0000ff">if (ctx != null) {</span></p>
<p><span style="color: #0000ff">ds = (DataSource) ctx.lookup("jdbc/SqlServerDB");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">if (ds == null) {</span></p>
<p><span style="color: #0000ff">throw new Exception("Look up DataSource Failed!");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">catch (Exception e) {</span></p>
<p><span style="color: #0000ff">log(e, "Can't get the Context!");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">/************************************</span></p>
<p><span style="color: #0000ff">* get Connection</span></p>
<p><span style="color: #0000ff">* @return Connection</span></p>
<p><span style="color: #0000ff">************************************/</span></p>
<p><span style="color: #0000ff">public synchronized</span></p>
<p><span style="color: #0000ff">Connection getConnection() {</span></p>
<p><span style="color: #0000ff">//get connection and set to delay time</span></p>
<p><span style="color: #0000ff">long startTime = new java.util.Date().getTime();</span></p>
<p><span style="color: #0000ff">Connection con = null;</span></p>
<p><span style="color: #0000ff">while (con == null) {</span></p>
<p><span style="color: #0000ff">con = newConnection();</span></p>
<p><span style="color: #0000ff">if (con != null) {</span></p>
<p><span style="color: #0000ff">//log("Create New Connection!");</span></p>
<p><span style="color: #0000ff">break;</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">try {</span></p>
<p><span style="color: #0000ff">log("连接超时，重新连接，等待" + timeout + "ms");</span></p>
<p><span style="color: #0000ff">wait(timeout);</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">catch (InterruptedException e) {</span></p>
<p><span style="color: #0000ff">log(e, "连接超时!");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">if ( (new java.util.Date().getTime() - startTime) &gt;= timeout) {</span></p>
<p><span style="color: #0000ff">log("Connection timeout!");</span></p>
<p><span style="color: #0000ff">break;</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">return con;</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">private</span></p>
<p><span style="color: #0000ff">Connection newConnection() {</span></p>
<p><span style="color: #0000ff">Connection con = null;</span></p>
<p><span style="color: #0000ff">try {</span></p>
<p><span style="color: #0000ff">con = ds.getConnection();</span></p>
<p><span style="color: #0000ff">if (con == null) {</span></p>
<p><span style="color: #0000ff">throw new Exception("Create Connection Failed!");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">catch (Exception e) {</span></p>
<p><span style="color: #0000ff">log("Create Connection Failed!");</span></p>
<p><span style="color: #0000ff">System.out.println(e.getMessage());</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">return con;</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">/************************************</span></p>
<p><span style="color: #0000ff">* release the connection</span></p>
<p><span style="color: #0000ff">* @param conn Connection</span></p>
<p><span style="color: #0000ff">* @param stmt Statement</span></p>
<p><span style="color: #0000ff">* @param pstmt PreparedStatement</span></p>
<p><span style="color: #0000ff">************************************/</span></p>
<p><span style="color: #0000ff">public synchronized</span></p>
<p><span style="color: #0000ff">void freeConnection(Connection conn,</span></p>
<p><span style="color: #0000ff">Statement stmt,</span></p>
<p><span style="color: #0000ff">PreparedStatement pstmt) {</span></p>
<p><span style="color: #0000ff">try {</span></p>
<p><span style="color: #0000ff">//close Statement</span></p>
<p><span style="color: #0000ff">if (stmt != null) {</span></p>
<p><span style="color: #0000ff">stmt.close();</span></p>
<p><span style="color: #0000ff">stmt = null;</span></p>
<p><span style="color: #0000ff">//log("Close Statement......");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">//close PreparedStatement</span></p>
<p><span style="color: #0000ff">if (pstmt != null) {</span></p>
<p><span style="color: #0000ff">pstmt.close();</span></p>
<p><span style="color: #0000ff">pstmt = null;</span></p>
<p><span style="color: #0000ff">//log("Close PreparedStatement......");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">catch (Exception e) {</span></p>
<p><span style="color: #0000ff">System.out.println(e.getMessage());</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">try {</span></p>
<p><span style="color: #0000ff">//close Connection</span></p>
<p><span style="color: #0000ff">if (conn != null) {</span></p>
<p><span style="color: #0000ff">conn.close();</span></p>
<p><span style="color: #0000ff">conn = null;</span></p>
<p><span style="color: #0000ff">//log("Close Connection......");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">catch (SQLException e) {</span></p>
<p><span style="color: #0000ff">log(e, "释放资源出错!");</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">/************************************</span></p>
<p><span style="color: #0000ff">* write log file.</span></p>
<p><span style="color: #0000ff">* @param s String</span></p>
<p><span style="color: #0000ff">************************************/</span></p>
<p><span style="color: #0000ff">private</span></p>
<p><span style="color: #0000ff">void log(String s) {</span></p>
<p><span style="color: #0000ff">if (VERBOSE) {</span></p>
<p><span style="color: #0000ff">System.out.println(new java.util.Date() + ":" + s);</span></p>
<p><span style="color: #0000ff">//logger.info(new java.util.Date()+s);</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">/************************************</span></p>
<p><span style="color: #0000ff">* write log file.</span></p>
<p><span style="color: #0000ff">* @param ex Object</span></p>
<p><span style="color: #0000ff">************************************/</span></p>
<p><span style="color: #0000ff">private</span></p>
<p><span style="color: #0000ff">void logerr(Object ex) {</span></p>
<p><span style="color: #0000ff">if (VERBOSE) {</span></p>
<p><span style="color: #0000ff">//System.out.println(new java.util.Date()+":"+s);</span></p>
<p><span style="color: #0000ff">//logger.error(ex);</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">/************************************</span></p>
<p><span style="color: #0000ff">* write log file.</span></p>
<p><span style="color: #0000ff">* @param e Throwable</span></p>
<p><span style="color: #0000ff">* @param msg String</span></p>
<p><span style="color: #0000ff">************************************/</span></p>
<p><span style="color: #0000ff">private</span></p>
<p><span style="color: #0000ff">void log(Throwable e, String msg) {</span></p>
<p><span style="color: #0000ff">System.out.println(new java.util.Date() + ": " + msg);</span></p>
<p><span style="color: #0000ff">//logger.info(new java.util.Date() + ": " + msg, e);</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">&#8230;&#8230;</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">OK，你现在可以方便的使用连接池了，想要一个得一个，记得要释放哦，连接池的数量总是有限的。</span></p>
<p><span style="color: #0000ff">二、中文问题照样很简单</span></p>
<p><span style="color: #0000ff">每个国家（或区域）都规定了计算机信息交换用的字符编码集，如美国的扩展 ASCII码, 中国的 GB2312-80，日本的 JIS 等，作为该国家/区域内信息处理的基础，有着统一编码的重要作用。字符编码集按长度分为 SBCS（单字节字符集），DBCS（双字节字符集）两大类。早期的软件（尤其是操作系统），为了解决本地字符信息的计算机处理，出现了各种本地化版本（L10N），为了区分，引进了 LANG, Codepage 等概念。但是由于各个本地字符集代码范围重叠，相互间信息交换困难；软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来，作一致处理，将特别的本地化处理内容降低到最少。这也就是所谓的国际化（I18N）。各种语言信息被进一步规范为 Locale 信息。处理的底层字符集变成了几乎包含了所有字形的 Unicode。</span></p>
<p><span style="color: #0000ff">现在大部分具有国际化特征的软件核心字符处理都是以 Unicode 为基础的，在软件运行时根据当时的 Locale/Lang/Codepage 设置确定相应的本地字符编码设置，并依此处理本地字符。在处理过程中需要实现 Unicode 和本地字符集的相互转换，甚或以 Unicode 为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸，任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。</span></p>
<p><span style="color: #0000ff">Java 语言内部是用 Unicode 表示字符的，遵守 Unicode V2.0。Java 程序无论是从/往文件系统以字符流读/写文件，还是往 URL 连接写 HTML 信息，或从 URL 连接读取参数值，都会有字符编码的转换。这样做虽然增加了编程的复杂度，容易引起混淆，但却是符合国际化的思想的。从理论上来说，这些根据字符集设置而进行的字符转换不应该产生太多问题。而事实是由于应用程序的实际运行环境不同，Unicode 和各个本地字符集的补充、完善，以及系统或应用程序实现的不规范，转码时出现的问题时时困扰着程序员和用户。</span></p>
<p><span style="color: #0000ff">其实解决 JAVA 程序中的汉字编码问题的方法往往很简单，但理解其背后的原因，定位问题，还需要了解现有的汉字编码和编码转换。相信这样的东西大家都见过了</span></p>
<p><span style="color: #0000ff">new String(request.getParameter("test").getBytes("iso-8859-1"),"GBK")</span></p>
<p><span style="color: #0000ff">但这样的代码相信不是一个解决的办法，这样会增加程序的复杂度，写数据库，提交表单，URL中传中文参数，到处都是中文问题！作为一个连走路都要算计最短距离的懒人，当然不愿天天叨念着new String(request.getParameter("test").getBytes("iso-8859-1"),"GBK")，然汉战战兢兢的处理各种字符转换的问题，我跋山涉水，翻山越岭，终于找到了完美的解决方式，在TOMCAT中只需要简单的配置，引入2个文件就可以轻松搞定。</span></p>
<p><span style="color: #0000ff">前提条件，每个页面使用</span></p>
<p><span style="color: #0000ff">&lt;%@ page contentType="text/html; CHARSET=utf8" language="java" import="java.sql.*" errorPage="" %&gt;</span></p>
<p><span style="color: #0000ff">&lt;meta http-equiv="Content-Type" content="text/html; CHARSET=utf8"&gt;</span></p>
<p><span style="color: #0000ff">地球人都知道的东西。</span></p>
<p><span style="color: #0000ff">步骤1：添加过滤器</span></p>
<p><span style="color: #0000ff">在TOMCAT中找到这2个文件RequestDumperFilter.java， SetCharacterEncodingFilter.java，他们位于D:\Tomcat5.0.27\webapps\jsp-examples \WEB-INF\classes\filters，加到你的工程文件里去，编译他们。</span></p>
<p><span style="color: #0000ff">步骤2：配置WEB.XML</span></p>
<p><span style="color: #0000ff">在web.xml里加入这一段</span></p>
<p><span style="color: #0000ff">&#8230;&#8230;</span></p>
<p><span style="color: #0000ff">&lt;filter&gt;</span></p>
<p><span style="color: #0000ff">&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;</span></p>
<p><span style="color: #0000ff">&lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;</span></p>
<p><span style="color: #0000ff">&lt;init-param&gt;</span></p>
<p><span style="color: #0000ff">&lt;param-name&gt;encoding&lt;/param-name&gt;</span></p>
<p><span style="color: #0000ff">&lt;param-value&gt;GBK&lt;/param-value&gt;</span></p>
<p><span style="color: #0000ff">&lt;/init-param&gt;</span></p>
<p><span style="color: #0000ff">&lt;/filter&gt;</span></p>
<p><span style="color: #0000ff">&lt;filter-mapping&gt;</span></p>
<p><span style="color: #0000ff">&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;</span></p>
<p><span style="color: #0000ff">&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</span></p>
<p><span style="color: #0000ff">&lt;/filter-mapping&gt;</span></p>
<p><span style="color: #0000ff">&#8230;&#8230;</span></p>
<p><span style="color: #0000ff">看到没有？这样你就不用写那些麻烦的转换代码了，当然这样还不足以解决问题。</span></p>
<p><span style="color: #0000ff">步骤3：修改server.xml</span></p>
<p><span style="color: #0000ff">在server.xml修改2个地方</span></p>
<p><span style="color: #0000ff">&lt;Connector port="8080"</span></p>
<p><span style="color: #0000ff">maxThreads="150" minSpareThreads="25" maxSpareThreads="75"</span></p>
<p><span style="color: #0000ff">enableLookups="false" redirectPort="8443" acceptCount="100"</span></p>
<p><span style="color: #0000ff">debug="0" connectionTimeout="20000" </span></p>
<p><span style="color: #0000ff">disableUploadTimeout="true" URIEncoding='GBK'/&gt;</span></p>
<p><span style="color: #0000ff">&lt;Connector className="org.apache.coyote.tomcat5.CoyoteConnector"</span></p>
<p><span style="color: #0000ff">port="8009" minProcessors="5" maxProcessors="75"</span></p>
<p><span style="color: #0000ff">enableLookups="true" redirectPort="8443"</span></p>
<p><span style="color: #0000ff">acceptCount="10" debug="0" connectionTimeout="0"</span></p>
<p><span style="color: #0000ff">useURIValidationHack="false" protocol="AJP/1.3"</span></p>
<p><span style="color: #0000ff">protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" </span></p>
<p><span style="color: #0000ff">URIEncoding='GBK'/&gt;</span></p>
<p><span style="color: #0000ff">OK，搞定！</span></p>
<p><span style="color: #0000ff">三、APACHE和TOMCAT他们俩关系非同一般</span></p>
<p><span style="color: #0000ff">Apache和tomcat都是很优秀的软件，更可贵的是它们是免费的。其实他们2个都是jakarta项目的重要组成部分。按辈分来讲， TOMCAT是APACHE的儿子，APACHE的专长是解析静态文件，CGI,PHP&#8230;&#8230;图片&#8230;&#8230;，儿子当然不能抢了老爹的饭碗，所以TOMCAT只有在J2EE这个上面发愤图强，其实TOMCAT并非不能干他老爹的活，只是稳定性差点而已（偶没有明显的感觉，可能是商业炒作吧），现在大家明白为什么把他们2个扯一起了吧，上阵还靠父子兵呢～</span></p>
<p><span style="color: #0000ff">把2个家伙整一起有大致有2种方法，一种是利用mod_jk2.so，一种是利用mod_jk_1.2.5_2.0.47.dll。这2个东东叫联接器（TOMCAT就是通过这家伙与apache勾搭上的）</span></p>
<p><span style="color: #0000ff">1、 利用mod_jk_1.2.5_2.0.47.dll在WINDOWS下整合</span></p>
<p><span style="color: #0000ff">步骤1：准备材料</span></p>
<p><span style="color: #0000ff">apache2.0.52</span></p>
<p><a href="http://apache.te8.com/dist/httpd/binaries/win32/apache_2.0.52-win32-x86-no_ssl.msi" target="blank"><span style="color: #0000ff">http://apache.te8.com/dist/httpd/binaries/win32/apache_2.0.52-win32-x86-no_ssl.msi</span></a></p>
<p><span style="color: #0000ff">tomcat5.0.27</span></p>
<p><a href="http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.0.19/bin/jakarta-tomcat-5.0.27.exe" target="blank"><span style="color: #0000ff">http://apache.linuxforum.net/dist/jakarta/tomcat-5/v5.0.19/bin/jakarta-tomcat-5.0.27.exe</span></a></p>
<p><span style="color: #0000ff">JDK（这个不用说了吧^_^）</span></p>
<p><span style="color: #0000ff">mod_jk_1.2.5_2.0.47.dll（关键是这个东东啊，找了我N久），据说在下面连接可以下到，最后在我同事那找到的。</span></p>
<p><a href="http://apache.linuxforum.net/dist/jakarta/tomcat-connectors/jk/binaries/win32/mod_jk_1.2.5_2.0.47.dll" target="blank"><span style="color: #0000ff">http://apache.linuxforum.net/dist/jakarta/tomcat-connectors/jk/binaries/win32/mod_jk_1.2.5_2.0.47.dll</span></a></p>
<p><span style="color: #0000ff">安装apache\ tomcat\JDK。</span></p>
<p><span style="color: #0000ff">步骤2：安装后设置环境变量</span></p>
<p><span style="color: #0000ff">设置我的电脑\属性\高级\环境变量\新建系统变量　变量名：JAVA_HOME 变量值：C:\JBuilderX\jdk1.4 (指向JDK的实际安装路径)；TOMCAT_HMOM 变量值：Tomcat5.0.27；lasspath 编辑变量值中加上　&#8230;&#8230;;%JAVA_HOME%\bin;%JAVA_HOME%\lib;%TOMCAT_HOME%\bin;.;</span></p>
<p><span style="color: #0000ff">测试一下，访问http://localhost和http://localhost:8080，默认安装是不会有什么错误的^_^</span></p>
<p><span style="color: #0000ff">把连接器mod_jk_1.2.5_2.0.47.dll　COPY到D:\Apache2\modules\下。</span></p>
<p><span style="color: #0000ff">步骤3：apache配置</span></p>
<p><span style="color: #0000ff">在d:\Apache2\conf下找到httpd.conf，找到DirectoryIndex，在index.html后添加index.jsp；查找&#8220;listen&#8221;用于本机测试时：Listen 127.0.0.1:80，我的是这样设置的Listen *:80</span></p>
<p><span style="color: #0000ff">查找AddDefaultCharset设置为AddDefaultCharset off，这样APACHE将以你页面定义的字符集解析页面。</span></p>
<p><span style="color: #0000ff">在最后添加如下代码：</span></p>
<p><span style="color: #0000ff">&lt;VirtualHost *:80&gt; #localhost为本机，你可用本机ip</span></p>
<p><span style="color: #0000ff">ServerAdmin darkxie@hotmail.com #你的mail地址</span></p>
<p><span style="color: #0000ff">DocumentRoot F:/uutang/uutang #你的项目组根目录</span></p>
<p><span style="color: #0000ff">ServerName dark #你的服务名，若你的机器有域名，设为域名</span></p>
<p><span style="color: #0000ff">ErrorLog logs/ErrorLog.txt #错误日志</span></p>
<p><span style="color: #0000ff">CustomLog logs/CustomLog.txt common #访问日志</span></p>
<p><span style="color: #0000ff">JkMount /servlet/* ajp13 #让Apache支持对servlet传送，用以Tomcat解析</span></p>
<p><span style="color: #0000ff">JkMount /*.jsp ajp13 #让Apache支持对jsp传送，用以Tomcat解析</span></p>
<p><span style="color: #0000ff">JkMount /*.do ajp13 #让Apache支持对struts的action传送，用以Tomcat解析</span></p>
<p><span style="color: #0000ff">&lt;/VirtualHost&gt;</span></p>
<p><span style="color: #0000ff">LoadModule jk_module modules/mod_jk_1.2.5_2.0.47.dll</span></p>
<p><span style="color: #0000ff">JkWorkersFile "D:/Tomcat5.0.27/conf/workers.properties"</span></p>
<p><span style="color: #0000ff">JkLogFile "D:/Tomcat5.0.27/logs/mod_jk2.log"</span></p>
<p><span style="color: #0000ff">JkLogLevel info</span></p>
<p><span style="color: #0000ff">步骤4：tomcat配置</span></p>
<p><span style="color: #0000ff">在d:\Tomcat5\conf下新建一个workers.properties文件 .内容如下: </span></p>
<p><span style="color: #0000ff">workers.tomcat_home=d:\Tomcat5 #让mod_jk模块知道Tomcat</span></p>
<p><span style="color: #0000ff">workers.java_home=d:\jdk1.3 #让mod_jk模块知道j2sdk</span></p>
<p><span style="color: #0000ff">ps=\ </span></p>
<p><span style="color: #0000ff">worker.list=ajp13 #模块版本,现有ajp13了,不要修改</span></p>
<p><span style="color: #0000ff">worker.ajp13.port=8009 #工作端口,若没占用则不用修改</span></p>
<p><span style="color: #0000ff">worker.ajp13.host=localhost #主机,若上面的Apache主机不为localhost,作相应修改</span></p>
<p><span style="color: #0000ff">worker.ajp13.type=ajp13 #类型</span></p>
<p><span style="color: #0000ff">worker.ajp13.lbfactor=1 #代理数,不用修改</span></p>
<p><span style="color: #0000ff">修改TOMCAT的server.xml文件：</span></p>
<p><span style="color: #0000ff">&lt;!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --&gt;</span></p>
<p><span style="color: #0000ff">&lt;Connector className="org.apache.coyote.tomcat5.CoyoteConnector"</span></p>
<p><span style="color: #0000ff">port="8009" minProcessors="5" maxProcessors="75"</span></p>
<p><span style="color: #0000ff">enableLookups="true" redirectPort="8443"</span></p>
<p><span style="color: #0000ff">acceptCount="10" debug="0" connectionTimeout="0"</span></p>
<p><span style="color: #0000ff">useURIValidationHack="false" protocol="AJP/1.3"</span></p>
<p><span style="color: #0000ff">protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" </span></p>
<p><span style="color: #0000ff">URIEncoding='GBK'/&gt;</span></p>
<p><span style="color: #0000ff">让TOMCAT知道ajp13协议，apache和tomcat俩父子间靠这个协议沟通。</span></p>
<p><span style="color: #0000ff">测试一下，访问http://localhost和http://localhost:8080，看到相同的页面没有？细心点，其实很简单，看看E文的帮助，搞定不成问题。</span></p>
<p><span style="color: #0000ff">2、 利用mod_jk2.so（也叫JK2）整合</span></p>
<p><span style="color: #0000ff">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整合大同小异，只是换了个联接器而已，现在一步一步整起来～</span></p>
<p><span style="color: #0000ff">步骤1：没有多说的，安装好TOMCAT和APACHE</span></p>
<p><span style="color: #0000ff">下载jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip，解压，将mod_jk2放到apache的安装文件夹下的modules文件夹中。</span></p>
<p><span style="color: #0000ff">步骤2：apache配置</span></p>
<p><span style="color: #0000ff">在/conf中加入一个work.properties文件，其内容如下：</span></p>
<p><span style="color: #0000ff">&lt;!--这个文件的作用不是很清楚，总之路径设置正确就行了。我的apache装在D:/Apache2，根据情况自己修改。--&gt;</span></p>
<p><span style="color: #0000ff">[shm]</span></p>
<p><span style="color: #0000ff">file=D:/ /Apache2/logs/shm.file</span></p>
<p><span style="color: #0000ff">size=1048576</span></p>
<p><span style="color: #0000ff">&lt;!--这个socket channel是必须的，port和host对应于tomcat端的设置。--&gt;</span></p>
<p><span style="color: #0000ff">#The socket channel</span></p>
<p><span style="color: #0000ff">[channel.socket:localhost:8009]</span></p>
<p><span style="color: #0000ff">port=8009</span></p>
<p><span style="color: #0000ff">host=localhost</span></p>
<p><span style="color: #0000ff">&lt;!--worker，必须的。--&gt;</span></p>
<p><span style="color: #0000ff">#define the worker</span></p>
<p><span style="color: #0000ff">[ajp13:localhost:8009]</span></p>
<p><span style="color: #0000ff">channel=channel.socket:localhost:8009</span></p>
<p><span style="color: #0000ff">&lt;!--url mapping，我的主要是.jsp和struts的.do，servlet的话设置成[uri:/xxx/*]之类的。--&gt;</span></p>
<p><span style="color: #0000ff">#uri mapping</span></p>
<p><span style="color: #0000ff">[uri:/*] #和第一种方式一样吧^_^</span></p>
<p><span style="color: #0000ff">[uri:/*.jsp]</span></p>
<p><span style="color: #0000ff">[uri:/*.do]</span></p>
<p><span style="color: #0000ff">worker=ajp13:localhost:8009</span></p>
<p><span style="color: #0000ff">在httpd.conf中，在LoadModule那里加入这句：</span></p>
<p><span style="color: #0000ff">LoadModule jk2_module modules/mod_jk2.so </span></p>
<p><span style="color: #0000ff">在最后加入这句：</span></p>
<p><span style="color: #0000ff">JkSet config.file "conf/work.properties"</span></p>
<p><span style="color: #0000ff">这是告诉apache去哪里找jk的配置的，根据具体情况修改。</span></p>
<p><span style="color: #0000ff">还要修改一下DirectoryIndex，DirectoryIndex index.html index.html.var index.jsp查找&#8220;listen&#8221;用于本机测试时：Listen 127.0.0.1:80，我的是这样设置的Listen *:80。</span></p>
<p><span style="color: #0000ff">当然还有我们的虚拟目录：</span></p>
<p><span style="color: #0000ff">&lt;VirtualHost *:80&gt;</span></p>
<p><span style="color: #0000ff">ServerAdmin darkxie@hotmail.com</span></p>
<p><span style="color: #0000ff">DocumentRoot F:/uutang/uutang</span></p>
<p><span style="color: #0000ff">ServerName dark</span></p>
<p><span style="color: #0000ff">ErrorLog logs/ErrorLog.txt</span></p>
<p><span style="color: #0000ff">CustomLog logs/CustomLog.txt common</span></p>
<p><span style="color: #0000ff">#JkMount /servlet/* ajp13</span></p>
<p><span style="color: #0000ff">#JkMount /*.jsp ajp13</span></p>
<p><span style="color: #0000ff">#JkMount /*.do ajp13</span></p>
<p><span style="color: #0000ff">&lt;/VirtualHost&gt;</span></p>
<p><span style="color: #0000ff">步骤3：tomcat配置</span></p>
<p><span style="color: #0000ff">Tomcat的端口设置为8080。</span></p>
<p><span style="color: #0000ff">在/conf文件夹加入jk2.properties文件，其内容如下：</span></p>
<p><span style="color: #0000ff"># Set the desired handler list</span></p>
<p><span style="color: #0000ff">handler.list=apr,request,channelSocket</span></p>
<p><span style="color: #0000ff">#</span></p>
<p><span style="color: #0000ff"># Override the default port for the socketChannel</span></p>
<p><span style="color: #0000ff">channelSocket.port=8009</span></p>
<p><span style="color: #0000ff">TOMCAT自己已经生成了这个文件，找到相关的地方把注视去掉改一下就成。</span></p>
<p><span style="color: #0000ff">注意：用这种方式整合最好是自己编译mod_jk2.so文件，特别是在unix/linux下,我没有环境，制作mod_webapp.so没有自己作过。具体方法，自己去找吧</span></p>
<img src ="http://www.blogjava.net/sutao/aggbug/162781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sutao/" target="_blank">苏醄</a> 2007-11-24 09:10 <a href="http://www.blogjava.net/sutao/archive/2007/11/24/162781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你的孩子需要掌握的26个在学校中所学不到的技能</title><link>http://www.blogjava.net/sutao/archive/2007/08/23/138867.html</link><dc:creator>苏醄</dc:creator><author>苏醄</author><pubDate>Thu, 23 Aug 2007 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/sutao/archive/2007/08/23/138867.html</guid><wfw:comment>http://www.blogjava.net/sutao/comments/138867.html</wfw:comment><comments>http://www.blogjava.net/sutao/archive/2007/08/23/138867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sutao/comments/commentRss/138867.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sutao/services/trackbacks/138867.html</trackback:ping><description><![CDATA[<div style="color: #3620d0;" class="dateTitle">July 9, 2007</div>
<div style="color: #3620d0;" class="postTitle"><a href="http://chn.blogbeta.com/289.html" rel="bookmark">你的孩子需要掌握的26个在学校中所学不到的技能</a></div>
<p style="color: #3620d0;">原文地址：<a href="http://zenhabits.net/2007/06/27-skills-your-child-needs-to-know-that-shes-not-getting-in-school/">27 Skills Your Child Needs to Know That She&#8217;s Not Getting In School </a></p>
<p style="color: #3620d0;">译文地址：<a href="http://angelived.org/2007/06/28/26-skills-your-child-needs-to-know-that-shes-not-getting-in-school/">你的孩子需要掌握的26个在学校中所学不到的技能</a></p>
<p style="color: #3620d0;">翻译：<a href="http://angelived.org/">Angelived ︱个人发展</a></p>
<p style="color: #3620d0;">每个人都熟悉我们的教育系统，一般而言，并没有教会我们小孩基本的阅读、写作、科学的技能，而这些都是他们在即将到来的高科技时代中竞争的必备技能（至少，这是摆在我们面前的现实，我们不在这里对它进行争论）。</p>
<p style="color: #3620d0;">但是，生活中需要的技能远比在学校中学习的基本学科多，除非你遇到一个愿意打破常规的老师，<strong> 否则你的孩子将无法学到他应该在生活中掌握的至关重要的技能。</strong> </p>
<p style="color: #3620d0;">思考一下你自己的经验。当你高中毕业后，你知道你要在生活中生存下来所需要的所有东西吗？如果你幸运的话，你知道怎么阅读，掌握了一些基本的历史知识和数学技能，如果你更幸运的话，你掌握了一个好的学习习惯，那会让你在大学中更容易适应。</p>
<p style="color: #3620d0;">但是你为生活准备好了吗？大多数好像还没有吧，除非你有一个非常关切你的父母（教会你那些技能）。实际上，我们中的很多人迷茫地度过了成年的早起阶段（20岁－30岁），就是因为我们没有掌握那些技能。我们正在为此付出代价。</p>
<p style="color: #3620d0;">那个阶段（指从小学到高中）是生活中必经的阶段，你可能会说，在毕业之后再学习那些课程（指必备的技能）。但是我们也能让小孩在独立之前掌握其中的一些技能，如果学校不能教会他们这些的话，那就让我们自己动手吧。</p>
<p style="color: #3620d0;">接下来所要谈的就是孩子在成人之前需要学习的课程（技能）。或许你也可以添加其他的技能在这张列表中，但是至少这张列表是一开始时应该学习的要点。</p>
<p style="color: #3620d0;">需要注意的是要如何教会他们这些东西：这些课程不能通过说教或者课本来教授，它们只能通过实例、交谈、演示和允许孩子自己去做这些事情（刚开始要给
予一定的监督指导），从而教会他们。一旦你告诉了他们某个技能，就要演示给他们如何去做，然后让他们在监督之下自己做几次，给孩子独立做这些事情的自信，
让他从错误中学习经验。不时的通过交谈检验他们所学到的技能。（译者：我认为孩子是父母的镜子，要想让孩子掌握这些技能，父母一定要以身作则，才能起到正
确的指导作用。）</p>
<p style="color: #3620d0;"><strong> 理财</strong> </p>
<ul style="color: #3620d0;">
    <li><strong> 存钱</strong> 。花的钱不要比赚的多，这是多么简单的道理，很多年轻人都懂得这个道理，知道该怎么遵守它。从小就教会你的小孩把他收到的或者赚到的零用钱存在银行里。教导他如何设定一个节省计划，然后让他学会节省，最后用这些钱给他购买任何他想要买的东西。</li>
    <li><strong>  预算</strong> 。我们（指成年人）当中的很多人害怕这个工作，因为它而遭受许多麻烦，这是因为我们缺乏做细致的预算的
    理解和技能。教会孩子
    简单的预算技能，这样一来，他们在长大时做预算的话就没问题了。你可以等到他们到了十几岁的时候在教他们——这也是个好事，因为这会告诉他们为什么学习数
    学是必要的。</li>
    <li><strong> 付款</strong> 。给他们帐单让他们自己付款，并且教育他们付款要准时，在网上或者实地支付。教会他们如何写支票，证件以及如何在网上支付，以及如何确定支付不会迟到——不论是立即支付还是自动支付。</li>
    <li><strong> 投资</strong> 。什么是投资？为什么投资是必要的？你是怎样投资的？有哪些不同投资的方式？你是怎样研究一项投资的？投资是怎样随着时间变化的？这是一个与你的孩子进行谈话的好话题。（译者：应该从小就培养孩子投资的意识，人生就是一项投资）</li>
    <li><strong> 节俭</strong> 。这是应该从小就教会他们的。在购物时节省，比较不同价格和质量的产品；使用耐用的物品，不要浪费；在家里吃饭，不要在外边花太多的钱吃饭；控制购物的欲望。当我们外出大量购物的时候，包括圣诞节前，我们也要教导他们节俭。</li>
    <li><strong> 信用</strong> 。这是大多数成人所面临的一个主要问题。教育他们对信用负责，如何避免欠过多的债务，如何安全的使用信用卡。</li>
    <li><strong> 退休</strong> 。努力工作然后退休，还是终生工作（只有很短的退休时间）呢？这是个个人问题，但是你的孩子应该知道如何
    在前者与后者之间做出
    选择，并且知道应该各要怎么去做，为何要在年轻的时候考虑退休的事情，这两个选择有什么不同，以及如何自动去做。（这一段翻译的不大清楚，我也没有完全弄
    明白后几句是什么意思）</li>
    <li><strong> 慈善事业</strong> 。告诉他们为什么这是钱的一项很重要的用途，以及如何将它培养成一种习惯。这不但是一个财务问题，更是一个社会问题。也要引导他们如何无偿奉献自己的时间和努力。</li>
</ul>
<p style="color: #3620d0;"><strong> 思考</strong> </p>
<ul style="color: #3620d0;">
    <li><strong> 批判性思维</strong> 。这是一项在学校中所没有教的重要技能。目前，我们被教导成为机器人，听从老师的话，不要问为什
    么，接受老师告诉我们的
    东西，不用去思考，做老实的雇员，闭上嘴。如果你是一个老板，你可能会希望你的员工像上边说的那样，如果你是一个政客，你可能会希望你的市民像上边说的那
    样。但是你想要你的孩子也成为那个样子么？一个没有疑问、无知的市民/雇员/学生？如果是那样的话，请继续看下一个技能，如果不是的话，就开始介绍给你的
    孩子，为什么要养成质问的习惯，并培养他们如何寻找答案的技能。怎样权威的发问——没有一个正确的答案来回答这个问题。谈话是一个不错的方式来完成这个技
    能的教导。</li>
    <li><strong> 阅读</strong> 。当然，我们在上学的时候学过月的。但是学校通常所教的令人厌烦。将学校之外精彩的世界展示给你的孩子，指导他们如何通过网络找到材料，并且告诉他们如何评价他们阅读材料的可信性、逻辑性以及真实性。</li>
</ul>
<p style="color: #3620d0;"><strong> 成功</strong> </p>
<ul style="color: #3620d0;">
    <li><strong> 乐观的思考</strong> 。虽然严密的思考是一项非常重要的技能，对未来生活的前景充满乐观也同样重要。当然，事情有时候会很糟糕，但是它们会好起来的。积极地去寻找解决问题的方案而不是抱怨，最重要的是，要让他们学会相信自己的能力，不要抱有任何消极的念头。</li>
    <li><strong> 动力</strong> 。让他们知道，实现目标的关键不是纪律，而是动力。如何激发自己的动力，有什么不同的方法，并让他们感受到实现目标的快感。刚开始给他们设定小的、容易实现的目标，让他们逐渐发展这个技能。</li>
    <li><strong> 不要拖延</strong> 。拖延是大多数成年人（甚至是小孩）所面对的问题。现在，我认为应该可以抽出一段时间来无聊地打发，可以偷懒一会，娱乐一下。但是当我们必须做某些事情的时候，我们应该如何自己去做它呢？分析一下拖延背后的原因，如何克服拖延，这是你能够教会孩子的一项基本技能。</li>
    <li><strong> 激情</strong> 。成功的一个重要途径就是找到某个你充满激情的东西，并以它为生。你的孩子在年轻的时候不知道这个问题的答案，但是你应该指引他如何找到他的激情所在以及如何继续发展它，并且告诉他为什么这是如此重要。</li>
</ul>
<p style="color: #3620d0;"><strong> 社交</strong> </p>
<ul style="color: #3620d0;">
    <li><strong> 反对竞争主义</strong> 。当我们还是小孩的时候，我们被灌输的是竞争主义。在成人的世界里，竞争也是我们行为表现。那会
    导致卑鄙的手段、怨恨
    以及其他类似的东西。相反的，给你的孩子讲授许多成功的人的经历，让他们知道如果你帮助他人成功的话，你也会更容易成功，以及他人会如何以帮助你作为回
    报。让他们明白结交朋友或同盟比树立敌人的好处更多，并告诉他们如何去结交朋友。让他们在竞争之前学会合作与团队精神。</li>
    <li><strong> 同情</strong> 。这在学校中是没有教过的。实际上，学校不但没有教会孩子如何同情他人，帮助他们减少痛苦，相反的学校经
    常教育孩子增加他人的
    苦难（作者为什么会这样想呢？可能美国与国内的情况不同吧）。学会站在对方的角度看待问题，尝试着理解他们，并且帮助他们摆脱苦难，这是你应该教导孩子
    的。</li>
    <li><strong> 关爱</strong> 。关爱是同情的同胞胎兄弟，不同的是，它不但希望为对方减少痛苦，同时希望对方快乐。这两者都是至关重要的，因此教会你的孩子拥有一颗关爱的心，他的生活也会充满快乐。</li>
    <li><strong> 倾听</strong> 。我们的孩子在学校中学会如何倾听了么？或者如何与他人交谈？或许这就是为什么许多成年人没有掌握这个至关重要的技能的原因。学习如何真正地倾听他人讲话，去理解他们所说的话，去领会其中的涵义。这对于交往非常重要，你的孩子应该学会。</li>
    <li><strong> 交谈</strong> 。与倾听有着密切的联系，但是交谈的艺术是在学校中所没有教的。事实上，小孩接受的教育是在大多数情况下
    交谈是不好的（比如说
    上课谈话、与陌生人聊天），但是大多数情况，交谈是必须的，而不是演讲。这是一个非常重要的社交技能，它应该从小在家中就培养。学会与你的孩子交流，而不
    要只让他听你讲话。</li>
</ul>
<p style="color: #3620d0;"><strong> 基本技能</strong> </p>
<ul style="color: #3620d0;">
    <li><strong> 开车</strong> 。为什么需要汽车（不，不是为了摆酷），如何买一辆实用的汽车，如何保养汽车，发动机是如何工作的，汽车抛锚了该怎么处理，如何修理汽车。这些都是你应该教会孩子的基本技能。</li>
    <li><strong> 家务</strong> 。如何修理屋子里的器具以及如何保养它们。铅制品，电器，加热器和制冷器，油漆，草坪，一切的器具。基本的维护和修理的工具和技能，以及如何打电话请专业的人员帮忙。</li>
    <li><strong> 清洁</strong> 。太多的成年人不知道如何洗衣服，不知道如何打扫房屋，不知道如何保持屋子干净整洁，甚至不知道每周或者每月进行一次打扫。教会你的孩子所有这些事情，而不要只告诉他们要做什么。</li>
    <li><strong> 组织</strong> 。教会他们如何使每样东西各就其位，如何列一个活动安排表，如何解决日常事务，以及如何集中精力在重要的事务上面。</li>
</ul>
<p style="color: #3620d0;"><strong> 快乐</strong> </p>
<ul style="color: #3620d0;">
    <li><strong> 享受生活的乐趣</strong> 。小孩在这一点上没有多大的问题，但是知道它的重要性以及如果做到这一点，即使对一个大人，也会非常有帮助的。为你的孩子树立一个好的榜样，你的孩子会跟你学的。</li>
    <li><strong> 找到目标</strong> 。无论是崇高的宗教信仰，还是使你的家庭快乐的愿望，抑或是找到工作的目标，生活里有一个目标是非常重要的。教育你的孩子目标的重要性，以及如何自己找到目标。</li>
    <li><strong> 发展亲密的关系</strong> 。教会你的孩子这个技巧最好的方法就是与你的孩子建立亲密的关系，以你与配偶或者其他人为模范。教会他们发展这些类型的关系的技巧，告诉他们这一点的重要性，以及如何克服遇到的难题。在与人交往中总会有摩擦，但是掌握了正确的沟通、折衷的技巧，他们就能轻易的解除误会。</li>
</ul>
<p style="color: #3620d0;"><strong> 你有其他的技巧要添加到这个列表中吗？不妨在评论中告诉大家。</strong> </p>
<p style="color: #3620d0;">PS：原文为27个技能，本文删去了比较难翻译过来的一点，嘿嘿，还请原谅。这篇文章是为广大的父母写的，目的是告诉你应该怎么样对孩子进行早期教
育，如果你想让你的孩子成才，那么文章中所提到的这些技能应该尽早教给孩子，这些都是他们在这个社会中立足的基本技能。做为一个刚刚成年的大学生，我深刻
的体会到以上技能的重要性，我正因为缺乏某些技能而烦恼。如果你希望你的孩子在将来能够有一个更好的发展，能够更好的成才的话，那么这些技能是必须教给他
们的。学校不做这个工作，就让家长们自己动手来做吧！
</p>
<br><img src ="http://www.blogjava.net/sutao/aggbug/138867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sutao/" target="_blank">苏醄</a> 2007-08-23 15:59 <a href="http://www.blogjava.net/sutao/archive/2007/08/23/138867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>