??xml version="1.0" encoding="utf-8" standalone="yes"?>国产69精品久久久久9999人 ,肉色欧美久久久久久久免费看,亚洲欧美日韩不卡一区二区三区http://www.aygfsteel.com/rain1102/category/37629.html<br/><font color="green" style="font-family: 华文行楷;font-size:16px;">子曰Q危邦不入,乱邦不居。天下有道则见,无道则隐?lt;/font><font color="#3C1435"></font>zh-cnFri, 20 Nov 2009 14:29:57 GMTFri, 20 Nov 2009 14:29:57 GMT60安装tomcat问题http://www.aygfsteel.com/rain1102/archive/2009/11/20/303075.htmlEric.ZhouEric.ZhouFri, 20 Nov 2009 09:06:00 GMThttp://www.aygfsteel.com/rain1102/archive/2009/11/20/303075.htmlhttp://www.aygfsteel.com/rain1102/comments/303075.htmlhttp://www.aygfsteel.com/rain1102/archive/2009/11/20/303075.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/303075.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/303075.htmlfailed to install tomcat6 service check your settings and permissions l过查看得知客户的机器上原先装了一个,然后直接删掉了tomcat安装目录而不是卸载的Q所以服务里面还有tomcat的服务。所以需要删掉该服务才可以安装?br />
扑ֈ一个解压版本的tomcat攑ֈL目录Q然后听q命令行q入到该目录下的bin目录里面Q里面应该有个service.bat文gQ执?span style="color: #008000">service remove tomcat6Q这样就删除服务了。下面就可以安装Q?img src ="http://www.aygfsteel.com/rain1102/aggbug/303075.html" width = "1" height = "1" />

Eric.Zhou 2009-11-20 17:06 发表评论
]]>
使用HttpClient发送Posthhttp://www.aygfsteel.com/rain1102/archive/2009/07/30/289137.htmlEric.ZhouEric.ZhouThu, 30 Jul 2009 08:48:00 GMThttp://www.aygfsteel.com/rain1102/archive/2009/07/30/289137.htmlhttp://www.aygfsteel.com/rain1102/comments/289137.htmlhttp://www.aygfsteel.com/rain1102/archive/2009/07/30/289137.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/289137.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/289137.html两天前写了个通过上v中科院有机化学研I所|站的翻译功能来译化合物名U的Python代码Q今天看CHttpClient也比较好用,所以就写了个,代码如下Q?br />

  HttpClient httpclient = new DefaultHttpClient();
  HttpPost method = new HttpPost("http://202.127.145.134/scdb/translate/translate.asp");
  
  List <NameValuePair> nvps = new ArrayList <NameValuePair>();
  nvps.add(new BasicNameValuePair("eng2chi", "BISPYROQUINE"));    //参数
        
  try {
   method.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));   //讄参数lPost
   HttpResponse response = httpclient.execute(method);
   HttpEntity entity = response.getEntity();
   BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "gb2312"));
   
   String line = null;
   while ((line = reader.readLine()) != null) {
    System.out.println(line);
   }
   if (entity != null) {
    entity.consumeContent();
   }

  } catch (ClientProtocolException e) {
   e.printStackTrace();
  } catch (UnsupportedEncodingException e1) {
   e1.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }



Eric.Zhou 2009-07-30 16:48 发表评论
]]>
HttpClient 使用代理讉KHttps【{?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/rain1102/archive/2009/07/30/289104.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/289104.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2009/07/30/289104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/289104.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/289104.html</trackback:ping><description><![CDATA[<ol class="dp-j"> <li id="wmqeeuq" class="alt"><span><span id="wmqeeuq" class="keyword">import</span><span> java.io.BufferedReader;   </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">import</span><span> java.io.InputStreamReader;   </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> org.apache.http.HttpEntity;   </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">import</span><span> org.apache.http.HttpHost;   </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> org.apache.http.HttpResponse;   </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">import</span><span> org.apache.http.auth.AuthScope;   </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> org.apache.http.auth.UsernamePasswordCredentials;   </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">import</span><span> org.apache.http.client.methods.HttpGet;   </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">import</span><span> org.apache.http.conn.params.ConnRoutePNames;   </span></span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="keyword">import</span><span> org.apache.http.impl.client.DefaultHttpClient;   </span></span></li> <li id="wmqeeuq" class="alt"><span>  </span></li> <li id="wmqeeuq" class=""><span id="wmqeeuq" class="comment">/** </span> </span></li> <li id="wmqeeuq" class="alt"><span><span id="wmqeeuq" class="comment"> * HttpClient 4.0通过代理讉KHttps的代码例子?</span> </span></li> <li id="wmqeeuq" class=""><span><span id="wmqeeuq" class="comment"> *  </span> </span></li> <li id="wmqeeuq" class="alt"><span><span id="wmqeeuq" class="comment"> * @author JAVA世纪|?java2000.net, laozizhu.com) </span> </span></li> <li id="wmqeeuq" class=""><span><span id="wmqeeuq" class="comment"> */</span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">class</span><span> HttpsProxyGet {   </span></span></li> <li id="wmqeeuq" class=""><span>  </span><span id="wmqeeuq" class="keyword">public</span><span> </span><span id="wmqeeuq" class="keyword">static</span><span> </span><span id="wmqeeuq" class="keyword">void</span><span> main(String[] args) </span><span id="wmqeeuq" class="keyword">throws</span><span> Exception {   </span></span></li> <li id="wmqeeuq" class="alt"><span>    DefaultHttpClient httpclient = </span><span id="wmqeeuq" class="keyword">new</span><span> DefaultHttpClient();   </span></span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="comment">// 认证的数?</span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="comment">// 我这里是瞎写的,h据实际情况填?</span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>    httpclient.getCredentialsProvider().setCredentials(</span><span id="wmqeeuq" class="keyword">new</span><span> AuthScope(</span><span id="wmqeeuq" class="string">"10.60.8.20"</span><span>, </span><span id="wmqeeuq" class="number">8080</span><span>),   </span></span></li> <li id="wmqeeuq" class="alt"><span>        </span><span id="wmqeeuq" class="keyword">new</span><span> UsernamePasswordCredentials(</span><span id="wmqeeuq" class="string">"username"</span><span>, </span><span id="wmqeeuq" class="string">"password"</span><span>));   </span></span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="comment">// 讉K的目标站点,端口和协?</span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>    HttpHost targetHost = </span><span id="wmqeeuq" class="keyword">new</span><span> HttpHost(</span><span id="wmqeeuq" class="string">"www.google.com"</span><span>, </span><span id="wmqeeuq" class="number">443</span><span>, </span><span id="wmqeeuq" class="string">"https"</span><span>);   </span></span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="comment">// 代理的设|?</span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>    HttpHost proxy = </span><span id="wmqeeuq" class="keyword">new</span><span> HttpHost(</span><span id="wmqeeuq" class="string">"10.60.8.20"</span><span>, </span><span id="wmqeeuq" class="number">8080</span><span>);   </span></span></li> <li id="wmqeeuq" class=""><span>    httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);   </span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="comment">// 目标地址 </span><span>  </span></span></li> <li id="wmqeeuq" class=""><span>    HttpGet httpget = </span><span id="wmqeeuq" class="keyword">new</span><span> HttpGet(</span><span id="wmqeeuq" class="string">"/adsense/login/zh_CN/?"</span><span>);   </span></span></li> <li id="wmqeeuq" class="alt"><span>    System.out.println(</span><span id="wmqeeuq" class="string">"目标: "</span><span> + targetHost);   </span></span></li> <li id="wmqeeuq" class=""><span>    System.out.println(</span><span id="wmqeeuq" class="string">"h: "</span><span> + httpget.getRequestLine());   </span></span></li> <li id="wmqeeuq" class="alt"><span>    System.out.println(</span><span id="wmqeeuq" class="string">"代理: "</span><span> + proxy);   </span></span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="comment">// 执行 </span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>    HttpResponse response = httpclient.execute(targetHost, httpget);   </span></li> <li id="wmqeeuq" class=""><span>    HttpEntity entity = response.getEntity();   </span></li> <li id="wmqeeuq" class="alt"><span>    System.out.println(</span><span id="wmqeeuq" class="string">"----------------------------------------"</span><span>);   </span></span></li> <li id="wmqeeuq" class=""><span>    System.out.println(response.getStatusLine());   </span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">if</span><span> (entity != </span><span id="wmqeeuq" class="keyword">null</span><span>) {   </span></span></li> <li id="wmqeeuq" class=""><span>      System.out.println(</span><span id="wmqeeuq" class="string">"Response content length: "</span><span> + entity.getContentLength());   </span></span></li> <li id="wmqeeuq" class="alt"><span>    }   </span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="comment">// 昄l果 </span><span>  </span></span></li> <li id="wmqeeuq" class="alt"><span>    BufferedReader reader = </span><span id="wmqeeuq" class="keyword">new</span><span> BufferedReader(</span><span id="wmqeeuq" class="keyword">new</span><span> InputStreamReader(entity.getContent(), </span><span id="wmqeeuq" class="string">"UTF-8"</span><span>));   </span></span></li> <li id="wmqeeuq" class=""><span>    String line = </span><span id="wmqeeuq" class="keyword">null</span><span>;   </span></span></li> <li id="wmqeeuq" class="alt"><span>    </span><span id="wmqeeuq" class="keyword">while</span><span> ((line = reader.readLine()) != </span><span id="wmqeeuq" class="keyword">null</span><span>) {   </span></span></li> <li id="wmqeeuq" class=""><span>      System.out.println(line);   </span></li> <li id="wmqeeuq" class="alt"><span>    }   </span></li> <li id="wmqeeuq" class=""><span>    </span><span id="wmqeeuq" class="keyword">if</span><span> (entity != </span><span id="wmqeeuq" class="keyword">null</span><span>) {   </span></span></li> <li id="wmqeeuq" class="alt"><span>      entity.consumeContent();   </span></li> <li id="wmqeeuq" class=""><span>    }   </span></li> <li id="wmqeeuq" class="alt"><span>  }   </span></li> <li id="wmqeeuq" class=""><span>}  </span></li> </ol><img src ="http://www.aygfsteel.com/rain1102/aggbug/289104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2009-07-30 13:50 <a href="http://www.aygfsteel.com/rain1102/archive/2009/07/30/289104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>讄Tomcat讉K日志Q{载)http://www.aygfsteel.com/rain1102/archive/2009/04/23/267079.htmlEric.ZhouEric.ZhouThu, 23 Apr 2009 02:01:00 GMThttp://www.aygfsteel.com/rain1102/archive/2009/04/23/267079.htmlhttp://www.aygfsteel.com/rain1102/comments/267079.htmlhttp://www.aygfsteel.com/rain1102/archive/2009/04/23/267079.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/267079.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/267079.html怋用web服务器的朋友大都了解Q一般的web server有两部分日志Q?
    一是运行中的日志,它主要记录运行的一些信息,其是一些异帔R误日志信?
    二是讉K日志信息Q它记录的访问的旉QIPQ访问的资料{相关信息?
   
现在我来和大家介l一下利?span class="hilite1">tomcat产生的访问日志数据,我们能做哪些有效的分析数据?

首先是配|?span class="hilite1">tomcat讉K日志数据Q默认情况下讉K日志没有打开Q配|的方式如下Q?
    ~辑 ${catalina}/conf/server.xml文g.?${catalina}?span class="hilite1">tomcat的安装目?
    把以下的注释(<!-- -->)L卛_?
            <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
                 pattern="common" resolveHosts="false"/>
        -->
    其中 directory是生的目录 tomcat安装${catalina}作ؓ当前目录
    pattern表示日志生的格式,common?span class="hilite1">tomcat提供的一个标准设|格式。其具体的表辑ּ?%h %l %u %t "%r" %s %b
    但本人徏议采用以下具体的配置Q因为标准配|有一些重要的日志数据无法生?
        %h %l %u %t "%r" %s %b %T 
具体的日志生样式说明如?从官Ҏ档中摘录)Q?
    * %a - Remote IP address
    * %A - Local IP address
    * %b - Bytes sent, excluding HTTP headers, or '-' if zero
    * %B - Bytes sent, excluding HTTP headers
    * %h - Remote host name (or IP address if resolveHosts is false)
    * %H - Request protocol
    * %l - Remote logical username from identd (always returns '-')
    * %m - Request method (GET, POST, etc.)
    * %p - Local port on which this request was received
    * %q - Query string (prepended with a '?' if it exists)
    * %r - First line of the request (method and request URI)
    * %s - HTTP status code of the response
    * %S - User session ID
    * %t - Date and time, in Common Log Format
    * %u - Remote user that was authenticated (if any), else '-'
    * %U - Requested URL path
    * %v - Local server name
    * %D - Time taken to process the request, in millis
    * %T - Time taken to process the request, in seconds

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:

    * %{xxx}i for incoming headers
    * %{xxx}c for a specific cookie
    * %{xxx}r xxx is an attribute in the ServletRequest
    * %{xxx}s xxx is an attribute in the HttpSession


现在我们回头再来看一下下面这个配|?%h %l %u %t "%r" %s %b %T 生的访问日志数据,我们可以做哪些事Q?
先看一下,我们能得到的数据?
    * %h 讉K的用户IP地址
    * %l 讉K逻辑用户名,通常q回'-'
    * %u 讉K验证用户名,通常q回'-'
    * %t 讉K日时
    * %r 讉K的方?post或者是get)Q访问的资源和用的http协议版本
    * %s 讉Kq回的http状?
    * %b 讉K资源q回的流?
    * %T 讉K所使用的时?
   
有了q些数据Q我们可以根据时间段做以下的分析处理(囄使用jfreechart工具动态生?Q?
  * 独立IP数统?
  * 讉Kh数统?
  * 讉K资料文g数统?
  * 讉K量l计
  * 讉K处理响应旉l计
  * l计所?04错误面
  * l计所?00错误的页?
  * l计讉K最频繁面
  * l计讉K处理旉最久页?
  * l计q发讉K频率最高的面

文章出处Qhttp://www.aygfsteel.com/xmatthew/archive/2008/04/14/192450.html

Eric.Zhou 2009-04-23 10:01 发表评论
]]>
Tomcat启动时出现IOException while loading persisted sessions: java.io.EOFException异常http://www.aygfsteel.com/rain1102/archive/2009/02/28/257122.htmlEric.ZhouEric.ZhouSat, 28 Feb 2009 02:05:00 GMThttp://www.aygfsteel.com/rain1102/archive/2009/02/28/257122.htmlhttp://www.aygfsteel.com/rain1102/comments/257122.htmlhttp://www.aygfsteel.com/rain1102/archive/2009/02/28/257122.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/257122.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/257122.htmlTomcat启动时出现如下异帔R题:

严重: IOException while loading persisted sessions: Java.io.EOFException
Cause by: Exception loading sessions from persistent storage


原因分析Q?br /> EOFException表示输入q程中意外地到达文g或尾的信?D从session中获取数据失败。这是由于tomcat上次非正常关闭时有一些活动session被持久化Q表Cؓ一些时文ӞQ在重启Ӟtomcat试L复这些session的持久化数据但又dp|造成的。此异常不媄响系l的使用?br />
解决ҎQ?br /> 删除?lt;TOMCAT_HOME>\work\Catalina\localhost\webstart\下的SESSIONS.ser文g

Eric.Zhou 2009-02-28 10:05 发表评论
]]>
JExcelAPI与Apache POI两者对??http://www.aygfsteel.com/rain1102/archive/2008/07/04/212534.htmlEric.ZhouEric.ZhouFri, 04 Jul 2008 03:38:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/07/04/212534.htmlhttp://www.aygfsteel.com/rain1102/comments/212534.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/07/04/212534.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/212534.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/212534.html一QJExcelAPI与Apache POI两者对?br />   1、JExcelAPI不适合商业应用Q它都是会莫名其妙的M出来数据?br />   2、Apache POI是一UJava的实玎ͼ不仅能读微Y的Excelq可以读Open Office的,新版HSSF3.0q添加了dPower Point的功能。M是一U非常稳定,强大的实现。推荐用?/p>

?br /> Jexcelapi的用参考:http://blog.csdn.net/yfhdsz/archive/2006/10/30/1356670.aspx

apache POI 参考:http://blog.csdn.net/yuansicau/archive/2006/08/31/1150046.aspx
关键是要理解
 javadexcel文g的顺序是Q?br /> Excel文g->工作?>?>单元?对应到POI中,为:workbook->sheet->row->cell
注意Q?br />  注意Q?nbsp; 
          1.sheetQ??开始,以workbook.getNumberOfSheets()-1l束
   2.rowQ??开?getFirstRowNum)Q以getLastRowNuml束
   3.cellQ??开?getFirstCellNum)Q以getLastCellNuml束,
          l束的数目不知什么原因与昄的长度不同,可能会偏?br />  
 如何插图片到Excel?br />  public static void createPicture() {
  FileOutputStream fileOut = null;
  BufferedImage bufferImg = null;
  BufferedImage bufferImg1 = null;
  try {
   ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
   ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();
   bufferImg = ImageIO.read(new File("C:/Documents and Settings/All Users/Documents/My Pictures/CZ囄/Sunset.jpg"));
   bufferImg1 = ImageIO.read(new File("C:/Documents and Settings/All Users/Documents/My Pictures/CZ囄/Water lilies.jpg"));
   ImageIO.write(bufferImg, "jpeg", byteArrayOut);
   ImageIO.write(bufferImg1, "jpeg", byteArrayOut1);

   HSSFWorkbook wb = new HSSFWorkbook();
   HSSFSheet sheet1 = wb.createSheet("new sheet");
   // HSSFRow row = sheet1.createRow(2);
   HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
   HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,
     (short) 0, 0, (short) 10, 10);
   HSSFClientAnchor anchor1 = new HSSFClientAnchor(0, 0, 512, 255,
     (short) 0, 15, (short) 10, 20);
   /**
    * public HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short
    * col1, int row1, short col2, int row2)
    * Creates a new client anchor
    * and sets the top-left and bottom-right coordinates of the anchor.
    *
    * Parameters: dx1 - the x coordinate within the first cell.
    * dy1 - the y coordinate within the first cell.
    * dx2 - the x coordinate within the second cell.
    * dy2 - the y coordinate within the second cell.
    * col1 - the column (0 based) of the first cell.
    * row1 - the row (0 based) of the first cell.
    * col2 - the column (0 based) of the second cell.
    * row2 - the row (0 based) of the second cell.
    * 注意:(col1,row1)表示囄左上角所在单元格
    * (col2,row2)表示囄右下角所在单元格,
    * 先是?再行,序不要反了.
    * (dx1,dy1)表示囄左上角在单元g的坐?
    * ((dx2,dy2)表示囄右下角在单元g的坐?
    */
   patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
     .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
   patriarch.createPicture(anchor1, wb.addPicture(byteArrayOut1
     .toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

   fileOut = new FileOutputStream("e:/study/workbook.xls");
   wb.write(fileOut);
   fileOut.close();

  } catch (IOException io) {
   io.printStackTrace();
   System.out.println("io erorr :  " + io.getMessage());
  } finally {
   if (fileOut != null)
    try {
     fileOut.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
  }
 }



Eric.Zhou 2008-07-04 11:38 发表评论
]]>
Commons Lang介绍http://www.aygfsteel.com/rain1102/archive/2008/06/21/209642.htmlEric.ZhouEric.ZhouSat, 21 Jun 2008 00:25:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/06/21/209642.htmlhttp://www.aygfsteel.com/rain1102/comments/209642.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/06/21/209642.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/209642.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/209642.htmlJakarta Commons 目旨在实现可重用的 Java lg。此目包含数十个组Ӟ用以?Java 的开发,每个lg负责满一个特定需求。有大量的组件可用,且不仅限于在特定cd的Java应用E序中用?br /> Langlg是Jakarta Commons中较为流行的lg之一。Lang是要呈现在J2SE本n中的一l类?br /> Sun公司Javadoc指出, J2SE中的java.lang?提供了Java语言E序设计所必需的基本类".cM? Jakarta Commons Lang提供了对Java语言基本设计的增?
自动生成toString()内容
自动生成hashCode()和equals()
自动实现compateTo()
输出数组内容
克隆和反转数l?br /> 对象数组和基本类型数l的怺转换
在数l中搜烦特定?br /> 由多l数l生成Map
格式化日?br /> 舍入Date对象
截取Date对象
创徏枚D?br /> 生成唯一的数字标识符和字W数字؜合标识符
验证Ҏ参数
度量旉
......

