﻿<?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/Yang/category/4650.html</link><description>学者,所以修性也.视,听,言,貌,思,性之所有也.学则正,否则邪.
失败是因为放弃,不放弃就不会有失败.</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 15:37:09 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 15:37:09 GMT</pubDate><ttl>60</ttl><item><title>Fill table by JavaBean</title><link>http://www.blogjava.net/Yang/articles/37073.html</link><dc:creator>飞扬</dc:creator><author>飞扬</author><pubDate>Thu, 23 Mar 2006 10:29:00 GMT</pubDate><guid>http://www.blogjava.net/Yang/articles/37073.html</guid><wfw:comment>http://www.blogjava.net/Yang/comments/37073.html</wfw:comment><comments>http://www.blogjava.net/Yang/articles/37073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yang/comments/commentRss/37073.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yang/services/trackbacks/37073.html</trackback:ping><description><![CDATA[     Some times we need fill forms and we also need chage the type. just think,if you hava a table and there are three Int types, four string type and other types .if you want to change their types use the type-translate(like String(request.getParameter("userName"))). just think, how hard the work is! <br />     And what should we do now? Must i use type-translate? if we do like this the work is so hard to do.Yes! maybe you can speak it out "JavaBean"!<br />     let me see the model:<br />     BeanUtilities.java<br />code:<br />     package skyey.snow.*;<br />     import  java.util.*;<br />     import  javax.servlet.http.*;<br />     import  org.apache.commons.beanutils.BeanUtilities;<br /><br />/*Some utilities to populate beand, usually based on incoming request parameters. Requires three packages<br />*from the Apache Commons libarary: beanutils,collection and logging.To obtain these packages,see <br />*http://jakarta.apache.org/commons/.Also,the book's source code archive (see <a href="http://www.coreservlets.com/">http://www.coreservlets.com/</a>)<br />*contains links to all URLs mentioned in the book,including to the specific sections of the Jakarta Commons package.<br />*&lt;p&gt;<br />*Note that this class in the skeyey.snow.beans package,so must be installed in ..../package/beans/.<br />*/<br /><br />public class BeanUtilities<br />{<br />/** Examines all of the request parameters to see if any catch a bean property(i.i.,a setXXX method)in the project.<br />*If so,the request parameter values is passed to that method.If the method expects an int,Integer,double,Double,or any <br />*of the other primitive or wrapper types,parsing and conversion is done automatically.If the request parameter value is *malformed(cannot be converted into the expected type),numeric properties are assigned zero and boolean properties<br />*are assigned false:no exception is thrown.<br />*/<br /> public static void populateBean(Object formBean,HttpServletRequest request)<br />   {<br />      populateBean(formBean,request.getParameterMap());<br />/**Populates a bean beased on a Map: Map keys are the bean property names;Map values are the bean property values.<br />*Type conversion is performed automatically as described above.<br />*/<br />   }<br />public static void populateBean(Object bean,Map propertyMap)<br />  {<br />     try<br />       { <br />          BeanUtilities.populate(bean,propertyMap);<br />        }<br />     catch(Exception e)<br />        {// Empty catch.The two possible exceptions are java.lang.IllegalAccessException and java.lang.reflect.<br />         //InvocationTargetExcepton.In both cases,just skip the bean operation.<br />         }<br />  }<br />}<img src ="http://www.blogjava.net/Yang/aggbug/37073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yang/" target="_blank">飞扬</a> 2006-03-23 18:29 <a href="http://www.blogjava.net/Yang/articles/37073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP开发中的常用技巧</title><link>http://www.blogjava.net/Yang/articles/31751.html</link><dc:creator>飞扬</dc:creator><author>飞扬</author><pubDate>Tue, 21 Feb 2006 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/Yang/articles/31751.html</guid><wfw:comment>http://www.blogjava.net/Yang/comments/31751.html</wfw:comment><comments>http://www.blogjava.net/Yang/articles/31751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yang/comments/commentRss/31751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yang/services/trackbacks/31751.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 通过这段时间对JSP的学习,觉得在JSP开发中有一些技巧是需要掌握的,所以自己写出来也是对自己这段时间学习JSP的一个总结吧!<BR>&nbsp;&nbsp;&nbsp;<FONT color=#0000ff><FONT style="BACKGROUND-COLOR: #ffffff"> 在不同页面或者用户之间传输数据:<BR>&nbsp;&nbsp;&nbsp; <FONT color=#000000>对于在不同页面之间传输数据可以由以下的这些办法来实现: 1.把数据存在Session中;2.通过Cookie;3.通过隐含表单把数据提交到下一个页面;4.通过ServeltContext对象;5.通过Application对象;如果在不同的用户之间传输数据,常用的方法是:1.ServletContext对象;2.通过Application对象;3.通过文件系统或者是数据库.<BR>eg:<BR>&nbsp; 和Session不同的是,Cookie是存在于客户端的.由于客户端可能考虑安全因素会禁止使用Cookies,这样使用Cookie时可能会遇到麻烦.例如:<BR>&nbsp;&lt;<A href='mailto:%@page contnetType="text/html;charset=gb2312" language="java" import="java.sql.*,javax.servlet.*,javax.servlet.http.* com.mypackage.doing.*" errorPage=""&nbsp;%'>%@page contnetType="text/html;charset=gb2312" language="java" import="java.sql.*,javax.servlet.*,javax.servlet.http.* com.mypackage.doing.*" errorPage=""&nbsp;%</A>&gt;<BR>&nbsp;&lt;%<BR>&nbsp;Cookie cookie=new Cookie("lastLoginTime",new java.util.Date().toLocaleString());<BR>&nbsp;Response.addCookie(cookie);<BR>%&gt;<BR></FONT>就这样就已经在客户端设置了Cookie,你可以在&lt;a href="getCookie.jsp"&gt;这个页面中来读取这个Cookie<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; &lt;!--getCookie.jsp--&gt;<BR>&lt;<A href='mailto:%@page contentType="text/html;charset=gb2312" language="java" import="java.sql.*,javax.servlet.*,javax.servlet.http.*,com.mypackage,doing.*" errorPage=""%'>%@page contentType="text/html;charset=gb2312" language="java" import="java.sql.*,javax.servlet.*,javax.servlet.http.*,com.mypackage,doing.*" errorPage=""%</A><BR>&lt;%&nbsp;<BR>&nbsp; Cookie[]&nbsp; cookies=request.getCookies();<BR>&nbsp; for(int i=0;i&lt;cookies.length;i++)<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp; Cookie c=cookies[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp; String name=c.getName();<BR>&nbsp;&nbsp;&nbsp;&nbsp; if(name.equals("lastLoginTime"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("您上次的登录时间是:"+c.getValue());<BR>&nbsp;}<BR>%&gt;<BR><FONT color=#000000>在不同的页面之间传输数据,则可以用一个简单的聊天室来说明.<BR><BR></FONT><FONT color=#0000ff>&nbsp;创建错误页面</FONT><BR><FONT color=#808080>&nbsp;</FONT><FONT color=#000000>程序在运行是难免会出现错误和异常.当处理JSP页面时,遇到的异常分为两个基本类型:<BR></FONT></FONT><FONT color=#000000>&nbsp;A.编译时候出错<BR></FONT><FONT color=#000000>&nbsp;B.运行时出错<BR></FONT><FONT color=#000000>如果编译时候出错那么会产生内部错误.(错误代码500).如果是在JSP编译完后发生错误,那就是运行时的错误.如果我们不对错误页面进行处理那么根据不同的服务器就会出现非常不友好的界面.</FONT><BR>&nbsp;国际化问题<BR></FONT><FONT color=#000000>&nbsp;要考虑一个真正意义的全球资源,WEB浏览器的内容会对每个接收到的用户来说都是易读的.所以要考虑到 这个问题.还有一个就是中文乱码的问题,至于这个你可以用一个编码函数来解决.例如:<BR>eg:<BR>&lt;%<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String trans(String chi)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String result=null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;byte temp[];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; temp=chi.getBytes("iso-8859-1");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=new String(temp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(UnsupportedEncodingException e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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; System.out.println("e.toString()");<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;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>%&gt;<BR>&nbsp; </FONT><FONT color=#0000ff>JSP中的文件操作<BR>&nbsp; JSP中上传文件</FONT></P><img src ="http://www.blogjava.net/Yang/aggbug/31751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yang/" target="_blank">飞扬</a> 2006-02-21 10:42 <a href="http://www.blogjava.net/Yang/articles/31751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天学习到的散列表</title><link>http://www.blogjava.net/Yang/articles/23784.html</link><dc:creator>飞扬</dc:creator><author>飞扬</author><pubDate>Wed, 14 Dec 2005 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/Yang/articles/23784.html</guid><wfw:comment>http://www.blogjava.net/Yang/comments/23784.html</wfw:comment><comments>http://www.blogjava.net/Yang/articles/23784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yang/comments/commentRss/23784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yang/services/trackbacks/23784.html</trackback:ping><description><![CDATA[<P><FONT size=4>今天在学习的时候用到了一个散列表。在不是很了解的情况下百度了一下，了解了不少，所以写下来作为以后参考。何为散列表？散列表，又称为哈希表，是线性表中一种重要的存储方式和检索方法。在散列表中，可以对节点进行快速检索。散列表算法的基本思想是：由结点的关键码值决定结点的存储地址，即以关键码值k为自变量，通过一定的函数关系h（称为散列函数），计算出对应的函数值h(k)来，将这个值解释为结点的存储地址，将结点存入该地址中，检索时，根据要检索的关键码值，用同样的散列函数计算出地址，然后，到相应的地址中去获取要找的结点数据。因此，散列表有一个重要特征：平均检索的长度不直接依赖于表中元素的个数。 <BR>---- 散列表最重要的一个指标是负载因子，即散列表中结点数目与表中能容纳的总结点数的比值，它描述了散列表的饱和程度，负载因子越接近1.0，内存的使用效率越高，元素的寻找时间越长，同样，负载因子越接近0.0，元素的寻找时间越短，但内存的浪费越大。Hashtable类缺省的负载因子为0.75.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hashtable类 <BR>---- Hashtable类为我们提供了散列表完整的功能，可以让我们很方便地构造和使用散列表，查询信息。 <BR>---- 1.创建散列表对象 <BR><BR>---- Hashtable类的构造器主要有下面几种形式： <BR><BR>public Hashtable(int initialCapacity, float loadFactor)；<BR>public Hashtable(int initialCapacity)；<BR>public Hashtable()；<BR>在本文的实例中，我们使用了最简单的一种：<BR>Hashtable stockInfo = new Hashtable();<BR><BR>---- 2.充填数据 <BR>---- 当构造了Hashtable对象后，我们就可以将数据填入该对象中，以便以后查询。Hashtable类提供了put方法来完成数据的装填，其原型如下： <BR><BR>---- public synchronized Object put(Object key, Object value)； <BR><BR>---- 3.查询数据 <BR><BR>---- 查询数据可以使用get方法，其原型如下： <BR><BR>---- public synchronized Object get(Object key) <BR><BR>---- 4.其它常用的方法 <BR><BR>public int size();<BR>//返回散列表中的结点数目<BR>public boolean isEmpty();<BR>//判断散列表是否为空<BR>public boolean containsValue(Object value);<BR>//判断散列表中是否含有某值<BR>public synchronized boolean containsKey(Object key);<BR>//判断散列表中是否含有某个结点<BR>public synchronized void clear();<BR>//清空整个散列表<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringTokenizer类 <BR>---- StringTokenizer类的主要用途是将字符串以定界符为界，分析为一个个的token（可理解为单词），定界符可以自己指定。 <BR>---- 构造器有下面几种形式： <BR><BR>public StringTokenizer(String str, <BR>String delim, boolean returnTokens);<BR>public StringTokenizer(String str, String delim);<BR>public StringTokenizer(String str);<BR>其中，str为需分析的字符串，delim为定界符，<BR>Tokens描述是否将定界符作为一个token。<BR><BR>---- 其它常用的方法有： <BR>public boolean hasMoreTokens() ;<BR>//判断字符串中是否还有token<BR>public String nextToken();// <BR>StringTokenizer对象的下一个token<BR>我们来看一个简单的注册页面。我们通过name.jsp页面把数据传递到login.jsp<BR>&nbsp;&nbsp;(Name.jsp)<BR>&lt;%@ page contentType="text/html; charset=gb2312" %&gt;<BR>&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;title&gt;Register Page&lt;/title&gt;<BR>&lt;/head&gt;</FONT></P>
<P><FONT size=4>&lt;body&gt;<BR>&lt;form name="form1" action="login.jsp" method="post"&gt;<BR>&lt;p&gt;Please input your name that you wanna registered:<BR>&lt;input type="text" name="name" value="abc"&gt;&lt;br&gt;<BR>&lt;p&gt;Sendding by this button:<BR>&lt;input type="submit" name="submit" value="Sendding"&gt;<BR>&lt;/form&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR>然后提交到login.jsp<BR>&lt;%@ page contentType="text/html; charset=gb2312" %&gt;<BR>&lt;%@ import page="java.util.*" %&gt;<BR>&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;title&gt;login.jsp&lt;/title&gt;<BR>&lt;/head&gt;</FONT></P>
<P><FONT size=4>&lt;body&gt;<BR>&lt;%!<BR>&nbsp;&nbsp; Hashtable hashtable=new Hashtable();<BR>&nbsp;&nbsp; public synchronized void putName(String s)<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp; hashtable.put(s,s);<BR>&nbsp;&nbsp; }<BR>%&gt;<BR>&lt;%<BR>&nbsp; String name=request.getParameter("name");<BR>&nbsp; if(name==null)<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; name="";<BR>&nbsp; }<BR>&nbsp; byte b[]=name.getBytes("ISO-8859-1");<BR>&nbsp; name=new String(b);<BR>&nbsp; if(!(hashtable.containsKey(name)))<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp; putName(name);<BR>&nbsp; out.print("&lt;br&gt;"+"你已经注册成功");<BR>&nbsp; out.print("&lt;br&gt;"+"你注册的名字是"+name);<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; else<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; out.print("&lt;br&gt;"+"该名字已经存在，请您换个名字。");<BR>&nbsp;&nbsp; }<BR>%&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR></FONT></P><img src ="http://www.blogjava.net/Yang/aggbug/23784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yang/" target="_blank">飞扬</a> 2005-12-14 10:42 <a href="http://www.blogjava.net/Yang/articles/23784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat中的server.xml元素详解 </title><link>http://www.blogjava.net/Yang/articles/22951.html</link><dc:creator>飞扬</dc:creator><author>飞扬</author><pubDate>Thu, 08 Dec 2005 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/Yang/articles/22951.html</guid><wfw:comment>http://www.blogjava.net/Yang/comments/22951.html</wfw:comment><comments>http://www.blogjava.net/Yang/articles/22951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yang/comments/commentRss/22951.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yang/services/trackbacks/22951.html</trackback:ping><description><![CDATA[<STRONG>tomcat中的</STRONG><A name=0></A><STRONG>server.xml元素详解</STRONG> 
<P>
<P>
<TABLE class=MsoNormalTable style="BACKGROUND: #cccccc; mso-cellspacing: 0cm; mso-table-layout-alt: fixed; mso-padding-alt: 0cm 0cm 0cm 0cm" cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元素名</SPAN><SPAN lang=EN-US></SPAN></B></P>
<P></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性</SPAN><SPAN lang=EN-US></SPAN></B></P>
<P></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释</SPAN><SPAN lang=EN-US></SPAN></B></P>
<P></P></TD></TR>
<TR style="mso-yfti-irow: 1">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%" rowSpan=2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">server</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">port</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定一个端口，这个端口负责监听关闭</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">tomcat</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的请求</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 2">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">shutdown</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定向端口发送的命令字符串</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 3">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">service</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">name</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">service</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的名字</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 4">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%" rowSpan=7>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">Connector(</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示客户端和</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">service</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之间的连接</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">)</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">port</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定服务器端要创建的端口号，并在这个端口监听来自客户端的请求</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 5">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">minProcessors</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器启动时创建的处理请求的线程数</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 6">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">maxProcessors</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最大可以创建的处理请求的线程数</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 7">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">enableLookups</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果为</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">true</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则可以通过调用</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">request.getRemoteHost()</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">DNS</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查询来得到远程客户端的实际主机名，若为</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">false</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则不进行</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">DNS</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查询，而是返回其</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">ip</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 8">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">redirectPort</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定服务器正在处理</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">http</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请求时收到了一个</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">SSL</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传输请求后重定向的端口号</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 9">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">acceptCount</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理队列中的请求数，超过这个数的请求将不予处理</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 10">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">connectionTimeout</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定超时的时间数</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">(</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以毫秒为单位</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">)</FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 11">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">Engine(</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示指定</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">service</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的请求处理机，接收和处理来自</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">Connector</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的请求</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">)</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">defaultHost</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定缺省的处理请求的主机名，它至少与其中的一个</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">host</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元素的</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">name</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性值是一样的</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 12">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%" rowSpan=3>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">Context(</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示一个</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">web</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用程序，通常为</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">WAR</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件，关于</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">WAR</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的具体信息见</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">规范</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">)</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">docBase</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用程序的路径或者是</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">WAR</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件存放的路径</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 13">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">path</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示此</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">web</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用程序的</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">url</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的前缀，这样请求的</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">url</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">http://localhost:8080/path/****</FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 14">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">reloadable</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个属性非常重要，如果为</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">true</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">tomcat</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会自动检测应用程序的</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">/WEB-INF/lib </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">/WEB-INF/classes</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录的变化，自动装载新的应用程序，我们可以在不重起</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">tomcat</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的情况下改变应用程序</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 15">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%" rowSpan=3>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">host(</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示一个虚拟主机</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">)</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">name</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定主机名</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 16">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">appBase</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用程序基本目录，即存放应用程序的目录</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 17">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">unpackWARs</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果为</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">true</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">tomcat</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会自动将</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">WAR</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件解压，否则不解压，直接从</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">WAR</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中运行应用程序</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 18">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%" rowSpan=4>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">Logger(</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示日志，调试和错误信息</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">)</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">className</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">logger</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用的类名，此类必须实现</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">org.apache.catalina.Logger </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 19">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">prefix</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">log</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的前缀</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 20">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">suffix</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">log</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件的后缀</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 21">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">timestamp</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果为</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">true</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">log</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件名中要加入时间，如下例</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">:localhost_log.<CHSDATE w:st="on" year="2001" month="10" day="4" islunardate="False" isrocdate="False" /></CHSDATE />2001-10-04.txt</FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 22">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">Realm(</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示存放用户名，密码及</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">role</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据库</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">)</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">className</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">Realm</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用的类名，此类必须实现</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">org.apache.catalina.Realm</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 23">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 19.72%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="19%" rowSpan=3>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">Valve(</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">功能与</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">Logger</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">差不多，其</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">prefix</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">suffix</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性解释和</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">Logger </FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的一样</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">)</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">className</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">Valve</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用的类名，如用</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">org.apache.catalina.valves.AccessLogValve</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类可以记录应用程序的访问信息</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 24">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">directory</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">log</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件存放的位置</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 25; mso-yfti-lastrow: yes">
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 18.04%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="18%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face="Times New Roman">pattern</FONT></SPAN></P></TD>
<TD style="PADDING-RIGHT: 0cm; PADDING-LEFT: 0cm; BORDER-LEFT-COLOR: #d4d0c8; BORDER-BOTTOM-COLOR: #d4d0c8; PADDING-BOTTOM: 0cm; WIDTH: 62.24%; BORDER-TOP-COLOR: #d4d0c8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #d4d0c8" width="62%">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有两个值，</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">common</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式记录远程主机名或</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">ip</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址，用户名，日期，第一行请求的字符串，</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">HTTP</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">响应代码，发送的字节数。</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">combined</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式比</SPAN><SPAN lang=EN-US><FONT face="Times New Roman">common</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方式记录的值更多</SPAN></P></TD></TR></TBODY></TABLE>
<P><STRONG><SERVER>元素</STRONG><BR>它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义.它包含一个<SERVICE>元素.并且它不能做为任何元素的子元素.</P>
<P><SERVER debug="0" shutdown="SHUTDOWN" port="8005"></P>
<P>1&gt;className指定实现org.apache.catalina.Server接口的类.默认值为org.apache.catalina.core.StandardServer<BR>2&gt;port指定Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性是必须的.<BR>3&gt;shutdown指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置</P>
<P></P>
<P><STRONG><SERVICE>元素</STRONG><BR>该元素由org.apache.catalina.Service接口定义,它包含一个<ENGINE>元素,以及一个或多个<CONNECTOR>,这些Connector元素共享用同一个Engine元素<BR><BR><SERVICE name="Catalina"><BR><SERVICE name="Apache"><BR>第一个<SERVICE>处理所有直接由Tomcat服务器接收的web客户请求.<BR>第二个<SERVICE>处理所有由Apahce服务器转发过来的Web客户请求</P>
<P>1&gt;className 指定实现org.apahce.catalina.Service接口的类.默认为org.apahce.catalina.core.StandardService<BR>2&gt;name定义Service的名字</P>
<P></P>
<P><STRONG><ENGINE>元素</STRONG><BR>每个Service元素只能有一个Engine元素.元素处理在同一个<SERVICE>中所有<CONNECTOR>元素接收到的客户请求.由org.apahce.catalina.Engine接口定义.</P>
<P><ENGINE debug="0" name="Catalina" defaultHost="localhost"></P>
<P>1&gt;className指定实现Engine接口的类,默认值为StandardEngine<BR>2&gt;defaultHost指定处理客户的默认主机名,在<ENGINE>中的<HOST>子元素中必须定义这一主机<BR>3&gt;name定义Engine的名字</P>
<P>在<ENGINE>可以包含如下元素<LOGGER>, <REALM>, <VALUE>, <HOST></P>
<P></P>
<P><STRONG><HOST>元素</STRONG><BR>它由Host接口定义.一个Engine元素可以包含多个<HOST>元素.每个<HOST>的元素定义了一个虚拟主机.它包含了一个或多个Web应用.</P>
<P><HOST debug="0" name="localhost" autoDeploy="true" unpackWARs="true" appBase="webapps"></P>
<P>1&gt;className指定实现Host接口的类.默认值为StandardHost<BR>2&gt;appBase指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.如果没有此项,默认为<CATALINA_HOME>/webapps<BR>3&gt;autoDeploy如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用<BR>4&gt;unpackWARs如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件<BR>5&gt;alias指定主机别名,可以指定多个别名<BR>6&gt;deployOnStartup如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用中的server.xml没有相应的<CONTEXT>元素,将采用Tomcat默认的Context<BR>7&gt;name定义虚拟主机的名字</P>
<P>在<HOST>元素中可以包含如下子元素<BR><LOGGER>, <REALM>, <VALUE>, <CONTEXT></P>
<P><BR><STRONG><CONTEXT>元素</STRONG><BR>它由Context接口定义.是使用最频繁的元素.每个<CONTEXT元素代表了运行在虚拟主机上的单个WEB应用.一个<HOST>可以包含多个<CONTEXT>元素.每个web应用有唯一<BR>的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个<BR>ServletContext对象.</P>
<P><CONTEXT debug="0" reloadbale="true" docBase="sample" path="/sample"></P>
<P>1&gt;className指定实现Context的类,默认为StandardContext类<BR>2&gt;path指定访问Web应用的URL入口,注意/myweb,而不是myweb了事<BR>3&gt;reloadable如果这个属性设为true, Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改运.如果监视到有class文件被更新,服务器自重新加载Web应用<BR>3&gt;cookies指定是否通过Cookies来支持Session,默认值为true<BR>4&gt;useNaming指定是否支持JNDI,默认值为了true</P>
<P><BR>在<CONTEXT>元素中可以包含如下元素<BR><LOGGER>, <REALM>, <RESOURCE>, <RESOURCEPARAMS></P>
<P></P>
<P><STRONG>Connector元素<BR></STRONG>由Connector接口定义.<CONNECTOR>元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.</P>
<P><CONNECTOR debug="0" port="8080" disableUploadTimeout="true" connectionTimeout="20000" acceptCount="100" redirectPort="8443" enableLookups="false" maxSpareThread="75" minSpareThreads="25" maxThread="50" /></P>
<P><CONNECTION debug="0" port="8009" redirectPort="8443" enableLookups="false" protocol="AJP/1.3" /><BR>第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.</P>
<P>Connector元素共用属性<BR>1&gt;className指定实现Connector接口的类<BR>2&gt;enableLookups如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true<BR>3&gt;redirectPort指定转发端口.如果当前端口只支持non-SSL请求,在需要安全通信的场命,将把客户请求转发至SSL的redirectPort端口<BR>HttpConnector元素的属性<BR>1&gt;className实现Connector的类<BR>2&gt;port设定Tcp/IP端口,默认值为8080,如果把8080改成80,则只要输入<A href="http://localhost/">http://localhost</A>即可<BR>因为TCP/IP的默认端口是80<BR>3&gt;address如果服务器有二个以上ip地址,此属性可以设定端口监听的ip地址.默认情况下,端口会监听服务器上所有的ip地址<BR>4&gt;bufferSize设定由端口创建的输入流的缓存大小.默认值为2048byte<BR>5&gt;protocol设定Http协议,默认值为HTTP/1.1<BR>6&gt;maxThreads设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200<BR>7&gt;acceptCount设定在监听端口队列的最大客户请求数量,默认值为10.如果队列已满,客户必须等待.<BR>8&gt;connectionTimeout定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间<BR>JkConnector的属性<BR>1&gt;className实现Connector的类<BR>2&gt;port设定AJP端口号<BR>3&gt;protocol必须设定为AJP/1.3</P><img src ="http://www.blogjava.net/Yang/aggbug/22951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yang/" target="_blank">飞扬</a> 2005-12-08 10:40 <a href="http://www.blogjava.net/Yang/articles/22951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中文手册</title><link>http://www.blogjava.net/Yang/articles/22950.html</link><dc:creator>飞扬</dc:creator><author>飞扬</author><pubDate>Thu, 08 Dec 2005 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/Yang/articles/22950.html</guid><wfw:comment>http://www.blogjava.net/Yang/comments/22950.html</wfw:comment><comments>http://www.blogjava.net/Yang/articles/22950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yang/comments/commentRss/22950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yang/services/trackbacks/22950.html</trackback:ping><description><![CDATA[<BR>
<CENTER>
<H4>Tomcat中文手册</H4></CENTER>(来源：www.qcsky.net) <BR>Jakarta-Tomcat 简明中文版用户指南第一部分 <BR><BR>
<P>本文档提供关于Tomcat的基础信息.主要内容如下:<BR>Tomcat二进制版本安装<BR>与Tomcat相关的脚本的主要内容<BR>与server.xml相关的主要内容,Tomcat的主要配置文件<BR>如何设置Tomcat与宿主web服务器一起工作的说明<BR>如何应用Tomcat配置一个现实中的web站点<BR>希望此文档足以使新用户可以开始使用Tomcat.如找不到某方面的内容请(按以下顺序)<BR>查找Tomcat faq<BR>查找Tomcat包宓?BR&gt;向Tomcat用户邮件列表发出问题<BR>如此疑问的答案不存在,我们鼓励把对疑问的解答放入Tomcat faq或此文档.如对此文档有意见或建议,请发送到Tomcat的邮件列表.</P>
<P>Getting Started<BR>Tomcat是一个带有jsp环境的servlet容器.servlet容器是一个根据用户的行为可以管理和激活servlet的运行时的shell.<BR>粗略地可以将servlet容器分为如下几类:</P>
<P>独立的servlet容器<BR>内置有web服务器的一部分.指当使用基于Java的web服务器的情形,例如servlet容器是JavaWebServer的一个部分. 独立的servlet容器是Tomcat的默认模式.<BR>大多数的web服务器并非基于Java,因此,我们可以得出如下两种容器的模式.</P>
<P><BR>进程内的servlet容器<BR>servlet容器作为web服务器的插件和Java容器的实现.Web服务器插件在内部地址空间打开一个JVM(java virtual machine)使Java容器得以在内部运行.如有某个需要调用servlet的请求,,插件将取得对此请求的控制并将他传递(使用JNI)给Java容器.进程内容器对于多线程,单进程的服务器非常合适并且提供很好的运行速度,但伸缩性有所不足.</P>
<P><BR>进程外的servlet容器<BR>servlet容器运行于web服务器之外的地址空间且作为web服务器的插件和Java容器的实现的结合.web服务器插件和Java容器 JVM使用IPC机制(通常是TCP/IP)进行通讯.当一个调用servlet的请求到达时,插件将取得对此请求的控制并将其传递(使用IPC等)给Java容器,进程外容器的反应时间或进程外容器引擎不如进程内容器,但进程外容器引擎在许多其他可比的范围内更好(伸缩性,稳定性等).<BR>Tomcat既可作为独立的容器(主要是用于开发与调试)又可作为对现有服务器的附加(当前支持Apache,IIS和Netscape服务器).即任何时候配置Tomcat你都必须决定如何应用他,如选择第二或第三种模式,你还需要安装一个web服务器接口.<BR>Tomcat与Jserv有何区别?Tomcat是Jserv吗?<BR>这是个常见的误解.Jserv是Servlet API2.0兼容并与Apache一起使用的容器.Tomcat是一个完全重写的并与Servlet API2.2和JSP1.1兼容的容器.<BR>Tomcat使用了一些为Jserv而写的代码,特别是Jserv的Apache接口,但这是唯一的相同之处.<BR>怎样安装Tomcat的二进制版本?<BR>非常简单,只需:<BR>下载 zip/tar.gz 任何压缩文件,从http://jakarta.apche.org/download/binindex.html处.<BR>解压缩此文件到某目录(如:foo).将会生成一子目录,名为”tomcat”.<BR>转换到”tomcat”目录设置一新的环境变量(TOMCAT_HOME)指向你安装的tomcat的目录<BR>WIN32平台,键入:<BR>“set TOMCAT_HOME=foo\tomcat”<BR>Unix平台:<BR>如是bash/sh环境, 键入:”TOMCAT_HOME=foo/tomcat;export TOMCAT_HOME”<BR>如是tcsh环境, 键入:”setenv TOMCAT_HOME foo/tomcat”<BR>设置环境变量JAVA_HOME指向你JDK的目录,然后添加JAVA解释器到你的PATH环境变量.<BR>好了!现在可以运行TOMCAT并作为一个独立的Servlet容器(模式一)<BR>启动与关闭Tomcat<BR>使用”bin”目录中的脚本启动与关闭Tomcat.<BR>启动:<BR>uinx:bin/startup.sh<BR>win32:bin\startup<BR>关闭:<BR>unix:bin/shutdown.sh<BR>win32:bin\shutdown<BR>Tomcat目录结构<BR>假设你已将Tomcat解压,你已得到下列目录结构:<BR>目录名--描述 <BR>bin <BR>包含启动/关闭脚本 <BR>conf <BR>包含不同的配置文件,<BR>包括 server.xml(Tomcat的主要配置文件)和为不同的Tomcat配置的web应用设置缺省值的文件web.xml<BR>doc<BR>包含各种Tomcat文档 <BR>lib <BR>包含Tomcat使用的jar文件.unix平台此目录下的任何文件都被加到Tomcat的classpath中 <BR>logs <BR>Tomcat摆放日志文件的地方 <BR>src <BR>ServletAPI源文件.先别高兴,这些只有些必须在Servlet容器内实现的空接口和抽象类 <BR>webapps <BR>包含web项目示例 <BR>此外你可以Tomcat会创建如下目录:<BR>work<BR>Tomcat自动生成,放置Tomcat运行时的临时文件(如编译后的JSP文件).如在Tomcat运行时删除此目录.JSP页面将不能运行.<BR>classes<BR>你可以创建此目录来添加一些附加的类到类路径中.任何你加到此目录中的类都可在Tomcat的类路径中找到自身.<BR>Tomcat的脚本<BR>Tomcat是一个Java程序,因此在设置好几个环境变量后即可用命令行的方式运行.然而设置Tomcat使用的每个环境变量和如下的命令行参数乏味且易错.因此,Tomcat开发组提供了一些脚本使启动和关闭Tomcat变得轻松.<BR>注意:这些脚本仅仅是个便利的方法去启动和关闭Tomcat.你可修改他们来定制CLASSPATH,环境变量如PATH,LD_LIBRARY_PATH,等等,只要是生成一个正确的命令行即可.<BR>这些脚本是什么呢?下表列出对一般用户最重要的脚本.<BR>tomcat <BR>主脚本.设置合适的环境变量,包括CLASSPATH,TOMCAT_HOME和JAVA_HOME和用适合的命令行参数启动Tomcat </P>
<P>startup </P>
<P>在后台启动Tomcat.”tomcat start”命令的替换方式 </P>
<P>shutdown </P>
<P>关闭Tomcat.”tomcat stop”命令的替换方式 </P>
<P><BR>对用户最重要的脚本是tomcat(tomcat.bat/tomcat.sh).其他Tomcat相关的脚本作为一个简单的面向单任务的指向Tomcat脚本(设置不同的命令行参数等)的入口.</P>
<P><BR>仔细考察tomcat.bat/tomcat.sh,它按以下步骤运行:</P>
<P>在Unix下的步骤：</P>
<P>如未指定,推测 TOMCAT_HOME</P>
<P>如未指定,推测 JAVA_HOME</P>
<P>设置CLASS_PATH包含:</P>
<P>1.${TOMCAT_HOME}/classes目录(如果存在)</P>
<P>2.${TOMCAT_HOME}/lib的一切内容</P>
<P>3.${JAVA_HOME}/lib/tools.jar(此jar文件包含工具javac,我们需要javac处理jsp文件.</P>
<P><BR>运行带有设定Java环境变量的命令行参数的java命令,调入tomcat.home,和org.apache.tomcat.startup.Tomcat 作为启始类.同时也传递命令行参数到org.apache.tomcat.startup.Tomcat ,例如:</P>
<P><BR>执行start/stop/run 等的操作</P>
<P>此Tomcat进程使用指向server.xml的路径,</P>
<P>例如server.xml放置于etc/server_1.xml并且用户意图在后台启动apache,键 入如下命令行:</P>
<P>bin/tomcat.sh start –f /etc/server_1.xml</P>
<P>在Win32下的步骤：(略)</P>
<P><BR>由此可见,win32版的tomcat.bat与Unix版的几乎一致.尤其在它不推测TOMCAT_HOME和JAVA_HOME的值,并且不将所有的jar文件放入类路径中.</P>
<P><BR>Tomcat的配置文件</P>
<P>Tomcat的配置基于两个配置文件:</P>
<P>1.server.xml - Tomcat的全局配置文件</P>
<P>2.web.xml - 在Tomcat中配置不同的关系环境</P>
<P><BR>这一部分将讲述如何使用这些文件.我们不会包含web.xml的内部机制,这些内部机制深入到了Servlet API的细节,因此,我们将讨论涵盖servler.xml内容及web.xml在Tomcat关系环境中的用法.</P>
<P><BR>server.xml</P>
<P>server.xml是Tomcat的主配置文件.完成两个目标:</P>
<P>1 提供Tomcat组件的初始配置.</P>
<P>2 说明Tomcat的结构,含义,使得Tomcat通过实例化组件完成起动及构建自身, 如在server.xml所指定的</P>
<P>下表描述server.xml种的重要元素: </P>
<P><BR>
<P>元素及其描述 </P>
<P>Server<BR>server.xml文件中最重要的元素.Server定义了一个Tomcat服务器.一般你不用对他担心太多.Server元素能包含Logger和ContextManager元素类型</P>
<P>Logger<BR>此元素定义一个Logger对象,每个Logger都有一个名字去标识,也有一个纪录Logger的输出和冗余级别(描述此日志级别)和包含日志文件的路径.通常有servlet的Logger(ServletContext.log()处),JSP和Tomcat运行时的Logger.</P>
<P>ContextManager<BR>ContextManager说明一套ContextInterceptor, RequestInterceptor , Context和他们的Connectors的配置及结构.ContextManager有几个随同提供的特性:<BR>1. 用来纪录调试信息的调试级别 <BR>2. webapps/,conf/,logs/和所有已定义的环境的基本位置.用来使Tomcat可以在TOMCAT_HOME外的其他目录启动. <BR>3. 工作目录的名字</P>
<P>ContextInterceptor&amp;RequestInterceptor<BR>这些侦听器(interceptors)侦听具体发生在ContextManager中的事件.例如,ContextInterceptor侦听Tomcat的启动及终止事件,RequestInterceptor监视在它服务过程中用户请求需要通过的不同阶段.Tomcat的管理员不必知道太多关于侦听器的知识;另外,开发者应该知道这是如何在Tomcat中实现一个”全局”型的操作(例如安全性及每个请求日志)</P>
<P>Connector<BR>Connector表示一个到用户的联接,不管是通过web服务器或直接到用户浏览器(在一个独立配置中).Connector负责管理Tomcat的工作线程和 读/写 连接到不同用户的端口的 请求/响应.Connector的配置包含如下信息:</P>
<P>1.句柄类</P>
<P>2.句柄监听的TCP/IP端口</P>
<P>3.句柄服务器端口的TCP/IP的backlog.</P>
<P>稍后我们将在此文档中描述如何配置Connector.</P>
<P>Context<BR>每个Context提供一个指向你放置你Web项目的Tomcat的下属目录。每个Context包含如下配置：</P>
<P>1. Context放置的路径,可以是与ContextManager主目录相关的路径.</P>
<P>2.纪录调试信息的调试级别</P>
<P>3.可重载的标志.开发Servlet时,重载更改后的Servlet,这是一个非常便利的特性,你可以调试或用Tomcat测试新代码而不用停止或重新启动Tomcat.要打开重载,把reloadable设为真即可.这虽花费时间但可检测所发生的变化;更重要的事,鉴于,在一个装载类对象装入一个新的servlet时,类装载触发器可能会掷出一些错误.为避免这些问题,你可以设置可重载为假,这将停止重载功能.</P>
<P><BR>　 </P>
<P>从另一个目录中启动Tomcat</P>
<P>作为缺省值将使用TOMCAT_HOME/conf/server.xml作为配置文件.缺省配置将使用TOMCT_HOME作为关系环境的基础.</P>
<P>使用 “-f/你的/目录/server.xml”选项你可改变这种情况,使用另一个服务器配置文件和设置关系环境管理器的目录属性你需要在主目录内设置以下几个文件:</P>
<P>Ø 一个 webapps/目录(如果你已生成) – 所有war文件奖杯界压倒此目录而且所有子目录将作为关系环境添加.</P>
<P>Ø conf/目录 - 你可保存一个特殊的web.xml文件和其他配置文件</P>
<P>Ø logs/ - 所有日志文件将代替TOMCAT_HOME/logs/纪录到此目录中</P>
<P>Ø work/ - 关系环境的工作目录</P>
<P>如server.xml中的ContextManager.home属性有关联,将关联到到当前工作目录.</P>
<P>web。xml</P>
<P>关于web。xml和web项目结构（包括目录服务及配置）的详细描述可在Servlet API Spec的第9，10，14章中找到。</P>
<P>然而有一个与Tomcat有关的小“特性“与web.xml有关。Tomcat可以让用户通过将缺省的web.xml放入conf目录中来定义所有关系环境的web.xml的缺省值.建立一个新的关系环境时,Tomcat使用缺省的web.xml文件作为基本设置和应用项目特定的web.xml(放在应用项目的WEB-INF/web.xml文件)来覆盖这些缺省值.</P>
<P>设置Tomcat与Apache Web 服务器</P>
<P>服务器</P>
<P>到现在为止,我们未讨论作为服务器扩展的Tomcat,只讨论了作为独立运行的服务器.但有一些问题需要说明:</P>
<P>1. 当处理静态页面时,Tomcat不如Apache迅速.</P>
<P>2. Tomcat不象Apache一样可配置.</P>
<P>3. Tomcat不象Apache一样强壮.</P>
<P>4. 有很多网站已在某一特定web server上投入了很长时间,例如,使用CGI脚本/Server API模组/perl/php…我们不能假设这些遗留下来的东西都会被丢弃.</P>
<P>基于以上原因,一个现实的网站建议使用一个Web服务器,如Apache,为网站的静态页面请求提供服务,并使用Tomcat作为一个Servlet/JSP插件.</P>
<P>我们不准备深入的讨论每个不同的配置,我们将:</P>
<P>1. 涵盖Web服务器的基本行为</P>
<P>2. 解释需要何种配置</P>
<P>3. 在Apache上的实例</P>
<P><BR>Web 服务器操作</P>
<P><BR>简单说来，web服务器总是等待来自客户端的HTTP请求。当请求到达时，服务器会提供一切必要的内容来满足此请求。加入一个Servlet容器某种程度上会改变此行为。但服务器仍需处理如下因素：</P>
<P>载入servlet容器接口库并初始化（处理请求之前）。</P>
<P>当收到一个请求时，检查是否属于某Servlet，如是，则接口库接收此请求并处理。</P>
<P>另一方面，接口库需要知道他将服务某种请求，通常是基于请求的URL的某种模式和将此请求导向何处。</P>
<P>当用户想要设置使用虚拟主机的配置时，事情会变得更加复杂，或者想多个开发者在一个服务器上进行开发但使用不同的Servlet容器的JVMs。以下我们将讨论这两个问题。</P>
<P><BR>必需进行的配置</P>
<P><BR>应该考虑的是最明显的配置是servlet URL具有对servlet容器中的servlet具有表示的责任。很明显，你必须知道传递什么到Servlet容器。我们仍需提供附加的配置项目到web-server或servlet-container的结合体中.</P>
<P>l 考虑到Tomcat进程是否可取得，我们仍需提供配置和Tomcat正在监听的TCP/IP 主机名/端口号。</P>
<P>l 需要告知web服务器接口库的位置（因此我们可以在起始时装入）</P>
<P>l 需要设置接口内部信息如将日志记录在何处和如何纪录，等等。</P>
<P>所有此类信息必须出现在web服务器配置里或被接口使用的私有配置文件中。下面将讲述如何在Apache中如何实现这些配置。</P>
<P><BR>Apache上的实现</P>
<P>这一部分演示如何配置Apache与Tomcat一起工作；并试图解释深入到可能会用到的配置规范。在jserv 安装页上可找到其他信息。 </P><img src ="http://www.blogjava.net/Yang/aggbug/22950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yang/" target="_blank">飞扬</a> 2005-12-08 10:37 <a href="http://www.blogjava.net/Yang/articles/22950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 4.0+apache 1.3完美整合</title><link>http://www.blogjava.net/Yang/articles/22949.html</link><dc:creator>飞扬</dc:creator><author>飞扬</author><pubDate>Thu, 08 Dec 2005 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/Yang/articles/22949.html</guid><wfw:comment>http://www.blogjava.net/Yang/comments/22949.html</wfw:comment><comments>http://www.blogjava.net/Yang/articles/22949.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yang/comments/commentRss/22949.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yang/services/trackbacks/22949.html</trackback:ping><description><![CDATA[<H3 align=center>Tomcat 4.0+apache 1.3完美整合</H3>
<P align=center><A href="http://www.jdon.com/aboutme.htm">板桥里人</A> jdon.com 2001/10</P>
<P></P>
<P>1.Tomcat缺省的jsp文件必须放置在examples目录下,难道jsp文件只能放在examples下吗？<BR>2. 访问jsp只能用xxxx.com:8080访问吗? 
<P>本文讨论如何结合Tomcat和Apache及其他脚本程序如PHP混合使用情况,如果一台服务器只运行jsp,那解决办法很简单:只要将<EM>server.xml</EM>中8080端口改成80就可以,或将apache中的httpd.conf的80改成8080也可以.可以参考:<A href="http://www.moreservlets.com/Using-Tomcat-4.html"> <FONT color=#800080>Using Apache Tomcat 4</FONT> </A><BR><BR>Tomcat 3.23中很好做,相关文章介绍不少,Tomcat 4.0就不一样了,本人经过试验,摸索出解决这两个问题的简单方式,这种方式可以和apache结合在一起,假设域名主机是sign.jdon.com 可以实现http://sign.jdon.com/访问所有JSP文件,这一结果是很多朋友希望达到的,我下面介绍一下.<BR><BR>分两步: 配置server.xml 和 配置httpd.conf: 
<P>配置server.xml<BR>首先介绍一下tomcat conf下的server.xml 我们的动作主要是在这里面操作:<BR>server.xml有两部分组成:<BR>1. service=Tomcat-Standalone 这是Tomcat标准启动服务,使用端口8080访问<BR>2. service=Tomcat-Apache 这是和apache整合部分,使用80008端口访问 ,同时需要在httpd.conf中加载mod_webapp.so<BR></P>
<P>在上面两个service段中加入(在哪个service加入取决于你需要是以sign.jdon.com:8080 还是以sign.jdon.com/访问):<BR>我们是想以后者访问,就在service=Tomcat-Apache中加入:</P>
<TABLE borderColor=#cccccc cellSpacing=5 cellPadding=2 width="100%" align=center bgColor=#ffff99 border=0>
<TBODY>
<TR>
<TD>&lt;Host name="虚拟主机域名" debug="0" appBase="应用基本目录" unpackWARs="true"&gt;<BR>&lt;Context path="容器URL路径" docBase="容器目录" debug="0" reloadable="true"&gt;<BR>&lt;Logger className="org.apache.catalina.logger.FileLogger"<BR>prefix="自己的log文件名." suffix=".txt"<BR>timestamp="true"/&gt;<BR>&lt;/Context&gt; &lt;/Host&gt; </TD></TR></TBODY></TABLE>
<P><BR><BR></P>
<P>1. reloadable="true"确保你每次上传bean或servlet到WEB-INF/classes时,系统自动装载最新的.<BR><BR>2. docBase="" 是你自己jsp目录的实际位置 ，如果是winNT, 可以是c:/jserv</P>
<P>3. Logger 是用来将/jserv的启动状态单独输出一个log文件中 这里是localhost_jserv_log,这个文件在Tomcat 的logs目录下。可以用来监视你的/jserv启动了没有。</P>
<P>4.欠缺servlet或bean是放置在自己目录下的WEB-INF/classes中，建议你将eamples目录下的WEB-INF原封不动的拷贝过来，省事。你要修改这个,就修改web.xml 这些 上面推荐的英文文章中有介绍.</P>
<P>我的server.xml是这样:</P>
<P></P>
<TABLE cellSpacing=5 cellPadding=3 width="100%" align=center bgColor=#cccc99 border=0>
<TBODY>
<TR>
<TD>
<P>&lt;Service name="Tomcat-Apache"&gt;</P>
<P>&lt;Connector className="org.apache.catalina.connector.warp.WarpConnector"<BR>port="8008" minProcessors="5" maxProcessors="75"<BR>enableLookups="true"<BR>acceptCount="10" debug="0"/&gt;</P>
<P>&lt;!-- Replace "localhost" with what your Apache "ServerName" is set to --&gt;<BR>&lt;Engine className="org.apache.catalina.connector.warp.WarpEngine"<BR>name="Apache" debug="0" appBase="webapps"&gt;</P>
<P>&lt;!-- Global logger unless overridden at lower levels --&gt;<BR>&lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="apache_log." suffix=".txt" timestamp="true"/&gt;</P>
<P>&lt;!-- Because this Realm is here, an instance will be shared globally --&gt;<BR>&lt;Realm className="org.apache.catalina.realm.MemoryRealm" /&gt;</P>
<P>&lt;!--下面是我加入的--&gt;<BR>&lt;Host name="sign.jdon.com" debug="0" appBase="/home/bqlr" unpackWARs="true"&gt;<BR>&lt;Context path="/" docBase="/home/bqlr/sign" debug="0" reloadable="true"&gt;<BR>&lt;Logger className="org.apache.catalina.logger.FileLogger"<BR>prefix="jdon.com_log." suffix=".txt"<BR>timestamp="true"/&gt;<BR>&lt;/Context&gt;<BR>&lt;/Host&gt;</P>
<P></P>
<P>&lt;/Engine&gt;</P>
<P>&lt;/Service&gt;</P></TD></TR></TBODY></TABLE>
<P></P>
<P>&nbsp;</P>
<P>配置httpd.conf</P>
<P>设定sign.jdon.com 对应我的目录/home/bqlr/sign/ sign.jdon.com是虚拟主机名,我的部署方法可以为特定虚拟主机域名提供JSP功能:<BR>在自己的apache 的conf下的httpd.conf加入:</P>
<TABLE cellSpacing=5 cellPadding=3 width="80%" align=center bgColor=#ccccff border=0>
<TBODY>
<TR>
<TD>LoadModule webapp_module libexec/mod_webapp.so<BR>AddModule mod_webapp.c<BR>WebAppConnection conn warp sign.jdon.com:8008 
<P>&lt;VirtualHost 61.119.57.108&gt;<BR>ServerAdmin webmaster@jdon.com<BR>DocumentRoot /home/bqlr/sign<BR>ServerName sign.jdon.com<BR># WebAppDeploy examples conn /examples/<BR>WebAppDeploy sign conn /<BR>&lt;/VirtualHost&gt;<BR></P></TD></TR></TBODY></TABLE>
<P>&nbsp;</P>
<P>1.本方法是适合apache 1.3版本的 适合glibc2.1 我在RedHat 7.2 7.1 7.0 6.2 6.1都测试通过</P>
<P>2.如果你的linux安装的是glibc2.1 就要自己下载mod_webapp.src自己编译，编译前，要先安装其目录下的APR.<BR>这里是我编译好正在使用的<A href="http://www.jdon.com/mod_webapp.so"> mod_webapp.so </A>,可以下载直接copy到apache的libexec目录下</P>
<P>3.使用httpd configtest 测试httpd.conf可否启动,如果出现无效LoadModule提示 是因为你的apache没有使用module=so编译,重新编译apache 网络上其他有介绍.</P>
<P>4.在/home/bqlr/sign下安装WEB-INF/classes目录 最简单的办法是copy -R tomcat/wepapps/examples/WEB-INF 到/home/bqlr/sign下,以后自己编译的bean或servlet放在这个目录下 以后我有空 我公布我的jsp/bean的编程举例.</P>
<P>最后 重新启动Tomcat 和 apache 你可以使用sign.jdon.com访问所有的Jsp 和servlet了.</P><img src ="http://www.blogjava.net/Yang/aggbug/22949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yang/" target="_blank">飞扬</a> 2005-12-08 10:36 <a href="http://www.blogjava.net/Yang/articles/22949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中文手册</title><link>http://www.blogjava.net/Yang/articles/22948.html</link><dc:creator>飞扬</dc:creator><author>飞扬</author><pubDate>Thu, 08 Dec 2005 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/Yang/articles/22948.html</guid><wfw:comment>http://www.blogjava.net/Yang/comments/22948.html</wfw:comment><comments>http://www.blogjava.net/Yang/articles/22948.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yang/comments/commentRss/22948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yang/services/trackbacks/22948.html</trackback:ping><description><![CDATA[<BR>
<CENTER>
<H4>Tomcat中文手册</H4></CENTER>(来源：www.qcsky.net) <BR>Jakarta-Tomcat 简明中文版用户指南第一部分 <BR><BR>
<P>本文档提供关于Tomcat的基础信息.主要内容如下:<BR>Tomcat二进制版本安装<BR>与Tomcat相关的脚本的主要内容<BR>与server.xml相关的主要内容,Tomcat的主要配置文件<BR>如何设置Tomcat与宿主web服务器一起工作的说明<BR>如何应用Tomcat配置一个现实中的web站点<BR>希望此文档足以使新用户可以开始使用Tomcat.如找不到某方面的内容请(按以下顺序)<BR>查找Tomcat faq<BR>查找Tomcat包宓?BR&gt;向Tomcat用户邮件列表发出问题<BR>如此疑问的答案不存在,我们鼓励把对疑问的解答放入Tomcat faq或此文档.如对此文档有意见或建议,请发送到Tomcat的邮件列表.</P>
<P>Getting Started<BR>Tomcat是一个带有jsp环境的servlet容器.servlet容器是一个根据用户的行为可以管理和激活servlet的运行时的shell.<BR>粗略地可以将servlet容器分为如下几类:</P>
<P>独立的servlet容器<BR>内置有web服务器的一部分.指当使用基于Java的web服务器的情形,例如servlet容器是JavaWebServer的一个部分. 独立的servlet容器是Tomcat的默认模式.<BR>大多数的web服务器并非基于Java,因此,我们可以得出如下两种容器的模式.</P>
<P><BR>进程内的servlet容器<BR>servlet容器作为web服务器的插件和Java容器的实现.Web服务器插件在内部地址空间打开一个JVM(java virtual machine)使Java容器得以在内部运行.如有某个需要调用servlet的请求,,插件将取得对此请求的控制并将他传递(使用JNI)给Java容器.进程内容器对于多线程,单进程的服务器非常合适并且提供很好的运行速度,但伸缩性有所不足.</P>
<P><BR>进程外的servlet容器<BR>servlet容器运行于web服务器之外的地址空间且作为web服务器的插件和Java容器的实现的结合.web服务器插件和Java容器 JVM使用IPC机制(通常是TCP/IP)进行通讯.当一个调用servlet的请求到达时,插件将取得对此请求的控制并将其传递(使用IPC等)给Java容器,进程外容器的反应时间或进程外容器引擎不如进程内容器,但进程外容器引擎在许多其他可比的范围内更好(伸缩性,稳定性等).<BR>Tomcat既可作为独立的容器(主要是用于开发与调试)又可作为对现有服务器的附加(当前支持Apache,IIS和Netscape服务器).即任何时候配置Tomcat你都必须决定如何应用他,如选择第二或第三种模式,你还需要安装一个web服务器接口.<BR>Tomcat与Jserv有何区别?Tomcat是Jserv吗?<BR>这是个常见的误解.Jserv是Servlet API2.0兼容并与Apache一起使用的容器.Tomcat是一个完全重写的并与Servlet API2.2和JSP1.1兼容的容器.<BR>Tomcat使用了一些为Jserv而写的代码,特别是Jserv的Apache接口,但这是唯一的相同之处.<BR>怎样安装Tomcat的二进制版本?<BR>非常简单,只需:<BR>下载 zip/tar.gz 任何压缩文件,从http://jakarta.apche.org/download/binindex.html处.<BR>解压缩此文件到某目录(如:foo).将会生成一子目录,名为”tomcat”.<BR>转换到”tomcat”目录设置一新的环境变量(TOMCAT_HOME)指向你安装的tomcat的目录<BR>WIN32平台,键入:<BR>“set TOMCAT_HOME=foo\tomcat”<BR>Unix平台:<BR>如是bash/sh环境, 键入:”TOMCAT_HOME=foo/tomcat;export TOMCAT_HOME”<BR>如是tcsh环境, 键入:”setenv TOMCAT_HOME foo/tomcat”<BR>设置环境变量JAVA_HOME指向你JDK的目录,然后添加JAVA解释器到你的PATH环境变量.<BR>好了!现在可以运行TOMCAT并作为一个独立的Servlet容器(模式一)<BR>启动与关闭Tomcat<BR>使用”bin”目录中的脚本启动与关闭Tomcat.<BR>启动:<BR>uinx:bin/startup.sh<BR>win32:bin\startup<BR>关闭:<BR>unix:bin/shutdown.sh<BR>win32:bin\shutdown<BR>Tomcat目录结构<BR>假设你已将Tomcat解压,你已得到下列目录结构:<BR>目录名--描述 <BR>bin <BR>包含启动/关闭脚本 <BR>conf <BR>包含不同的配置文件,<BR>包括 server.xml(Tomcat的主要配置文件)和为不同的Tomcat配置的web应用设置缺省值的文件web.xml<BR>doc<BR>包含各种Tomcat文档 <BR>lib <BR>包含Tomcat使用的jar文件.unix平台此目录下的任何文件都被加到Tomcat的classpath中 <BR>logs <BR>Tomcat摆放日志文件的地方 <BR>src <BR>ServletAPI源文件.先别高兴,这些只有些必须在Servlet容器内实现的空接口和抽象类 <BR>webapps <BR>包含web项目示例 <BR>此外你可以Tomcat会创建如下目录:<BR>work<BR>Tomcat自动生成,放置Tomcat运行时的临时文件(如编译后的JSP文件).如在Tomcat运行时删除此目录.JSP页面将不能运行.<BR>classes<BR>你可以创建此目录来添加一些附加的类到类路径中.任何你加到此目录中的类都可在Tomcat的类路径中找到自身.<BR>Tomcat的脚本<BR>Tomcat是一个Java程序,因此在设置好几个环境变量后即可用命令行的方式运行.然而设置Tomcat使用的每个环境变量和如下的命令行参数乏味且易错.因此,Tomcat开发组提供了一些脚本使启动和关闭Tomcat变得轻松.<BR>注意:这些脚本仅仅是个便利的方法去启动和关闭Tomcat.你可修改他们来定制CLASSPATH,环境变量如PATH,LD_LIBRARY_PATH,等等,只要是生成一个正确的命令行即可.<BR>这些脚本是什么呢?下表列出对一般用户最重要的脚本.<BR>tomcat <BR>主脚本.设置合适的环境变量,包括CLASSPATH,TOMCAT_HOME和JAVA_HOME和用适合的命令行参数启动Tomcat </P>
<P>startup </P>
<P>在后台启动Tomcat.”tomcat start”命令的替换方式 </P>
<P>shutdown </P>
<P>关闭Tomcat.”tomcat stop”命令的替换方式 </P>
<P><BR>对用户最重要的脚本是tomcat(tomcat.bat/tomcat.sh).其他Tomcat相关的脚本作为一个简单的面向单任务的指向Tomcat脚本(设置不同的命令行参数等)的入口.</P>
<P><BR>仔细考察tomcat.bat/tomcat.sh,它按以下步骤运行:</P>
<P>在Unix下的步骤：</P>
<P>如未指定,推测 TOMCAT_HOME</P>
<P>如未指定,推测 JAVA_HOME</P>
<P>设置CLASS_PATH包含:</P>
<P>1.${TOMCAT_HOME}/classes目录(如果存在)</P>
<P>2.${TOMCAT_HOME}/lib的一切内容</P>
<P>3.${JAVA_HOME}/lib/tools.jar(此jar文件包含工具javac,我们需要javac处理jsp文件.</P>
<P><BR>运行带有设定Java环境变量的命令行参数的java命令,调入tomcat.home,和org.apache.tomcat.startup.Tomcat 作为启始类.同时也传递命令行参数到org.apache.tomcat.startup.Tomcat ,例如:</P>
<P><BR>执行start/stop/run 等的操作</P>
<P>此Tomcat进程使用指向server.xml的路径,</P>
<P>例如server.xml放置于etc/server_1.xml并且用户意图在后台启动apache,键 入如下命令行:</P>
<P>bin/tomcat.sh start –f /etc/server_1.xml</P>
<P>在Win32下的步骤：(略)</P>
<P><BR>由此可见,win32版的tomcat.bat与Unix版的几乎一致.尤其在它不推测TOMCAT_HOME和JAVA_HOME的值,并且不将所有的jar文件放入类路径中.</P>
<P><BR>Tomcat的配置文件</P>
<P>Tomcat的配置基于两个配置文件:</P>
<P>1.server.xml - Tomcat的全局配置文件</P>
<P>2.web.xml - 在Tomcat中配置不同的关系环境</P>
<P><BR>这一部分将讲述如何使用这些文件.我们不会包含web.xml的内部机制,这些内部机制深入到了Servlet API的细节,因此,我们将讨论涵盖servler.xml内容及web.xml在Tomcat关系环境中的用法.</P>
<P><BR>server.xml</P>
<P>server.xml是Tomcat的主配置文件.完成两个目标:</P>
<P>1 提供Tomcat组件的初始配置.</P>
<P>2 说明Tomcat的结构,含义,使得Tomcat通过实例化组件完成起动及构建自身, 如在server.xml所指定的</P>
<P>下表描述server.xml种的重要元素: </P>
<P><BR>
<P>元素及其描述 </P>
<P>Server<BR>server.xml文件中最重要的元素.Server定义了一个Tomcat服务器.一般你不用对他担心太多.Server元素能包含Logger和ContextManager元素类型</P>
<P>Logger<BR>此元素定义一个Logger对象,每个Logger都有一个名字去标识,也有一个纪录Logger的输出和冗余级别(描述此日志级别)和包含日志文件的路径.通常有servlet的Logger(ServletContext.log()处),JSP和Tomcat运行时的Logger.</P>
<P>ContextManager<BR>ContextManager说明一套ContextInterceptor, RequestInterceptor , Context和他们的Connectors的配置及结构.ContextManager有几个随同提供的特性:<BR>1. 用来纪录调试信息的调试级别 <BR>2. webapps/,conf/,logs/和所有已定义的环境的基本位置.用来使Tomcat可以在TOMCAT_HOME外的其他目录启动. <BR>3. 工作目录的名字</P>
<P>ContextInterceptor&amp;RequestInterceptor<BR>这些侦听器(interceptors)侦听具体发生在ContextManager中的事件.例如,ContextInterceptor侦听Tomcat的启动及终止事件,RequestInterceptor监视在它服务过程中用户请求需要通过的不同阶段.Tomcat的管理员不必知道太多关于侦听器的知识;另外,开发者应该知道这是如何在Tomcat中实现一个”全局”型的操作(例如安全性及每个请求日志)</P>
<P>Connector<BR>Connector表示一个到用户的联接,不管是通过web服务器或直接到用户浏览器(在一个独立配置中).Connector负责管理Tomcat的工作线程和 读/写 连接到不同用户的端口的 请求/响应.Connector的配置包含如下信息:</P>
<P>1.句柄类</P>
<P>2.句柄监听的TCP/IP端口</P>
<P>3.句柄服务器端口的TCP/IP的backlog.</P>
<P>稍后我们将在此文档中描述如何配置Connector.</P>
<P>Context<BR>每个Context提供一个指向你放置你Web项目的Tomcat的下属目录。每个Context包含如下配置：</P>
<P>1. Context放置的路径,可以是与ContextManager主目录相关的路径.</P>
<P>2.纪录调试信息的调试级别</P>
<P>3.可重载的标志.开发Servlet时,重载更改后的Servlet,这是一个非常便利的特性,你可以调试或用Tomcat测试新代码而不用停止或重新启动Tomcat.要打开重载,把reloadable设为真即可.这虽花费时间但可检测所发生的变化;更重要的事,鉴于,在一个装载类对象装入一个新的servlet时,类装载触发器可能会掷出一些错误.为避免这些问题,你可以设置可重载为假,这将停止重载功能.</P>
<P><BR>　 </P>
<P>从另一个目录中启动Tomcat</P>
<P>作为缺省值将使用TOMCAT_HOME/conf/server.xml作为配置文件.缺省配置将使用TOMCT_HOME作为关系环境的基础.</P>
<P>使用 “-f/你的/目录/server.xml”选项你可改变这种情况,使用另一个服务器配置文件和设置关系环境管理器的目录属性你需要在主目录内设置以下几个文件:</P>
<P>Ø 一个 webapps/目录(如果你已生成) – 所有war文件奖杯界压倒此目录而且所有子目录将作为关系环境添加.</P>
<P>Ø conf/目录 - 你可保存一个特殊的web.xml文件和其他配置文件</P>
<P>Ø logs/ - 所有日志文件将代替TOMCAT_HOME/logs/纪录到此目录中</P>
<P>Ø work/ - 关系环境的工作目录</P>
<P>如server.xml中的ContextManager.home属性有关联,将关联到到当前工作目录.</P>
<P>web。xml</P>
<P>关于web。xml和web项目结构（包括目录服务及配置）的详细描述可在Servlet API Spec的第9，10，14章中找到。</P>
<P>然而有一个与Tomcat有关的小“特性“与web.xml有关。Tomcat可以让用户通过将缺省的web.xml放入conf目录中来定义所有关系环境的web.xml的缺省值.建立一个新的关系环境时,Tomcat使用缺省的web.xml文件作为基本设置和应用项目特定的web.xml(放在应用项目的WEB-INF/web.xml文件)来覆盖这些缺省值.</P>
<P>设置Tomcat与Apache Web 服务器</P>
<P>服务器</P>
<P>到现在为止,我们未讨论作为服务器扩展的Tomcat,只讨论了作为独立运行的服务器.但有一些问题需要说明:</P>
<P>1. 当处理静态页面时,Tomcat不如Apache迅速.</P>
<P>2. Tomcat不象Apache一样可配置.</P>
<P>3. Tomcat不象Apache一样强壮.</P>
<P>4. 有很多网站已在某一特定web server上投入了很长时间,例如,使用CGI脚本/Server API模组/perl/php…我们不能假设这些遗留下来的东西都会被丢弃.</P>
<P>基于以上原因,一个现实的网站建议使用一个Web服务器,如Apache,为网站的静态页面请求提供服务,并使用Tomcat作为一个Servlet/JSP插件.</P>
<P>我们不准备深入的讨论每个不同的配置,我们将:</P>
<P>1. 涵盖Web服务器的基本行为</P>
<P>2. 解释需要何种配置</P>
<P>3. 在Apache上的实例</P>
<P><BR>Web 服务器操作</P>
<P><BR>简单说来，web服务器总是等待来自客户端的HTTP请求。当请求到达时，服务器会提供一切必要的内容来满足此请求。加入一个Servlet容器某种程度上会改变此行为。但服务器仍需处理如下因素：</P>
<P>载入servlet容器接口库并初始化（处理请求之前）。</P>
<P>当收到一个请求时，检查是否属于某Servlet，如是，则接口库接收此请求并处理。</P>
<P>另一方面，接口库需要知道他将服务某种请求，通常是基于请求的URL的某种模式和将此请求导向何处。</P>
<P>当用户想要设置使用虚拟主机的配置时，事情会变得更加复杂，或者想多个开发者在一个服务器上进行开发但使用不同的Servlet容器的JVMs。以下我们将讨论这两个问题。</P>
<P><BR>必需进行的配置</P>
<P><BR>应该考虑的是最明显的配置是servlet URL具有对servlet容器中的servlet具有表示的责任。很明显，你必须知道传递什么到Servlet容器。我们仍需提供附加的配置项目到web-server或servlet-container的结合体中.</P>
<P>l 考虑到Tomcat进程是否可取得，我们仍需提供配置和Tomcat正在监听的TCP/IP 主机名/端口号。</P>
<P>l 需要告知web服务器接口库的位置（因此我们可以在起始时装入）</P>
<P>l 需要设置接口内部信息如将日志记录在何处和如何纪录，等等。</P>
<P>所有此类信息必须出现在web服务器配置里或被接口使用的私有配置文件中。下面将讲述如何在Apache中如何实现这些配置。</P>
<P><BR>Apache上的实现</P>
<P>这一部分演示如何配置Apache与Tomcat一起工作；并试图解释深入到可能会用到的配置规范。在jserv 安装页上可找到其他信息。 </P><img src ="http://www.blogjava.net/Yang/aggbug/22948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yang/" target="_blank">飞扬</a> 2005-12-08 10:34 <a href="http://www.blogjava.net/Yang/articles/22948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我对于抽象类和接口的浅显理解</title><link>http://www.blogjava.net/Yang/articles/19096.html</link><dc:creator>飞扬</dc:creator><author>飞扬</author><pubDate>Thu, 10 Nov 2005 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/Yang/articles/19096.html</guid><wfw:comment>http://www.blogjava.net/Yang/comments/19096.html</wfw:comment><comments>http://www.blogjava.net/Yang/articles/19096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Yang/comments/commentRss/19096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Yang/services/trackbacks/19096.html</trackback:ping><description><![CDATA[<FONT size=2>相信接触过C++的人都知道在C++里有一个Vitural类，它就是和Java中等价的abstract类，我们称他们为抽象类。在C++中包含虚函数的类称为虚基类,用Vicural关键字来表示。虚基类只能用于继承，而不能创造虚基类的对象。虚函数是只有函数原型而没有函数体的函数，它必须在继承类中重新来定义。而在Java中是用abstract关键字来表示抽象类和方法。<BR>接口，接口就是包含了一组抽象方法的抽象类。Java中不支持多重继承，但支持多个接口。要实现接口必须用implements关键子。<BR>抽象类是用来实现同一层次类之间的继承关系，接口是用来实现不同层次类之间的继承关系。<BR>eg:<BR>package MyPackage<BR>abstract class Customer&nbsp;&nbsp; //定义Customer类<BR>{<BR><BR>&nbsp;&nbsp; abstract String getName();<BR>};<BR>public interface Account&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义了Account接口<BR>{<BR>&nbsp;&nbsp; public float getBalance();<BR>};<BR>public interface Debit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义Debit接口<BR>{<BR>&nbsp; public void deductAmout(float amt);<BR>};<BR>public interface Credit&nbsp;&nbsp;&nbsp;&nbsp; //定义Credit接口<BR>{<BR>&nbsp;public void addAmount(float amt);<BR>};<BR>public class CustomerAccount extends Customer implements Account Debit Credit<BR>{<BR>&nbsp;public String getName()<BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp; //重写抽象类Customer的方法getName()<BR>&nbsp;}<BR>&nbsp;public float getBalance()<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; //重写接口Account的方法getBalance()<BR>&nbsp; }<BR>&nbsp;public float deducAmount(float amt)<BR>&nbsp;{<BR>&nbsp;&nbsp; //重写接口Debit的方法deducAmount(float amt)<BR>&nbsp;}<BR>public void addAmount(float amt)<BR>&nbsp;{<BR>&nbsp;&nbsp; //重写接口Credit的方法addAmount(float amt)<BR>&nbsp;}<BR>};<BR>定义了这些接口后就可以在任何类中实现这些接口了，当然这只是我最为基础的理解，相信在以后的学习和实践中会得到更为深刻的认识。</FONT><img src ="http://www.blogjava.net/Yang/aggbug/19096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Yang/" target="_blank">飞扬</a> 2005-11-10 10:55 <a href="http://www.blogjava.net/Yang/articles/19096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>