<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[虫虫的blog  SINCE2004]]></title> 
<link>http://www.zhenghe.biz/index.php</link> 
<description><![CDATA[人生幻灯片  -   前半生(身)，不要怕；后半生(身)，不要悔！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[虫虫的blog  SINCE2004]]></copyright>
<item>
<link>http://www.zhenghe.biz/read.php/.htm</link>
<title><![CDATA[tomcat]]></title> 
<author>网络毛毛虫 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[技术文章]]></category>
<pubDate>Tue, 03 Aug 2004 08:24:15 +0000</pubDate> 
<guid>http://www.zhenghe.biz/read.php/.htm</guid> 
<description>
<![CDATA[ 
	<blockquote><blockquote>随着java的流行，其在web上的应用也越来越广，tomcat作为一个开源的servlet容器，应用前景越来越广，本文将向你讲述tomcat的一些知识。</blockquote><p><a id="1" name="1" title="1"></a><span class="atitle2">一：简介</span><br />tomcat是jakarta项目中的一个重要的子项目，其被JavaWorld杂志的编辑选为2001年度最具创新的java产品(Most Innovative Java Product)，同时它又是sun公司官方推荐的servlet和jsp容器(具体可以见http://java.sun.com/products/jsp/tomcat/)，因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。</p><p><a id="2" name="2" title="2"></a><span class="atitle2">二：安装及配置</span><br />tomcat最新版本为4.0.1，这个版本用了一个新的servlet容器Catalina，完整的实现了servlet2.3和jsp1.2规范。注意安装之前你的系统必须安装了jdk1.2以上版本。</p><p><span class="atitle3">(一)：安装</span><br />1：windows平台<br />从tomcat网站下载<a href="http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.1/bin/jakarta-tomcat-4.0.1.exe" target="_blank">jakarta-tomcat-4.0.1.exe</a>，按照一般的windows程序安装步骤即可安装好tomcat,安装时它会自动寻找你的jdk和jre的位置。</p><p>2：linux平台<br />下载<a href="http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.1/bin/jakarta-tomcat-4.0.1.tar.gz" target="_blank">jakarta-tomcat-4.0.1.tar.gz</a>，将其解压到一个目录。</p><p><span class="atitle3">(二)：配置</span><br />运行tomcat需要设置JAVA_HOME变量</p><p><table border="1" cellspacing="0" cellpadding="5" width="585" style="width: 585px; height: 70px" bgcolor="#cccccc"><tbody><tr><td><pre>set JAVA_HOME=c:/jdk (win98，在msdos方式下使用，或者放入autoexec.bat中) export JAVA_HOME=/usr/local/jdk (linux下使用，放到/etc/bashrc或者/etc/profile中) &nbsp;</pre></td></tr></tbody></table><br /><br /></p><p><span class="atitle3">(三)：运行</span><br />设置完毕后就可以运行tomcat服务器了，进入tomcat的bin目录，win98下用startup启动tomcat，linux下用startup.sh，相应的关闭tomcat的命令为shutdown和shutdown.sh。</p><p>启动后可以在浏览器中输入http://localhost:8080/测试，由于tomcat本身具有web服务器的功能，因此我们不必安装apache，当然其也可以与apache集成到一起，下面会介绍。</p><p>下面你可以测试其自带的jsp和servlet示例。</p><p><a id="3" name="3" title="3"></a><span class="atitle2">三：应用</span></p><p><span class="atitle3">(一):目录结构</span><br />tomcat的目录结构如下：</p><p><table border="1" cellspacing="0" cellpadding="5" width="574" style="width: 574px; height: 192px" bgcolor="#cccccc"><tbody><tr><td>目录名</td><td>简介</td></tr><tr><td>bin</td><td>存放启动和关闭tomcat脚本</td></tr><tr><td>conf</td><td>包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml</td></tr><tr><td>work</td><td>存放jsp编译后产生的class文件</td></tr><tr><td>webapp</td><td>存放应用程序示例，以后你要部署的应用程序也要放到此目录</td></tr><tr><td>logs</td><td>存放日志文件</td></tr><tr><td>lib/japser/common</td><td>这三个目录主要存放tomcat所需的jar文件</td></tr></tbody></table><br /><br /></p><p><span class="atitle3">(二)：server.xml配置简介</span><br />下面我们将讲述这个文件中的基本配置信息，更具体的配置信息见tomcat的文档</p><table border="1" cellspacing="0" cellpadding="0" width="80%" bgcolor="#cccccc"><tbody><tr><td width="27%">元素名</td><td width="21%">属性</td><td width="52%">解释</td></tr><tr><td rowspan="2" width="27%">server</td><td width="21%">port</td><td width="52%">指定一个端口，这个端口负责监听关闭tomcat的请求</td></tr><tr><td width="21%">shutdown</td><td width="52%">指定向端口发送的命令字符串</td></tr><tr><td width="27%">service</td><td width="21%">name</td><td width="52%">指定service的名字</td></tr><tr><td rowspan="7" width="27%">Connector<br />(表示客户端和service之间的连接)</td><td width="21%">port</td><td width="52%">指定服务器端要创建的端口号，并在这个断口监听来自客户端的请求</td></tr><tr><td width="21%">minProcessors</td><td width="52%">服务器启动时创建的处理请求的线程数</td></tr><tr><td width="21%">maxProcessors</td><td width="52%">最大可以创建的处理请求的线程数</td></tr><tr><td width="21%">enableLookups</td><td width="52%">如果为true，则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名，若为false则不进行DNS查询，而是返回其ip地址</td></tr><tr><td width="21%">redirectPort</td><td width="52%">指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号</td></tr><tr><td width="21%">acceptCount</td><td width="52%">指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理队列中的请求数，超过这个数的请求将不予处理</td></tr><tr><td width="21%">connectionTimeout</td><td width="52%">指定超时的时间数(以毫秒为单位)</td></tr><tr><td width="27%">Engine<br />(表示指定service中的请求处理机，接收和处理来自Connector的请求)</td><td width="21%">defaultHost</td><td width="52%">指定缺省的处理请求的主机名，它至少与其中的一个host元素的name属性值是一样的</td></tr><tr><td rowspan="3" width="27%">Context<br />(表示一个web应用程序，通常为WAR文件，关于WAR的具体信息见servlet规范)</td><td width="21%">docBase</td><td width="52%">应用程序的路径或者是WAR文件存放的路径</td></tr><tr><td width="21%">path</td><td width="52%">表示此web应用程序的url的前缀，这样请求的url为http://localhost:8080/path/****</td></tr><tr><td width="21%">reloadable</td><td width="52%">这个属性非常重要，如果为true，则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化，自动装载新的应用程序，我们可以在不重起tomcat的情况下改变应用程序</td></tr><tr><td rowspan="3" width="27%"><p>host<br />(表示一个虚拟主机)</p></td><td width="21%">name</td><td width="52%">指定主机名</td></tr><tr><td width="21%">appBase</td><td width="52%">应用程序基本目录，即存放应用程序的目录</td></tr><tr><td width="21%">unpackWARs</td><td width="52%">如果为true，则tomcat会自动将WAR文件解压，否则不解压，直接从WAR文件中运行应用程序</td></tr><tr><td rowspan="4"><p>Logger<br />(表示日志，调试和错误信息)</p></td><td width="21%">className</td><td width="52%">指定logger使用的类名，此类必须实现org.apache.catalina.Logger 接口</td></tr><tr><td width="21%">prefix</td><td width="52%">指定log文件的前缀</td></tr><tr><td width="21%">suffix</td><td width="52%">指定log文件的后缀</td></tr><tr><td width="21%">timestamp</td><td width="52%">如果为true，则log文件名中要加入时间，如下例:localhost_log.2001-10-04.txt</td></tr><tr><td width="27%"><p>Realm<br />(表示存放用户名，密码及role的数据库)</p></td><td width="21%">className</td><td width="52%">指定Realm使用的类名，此类必须实现org.apache.catalina.Realm接口</td></tr><tr><td rowspan="3"><p>Valve<br />(功能与Logger差不多，其prefix和suffix属性解释和Logger 中的一样)</p></td><td width="21%">className</td><td width="52%"><p>指定Valve使用的类名，如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息</p></td></tr><tr><td width="21%">directory</td><td width="52%">指定log文件存放的位置</td></tr><tr><td width="21%">pattern</td><td width="52%">有两个值，common方式记录远程主机名或ip地址，用户名，日期，第一行请求的字符串，HTTP响应代码，发送的字节数。combined方式比common方式记录的值更多</td></tr></tbody></table><p>注意：1：经过我测试，我设置Context 的path=&quot;&quot;,reloadable=true，然后放一个WAR文件到webapps目录，结果tomcat不能检测出此文件(重起tomcat可以)，而把此文件解压，则tomcat会自动检测出这个新的应用程序。如果不能自动检测WAR文件，我们可以利用下面管理中讲的方法来部署应用程序。</p><p>2：默认的server.xml中，Realm元素只设置了一个className属性，但此文件中也包含几个通过JDBC连接到数据库进行验证的示例(被注释掉了)，通过Realm元素我们可以实现容器安全管理(Container Managed Security)。</p><p>3：还有一些元素我们没有介绍，如Parameter，loader，你可以通过tomcat的文档获取这些元素的信息。</p><p><span class="atitle3">(三)：管理</span></p><p><strong>1：配置</strong><br />在进行具体的管理之前，我们先给tomcat添加一个用户，使这个用户有权限来进行管理。</p><p>打开conf目录下的tomcat-users.xml文件，在相应的位置添加下面一行：</p><p><table border="1" cellspacing="0" cellpadding="5" width="565" style="width: 565px; height: 56px" bgcolor="#cccccc"><tbody><tr><td><pre>&lt;user name=&quot;zf&quot; password=&quot;zf&quot; roles=&quot;standard,manager&quot;/&gt; &nbsp; </pre></td></tr></tbody></table><br /><br /></p><p>注意：这一行的最后部分一定是/&gt;,tomcat的文档掉了/符号，如果没有/符号的话，tomcat重起时将无法访问应用程序。通过logs/catalina.out文件你可以看到这个错误的详细信息。</p><p>然后重起tomcat，在浏览器中输入http://localhost:8080/manager/，会弹出对话框，输入上面的用户名和密码即可。</p><p><strong>2：应用程序列表</strong><br />在浏览器中输入http://localhost:8080/manager/list，浏览器将会显示如下的信息：</p><p><table border="1" cellspacing="0" cellpadding="5" width="552" style="width: 552px; height: 128px" bgcolor="#cccccc"><tbody><tr><td><pre>OK - Listed applications for virtual host localhost /ex:running:1 /examples:running:1 /webdav:running:0 /tomcat-docs:running:0 /manager:running:0 /:running:0 </pre></td></tr></tbody></table><br /><br /></p><p>面的信息分别为应用程序的路径，当前状态(running 或者stopped)，与这个程序相连的session数。</p><p><strong>3：重新装载应用程序</strong><br />在浏览器中输入 http://localhost:8080/manager/reload?path=/examples，浏览器显示如下：</p><p><table border="1" cellspacing="0" cellpadding="5" width="576" style="width: 576px; height: 56px" bgcolor="#cccccc"><tbody><tr><td><pre>OK - Reloaded application at context path /examples &nbsp; &nbsp;</pre></td></tr></tbody></table><br /><br /></p><p>表示example应用程序装载成功，如果我们将server.xml的Context元素的reloadable属性设为true(见上面表格)，则没必要利用这种方式重新装载应用程序，因为tomcat会自动装载。</p><p><strong>4：显示session信息</strong><br />在浏览器中输入http://localhost:8080/manager/sessions?path=/examples，浏览器显示如下：</p><p><table border="1" cellspacing="0" cellpadding="5" width="609" style="width: 609px; height: 70px" bgcolor="#cccccc"><tbody><tr><td><pre>OK - Session information for application at context path /examples Default maximum session inactive <br />interval 30 minutes &nbsp; &nbsp;</pre></td></tr></tbody></table><br /><br /></p><p><strong>5：启动和关闭应用程序</strong><br />在浏览器中输入http://localhost:8080/manager/start?path=/examples和http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用程序。</p><p><strong>6：部署及撤销部署</strong><br />WAR有两种组织方式，一种是按一定的目录结构组织文件，一种是一个后缀为WAR的压缩包，因此它的部署方式也有两种：<br />(1)：在浏览器中输入：http://localhost:8080/manager/install?path=/examples&amp;war=file:/c:examples<br />就会将按目录结构组织的WAR部署</p><p>(2)：如果输入:http://localhost:8080/manager/install?path=/examples&amp;war=jar:file:/c:examples.war!/<br />就会将按压缩包组织的WAR部署，注意此url后半部分一定要有!/号。</p><p>部署后就可以用 http://localhost:8080/examples访问了。</p><p>在浏览器中输入：http://localhost:8080/manager/remove?path=/examples<br />就会撤销刚才部署的应用程序。</p><p><span class="atitle3">(四)：与apache集成</span><br />虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此我们想把apache和tomcat集成起来。</p><p>我们以linux系统为例介绍.</p><p>从apache网站下载<a href="http://www.apache.org/dist/httpd/apache_1.3.22.tar.gz" target="_blank">apache1.3.22源代码版本</a>，然后使用如下命令配置安装apache：</p><p><table border="1" cellspacing="0" cellpadding="5" width="579" style="width: 579px; height: 126px" bgcolor="#cccccc"><tbody><tr><td><pre>mkdir /usr/local/apache tar zxvf apache.1.32.tar.gz cd apache.1.32 ./configure --prefix=/usr/local/apache --enable-module=so &nbsp;make make install &nbsp;</pre></td></tr></tbody></table><br /><br /></p><p>注意configure命令指定目标安装目录，并且加入DSO(Dynamic Shared Object)支持，注意一定不要忘了这一个选项。</p><p>然后下载<a href="http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.1/bin/linux/i386/webapp-module-1.0-tc40-linux-glibc2.2.tar.gz" target="_blank">webapp模块</a>，将解压后mod_webapp.so文件放入apache的libexec目录，编辑apache的conf目录下的httpd.conf，在这个文件的最后加入下面三行：</p><p><table border="1" cellspacing="0" cellpadding="5" width="589" style="width: 589px; height: 84px" bgcolor="#cccccc"><tbody><tr><td><pre>LoadModule webapp_module libexec/mod_webapp.so WebAppConnection warpConnection warp localhost:8008 WebAppDeploy examples warpConnection /examples/ &nbsp; </pre></td></tr></tbody></table><br /><br /></p><p>第一行是加入webapp模块，如果编译apache时不增加DSO支持，则无法使用LoadModule指令，第二行指定tomcat与apache的连接，第三行指定部署那个应用，这两个指令使用格式如下：</p><p><table border="1" cellspacing="0" cellpadding="5" width="595" style="width: 595px; height: 70px" bgcolor="#cccccc"><tbody><tr><td><pre>WebAppConnection [connection name] [provider] [host:port] WebAppDeploy [application name] [connection name] [url path] &nbsp; &nbsp;</pre></td></tr></tbody></table><br /><br /></p><p>其中connection name指定连接名，provider只能是warp，port端口与你的tomcat的配置文件server.xml最后几行指定的要保持一致。文件如下：</p><p><table border="1" cellspacing="0" cellpadding="5" width="597" style="width: 597px; height: 140px" bgcolor="#cccccc"><tbody><tr><td><pre>&lt;Service name=&quot;Tomcat-Apache&quot;&gt; &nbsp;&lt;Connector className=&quot;org.apache.catalina.connector.warp.WarpConnector&quot; port=&quot;8008&quot; minProcessors=&quot;5&quot; maxProcessors=&quot;75&quot; enableLookups=&quot;true&quot; acceptCount=&quot;10&quot; debug=&quot;0&quot;/&gt; ****** &lt;/Service&gt; &nbsp; </pre></td></tr></tbody></table><br /><br /></p><p>application name与你在tomcat中部署的应用名一致，url path指定访问这个应用的url。例如上面的例子可以通过http://localhost/examples/来访问tomcat中的examples应用。</p><p><span class="atitle3">(五)：中文问题</span><br />一般jsp的乱码问题可以通过在jsp中加入&lt;%@ page contentType=&quot;text/html;charset=GB2312&quot; %&gt;来解决，至于servlet的乱码在可以使用servlet2.3中提供的HttpServeletRequest.setCharacterEncoding函数。更详细的中文问题请见<a href="http://www-900.ibm.com/developerWorks/cn/java/jsp_dbcsz/index.shtml" target="_blank">JSP/Servlet 中的汉字编码问题</a>。</p><p><a id="4" name="4" title="4"></a><span class="atitle2">四：综述</span><br />tomcat作为一个servlet(jsp也被编译为servlet执行)容器，其应用前景是非常好的，如果与<a href="http://www.jboss.org/" target="_blank">jboss</a>结合起来，则可以实现sun的j2ee规范(用jboss作ejb服务器)。jboss的官方网站也提供集成了tomcat3.2*的jboss以供下载。另外一个开源的应用服务器(<a href="http://www.enhydra.org/" target="_blank">enhydra</a>) 也是基于tomcat的，其提供了更友好的管理界面，部署应用程序也更简单，功能也更强大。</p><p><a id="resources" name="resources" title="resources"></a><span class="atitle2">参考资料：</span></p><ul class="n01"><li><a href="http://jakarta.apache.org/tomcat/tomcat-4.0-doc/index.html">tomcat文档</a> </li><li><a href="http://www.jguru.com/faq/Tomcat">www.jguru.com的tomcat faq</a> </li><li><a href="http://httpd.apache.org/docs/">apache的文档</a> </li></ul></blockquote><br/>Tags - <a href="http://www.zhenghe.biz/go.php/tags/tomcat/" rel="tag">tomcat</a> , <a href="http://www.zhenghe.biz/go.php/tags/apache/" rel="tag">apache</a> , <a href="http://www.zhenghe.biz/go.php/tags/windows/" rel="tag">windows</a> , <a href="http://www.zhenghe.biz/go.php/tags/linux/" rel="tag">linux</a> , <a href="http://www.zhenghe.biz/go.php/tags/%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">配置</a>
]]>
</description>
</item><item>
<link>http://www.zhenghe.biz/read.php/.htm#blogcomment</link>
<title><![CDATA[[评论] tomcat]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.zhenghe.biz/read.php/.htm#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>