Eric.Zhou 2008-06-21 08:25 发表评论
]]>
Commons-Validatorhttp://www.aygfsteel.com/rain1102/archive/2008/05/07/198893.htmlEric.ZhouEric.ZhouWed, 07 May 2008 02:50:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/05/07/198893.htmlhttp://www.aygfsteel.com/rain1102/comments/198893.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/05/07/198893.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/198893.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/198893.html阅读全文

Eric.Zhou 2008-05-07 10:50 发表评论
]]>
Apache Commons工具集简介[转]http://www.aygfsteel.com/rain1102/archive/2008/05/04/198009.htmlEric.ZhouEric.ZhouSun, 04 May 2008 02:27:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/05/04/198009.htmlhttp://www.aygfsteel.com/rain1102/comments/198009.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/05/04/198009.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/198009.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/198009.html
Commons BeanUtils
http://jakarta.apache.org/commons/beanutils/index.html
说明Q针对Bean的一个工具集。由于Bean往往是有一堆get和setl成Q所以BeanUtils也是在此基础上进行一些包装?br /> 使用CZQ功能有很多Q网站上有详l介l。一个比较常用的功能是Bean CopyQ也是copy bean的属性。如果做分层架构开发的话就会用刎ͼ比如从POQPersistent ObjectQ拷贝数据到VOQValue ObjectQ?br /> 传统Ҏ如下Q?br /> //得到TeacherForm
 TeacherForm teacherForm=(TeacherForm)form;
 //构造Teacher对象
 Teacher teacher=new Teacher();
 //赋?br />  teacher.setName(teacherForm.getName());
 teacher.setAge(teacherForm.getAge());
 teacher.setGender(teacherForm.getGender());
 teacher.setMajor(teacherForm.getMajor());
 teacher.setDepartment(teacherForm.getDepartment());
  
 //持久化Teacher对象到数据库
 HibernateDAO= ;
 HibernateDAO.save(teacher);

使用BeanUtils后,代码大大改观了Q如下所C:
//得到TeacherForm
 TeacherForm teacherForm=(TeacherForm)form;
 //构造Teacher对象
 Teacher teacher=new Teacher();
 //赋?br />  BeanUtils.copyProperties(teacher,teacherForm);
 //持久化Teacher对象到数据库
 HibernateDAO= ;
 HibernateDAO.save(teacher);

Commons CLI
http://jakarta.apache.org/commons/cli/index.html
说明Q这是一个处理命令的工具。比如mainҎ输入的string[]需要解析。你可以预先定义好参数的规则Q然后就可以调用CLI来解析?br /> 使用CZQ?br /> // create Options object
Options options = new Options();
// add t option, option is the command parameter, false indicates that 
// this parameter is not required.
options.addOption(“t”, false, “display current time”);
options.addOption("c", true, "country code");
CommandLineParser parser = new PosixParser();
CommandLine cmd = parser.parse( options, args);
if(cmd.hasOption("t")) {
    // print the date and time
}
else {
    // print the date
}
// get c option value
String countryCode = cmd.getOptionValue("c");

if(countryCode == null) {
    // print default date
}
else {
    // print date for country specified by countryCode
}

