⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 org_apache_catalina_startup_catalina--rosonsandy.htm

📁 这是最详细的对Tomcat4以上版本的解析。
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0055)http://rosonsandy.blogdriver.com/rosonsandy/879651.html -->
<HTML><HEAD><TITLE>org.apache.catalina.startup.Catalina--rosonsandy</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GBK">
<META http-equiv=Pragma content=no-cache>
<META http-equiv=Cache-Control content=no-cache>
<META http-equiv=Expires content=0>
<META 
content="RequestPathorg.apache.catalina.startup.Catalinaorg.apache.catalina.startup.ContextRuleSet  博客 博客动力 blog blogdriver blogger 中国" 
name=description>
<META 
content="rosonsandy RequestPathorg.apache.catalina.startup.Catalinaorg.apache.catalina.startup.ContextRuleSet 博客 博客动力 blog blogdriver blogger 中国" 
name=keywords><LINK 
href="org_apache_catalina_startup_Catalina--rosonsandy.files/diary.css" 
type=text/css rel=stylesheet>
<SCRIPT language=JavaScript 
src="org_apache_catalina_startup_Catalina--rosonsandy.files/UBB.js"></SCRIPT>

<SCRIPT src="org_apache_catalina_startup_Catalina--rosonsandy.files/blog.js" 
type=text/javascript></SCRIPT>

<META content="MSHTML 6.00.2900.3199" name=GENERATOR></HEAD>
<BODY>
<DIV id=container>
<DIV id=header>
<H1 class=title><A 
href="http://rosonsandy.blogdriver.com/rosonsandy/index.html">rosonsandy</A></H1></DIV>
<DIV id=category><A title=上一篇 
href="http://rosonsandy.blogdriver.com/rosonsandy/876166.html">RequestPath</A>- 
-| <A href="http://rosonsandy.blogdriver.com/rosonsandy/index.html">回首页</A> | <A 
href="http://rosonsandy.blogdriver.com/rosonsandy/catalog_2005.html">2005年索引</A> 
| - -<A title=下一篇 
href="http://rosonsandy.blogdriver.com/rosonsandy/879859.html">org.apache.catalina.startup.ContextRuleSet</A></DIV>
<DIV class=entity>
<H2 class=diaryTitle>org.apache.catalina.startup.Catalina- -</H2>
<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

