﻿<?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-小草的天空-文章分类-服务器(软件知识)</title><link>http://www.blogjava.net/xiaofei-suman/category/50965.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Feb 2012 09:17:26 GMT</lastBuildDate><pubDate>Wed, 29 Feb 2012 09:17:26 GMT</pubDate><ttl>60</ttl><item><title>tomcat源码阅读学习(1)</title><link>http://www.blogjava.net/xiaofei-suman/articles/371002.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Wed, 29 Feb 2012 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/371002.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/371002.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/371002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/371002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/371002.html</trackback:ping><description><![CDATA[<p>&nbsp;一、<span style="background-color: #ccffcc">下载tomcat源码, 用的版本是7.0.26,把src下代码copy到eclipse报错,缺少3个jar包</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: #ffffff">jaxrpc.jar、wsdl4j.jar、org.eclipse.jdt.core_3.5.2.v_981_R35x.jar(从eclipse-plugins下找的)</span><br />二、 <span style="background-color: #ccffcc">阅读代码-从入口开始</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、<span style="background-color: #33cccc">入口类org.apache.catalina.startup.Bootstrap, 找到main函数</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、<span style="background-color: #33cccc">Bootstrap首先初始化-bootstrap.init()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.1 <span style="background-color: #c0c0c0">setCatalinaHome()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先获得系统catalina.home属性值,不存在,检查user.dir属性下是否存在bootstrap.jar文件<br />&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(i)存在：其实就是设置catalina.home为bin的上一级目录<br />&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ii)不存在:设置catalina.home属性值为user.dir的属性值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.2 <span style="background-color: #c0c0c0">setCatalinaBase()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先获得系统catalina.base属性值,如果不存在,设置为catalina.home的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.3 <span style="background-color: #c0c0c0">initClassLoaders()</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;初始化类加载器,一共3个类加载器ClassLoader commonLoader, catalinaLoader, sharedLoader<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: #ccffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.3.1调用createClassLoader(String name, ClassLoader parent)方法,name:加载器名</span><span style="background-color: #ccffff">称标识, parent父加</span><span style="background-color: #ccffff">载器</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.3.1.1&nbsp; CatalinaProperties属性工具类加载属性文件catalina.properties,<br />&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;&nbsp;&nbsp;&nbsp; 默认common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar<br />&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;&nbsp; &nbsp; server、shared为空. 然后执行replace(String value)方法, 这个方法作为相当于把其中的占位符${}替换成本地的路径信息,<br />&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;&nbsp;&nbsp;&nbsp;使用StringBuilder拼装字符串(<a href="http://www.blogjava.net/xiaofei-suman/articles/370974.html">StringBuilder源码阅读</a>),&nbsp;使用<a href="#">StringTokenizer</a>分割字符串,然后放到org.org.apache.catalina.<br />&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;&nbsp;&nbsp;&nbsp;startup.ClassLoaderFactory.Repository 静态内部类的集合(ArrayList)中,<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: yellow">--&gt;Repository持有2个属性:String location(位置信息)，RepositoryType type(仓库类型)</span><br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: yellow"> --&gt;RepositoryType有4种</span><br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: yellow">1.URL --首先检查是不是URL类型</span><br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: yellow">2.GLOB&nbsp; --以*.jar结尾</span><br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color: yellow">3.JAR&nbsp;&nbsp; --以.jar结尾</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="background-color: yellow">4.DIR&nbsp;&nbsp; --其余的都归到这个类型下</span><br />&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;&nbsp;&nbsp;&nbsp;调用ClassLoaderFactory的静态方法 static ClassLoader createClassLoader(List&lt;Repository&gt; repositories,final ClassLoader parent);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这边调用一个native本地方法-应该是一个回调之类的东西，不明白,<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">其中StandardClassLoader类为@Deprecated,&nbsp;extends&nbsp;URLClassLoader</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;AccessController.doPrivileged(<br /><img id="Codehighlighter1_195_403_Open_Image" onclick="this.style.display='none'; Codehighlighter1_195_403_Open_Text.style.display='none'; Codehighlighter1_195_403_Closed_Image.style.display='inline'; Codehighlighter1_195_403_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_195_403_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_195_403_Closed_Text.style.display='none'; Codehighlighter1_195_403_Open_Image.style.display='inline'; Codehighlighter1_195_403_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PrivilegedAction</span><span style="color: #000000">&lt;</span><span style="color: #000000">StandardClassLoader</span><span style="color: #000000">&gt;</span><span style="color: #000000">()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_195_403_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_195_403_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><img id="Codehighlighter1_254_398_Open_Image" onclick="this.style.display='none'; Codehighlighter1_254_398_Open_Text.style.display='none'; Codehighlighter1_254_398_Closed_Image.style.display='inline'; Codehighlighter1_254_398_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_254_398_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_254_398_Closed_Text.style.display='none'; Codehighlighter1_254_398_Open_Image.style.display='inline'; Codehighlighter1_254_398_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;StandardClassLoader&nbsp;run()&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_254_398_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_254_398_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(parent&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StandardClassLoader(array);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StandardClassLoader(array,&nbsp;parent);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);</span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里认为返回一个类加载器(URLClassLoader), 把Repository集合中的Repository转换成URL资源加载到类加载中。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: #ccffff">2.3.2&nbsp;&nbsp;&nbsp;<a href="#">Jmx注册(JMX入门学习)<br /></a></span><span style="background-color: #ffffff">&nbsp;</span><span style="background-color: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: #ccffff">2.3.3&nbsp;&nbsp; 最后返回一个类加载器(URLClassLoader)</span><span style="background-color: #ffffff"><br /></span><span style="background-color: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background-color: #ffffff"> 由于server、shared在catalina.properties默认配置都是空的&nbsp;&nbsp;&nbsp;</p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">catalinaLoader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;createClassLoader(</span><span style="color: #000000">"</span><span style="color: #000000">server</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;commonLoader);<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sharedLoader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;createClassLoader(</span><span style="color: #000000">"</span><span style="color: #000000">shared</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;commonLoader);</span></div>
<p></span><span style="background-color: #ffffff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以返回都是它的父加载器,即common对应的加载器</span><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><img src ="http://www.blogjava.net/xiaofei-suman/aggbug/371002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2012-02-29 15:32 <a href="http://www.blogjava.net/xiaofei-suman/articles/371002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat文档阅读一：</title><link>http://www.blogjava.net/xiaofei-suman/articles/371001.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Wed, 29 Feb 2012 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/371001.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/371001.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/371001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/371001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/371001.html</trackback:ping><description><![CDATA[<p>1.tomcat可以配置多个实例,可以为每一个实例定义一个$CATALINA_BASE<br />&nbsp; 如果tomcat只有一个$CATALINA_BASE 和$CATALINA_HOME 一样</p>
<p>&nbsp; 说明(网上资料):CATALINA_HOME是Tomcat的安装目录，CATALINA_BASE是Tomcat的工作目录。<br />&nbsp;&nbsp;&nbsp; 如果我们想要运行Tomcat的多个实例，但是不想安装多个Tomcat软件副本。<br />&nbsp;&nbsp;&nbsp; 那么我们可以配置多个工作目录，每个运行实例独占一个工作目录，但是共享同一个安装目录。<br />&nbsp;&nbsp;&nbsp; Tomcat每个运行实例需要使用自己的conf、logs、temp、webapps、work和shared目录，<br />&nbsp;&nbsp;&nbsp; 因此CATALINA_BASE就指向这些目录。而其他目录主要包括了Tomcat的二进制文件和脚本，<br />&nbsp;&nbsp;&nbsp; CATALINA_HOME就指向这些目录。<br />&nbsp;&nbsp;&nbsp; 如果我们希望再运行另一个Tomcat实例，那么我们可以建立一个目录，<br />&nbsp;&nbsp;&nbsp; 把conf、logs、temp、webapps、work和shared拷贝到该目录下，然后让CATALINA_BASE指向该目录即可</p>
<p>2.英语学习：There's nothing like scouring the web only to find out that the answer was right in front of you all along! <br />&nbsp; 就像搜索网页一样，在你面前的正确答案始终没有<br />3.<br />--unix Daemon--<br />Tomcat can be run as a daemon using the jsvc tool from the commons-daemon project<br />&nbsp;./configure --with-java=/usr/java<br />&nbsp;命令脚本：</p>
<p>&nbsp;Please note that you should use the GNU make (gmake) instead of the native BSD make on FreeBSD systems<br />&nbsp;cd $CATALINA_HOME/bin<br />&nbsp;&nbsp;&nbsp; tar xvfz commons-daemon-native.tar.gz<br />&nbsp;&nbsp;&nbsp; cd commons-daemon-1.0.x-native-src/unix<br />&nbsp;&nbsp;&nbsp; ./configure<br />&nbsp;&nbsp;&nbsp; make<br />&nbsp;&nbsp;&nbsp; cp jsvc ../..<br />&nbsp;&nbsp;&nbsp; cd ../..</p>
<p>Tomcat can then be run as a daemon using the following commands.</p>
<p>cd $CATALINA_HOME<br />&nbsp;&nbsp;&nbsp; ./bin/jsvc -cp ./bin/bootstrap.jar:./bin/tomcat-juli.jar \<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -outfile ./logs/catalina.out -errfile ./logs/catalina.err \<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.catalina.startup.Bootstrap<br />You may also need to specify -jvm server if the JVM defaults to using a server VM rather than a client VM. This has been observed on OSX<br />（最好指定使用服务器虚拟机-Server JVM)</p>
<p>&nbsp;jsvc可以加一些参数执行 <br /><br />4./etc/init.d 可以编辑使得tomcat自动启动</p> <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/371001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2012-02-29 15:30 <a href="http://www.blogjava.net/xiaofei-suman/articles/371001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>