Commons Codec
http://jakarta.apache.org/commons/codec/index.html
说明Q这个工h用来~码和解码的Q包括Base64QURLQSoundx{等。用q个工具的h应该很清楚这些,我就不多介绍了?br />
Commons Collections
http://jakarta.apache.org/commons/collections/
说明Q你可以把这个工L成是java.util的扩展?br /> 使用CZQD一个简单的例子
OrderedMap map = new LinkedMap();
map.put("FIVE", "5");
map.put("SIX", "6");
map.put("SEVEN", "7");
map.firstKey();  // returns "FIVE"
map.nextKey("FIVE");  // returns "SIX"
map.nextKey("SIX");  // returns "SEVEN"

Commons Configuration
http://jakarta.apache.org/commons/configuration/
说明Q这个工h用来帮助处理配置文g的,支持很多U存储方?br /> 1.    Properties files
2.    XML documents
3.    Property list files (.plist)
4.    JNDI
5.    JDBC Datasource
6.    System properties
7.    Applet parameters
8.    Servlet parameters
使用CZQD一个Properties的简单例?br /> # usergui.properties, definining the GUI,
colors.background = #FFFFFF
colors.foreground = #000080

window.width = 500
window.height = 300

PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties");
config.setProperty("colors.background", "#000000);
config.save();
config.save("usergui.backup.properties);//save a copy
Integer integer = config.getInteger("window.width");

Commons DBCP
http://jakarta.apache.org/commons/dbcp/
说明QDatabase Connection pool, Tomcat是用的q个Q不用我多说了吧Q要用的自己ȝ站上看说明?br />
Commons DbUtils
http://jakarta.apache.org/commons/dbutils/
说明Q我以前在写数据库程序的时候,往往把数据库操作单独做一个包。DbUtils是q样一个工P以后开发不用再重复q样的工作了。值得一体的是,q个工具q不是现在流行的OR-Mapping工具Q比如HibernateQ,只是化数据库操作Q比?br /> QueryRunner run = new QueryRunner(dataSource);
// Execute the query and get the results back from the handler
Object[] result = (Object[]) run.query(
    "SELECT * FROM Person WHERE name=?", "John Doe");

Commons FileUpload
http://jakarta.apache.org/commons/fileupload/
说明Qjsp的上传文件功能怎么做呢Q?br /> 使用CZQ?br /> // Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

// Parse the request
List /* FileItem */ items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();

    if (item.isFormField()) {
        processFormField(item);
    } else {
        processUploadedFile(item);
    }
}

Commons HttpClient
http://jakarta.apache.org/commons/httpclient/
说明Q这个工具可以方侉K过~程的方式去讉K|站?br /> 使用CZQ最单的Get操作
GetMethod get = new GetMethod("http://jakarta.apache.org");
// execute method and handle any error responses.
  ...
InputStream in = get.getResponseBodyAsStream();
// Process the data from the input stream.
 get.releaseConnection();

Commons IO
http://jakarta.apache.org/commons/io/
说明Q可以看成是java.io的扩展,我觉得用h非常方便?br /> 使用CZQ?br /> 1Q读取Stream
标准代码Q?br /> InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
 try {
   InputStreamReader inR = new InputStreamReader( in );
   BufferedReader buf = new BufferedReader( inR );
   String line;
   while ( ( line = buf.readLine() ) != null ) {
     System.out.println( line );
   }
 } finally {
   in.close();
 }
使用IOUtils
InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
 try {
   System.out.println( IOUtils.toString( in ) );
 } finally {
   IOUtils.closeQuietly(in);
 }

2Q读取文?br /> File file = new File("/commons/io/project.properties");
List lines = FileUtils.readLines(file, "UTF-8");

3Q察看剩余空?br /> long freeSpace = FileSystemUtils.freeSpace("C:/");


Commons JXPath
http://jakarta.apache.org/commons/jxpath/
说明QXpath你知道吧Q那么JXpath是ZJava对象的XpathQ也是用Xpath对Java对象q行查询。这个东西还是很有想像力的?br /> 使用CZQ?br /> Address address = (Address)JXPathContext.newContext(vendor).
         getValue("locations[address/zipCode='90210']/address");
上述代码{同?br /> Address address = null;
Collection locations = vendor.getLocations();
Iterator it = locations.iterator();
while (it.hasNext()){
    Location location = (Location)it.next();
    String zipCode = location.getAddress().getZipCode();
    if (zipCode.equals("90210")){
      address = location.getAddress();
      break;
    }
}


Commons Lang
http://jakarta.apache.org/commons/lang/
说明Q这个工具包可以看成是对java.lang的扩展。提供了诸如StringUtils, StringEscapeUtils, RandomStringUtils, Tokenizer, WordUtils{工L?br />
Commons Logging
http://jakarta.apache.org/commons/logging/
说明Q你知道Log4j吗?

Commons Math
http://jakarta.apache.org/commons/math/
说明Q看名字你就应该知道q个包是用来q嘛的了吧。这个包提供的功能有些和Commons Lang重复了,但是q个包更专注于做数学工具Q功能更强大?br />
Commons Net
http://jakarta.apache.org/commons/net/
说明Q这个包q是很实用的Q封装了很多|络协议?br /> 1.    FTP
2.    NNTP
3.    SMTP
4.    POP3
5.    Telnet
6.    TFTP
7.    Finger
8.    Whois
9.    rexec/rcmd/rlogin
10.    Time (rdate) and Daytime
11.    Echo
12.    Discard
13.    NTP/SNTP
使用CZQ?br /> TelnetClient telnet = new TelnetClient();
telnet.connect( "192.168.1.99", 23 );
InputStream in = telnet.getInputStream();
PrintStream out = new PrintStream( telnet.getOutputStream() );
...
telnet.close();

Commons Validator
http://jakarta.apache.org/commons/validator/
说明Q用来帮助进行验证的工具。比如验证Email字符Ԍ日期字符串等是否合法?br /> 使用CZQ?br /> // Get the Date validator
DateValidator validator = DateValidator.getInstance();
// Validate/Convert the date
Date fooDate = validator.validate(fooString, "dd/MM/yyyy");
if (fooDate == null) {
     // error...not a valid date
     return;
}

Commons Virtual File System
http://jakarta.apache.org/commons/vfs/
说明Q提供对各种资源的访问接口。支持的资源cd包括
1.    CIFS 
2.    FTP 
3.    Local Files 
4.    HTTP and HTTPS 
5.    SFTP 
6.    Temporary Files 
7.    WebDAV 
8.    Zip, Jar and Tar (uncompressed, tgz or tbz2) 
9.    gzip and bzip2 
10.    res 
11.    ram 
q个包的功能很强大,极大的简化了E序对资源的讉K?br /> 使用CZQ?br /> 从jar中读取文?br /> // Locate the Jar file
FileSystemManager fsManager = VFS.getManager();
FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );

// List the children of the Jar file
FileObject[] children = jarFile.getChildren();
System.out.println( "Children of " + jarFile.getName().getURI() );
for ( int i = 0; i < children.length; i++ )
{
    System.out.println( children[ i ].getName().getBaseName() );
}
从smbd文g
StaticUserAuthenticator auth = new StaticUserAuthenticator("username", "password", null);
FileSystemOptions opts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth); 
FileObject fo = VFS.getManager().resolveFile("smb://host/anyshare/dir", opts);

    
有h说Apache像是丐帮,里面的项目多而杂。的如此,Apache的项目水q_差不齐,而且不同的项目之间也常常会有功能重叠Q甚x撞RQ比如Ant和Maven。不qApache的优U目q是有很多的Q比如Apache Http ServerQTomcatQAnt, Geronimo{等。Apache Commons是工具包Qؓ其他目提供支持Q很多Commons中的目是从其他项目中抽取出来的。希望我的介l能对你有所帮助Q有些我提到的Commons中的目我也没有用过Q只是现学现卖,隑օ错误和疏漏,希望谅解?br />

Eric.Zhou 2008-05-04 10:27 发表评论
]]>
Tomcat 下配|一个ipl定多个域名http://www.aygfsteel.com/rain1102/archive/2008/04/22/194908.htmlEric.ZhouEric.ZhouTue, 22 Apr 2008 15:34:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/04/22/194908.htmlhttp://www.aygfsteel.com/rain1102/comments/194908.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/04/22/194908.html#Feedback1http://www.aygfsteel.com/rain1102/comments/commentRss/194908.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/194908.html<Host name="localhost" debug="0" appBase="D:\\Tomcat 5.0\\webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
       <Alias>localhost.com</Alias>
       <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
            timestamp="true"/>
        <Context path="" docBase="D:\\Tomcat 5.0\\webapps\\gg"  reloadable="true" caseSensitive="false" debug="0"></Context>
</Host>

<Host name="one.localhost" debug="0" appBase="D:\\Tomcat 5.0\\webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
       <Alias>one.localhost.com</Alias>
       <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
            timestamp="true"/>
       <Context path="" docBase="D:\\Tomcat 5.0\\webapps\\kk\\a"  reloadable="true" caseSensitive="false" debug="0"></Context>
</Host>

<Host name="two.localhost" debug="0" appBase="D:\\Tomcat 5.0\\webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
       <Alias>two.localhost.com</Alias>
       <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
            timestamp="true"/>
        <Context path="" docBase="D:\\Tomcat 5.0\\webapps\\kk\\b"  reloadable="true" caseSensitive="false" debug="0"></Context>
</Host>

因无域名解析服务?所以在hosts上配,来模拟dns解析.

10.1.1.241  localhost           指向gg文g?br /> 10.1.1.241  localhost.com       指向gg文g?br /> 10.1.1.241  one.localhost       指向a文g?br /> 10.1.1.241  one.localhost.com   指向a文g?br /> 10.1.1.241  two.localhost       指向b文g?br /> 10.1.1.241  two.localhost.com   指向b文g?/p>

l过多方面尝?l于在tomcat下配|成功了.



Eric.Zhou 2008-04-22 23:34 发表评论
]]>
java.lang.NoSuchFieldError: TRACE :Log4jhttp://www.aygfsteel.com/rain1102/archive/2008/04/17/193843.htmlEric.ZhouEric.ZhouThu, 17 Apr 2008 11:05:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/04/17/193843.htmlhttp://www.aygfsteel.com/rain1102/comments/193843.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/04/17/193843.html#Feedback5http://www.aygfsteel.com/rain1102/comments/commentRss/193843.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/193843.htmlHi I am facing a problem with accessing the JBOSS.

according to the exception it seems to me --- log related exception.

when I call the following code

Code:
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);
            -----
            -----	


exception details

Code:
Exception in thread "main" Java.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.<init>(StartUp.java:28)
            at com.cognizant.main.StartUp.main(StartUp.java:46)	



I use jboss-4.2.1.GA version with JDK jdk141_05 version.

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.

Strange thing is that I run this same code with all other 3/4 windows XP system. OK

But in another system with the same configuration I got the above mentioned exception.


Can any body help me?

-----------------------------------------------------------------------------------------
Quote:
Exception in thread "main" Java.lang.NoSuchFieldError: TRACE


You will require log4j jar of version 1.2.12 or higher in your classpath. Also, make sure that you do not 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.



Eric.Zhou 2008-04-17 19:05 发表评论
]]>
利用Apache的CLI来处理命令行http://www.aygfsteel.com/rain1102/archive/2008/04/16/193521.htmlEric.ZhouEric.ZhouWed, 16 Apr 2008 09:31:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/04/16/193521.htmlhttp://www.aygfsteel.com/rain1102/comments/193521.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/04/16/193521.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/193521.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/193521.html
在用CLI之前需要创Z个Options对象Q该对象相当于一个容器,另外q有Option对象Q每个Option对象相对于命令行中的一个参数?br />
   Options opts = new Options();

通过利用q个OptionsQ你可以使用addOption()Ҏ定义你的应用E序可接受的命o行参敎ͼ每次都ؓ一个option调用一ơ这个方法,看下面例C:

   opts.addOption("h", false, "Print help for this application");
   opts.addOption("u", true, "The username to use");
   opts.addOption("dsn", true, "The data source to use");


当然你也可以单独创徏Option对线Q然后用addOption()Ҏdq去。如下:

Option op = new Option("h", false, "Print help for this application");

一旦你定义了类的参敎ͼ创徏一个CommandLineParserQƈ分析已传送到L法中的组?/p>
   BasicParser parser = new BasicParser();
   CommandLine cl = parser.parse(opts, args);


{到所有的参数都被解析以后Q你可以开始检查返回的命o行,q些命o行中Q提供用L参数和值已被语法分析程序详l检查过了?br />
   if (cl.hasOption('h')) {
      HelpFormatter hf = new HelpFormatter();
      hf.printHelp("OptionsTip", opts);
   } else {
      System.out.println(cl.getOptionValue("u"));
      System.out.println(cl.getOptionValue("dsn"));
   }

p你看到的那样Q你可以使用HelpRormattercMؓ你的E序自动C生用信息?br />
下面看一下全部的代码Q?br />

package com.founder.common;

import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class OptionsTip {

 public static void main(String[] args) {
  try {
   Options opts = new Options();
   opts.addOption("h", false, "Print help for this application");
   opts.addOption("u", true, "The username to use");
   opts.addOption("dsn", true, "The data source to use");
   BasicParser parser = new BasicParser();
   CommandLine cl = parser.parse(opts, args);
   
   if (cl.hasOption('h')) {
    HelpFormatter hf = new HelpFormatter();
    hf.printHelp("OptionsTip", opts);
   } else {
    System.out.println(cl.getOptionValue("u"));
    System.out.println(cl.getOptionValue("dsn"));
   }
  } catch (ParseException pe) {
   pe.printStackTrace();
  }

 }

}

注:使用此程序时候别忘了把commons-cli-1.0.jar加入C的classpath?/span>

q行l果Q?br />

E:\javaworkspace\collection\src>java com.founder.common.OptionsTip -h
usage: OptionsTip
 -dsn    The data source to use
 -h      Print help for this application
 -u      The username to use

E:\javaworkspace\collection\src>java com.founder.common.OptionsTip -u eric -dsn founder
eric
founder



Eric.Zhou 2008-04-16 17:31 发表评论
]]>
java.util.Collection<E> 介http://www.aygfsteel.com/rain1102/archive/2008/04/15/193207.htmlEric.ZhouEric.ZhouTue, 15 Apr 2008 12:47:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/04/15/193207.htmlhttp://www.aygfsteel.com/rain1102/comments/193207.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/04/15/193207.html#Feedback2http://www.aygfsteel.com/rain1102/comments/commentRss/193207.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/193207.htmlJava.util.Collection<E>
所有超U接口:
Iterable<E>
所有已知子接口Q?/strong>
BeanContext, BeanContextServices, BlockingQueue<E>, List<E>, Queue<E>, Set<E>, SortedSet<E>
所有已知实现类Q?/strong>
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

接口介绍

1. Collection<E> 集合的根接口Q它包含了诸如add、remove、size和toArray之类的方法?br /> 2. Set<E> 不包含重复元素的集合Q它包含的元素不必按照Q何特定的序存储(它扩展了Collection<E>)

3. SortedSet<E> 一个集(set)Q它包含的元素都是排好序?它扩展了Set<E>)
4. List<E> 一个集合,在列表未被改动的情况下,它的元素按照特定的序存放(它扩展了Collection<E>)
5. Queue<E> 一个集合,它的元素h隐含的顺?它扩展了Collection<E>)。每个队?queue)Q都有一个头(head)元素Q它是某些具体操?如peak和poll)的操作对象?br /> 6. Map<K,V> 一个从?key)到?value)的映?mapping)Q每个键臛_可以映射C个倹{?br /> 7. SortedMap<K,V> 一个映,它的键都是经q排序的(它扩展了Map<K,V>)?br /> 8. Iterator<E> 一些对象的接口Q它可以从集合中q回其中的元素,每次q回一个。它是具有从Iterable.iteratorҎq回的对象的cd?br /> 9. ListIterator<E> List对象的P代器Q其中添加了许多有用的与List相关的方法。它是具有从Iterable.listIteratorҎq回的对象的cd?br /> 10. Iterable<E> 一个提供Iterator的对象,它可以用于增强型for语句?注:它被定义在java.lang包中)

实现介绍

1. HashSet<E> 一个作为散列表(hashtable)实现的Set。它是一个良好的通用实现Q其查找、添加和U除操作对于内容的大相当不敏感?br /> 2. TreeSet<E> 一个作为^衡二叉树(balanced binarytree)实现的SortedSet。它的查扑֒修改比HashSet要慢Q但可以保证元素是经q排序的?br /> 3. ArrayList<E> 使用可调整大的数组实现了List。当列表(list)很大Ӟ在表的头部进行添加和U除代h很大Q但时创建和随机讉K它的代h比较?br /> 4. LinkedList<E> 是List和Queue的双向链接实现。对于Q何大的LinkedList修改的代价都很小Q但随机讉K较慢?br /> 5. HashMap<K,V> Map的一个散列表实现。它是一个具有快速查扑֒插入功能的非帔R用的集合?br /> 6. TreeMap<K,V> SortedMap实现Z个^衡二叉树Q以保它的元素是根据键排序的。它适用于那些需要根据键q行快速查扄有序数据集合?br />

Eric.Zhou 2008-04-15 20:47 发表评论
]]>
软g?javax.xml.validation 的描q?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/rain1102/archive/2008/03/07/184434.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/184434.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2008/03/07/184434.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/184434.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/184434.html</trackback:ping><description><![CDATA[<h2>软g?javax.xml.validation </h2> 此包提供了用?XML 文档验证?API? <p><strong>请参见:</strong> <br />           <a ><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>cL?/strong></font></th> </tr> <tr class="TableRowColor" bgcolor="white"> <td width="15%"><strong><a title="javax.xml.validation 中的c? >Schema</a></strong></td> <td>不可变的语法存储表示形式?/td> </tr> <tr class="TableRowColor" bgcolor="white"> <td width="15%"><strong><a title="javax.xml.validation 中的c? >SchemaFactory</a></strong></td> <td>创徏 <a title="javax.xml.validation 中的c? ><code>Schema</code></a> 对象的工厂?/td> </tr> <tr class="TableRowColor" bgcolor="white"> <td width="15%"><strong><a title="javax.xml.validation 中的c? >SchemaFactoryLoader</a></strong></td> <td style="width: 808px; height: 26px">创徏 <a title="javax.xml.validation 中的c? ><code>SchemaFactory</code></a> 的工厂?/td> </tr> <tr class="TableRowColor" bgcolor="white"> <td width="15%"><strong><a title="javax.xml.validation 中的c? >TypeInfoProvider</a></strong></td> <td>此类提供了对 <a title="javax.xml.validation 中的c? ><code>ValidatorHandler</code></a> 所定的类型信息的讉K?/td> </tr> <tr class="TableRowColor" bgcolor="white"> <td width="15%"><strong><a title="javax.xml.validation 中的c? >Validator</a></strong></td> <td>Ҏ <a title="javax.xml.validation 中的c? ><code>Schema</code></a> ?XML 文档的处理器?/td> </tr> <tr class="TableRowColor" bgcolor="white"> <td width="15%"><strong><a title="javax.xml.validation 中的c? >ValidatorHandler</a></strong></td> <td>处理 SAX 的验证器?/td> </tr> </tbody> </table>   <p><a name="package_description"><!-- --></a> <h2>软g?javax.xml.validation 的描q?</h2> <p> <p>此包提供了用?XML 文档验证?API?em>Validation</em> 是验?XML 文档是否为指?XML <em>schema</em> 的实例的q程。XML 模式定义了其实例文档表C的内容模式Q也UCؓ <em>grammar</em> ?<em>vocabulary</em>Q?</p> <p>有多U流行的技术用于创?XML 模式。最行的技术包括: </p> <ul> <li><strong>Document Type Definition (DTD)</strong> Q- XML 的内|模式语a? <li><strong><a >W3C XML Schema (WXS)</a></strong> Q- 面向对象?XML 模式语言。WXS q提供了用于U束 XML 文档的字W数据的cdpȝ。WXS 通过 <a >World Wide Web Consortium (W3C)</a> l护Q它?W3C RecommendationQ即公认?W3C 标准规范Q? <li><strong><a >RELAX NG (RNG)</a></strong> Q- Z模式的、用户友好的 XML 模式语言。RNG 模式也可以用类型来U束 XML 字符数据。RNG 通过 <a >Organization for the Advancement of Structured Information Standards (OASIS)</a> l护Q它既是 OASIS 标准也是 <a >ISO (International Organization for Standardization)</a> 标准? <li><strong><a >Schematron</a></strong> Q- Z规则?XML 模式语言。相对于 DTD、WXS ?RNG 是用于表C内Ҏ式的l构而言QSchematron 的设计是Z实施难以或不能通过其他模式语言表示的个别规则。Schematron 是ؓ了补充以l构化模式语aQ例?aforementionedQ编写的模式。Schematron 正在成ؓ一?ISO 标准?</li> </ul> <p>以前?JAXP 版本支持作ؓ XML 解析器的功能的验证,要么通过 <a title="javax.xml.parsers 中的c? ><code>SAXParser</code></a> 实例Q要么通过 <a title="javax.xml.parsers 中的c? ><code>DocumentBuilder</code></a> 实例来表C?</p> <p>JAXP 验证 API ?XML 文档解析中分d实例文档的验证。这h几种优点Q一些原因包括: </p> <ul> <li><strong>支持额外的模式语a?/strong> ?JDK 1.5 开始,两种最行?JAXP 解析器实玎ͼCrimson ?XercesQ仅支持可用?XML 模式语言的子集。Validation API 提供了标准的机制Q应用程序通过此机制可利用支持额外模式语言的规范验证库? <li><strong>单的 XML 实例与模式的q行时耦合?/strong> 指定要用于通过 JAXP 解析器验证的模式位置可能易于h。Validation API 使此q程变得单(参见以下<a >CZ</a>Q?</li> </ul> <p><a name="example-1"><strong>用例</strong>?/a>以下CZ演示了通过 Validation API 验证 XML 文档Qؓ了方侉K读,此例未显C某些异常处理)Q?</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 q行了集成。应用程序可以通过验证 API 创徏 <a title="javax.xml.validation 中的c? ><code>Schema</code></a>Qƈ通过使用 <a ><code>DocumentBuilderFactory.setSchema(Schema)</code></a> ?<a ><code>SAXParserFactory.setSchema(Schema)</code></a> Ҏ其?<a title="javax.xml.parsers 中的c? ><code>DocumentBuilderFactory</code></a> ?<a title="javax.xml.parsers 中的c? ><code>SAXParserFactory</code></a> 实例q行兌?strong>您不?/strong>既设|模式,又调用解析器工厂上的 <code>setValidating(true)</code>。前者的技术将D解析器用新的验?APIQ后者将D解析器用它们自q内部验证工具?strong>同时调整q两个选项导致冗余行为或错误条g?/strong> </p><img src ="http://www.aygfsteel.com/rain1102/aggbug/184434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-07 11:03 <a href="http://www.aygfsteel.com/rain1102/archive/2008/03/07/184434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决URL传递中文参敎ͼ比如hello.action?msg=哈哈之类Q出Cؕ码的问题 http://www.aygfsteel.com/rain1102/archive/2008/03/06/184264.htmlEric.ZhouEric.ZhouThu, 06 Mar 2008 06:56:00 GMThttp://www.aygfsteel.com/rain1102/archive/2008/03/06/184264.htmlhttp://www.aygfsteel.com/rain1102/comments/184264.htmlhttp://www.aygfsteel.com/rain1102/archive/2008/03/06/184264.html#Feedback2http://www.aygfsteel.com/rain1102/comments/commentRss/184264.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/184264.html <Connector acceptCount='100' connectionTimeout='20000' debug='0'
      disableUploadTimeout='true' enableLookups='false'
      maxSpareThreads='75' maxThreads='150' minSpareThreads='25'
      port='8080' redirectPort='8443' URIEncoding='GBK'/>


加上 URIEncoding='GBK' 卛_?


Eric.Zhou 2008-03-06 14:56 发表评论
]]>
使用 Log4j 搭徏一个日志服务器 http://www.aygfsteel.com/rain1102/archive/2007/12/24/170082.htmlEric.ZhouEric.ZhouMon, 24 Dec 2007 07:56:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/12/24/170082.htmlhttp://www.aygfsteel.com/rain1102/comments/170082.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/12/24/170082.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/170082.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/170082.html1.基本使用
  
  1.1服务?/strong>
  
  q个日志服务器的服务器端需要运行:
  
  log4j jar包中的org.apache.log4j.net.SocketServer
  
  加参?【本地监听端口】【配|文件】【客L配置文g目录?br />   
  W三个参数【配|文件目录】其实指的是针对每个客户端的配置文gQ等会详l讲Q现在用“.”可以了.
  
  服务器端的配|文件可以用q个Q引自利用Log4j 创徏日志服务?By ??Q:
  
  #文g名socketserver.properties
  #如果需要显C日志界面,可以本行启?br />   #log4j.rootCategory=, A1
  log4j.rootLogger=DEBUG,A3
  log4j.category.org.apache.log4j.net=INFO
  
  log4j.appender.A1=org.apache.log4j.lf5.LF5Appender
  log4j.appender.A1.MaxNumberOfRecords=700
  
  log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.A4.file=server.log
  log4j.appender.A4.DatePattern='.'yyyyMMdd
  log4j.appender.A4.layout=org.apache.log4j.PatternLayout
  log4j.appender.A4.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
  
  log4j.appender.A3=org.apache.log4j.RollingFileAppender
  log4j.appender.A3.file=server2.log
  log4j.appender.A3.MaxFileSize=1024KB
  log4j.appender.A3.MaxBackupIndex=999
  log4j.appender.A3.layout=org.apache.log4j.PatternLayout
  log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
  
  其中A1是启动Lf5的log监视l端QA3限制大小的文ӞA4是日期滚动文件?br />   
  单A3QA4是讲所有客L的日志都存放C同一个日志文件中Q我觉的q种Ҏq不好?br />   
  1.2客户?/strong>
  
  客户端的配置文g是这LQ?br />   log4j.rootCategory=,SOCKET
  log4j.addivity.org.apache=true
  
  #应用于socket
  log4j.appender.SOCKET=org.apache.log4j.net.SocketAppender
  log4j.appender.SOCKET.RemoteHost=localhost  #服务器的IP地址
  log4j.appender.SOCKET.Port=1978       #服务器的监听端口
  log4j.appender.SOCKET.LocationInfo=true   #q个是什么我不知?br />   log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
  log4j.appender.SOCKET.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%t%m%n
  
  #A2
  log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.A2.file=server.log
  log4j.appender.A2.DatePattern='.'yyyy-MM-dd
  log4j.appender.A2.layout=org.apache.log4j.PatternLayout
  log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
  
  启动服务器端,再运行客L可以了!但所有的服务器端/客户端的日志都放C一个日志文件中!
  
  2.E微高点的使用
  
  下面讲如何把各个客户端和服务器端的日志分别放C同的日志文g?
  
  q个我在|上找了好久也没有找?
  
  2.1服务?/strong>
  
  服务器的配置文g不用怎么改动Q如果你不需要在同一个文件中存放所有日志,可以把配|文件第一行的A3L?br />   
  但服务器端有个更大的ȝQ代码有问题Q问题够大了吧,不知道算不算是个bugQ我用的?.2.11版log4jQ?br />   
  改吧!
  
  打开log4j目录下的src\java\org\apache\log4j\net\SocketServer.java
  
  在这D中改动(看下面代码第12?
  
  LoggerRepository configureHierarchy(InetAddress inetAddress) {
  cat.info("Locating configuration file for "+inetAddress);
  // We assume that the toSting method of InetAddress returns is in
  // the format hostname/d1.d2.d3.d4 e.g. torino/192.168.1.1
  String s = inetAddress.toString();
  int i = s.indexOf("/");
  if(i == -1) {
  cat.warn("Could not parse the inetAddress ["+inetAddress+
  "]. Using default hierarchy.");
  return genericHierarchy();
  } else {
  //q个是什么意?专门?/"W号?明显是错?闭掉
  //  String key = s.substring(0, i);
  //改ؓ
  String key = s.substring(i+1);
  File configFile = new File(dir, key+CONFIG_FILE_EXT);
  if(configFile.exists()) {
  Hierarchy h = new Hierarchy(new RootLogger((Level) Priority.DEBUG));
  hierarchyMap.put(inetAddress, h);
  
  new PropertyConfigurator().doConfigure(configFile.getAbsolutePath(), h);
  
  return h;
  } else {
  cat.warn("Could not find config file ["+configFile+"].");
  return genericHierarchy();
  }
  }
  }
  
  ~译文g!
  
  打开log4j目录下的src\java\org\apache\log4j\net\SocketNode.java
  
  (改这D|因ؓ我用的时候出?看不出来改不Ҏ什么区?
  
  改第54?br />   
  ois = new ObjectInputStream(
  new BufferedInputStream(socket.getInputStream()));
  
  ?br />   
  InputStream is = socket.getInputStream();
  if (is != null) {
  ois = new ObjectInputStream(new BufferedInputStream(is));
  }
  
  文g头加 import Java.io.InputStream;
  
  ~译文g!
  
  现在为每个配|客L~配|文?把配|文件放到【客L配置文g目录】中:
  log4j.rootCategory=,A4
  log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.A4.file=127.0.0.1.log  #为每个客L取不同的名字
  log4j.appender.A4.DatePattern='.'yyyyMMdd
  log4j.appender.A4.layout=org.apache.log4j.PatternLayout
  log4j.appender.A4.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
  
  保存文g名ؓ[客户端ip地址].lcf ?92.168.0.126.lcf
  
  2.2 客户?/strong>
  
  客户端不用改?太幸q了!!
  
  ok?
  
  启动服务?启动客户?现在服务器的日志攑ֈ了server.log?有配|文件的客户端的日志会放到相应的日志文g?没有配置文g的客L的日志依然放在server.log?
  
  SocketServer.java ?SocketNode.java两个文g可以单独做一个工E?把他们的packageLp?

Eric.Zhou 2007-12-24 15:56 发表评论
]]>
采用GenericManager做业务处理的时候CGLIB报错. http://www.aygfsteel.com/rain1102/archive/2007/12/23/169846.htmlEric.ZhouEric.ZhouSun, 23 Dec 2007 12:26:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/12/23/169846.htmlhttp://www.aygfsteel.com/rain1102/comments/169846.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/12/23/169846.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/169846.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/169846.html
  1. public interface GenericManager<T, PK extends Serializable> {   
  2.   
  3. public List<T> getAll();   
  4.   
  5. public T get(PK id);   
  6.   
  7. .......基本的CRUDҎ   
  8.   
  9. }  

  1. public class GenericManagerImpl<T, PK extends Serializable> implements GenericManager<T, PK> {   
  2.   
  3. protected BaseGenericHibernateDAO<T, PK> baseGenericHibernateDAO;   
  4.   
  5. public GenericManagerImpl(BaseGenericHibernateDAO<T, PK> baseGenericHibernateDAO) {   
  6. this.baseGenericHibernateDAO = baseGenericHibernateDAO;   
  7. }   
  8.   
  9. 对应实现上面的接口CRUDҎ   
  10.   
  11. }  