<P>
<P>Catalina.java主要看的函数为start()和createStartDigester()</P>
<P>package org.apache.catalina.startup;</P>
<P><BR>import java.io.File;<BR>import java.io.FileInputStream;<BR>import 
java.io.IOException;<BR>import java.io.OutputStream;<BR>import 
java.lang.reflect.InvocationTargetException;<BR>import 
java.lang.reflect.Constructor;<BR>import java.net.Socket;<BR>import 
java.security.Security;<BR>import java.util.Stack;<BR>import 
org.apache.catalina.Container;<BR>import 
org.apache.catalina.Lifecycle;<BR>import 
org.apache.catalina.LifecycleException;<BR>import 
org.apache.catalina.LifecycleListener;<BR>import 
org.apache.catalina.Server;<BR>import org.apache.catalina.Loader;<BR>import 
org.apache.commons.digester.Digester;<BR>import 
org.apache.commons.digester.Rule;<BR>import 
org.apache.tomcat.util.log.SystemLogHandler;<BR>import 
org.xml.sax.Attributes;<BR>import org.xml.sax.InputSource;</P>
<P><BR>/**<BR>&nbsp;* Startup/Shutdown shell program for Catalina.&nbsp; The 
following command line<BR>&nbsp;* options are 
recognized:<BR>&nbsp;*&nbsp;<BR>&nbsp;*&nbsp;<B>&nbsp;-config {pathname}</B> - 
Set the pathname of the configuration file<BR>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; to 
be processed.&nbsp; If a relative path is specified, it will 
be<BR>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; interpreted as relative to the directory 
pathname specified by the<BR>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; "catalina.base" 
system property.&nbsp;&nbsp; [conf/server.xml]<BR>&nbsp;* <B>-help</B> - Display 
usage information.<BR>&nbsp;* <B>-stop</B> - Stop the currently running instance 
of Catalina.<BR>&nbsp;* </U /><BR>&nbsp;*<BR>&nbsp;* @author Craig R. 
McClanahan<BR>&nbsp;* @version $Revision: 1.51 $ $Date: 2002/10/24 02:42:03 
$<BR>&nbsp;*/</P>
<P>
<P>public class Catalina {</P>
<P><BR>&nbsp;&nbsp;&nbsp; // 
----------------------------------------------------- Instance Variables</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Pathname to the 
server configuration file.<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; 
protected String configFile = "conf/server.xml";</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Set the debugging 
detail level on our Digester.<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp; protected boolean debug = false;</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * The shared 
extensions class loader for this server.<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp; protected ClassLoader parentClassLoader 
=<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
ClassLoader.getSystemClassLoader();</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * The server component 
we are starting or stopping<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; 
protected Server server = null;</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Are we starting a 
new server?<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; protected 
boolean starting = false;</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Are we stopping an 
existing server?<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; protected 
boolean stopping = false;</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Are we using naming 
?<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; protected boolean 
useNaming = true;</P>
<P><BR>&nbsp;&nbsp;&nbsp; // 
----------------------------------------------------------- Main Program</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * The application main 
program.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *<BR>&nbsp;&nbsp;&nbsp;&nbsp; * @param args 
Command line arguments<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; 
public static void main(String args[]) {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new 
Catalina()).process(args);<BR>&nbsp;&nbsp;&nbsp; }</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * The instance main 
program.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *<BR>&nbsp;&nbsp;&nbsp;&nbsp; * @param args 
Command line arguments<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; 
public void process(String args[]) {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
setCatalinaHome();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
setCatalinaBase();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
(arguments(args))&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
execute();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
e.printStackTrace(System.out);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; }</P>
<P><BR>&nbsp;&nbsp;&nbsp; // 
--------------------------------------------------------- Public Methods</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Set the shared 
extensions class loader.<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
*<BR>&nbsp;&nbsp;&nbsp;&nbsp; * @param parentClassLoader The shared extensions 
class loader.<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; public void 
setParentClassLoader(ClassLoader parentClassLoader) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.parentClassLoader = 
parentClassLoader;<BR>&nbsp;&nbsp;&nbsp; }</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Set the server 
instance we are configuring.<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
*<BR>&nbsp;&nbsp;&nbsp;&nbsp; * @param server The new 
server<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; public void 
setServer(Server server) <BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.server = 
server;<BR>&nbsp;&nbsp;&nbsp; }</P>
<P><BR>&nbsp;&nbsp;&nbsp; // 
------------------------------------------------------ Protected Methods</P>
<P><BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Process the 
specified command line arguments, and return<BR>&nbsp;&nbsp;&nbsp;&nbsp; * 
<CODE>true</CODE> if we should continue processing; 
otherwise<BR>&nbsp;&nbsp;&nbsp;&nbsp; * return 
<CODE>false</CODE>.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *<BR>&nbsp;&nbsp;&nbsp;&nbsp; * 
@param args Command line arguments to process<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
*/<BR>&nbsp;&nbsp;&nbsp; protected boolean arguments(String args[]) {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean isConfig = false;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (args.length &lt; 1) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
usage();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return (false);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 
args.length; i++) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 
(isConfig) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
configFile = 
args[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
isConfig = 
false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
else if (args[i].equals("-config")) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
isConfig = 
true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
else if (args[i].equals("-debug")) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
debug = 
true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
else if (args[i].equals("-nonaming")) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
useNaming = 
false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
else if (args[i].equals("-help")) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
usage();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
return 
(false);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
else if (args[i].equals("start")) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
starting = 
true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
else if (args[i].equals("stop")) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
stopping = 
true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } 
else 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
usage();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -