﻿<?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-&lt;h3 style="font-family: Comic Sans MS"&gt;&lt;font color="#FA1A0A" size="10"&gt;︻┳═一Java&lt;/font&gt;&lt;/h3&gt;-随笔分类-Apache</title><link>http://www.blogjava.net/rain1102/category/37629.html</link><description>&lt;br/&gt;&lt;font color="green" style="font-family: 华文行楷;font-size:16px;"&gt;子曰：危邦不入，乱邦不居。天下有道则见，无道则隐。&lt;/font&gt;&lt;font color="#3C1435"&gt;&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 20 Nov 2009 14:29:57 GMT</lastBuildDate><pubDate>Fri, 20 Nov 2009 14:29:57 GMT</pubDate><ttl>60</ttl><item><title>安装tomcat问题</title><link>http://www.blogjava.net/rain1102/archive/2009/11/20/303075.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 20 Nov 2009 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/11/20/303075.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/303075.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/11/20/303075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/303075.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/303075.html</trackback:ping><description><![CDATA[给客户安装tomcat6时候遇到错误，信息为：
<h1 style="color: red">failed&nbsp;to&nbsp;install&nbsp;tomcat6&nbsp;service&nbsp;check&nbsp;your&nbsp;settings&nbsp;and&nbsp;permissions</h1>
经过查看得知客户的机器上原先装了一个，然后直接删掉了tomcat安装目录而不是卸载的，所以服务里面还有tomcat的服务。所以需要删掉该服务才可以安装。<br />
<br />
找到一个解压版本的tomcat放到任意目录，然后听过命令行进入到该目录下的bin目录里面，里面应该有个service.bat文件，执行<span style="color: #008000">service remove tomcat6</span>，这样就删除服务了。下面就可以安装！<img src ="http://www.blogjava.net/rain1102/aggbug/303075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-11-20 17:06 <a href="http://www.blogjava.net/rain1102/archive/2009/11/20/303075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用HttpClient发送Post请求</title><link>http://www.blogjava.net/rain1102/archive/2009/07/30/289137.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 30 Jul 2009 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/07/30/289137.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/289137.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/07/30/289137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/289137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/289137.html</trackback:ping><description><![CDATA[<p>两天前写了个通过上海中科院有机化学研究所网站的翻译功能来翻译化合物名称的Python代码，今天看到了HttpClient也比较好用，所以就写了个，代码如下：<br />
</p>
<p>&nbsp; HttpClient httpclient = new DefaultHttpClient();<br />
&nbsp;&nbsp;HttpPost method = new HttpPost("http://202.127.145.134/scdb/translate/translate.asp");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<span style="color: #008000">List &lt;NameValuePair&gt; nvps = new ArrayList &lt;NameValuePair&gt;();<br />
&nbsp;&nbsp;nvps.add(new BasicNameValuePair("eng2chi", "BISPYROQUINE"));&nbsp;&nbsp;&nbsp; <span style="color: #ff0000">//参数<br />
</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">method.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));&nbsp;</span>&nbsp;&nbsp;<span style="color: #ff0000">//设置参数给Post</span><br />
&nbsp;&nbsp;&nbsp;HttpResponse response = httpclient.execute(method);<br />
&nbsp;&nbsp;&nbsp;HttpEntity entity = response.getEntity();<br />
&nbsp;&nbsp;&nbsp;BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "gb2312"));<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;String line = null;<br />
&nbsp;&nbsp;&nbsp;while ((line = reader.readLine()) != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (entity != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;entity.consumeContent();<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;} catch (ClientProtocolException e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;} catch (UnsupportedEncodingException e1) {<br />
&nbsp;&nbsp;&nbsp;e1.printStackTrace();<br />
&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}</p><img src ="http://www.blogjava.net/rain1102/aggbug/289137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-07-30 16:48 <a href="http://www.blogjava.net/rain1102/archive/2009/07/30/289137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpClient 使用代理访问Https【转】</title><link>http://www.blogjava.net/rain1102/archive/2009/07/30/289104.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 30 Jul 2009 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/07/30/289104.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/289104.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/07/30/289104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/289104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/289104.html</trackback:ping><description><![CDATA[<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.io.BufferedReader; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;java.io.InputStreamReader; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.apache.http.HttpEntity; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;org.apache.http.HttpHost; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.apache.http.HttpResponse; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;org.apache.http.auth.AuthScope; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.apache.http.auth.UsernamePasswordCredentials; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;org.apache.http.client.methods.HttpGet; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.apache.http.conn.params.ConnRoutePNames; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;org.apache.http.impl.client.DefaultHttpClient; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">/** </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;HttpClient&nbsp;4.0通过代理访问Https的代码例子。 </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;@author&nbsp;JAVA世纪网(java2000.net,&nbsp;laozizhu.com) </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HttpsProxyGet&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;DefaultHttpClient&nbsp;httpclient&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DefaultHttpClient(); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;认证的数据 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;我这里是瞎写的，请根据实际情况填写 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;httpclient.getCredentialsProvider().setCredentials(</span><span class="keyword">new</span><span>&nbsp;AuthScope(</span><span class="string">"10.60.8.20"</span><span>,&nbsp;</span><span class="number">8080</span><span>), &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;UsernamePasswordCredentials(</span><span class="string">"username"</span><span>,&nbsp;</span><span class="string">"password"</span><span>)); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;访问的目标站点，端口和协议 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpHost&nbsp;targetHost&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HttpHost(</span><span class="string">"www.google.com"</span><span>,&nbsp;</span><span class="number">443</span><span>,&nbsp;</span><span class="string">"https"</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;代理的设置 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpHost&nbsp;proxy&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HttpHost(</span><span class="string">"10.60.8.20"</span><span>,&nbsp;</span><span class="number">8080</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,&nbsp;proxy); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;目标地址 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpGet&nbsp;httpget&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;HttpGet(</span><span class="string">"/adsense/login/zh_CN/?"</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"目标:&nbsp;"</span><span>&nbsp;+&nbsp;targetHost); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"请求:&nbsp;"</span><span>&nbsp;+&nbsp;httpget.getRequestLine()); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"代理:&nbsp;"</span><span>&nbsp;+&nbsp;proxy); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;执行 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpResponse&nbsp;response&nbsp;=&nbsp;httpclient.execute(targetHost,&nbsp;httpget); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpEntity&nbsp;entity&nbsp;=&nbsp;response.getEntity(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"----------------------------------------"</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(response.getStatusLine()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(entity&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">"Response&nbsp;content&nbsp;length:&nbsp;"</span><span>&nbsp;+&nbsp;entity.getContentLength()); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;显示结果 </span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;reader&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;BufferedReader(</span><span class="keyword">new</span><span>&nbsp;InputStreamReader(entity.getContent(),&nbsp;</span><span class="string">"UTF-8"</span><span>)); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;line&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>&nbsp;((line&nbsp;=&nbsp;reader.readLine())&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(entity&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;entity.consumeContent(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol><img src ="http://www.blogjava.net/rain1102/aggbug/289104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-07-30 13:50 <a href="http://www.blogjava.net/rain1102/archive/2009/07/30/289104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设置Tomcat访问日志（转载）</title><link>http://www.blogjava.net/rain1102/archive/2009/04/23/267079.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 23 Apr 2009 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/04/23/267079.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/267079.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/04/23/267079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/267079.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/267079.html</trackback:ping><description><![CDATA[<div class="blog_content">常使用web服务器的朋友大都了解，一般的web server有两部分日志： <br />
&nbsp;&nbsp;&nbsp; 一是运行中的日志，它主要记录运行的一些信息，尤其是一些异常错误日志信息 <br />
&nbsp;&nbsp;&nbsp; 二是访问日志信息，它记录的访问的时间，IP，访问的资料等相关信息。 <br />
&nbsp;&nbsp;&nbsp; <br />
现在我来和大家介绍一下利用<span class="hilite1">tomcat</span>产生的访问日志数据，我们能做哪些有效的分析数据？ <br />
<br />
首先是配置<span class="hilite1">tomcat</span>访问日志数据，默认情况下访问日志没有打开，配置的方式如下： <br />
&nbsp;&nbsp;&nbsp; 编辑 ${catalina}/conf/server.xml文件.注:${catalina}是<span class="hilite1">tomcat</span>的安装目录 <br />
&nbsp;&nbsp;&nbsp; 把以下的注释(&lt;!-- --&gt;)去掉即可。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.valves.AccessLogValve" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="logs"&nbsp; prefix="localhost_access_log." suffix=".txt" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pattern="common" resolveHosts="false"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt; <br />
&nbsp;&nbsp;&nbsp; 其中 directory是产生的目录 <span class="hilite1">tomcat</span>安装${catalina}作为当前目录 <br />
&nbsp;&nbsp;&nbsp; pattern表示日志生产的格式，common是<span class="hilite1">tomcat</span>提供的一个标准设置格式。其具体的表达式为 %h %l %u %t "%r" %s %b <br />
&nbsp;&nbsp;&nbsp; 但本人建议采用以下具体的配置，因为标准配置有一些重要的日志数据无法生。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %h %l %u %t "%r" %s %b %T&nbsp; <br />
具体的日志产生样式说明如下(从官方文档中摘录)： <br />
&nbsp;&nbsp;&nbsp; * %a - Remote IP address <br />
&nbsp;&nbsp;&nbsp; * %A - Local IP address <br />
&nbsp;&nbsp;&nbsp; * %b - Bytes sent, excluding HTTP headers, or '-' if zero <br />
&nbsp;&nbsp;&nbsp; * %B - Bytes sent, excluding HTTP headers <br />
&nbsp;&nbsp;&nbsp; * %h - Remote host name (or IP address if resolveHosts is false) <br />
&nbsp;&nbsp;&nbsp; * %H - Request protocol <br />
&nbsp;&nbsp;&nbsp; * %l - Remote logical username from identd (always returns '-') <br />
&nbsp;&nbsp;&nbsp; * %m - Request method (GET, POST, etc.) <br />
&nbsp;&nbsp;&nbsp; * %p - Local port on which this request was received <br />
&nbsp;&nbsp;&nbsp; * %q - Query string (prepended with a '?' if it exists) <br />
&nbsp;&nbsp;&nbsp; * %r - First line of the request (method and request URI) <br />
&nbsp;&nbsp;&nbsp; * %s - HTTP status code of the response <br />
&nbsp;&nbsp;&nbsp; * %S - User session ID <br />
&nbsp;&nbsp;&nbsp; * %t - Date and time, in Common Log Format <br />
&nbsp;&nbsp;&nbsp; * %u - Remote user that was authenticated (if any), else '-' <br />
&nbsp;&nbsp;&nbsp; * %U - Requested URL path <br />
&nbsp;&nbsp;&nbsp; * %v - Local server name <br />
&nbsp;&nbsp;&nbsp; * %D - Time taken to process the request, in millis <br />
&nbsp;&nbsp;&nbsp; * %T - Time taken to process the request, in seconds <br />
<br />
There is also support to write information from the cookie, incoming header, the Session or something else in the ServletRequest. It is modeled after the apache syntax: <br />
<br />
&nbsp;&nbsp;&nbsp; * %{xxx}i for incoming headers <br />
&nbsp;&nbsp;&nbsp; * %{xxx}c for a specific cookie <br />
&nbsp;&nbsp;&nbsp; * %{xxx}r xxx is an attribute in the ServletRequest <br />
&nbsp;&nbsp;&nbsp; * %{xxx}s xxx is an attribute in the HttpSession <br />
<br />
<br />
现在我们回头再来看一下下面这个配置 %h %l %u %t "%r" %s %b %T 生产的访问日志数据，我们可以做哪些事？ <br />
先看一下，我们能得到的数据有: <br />
&nbsp;&nbsp;&nbsp; * %h 访问的用户IP地址 <br />
&nbsp;&nbsp;&nbsp; * %l 访问逻辑用户名，通常返回'-' <br />
&nbsp;&nbsp;&nbsp; * %u 访问验证用户名，通常返回'-' <br />
&nbsp;&nbsp;&nbsp; * %t 访问日时 <br />
&nbsp;&nbsp;&nbsp; * %r 访问的方式(post或者是get)，访问的资源和使用的http协议版本 <br />
&nbsp;&nbsp;&nbsp; * %s 访问返回的http状态 <br />
&nbsp;&nbsp;&nbsp; * %b 访问资源返回的流量 <br />
&nbsp;&nbsp;&nbsp; * %T 访问所使用的时间 <br />
&nbsp;&nbsp;&nbsp; <br />
有了这些数据，我们可以根据时间段做以下的分析处理(图片使用jfreechart工具动态生成)： <br />
&nbsp; * 独立IP数统计 <br />
&nbsp; * 访问请求数统计 <br />
&nbsp; * 访问资料文件数统计 <br />
&nbsp; * 访问流量统计 <br />
&nbsp; * 访问处理响应时间统计 <br />
&nbsp; * 统计所有404错误页面 <br />
&nbsp; * 统计所有500错误的页面 <br />
&nbsp; * 统计访问最频繁页面 <br />
&nbsp; * 统计访问处理时间最久页面 <br />
&nbsp; * 统计并发访问频率最高的页面 <br />
<br />
文章出处：http://www.blogjava.net/xmatthew/archive/2008/04/14/192450.html </div><img src ="http://www.blogjava.net/rain1102/aggbug/267079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-04-23 10:01 <a href="http://www.blogjava.net/rain1102/archive/2009/04/23/267079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat启动时出现IOException while loading persisted sessions: java.io.EOFException异常</title><link>http://www.blogjava.net/rain1102/archive/2009/02/28/257122.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sat, 28 Feb 2009 02:05:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/02/28/257122.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/257122.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/02/28/257122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/257122.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/257122.html</trackback:ping><description><![CDATA[<p>Tomcat启动时出现如下异常问题：</p>
<p>严重: <span class="hilite1">IOException</span> <span class="hilite2">while</span> <span class="hilite3">loading</span> <span class="hilite4">persisted</span> sessions: <span class="hilite6"><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a></span>.<span class="hilite7">io</span>.<span class="hilite8">EOFException</span><br />
Cause by: Exception <span class="hilite3">loading</span> sessions from persistent storage</p>
<br />
原因分析：<br />
<span class="hilite8">EOFException</span>表示输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。这是由于tomcat上次非正常关闭时有一些活动session被持久化（表现为一些临时文件），在重启时，tomcat尝试去恢复这些session的持久化数据但又读取失败造成的。此异常不影响系统的使用。<br />
<br />
解决方法：<br />
删除掉&lt;TOMCAT_HOME&gt;\work\Catalina\localhost\webstart\下的SESSIONS.ser文件<img src ="http://www.blogjava.net/rain1102/aggbug/257122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-02-28 10:05 <a href="http://www.blogjava.net/rain1102/archive/2009/02/28/257122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JExcelAPI与Apache POI两者对比(转)</title><link>http://www.blogjava.net/rain1102/archive/2008/07/04/212534.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 04 Jul 2008 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/07/04/212534.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/212534.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/07/04/212534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/212534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/212534.html</trackback:ping><description><![CDATA[<p>一，JExcelAPI与Apache POI两者对比<br />
&nbsp; 1、JExcelAPI不适合商业应用，它都是会莫名其妙的读不出来数据。<br />
&nbsp; 2、Apache POI是一纯Java的实现，不仅能读微软的Excel还可以读Open Office的，新版HSSF3.0还添加了读取Power Point的功能。总之是一种非常稳定，强大的实现。推荐使用。</p>
<p>二<br />
Jexcelapi的使用参考：<a href="http://blog.csdn.net/yfhdsz/archive/2006/10/30/1356670.aspx">http://blog.csdn.net/yfhdsz/archive/2006/10/30/1356670.aspx</a></p>
<p>apache POI 参考：<a href="http://blog.csdn.net/yuansicau/archive/2006/08/31/1150046.aspx">http://blog.csdn.net/yuansicau/archive/2006/08/31/1150046.aspx</a><br />
关键是要理解<br />
&nbsp;java读取excel文件的顺序是：<br />
Excel文件-&gt;工作表-&gt;行-&gt;单元格 对应到POI中，为：workbook-&gt;sheet-&gt;row-&gt;cell<br />
注意：<br />
&nbsp;注意：&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.sheet， 以0开始，以workbook.getNumberOfSheets()-1结束 <br />
&nbsp;&nbsp; 2.row， 以0开始(getFirstRowNum)，以getLastRowNum结束 <br />
&nbsp;&nbsp; 3.cell， 以0开始(getFirstCellNum)，以getLastCellNum结束, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结束的数目不知什么原因与显示的长度不同，可能会偏长<br />
&nbsp;<br />
&nbsp;如何插图片到Excel中<br />
&nbsp;public static void createPicture() {<br />
&nbsp;&nbsp;FileOutputStream fileOut = null;<br />
&nbsp;&nbsp;BufferedImage bufferImg = null;<br />
&nbsp;&nbsp;BufferedImage bufferImg1 = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();<br />
&nbsp;&nbsp;&nbsp;ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();<br />
&nbsp;&nbsp;&nbsp;bufferImg = ImageIO.read(new File("C:/Documents and Settings/All Users/Documents/My Pictures/示例图片/Sunset.jpg"));<br />
&nbsp;&nbsp;&nbsp;bufferImg1 = ImageIO.read(new File("C:/Documents and Settings/All Users/Documents/My Pictures/示例图片/Water lilies.jpg"));<br />
&nbsp;&nbsp;&nbsp;ImageIO.write(bufferImg, "jpeg", byteArrayOut);<br />
&nbsp;&nbsp;&nbsp;ImageIO.write(bufferImg1, "jpeg", byteArrayOut1);</p>
<p>&nbsp;&nbsp;&nbsp;HSSFWorkbook wb = new HSSFWorkbook();<br />
&nbsp;&nbsp;&nbsp;HSSFSheet sheet1 = wb.createSheet("new sheet");<br />
&nbsp;&nbsp;&nbsp;// HSSFRow row = sheet1.createRow(2);<br />
&nbsp;&nbsp;&nbsp;HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();<br />
&nbsp;&nbsp;&nbsp;HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(short) 0, 0, (short) 10, 10);<br />
&nbsp;&nbsp;&nbsp;HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 512, 255,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(short) 0, 15, (short) 10, 20);<br />
&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp;&nbsp; * public HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short<br />
&nbsp;&nbsp;&nbsp; * col1, int row1, short col2, int row2)<br />
&nbsp;&nbsp;&nbsp; * Creates a new client anchor<br />
&nbsp;&nbsp;&nbsp; * and sets the top-left and bottom-right coordinates of the anchor.<br />
&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp; * Parameters: dx1 - the x coordinate within the first cell. <br />
&nbsp;&nbsp;&nbsp; * dy1 - the y coordinate within the first cell. <br />
&nbsp;&nbsp;&nbsp; * dx2 - the x coordinate within the second cell. <br />
&nbsp;&nbsp;&nbsp; * dy2 - the y coordinate within the second cell. <br />
&nbsp;&nbsp;&nbsp; * col1 - the column (0 based) of the first cell. <br />
&nbsp;&nbsp;&nbsp; * row1 - the row (0 based) of the first cell.<br />
&nbsp;&nbsp;&nbsp; * col2 - the column (0 based) of the second cell. <br />
&nbsp;&nbsp;&nbsp; * row2 - the row (0 based) of the second cell.<br />
&nbsp;&nbsp;&nbsp; * 注意:(col1,row1)表示图片左上角所在单元格<br />
&nbsp;&nbsp;&nbsp; * (col2,row2)表示图片右下角所在单元格,<br />
&nbsp;&nbsp;&nbsp; * 先是列,再行,顺序不要反了.<br />
&nbsp;&nbsp;&nbsp; * (dx1,dy1)表示图片左上角在单元格中的坐标.<br />
&nbsp;&nbsp;&nbsp; * ((dx2,dy2)表示图片右下角在单元格中的坐标.<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;patriarch.createPicture(anchor, wb.addPicture(byteArrayOut<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));<br />
&nbsp;&nbsp;&nbsp;patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));</p>
<p>&nbsp;&nbsp;&nbsp;fileOut = new FileOutputStream("e:/study/workbook.xls");<br />
&nbsp;&nbsp;&nbsp;wb.write(fileOut);<br />
&nbsp;&nbsp;&nbsp;fileOut.close();</p>
<p>&nbsp;&nbsp;} catch (IOException io) {<br />
&nbsp;&nbsp;&nbsp;io.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;System.out.println("io erorr :&nbsp; " + io.getMessage());<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;if (fileOut != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileOut.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
</p><img src ="http://www.blogjava.net/rain1102/aggbug/212534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-07-04 11:38 <a href="http://www.blogjava.net/rain1102/archive/2008/07/04/212534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Lang介绍</title><link>http://www.blogjava.net/rain1102/archive/2008/06/21/209642.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sat, 21 Jun 2008 00:25:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/06/21/209642.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/209642.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/06/21/209642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/209642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/209642.html</trackback:ping><description><![CDATA[<a href="http://jakarta.apache.org/commons/" target="_blank">Jakarta Commons</a> 项目旨在实现可重用的 <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> 组件。此项目包含数十个组件，用以简化 <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> 的开发，每个组件负责满足一个特定需求。有大量的组件可用，且不仅限于在特定类型的Java应用程序中使用。<br />
<a href="http://jakarta.apache.org/commons/lang/" target="_blank">Lang</a>组件是Jakarta Commons中较为流行的组件之一。Lang是要呈现在J2SE本身中的一组类。<br />
Sun公司Javadoc指出, J2SE中的java.lang包"提供了Java语言程序设计所必需的基本类".类似地, Jakarta Commons Lang提供了对Java语言基本设计的增强.<br />
自动生成toString()内容<br />
自动生成hashCode()和equals()<br />
自动实现compateTo()<br />
输出数组内容<br />
克隆和反转数组<br />
对象数组和基本类型数组的相互转换<br />
在数组中搜索特定项<br />
由多维数组生成Map<br />
格式化日期<br />
舍入Date对象<br />
截取Date对象<br />
创建枚举量<br />
生成唯一的数字标识符和字符数字混合标识符<br />
验证方法参数<br />
度量时间<br />
......<img src ="http://www.blogjava.net/rain1102/aggbug/209642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-06-21 08:25 <a href="http://www.blogjava.net/rain1102/archive/2008/06/21/209642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons-Validator</title><link>http://www.blogjava.net/rain1102/archive/2008/05/07/198893.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 07 May 2008 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/05/07/198893.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/198893.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/05/07/198893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/198893.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/198893.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Commons-Validator（一）&nbsp;&nbsp;&nbsp;&nbsp;Commons-Validator包用来把验证规则程序提取出来，以供重复使用。这个包可以使用在Struts中，也可以独立的应用在任何其它的应用中。用户可以通过Java类的方式自定义验证方法，也可以在配置文件中通过正则表达式配置验证方法。它不但支持服务器端的验证，客户端的验证也支持，具体需要使用tag把相...&nbsp;&nbsp;<a href='http://www.blogjava.net/rain1102/archive/2008/05/07/198893.html'>阅读全文</a><img src ="http://www.blogjava.net/rain1102/aggbug/198893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-05-07 10:50 <a href="http://www.blogjava.net/rain1102/archive/2008/05/07/198893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache Commons工具集简介[转]</title><link>http://www.blogjava.net/rain1102/archive/2008/05/04/198009.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 04 May 2008 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/05/04/198009.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/198009.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/05/04/198009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/198009.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/198009.html</trackback:ping><description><![CDATA[Apache&nbsp;Commons包含了很多开源的工具，用于解决平时编程经常会遇到的问题，减少重复劳动。我选了一些比较常用的项目做简单介绍。文中用了很多网上现成的东西，我只是做了一个汇总整理。<br />
<br />
<strong>Commons&nbsp;BeanUtils</strong><br />
<a href="http://jakarta.apache.org/commons/beanutils/index.html">http://jakarta.apache.org/commons/beanutils/index.html</a><br />
说明：针对Bean的一个工具集。由于Bean往往是有一堆get和set组成，所以BeanUtils也是在此基础上进行一些包装。<br />
使用示例：功能有很多，网站上有详细介绍。一个比较常用的功能是Bean&nbsp;Copy，也就是copy&nbsp;bean的属性。如果做分层架构开发的话就会用到，比如从PO（Persistent&nbsp;Object）拷贝数据到VO（Value&nbsp;Object）。<br />
传统方法如下：<br />
//得到TeacherForm<br />
&nbsp;TeacherForm&nbsp;teacherForm=(TeacherForm)form;<br />
&nbsp;//构造Teacher对象<br />
&nbsp;Teacher&nbsp;teacher=new&nbsp;Teacher();<br />
&nbsp;//赋值<br />
&nbsp;teacher.setName(teacherForm.getName());<br />
&nbsp;teacher.setAge(teacherForm.getAge());<br />
&nbsp;teacher.setGender(teacherForm.getGender());<br />
&nbsp;teacher.setMajor(teacherForm.getMajor());<br />
&nbsp;teacher.setDepartment(teacherForm.getDepartment());<br />
&nbsp;&nbsp;<br />
&nbsp;//持久化Teacher对象到数据库<br />
&nbsp;HibernateDAO=&nbsp;;<br />
&nbsp;HibernateDAO.save(teacher);<br />
<br />
使用BeanUtils后，代码就大大改观了，如下所示：<br />
//得到TeacherForm<br />
&nbsp;TeacherForm&nbsp;teacherForm=(TeacherForm)form;<br />
&nbsp;//构造Teacher对象<br />
&nbsp;Teacher&nbsp;teacher=new&nbsp;Teacher();<br />
&nbsp;//赋值<br />
&nbsp;BeanUtils.copyProperties(teacher,teacherForm);<br />
&nbsp;//持久化Teacher对象到数据库<br />
&nbsp;HibernateDAO=&nbsp;;<br />
&nbsp;HibernateDAO.save(teacher);<br />
<br />
<strong>Commons&nbsp;CLI</strong><br />
<a href="http://jakarta.apache.org/commons/cli/index.html">http://jakarta.apache.org/commons/cli/index.html</a><br />
说明：这是一个处理命令的工具。比如main方法输入的string[]需要解析。你可以预先定义好参数的规则，然后就可以调用CLI来解析。<br />
使用示例：<br />
//&nbsp;create&nbsp;Options&nbsp;object<br />
Options&nbsp;options&nbsp;=&nbsp;new&nbsp;Options();<br />
//&nbsp;add&nbsp;t&nbsp;option,&nbsp;option&nbsp;is&nbsp;the&nbsp;command&nbsp;parameter,&nbsp;false&nbsp;indicates&nbsp;that&nbsp;<br />
//&nbsp;this&nbsp;parameter&nbsp;is&nbsp;not&nbsp;required.<br />
options.addOption(&#8220;t&#8221;,&nbsp;false,&nbsp;&#8220;display&nbsp;current&nbsp;time&#8221;);<br />
options.addOption("c",&nbsp;true,&nbsp;"country&nbsp;code");<br />
CommandLineParser&nbsp;parser&nbsp;=&nbsp;new&nbsp;PosixParser();<br />
CommandLine&nbsp;cmd&nbsp;=&nbsp;parser.parse(&nbsp;options,&nbsp;args);<br />
if(cmd.hasOption("t"))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;print&nbsp;the&nbsp;date&nbsp;and&nbsp;time<br />
}<br />
else&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;print&nbsp;the&nbsp;date<br />
}<br />
//&nbsp;get&nbsp;c&nbsp;option&nbsp;value<br />
String&nbsp;countryCode&nbsp;=&nbsp;cmd.getOptionValue("c");<br />
<br />
if(countryCode&nbsp;==&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;print&nbsp;default&nbsp;date<br />
}<br />
else&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;print&nbsp;date&nbsp;for&nbsp;country&nbsp;specified&nbsp;by&nbsp;countryCode<br />
}<br />
<br />
<strong>Commons&nbsp;Codec</strong><br />
<a href="http://jakarta.apache.org/commons/codec/index.html">http://jakarta.apache.org/commons/codec/index.html</a><br />
说明：这个工具是用来编码和解码的，包括Base64，URL，Soundx等等。用这个工具的人应该很清楚这些，我就不多介绍了。<br />
<br />
<strong>Commons&nbsp;Collections</strong><br />
<a href="http://jakarta.apache.org/commons/collections/">http://jakarta.apache.org/commons/collections/</a><br />
说明：你可以把这个工具看成是java.util的扩展。<br />
使用示例：举一个简单的例子<br />
OrderedMap&nbsp;map&nbsp;=&nbsp;new&nbsp;LinkedMap();<br />
map.put("FIVE",&nbsp;"5");<br />
map.put("SIX",&nbsp;"6");<br />
map.put("SEVEN",&nbsp;"7");<br />
map.firstKey();&nbsp;&nbsp;//&nbsp;returns&nbsp;"FIVE"<br />
map.nextKey("FIVE");&nbsp;&nbsp;//&nbsp;returns&nbsp;"SIX"<br />
map.nextKey("SIX");&nbsp;&nbsp;//&nbsp;returns&nbsp;"SEVEN"<br />
<br />
<strong>Commons&nbsp;Configuration<br />
</strong><a href="http://jakarta.apache.org/commons/configuration/">http://jakarta.apache.org/commons/configuration/</a><br />
说明：这个工具是用来帮助处理配置文件的，支持很多种存储方式<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;files<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;XML&nbsp;documents<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;Property&nbsp;list&nbsp;files&nbsp;(.plist)<br />
4.&nbsp;&nbsp;&nbsp;&nbsp;JNDI<br />
5.&nbsp;&nbsp;&nbsp;&nbsp;JDBC&nbsp;Datasource<br />
6.&nbsp;&nbsp;&nbsp;&nbsp;System&nbsp;properties<br />
7.&nbsp;&nbsp;&nbsp;&nbsp;Applet&nbsp;parameters<br />
8.&nbsp;&nbsp;&nbsp;&nbsp;Servlet&nbsp;parameters<br />
使用示例：举一个Properties的简单例子<br />
#&nbsp;usergui.properties,&nbsp;definining&nbsp;the&nbsp;GUI,<br />
colors.background&nbsp;=&nbsp;#FFFFFF<br />
colors.foreground&nbsp;=&nbsp;#000080<br />
<br />
window.width&nbsp;=&nbsp;500<br />
window.height&nbsp;=&nbsp;300<br />
<br />
PropertiesConfiguration&nbsp;config&nbsp;=&nbsp;new&nbsp;PropertiesConfiguration("usergui.properties");<br />
config.setProperty("colors.background",&nbsp;"#000000);<br />
config.save();<br />
config.save("usergui.backup.properties);//save&nbsp;a&nbsp;copy<br />
Integer&nbsp;integer&nbsp;=&nbsp;config.getInteger("window.width");<br />
<br />
<strong>Commons&nbsp;DBCP<br />
</strong><a href="http://jakarta.apache.org/commons/dbcp/">http://jakarta.apache.org/commons/dbcp/</a><br />
说明：Database&nbsp;Connection&nbsp;pool,&nbsp;Tomcat就是用的这个，不用我多说了吧，要用的自己去网站上看说明。<br />
<br />
<strong>Commons&nbsp;DbUtils</strong><br />
<a href="http://jakarta.apache.org/commons/dbutils/">http://jakarta.apache.org/commons/dbutils/</a><br />
说明：我以前在写数据库程序的时候，往往把数据库操作单独做一个包。DbUtils就是这样一个工具，以后开发不用再重复这样的工作了。值得一体的是，这个工具并不是现在流行的OR-Mapping工具（比如Hibernate），只是简化数据库操作，比如<br />
QueryRunner&nbsp;run&nbsp;=&nbsp;new&nbsp;QueryRunner(dataSource);<br />
//&nbsp;Execute&nbsp;the&nbsp;query&nbsp;and&nbsp;get&nbsp;the&nbsp;results&nbsp;back&nbsp;from&nbsp;the&nbsp;handler<br />
Object[]&nbsp;result&nbsp;=&nbsp;(Object[])&nbsp;run.query(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"SELECT&nbsp;*&nbsp;FROM&nbsp;Person&nbsp;WHERE&nbsp;name=?",&nbsp;"John&nbsp;Doe");<br />
<br />
<strong>Commons&nbsp;FileUpload</strong><br />
<a href="http://jakarta.apache.org/commons/fileupload/">http://jakarta.apache.org/commons/fileupload/</a><br />
说明：jsp的上传文件功能怎么做呢？<br />
使用示例：<br />
//&nbsp;Create&nbsp;a&nbsp;factory&nbsp;for&nbsp;disk-based&nbsp;file&nbsp;items<br />
FileItemFactory&nbsp;factory&nbsp;=&nbsp;new&nbsp;DiskFileItemFactory();<br />
<br />
//&nbsp;Create&nbsp;a&nbsp;new&nbsp;file&nbsp;upload&nbsp;handler<br />
ServletFileUpload&nbsp;upload&nbsp;=&nbsp;new&nbsp;ServletFileUpload(factory);<br />
<br />
//&nbsp;Parse&nbsp;the&nbsp;request<br />
List&nbsp;/*&nbsp;FileItem&nbsp;*/&nbsp;items&nbsp;=&nbsp;upload.parseRequest(request);<br />
//&nbsp;Process&nbsp;the&nbsp;uploaded&nbsp;items<br />
Iterator&nbsp;iter&nbsp;=&nbsp;items.iterator();<br />
while&nbsp;(iter.hasNext())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;FileItem&nbsp;item&nbsp;=&nbsp;(FileItem)&nbsp;iter.next();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(item.isFormField())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processFormField(item);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processUploadedFile(item);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
<strong>Commons&nbsp;HttpClient</strong><br />
<a href="http://jakarta.apache.org/commons/httpclient/">http://jakarta.apache.org/commons/httpclient/</a><br />
说明：这个工具可以方便通过编程的方式去访问网站。<br />
使用示例：最简单的Get操作<br />
GetMethod&nbsp;get&nbsp;=&nbsp;new&nbsp;GetMethod("http://jakarta.apache.org");<br />
//&nbsp;execute&nbsp;method&nbsp;and&nbsp;handle&nbsp;any&nbsp;error&nbsp;responses.<br />
&nbsp;&nbsp;...<br />
InputStream&nbsp;in&nbsp;=&nbsp;get.getResponseBodyAsStream();<br />
//&nbsp;Process&nbsp;the&nbsp;data&nbsp;from&nbsp;the&nbsp;input&nbsp;stream.<br />
&nbsp;get.releaseConnection();<br />
<br />
<strong>Commons&nbsp;IO</strong><br />
http://jakarta.apache.org/commons/io/<br />
说明：可以看成是java.io的扩展，我觉得用起来非常方便。<br />
使用示例：<br />
1．读取Stream<br />
标准代码：<br />
InputStream&nbsp;in&nbsp;=&nbsp;new&nbsp;URL(&nbsp;"http://jakarta.apache.org"&nbsp;).openStream();<br />
&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;inR&nbsp;=&nbsp;new&nbsp;InputStreamReader(&nbsp;in&nbsp;);<br />
&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;buf&nbsp;=&nbsp;new&nbsp;BufferedReader(&nbsp;inR&nbsp;);<br />
&nbsp;&nbsp;&nbsp;String&nbsp;line;<br />
&nbsp;&nbsp;&nbsp;while&nbsp;(&nbsp;(&nbsp;line&nbsp;=&nbsp;buf.readLine()&nbsp;)&nbsp;!=&nbsp;null&nbsp;)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;line&nbsp;);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;}&nbsp;finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;in.close();<br />
&nbsp;}<br />
使用IOUtils<br />
InputStream&nbsp;in&nbsp;=&nbsp;new&nbsp;URL(&nbsp;"http://jakarta.apache.org"&nbsp;).openStream();<br />
&nbsp;try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;IOUtils.toString(&nbsp;in&nbsp;)&nbsp;);<br />
&nbsp;}&nbsp;finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;IOUtils.closeQuietly(in);<br />
&nbsp;}<br />
<br />
2．读取文件<br />
File&nbsp;file&nbsp;=&nbsp;new&nbsp;File("/commons/io/project.properties");<br />
List&nbsp;lines&nbsp;=&nbsp;FileUtils.readLines(file,&nbsp;"UTF-8");<br />
<br />
3．察看剩余空间<br />
long&nbsp;freeSpace&nbsp;=&nbsp;FileSystemUtils.freeSpace("C:/");<br />
<br />
<br />
<strong>Commons&nbsp;JXPath</strong><br />
http://jakarta.apache.org/commons/jxpath/<br />
说明：Xpath你知道吧，那么JXpath就是基于Java对象的Xpath，也就是用Xpath对Java对象进行查询。这个东西还是很有想像力的。<br />
使用示例：<br />
Address&nbsp;address&nbsp;=&nbsp;(Address)JXPathContext.newContext(vendor).<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getValue("locations[address/zipCode='90210']/address");<br />
上述代码等同于<br />
Address&nbsp;address&nbsp;=&nbsp;null;<br />
Collection&nbsp;locations&nbsp;=&nbsp;vendor.getLocations();<br />
Iterator&nbsp;it&nbsp;=&nbsp;locations.iterator();<br />
while&nbsp;(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;Location&nbsp;location&nbsp;=&nbsp;(Location)it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;zipCode&nbsp;=&nbsp;location.getAddress().getZipCode();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(zipCode.equals("90210")){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;=&nbsp;location.getAddress();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
<br />
<strong>Commons&nbsp;Lang</strong><br />
http://jakarta.apache.org/commons/lang/<br />
说明：这个工具包可以看成是对java.lang的扩展。提供了诸如StringUtils,&nbsp;StringEscapeUtils,&nbsp;RandomStringUtils,&nbsp;Tokenizer,&nbsp;WordUtils等工具类。<br />
<br />
<strong>Commons&nbsp;Logging<br />
</strong>http://jakarta.apache.org/commons/logging/<br />
说明：你知道Log4j吗？<br />
<br />
<strong>Commons&nbsp;Math</strong><br />
http://jakarta.apache.org/commons/math/<br />
说明：看名字你就应该知道这个包是用来干嘛的了吧。这个包提供的功能有些和Commons&nbsp;Lang重复了，但是这个包更专注于做数学工具，功能更强大。<br />
<br />
<strong>Commons&nbsp;Net</strong><br />
http://jakarta.apache.org/commons/net/<br />
说明：这个包还是很实用的，封装了很多网络协议。<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;FTP<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;NNTP<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;SMTP<br />
4.&nbsp;&nbsp;&nbsp;&nbsp;POP3<br />
5.&nbsp;&nbsp;&nbsp;&nbsp;Telnet<br />
6.&nbsp;&nbsp;&nbsp;&nbsp;TFTP<br />
7.&nbsp;&nbsp;&nbsp;&nbsp;Finger<br />
8.&nbsp;&nbsp;&nbsp;&nbsp;Whois<br />
9.&nbsp;&nbsp;&nbsp;&nbsp;rexec/rcmd/rlogin<br />
10.&nbsp;&nbsp;&nbsp;&nbsp;Time&nbsp;(rdate)&nbsp;and&nbsp;Daytime<br />
11.&nbsp;&nbsp;&nbsp;&nbsp;Echo<br />
12.&nbsp;&nbsp;&nbsp;&nbsp;Discard<br />
13.&nbsp;&nbsp;&nbsp;&nbsp;NTP/SNTP<br />
使用示例：<br />
TelnetClient&nbsp;telnet&nbsp;=&nbsp;new&nbsp;TelnetClient();<br />
telnet.connect(&nbsp;"192.168.1.99",&nbsp;23&nbsp;);<br />
InputStream&nbsp;in&nbsp;=&nbsp;telnet.getInputStream();<br />
PrintStream&nbsp;out&nbsp;=&nbsp;new&nbsp;PrintStream(&nbsp;telnet.getOutputStream()&nbsp;);<br />
...<br />
telnet.close();<br />
<br />
<strong>Commons&nbsp;Validator</strong><br />
http://jakarta.apache.org/commons/validator/<br />
说明：用来帮助进行验证的工具。比如验证Email字符串，日期字符串等是否合法。<br />
使用示例：<br />
//&nbsp;Get&nbsp;the&nbsp;Date&nbsp;validator<br />
DateValidator&nbsp;validator&nbsp;=&nbsp;DateValidator.getInstance();<br />
//&nbsp;Validate/Convert&nbsp;the&nbsp;date<br />
Date&nbsp;fooDate&nbsp;=&nbsp;validator.validate(fooString,&nbsp;"dd/MM/yyyy");<br />
if&nbsp;(fooDate&nbsp;==&nbsp;null)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;error...not&nbsp;a&nbsp;valid&nbsp;date<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
}<br />
<br />
<strong>Commons&nbsp;Virtual&nbsp;File&nbsp;System<br />
</strong>http://jakarta.apache.org/commons/vfs/<br />
说明：提供对各种资源的访问接口。支持的资源类型包括<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;CIFS&nbsp;<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;FTP&nbsp;<br />
3.&nbsp;&nbsp;&nbsp;&nbsp;Local&nbsp;Files&nbsp;<br />
4.&nbsp;&nbsp;&nbsp;&nbsp;HTTP&nbsp;and&nbsp;HTTPS&nbsp;<br />
5.&nbsp;&nbsp;&nbsp;&nbsp;SFTP&nbsp;<br />
6.&nbsp;&nbsp;&nbsp;&nbsp;Temporary&nbsp;Files&nbsp;<br />
7.&nbsp;&nbsp;&nbsp;&nbsp;WebDAV&nbsp;<br />
8.&nbsp;&nbsp;&nbsp;&nbsp;Zip,&nbsp;Jar&nbsp;and&nbsp;Tar&nbsp;(uncompressed,&nbsp;tgz&nbsp;or&nbsp;tbz2)&nbsp;<br />
9.&nbsp;&nbsp;&nbsp;&nbsp;gzip&nbsp;and&nbsp;bzip2&nbsp;<br />
10.&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;<br />
11.&nbsp;&nbsp;&nbsp;&nbsp;ram&nbsp;<br />
这个包的功能很强大，极大的简化了程序对资源的访问。<br />
使用示例：<br />
从jar中读取文件<br />
//&nbsp;Locate&nbsp;the&nbsp;Jar&nbsp;file<br />
FileSystemManager&nbsp;fsManager&nbsp;=&nbsp;VFS.getManager();<br />
FileObject&nbsp;jarFile&nbsp;=&nbsp;fsManager.resolveFile(&nbsp;"jar:lib/aJarFile.jar"&nbsp;);<br />
<br />
//&nbsp;List&nbsp;the&nbsp;children&nbsp;of&nbsp;the&nbsp;Jar&nbsp;file<br />
FileObject[]&nbsp;children&nbsp;=&nbsp;jarFile.getChildren();<br />
System.out.println(&nbsp;"Children&nbsp;of&nbsp;"&nbsp;+&nbsp;jarFile.getName().getURI()&nbsp;);<br />
for&nbsp;(&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;children.length;&nbsp;i++&nbsp;)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;children[&nbsp;i&nbsp;].getName().getBaseName()&nbsp;);<br />
}<br />
从smb读取文件<br />
StaticUserAuthenticator&nbsp;auth&nbsp;=&nbsp;new&nbsp;StaticUserAuthenticator("username",&nbsp;"password",&nbsp;null);<br />
FileSystemOptions&nbsp;opts&nbsp;=&nbsp;new&nbsp;FileSystemOptions();<br />
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts,&nbsp;auth);&nbsp;<br />
FileObject&nbsp;fo&nbsp;=&nbsp;VFS.getManager().resolveFile("smb://host/anyshare/dir",&nbsp;opts);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
有人说Apache就像是丐帮，里面的项目多而杂。的确如此，Apache的项目水平参差不齐，而且不同的项目之间也常常会有功能重叠，甚至有撞车，比如Ant和Maven。不过Apache的优秀项目还是有很多的，比如Apache&nbsp;Http&nbsp;Server，Tomcat，Ant,&nbsp;Geronimo等等。Apache&nbsp;Commons是工具包，为其他项目提供支持，很多Commons中的项目就是从其他项目中抽取出来的。希望我的介绍能对你有所帮助，有些我提到的Commons中的项目我也没有用过，只是现学现卖，难免错误和疏漏，希望谅解。<br /><img src ="http://www.blogjava.net/rain1102/aggbug/198009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-05-04 10:27 <a href="http://www.blogjava.net/rain1102/archive/2008/05/04/198009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 下配置一个ip绑定多个域名</title><link>http://www.blogjava.net/rain1102/archive/2008/04/22/194908.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 22 Apr 2008 15:34:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/04/22/194908.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/194908.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/04/22/194908.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/194908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/194908.html</trackback:ping><description><![CDATA[tomcat下配置 一ip对多域名的方法详细如下,按下面配置一定能成功,经过测试了.
<p>&lt;Host name="localhost" debug="0" appBase="D:\\Tomcat 5.0\\webapps"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpackWARs="true" autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;localhost.com&lt;/Alias&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="logs"&nbsp; prefix="localhost_log." suffix=".txt"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timestamp="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="D:\\Tomcat 5.0\\webapps\\gg"&nbsp; reloadable="true" caseSensitive="false" debug="0"&gt;&lt;/Context&gt;<br />
&lt;/Host&gt;</p>
<p>&lt;Host name="one.localhost" debug="0" appBase="D:\\Tomcat 5.0\\webapps"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpackWARs="true" autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;one.localhost.com&lt;/Alias&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="logs"&nbsp; prefix="localhost_log." suffix=".txt"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timestamp="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="D:\\Tomcat 5.0\\webapps\\kk\\a"&nbsp; reloadable="true" caseSensitive="false" debug="0"&gt;&lt;/Context&gt;<br />
&lt;/Host&gt;</p>
<p>&lt;Host name="two.localhost" debug="0" appBase="D:\\Tomcat 5.0\\webapps"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unpackWARs="true" autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlValidation="false" xmlNamespaceAware="false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Alias&gt;two.localhost.com&lt;/Alias&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="logs"&nbsp; prefix="localhost_log." suffix=".txt"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timestamp="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Context path="" docBase="D:\\Tomcat 5.0\\webapps\\kk\\b"&nbsp; reloadable="true" caseSensitive="false" debug="0"&gt;&lt;/Context&gt;<br />
&lt;/Host&gt;</p>
<p>因无域名解析服务器,所以在hosts上配,来模拟dns解析.</p>
<p>10.1.1.241&nbsp; localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指向gg文件夹<br />
10.1.1.241&nbsp; localhost.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指向gg文件夹<br />
10.1.1.241&nbsp; one.localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指向a文件夹<br />
10.1.1.241&nbsp; one.localhost.com&nbsp;&nbsp;&nbsp;指向a文件夹<br />
10.1.1.241&nbsp; two.localhost&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指向b文件夹<br />
10.1.1.241&nbsp; two.localhost.com&nbsp;&nbsp; 指向b文件夹</p>
<p>经过多方面尝试,终于在tomcat下配置成功了.</p><img src ="http://www.blogjava.net/rain1102/aggbug/194908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-22 23:34 <a href="http://www.blogjava.net/rain1102/archive/2008/04/22/194908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.NoSuchFieldError: TRACE :Log4j</title><link>http://www.blogjava.net/rain1102/archive/2008/04/17/193843.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 17 Apr 2008 11:05:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/04/17/193843.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/193843.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/04/17/193843.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/193843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/193843.html</trackback:ping><description><![CDATA[<span class="postbody">Hi I am facing a problem with accessing the JBOSS. <br />
<br />
according to the exception it seems to me --- log related exception. <br />
<br />
when I call the following code <br />
<br />
</span>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Code:</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <pre>Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, initCtxFac);
            env.put(Context.PROVIDER_URL, providerUrl);
            try {
            ctx = new InitialContext(env);
            conFactory = (QueueConnectionFactory) ctx.lookup
            (queueConFacLookupName);
            -----
            -----	</pre>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
exception details <br />
<br />
</span>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Code:</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <pre>Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchFieldError: TRACE
            at org.jboss.logging.Log4jLoggerPlugin.isTraceEnabled(Log4jLoggerPlugin.java:85)
            at org.jboss.logging.Logger.isTraceEnabled(Logger.java:122)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:622)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:589)
            at javax.naming.InitialContext.lookup(InitialContext.java:351)
            at com.cognizant.util.ServiceHelper.initQueueService(ServiceHelper.java:153)
            at com.cognizant.main.StartUp.&lt;init&gt;(StartUp.java:28)
            at com.cognizant.main.StartUp.main(StartUp.java:46)	</pre>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
<br />
I use jboss-4.2.1.GA version with JDK jdk141_05 version. <br />
<br />
I added jboss.jar,jbossall-client.jar,jboss-client.jar,jboss-system.jar,log4j-1.2.9.jar,log4j-boot.jar in my project library. <br />
<br />
Strange thing is that I run this same code with all other 3/4 windows XP system. OK <br />
<br />
But in another system with the same configuration I got the above mentioned exception. <br />
<br />
<br />
Can any body help me? <br />
<br />
-----------------------------------------------------------------------------------------<br />
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Quote:</strong></span></td>
        </tr>
        <tr>
            <td class="quote">Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchFieldError: TRACE</td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
You will require log4j jar of version 1.2.12 or higher in your classpath. Also, make sure that you do <span style="font-style: italic">not</span> maintain more than one version of jar file of log4j (or for that matter any other utility) in the classpath. So remove the log4j-1.2.9.jar and log4j-boot.jar from your client's classpath and include a log4j jar of version 1.2.12 or higher. <br />
</span><br />
</span><img src ="http://www.blogjava.net/rain1102/aggbug/193843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-17 19:05 <a href="http://www.blogjava.net/rain1102/archive/2008/04/17/193843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Apache的CLI来处理命令行</title><link>http://www.blogjava.net/rain1102/archive/2008/04/16/193521.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 16 Apr 2008 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/04/16/193521.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/193521.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/04/16/193521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/193521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/193521.html</trackback:ping><description><![CDATA[CLI是Jakarta Commons中的一个子类。如果你仅仅只有一到两个参数需要处理，那么使用它有点多余，但是，如果你需要从命令行中捕获大多数应用程序的设置参数，那么使用CLI是恰到好处的。<br />
<br />
在使用CLI之前需要创建一个Options对象，该对象相当于一个容器，另外还有Option对象，每个Option对象相对于命令行中的一个参数。<br />
<br />
&nbsp;&nbsp; <span style="color: #008000">Options opts = new Options();<br />
</span><br />
通过利用这个Options，你可以使用addOption()方法定义你的应用程序可接受的命令行参数，每次都为一个option调用一次这个方法，看下面例示：<br />
<br />
&nbsp;&nbsp; <span style="color: #008000">opts.addOption("h", false, "Print help for this application");<br />
&nbsp;&nbsp;&nbsp;opts.addOption("u", true, "The username to use");<br />
&nbsp;&nbsp;&nbsp;opts.addOption("dsn", true, "The data source to use");</span><br />
<br />
当然你也可以单独创建Option对线，然后使用addOption()方法添加进去。如下：<br />
<br />
<span style="color: #008000">Option op = new Option("h", false, "Print help for this application");</span><br />
<br />
<p>一旦你定义了类的参数，创建一个CommandLineParser，并分析已传送到主方法中的组。</p>
<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">BasicParser parser = new BasicParser();<br />
&nbsp;&nbsp;&nbsp;CommandLine cl = parser.parse(opts, args);</span><br />
<br />
等到所有的参数都被解析以后，你可以开始检查返回的命令行，这些命令行中，提供用户的参数和值已被语法分析程序详细检查过了。<br />
<br />
<span style="color: #008000">&nbsp;&nbsp; if (cl.hasOption('h')) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HelpFormatter hf = new HelpFormatter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hf.printHelp("OptionsTip", opts);<br />
&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;System.out.println(cl.getOptionValue("u"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(cl.getOptionValue("dsn"));<br />
&nbsp;&nbsp;&nbsp;}<br />
</span><br />
就象你看到的那样，你可以使用HelpRormatter类为你的程序自动地产生使用信息。<br />
<br />
下面看一下全部的代码：<br />
<br />
<p><span style="color: #008000">package com.founder.common;</span></p>
<p><span style="color: #008000">import org.apache.commons.cli.BasicParser;<br />
import org.apache.commons.cli.CommandLine;<br />
import org.apache.commons.cli.HelpFormatter;<br />
import org.apache.commons.cli.Options;<br />
import org.apache.commons.cli.ParseException;</span></p>
<p><span style="color: #008000">public class OptionsTip {</span></p>
<p><span style="color: #008000">&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;Options opts = new Options();<br />
&nbsp;&nbsp;&nbsp;opts.addOption("h", false, "Print help for this application");<br />
&nbsp;&nbsp;&nbsp;opts.addOption("u", true, "The username to use");<br />
&nbsp;&nbsp;&nbsp;opts.addOption("dsn", true, "The data source to use");<br />
&nbsp;&nbsp;&nbsp;BasicParser parser = new BasicParser();<br />
&nbsp;&nbsp;&nbsp;CommandLine cl = parser.parse(opts, args);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;if (cl.hasOption('h')) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;HelpFormatter hf = new HelpFormatter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;hf.printHelp("OptionsTip", opts);<br />
&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cl.getOptionValue("u"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cl.getOptionValue("dsn"));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} catch (ParseException pe) {<br />
&nbsp;&nbsp;&nbsp;pe.printStackTrace();<br />
&nbsp;&nbsp;}</span></p>
<p><span style="color: #008000">&nbsp;}</span></p>
<p><span style="color: #008000">}<br />
<br />
<span style="color: #000000"><span style="color: #ff0000">注：使用此程序时候别忘了把commons-cli-1.0.jar加入到你的classpath中</span><br />
<br />
运行结果：<br />
</p>
<p><span style="color: #800080">E:\javaworkspace\collection\src&gt;java com.founder.common.OptionsTip -h<br />
<span style="color: #008000">usage: OptionsTip<br />
&nbsp;-dsn&nbsp;&nbsp;&nbsp; The data source to use<br />
&nbsp;-h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print help for this application<br />
&nbsp;-u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The username to use</span></span></p>
<p><span style="color: #800080">E:\javaworkspace\collection\src&gt;java com.founder.common.OptionsTip -u eric -dsn founder<br />
<span style="color: #008000">eric<br />
founder</span></span></p>
</span></span><img src ="http://www.blogjava.net/rain1102/aggbug/193521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-16 17:31 <a href="http://www.blogjava.net/rain1102/archive/2008/04/16/193521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.util.Collection&lt;E&gt; 小介</title><link>http://www.blogjava.net/rain1102/archive/2008/04/15/193207.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 15 Apr 2008 12:47:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/04/15/193207.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/193207.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/04/15/193207.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/193207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/193207.html</trackback:ping><description><![CDATA[<h3><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Collection&lt;E&gt;</h3>
<dl>
<dt><strong>所有超级接口：</strong>
<dd>Iterable&lt;E&gt; </dd></dl>
<dl>
<dt><strong>所有已知子接口：</strong>
<dd>BeanContext, BeanContextServices, BlockingQueue&lt;E&gt;, List&lt;E&gt;, Queue&lt;E&gt;, Set&lt;E&gt;, SortedSet&lt;E&gt; </dd></dl>
<dl>
<dt><strong>所有已知实现类：</strong>
<dd>AbstractCollection, AbstractList, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayBlockingQueue, ArrayList, AttributeList, BeanContextServicesSupport, BeanContextSupport, ConcurrentLinkedQueue, CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet, HashSet, JobStateReasons, LinkedBlockingQueue, LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue, RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet, Vector </dd></dl>
<p><strong>接口介绍</strong></p>
<p>1. Collection&lt;E&gt; 集合的根接口，它包含了诸如add、remove、size和toArray之类的方法。<br />
2. Set&lt;E&gt; 不包含重复元素的集合，它包含的元素不必按照任何特定的顺序存储(它扩展了Collection&lt;E&gt;)</p>
3. SortedSet&lt;E&gt; 一个集(set)，它包含的元素都是排好序的(它扩展了Set&lt;E&gt;)<br />
4. List&lt;E&gt; 一个集合，在列表未被改动的情况下，它的元素将按照特定的顺序存放(它扩展了Collection&lt;E&gt;)<br />
5. Queue&lt;E&gt; 一个集合，它的元素具有隐含的顺序(它扩展了Collection&lt;E&gt;)。每个队列(queue)，都有一个头(head)元素，它是某些具体操作(如peak和poll)的操作对象。<br />
6. Map&lt;K,V&gt; 一个从键(key)到值(value)的映射(mapping)，每个键至多可以映射到一个值。<br />
7. SortedMap&lt;K,V&gt; 一个映射，它的键都是经过排序的(它扩展了Map&lt;K,V&gt;)。<br />
8. Iterator&lt;E&gt; 一些对象的接口，它可以从集合中返回其中的元素，每次返回一个。它是具有从Iterable.iterator方法返回的对象的类型。<br />
9. ListIterator&lt;E&gt; List对象的迭代器，其中添加了许多有用的与List相关的方法。它是具有从Iterable.listIterator方法返回的对象的类型。<br />
10. Iterable&lt;E&gt; 一个提供Iterator的对象，它可以用于增强型for语句。(注：它被定义在java.lang包中)<br />
<br />
<strong>实现介绍<br />
<br />
</strong>1. HashSet&lt;E&gt; 一个作为散列表(hashtable)实现的Set。它是一个良好的通用实现，其查找、添加和移除操作对于内容的大小相当不敏感。<br />
2. TreeSet&lt;E&gt; 一个作为平衡二叉树(balanced binarytree)实现的SortedSet。它的查找和修改比HashSet要慢，但可以保证元素是经过排序的。<br />
3. ArrayList&lt;E&gt; 使用可调整大小的数组实现了List。当列表(list)很大时，在表的头部进行添加和移除代价很大，但时创建和随机访问它的代价比较小。<br />
4. LinkedList&lt;E&gt; 是List和Queue的双向链接实现。对于任何大小的LinkedList修改的代价都很小，但随机访问较慢。<br />
5. HashMap&lt;K,V&gt; Map的一个散列表实现。它是一个具有快速查找和插入功能的非常通用的集合。<br />
6. TreeMap&lt;K,V&gt; 将SortedMap实现为一个平衡二叉树，以确保它的元素是根据键排序的。它适用于那些需要根据键进行快速查找的有序数据集合。<br /><img src ="http://www.blogjava.net/rain1102/aggbug/193207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-15 20:47 <a href="http://www.blogjava.net/rain1102/archive/2008/04/15/193207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件包 javax.xml.validation 的描述</title><link>http://www.blogjava.net/rain1102/archive/2008/03/07/184434.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 07 Mar 2008 03:03:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/03/07/184434.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/184434.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/03/07/184434.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/184434.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/184434.html</trackback:ping><description><![CDATA[<h2>软件包 javax.xml.validation </h2>
此包提供了用于 XML 文档验证的 API。
<p><strong>请参见：</strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/package-summary.html#package_description"><strong>描述</strong></a>
<p>
<table style="width: 716px; height: 200px" cellspacing="0" cellpadding="3" width="716" summary="" border="1">
    <tbody>
        <tr class="TableHeadingColor" bgcolor="#ccccff">
            <th align="left" colspan="2"><font size="+2"><strong>类摘要</strong></font></th>
        </tr>
        <tr class="TableRowColor" bgcolor="white">
            <td width="15%"><strong><a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/Schema.html">Schema</a></strong></td>
            <td>不可变的语法存储表示形式。</td>
        </tr>
        <tr class="TableRowColor" bgcolor="white">
            <td width="15%"><strong><a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/SchemaFactory.html">SchemaFactory</a></strong></td>
            <td>创建 <a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/Schema.html"><code>Schema</code></a> 对象的工厂。</td>
        </tr>
        <tr class="TableRowColor" bgcolor="white">
            <td width="15%"><strong><a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/SchemaFactoryLoader.html">SchemaFactoryLoader</a></strong></td>
            <td style="width: 808px; height: 26px">创建 <a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/SchemaFactory.html"><code>SchemaFactory</code></a> 的工厂。</td>
        </tr>
        <tr class="TableRowColor" bgcolor="white">
            <td width="15%"><strong><a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/TypeInfoProvider.html">TypeInfoProvider</a></strong></td>
            <td>此类提供了对 <a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/ValidatorHandler.html"><code>ValidatorHandler</code></a> 所确定的类型信息的访问。</td>
        </tr>
        <tr class="TableRowColor" bgcolor="white">
            <td width="15%"><strong><a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/Validator.html">Validator</a></strong></td>
            <td>根据 <a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/Schema.html"><code>Schema</code></a> 检查 XML 文档的处理器。</td>
        </tr>
        <tr class="TableRowColor" bgcolor="white">
            <td width="15%"><strong><a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/ValidatorHandler.html">ValidatorHandler</a></strong></td>
            <td>处理 SAX 流的流验证器。</td>
        </tr>
    </tbody>
</table>
&nbsp;
<p><a name="package_description"><!-- --></a>
<h2>软件包 javax.xml.validation 的描述 </h2>
<p>
<p>此包提供了用于 XML 文档验证的 API。<em>Validation</em> 是验证 XML 文档是否为指定 XML <em>schema</em> 的实例的过程。XML 模式定义了其实例文档将表示的内容模式（也称为 <em>grammar</em> 或 <em>vocabulary</em>）。 </p>
<p>有多种流行的技术用于创建 XML 模式。最流行的技术包括： </p>
<ul>
    <li><strong>Document Type Definition (DTD)</strong> －－ XML 的内置模式语言。
    <li><strong><a href="http://www.w3.org/XML/Schema">W3C XML Schema (WXS)</a></strong> －－ 面向对象的 XML 模式语言。WXS 还提供了用于约束 XML 文档的字符数据的类型系统。WXS 通过 <a href="http://www.w3.org/">World Wide Web Consortium (W3C)</a> 维护，它是 W3C Recommendation（即公认的 W3C 标准规范）。
    <li><strong><a href="http://www.relaxng.org/">RELAX NG (RNG)</a></strong> －－ 基于模式的、用户友好的 XML 模式语言。RNG 模式也可以使用类型来约束 XML 字符数据。RNG 通过 <a href="http://www.oasis-open.org/">Organization for the Advancement of Structured Information Standards (OASIS)</a> 维护，它既是 OASIS 标准也是 <a href="http://www.iso.org/">ISO (International Organization for Standardization)</a> 标准。
    <li><strong><a href="http://www.schematron.com/">Schematron</a></strong> －－ 基于规则的 XML 模式语言。相对于 DTD、WXS 和 RNG 是用于表示内容模式的结构而言，Schematron 的设计是为了实施难以或不能通过其他模式语言表示的个别规则。Schematron 是为了补充以结构化模式语言（例如 aforementioned）编写的模式。Schematron 正在成为一项 ISO 标准。 </li>
</ul>
<p>以前的 JAXP 版本支持作为 XML 解析器的功能的验证，要么通过 <a title="javax.xml.parsers 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/parsers/SAXParser.html"><code>SAXParser</code></a> 实例，要么通过 <a title="javax.xml.parsers 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/parsers/DocumentBuilder.html"><code>DocumentBuilder</code></a> 实例来表示。 </p>
<p>JAXP 验证 API 从 XML 文档解析中分离出实例文档的验证。这具有几种优点，一些原因包括： </p>
<ul>
    <li><strong>支持额外的模式语言。</strong> 从 JDK 1.5 开始，两种最流行的 JAXP 解析器实现（Crimson 和 Xerces）仅支持可用的 XML 模式语言的子集。Validation API 提供了标准的机制，应用程序通过此机制可利用支持额外模式语言的规范验证库。
    <li><strong>简单的 XML 实例与模式的运行时耦合。</strong> 指定要用于通过 JAXP 解析器验证的模式位置可能易于混淆。Validation API 使此过程变得简单（参见以下<a href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/package-summary.html#example-1">示例</a>）。 </li>
</ul>
<p><a name="example-1"><strong>用例</strong>。</a>以下示例演示了通过 Validation API 验证 XML 文档（为了方便阅读，此例未显示某些异常处理）： </p>
<pre>
// parse an XML document into a DOM tree
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(new File("instance.xml"));
// create a SchemaFactory capable of understanding WXS schemas
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// load a WXS schema, represented by a Schema instance
Source schemaFile = new StreamSource(new File("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);
// create a Validator instance, which can be used to validate an instance document
Validator validator = schema.newValidator();
// validate the DOM tree
try {
validator.validate(new DOMSource(document));
} catch (SAXException e) {
// instance document is invalid!
}
</pre>
<p>JAXP 解析 API 已经与验证 API 进行了集成。应用程序可以通过验证 API 创建 <a title="javax.xml.validation 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/validation/Schema.html"><code>Schema</code></a>，并通过使用 <a href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/parsers/DocumentBuilderFactory.html#setSchema(javax.xml.validation.Schema)"><code>DocumentBuilderFactory.setSchema(Schema)</code></a> 和 <a href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/parsers/SAXParserFactory.html#setSchema(javax.xml.validation.Schema)"><code>SAXParserFactory.setSchema(Schema)</code></a> 方法将其与 <a title="javax.xml.parsers 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/parsers/DocumentBuilderFactory.html"><code>DocumentBuilderFactory</code></a> 或 <a title="javax.xml.parsers 中的类" href="http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/javax/xml/parsers/SAXParserFactory.html"><code>SAXParserFactory</code></a> 实例进行关联。<strong>您不能</strong>既设置模式，又调用解析器工厂上的 <code>setValidating(true)</code>。前者的技术将导致解析器使用新的验证 API，后者将导致解析器使用它们自己的内部验证工具。<strong>同时调整这两个选项将导致冗余行为或错误条件。</strong> </p><img src ="http://www.blogjava.net/rain1102/aggbug/184434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-07 11:03 <a href="http://www.blogjava.net/rain1102/archive/2008/03/07/184434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决URL传递中文参数（比如hello.action?msg=哈哈之类）出现乱码的问题 </title><link>http://www.blogjava.net/rain1102/archive/2008/03/06/184264.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 06 Mar 2008 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2008/03/06/184264.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/184264.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2008/03/06/184264.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/184264.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/184264.html</trackback:ping><description><![CDATA[修改&nbsp;tomcat/conf/server.xml <br />
&lt;Connector&nbsp;acceptCount='100'&nbsp;connectionTimeout='20000'&nbsp;debug='0' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disableUploadTimeout='true'&nbsp;enableLookups='false' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxSpareThreads='75'&nbsp;maxThreads='150'&nbsp;minSpareThreads='25' <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port='8080'&nbsp;redirectPort='8443'&nbsp;URIEncoding='<span style="color: #ff0000">GBK</span>'/&gt; <br />
<br />
<br />
加上　URIEncoding='GBK'　即可。 <br /><img src ="http://www.blogjava.net/rain1102/aggbug/184264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-06 14:56 <a href="http://www.blogjava.net/rain1102/archive/2008/03/06/184264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 Log4j 搭建一个日志服务器 </title><link>http://www.blogjava.net/rain1102/archive/2007/12/24/170082.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 24 Dec 2007 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/12/24/170082.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/170082.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/12/24/170082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/170082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/170082.html</trackback:ping><description><![CDATA[<strong>1.基本使用<br />
　　<br />
　　1.1服务器</strong><br />
　　<br />
　　这个日志服务器的服务器端需要运行：<br />
　　<br />
　　log4j jar包中的org.apache.log4j.net.SocketServer<br />
　　<br />
　　加参数 【本地监听端口】【配置文件】【客户端配置文件目录】<br />
　　<br />
　　第三个参数【配置文件目录】其实指的是针对每个客户端的配置文件，等会详细讲！现在用&#8220;.&#8221;就可以了.<br />
　　<br />
　　服务器端的配置文件可以用这个（引自利用Log4j 创建日志服务器 By ?の?）：<br />
　　<br />
　　#文件名socketserver.properties<br />
　　#如果需要显示日志界面，可以将本行启用<br />
　　#log4j.rootCategory=, A1<br />
　　log4j.rootLogger=DEBUG,A3<br />
　　log4j.category.org.apache.log4j.net=INFO<br />
　　<br />
　　log4j.appender.A1=org.apache.log4j.lf5.LF5Appender<br />
　　log4j.appender.A1.MaxNumberOfRecords=700<br />
　　<br />
　　log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender<br />
　　log4j.appender.A4.file=server.log<br />
　　log4j.appender.A4.DatePattern='.'yyyyMMdd<br />
　　log4j.appender.A4.layout=org.apache.log4j.PatternLayout<br />
　　log4j.appender.A4.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n<br />
　　<br />
　　log4j.appender.A3=org.apache.log4j.RollingFileAppender<br />
　　log4j.appender.A3.file=server2.log<br />
　　log4j.appender.A3.MaxFileSize=1024KB<br />
　　log4j.appender.A3.MaxBackupIndex=999<br />
　　log4j.appender.A3.layout=org.apache.log4j.PatternLayout<br />
　　log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n<br />
　　<br />
　　其中A1是启动Lf5的log监视终端，A3限制大小的文件，A4是日期滚动文件。<br />
　　<br />
　　单A3，A4是讲所有客户端的日志都存放到了同一个日志文件中，我觉的这种方法并不好。<br />
　　<br />
　　<strong>1.2客户端</strong><br />
　　<br />
　　客户端的配置文件是这样的：<br />
　　log4j.rootCategory=,SOCKET<br />
　　log4j.addivity.org.apache=true<br />
　　<br />
　　#应用于socket<br />
　　log4j.appender.SOCKET=org.apache.log4j.net.SocketAppender<br />
　　log4j.appender.SOCKET.RemoteHost=localhost　 #服务器的IP地址<br />
　　log4j.appender.SOCKET.Port=1978　　　　　　　#服务器的监听端口<br />
　　log4j.appender.SOCKET.LocationInfo=true　　　#这个是什么我不知道<br />
　　log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout<br />
　　log4j.appender.SOCKET.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%t%m%n<br />
　　<br />
　　#A2<br />
　　log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender<br />
　　log4j.appender.A2.file=server.log<br />
　　log4j.appender.A2.DatePattern='.'yyyy-MM-dd<br />
　　log4j.appender.A2.layout=org.apache.log4j.PatternLayout<br />
　　log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n<br />
　　<br />
　　启动服务器端,再运行客户端就可以了!但所有的服务器端/客户端的日志都放到了一个日志文件中!<br />
　　<br />
　　<strong>2.稍微高级点的使用</strong><br />
　　<br />
　　下面讲如何把各个客户端和服务器端的日志分别放到不同的日志文件中.<br />
　　<br />
　　这个我在网上找了好久也没有找到!<br />
　　<br />
　　<strong>2.1服务器</strong><br />
　　<br />
　　服务器的配置文件不用怎么改动，如果你不需要在同一个文件中存放所有日志，可以把配置文件第一行的A3去掉。<br />
　　<br />
　　但服务器端有个更大的麻烦：代码有问题！问题够大了吧，不知道算不算是个bug（我用的是1.2.11版log4j）。<br />
　　<br />
　　改吧!<br />
　　<br />
　　打开log4j目录下的src\java\org\apache\log4j\net\SocketServer.java<br />
　　<br />
　　在这段中改动(看下面代码第12行)<br />
　　<br />
　　LoggerRepository configureHierarchy(InetAddress inetAddress) {<br />
　　cat.info("Locating configuration file for "+inetAddress);<br />
　　// We assume that the toSting method of InetAddress returns is in<br />
　　// the format hostname/d1.d2.d3.d4 e.g. torino/192.168.1.1<br />
　　String s = inetAddress.toString();<br />
　　int i = s.indexOf("/");<br />
　　if(i == -1) {<br />
　　cat.warn("Could not parse the inetAddress ["+inetAddress+<br />
　　"]. Using default hierarchy.");<br />
　　return genericHierarchy();<br />
　　} else {<br />
　　//这个是什么意思,专门取"/"符号吗?明显是错的!闭掉<br />
　　//　　String key = s.substring(0, i);<br />
　　//改为<br />
　　String key = s.substring(i+1);<br />
　　File configFile = new File(dir, key+CONFIG_FILE_EXT);<br />
　　if(configFile.exists()) {<br />
　　Hierarchy h = new Hierarchy(new RootLogger((Level) Priority.DEBUG));<br />
　　hierarchyMap.put(inetAddress, h);<br />
　　<br />
　　new PropertyConfigurator().doConfigure(configFile.getAbsolutePath(), h);<br />
　　<br />
　　return h;<br />
　　} else {<br />
　　cat.warn("Could not find config file ["+configFile+"].");<br />
　　return genericHierarchy();<br />
　　}<br />
　　}<br />
　　}<br />
　　<br />
　　编译文件!<br />
　　<br />
　　打开log4j目录下的src\java\org\apache\log4j\net\SocketNode.java<br />
　　<br />
　　(改这段是因为我用的时候出错!看不出来改不改有什么区别)<br />
　　<br />
　　改第54行<br />
　　<br />
　　ois = new ObjectInputStream(<br />
　　new BufferedInputStream(socket.getInputStream()));<br />
　　<br />
　　为<br />
　　<br />
　　InputStream is = socket.getInputStream();<br />
　　if (is != null) {<br />
　　ois = new ObjectInputStream(new BufferedInputStream(is));<br />
　　}<br />
　　<br />
　　文件头加 import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.InputStream;<br />
　　<br />
　　编译文件!<br />
　　<br />
　　现在为每个配置客户端编配置文件,把配置文件放到【客户端配置文件目录】中:<br />
　　log4j.rootCategory=,A4<br />
　　log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender<br />
　　log4j.appender.A4.file=127.0.0.1.log　 #为每个客户端取不同的名字<br />
　　log4j.appender.A4.DatePattern='.'yyyyMMdd<br />
　　log4j.appender.A4.layout=org.apache.log4j.PatternLayout<br />
　　log4j.appender.A4.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n<br />
　　<br />
　　保存文件名为[客户端ip地址].lcf　如192.168.0.126.lcf<br />
　　<br />
　　<strong>2.2 客户端</strong><br />
　　<br />
　　客户端不用改变,太幸运了!!<br />
　　<br />
　　ok啦!<br />
　　<br />
　　启动服务器,启动客户端,现在服务器的日志放到了server.log中,有配置文件的客户端的日志会放到相应的日志文件中,没有配置文件的客户端的日志依然放在server.log中!<br />
　　<br />
　　SocketServer.java 和 SocketNode.java两个文件可以单独做一个工程,把他们的package去掉就行了!<img src ="http://www.blogjava.net/rain1102/aggbug/170082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-24 15:56 <a href="http://www.blogjava.net/rain1102/archive/2007/12/24/170082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>采用GenericManager做业务处理的时候CGLIB报错. </title><link>http://www.blogjava.net/rain1102/archive/2007/12/23/169846.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 23 Dec 2007 12:26:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/12/23/169846.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/169846.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/12/23/169846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/169846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/169846.html</trackback:ping><description><![CDATA[项目中我把Service这层的类改了一下.定义了两个Service的父类.一个是:<br />
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;GenericManager&lt;T,&nbsp;PK&nbsp;</span><span class="keyword">extends</span><span>&nbsp;Serializable&gt;&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;List&lt;T&gt;&nbsp;getAll(); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;T&nbsp;get(PK&nbsp;id); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>.......基本的CRUD方法 &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
<br />
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;GenericManagerImpl&lt;T,&nbsp;PK&nbsp;</span><span class="keyword">extends</span><span>&nbsp;Serializable&gt;&nbsp;</span><span class="keyword">implements</span><span>&nbsp;GenericManager&lt;T,&nbsp;PK&gt;&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">protected</span><span>&nbsp;BaseGenericHibernateDAO&lt;T,&nbsp;PK&gt;&nbsp;baseGenericHibernateDAO; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;GenericManagerImpl(BaseGenericHibernateDAO&lt;T,&nbsp;PK&gt;&nbsp;baseGenericHibernateDAO)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">this</span><span>.baseGenericHibernateDAO&nbsp;=&nbsp;baseGenericHibernateDAO; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>对应实现上面的接口CRUD方法 &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
但是现在项目启动的时候抛出一个如下的错误:<br />
<li class="alt"><span><span>Caused&nbsp;by:&nbsp;org.springframework.aop.framework.AopConfigException:&nbsp;Couldn't&nbsp;generate&nbsp;CGLIB&nbsp;subclass&nbsp;of&nbsp;</span><span class="keyword">class</span><span>&nbsp;[</span><span class="keyword">class</span><span>&nbsp;com.xxxx.user.service.impl.UserManagerImpl]:&nbsp;Common&nbsp;causes&nbsp;of&nbsp;</span><span class="keyword">this</span><span>&nbsp;problem&nbsp;include&nbsp;using&nbsp;a&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;or&nbsp;a&nbsp;non-visible&nbsp;</span><span class="keyword">class</span><span>;&nbsp;nested&nbsp;exception&nbsp;is&nbsp;java.lang.IllegalArgumentException:&nbsp;Superclass&nbsp;has&nbsp;no&nbsp;</span><span class="keyword">null</span><span>&nbsp;constructors&nbsp;but&nbsp;no&nbsp;arguments&nbsp;were&nbsp;given &nbsp;&nbsp;</span></span></li>
<li class=""><span>Caused&nbsp;by:&nbsp;java.lang.IllegalArgumentException:&nbsp;Superclass&nbsp;has&nbsp;no&nbsp;</span><span class="keyword">null</span><span>&nbsp;constructors&nbsp;but&nbsp;no&nbsp;arguments&nbsp;were&nbsp;given &nbsp;&nbsp;</span></span></li>
<li class="alt"><span>at&nbsp;net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:</span><span class="number">718</span><span>)&nbsp;&nbsp;</span></li>
<br />
<span style="color: red">是Spring AOP的问题.主要是出现在事务这块,由于我用的是Spring2.0 AOP 来声明事务.在声明事务的时候我把taget-prent-class="true" 了,但事实上不能为true.去掉这个就OK了因为要针对接口代理.</span><br /><img src ="http://www.blogjava.net/rain1102/aggbug/169846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-23 20:26 <a href="http://www.blogjava.net/rain1102/archive/2007/12/23/169846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache 配置多个端口</title><link>http://www.blogjava.net/rain1102/archive/2007/11/22/162396.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 22 Nov 2007 07:57:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/11/22/162396.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/162396.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/11/22/162396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/162396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/162396.html</trackback:ping><description><![CDATA[&nbsp; 首先打开配置文件httpd.conf， &nbsp; <br />
&nbsp; 找到Listen &nbsp; &lt;ip&gt;:80 &nbsp; <br />
&nbsp; 或者Listen:80 &nbsp; <br />
&nbsp; 添加或更改为你要添加的端口（不能有冲突）如下面的例子： &nbsp; <br />
&nbsp; Listen &nbsp; 80 &nbsp; <br />
&nbsp; Listen &nbsp; 81 &nbsp; <br />
&nbsp; Listen &nbsp; 82 &nbsp; <br />
&nbsp; 再建立虚拟主机，如下: &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; NameVirtualHost &nbsp; localhost:80 &nbsp; <br />
&nbsp; NameVirtualHost &nbsp; localhost:2222&nbsp;&nbsp;&nbsp;<br />
&nbsp; NameVirtualHost &nbsp; localhost:6666&nbsp;&nbsp;&nbsp;<br />
&nbsp; &lt;VirtualHost &nbsp; localhost:80&gt; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DocumentRoot&nbsp;&nbsp; E:\webroot\ &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ServerName &nbsp; localhost:80 &nbsp; <br />
&nbsp; &lt;/VirtualHost&gt; &nbsp; <br />
&nbsp; &lt;VirtualHost &nbsp; localhost:2222&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DocumentRoot &nbsp; f:\webroot\ &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ServerName &nbsp; locahost:2222&nbsp;&nbsp;&nbsp;<br />
&nbsp; &lt;/VirtualHost&gt; &nbsp; <br />
&nbsp; &lt;VirtualHost &nbsp; localhost:6666&nbsp;&gt;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DocumentRoot&nbsp;&nbsp;D:\webroot\web\phpmyadmin &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ServerName &nbsp; localhost:6666&nbsp;&nbsp;&nbsp;<br />
&nbsp; &lt;/VirtualHost&gt;&nbsp;&nbsp; <br /><img src ="http://www.blogjava.net/rain1102/aggbug/162396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-11-22 15:57 <a href="http://www.blogjava.net/rain1102/archive/2007/11/22/162396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache 两种虚拟主机方式的区别</title><link>http://www.blogjava.net/rain1102/archive/2007/11/12/159875.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 12 Nov 2007 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/11/12/159875.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/159875.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/11/12/159875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/159875.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/159875.html</trackback:ping><description><![CDATA[大多数人可能就知道 Apache 的基于名字的虚拟主机，不知道 Apache 还可以有基于 IP 的虚拟主机。前者的道理不言自明，多个域名（服务器）对应一个 IP 地址，配置方法为：<br />
<br />
NameVirtualHost 111.22.33.44<br />
&lt;VirtualHost 111.22.33.44&gt;<br />
ServerName www.sample.com<br />
DocumentRoot /www/sample<br />
&lt;/VirtualHost&gt;<br />
<br />
&lt;VirtualHost 111.22.33.44&gt;<br />
ServerName www.sample2.com<br />
DocumentRoot /www/sample2<br />
&lt;/VirtualHost&gt;<br />
<br />
但是在有些 IP 地址充裕，但是机器资源紧张的环境下，我们可能要把多个域名解析到同一台机器上，其配置方法为：<br />
<br />
&lt;VirtualHost www.smallco.com&gt;<br />
ServerName www.smallco.com<br />
DocumentRoot /groups/smallco/www<br />
&lt;/VirtualHost&gt;<br />
<br />
&lt;VirtualHost www.baygroup.org&gt;<br />
ServerName www.baygroup.org<br />
DocumentRoot /groups/baygroup/www<br />
&lt;/VirtualHost&gt;<br />
<br />
这种方法下，要求机器配置多个 IP 地址。<br /><img src ="http://www.blogjava.net/rain1102/aggbug/159875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-11-12 09:28 <a href="http://www.blogjava.net/rain1102/archive/2007/11/12/159875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>James的安装与使用 (转载)</title><link>http://www.blogjava.net/rain1102/archive/2007/10/16/153314.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 16 Oct 2007 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/10/16/153314.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/153314.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/10/16/153314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/153314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/153314.html</trackback:ping><description><![CDATA[<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">一、<span style="font-family: 宋体">安装：</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">1．&nbsp;<span style="font-family: 宋体">环境要求：</span></p>
<p style="margin-left: 39pt"><span style="font-family: 宋体">已安装</span><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a><span style="font-family: 宋体">平台，版本为</span>j2sdk1.4.2<span style="font-family: 宋体">，环境变量</span>JAVA_HOME<span style="font-family: 宋体">设为</span>C:"j2sdk1.4.2<span style="font-family: 宋体">；</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">2．&nbsp;<span style="font-family: 宋体">下载与运行：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">从</span>Apache<span style="font-family: 宋体">网站上下载得到一个压缩的文件</span>james-2.1-bin.zip<span style="font-family: 宋体">，大小为</span>4.44M<span style="font-family: 宋体">，将此包解压到</span>C:"James"james-2.1<span style="font-family: 宋体">下。</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">运行分为两种方式：前台直接运行、作为后台服务运行；</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 21pt; text-indent: 21pt">1&gt;<span style="font-family: 宋体">前台直接运行：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">在</span>C:"James"james-2.1"bin<span style="font-family: 宋体">下运行</span>run.bat</p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">这是会出现：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">Using PHOENIX_HOME:&nbsp;&nbsp; C:"James"james-2.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Using PHOENIX_TMPDIR: C:"James"james-2.1"temp</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Using JAVA_HOME:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:"j2sdk1.4.2</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">Phoenix 4.0.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">James 2.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Remote Manager Service started plain:4555</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">POP3 Service started plain:110</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">SMTP Service started plain:25</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">NNTP Service Disabled</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Fetch POP Disabled</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">这是就表示</span>James<span style="font-family: 宋体">邮件服务以开启，不过</span>Window<span style="font-family: 宋体">下不能关闭控制台窗口，否者邮件服务会停止。如要克服此缺点必须使</span>James<span style="font-family: 宋体">邮件服务作为作为后台服务运行。</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">停止前台运行按</span>Ctrl+C,<span style="font-family: 宋体">会出现：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">JVM exiting abnormally. Shutting down Phoenix.</p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">终止批处理操作吗</span>(Y/N)?</p>
<p style="margin-left: 18pt; text-indent: 21pt">2&gt;<span style="font-family: 宋体">后台服务运行：</span></p>
<p style="margin-left: 39pt"><span style="font-family: 宋体">将</span>C:"James"james-2.1"conf<span style="font-family: 宋体">目录下的</span>wrapper.conf<span style="font-family: 宋体">拷贝到</span>C:"James"james-2.1"bin<span style="font-family: 宋体">即包含</span>wrapper.exe<span style="font-family: 宋体">的目录下，运行：</span></p>
<p style="margin-left: 36pt; text-indent: 6pt">wrapper.exe&nbsp;&nbsp;&nbsp; -i&nbsp;&nbsp;&nbsp;&nbsp; C:"James"james-2.1"bin"wrapper.conf&nbsp;</p>
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">然后在控制面板中开启服务或重启即可。</span></p>
<p style="margin-left: 36pt; text-indent: 3pt">
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">卸载后台服务：</span></p>
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">到</span>C:"James"james-2.1"bin<span style="font-family: 宋体">即包含</span>wrapper.exe<span style="font-family: 宋体">的目录下，运行：</span></p>
<p style="margin-left: 36pt; text-indent: 3pt">wrapper.exe&nbsp;&nbsp;&nbsp;&nbsp; -r &nbsp;&nbsp; C:"James"james-2.1"bin"wrapper.conf</p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">3．&nbsp;&nbsp;</p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">二、<span style="font-family: 宋体">配置：</span></p>
<p style="margin-left: 21pt">1&gt;<span style="color: blue; font-family: 宋体">服务器端配置</span><span style="font-family: 宋体">（邮件服务器的名字假设叫</span>EmailServer<span style="font-family: 宋体">，服务器管理员名</span>Admin<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 31.5pt; text-indent: -10.5pt; text-align: left" align="left"><span style="font-family: 宋体">首先停止已开启的</span>James<span style="font-family: 宋体">邮件服务，然后打开文件</span>C:"James"james-2.1"apps"james"SAR-INF"config.xml<span style="font-family: 宋体">。</span></p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">在</span>config.xml<span style="font-family: 宋体">文件中，找到</span>Postmaster@localhost<span style="font-family: 宋体">，把此项改为</span>Admin@EmailServer<span style="font-family: 宋体">，同时，找到位于</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&lt;!--&nbsp;By default, the servername 'localhost' is specified. This can be removed, if required. &nbsp;&nbsp;--&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;Warning: If you are using fetchpop it is important to include the&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;fetched domains in the server name list to prevent looping.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;servernames autodetect="true" autodetectIP="true"&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CONFIRM? </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&nbsp;&nbsp;--&gt; </span>
<p style="margin-left: 21pt">&nbsp;&lt;servername&gt;<strong><u><span style="font-size: 12pt"> localhost </span></u></strong>&lt;/servername&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/servernames&gt;</p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">的</span>localhost<span style="font-family: 宋体">，把此项改为</span>EmailServer<span style="font-family: 宋体">。这样就可以让其它机器也能访问邮件系统。</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>DNS<span style="font-family: 宋体">配置：找到同上文件中</span><strong>&lt;dnsserver&gt;</strong><span style="font-family: 宋体">段中的如下程序段：</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- <strong>&lt;dnsserver&gt;</strong> </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;servers&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CONFIRM?&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!-- Enter ip address of your DNS server, one IP address per server&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;element.&nbsp;The default configuration assumes a DNS server on the localhost.&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt">&nbsp;&lt;server&gt;<strong><u><span style="font-size: 12pt">127.0.0.1</span></u></strong>&lt;/server&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/servers&gt;</p>
<p style="margin-left: 21pt">&nbsp;&lt;authoritative&gt;false&lt;/authoritative&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/dnsserver&gt;</p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">将</span>127.0.0.1<span style="font-family: 宋体">的位置填入</span>DNS<span style="font-family: 宋体">服务器的</span>IP<span style="font-family: 宋体">地址；</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">修改管理员密码：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">找到同上文件中的</span>&lt;administrator_accounts&gt;<span style="font-family: 宋体">段，如下程序段</span></p>
<p style="margin-left: 42pt">- &lt;administrator_accounts&gt;</p>
<p style="margin-left: 42pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CHECKME! </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">- &lt;!--&nbsp;Change the default login/password. </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 42pt">&nbsp;&lt;account login="<u>root</u>" password="<u>root</u>" /&gt; </p>
<p style="margin-left: 42pt">&nbsp;&lt;/administrator_accounts&gt;</p>
<p style="margin-left: 42pt">
<p style="margin-left: 42pt"><span style="font-family: 宋体">将默认用户名</span>root<span style="font-family: 宋体">与密码</span>root<span style="font-family: 宋体">修改为需要的值</span> </p>
<p style="margin-left: 42pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">修改</span>telnet<span style="font-family: 宋体">管理程序登录端口</span> <span style="font-family: 宋体">：（默认为</span>4555<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">找到同上文件中的</span>&lt;remotemanager&gt;<span style="font-family: 宋体">段下的</span>port<span style="font-family: 宋体">如下程序段</span></p>
<p style="margin-left: 42pt">- &lt;remotemanager&gt;</p>
<p style="margin-left: 42pt">&nbsp;&lt;port&gt;<u>4555</u>&lt;/port&gt; </p>
<p style="margin-left: 42pt">- &lt;!--&nbsp;&nbsp; Uncomment this if you want to bind to a specific inetaddress </p>
<p style="margin-left: 42pt">&nbsp;--&gt; </p>
<p style="margin-left: 60pt; text-indent: -18pt; tab-stops: list 60.0pt">-<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;!--</p>
<p style="margin-left: 42pt"><span style="font-family: 宋体">将</span>&lt;port&gt;<u>4555</u>&lt;/port&gt;<span style="font-family: 宋体">之间的端口号</span>4555<span style="font-family: 宋体">改为需要的端口。</span></p>
<p>
<p style="margin-left: 21pt">2&gt; <span style="color: blue; font-family: 宋体">客户端配置</span><span style="font-family: 宋体">：（略）</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt">3&gt;<span style="color: blue; font-family: 宋体">帐号管理</span></p>
<p style="margin-left: 21pt">James<span style="font-family: 宋体">的账号管理是通过</span>telnet<span style="font-family: 宋体">完成的，登录命令为：</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt">telnet EmailServer 4555</p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt"><span style="font-family: 宋体">其中</span>EmailServer<span style="font-family: 宋体">也可以换成</span>IP<span style="font-family: 宋体">，</span>4555<span style="font-family: 宋体">是端口号。登录时需要用户名和密码，开始默认的用户名和密码均为</span>root<span style="font-family: 宋体">。若登录成功，提示如下：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt">JAMES Remote Administration Tool 2.1</p>
<p style="margin-left: 21pt; text-indent: 21pt">Please enter your login and password</p>
<p style="margin-left: 21pt; text-indent: 21pt">Login id:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">此时输入</span>root<span style="font-family: 宋体">用户名</span>,<span style="font-family: 宋体">然后会出现：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">输入密码</span>root</p>
<p><span style="font-family: 宋体">注意：在有些操作系统如</span>Windows2000<span style="font-family: 宋体">上，用户输入均不显示。</span></p>
<p>
<p>telnet<span style="font-family: 宋体">命令列表：</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>help</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">显示帮助</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Listusers</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">列出目前存在的账户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Countusers</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">显示目前存在的账户的数量</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>addusers [<span style="font-family: 宋体">用户名</span>] [<span style="font-family: 宋体">密码</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">添加新用户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>verify [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">验证特定用户是否存在</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>deluser [<span style="font-family: 宋体">用户名</span>]&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">删除已存在用户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setpassword [<span style="font-family: 宋体">用户名</span>] [<span style="font-family: 宋体">密码</span>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">设置某一用户的密码</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setalias [<span style="font-family: 宋体">别名</span>] [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">从本地将</span>[<span style="font-family: 宋体">别名</span>]<span style="font-family: 宋体">的所有邮件转寄</span>[<span style="font-family: 宋体">用户名</span>]</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>unsetalias [<span style="font-family: 宋体">别名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">取消</span>setalias<span style="font-family: 宋体">设置</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setforwarding [<span style="font-family: 宋体">用户名</span>] [email<span style="font-family: 宋体">地址</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">将</span>[<span style="font-family: 宋体">用户名</span>]<span style="font-family: 宋体">的邮件转寄指定</span>[email<span style="font-family: 宋体">地址</span>]</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>unsetforwarding [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">取消</span>setforwarding<span style="font-family: 宋体">设置</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>user [<span style="font-family: 宋体">资源</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">变为另一用户的资源</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>shutdown&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">停止当前</span>James<span style="font-family: 宋体">邮件服务的</span>JVM<span style="font-family: 宋体">程序</span>(<span style="font-family: 宋体">对于</span>James<span style="font-family: 宋体">为后台服务时，用此命令很方便</span>)</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Quit</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">断开</span>telnet<span style="font-family: 宋体">连接</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>
<p style="margin-left: 21pt">4&gt;<span style="color: blue; font-family: 宋体">用户信息的数据库存储</span></p>
<p>James<span style="font-family: 宋体">邮件用户的用户信息默认保存在</span>apps"james"var"users<span style="font-family: 宋体">目录下，通过修改配置文件</span>apps"james"SAR-INF"config.xml<span style="font-family: 宋体">，可以把用户信息保存到数据库中，配置方法如下：</span></p>
<p><span style="font-family: 宋体">假设使用的是</span>MySQL<span style="font-family: 宋体">数据库：</span></p>
<p>
<p><span style="font-family: 宋体">第一步：首先将</span>MySQL<span style="font-family: 宋体">的驱动程序（例如：</span>mysql-connector-java-3.1.6-bin.jar<span style="font-family: 宋体">）考到</span>james<span style="font-family: 宋体">的</span>lib<span style="font-family: 宋体">目录下（例如：</span>D:"james"lib<span style="font-family: 宋体">）</span></p>
<p>
<p><span style="font-family: 宋体">第二步：在</span>MySQL<span style="font-family: 宋体">中新建一个数据库</span>mail<span style="font-family: 宋体">；</span></p>
<p>
<p><span style="font-family: 宋体">第三步：打开</span>config.xml<span style="font-family: 宋体">，找到</span>&lt;users-store&gt;<span style="font-family: 宋体">这一项，此面默认的内容为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;destination URL="file://var/users/"/&gt;<br />
            &lt;/repository&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">需要修改为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;repository name="LocalUsers"</p>
            <p>&nbsp;class="org.apache.james.userrepository.JamesUsers<strong>Jdbc</strong>Repository" destinationURL="db://maildb/users"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;sqlFile&gt;file://conf/sqlResources.xml&lt;/sqlFile&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/repository&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">其实如不修改也行，因为文件下面也有实例，不过是用</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释掉的，打开即可；记住把</span></p>
<p>&lt;repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;destination URL="file://var/users/"/&gt;<br />
&lt;/repository&gt;</p>
<p><span style="font-family: 宋体">用</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释掉；</span></p>
<p><span style="font-family: 宋体">通过修改，我们就把用户信息的存储介质从</span>file<span style="font-family: 宋体">改成了</span>db<span style="font-family: 宋体">，</span>&lt;sqlFile&gt;<span style="font-family: 宋体">是指明了在</span>db<span style="font-family: 宋体">中的数据表结构及相关数据库信息。</span></p>
<p>
<p><span style="font-family: 宋体">第四步：仍然是</span>config.xml<span style="font-family: 宋体">，找到</span>&lt;data-sources&gt;<span style="font-family: 宋体">项，默认内容为空，把此项内容修改为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource"&gt;<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; &lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;<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; &lt;dburl&gt;jdbc:mysql://127.0.0.1/<span style="color: blue">mail&lt;/dburl&gt;<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; &lt;user&gt;root&lt;/user&gt;<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; &lt;password&gt;&lt;/password&gt;<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; &lt;max&gt;20&lt;/max&gt;<br />
            &lt;/data-source&gt;</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">或打开文件下面实例的</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释</span></p>
<p>&lt;driver&gt;<span style="font-family: 宋体">是指</span>MySQL<span style="font-family: 宋体">的</span>JDBC<span style="font-family: 宋体">驱动，注意这个默认的</span>&lt;driver&gt;<span style="font-family: 宋体">是有问题的，要改成</span>MySQL<span style="font-family: 宋体">的驱动程序中</span>Driver.class<span style="font-family: 宋体">的路径，即：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">&lt;driver&gt;com.mysql.jdbc.Driver&lt;/driver&gt; </span></span>
<p>&lt;dburl&gt;<span style="font-family: 宋体">指数据库的访问路径，</span>IP<span style="font-family: 宋体">后的</span><span style="color: blue">mail</span><span style="font-family: 宋体">即</span>MySQL<span style="font-family: 宋体">中<span style="color: blue">新建数据库名</span>，接下来是用户名、密码及最大连接数。</span></p>
<p>
<p><span style="font-family: 宋体">再次启动时，</span>james<span style="font-family: 宋体">将在</span>mail<span style="font-family: 宋体">数据库中自动创建有关用户的表格。</span></p>
<p>
<p><span style="font-family: 宋体">至此，数据库配置完成，启动</span>James<span style="font-family: 宋体">，若正常无误，请通过</span>telnet<span style="font-family: 宋体">添加一个新用户，比如</span>adduser holen 123456<span style="font-family: 宋体">，然后检查</span>MySQL<span style="font-family: 宋体">中的</span>mail<span style="font-family: 宋体">数据库，下面将有一个表</span>users<span style="font-family: 宋体">，这是</span>James<span style="font-family: 宋体">根据</span>file://conf/sqlResources.xml<span style="font-family: 宋体">的内容创建的。</span></p>
<p><span style="font-family: 宋体">通过以上配置，</span>James<span style="font-family: 宋体">的用户信息就可以保存在数据库中了。</span></p>
<p><span style="font-family: 宋体">注：修改以前的账户会丢失！</span></p>
<p>
<p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">一、FAQ</p>
<p><span style="color: blue">1</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue; font-family: 宋体">在启动</span><span style="color: blue">james</span><span style="color: blue; font-family: 宋体">时，提示</span><span style="color: blue">POP3</span><span style="color: blue; font-family: 宋体">或</span><span style="color: blue">SMTP</span><span style="color: blue; font-family: 宋体">不能使用？</span>
<p><span style="font-family: 宋体">请检查一下，看&#8220;管理工具—</span>&gt;<span style="font-family: 宋体">服务&#8221;里面，是不是启动了别的邮件服务器，已将</span>110<span style="font-family: 宋体">或</span>25<span style="font-family: 宋体">端口占用了。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">实例：</span></p>
<p style="margin-left: 35.9pt">james<span style="font-family: 宋体">前台直接运行时出错：</span></p>
<p style="margin-left: 35.9pt">ERROR&nbsp;&nbsp; 2005-08-25 08:58:38.642 [Phoenix.] (): Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt">ERROR&nbsp;&nbsp; 2005-08-25 08:58:38.652 [Phoenix.] (): There was an error running phase "startup" for Block named "smtpserver". (Reason: Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt">org.apache.excalibur.containerkit.lifecycle.LifecycleException: Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">原因：</span></p>
<p style="margin-left: 35.9pt">&nbsp;james<span style="font-family: 宋体">默认设置不允许在同一台机器上跑两个邮件服务器进程。必须关掉另一个！</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">检测方法：</span></p>
<p style="margin-left: 35.9pt">console<span style="font-family: 宋体">界面下：</span></p>
<p style="margin-left: 35.9pt">&nbsp;d:&gt; telnet <span style="font-family: 宋体">主机名</span> 25<span style="font-family: 宋体">（或</span>110<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">如果可以登录，出现</span></p>
<p style="margin-left: 35.9pt">&nbsp;220 <span style="font-family: 宋体">主机名</span> Microsoft ESMTP MAIL Service, Version: 6.0.2600.1106 ready at&nbsp;Thu,</p>
<p style="margin-left: 35.9pt">&nbsp;25 Aug 2005 14:14:36 +0800</p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">则说明此机器上已有一台邮件服务器在运行。</span></p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">解决：</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">检查</span>Windows<span style="font-family: 宋体">上运行服务：</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">跨网传输电子邮件的服务</span>Simple Mail Transfer Protocol (SMTP)<span style="font-family: 宋体">，是否启动</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">如启动关闭之！</span></p>
<p>
<p><span style="color: blue">2</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue"> JAVA_HOME</span><span style="color: blue; font-family: 宋体">找不到？</span>
<p><span style="font-family: 宋体">请在</span>run.bat<span style="font-family: 宋体">中指定</span>JAVA_HOME<span style="font-family: 宋体">，若还不行，请在&#8220;我的电脑—</span>&gt;<span style="font-family: 宋体">系统—</span>&gt;<span style="font-family: 宋体">高级—</span>&gt;<span style="font-family: 宋体">环境变量&#8221;中添加一项</span>JAVA_HOME<span style="font-family: 宋体">。</span></p>
<p>
<p><span style="color: blue">3</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue; font-family: 宋体">服务器启动正常，但客户端不能收发邮件？</span>
<p><span style="font-family: 宋体">请检查客户端配置是否正常，参照前面所讲，另外，请检查</span>james<span style="font-family: 宋体">下的</span>config.xml<span style="font-family: 宋体">，是否把</span>localhost<span style="font-family: 宋体">改成了机器名。</span></p>
<p>
<p><span style="color: blue">4</span><span style="color: blue; font-family: 宋体">、修改为数据库储存后，</span><span style="color: blue">james</span><span style="color: blue; font-family: 宋体">启动出错：</span>
<p><span style="font-family: 宋体">一般是数据库驱动有错。检查一下</span></p>
<p>&lt;data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource"&gt;<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; <strong><span style="color: blue">&lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;</strong><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; &lt;dburl&gt;jdbc:mysql://127.0.0.1/mail&lt;/dburl&gt;<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; &lt;user&gt;root&lt;/user&gt;<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; &lt;password&gt;&lt;/password&gt;<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; &lt;max&gt;20&lt;/max&gt;<br />
&lt;/data-source&gt;</span></p>
<p><span style="font-family: 宋体">的</span><strong><span style="color: blue">&lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;</span></strong><span style="font-family: 宋体">是否对</span></p><img src ="http://www.blogjava.net/rain1102/aggbug/153314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-10-16 16:42 <a href="http://www.blogjava.net/rain1102/archive/2007/10/16/153314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache2.2.4 + php5.2.3 安装配置，增加连接mysql功能(转载)</title><link>http://www.blogjava.net/rain1102/archive/2007/08/30/141422.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 30 Aug 2007 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/08/30/141422.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/141422.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/08/30/141422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/141422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/141422.html</trackback:ping><description><![CDATA[碰上的问题，，访问php页面时出现　403 forbidden 错误。　　修改Deny from all　成　<span style="COLOR: rgb(255,0,255)">Allow from all&nbsp; </span><br><br><br>1.安装apache2.2.4<br>2.下载并解压 php5.2.3 &nbsp; win-zip包<br>3.设置　apache 配置文件 httpd.conf 文件<br>a.修改web服务器根目录　DocumentRoot&nbsp; D:\Apache2.2\htdocs&nbsp; 成　DocumentRoot "<span style="COLOR: rgb(255,0,255)">D:/webroot</span>"<br>b.修改　&lt;Directory "D:\Apache2.2\htdocs"&gt;&nbsp;&nbsp; 成 &lt;Directory "<span style="COLOR: rgb(255,0,255)">D:/webroot</span>"&gt;<br>c.修改<br>&lt;Directory /&gt;<br>&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br>&nbsp;&nbsp;&nbsp; AllowOverride None<br>&nbsp;&nbsp;&nbsp; Order deny,allow<br>&nbsp;&nbsp;&nbsp; Deny from all<br>&nbsp;&nbsp;&nbsp; Satisfy all<br>&lt;/Directory&gt;<br><br>成　<br>&lt;Directory /&gt;<br>&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br>&nbsp;&nbsp;&nbsp; AllowOverride None<br>&nbsp;&nbsp;&nbsp; Order deny,allow<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: rgb(255,0,255)">Allow from all</span><br>&nbsp;&nbsp;&nbsp; Satisfy all<br>&lt;/Directory&gt;<br>　　　　<br><br>d.添加　php功能<br>ScriptAlias /php/ "D:/php5.2.3/"<br>Action application/x-httpd-php "/php/php-cgi.exe"<br>AddType application/x-httpd-php .php<br><br>4.设置系统环境变量<br>&nbsp; path 添加　;D:\php5.2.3;D:\php5.2.3\ext<br>5. 添加访问mysql功能<br>&nbsp;&nbsp;&nbsp; a.去除　extension=php_mysql.dll　前面的 ;号<br>　b.修改extension_dir 到 php ext目录，如： extension_dir = "D:/php5.2.3/ext/"&nbsp;&nbsp; <br><br>6.运行测试代码<br><br>
<div class=example-contents style="BACKGROUND-COLOR: rgb(192,192,192)">
<div class=phpcode><code><span class=html><span class=default>&lt;?php<br></span><span class=comment>// 连接，选择数据库<br></span><span class=default>$link </span><span class=keyword>= </span><span class=default>mysql_connect</span><span class=keyword>(</span><span class=string>'mysql_host'</span><span class=keyword>, </span><span class=string>'mysql_user'</span><span class=keyword>, </span><span class=string>'mysql_password'</span><span class=keyword>)<br>&nbsp;&nbsp;&nbsp; or die(</span><span class=string>'Could not connect: ' </span><span class=keyword>. </span><span class=default>mysql_error</span><span class=keyword>());<br>echo </span><span class=string>'Connected successfully'</span><span class=keyword>;<br></span><span class=default>mysql_select_db</span><span class=keyword>(</span><span class=string>'my_database'</span><span class=keyword>) or die(</span><span class=string>'Could not select database'</span><span class=keyword>);<br><br></span><span class=comment>// 执行 SQL 查询<br></span><span class=default>$query </span><span class=keyword>= </span><span class=string>'SELECT * FROM my_table'</span><span class=keyword>;<br></span><span class=default>$result </span><span class=keyword>= </span><span class=default>mysql_query</span><span class=keyword>(</span><span class=default>$query</span><span class=keyword>) or die(</span><span class=string>'Query failed: ' </span><span class=keyword>. </span><span class=default>mysql_error</span><span class=keyword>());<br><br></span><span class=comment>// 用 HTML 显示结果<br></span><span class=keyword>echo </span><span class=string>"&lt;table&gt;\n"</span><span class=keyword>;<br>while (</span><span class=default>$line </span><span class=keyword>= </span><span class=default>mysql_fetch_array</span><span class=keyword>(</span><span class=default>$result</span><span class=keyword>, </span><span class=default>MYSQL_ASSOC</span><span class=keyword>)) {<br>&nbsp;&nbsp;&nbsp; echo </span><span class=string>"\t&lt;tr&gt;\n"</span><span class=keyword>;<br>&nbsp;&nbsp;&nbsp; foreach (</span><span class=default>$line </span><span class=keyword>as </span><span class=default>$col_value</span><span class=keyword>) {<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; echo </span><span class=string>"\t\t&lt;td&gt;$col_value&lt;/td&gt;\n"</span><span class=keyword>;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; echo </span><span class=string>"\t&lt;/tr&gt;\n"</span><span class=keyword>;<br>}<br>echo </span><span class=string>"&lt;/table&gt;\n"</span><span class=keyword>;<br><br></span><span class=comment>// 释放结果集<br></span><span class=default>mysql_free_result</span><span class=keyword>(</span><span class=default>$result</span><span class=keyword>);<br><br></span><span class=comment>// 关闭连接<br></span><span class=default>mysql_close</span><span class=keyword>(</span><span class=default>$link</span><span class=keyword>);<br></span><span class=default>?&gt;</span> </span></code></div>
</div><img src ="http://www.blogjava.net/rain1102/aggbug/141422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-08-30 16:18 <a href="http://www.blogjava.net/rain1102/archive/2007/08/30/141422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP5.2.3安装( 转载)</title><link>http://www.blogjava.net/rain1102/archive/2007/08/30/141394.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 30 Aug 2007 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/08/30/141394.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/141394.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/08/30/141394.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/141394.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/141394.html</trackback:ping><description><![CDATA[<div><strong>第一步、安装&nbsp;Apache&nbsp;2.2.4</strong>　　从&nbsp;<a href="http://httpd.apache.org/" target=_blank>http://httpd.apache.org</a>　也就是&nbsp;apache&nbsp;httpd&nbsp;的官方站上把&nbsp;apache&nbsp;httpd&nbsp;win32&nbsp;安装包给下载下来。&nbsp;<br>　　下载地址：&nbsp;<br>　　<a href="http://apache.justdn.org/httpd/binaries/win32/apache_2.2.4-win32-x86-no_ssl.msi" target=_blank>http://apache.justdn.org/httpd/binaries/win32/......-x86-no_ssl.msi</a>&nbsp;<br>　　之后就可以进行安装了。假设安装在&nbsp;D:\Program&nbsp;Files\Apache&nbsp;Software&nbsp;Foundation\Apache2.2&nbsp;<br><br>　　<strong>第二步、下载&nbsp;PHP&nbsp;5.2.1</strong>&nbsp;<br>　　从&nbsp;<a href="http://www.php.net/" target=_blank></a><a href="http://www.php.net/" target=_blank>www.php.net</a>&nbsp;下载&nbsp;PHP&nbsp;5.2.3&nbsp;的&nbsp;win32&nbsp;包，我个人喜欢使用&nbsp;PHP&nbsp;5.2.3&nbsp;zip&nbsp;package，而不喜欢使用&nbsp;PHP&nbsp;5.2.3&nbsp;installer，因为我觉得使用&nbsp;PHP&nbsp;5.2.3&nbsp;zip&nbsp;package&nbsp;便于以后升级。&nbsp;<br>　　下载地址：&nbsp;<br>　　<a href="http://cn.php.net/get/php-5.2.3-Win32.zip/from/this/mirror" target=_blank>http://cn.php.net/get/php-5.2.3-Win32.zip/from/this/mirror</a>&nbsp;<br>　　将下载完的&nbsp;php-5.2.1-Win32.zip&nbsp;文件解压缩到&nbsp;D:\Program&nbsp;Files\PHP&nbsp;目录，将该目录下的&nbsp;php.ini-dist&nbsp;更名为&nbsp;php.ini。&nbsp;<br><br>　　<strong>第三步，配置&nbsp;Apache&nbsp;2.2.4</strong>&nbsp;<br>　　打开目录：D:\Program&nbsp;Files\Apache&nbsp;Software&nbsp;Foundation\Apache2.2\conf\extra&nbsp;<br>　　新建一个名为：httpd-php5.conf&nbsp;的文本文件，用记事本打开，添加以下内容&nbsp;<br><br>LoadModule&nbsp;php5_module&nbsp;"D:\Program&nbsp;Files\PHP\php5apache2_2.dll"&nbsp;<br><br>AddType&nbsp;application/x-httpd-php&nbsp;.php&nbsp;<br>AddType&nbsp;application/x-httpd-php-source&nbsp;.phps&nbsp;<br><br>DirectoryIndex&nbsp;index.php&nbsp;<br><br>PHPIniDir&nbsp;"D:\Program&nbsp;Files\PHP"&nbsp;<br><br>　　然后用记事本打开：D:\Program&nbsp;Files\Apache&nbsp;Software&nbsp;Foundation\Apache2.2\conf\httpd.conf&nbsp;<br>　　在文件末尾添加一行：&nbsp;<br><br>Include&nbsp;conf/extra/httpd-php5.conf&nbsp;<br><br>　　<strong>第四步，测试</strong>&nbsp;<br>　　重新启动&nbsp;Apache，打开目录：D:\Program&nbsp;Files\Apache&nbsp;Software&nbsp;Foundation\Apache2.2\htdocs&nbsp;<br>　　新建文件：index.php&nbsp;<br>　　输入内容：&nbsp;<br><br>代码:&lt;?php<br>phpinfo();<br>?&gt;<br></div><img src ="http://www.blogjava.net/rain1102/aggbug/141394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-08-30 15:18 <a href="http://www.blogjava.net/rain1102/archive/2007/08/30/141394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows上安装apache2.0.59 + svn1.4.0 + 自动邮件通知(转载)</title><link>http://www.blogjava.net/rain1102/archive/2007/05/18/118256.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 18 May 2007 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2007/05/18/118256.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/118256.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2007/05/18/118256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/118256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/118256.html</trackback:ping><description><![CDATA[前几天写了linux版的，受广大论友的邀请，特写此windows的版本，希望大家能够共同为此论坛作出贡献，也希望越来越多的人能够更加方便地使用SVN。<br><br>OS: Windows XP SP2<br><br>1) 安装Apache Server<br>2) 安装SVN<br>3) 配置邮件通知以及修改log权限<br><br>1. 安装apache2.0.59,从这里可以下载到<a href="http://apache.justdn.org/httpd/binaries/win32/apache_2.2.3-win32-x86-no_ssl.msi" target=_blank><u><font color=#0000ff>http://apache.justdn.org/httpd/binaries/win32/apache_2.2.3-win32-x86-no_ssl.msi</font></u></a><br>安装过程中设置以下参数：<br>Network Domain: localhost<br>Server name: localhost<br>Administrator's Emai Address: <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#105;&#110;&#100;&#121;&#109;&#97;&#120;&#64;&#49;&#50;&#54;&#46;&#99;&#111;&#109;"><u><font color=#0000ff>windymax@126.com</font></u></a><br>安装到默认路径为C:\Program Files\Apache Group\Apache2<br><br>2. 安装subversion1.4.0,从这里下载<a href="http://www.iusesvn.com/bbs/download/svn-win32-1.4.0.zip" target=_blank><u><font color=#0000ff>http://www.iusesvn.com/bbs/download/svn-win32-1.4.0.zip</font></u></a><br>安装到默认路径为C:\Program Files\Subversion<br>默认安装后，在apache的配置文件中会自动加入以下两行。<br>LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so"<br>LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so"<br>把这行的注释去掉<br>LoadModule dav_fs_module modules/mod_dav_fs.so<br><br>拷贝C:\Program Files\Subversion\bin下的libdb44.dll到这个目录下C:\Program Files\Apache Group\Apache2\bin<br>打开apache的配置文件在末尾处加入以下参数：<br>&lt;Location /svn&gt;<br>DAV svn<br>SVNPath d:\svndata\test<br>AuthType Basic<br>AuthName "Windy SVN"<br>AuthUserFile d:\svndata\test\passwd<br>Require valid-user<br>&lt;/Location&gt;<br>保存。(在这里权限文件我不多讲了，大家多做实验就明白了)<br><br>建立仓库<br>打开CMD命令行界面，"开始" -&gt; "运行" -&gt; "cmd" -&gt; "回车"<br>C:\Documents and Settings\windy&gt; d:&nbsp; &nbsp;//进入D盘(因为我们要在D盘下创建仓库)<br>D:\&gt; md svndata&nbsp; &nbsp;//创建一个名叫svndata的目录<br>D:\&gt; c:&nbsp; &nbsp;//进入C盘<br>C:\Documents and Settings\windy&gt; cd\&nbsp; &nbsp;//退到C盘根目录<br>C:\Documents and Settings\windy&gt; cd C:\Program Files\Subversion\bin&nbsp;&nbsp;//进入subversion/bin目录<br>C:\Program Files\Subversion\bin&gt; svnadmin create d:\svndata\test&nbsp; &nbsp;//用svnadmin命令创建名为test的仓库(这条命令成功后，在test下会出现很多文件夹和文件)<br>C:\Program Files\Subversion\bin&gt; cd C:\Program Files\Apache Group\Apache2\bin&nbsp; &nbsp;//进入apache\bin目录<br>C:\Program Files\Apache Group\Apache2\bin&gt; htpasswd -cm d:\svndata\test\passwd user1&nbsp; &nbsp;//用htpasswd命令创建第一个用户(user1)，同时生成密码认证文件，c参数为create,m参数为MD5加密方式<br>New password: ******<br>Re-type new password: ******<br>Adding password for user user1&nbsp; &nbsp;//加入用户成功<br>C:\Program Files\Apache Group\Apache2\bin&gt; htpasswd -m d:\svndata\test\passwd user2&nbsp; &nbsp;//用htpasswd命令创建第二个用户(user2),注意如果在这时加入c参数会覆盖掉之前创建的用户及文件。<br>New password: ******<br>Re-type new password: ******<br>Adding password for user user2&nbsp; &nbsp;//加入用户成功<br><br>重新启动apache，进行测试。<br>用IE打开<a href="http://localhost/svn" target=_blank><u><font color=#0000ff>http://localhost/svn</font></u></a>，这时应该可以看到<br>Revision 0: /<br>--------------------------------------------------------------------------------<br>Powered by Subversion version 1.4.0 (r21228).&nbsp; &nbsp; //说明我们已经配置成功了<br><br>3. 配置邮件通知以及修改log权限<br>下载所需要的软件包<br>--在这里下载<a href="http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.819-MSWin32-x86-267479.msi" target=_blank><u><font color=#0000ff>http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.819-MSWin32-x86-267479.msi</font></u></a>到D盘根目录下。<br>--下载<a href="http://download.microsoft.com/download/vc15/patch/1.52/w95/en-us/nmake15.exe" target=_blank><u><font color=#0000ff>http://download.microsoft.com/download/vc15/patch/1.52/w95/en-us/nmake15.exe</font></u></a>到D盘根目录下。<br>--下载<a href="http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Module-Build-0.2805.tar.gz" target=_blank><u><font color=#0000ff>http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Module-Build-0.2805.tar.gz</font></u></a>到D盘根目录下，将Module-Build-0.2805.tar.gz解压到D盘。<br>--下载<a href="http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.10.tar.gz" target=_blank><u><font color=#0000ff>http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.10.tar.gz</font></u></a>到D盘根目录下，将Authen-SASL-2.10.tar.gz解压到D盘。<br>--下载<a href="http://search.cpan.org/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz" target=_blank><u><font color=#0000ff>http://search.cpan.org/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz</font></u></a>到D盘根目录下，将Net-SMTP_auth-0.08.tar.gz解压到D盘。<br>--下载<a href="http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/SVN-Notify-2.64.tar.gz" target=_blank><u><font color=#0000ff>http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/SVN-Notify-2.64.tar.gz</font></u></a>到D盘根目录下，将SVN-Notify-2.64.tar.gz解压到D盘。<br><br>开始安装Perl以及模块<br>--安装Active Perl，一路默认安装，默认路径为C:\Perl<br>--测试perl是否正常工作(这步很关键)<br>&nbsp;&nbsp;打开CMD命令行界面，"开始" -&gt; "运行" -&gt; "cmd" -&gt; "回车"<br>&nbsp; &nbsp;C:\Documents and Settings\windy&gt; perl&nbsp; &nbsp;//如果没有报错，说明已经正常工作，因为安装perl时，安装程序会自动设置好环境perl(如果在系统环境变量中没有自动添加，需手动添加perl变量环境)，具体做法是：<br>&nbsp;&nbsp;"回到桌面" -&gt; "鼠标右键我的电脑" -&gt; "属性" -&gt; "高级" -&gt; "环境变量" -&gt; "系统变量中Path最前面中添加C:\Perl\bin\;" -&gt;"完成"。&nbsp; &nbsp;//测试，如果报错，请重新启动电脑后进行测试。<br>--将nmake15.exe改名为nmake.exe后拷贝到c:\windows\system32目录下。<br>--测试nmake是否是否正常工作(这步很关键)<br>&nbsp;&nbsp;打开CMD命令行界面，"开始" -&gt; "运行" -&gt; "cmd" -&gt; "回车"<br>&nbsp; &nbsp;C:\Documents and Settings\windy&gt; nmake&nbsp; &nbsp;<br>&nbsp;&nbsp;Microsoft (R) Program Maintenance Utility&nbsp; &nbsp;Version 1.50<br>&nbsp;&nbsp;Copyright (c) Microsoft Corp 1988-94. All rights reserved.&nbsp; &nbsp;//说明nmake已经正常工作<br>--安装Module-Build模块<br>&nbsp;&nbsp;打开CMD命令行界面，"开始" -&gt; "运行" -&gt; "cmd" -&gt; "回车"<br>&nbsp;&nbsp;C:\Documents and Settings\windy&gt; d:<br>&nbsp;&nbsp;D:\&gt; cd Module-Build-0.2805<br>&nbsp;&nbsp;D:\Module-Build-0.2805&gt; perl Build.PL&nbsp; &nbsp;//收集系统环境变量<br>&nbsp;&nbsp;D:\Module-Build-0.2805&gt; Build&nbsp; &nbsp;//进行编译<br>&nbsp;&nbsp;D:\Module-Build-0.2805&gt; Build test&nbsp; &nbsp;//测试<br>&nbsp;&nbsp;D:\Module-Build-0.2805&gt; Build install&nbsp; &nbsp;//编译后安装&nbsp;&nbsp;<br>--安装Perl模块Authen::SASL，进入Authen-SASL-2.10目录，首先开打Makefile.PL<br>&nbsp;&nbsp;打开CMD命令行界面，"开始" -&gt; "运行" -&gt; "cmd" -&gt; "回车"<br>&nbsp;&nbsp;C:\Documents and Settings\windy&gt; d:<br>&nbsp;&nbsp;D:\&gt; cd Authen-SASL-2.10<br>&nbsp;&nbsp;D:\Authen-SASL-2.10&gt; perl Makefile.PL&nbsp; &nbsp;//收集系统环境变量<br>&nbsp;&nbsp;出现选择安装提示，y和n先后安装一次<br>&nbsp;&nbsp;D:\Authen-SASL-2.10&gt; nmake&nbsp; &nbsp;//进行编译<br>&nbsp;&nbsp;D:\Authen-SASL-2.10&gt; nmake test&nbsp;&nbsp;//进行测试<br>&nbsp;&nbsp;D:\Authen-SASL-2.10&gt; nmake install&nbsp; &nbsp;//编译后安装<br>--安装Perl模块Net::SMTP_auth<br>&nbsp;&nbsp;打开CMD命令行界面，"开始" -&gt; "运行" -&gt; "cmd" -&gt; "回车"<br>&nbsp;&nbsp;C:\Documents and Settings\windy&gt; d:<br>&nbsp;&nbsp;D:\&gt; cd Net-SMTP_auth-0.08<br>&nbsp;&nbsp;D:\Net-SMTP_auth-0.08&gt; perl Makefile.PL&nbsp; &nbsp;//收集系统环境变量<br>&nbsp;&nbsp;D:\Net-SMTP_auth-0.08&gt; nmake&nbsp; &nbsp;//进行编译<br>&nbsp;&nbsp;D:\Net-SMTP_auth-0.08&gt; nmake test&nbsp; &nbsp;//测试<br>&nbsp;&nbsp;D:\Net-SMTP_auth-0.08&gt; nmake install&nbsp; &nbsp;//编译后安装<br>--安装Perl模块SVN::Notify<br>&nbsp;&nbsp;打开CMD命令行界面，"开始" -&gt; "运行" -&gt; "cmd" -&gt; "回车"<br>&nbsp;&nbsp;C:\Documents and Settings\windy&gt; d:<br>&nbsp;&nbsp;D:\&gt; cd SVN-Notify-2.64<br>&nbsp;&nbsp;D:\SVN-Notify-2.64&gt; perl Build.PL&nbsp; &nbsp;//收集系统环境变量<br>&nbsp;&nbsp;D:\SVN-Notify-2.64&gt; Build&nbsp; &nbsp;//进行编译<br>&nbsp;&nbsp;D:\SVN-Notify-2.64&gt; Build test&nbsp; &nbsp;//测试<br>&nbsp;&nbsp;D:\SVN-Notify-2.64&gt; Build installl&nbsp; &nbsp;//编译后安装&nbsp;&nbsp;<br>--安装完毕。<br><br>设置邮件通知<br>--拷贝post-commit.tmpl为post-commit.bat<br>--删除末尾参数，增加下面参数：<br>set REPOS=%1<br>set REV=%2<br>SET PATH=C:\PERL\BIN;<br>SET OS=Windows_NT<br>SET SystemRoot=C:\WINDOWS<br>svnnotify --repos-path %REPOS% -r %REV% --to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#105;&#110;&#100;&#121;&#64;&#49;&#50;&#54;&#46;&#99;&#111;&#109;"><u><font color=#0000ff>windy@126.com</font></u></a> --smtp smtp.126.com -H HTML::ColorDiff -d --subject-prefix [Windy SVN]<br>//--to要跟你要发送给谁的邮件地址，--smtp后跟你自已的邮件服务器地址，比如mail.126.com<br><br>设置log可以修改<br>--拷贝pre-revprop-change.tmpl为pre-revprop-change.bat<br>--删除末尾参数，增加下面参数：<br>REM SVN pre-revprop-change hook allows edit of logmessages from TSVN <br><br>setlocal<br>set REPOS=%1<br>set REV=%2<br>set USER=%3<br>set PROPNAME=%4<br>set ACTION=%5<br><br>if&nbsp;&nbsp;not "%ACTION%"=="M" goto refuse<br>if&nbsp;&nbsp;not "%PROPNAME%"=="svn:log" goto refuse<br>goto OK<br><br>:refuse<br>echo Cann't set %PROPNAME%/%ACTION%, only svn:log is allowed 1&gt;&amp;2<br>endlocal<br>exit 1<br><br>:OK<br>endlocal<br>exit 0<br><br>完成所有设置，开始测试。<br><img src ="http://www.blogjava.net/rain1102/aggbug/118256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-05-18 10:01 <a href="http://www.blogjava.net/rain1102/archive/2007/05/18/118256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat+JSP经典配置实例</title><link>http://www.blogjava.net/rain1102/archive/2006/11/22/82663.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 22 Nov 2006 01:02:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/11/22/82663.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/82663.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/11/22/82663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/82663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/82663.html</trackback:ping><description><![CDATA[出处：http://www.webjx.com <!-- #EndEditable --><table height="65" cellspacing="0" cellpadding="0" width="760" align="center" border="0"><tbody><tr><td class="content" height="65"><!-- #BeginEditable "3" --><table class="content" width="100%" align="center" border="0"><tbody><tr><td class="content"><p>经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题，于是总结了一下如何tomcat下配置jsp、servlet和ben，希望对那些初学者有所帮助。</p><p><strong>一、开发环境配置</strong></p><p><strong>第一步：</strong>下载j2sdk和tomcat：到sun官方站（http://java.sun.com/j2se/1.5.0/download.jsp）下载j2sdk，注意下载版本为Windows Offline Installation的SDK，同时最好下载J2SE 1.5.0 Documentation，然后到tomcat官方站点（http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi）下载tomcat（下载最新5.5.9版本的tomcat）；</p><p><strong>第二步：</strong>安装和配置你的j2sdk和tomcat：执行j2sdk和tomcat的安装程序，然后按默认设置进行安装即可。</p><p>1.安装j2sdk以后，需要配置一下环境变量，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.5.0）：</p><p>JAVA_HOME=c:\j2sdk1.5.0<br />　classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;（.;一定不能少，因为它代表当前路径)<br />　path=%JAVA_HOME%\bin</p><p>接着可以写一个简单的java程序来测试J2SDK是否已安装成功：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">public class Test{<br />public static void main(String args[]){<br />System.out.println("This is a test program.");<br />}<br />}</td></tr></tbody></table><p>将上面的这段程序保存为文件名为Test.java的文件。</p><p>然后打开命令提示符窗口，cd到你的Test.java所在目录，然后键入下面的命令</p><p>javac Test.java<br />　<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Test</p><p>此时如果看到打印出来This is a test program.的话说明安装成功了，如果没有打印出这句话，你需要仔细检查一下你的配置情况。</p><p>2.安装Tomcat后，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat)：</p><p>CATALINA_HOME=c:\tomcat<br />　CATALINA_BASE=c:\tomcat</p><p>然后修改环境变量中的classpath，把tomat安装目录下的common\lib下的(可以根据实际追加)servlet.jar追加到classpath中去，修改后的classpath如下：</p><p>classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;</p><p>接着可以启动tomcat，在IE中访问http://localhost:8080，如果看到tomcat的欢迎页面的话说明安装成功了。</p><p><strong>第三步：建立自己的jsp app目录</strong></p><p>1.到Tomcat的安装目录的webapps目录，可以看到ROOT，examples, tomcat-docs之类Tomcat自带的的目录；<br />　2.在webapps目录下新建一个目录，起名叫myapp；<br />　3.myapp下新建一个目录WEB-INF，注意，目录名称是区分大小写的；<br />　4.WEB-INF下新建一个文件web.xml，内容如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />&lt;web-app&gt;<br />&lt;display-name&gt;My Web Application&lt;/display-name&gt;<br />&lt;description&gt;<br />A application for test.<br />&lt;/description&gt;<br />&lt;/web-app&gt;</td></tr></tbody></table><p>5.在myapp下新建一个测试的jsp页面，文件名为index.jsp，文件内容如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;html&gt;&lt;body&gt;&lt;center&gt;<br />Now time is: &lt;%=new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Date()%&gt;<br />&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;</td></tr></tbody></table><p>6.重启Tomcat</p><p>7.打开浏览器，输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。</p><p><strong>第四步：</strong>建立自己的Servlet：</p><p>1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个servlet程序，文件名为Test.java，文件内容如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">package test;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.PrintWriter;<br />import javax.servlet.ServletException;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />public class Test extends HttpServlet {<br />protected void doGet(HttpServletRequest request, HttpServletResponse response)<br />throws ServletException, IOException {<br />PrintWriter out=response.getWriter();<br />out.println("&lt;html&gt;&lt;body&gt;&lt;h1&gt;This is a servlet test.&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;");<br />out.flush();<br />}<br />}</td></tr></tbody></table><p>2 .编译<br />　将Test.java放在c:\test下，使用如下命令编译：</p><p>C:\Test&gt;javac Test.java</p><p>然后在c:\Test下会产生一个编译后的servlet文件：Test.class</p><p>3 .将结构test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下，也就是剪切那个test目录到classes目录下，如果classes目录不存在，就新建一个。 现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结构</p><p>4 .修改webapps\myapp\WEB-INF\web.xml，添加servlet和servlet-mapping</p><p>编辑后的web.xml如下所示，红色为添加的内容:</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />&lt;web-app&gt;<br />&lt;display-name&gt;My Web Application&lt;/display-name&gt;<br />&lt;description&gt;<br />A application for test.<br />&lt;/description&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;display-name&gt;Test&lt;/display-name&gt;<br />&lt;description&gt;A test Servlet&lt;/description&gt;<br />&lt;servlet-class&gt;test.Test&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/Test&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;/web-app&gt;</td></tr></tbody></table><p>这段话中的servlet这一段声明了你要调用的Servlet，而servlet-mapping则是将声明的servlet"映射"到地址/Test上</p><p>5 .好了，重启动Tomcat，启动浏览器，输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.就说明编写的servlet成功了。</p><p>注意：修改了web.xml以及新加了class，都要重启Tomcat</p><p><strong>第四步：</strong>建立自己的Bean：</p><p>1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个java程序，文件名为TestBean.java，文件内容如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">package test;<br />public class TestBean{<br />private String name = null;<br />public TestBean(String strName_p){<br />this.name=strName_p;<br />}<br />public void setName(String strName_p){<br />this.name=strName_p;<br />}<br />public String getName(){<br />return this.name;<br />}<br />}</td></tr></tbody></table><p>2 .编译</p><p>将TestBean.java放在c:\test下，使用如下命令编译：</p><p>C:\Test&gt;javac TestBean.java</p><p>然后在c:\Test下会产生一个编译后的bean文件：TestBean.class</p><p>3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下，</p><p>4 .新建一个TestBean.jsp文件，文件内容为：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;%@ page import="test.TestBean" %&gt;<br />&lt;html&gt;&lt;body&gt;&lt;center&gt;<br />&lt;%<br />TestBean testBean=new TestBean("This is a test <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> bean.");<br />%&gt;<br /><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> bean name is: &lt;%=testBean.getName()%&gt;<br />&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;</td></tr></tbody></table><p>5 .好了，重启Tomcat，启动浏览器，输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> bean.就说明编写的Bean成功了。</p><p>这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码，自己多动手写代码以增强自己在这方面开发的能力了。</p><p>jvm应填写到<br />　c:\j2sdk\bin</p><p>给你一个简单的配置：：：：</p><p>JSP环境配置心得</p><p>首先要说的是，使用jdk+tomcat完全可以配置我们的jsp服务器，不再需要其实任何东东，有很多文章介绍了Apache，其实根本用不着，一般的学习调试tomcat完全可以胜任了。</p><p>安装jdk后，tomcat在安装之前会自动找到jdk的安装路径，一路点击"下一步"，经过一段时间的文件复制，最后"close"，完成comcat的安装。</p><p>您最好去下载一个版本较高的tomcat，比如4.1以上的，因为它不需要设置太多的系统变量，右击"我的电脑"，选择"属性"-&gt;"高级"-&gt;"环境变量"-&gt;"系统变量"，新建一个TOMCAT_HOME，值设置成你的tomcat所在的路径，比如：D:\Program Files\Apache Group\Tomcat 5.5，配置完成。</p><p>从开始菜单中找到tomcat选项，一般打开顺序是：开始-&gt;程序-&gt;Apache Tomcat 5.5，选择"Start Tomcat"，让jsp服务器开始运行，此时会打开一个类似Dos的窗口，会显示一些相关的信息。</p><p>如果您使用代理上网，一定要先撤掉代理，不然您的jsp程序永远也得不到执行。如果不是代理的，这一步就跳过了。</p><p>打开浏览器，在地址栏中输入：http://localhost:8080，如果看到有老虎（我也不知道是老虎还是猫）的画面，恭喜您，您成功了一半。</p><p>先来享受一下成功的喜悦吧，请输入下面的代码：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;First Page&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;H3&gt;Today is: h<br />&lt;%= new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Date() %&gt;<br />&lt;/H3&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</td></tr></tbody></table><p>将该程序保存为:First.jsp，放到Tomcat的ROOT目录下，然后在浏览器的地址栏中输入：http://localhost:8080/First.jsp，(First.jsp跟我们保存的文件名的大小写要一致)回车，如果不出意外，应该可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的结果。</p><p>注意：ROOT是tomcat的默认虚拟目录，如果要改成自己的虚拟目录怎么办呢？请继续往下看吧。</p><p>要改成自己的虚拟目录，就要请出server.xml来了，该文件是一个配置文件，在Tomcat\conf目录下，使用任何文本编辑软件都能打开它，我们先找到下面一句：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector"<br />port="8080" minProcessors="5" maxProcessors="75"<br />enableLookups="true" redirectPort="8443"<br />acceptCount="100" debug="0" connectionTimeout="20000"<br />useURIValidationHack="false" disableUploadTimeout="true" /&gt;</td></tr></tbody></table><p>这里的port="8080"就是端口，我们完全可以用别的端口来代替，但不能是被系统占用的端口（0--1023），这里简单提一下。</p><p>下面我们再往下找，会发现以下的语句：</p><p>&lt;/Context&gt;<br />　&lt;/Host&gt;</p><p>我们就应该找到这两个语句，如果不懂E文，您就认定这两个语句好了。然后我们将该语句更改如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;/Context&gt;<br />&lt;Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true"&gt;<br />&lt;/Context&gt;<br />&lt;/Host&gt;</td></tr></tbody></table><p>这里的path="/myjsp"就是我们就配置的虚拟目录了，以后在地址栏中输入http://localhost:8080/myjsp即可。而docBase="e:/myjsp" 则是机器本地路径，他们通过这个语句形成一个映射关系，其它照抄。</p><p>将上面的First.jsp文件放到e:/myjsp目录下，输入http://localhost:8080/myjsp/First.jsp，是不是有一种喜上眉梢的感觉？</p><p>在论坛里我见得最多的就是很多人不知道javaBean文件放到哪里，老实说开始我也不知道，更令人不解的是，十个人有九种不同的说法，这更让我们茫然。其实这问题也不是我们想像的那么复杂，我们以一个例子说明：</p><p>先建立一个java程序，代码如下：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">package hall;<br />public class SimpleBean {<br />private String message = "No message specified";<br />public String getMessage() {<br />return(message);<br />}<br />public void setMessage(String message) {<br />this.message = message;<br />}<br />}</td></tr></tbody></table><p>保存为SimpleBean.java，编译后会生成一个包，其实就相当于一个目录，也就是SimpleBean.class会存放在hall目录中，暂且保存起来，将来备用。</p><p>再输入以下代码：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;Reusing JavaBeans in JSP&lt;/TITLE&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY&gt;<br />&lt;CENTER&gt;<br />&lt;TABLE BORDER=5&gt;<br />&lt;TR&gt;&lt;TH CLASS="TITLE"&gt;<br />Reusing JavaBeans in JSP&lt;/TABLE&gt;<br />&lt;/CENTER&gt;<br />&lt;P&gt;<br />&lt;jsp:useBean id="test" class="hall.SimpleBean" /&gt;<br />&lt;jsp:setProperty name="test" property="message" value="Hello WWW" /&gt;<br />&lt;H1&gt;Message: &lt;I&gt;<br />&lt;jsp:getProperty name="test" property="message" /&gt;<br />&lt;/I&gt;&lt;/H1&gt;<br />&lt;/BODY&gt;</td></tr></tbody></table><p>保存在我们刚才建立的虚拟目录e:/myjsp下面，并命名为：BeanTest.jsp。</p><p>现在我们应该将hall（包）目录放在哪儿呢？别急，我们先在e:/myjsp下建立一个文件夹WEB-INF，然后再在WEB-INF下建立一个classes文件夹，最后将hall目录放到classes下，当然，hall下的字节码文件SimpleBean.class也一并要移过来，而SimpleBean.java就和BeanTest.jsp放到同一目录吧（可以不需要放的，自己试试）。</p><p>重新启动机器（如果您试了好多次都不行，这一步一定要做），在浏览器中输入：http://localhost:8080/myjsp/BeanTest.jsp，您看到了什么？呵，别告诉我您什么都没看到，那肯定是您设置的问题了。</p><p>Java学习 - 技术文章中心</p><p>初学者问的诸如：《怎样配置环境变量》《怎样运行Servlet》啊？这样的问题太多了，现在我写一个初学者入门必读，以便对初学者有指导作用！</p><p>首先是下载工具：</p><p>我建议初学者用Editplus＋JDK，我觉得如果用例如JB，Eclipse，JCreator，虽然刚开始的时候比较方便，但是确使初学者门不知道怎样配置环境变量，</p><p>从而难以达到知其然，知其所以然的地步</p><p>可以通过如下地址下载：</p><p>Editplus(最新版本是v2.11)：http://count.skycn.com/softdown.php?id=3641&amp;url=http://sc-http.skycn.net/down/epp211a_cn.exe(要照注册码就自己找吧，网上很多的）</p><p>JDK(最新版本是Java2sdk1_5_0)：http://192.18.97.54/ECom/EComTicketServlet/BEGIN30AA3B63E5C2F61C8C26F84B78970A98/-2147483648/926882595/1/627578/627410/926882595/2ts+/westCoastFSEND/jdk-1.5.0_04-oth-JPR/jdk-1.5.0_04-oth-JPR:3/jdk-1_5_0_04-windows-i586-p.exe（这是For Windows）</p><p>然后就是安装JDK，我是把它装到从c:\JDK目录下面：</p><p>然后就是CLASSPATH的问题了：</p><p>正如操作系统利用PATH来搜索可执行程序一样，Java运行环境也会遍历CLASSPATH来查找类，即便是HelloWorld这样简单的程序，JVM也会遍历</p><p>CLASSPATH定义的每一个路径，直到找到相应的文件为止。</p><p>相信大家用的系统不是2k就是XP，然后就应当如下设置Path：</p><p>我的电脑-&gt;属性-&gt;高级-&gt;环境变量</p><p>然后在环境变量的Path后面追加: C:\JDK\bin;.;C:\JDK\lib</p><p>也可以这样配置:C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar</p><p>★记住:环境变量中的 . 切记不能少，它表示当前路径，如果少掉出现的错误等会就说！</p><p>dt.jar是关于运行环境的类库，tools.jar是关于一些工具的类库</p><p>如果没有配置:C:\JDK\bin，则会出现 " javac&#8242; 不是内部或外部命令，也不是可运行的程序或批处理文件。"这样的错误。</p><p>然后下面就该写程序了：</p><p>首先是(HelloWorld.java),打开Editplus，新建一个Java文件，请照着如下输入，要一字不漏，并且分清大小写：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">public class HelloWorld{<br />public static void main(String[] args){<br />System.out.println("Hello,World!");<br />}<br />}</td></tr></tbody></table><p>然后把这个文件保存(ctrl + s)到HelloWorld.java,记住大小写一定要分清，是HelloWorld.java不是helloworld.java或者其它的</p><p>下面就该运行了，开始-&gt;运行-&gt;cmd</p><p>在控制台中把目录切换到当前目录：</p><p>javac HelloWorld.java<br />　<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> HelloWorld</p><p>你就会在控制台上看见输出的Hello,World!(没出来？我把电脑吃了：）)</p><p>javac是编译命令，它把HelloWorld.java编译成HelloWorld.class</p><p>java就是解释命令，JVM把HelloWorld.class解释执行.</p><p>在这个时候：</p><p>1。如果出现Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoClassDefFoundError: HelloWorld</p><p>那就是你在环境变量中没有加上那个.(dot)</p><p>2。如果出现Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchMethodError: main</p><p>或者HelloWorld.java:1: Public class helloworld must be defined in a file called</p><p>"HelloWorld.java".</p><p>那就是你没有分清大小写的写入这个HelloWorld，或者保存得时候没有保存为HelloWorld.java</p><p>这个名字一定要跟public class的名字一样</p><p>对于环境变量的问题就说到这里，下面我先所说怎么在Editplus里面编译和运行，在Tools－&gt;参数设置-&gt;配置用户工具</p><p>1.添加工具（添加应用程序）</p><p>菜单文字：Compile <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program</p><p>程序：C:\JDK\bin\javac.exe</p><p>参数：文件名称</p><p>初始目录：文件目录</p><p>2.添加工具（添加应用程序）</p><p>菜单文字：Run <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program</p><p>程序：C:\JDK\bin\java.exe</p><p>参数：文件名称（不含扩展名）</p><p>初始目录：文件目录</p><p>工具组名称可以随便添，比如Debug <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program</p><p>然后在Tools的下拉菜单中，你就会看见Compile <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program以及Run <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> Program这两个选项，以后你就可以利用ctrl + 1编译和ctrl ＋2运行程序了</p><p>下面就讨论Servlet的运行：</p><p>首先要运行Servlet，则需要JSP/Servlet container，我建议初学者用Tomcat</p><p>Tomcat（最新版本5.5）：http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.exe然后把这个压缩包解压到：</p><p>C:\Tomcat</p><p>然后再配置环境变量：</p><p>添加三个系统变量：</p><p>JAVA_HOME: C:\JDK<br />　TOMCAT_HOME: C:\Tomcat<br />　CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib</p><p>Tomcat的环境变量就配置完毕了，下面检验Tomcat是否能够运行：</p><p>在控制台中转到C:\Tomcat\bin这个目录，运行startup，然后回出现一个窗口，连跳一大串东西，最后表示Server已经运行</p><p>在浏览器中输入http://localhost:8080，出现欢迎界面，则表示Tomcat没问题了</p><p>然后和上面一样，写入你的第一个Servlet</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc"><p>import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />public class HelloWorld extends HttpServlet<br />{<br />public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException<br />{<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />out.println("&lt;html&gt;&lt;head&gt;&lt;title&gt;");<br />out.println("This is my first Servlet");<br />out.println("&lt;/title&gt;&lt;/head&gt;&lt;body&gt;");<br />out.println("&lt;h1&gt;Hello,World!&lt;/h1&gt;");<br />out.println("&lt;/body&gt;&lt;/html&gt;");</p><p>}<br />}</p></td></tr></tbody></table><p>然后照样用javac HelloWorld.java来编译这个文件，如果出现无法import javax.servlet.*</p><p>那么就是应该把C:\Tomcat\common\lib里面的servlet.jar（根据实际来看）文件拷贝到C:\JDK\jre\lib\ext中，再次编译，就没有问题了！</p><p>然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文件结构：</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">ROOT\index.html<br />ROOT\welcom.jsp<br />ROOT\WEB-INF\lib\MyServlet.jar（如果你的servlet的.class打成了.jar文件，则放在lib下面)<br />ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个里面)</td></tr></tbody></table><p>然后在浏览器中输入http://localhost:8080/servlet/HelloWorld,于是Server众望所归的报错了:Error 404--Not Found</p><p>怎么回事呢？</p><p>Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册，用EP打开这个web.xml文件，在里面加入</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;servlet&gt;<br />&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/helloworld&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;</td></tr></tbody></table><p>这样的结构</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;servlet&gt;<br />&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt;<br />&lt;/servlet&gt;</td></tr></tbody></table><p>表示指定包含的servlet类.而以下的结构</p><table width="80%" border="1"><tbody><tr><td class="content" bgcolor="#cccccc">&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/HelloWorld&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;</td></tr></tbody></table><p>表示指定HelloServlet应当映射到哪一种URL模式。</p><p>在修改web.xml完毕过后，重新启动Server，然后再输入http://localhost:8080/servlet/HelloWorld，那么偌大一个Hello,World!等着你呢。</p></td></tr></tbody></table></td></tr></tbody></table><img src ="http://www.blogjava.net/rain1102/aggbug/82663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-11-22 09:02 <a href="http://www.blogjava.net/rain1102/archive/2006/11/22/82663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat中配置commons-logging 和 log4j</title><link>http://www.blogjava.net/rain1102/archive/2006/11/21/82573.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 21 Nov 2006 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/11/21/82573.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/82573.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/11/21/82573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/82573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/82573.html</trackback:ping><description><![CDATA[1.先把把commons-logging.jar 和 log4j-xxx.jar 拷贝到 tomcat.home/common/lib/ 下.在 tomcat.home/common/classes/ 下建个 log4j.properties 就行了.这样所有输出信息可以由 log4j.properties 控制.<br />log4j.properties 文件:<br /><pre class="myframe"><font color="#006400"># For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!<br /># For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.<br />log4j.rootLogger=INFO, stdout, logfile<br /><br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - &lt;%m&gt;%n<br /><br />log4j.appender.logfile=org.apache.log4j.RollingFileAppender<br />log4j.appender.logfile.File=/home/camry/work/logs/xxxx.log<br />log4j.appender.logfile.MaxFileSize=512KB<br /># Keep three backup files.<br />log4j.appender.logfile.MaxBackupIndex=3<br /># Pattern to output: date priority [category] - message<br />log4j.appender.logfile.layout=org.apache.log4j.PatternLayout<br />log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n<br /></font><font face="Times New Roman">2.若你的 tomcat 中有好几个项目, 想不同项目日志写到不同位置去.可以在项目中创建个 Log4jInitServlet.class 来载入该项目的 log4j.properties.这时可以把 log4j.properties 放到 WEB-INF/ 下, 当然愿意放其他位置也可以.<br />代码如下:<br />WEB-INF/web.xml:<br /></font><font color="#006400">  &lt;servlet&gt;&#160;<br />    &lt;servlet-name&gt;log4j-init&lt;/servlet-name&gt;&#160;<br />    &lt;servlet-class&gt;&#160;<br />      com.xxx.xxxx.Log4jInitServlet&#160;<br />    &lt;/servlet-class&gt;&#160;<br />    &lt;init-param&gt;&#160;<br />      &lt;param-name&gt;log4j&lt;/param-name&gt;&#160;<br />      &lt;!-- 这里标出了位置 --&gt;&#160;<br />      &lt;param-value&gt;/WEB-INF/log4j.properties&lt;/param-value&gt;&#160;<br />    &lt;/init-param&gt;&#160;<br />    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;&#160;<br />  &lt;/servlet&gt;</font>&#160;<br />Log4jInitServlet.java :<br /><font color="#006400">package com.xxx.util;&#160;<br />&#160;<br />  import org.apache.log4j.PropertyConfigurator;&#160;<br />&#160;<br />  import javax.servlet.http.HttpServlet;&#160;<br />  import javax.servlet.http.HttpServletRequest;&#160;<br />  import javax.servlet.http.HttpServletResponse;&#160;<br />&#160;<br />  /**&#160;<br />   * to-do init log4j.&#160;<br />   */&#160;<br />  public class Log4jInitServlet extends HttpServlet {&#160;<br />&#160;<br />    /**&#160;<br />     * initial.&#160;<br />     */&#160;<br />    public void init() {&#160;<br />      String prefix = getServletContext().getRealPath("/");&#160;<br />      // 读出上面标出的位置&#160;<br />      String file = getInitParameter("log4j");&#160;<br />      PropertyConfigurator.configure(prefix + file);&#160;<br />    } // END: init&#160;<br />  } // END: Log4jInitServlet&#160;<br />  ...&#160;<br /><br /><br /><br /><br /><br /></font></pre><img src ="http://www.blogjava.net/rain1102/aggbug/82573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-11-21 17:10 <a href="http://www.blogjava.net/rain1102/archive/2006/11/21/82573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用log4j关闭DWR中的日志</title><link>http://www.blogjava.net/rain1102/archive/2006/10/31/78216.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 31 Oct 2006 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2006/10/31/78216.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/78216.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2006/10/31/78216.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/78216.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/78216.html</trackback:ping><description><![CDATA[log4j.rootLogger=DEBUG, stdout <br />log4j.appender.stdout=org.apache.log4j.ConsoleAppender <br />log4j.appender.stdout.layout=org.apache.log4j.PatternLayout <br />log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n <br />log4j.logger.java.sql.PreparedStatement=DEBUG<br /><font color="#ff0000">log4j.logger.uk.ltd.getahead.dwr = ERROR<br /></font><p>红色的部分为配置DWR日志输出，配置完这以后检查一下lib文件夹下是否有commons-logging.jar。如果没有则添加！这样就可以关闭DWR的日志了！</p><img src ="http://www.blogjava.net/rain1102/aggbug/78216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-31 10:04 <a href="http://www.blogjava.net/rain1102/archive/2006/10/31/78216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>