但是现在目启动的时候抛Z个如下的错误:
  • Caused by: org.springframework.aop.framework.AopConfigException: Couldn't generate CGLIB subclass of class [class com.xxxx.user.service.impl.UserManagerImpl]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given   
  • Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given   
  • at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:718)  

  • 是Spring AOP的问?主要是出现在事务q块,׃我用的是Spring2.0 AOP 来声明事?在声明事务的时候我把taget-prent-class="true" ?但事实上不能为true.Lq个OK了因针对接口代理.


    Eric.Zhou 2007-12-23 20:26 发表评论
    ]]>
    apache 配置多个端口http://www.aygfsteel.com/rain1102/archive/2007/11/22/162396.htmlEric.ZhouEric.ZhouThu, 22 Nov 2007 07:57:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/11/22/162396.htmlhttp://www.aygfsteel.com/rain1102/comments/162396.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/11/22/162396.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/162396.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/162396.html   扑ֈListen   <ip>:80  
      或者Listen:80  
      d或更改ؓ你要d的端口(不能有冲H)如下面的例子Q? 
      Listen   80  
      Listen   81  
      Listen   82  
      再徏立虚拟主机,如下:  
       
      NameVirtualHost   localhost:80  
      NameVirtualHost   localhost:2222   
      NameVirtualHost   localhost:6666   
      <VirtualHost   localhost:80>  
              DocumentRoot   E:\webroot\  
              ServerName   localhost:80  
      </VirtualHost>  
      <VirtualHost   localhost:2222>   
              DocumentRoot   f:\webroot\  
              ServerName   locahost:2222   
      </VirtualHost>  
      <VirtualHost   localhost:6666 >  
              DocumentRoot  D:\webroot\web\phpmyadmin  
              ServerName   localhost:6666   
      </VirtualHost>  


    Eric.Zhou 2007-11-22 15:57 发表评论
    ]]>
    Apache 两种虚拟L方式的区?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/rain1102/archive/2007/11/12/159875.html</guid><wfw:comment>http://www.aygfsteel.com/rain1102/comments/159875.html</wfw:comment><comments>http://www.aygfsteel.com/rain1102/archive/2007/11/12/159875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/rain1102/comments/commentRss/159875.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/rain1102/services/trackbacks/159875.html</trackback:ping><description><![CDATA[大多Ch可能q?Apache 的基于名字的虚拟LQ不知道 Apache q可以有Z IP 的虚拟主机。前者的道理不言自明Q多个域名(服务器)对应一?IP 地址Q配|方法ؓQ?br /> <br /> NameVirtualHost 111.22.33.44<br /> <VirtualHost 111.22.33.44><br /> ServerName www.sample.com<br /> DocumentRoot /www/sample<br /> </VirtualHost><br /> <br /> <VirtualHost 111.22.33.44><br /> ServerName www.sample2.com<br /> DocumentRoot /www/sample2<br /> </VirtualHost><br /> <br /> 但是在有?IP 地址充裕Q但是机器资源紧张的环境下,我们可能要把多个域名解析到同一台机器上Q其配置Ҏ为:<br /> <br /> <VirtualHost www.smallco.com><br /> ServerName www.smallco.com<br /> DocumentRoot /groups/smallco/www<br /> </VirtualHost><br /> <br /> <VirtualHost www.baygroup.org><br /> ServerName www.baygroup.org<br /> DocumentRoot /groups/baygroup/www<br /> </VirtualHost><br /> <br /> q种Ҏ下,要求机器配置多个 IP 地址?br /><img src ="http://www.aygfsteel.com/rain1102/aggbug/159875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/rain1102/" target="_blank">Eric.Zhou</a> 2007-11-12 09:28 <a href="http://www.aygfsteel.com/rain1102/archive/2007/11/12/159875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>James的安装与使用 (转蝲)http://www.aygfsteel.com/rain1102/archive/2007/10/16/153314.htmlEric.ZhouEric.ZhouTue, 16 Oct 2007 08:42:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/10/16/153314.htmlhttp://www.aygfsteel.com/rain1102/comments/153314.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/10/16/153314.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/153314.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/153314.html一?span style="font-family: 宋体">安装Q?/span>

    1Q?nbsp;环境要求Q?/span>

    已安?/span>Javaq_Q版本ؓj2sdk1.4.2Q环境变?/span>JAVA_HOME设ؓC:"j2sdk1.4.2Q?/span>

    2Q?nbsp;下蝲与运行:

    ?/span>Apache|站上下载得C个压~的文gjames-2.1-bin.zipQ大ؓ4.44MQ将此包解压?/span>C:"James"james-2.1下?/span>

    q行分ؓ两种方式Q前台直接运行、作为后台服务运行;

    1>前台直接q行Q?/span>

    ?/span>C:"James"james-2.1"bin下运?/span>run.bat

    q是会出玎ͼ

    Using PHOENIX_HOME:   C:"James"james-2.1

    Using PHOENIX_TMPDIR: C:"James"james-2.1"temp

    Using JAVA_HOME:      C:"j2sdk1.4.2

    Phoenix 4.0.1

    James 2.1

    Remote Manager Service started plain:4555

    POP3 Service started plain:110

    SMTP Service started plain:25

    NNTP Service Disabled

    Fetch POP Disabled

    q是pC?/span>James邮g服务以开启,不过Window下不能关闭控制台H口Q否者邮件服务会停止。如要克服此~点必须?/span>James邮g服务作ؓ作ؓ后台服务q行?/span>

    停止前台q行?/span>Ctrl+C,会出玎ͼ

    JVM exiting abnormally. Shutting down Phoenix.

    l止批处理操作吗(Y/N)?

    2>后台服务q行Q?/span>

    ?/span>C:"James"james-2.1"conf目录下的wrapper.conf拯?/span>C:"James"james-2.1"bin卛_?/span>wrapper.exe的目录下Q运行:

    wrapper.exe    -i     C:"James"james-2.1"bin"wrapper.conf 

    然后在控刉板中开启服务或重启卛_?/span>

    卸蝲后台服务Q?/span>

    ?/span>C:"James"james-2.1"bin卛_?/span>wrapper.exe的目录下Q运行:

    wrapper.exe     -r    C:"James"james-2.1"bin"wrapper.conf

    3Q?nbsp; 

    二?span style="font-family: 宋体">配置Q?/span>

    1>服务器端配置Q邮件服务器的名字假讑֏EmailServerQ服务器理员名AdminQ?/span>

    首先停止已开启的James邮g服务Q然后打开文gC:"James"james-2.1"apps"james"SAR-INF"config.xml?/span>

    Ø         ?/span>config.xml文g中,扑ֈPostmaster@localhostQ把此项改ؓAdmin@EmailServerQ同Ӟ扑ֈ位于

    <!-- By default, the servername 'localhost' is specified. This can be removed, if required.   -->

    - <!-- 

     -->

    - <!-- Warning: If you are using fetchpop it is important to include the   -->

    - <!-- fetched domains in the server name list to prevent looping.       -->

    - <servernames autodetect="true" autodetectIP="true">

    - <!-- CONFIRM?

      -->

     <servername> localhost </servername>

     </servernames>

    ?/span>localhostQ把此项改ؓEmailServer。这样就可以让其它机器也能访问邮件系l?/span>

    Ø         DNS配置Q找到同上文件中<dnsserver>D中的如下程序段Q?/span>

    - <dnsserver>

    - <servers>

    - <!-- CONFIRM?   -->

    - <!-- Enter ip address of your DNS server, one IP address per server   -->

    - <!-- element. The default configuration assumes a DNS server on the localhost.   -->

     <server>127.0.0.1</server>

     </servers>

     <authoritative>false</authoritative>

     </dnsserver>

    ?/span>127.0.0.1的位|填?/span>DNS服务器的IP地址Q?/span>

    Ø         修改理员密码:

    扑ֈ同上文g中的<administrator_accounts>D,如下E序D?/span>

    - <administrator_accounts>

    - <!-- CHECKME!

     -->

    - <!-- Change the default login/password.

     -->

     <account login="root" password="root" />

     </administrator_accounts>

    默认用户名root与密?/span>root修改为需要的?/span>

    Ø         修改telnet理E序d端口 Q(默认?/span>4555Q?/span>

    扑ֈ同上文g中的<remotemanager>D下?/span>port如下E序D?/span>

    - <remotemanager>

     <port>4555</port>

    - <!--   Uncomment this if you want to bind to a specific inetaddress

     -->

    -          <!--

    ?/span><port>4555</port>之间的端口号4555改ؓ需要的端口?/span>

    2> 客户端配|?/span>Q(略)

    3>帐号理

    James的̎L理是通过telnet完成的,d命o为:

    telnet EmailServer 4555

    其中EmailServer也可以换?/span>IPQ?/span>4555是端口号。登录时需要用户名和密码,开始默认的用户名和密码均ؓroot。若d成功Q提C如下:

    JAMES Remote Administration Tool 2.1

    Please enter your login and password

    Login id:

           此时输入root用户?/span>,然后会出玎ͼ

                  Password:

           输入密码root

    注意Q在有些操作pȝ?/span>Windows2000上,用户输入均不昄?/span>

    telnet命o列表Q?/span>

    help

    昄帮助

    Listusers

    列出目前存在的̎?/span>

    Countusers

    昄目前存在的̎L数量

    addusers [用户?/span>] [密码]

    d新用?/span>

    verify [用户?/span>]

    验证特定用户是否存在

    deluser [用户?/span>]   

    删除已存在用?/span>

    setpassword [用户?/span>] [密码]      

    讄某一用户的密?/span>

    setalias [别名] [用户?/span>]

    从本地将[别名]的所有邮件{?/span>[用户?/span>]

    unsetalias [别名]

    取消setalias

    setforwarding [用户?/span>] [email地址]

    ?/span>[用户?/span>]的邮件{寄指?/span>[email地址]

    unsetforwarding [用户?/span>]

    取消setforwarding

    user [资源]

    变ؓ另一用户的资?/span>

    shutdown      

    停止当前James邮g服务?/span>JVME序(对于James为后台服务时Q用此命令很方便)

    Quit

    断开telnetq接

    4>用户信息的数据库存储

    James邮g用户的用户信息默认保存在apps"james"var"users目录下,通过修改配置文gapps"james"SAR-INF"config.xmlQ可以把用户信息保存到数据库中,配置Ҏ如下Q?/span>

    假设使用的是MySQL数据库:

    W一步:首先?/span>MySQL的驱动程序(例如Q?/span>mysql-connector-java-3.1.6-bin.jarQ考到james?/span>lib目录下(例如Q?/span>D:"james"libQ?/span>

    W二步:?/span>MySQL中新Z个数据库mailQ?/span>

    W三步:打开config.xmlQ找?/span><users-store>q一,此面默认的内容ؓQ?/span>

    <repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">
             <destination URL="file://var/users/"/>
    </repository>

    需要修改ؓQ?/span>

    <repository name="LocalUsers"

     class="org.apache.james.userrepository.JamesUsersJdbcRepository" destinationURL="db://maildb/users">
             <sqlFile>file://conf/sqlResources.xml</sqlFile>
          </repository>

    其实如不修改也行Q因为文件下面也有实例,不过是用<!-- ?/span> --> 注释掉的Q打开卛_Q记住把

    <repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">
             <destination URL="file://var/users/"/>
    </repository>

    ?/span><!-- ?/span> --> 注释掉;

    通过修改Q我们就把用户信息的存储介质?/span>fileҎ?/span>dbQ?/span><sqlFile>是指明了?/span>db中的数据表结构及相关数据库信息?/span>

    W四步:仍然?/span>config.xmlQ找?/span><data-sources>,默认内容为空Q把此项内容修改为:

    <data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource">
                               <driver>org.gjt.mm.mysql.Driver</driver>
                                <dburl>jdbc:mysql://127.0.0.1/mail</dburl>
                                <user>root</user>
                                <password></password>
                                <max>20</max>
    </data-source>

    或打开文g下面实例?/span><!-- ?/span> --> 注释

    <driver>是指MySQL?/span>JDBC驱动Q注意这个默认的<driver>是有问题的,要改?/span>MySQL的驱动程序中Driver.class的\径,卻I

                       <driver>com.mysql.jdbc.Driver</driver>

    <dburl>指数据库的访问\径,IP后的mail?/span>MySQL?span style="color: blue">新徏数据库名Q接下来是用户名、密码及最大连接数?/span>

    再次启动Ӟjamesmail数据库中自动创徏有关用户的表根{?/span>

    xQ数据库配置完成Q启?/span>JamesQ若正常无误Q请通过telnetd一个新用户Q比?/span>adduser holen 123456Q然后检?/span>MySQL中的mail数据库,下面有一个表usersQ这?/span>JamesҎfile://conf/sqlResources.xml的内容创建的?/span>

    通过以上配置Q?/span>James的用户信息就可以保存在数据库中了?/span>

    注:修改以前的̎户会丢失Q?/span>

    一、FAQ

    1?/span>在启?/span>jamesӞ提示POP3?/span>SMTP不能使用Q?/span>

    h查一下,?#8220;理工具?/span>>服务”里面Q是不是启动了别的邮件服务器Q已?/span>110?/span>25端口占用了?/span>

           实例Q?/span>

    james前台直接q行时出错:

    ERROR   2005-08-25 08:58:38.642 [Phoenix.] (): Component named "smtpserver" failed to pass through the Initialization stage. (Reason: Java.net.BindException: Address already in use: JVM_Bind).

    ERROR   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: Java.net.BindException: Address already in use: JVM_Bind).).

    org.apache.excalibur.containerkit.lifecycle.LifecycleException: Component named "smtpserver" failed to pass through the Initialization stage. (Reason: Java.net.BindException: Address already in use: JVM_Bind).

    原因Q?/span>

     james默认讄不允许在同一台机器上跑两个邮件服务器q程。必d掉另一个!

    方法:

    console界面下:

     d:> telnet L?/span> 25Q或110Q?/span>

    如果可以dQ出?/span>

     220 L?/span> Microsoft ESMTP MAIL Service, Version: 6.0.2600.1106 ready at Thu,

     25 Aug 2005 14:14:36 +0800

    则说明此机器上已有一台邮件服务器在运行?/span>

    解决Q?/span>

    ?/span>Windows上运行服务:

    跨网传输电子邮g的服?/span>Simple Mail Transfer Protocol (SMTP)Q是否启?/span>

    如启动关闭之Q?/span>

    2?/span> JAVA_HOME找不刎ͼ

    请在run.bat中指?/span>JAVA_HOMEQ若q不行,请在“我的电脑?/span>>pȝ?/span>>高?/span>>环境变量”中添加一?/span>JAVA_HOME?/span>

    3?/span>服务器启动正常,但客L不能收发邮gQ?/span>

    h查客L配置是否正常Q参照前面所Ԍ另外Q请?/span>james下的config.xmlQ是否把localhostҎ了机器名?/span>

    4、修改ؓ数据库储存后Q?/span>james启动出错Q?/span>

    一般是数据库驱动有错。检查一?/span>

    <data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource">
                               <driver>org.gjt.mm.mysql.Driver</driver>
                                <dburl>jdbc:mysql://127.0.0.1/mail</dburl>
                                <user>root</user>
                                <password></password>
                                <max>20</max>
    </data-source>

    ?/span><driver>org.gjt.mm.mysql.Driver</driver>是否?/span>



    Eric.Zhou 2007-10-16 16:42 发表评论
    ]]>
    apache2.2.4 + php5.2.3 安装配置Q增加连接mysql功能(转蝲)http://www.aygfsteel.com/rain1102/archive/2007/08/30/141422.htmlEric.ZhouEric.ZhouThu, 30 Aug 2007 08:18:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/08/30/141422.htmlhttp://www.aygfsteel.com/rain1102/comments/141422.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/08/30/141422.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/141422.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/141422.htmlAllow from all 


    1.安装apache2.2.4
    2.下蝲q解?php5.2.3   win-zip?br>3.讄 apache 配置文g httpd.conf 文g
    a.修改web服务器根目录 DocumentRoot  D:\Apache2.2\htdocs  成 DocumentRoot "D:/webroot"
    b.修改 <Directory "D:\Apache2.2\htdocs">   ?<Directory "D:/webroot">
    c.修改
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Satisfy all
    </Directory>

    成 
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Allow from all
        Satisfy all
    </Directory>
        

    d.d php功能
    ScriptAlias /php/ "D:/php5.2.3/"
    Action application/x-httpd-php "/php/php-cgi.exe"
    AddType application/x-httpd-php .php

    4.讄pȝ环境变量
      path d ;D:\php5.2.3;D:\php5.2.3\ext
    5. d讉Kmysql功能
        a.去除 extension=php_mysql.dll 前面?;?br> b.修改extension_dir ?php ext目录Q如Q?extension_dir = "D:/php5.2.3/ext/"  

    6.q行试代码

    <?php
    // q接Q选择数据?br>$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
        or die(
    'Could not connect: ' . mysql_error());
    echo
    'Connected successfully';
    mysql_select_db('my_database') or die('Could not select database');

    // 执行 SQL 查询
    $query = 'SELECT * FROM my_table';
    $result = mysql_query($query) or die('Query failed: ' . mysql_error());

    // ?HTML 昄l果
    echo "<table>\n";
    while (
    $line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        echo
    "\t<tr>\n";
        foreach (
    $line as $col_value) {
            echo
    "\t\t<td>$col_value</td>\n";
        }
        echo
    "\t</tr>\n";
    }
    echo
    "</table>\n";

    // 释放l果?br>mysql_free_result($result);

    // 关闭q接
    mysql_close($link);
    ?>


    Eric.Zhou 2007-08-30 16:18 发表评论
    ]]>
    PHP5.2.3安装( 转蝲)http://www.aygfsteel.com/rain1102/archive/2007/08/30/141394.htmlEric.ZhouEric.ZhouThu, 30 Aug 2007 07:18:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/08/30/141394.htmlhttp://www.aygfsteel.com/rain1102/comments/141394.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/08/30/141394.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/141394.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/141394.htmlW一步、安?nbsp;Apache 2.2.4  ?nbsp;http://httpd.apache.org 也就?nbsp;apache httpd 的官方站上把 apache httpd win32 安装包给下蝲下来?nbsp;
      下蝲地址Q?nbsp;
      http://apache.justdn.org/httpd/binaries/win32/......-x86-no_ssl.msi 
      之后可以进行安装了。假讑֮装在 D:\Program Files\Apache Software Foundation\Apache2.2 

      W二步、下?nbsp;PHP 5.2.1 
      ?nbsp;www.php.net 下蝲 PHP 5.2.3 ?nbsp;win32 包,我个人喜Ƣ?nbsp;PHP 5.2.3 zip packageQ而不喜欢使用 PHP 5.2.3 installerQ因为我觉得使用 PHP 5.2.3 zip package 便于以后升?nbsp;
      下蝲地址Q?nbsp;
      http://cn.php.net/get/php-5.2.3-Win32.zip/from/this/mirror 
      下载完?nbsp;php-5.2.1-Win32.zip 文g解压~到 D:\Program Files\PHP 目录Q将该目录下?nbsp;php.ini-dist 更名?nbsp;php.ini?nbsp;

      W三步,配置 Apache 2.2.4 
      打开目录QD:\Program Files\Apache Software Foundation\Apache2.2\conf\extra 
      新徏一个名为:httpd-php5.conf 的文本文Ӟ用记事本打开Q添加以下内?nbsp;

    LoadModule php5_module "D:\Program Files\PHP\php5apache2_2.dll" 

    AddType application/x-httpd-php .php 
    AddType application/x-httpd-php-source .phps 

    DirectoryIndex index.php 

    PHPIniDir "D:\Program Files\PHP" 

      然后用记事本打开QD:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf 
      在文件末添加一行: 

    Include conf/extra/httpd-php5.conf 

      W四步,试 
      重新启动 ApacheQ打开目录QD:\Program Files\Apache Software Foundation\Apache2.2\htdocs 
      新徏文gQindex.php 
      输入内容Q?nbsp;

    代码:<?php
    phpinfo();
    ?>


    Eric.Zhou 2007-08-30 15:18 发表评论
    ]]>
    windows上安装apache2.0.59 + svn1.4.0 + 自动邮g通知(转蝲)http://www.aygfsteel.com/rain1102/archive/2007/05/18/118256.htmlEric.ZhouEric.ZhouFri, 18 May 2007 02:01:00 GMThttp://www.aygfsteel.com/rain1102/archive/2007/05/18/118256.htmlhttp://www.aygfsteel.com/rain1102/comments/118256.htmlhttp://www.aygfsteel.com/rain1102/archive/2007/05/18/118256.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/118256.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/118256.html
    OS: Windows XP SP2

    1) 安装Apache Server
    2) 安装SVN
    3) 配置邮g通知以及修改log权限

    1. 安装apache2.0.59,从这里可以下载到http://apache.justdn.org/httpd/binaries/win32/apache_2.2.3-win32-x86-no_ssl.msi
    安装q程中设|以下参敎ͼ
    Network Domain: localhost
    Server name: localhost
    Administrator's Emai Address: windymax@126.com
    安装到默认\径ؓC:\Program Files\Apache Group\Apache2

    2. 安装subversion1.4.0,从这里下?a target=_blank>http://www.iusesvn.com/bbs/download/svn-win32-1.4.0.zip
    安装到默认\径ؓC:\Program Files\Subversion
    默认安装后,在apache的配|文件中会自动加入以下两行?br>LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so"
    LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so"
    把这行的注释L
    LoadModule dav_fs_module modules/mod_dav_fs.so

    拯C:\Program Files\Subversion\bin下的libdb44.dll到这个目录下C:\Program Files\Apache Group\Apache2\bin
    打开apache的配|文件在末尾处加入以下参敎ͼ
    <Location /svn>
    DAV svn
    SVNPath d:\svndata\test
    AuthType Basic
    AuthName "Windy SVN"
    AuthUserFile d:\svndata\test\passwd
    Require valid-user
    </Location>
    保存?在这里权限文件我不多讲了Q大家多做实验就明白?

    建立仓库
    打开CMD命o行界面,"开? -> "q行" -> "cmd" -> "回R"
    C:\Documents and Settings\windy> d:   //q入D?因ؓ我们要在D盘下创徏仓库)
    D:\> md svndata   //创徏一个名叫svndata的目?br>D:\> c:   //q入C?br>C:\Documents and Settings\windy> cd\   //退到C盘根目录
    C:\Documents and Settings\windy> cd C:\Program Files\Subversion\bin  //q入subversion/bin目录
    C:\Program Files\Subversion\bin> svnadmin create d:\svndata\test   //用svnadmin命o创徏名ؓtest的仓?q条命o成功后,在test下会出现很多文g夹和文g)
    C:\Program Files\Subversion\bin> cd C:\Program Files\Apache Group\Apache2\bin   //q入apache\bin目录
    C:\Program Files\Apache Group\Apache2\bin> htpasswd -cm d:\svndata\test\passwd user1   //用htpasswd命o创徏W一个用?user1)Q同时生成密码认证文Ӟc参数为create,m参数为MD5加密方式
    New password: ******
    Re-type new password: ******
    Adding password for user user1   //加入用户成功
    C:\Program Files\Apache Group\Apache2\bin> htpasswd -m d:\svndata\test\passwd user2   //用htpasswd命o创徏W二个用?user2),注意如果在这时加入c参数会覆盖掉之前创徏的用户及文g?br>New password: ******
    Re-type new password: ******
    Adding password for user user2   //加入用户成功

    重新启动apacheQ进行测试?br>用IE打开http://localhost/svnQ这时应该可以看?br>Revision 0: /
    --------------------------------------------------------------------------------
    Powered by Subversion version 1.4.0 (r21228).    //说明我们已经配置成功?br>
    3. 配置邮g通知以及修改log权限
    下蝲所需要的软g?br>--在这里下?a target=_blank>http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.819-MSWin32-x86-267479.msi到D盘根目录下?br>--下蝲http://download.microsoft.com/download/vc15/patch/1.52/w95/en-us/nmake15.exe到D盘根目录下?br>--下蝲http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Module-Build-0.2805.tar.gz到D盘根目录下,Module-Build-0.2805.tar.gz解压到D盘?br>--下蝲http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.10.tar.gz到D盘根目录下,Authen-SASL-2.10.tar.gz解压到D盘?br>--下蝲http://search.cpan.org/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz到D盘根目录下,Net-SMTP_auth-0.08.tar.gz解压到D盘?br>--下蝲http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/SVN-Notify-2.64.tar.gz到D盘根目录下,SVN-Notify-2.64.tar.gz解压到D盘?br>
    开始安装Perl以及模块
    --安装Active PerlQ一路默认安装,默认路径为C:\Perl
    --试perl是否正常工作(q步很关?
      打开CMD命o行界面,"开? -> "q行" -> "cmd" -> "回R"
       C:\Documents and Settings\windy> perl   //如果没有报错Q说明已l正常工作,因ؓ安装perlӞ安装E序会自动设|好环境perl(如果在系l环境变量中没有自动dQ需手动dperl变量环境)Q具体做法是Q?br>  "回到桌面" -> "鼠标右键我的电脑" -> "属? -> "高" -> "环境变量" -> "pȝ变量中Path最前面中添加C:\Perl\bin\;" ->"完成"?nbsp;  //试Q如果报错,请重新启动电脑后q行试?br>--nmake15.exe改名为nmake.exe后拷贝到c:\windows\system32目录下?br>--试nmake是否是否正常工作(q步很关?
      打开CMD命o行界面,"开? -> "q行" -> "cmd" -> "回R"
       C:\Documents and Settings\windy> nmake   
      Microsoft (R) Program Maintenance Utility   Version 1.50
      Copyright (c) Microsoft Corp 1988-94. All rights reserved.   //说明nmake已经正常工作
    --安装Module-Build模块
      打开CMD命o行界面,"开? -> "q行" -> "cmd" -> "回R"
      C:\Documents and Settings\windy> d:
      D:\> cd Module-Build-0.2805
      D:\Module-Build-0.2805> perl Build.PL   //攉pȝ环境变量
      D:\Module-Build-0.2805> Build   //q行~译
      D:\Module-Build-0.2805> Build test   //试
      D:\Module-Build-0.2805> Build install   //~译后安?nbsp; 
    --安装Perl模块Authen::SASLQ进入Authen-SASL-2.10目录Q首先开打Makefile.PL
      打开CMD命o行界面,"开? -> "q行" -> "cmd" -> "回R"
      C:\Documents and Settings\windy> d:
      D:\> cd Authen-SASL-2.10
      D:\Authen-SASL-2.10> perl Makefile.PL   //攉pȝ环境变量
      出现选择安装提示Qy和n先后安装一?br>  D:\Authen-SASL-2.10> nmake   //q行~译
      D:\Authen-SASL-2.10> nmake test  //q行试
      D:\Authen-SASL-2.10> nmake install   //~译后安?br>--安装Perl模块Net::SMTP_auth
      打开CMD命o行界面,"开? -> "q行" -> "cmd" -> "回R"
      C:\Documents and Settings\windy> d:
      D:\> cd Net-SMTP_auth-0.08
      D:\Net-SMTP_auth-0.08> perl Makefile.PL   //攉pȝ环境变量
      D:\Net-SMTP_auth-0.08> nmake   //q行~译
      D:\Net-SMTP_auth-0.08> nmake test   //试
      D:\Net-SMTP_auth-0.08> nmake install   //~译后安?br>--安装Perl模块SVN::Notify
      打开CMD命o行界面,"开? -> "q行" -> "cmd" -> "回R"
      C:\Documents and Settings\windy> d:
      D:\> cd SVN-Notify-2.64
      D:\SVN-Notify-2.64> perl Build.PL   //攉pȝ环境变量
      D:\SVN-Notify-2.64> Build   //q行~译
      D:\SVN-Notify-2.64> Build test   //试
      D:\SVN-Notify-2.64> Build installl   //~译后安?nbsp; 
    --安装完毕?br>
    讄邮g通知
    --拯post-commit.tmpl为post-commit.bat
    --删除末尾参数Q增加下面参敎ͼ
    set REPOS=%1
    set REV=%2
    SET PATH=C:\PERL\BIN;
    SET OS=Windows_NT
    SET SystemRoot=C:\WINDOWS
    svnnotify --repos-path %REPOS% -r %REV% --to windy@126.com --smtp smtp.126.com -H HTML::ColorDiff -d --subject-prefix [Windy SVN]
    //--to要跟你要发送给谁的邮g地址Q?-smtp后跟你自已的邮g服务器地址Q比如mail.126.com

    讄log可以修改
    --拯pre-revprop-change.tmpl为pre-revprop-change.bat
    --删除末尾参数Q增加下面参敎ͼ
    REM SVN pre-revprop-change hook allows edit of logmessages from TSVN

    setlocal
    set REPOS=%1
    set REV=%2
    set USER=%3
    set PROPNAME=%4
    set ACTION=%5

    if  not "%ACTION%"=="M" goto refuse
    if  not "%PROPNAME%"=="svn:log" goto refuse
    goto OK

    :refuse
    echo Cann't set %PROPNAME%/%ACTION%, only svn:log is allowed 1>&2
    endlocal
    exit 1

    :OK
    endlocal
    exit 0

    完成所有设|,开始测试?br>

    Eric.Zhou 2007-05-18 10:01 发表评论
    ]]>
    Tomcat+JSPl典配置实例http://www.aygfsteel.com/rain1102/archive/2006/11/22/82663.htmlEric.ZhouEric.ZhouWed, 22 Nov 2006 01:02:00 GMThttp://www.aygfsteel.com/rain1102/archive/2006/11/22/82663.htmlhttp://www.aygfsteel.com/rain1102/comments/82663.htmlhttp://www.aygfsteel.com/rain1102/archive/2006/11/22/82663.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/82663.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/82663.html

    l常看到jsp的初学者问tomcat下如何配|jsp、servlet和bean的问题,于是ȝ了一下如何tomcat下配|jsp、servlet和benQ希望对那些初学者有所帮助?/p>

    一、开发环境配|?/strong>

    W一步:下蝲j2sdk和tomcatQ到sun官方站(http://java.sun.com/j2se/1.5.0/download.jspQ下载j2sdkQ注意下载版本ؓWindows Offline Installation的SDKQ同时最好下载J2SE 1.5.0 DocumentationQ然后到tomcat官方站点Qhttp://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgiQ下载tomcatQ下载最?.5.9版本的tomcatQ;

    W二步:安装和配|你的j2sdk和tomcatQ执行j2sdk和tomcat的安装程序,然后按默认设|进行安装即可?/p>

    1.安装j2sdk以后Q需要配|一下环境变量,在我的电?>属?>高->环境变量->pȝ变量中添加以下环境变?假定你的j2sdk安装在c:\j2sdk1.5.0Q:

    JAVA_HOME=c:\j2sdk1.5.0
     classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;Q?;一定不能少Q因为它代表当前路径)
     path=%JAVA_HOME%\bin

    接着可以写一个简单的javaE序来测试J2SDK是否已安装成功:

    public class Test{
    public static void main(String args[]){
    System.out.println("This is a test program.");
    }
    }

    上面的q段E序保存为文件名为Test.java的文件?/p>

    然后打开命o提示W窗口,cdC的Test.java所在目录,然后键入下面的命?/p>

    javac Test.java
     Java Test

    此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印句话Q你需要仔l检查一下你的配|情c?/p>

    2.安装Tomcat后,在我的电?>属?>高->环境变量->pȝ变量中添加以下环境变?假定你的tomcat安装在c:\tomcat)Q?/p>

    CATALINA_HOME=c:\tomcat
     CATALINA_BASE=c:\tomcat

    然后修改环境变量中的classpathQ把tomat安装目录下的common\lib下的(可以Ҏ实际q加)servlet.jarq加到classpath中去Q修改后的classpath如下Q?/p>

    classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;

    接着可以启动tomcatQ在IE中访问http://localhost:8080Q如果看到tomcat的欢q页面的话说明安装成功了?/p>

    W三步:建立自己的jsp app目录

    1.到Tomcat的安装目录的webapps目录Q可以看到ROOTQexamples, tomcat-docs之类Tomcat自带的的目录Q?br /> 2.在webapps目录下新Z个目录,起名叫myappQ?br /> 3.myapp下新Z个目录WEB-INFQ注意,目录名称是区分大写的;
     4.WEB-INF下新Z个文件web.xmlQ内容如下:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
    <display-name>My Web Application</display-name>
    <description>
    A application for test.
    </description>
    </web-app>

    5.在myapp下新Z个测试的jsp面Q文件名为index.jspQ文件内容如下:

    <html><body><center>
    Now time is: <%=new Java.util.Date()%>
    </center></body></html>

    6.重启Tomcat

    7.打开览器,输入http://localhost:8080/myapp/index.jsp 看到当前旉的话说明成功了?/p>

    W四步:建立自己的ServletQ?/p>

    1.用你最熟悉的编辑器Q徏议用有语法查的java ideQ新Z个servletE序Q文件名为Test.javaQ文件内容如下:

    package test;
    import Java.io.IOException;
    import Java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class Test extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    PrintWriter out=response.getWriter();
    out.println("<html><body><h1>This is a servlet test.</h1></body></html>");
    out.flush();
    }
    }

    2 .~译
     Test.java攑֜c:\test下,使用如下命o~译Q?/p>

    C:\Test>javac Test.java

    然后在c:\Test下会产生一个编译后的servlet文gQTest.class

    3 .结构test\Test.class剪切?CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那个test目录到classes目录下,如果classes目录不存在,新Z个?现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结?/p>

    4 .修改webapps\myapp\WEB-INF\web.xmlQ添加servlet和servlet-mapping

    ~辑后的web.xml如下所C,U色为添加的内容:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
    <display-name>My Web Application</display-name>
    <description>
    A application for test.
    </description>
    <servlet>
    <servlet-name>Test</servlet-name>
    <display-name>Test</display-name>
    <description>A test Servlet</description>
    <servlet-class>test.Test</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/Test</url-pattern>
    </servlet-mapping>
    </web-app>

    q段话中的servletq一D声明了你要调用的ServletQ而servlet-mapping则是声明的servlet"映射"到地址/Test?/p>

    5 .好了Q重启动TomcatQ启动浏览器Q输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.p明编写的servlet成功了?/p>

    注意Q修改了web.xml以及新加了classQ都要重启Tomcat

    W四步:建立自己的BeanQ?/p>

    1.用你最熟悉的编辑器Q徏议用有语法查的java ideQ新Z个javaE序Q文件名为TestBean.javaQ文件内容如下:

    package test;
    public class TestBean{
    private String name = null;
    public TestBean(String strName_p){
    this.name=strName_p;
    }
    public void setName(String strName_p){
    this.name=strName_p;
    }
    public String getName(){
    return this.name;
    }
    }

    2 .~译

    TestBean.java攑֜c:\test下,使用如下命o~译Q?/p>

    C:\Test>javac TestBean.java

    然后在c:\Test下会产生一个编译后的bean文gQTestBean.class

    3 .TestBean.class文g剪切?%CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,

    4 .新徏一个TestBean.jsp文gQ文件内容ؓQ?/p>
    <%@ page import="test.TestBean" %>
    <html><body><center>
    <%
    TestBean testBean=new TestBean("This is a test Java bean.");
    %>
    Java bean name is: <%=testBean.getName()%>
    </center></body></html>

    5 .好了Q重启TomcatQ启动浏览器Q输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test Java bean.p明编写的Bean成功了?/p>

    q样完成了整个Tomcat下的jsp、servlet和javabean的配|。接下来需要做的事情就是多看书、多d人的好代码,自己多动手写代码以增己在q方面开发的能力了?/p>

    jvm应填写到
     c:\j2sdk\bin

    l你一个简单的配置Q:Q:

    JSP环境配置心得

    首先要说的是Q用jdk+tomcat完全可以配置我们的jsp服务器,不再需要其实Q何东东,有很多文章介l了ApacheQ其实根本用不着Q一般的学习调试tomcat完全可以胜Q了?/p>

    安装jdk后,tomcat在安装之前会自动扑ֈjdk的安装\径,一路点?下一?Q经q一D|间的文g复制Q最?close"Q完成comcat的安装?/p>

    您最好去下蝲一个版本较高的tomcatQ比?.1以上的,因ؓ它不需要设|太多的pȝ变量Q右?我的电脑"Q选择"属?->"高"->"环境变量"->"pȝ变量"Q新Z个TOMCAT_HOMEQD|成你的tomcat所在的路径Q比如:D:\Program Files\Apache Group\Tomcat 5.5Q配|完成?/p>

    从开始菜单中扑ֈtomcat选项Q一般打开序是:开?>E序->Apache Tomcat 5.5Q选择"Start Tomcat"Q让jsp服务器开始运行,此时会打开一个类似Dos的窗口,会显CZ些相关的信息?/p>

    如果您用代理上|,一定要先撤掉代理,不然您的jspE序永远也得不到执行。如果不是代理的Q这一步就跌了?/p>

    打开览器,在地址栏中输入Qhttp://localhost:8080Q如果看到有老虎Q我也不知道是老虎q是猫)的画面,恭喜您,您成功了一半?/p>

    先来享受一下成功的喜悦吧,误入下面的代码Q?/p>
    <html>
    <head>
    <title>First Page</title>
    </head>
    <body>
    <H3>Today is: h
    <%= new Java.util.Date() %>
    </H3>
    </body>
    </html>

    该E序保存?First.jspQ放到Tomcat的ROOT目录下,然后在浏览器的地址栏中输入Qhttp://localhost:8080/First.jspQ?First.jsp跟我们保存的文g名的大小写要一?回RQ如果不出意外,应该可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的结果?/p>

    注意QROOT是tomcat的默认虚拟目录,如果要改成自q虚拟目录怎么办呢Q请l箋往下看吧?/p>

    要改成自q虚拟目录Q就要请出server.xml来了Q该文g是一个配|文Ӟ在Tomcat\conf目录下,使用M文本~辑软g都能打开它,我们先找C面一句:

    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
    port="8080" minProcessors="5" maxProcessors="75"
    enableLookups="true" redirectPort="8443"
    acceptCount="100" debug="0" connectionTimeout="20000"
    useURIValidationHack="false" disableUploadTimeout="true" />

    q里的port="8080"是端口Q我们完全可以用别的端口来代替,但不能是被系l占用的端口Q?--1023Q,q里单提一下?/p>

    下面我们再往下找Q会发现以下的语句:

    </Context>
     </Host>

    我们应该找到这两个语句Q如果不懂E文,您就认定q两个语句好了。然后我们将该语句更改如下:

    </Context>
    <Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true">
    </Context>
    </Host>

    q里的path="/myjsp"是我们配|的虚拟目录了,以后在地址栏中输入http://localhost:8080/myjsp卛_。而docBase="e:/myjsp" 则是机器本地路径Q他们通过q个语句形成一个映关p,其它照抄?/p>

    上面的First.jsp文g攑ֈe:/myjsp目录下,输入http://localhost:8080/myjsp/First.jspQ是不是有一U喜上眉梢的感觉Q?/p>

    在论坛里我见得最多的是很多Z知道javaBean文g攑ֈ哪里Q老实说开始我也不知道Q更令h不解的是Q十个h有九U不同的说法Q这更让我们茫然。其实这问题也不是我们想像的那么复杂Q我们以一个例子说明:

    先徏立一个javaE序Q代码如下:

    package hall;
    public class SimpleBean {
    private String message = "No message specified";
    public String getMessage() {
    return(message);
    }
    public void setMessage(String message) {
    this.message = message;
    }
    }

    保存为SimpleBean.javaQ编译后会生成一个包Q其实就相当于一个目录,也就是SimpleBean.class会存攑֜hall目录中,暂且保存hQ将来备用?/p>

    再输入以下代码:

    <HTML>
    <HEAD>
    <TITLE>Reusing JavaBeans in JSP</TITLE>
    </HEAD>
    <BODY>
    <CENTER>
    <TABLE BORDER=5>
    <TR><TH CLASS="TITLE">
    Reusing JavaBeans in JSP</TABLE>
    </CENTER>
    <P>
    <jsp:useBean id="test" class="hall.SimpleBean" />
    <jsp:setProperty name="test" property="message" value="Hello WWW" />
    <H1>Message: <I>
    <jsp:getProperty name="test" property="message" />
    </I></H1>
    </BODY>

    保存在我们刚才徏立的虚拟目录e:/myjsp下面Qƈ命名为:BeanTest.jsp?/p>

    现在我们应该hallQ包Q目录放在哪儿呢Q别急,我们先在e:/myjsp下徏立一个文件夹WEB-INFQ然后再在WEB-INF下徏立一个classes文g夹,最后将hall目录攑ֈclasses下,当然Qhall下的字节码文件SimpleBean.class也一q要U过来,而SimpleBean.java和BeanTest.jsp攑ֈ同一目录吧(可以不需要放的,自己试试Q?/p>

    重新启动机器Q如果您试了好多ơ都不行Q这一步一定要做)Q在览器中输入Qhttp://localhost:8080/myjsp/BeanTest.jspQ您看到了什么?呵,别告诉我您什么都没看刎ͼ那肯定是您设|的问题了?/p>

    Java学习 - 技术文章中?/p>

    初学者问的诸如:《怎样配置环境变量》《怎样q行Servlet》啊Q这L问题太多了,现在我写一个初学者入门必读,以便对初学者有指导作用Q?/p>

    首先是下载工P

    我徏议初学者用EditplusQJDKQ我觉得如果用例如JBQEclipseQJCreatorQ虽然刚开始的时候比较方便,但是初学者门不知道怎样配置环境变量Q?/p>

    从而难以达到知其然Q知其所以然的地?/p>

    可以通过如下地址下蝲Q?/p>

    Editplus(最新版本是v2.11)Qhttp://count.skycn.com/softdown.php?id=3641&url=http://sc-http.skycn.net/down/epp211a_cn.exe(要照注册码就自己扑֐Q网上很多的Q?/p>

    JDK(最新版本是Java2sdk1_5_0)Qhttp://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.exeQ这是For WindowsQ?/p>

    然后是安装JDKQ我是把它装Cc:\JDK目录下面Q?/p>

    然后是CLASSPATH的问题了Q?/p>

    正如操作pȝ利用PATH来搜索可执行E序一PJavaq行环境也会遍历CLASSPATH来查扄Q即便是HelloWorldq样单的E序QJVM也会遍历

    CLASSPATH定义的每一个\径,直到扑ֈ相应的文件ؓ止?/p>

    怿大家用的pȝ不是2k是XPQ然后就应当如下讄PathQ?/p>

    我的电脑->属?>高->环境变量

    然后在环境变量的Path后面q加: C:\JDK\bin;.;C:\JDK\lib

    也可以这样配|?C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar

    ★记?环境变量中的 . 切记不能,它表C当前\径,如果掉出现的错误等会就_

    dt.jar是关于运行环境的cdQtools.jar是关于一些工Lcd

    如果没有配置:C:\JDK\binQ则会出?" javac′ 不是内部或外部命令,也不是可q行的程序或批处理文件?q样的错误?/p>

    然后下面p写程序了Q?/p>

    首先?HelloWorld.java),打开EditplusQ新Z个Java文gQ请照着如下输入Q要一字不漏,q且分清大小写:

    public class HelloWorld{
    public static void main(String[] args){
    System.out.println("Hello,World!");
    }
    }

    然后把这个文件保?ctrl + s)到HelloWorld.java,C大小写一定要分清Q是HelloWorld.java不是helloworld.java或者其它的

    下面pq行了,开?>q行->cmd

    在控制台中把目录切换到当前目录:

    javac HelloWorld.java
     Java HelloWorld

    你就会在控制C看见输出的Hello,World!(没出来?我把电脑吃了Q))

    javac是编译命令,它把HelloWorld.java~译成HelloWorld.class

    java是解释命oQJVM把HelloWorld.class解释执行.

    在这个时候:

    1。如果出现Exception in thread "main" Java.lang.NoClassDefFoundError: HelloWorld

    那就是你在环境变量中没有加上那个.(dot)

    2。如果出现Exception in thread "main" Java.lang.NoSuchMethodError: main

    或者HelloWorld.java:1: Public class helloworld must be defined in a file called

    "HelloWorld.java".

    那就是你没有分清大小写的写入q个HelloWorldQ或者保存得时候没有保存ؓHelloWorld.java

    q个名字一定要跟public class的名字一?/p>

    对于环境变量的问题就说到q里Q下面我先所说怎么在Editplus里面~译和运行,在ToolsQ?gt;参数讄->配置用户工具

    1.d工具Q添加应用程序)

    菜单文字QCompile Java Program

    E序QC:\JDK\bin\javac.exe

    参数Q文件名U?/p>

    初始目录Q文件目?/p>

    2.d工具Q添加应用程序)

    菜单文字QRun Java Program

    E序QC:\JDK\bin\java.exe

    参数Q文件名Uͼ不含扩展名)

    初始目录Q文件目?/p>

    工具l名U可以随便添Q比如Debug Java Program

    然后在Tools的下拉菜单中Q你׃看见Compile Java Program以及Run Java Programq两个选项Q以后你可以利用ctrl + 1~译和ctrl Q?q行E序?/p>

    下面p论Servlet的运行:

    首先要运行ServletQ则需要JSP/Servlet containerQ我初学者用Tomcat

    TomcatQ最新版?.5Q:http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.exe然后把这个压~包解压刎ͼ

    C:\Tomcat

    然后再配|环境变量:

    d三个pȝ变量Q?/p>

    JAVA_HOME: C:\JDK
     TOMCAT_HOME: C:\Tomcat
     CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib

    Tomcat的环境变量就配置完毕了,下面验Tomcat是否能够q行Q?/p>

    在控制台中{到C:\Tomcat\binq个目录Q运行startupQ然后回出现一个窗口,q蟩一大串东西Q最后表CServer已经q行

    在浏览器中输入http://localhost:8080Q出现欢q界面,则表CTomcat没问题了

    然后和上面一P写入你的W一个Servlet

    import Java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class HelloWorld extends HttpServlet
    {
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
    {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<html><head><title>");
    out.println("This is my first Servlet");
    out.println("</title></head><body>");
    out.println("<h1>Hello,World!</h1>");
    out.println("</body></html>");

    }
    }

    然后照样用javac HelloWorld.java来编译这个文Ӟ如果出现无法import javax.servlet.*

    那么是应该把C:\Tomcat\common\lib里面的servlet.jarQ根据实际来看)文g拯到C:\JDK\jre\lib\ext中,再次~译Q就没有问题了!

    然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文gl构Q?/p>
    ROOT\index.html
    ROOT\welcom.jsp
    ROOT\WEB-INF\lib\MyServlet.jarQ如果你的servlet?class打成?jar文gQ则攑֜lib下面)
    ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文g攑֜q个里面)

    然后在浏览器中输入http://localhost:8080/servlet/HelloWorld,于是Server众望所归的报错?Error 404--Not Found

    怎么回事呢?

    Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INFq个目录下面的web.xml文gq行注册Q用EP打开q个web.xml文gQ在里面加入

    <servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>HelloWorld</servlet-name>
    <url-pattern>/servlet/helloworld</url-pattern>
    </servlet-mapping>

    q样的结?/p>
    <servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
    </servlet>

    表示指定包含的servletc?而以下的l构

    <servlet-mapping>
    <servlet-name>HelloWorld</servlet-name>
    <url-pattern>/servlet/HelloWorld</url-pattern>
    </servlet-mapping>

    表示指定HelloServlet应当映射到哪一UURL模式?/p>

    在修改web.xml完毕q后Q重新启动ServerQ然后再输入http://localhost:8080/servlet/HelloWorldQ那么偌大一个Hello,World!{着你呢?/p>



    Eric.Zhou 2006-11-22 09:02 发表评论
    ]]>
    tomcat中配|commons-logging ?log4jhttp://www.aygfsteel.com/rain1102/archive/2006/11/21/82573.htmlEric.ZhouEric.ZhouTue, 21 Nov 2006 09:10:00 GMThttp://www.aygfsteel.com/rain1102/archive/2006/11/21/82573.htmlhttp://www.aygfsteel.com/rain1102/comments/82573.htmlhttp://www.aygfsteel.com/rain1102/archive/2006/11/21/82573.html#Feedback0http://www.aygfsteel.com/rain1102/comments/commentRss/82573.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/82573.htmllog4j.properties 文g:
    # For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
    # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
    log4j.rootLogger=INFO, stdout, logfile

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n

    log4j.appender.logfile=org.apache.log4j.RollingFileAppender
    log4j.appender.logfile.File=/home/camry/work/logs/xxxx.log
    log4j.appender.logfile.MaxFileSize=512KB
    # Keep three backup files.
    log4j.appender.logfile.MaxBackupIndex=3
    # Pattern to output: date priority [category] - message
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
    2.若你?tomcat 中有好几个项? 想不同项目日志写C同位|去.可以在项目中创徏?Log4jInitServlet.class 来蝲入该目?log4j.properties.q时可以?log4j.properties 攑ֈ WEB-INF/ ? 当然愿意攑օ他位|也可以.
    代码如下:
    WEB-INF/web.xml:
    <servlet> 
    <servlet-name>log4j-init</servlet-name> 
    <servlet-class> 
    com.xxx.xxxx.Log4jInitServlet 
    </servlet-class> 
    <init-param> 
    <param-name>log4j</param-name> 
    <!-- q里标出了位|?--> 
    <param-value>/WEB-INF/log4j.properties</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet>
     
    Log4jInitServlet.java :
    package com.xxx.util; 
     
    import org.apache.log4j.PropertyConfigurator; 
     
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
     
    /** 
    * to-do init log4j. 
    */ 
    public class Log4jInitServlet extends HttpServlet { 
     
    /** 
    * initial. 
    */ 
    public void init() { 
    String prefix = getServletContext().getRealPath("/"); 
    // d上面标出的位|?#160;
    String file = getInitParameter("log4j"); 
    PropertyConfigurator.configure(prefix + file); 
    } // END: init 
    } // END: Log4jInitServlet 
    ... 







    Eric.Zhou 2006-11-21 17:10 发表评论
    ]]>
    使用log4j关闭DWR中的日志http://www.aygfsteel.com/rain1102/archive/2006/10/31/78216.htmlEric.ZhouEric.ZhouTue, 31 Oct 2006 02:04:00 GMThttp://www.aygfsteel.com/rain1102/archive/2006/10/31/78216.htmlhttp://www.aygfsteel.com/rain1102/comments/78216.htmlhttp://www.aygfsteel.com/rain1102/archive/2006/10/31/78216.html#Feedback3http://www.aygfsteel.com/rain1102/comments/commentRss/78216.htmlhttp://www.aygfsteel.com/rain1102/services/trackbacks/78216.htmllog4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n
    log4j.logger.java.sql.PreparedStatement=DEBUG
    log4j.logger.uk.ltd.getahead.dwr = ERROR

    U色的部分ؓ配置DWR日志输出Q配|完q以后检查一下lib文g夹下是否有commons-logging.jar。如果没有则dQ这样就可以关闭DWR的日志了Q?/p>

    Eric.Zhou 2006-10-31 10:04 发表评论
    ]]>
    վ֩ģ壺 ٹ| Ѩ| ľ| лͨ| | | | | | | ն| ͩ| | | | | | ¤| | | | ƽ| | | Ͳ| Ϫ| | ֣| | ˮ| | Ĭ| ˮ| Ѿ| ʡ| | | ˳| | ۶| |