﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Fantasy's World-随笔分类-读书笔记</title><link>http://www.blogjava.net/FinalFantasy/category/3672.html</link><description>世界的小世界，我的大世界^_^</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 02:38:09 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 02:38:09 GMT</pubDate><ttl>60</ttl><item><title>Java只能处理300个异常？</title><link>http://www.blogjava.net/FinalFantasy/archive/2005/12/29/25921.html</link><dc:creator>FinalFantasy</dc:creator><author>FinalFantasy</author><pubDate>Thu, 29 Dec 2005 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/FinalFantasy/archive/2005/12/29/25921.html</guid><wfw:comment>http://www.blogjava.net/FinalFantasy/comments/25921.html</wfw:comment><comments>http://www.blogjava.net/FinalFantasy/archive/2005/12/29/25921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/FinalFantasy/comments/commentRss/25921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/FinalFantasy/services/trackbacks/25921.html</trackback:ping><description><![CDATA[首先看看我写的一个小程序：<BR><BR>public class TestTry extends Exception<BR>{<BR>&nbsp;static boolean f=false;<BR>&nbsp;static int sum=0;<BR>&nbsp;static int created=0;<BR>&nbsp;static int i=0;<BR>&nbsp;TestTry()<BR>&nbsp;{<BR>&nbsp;&nbsp;i=created++;<BR>&nbsp;&nbsp;if(created&gt;=299) f=true;<BR>&nbsp;&nbsp;}<BR>&nbsp;public void finalize()<BR>&nbsp;{<BR>&nbsp;&nbsp;sum++;<BR>&nbsp;&nbsp;}<BR>&nbsp;public static void main(String[] args)<BR>&nbsp;{<BR>&nbsp;&nbsp;while(!TestTry.f)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;try{<BR>&nbsp;&nbsp;&nbsp;&nbsp;throw new TestTry();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception e){}<BR>&nbsp;&nbsp;&nbsp;&nbsp;finally{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Creat "+TestTry.i+" TestTry, "+TestTry.sum+" has been finalized!");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;//System.out.println("Creat "+TestTry.created+" TestTry, "+TestTry.sum+" has been finalized!");&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR><BR>这个是我在测试在try语句抛出异常后，在try语句中建立的对象是否会调用自身的终止函数时发现的，这里有个奇怪的现象在if(created&gt;=299) f=true;这条语句中，如果把条件created&gt;=299改为&gt;=比299更大的数，你会发现System.out.println("Creat "+TestTry.i+" TestTry, "+TestTry.sum+" has been finalized!");这条语句的输出的结果并不是你预想的那样（输出判断的数字+1的行数），而只是显示最后的三百行。那么在这之前抛出的异常上哪里去了呢？难道说Java只处理最后抛出的三百的异常么？<BR><img src ="http://www.blogjava.net/FinalFantasy/aggbug/25921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/FinalFantasy/" target="_blank">FinalFantasy</a> 2005-12-29 18:21 <a href="http://www.blogjava.net/FinalFantasy/archive/2005/12/29/25921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google编程挑战赛入围赛250分题及答案——BusStops题</title><link>http://www.blogjava.net/FinalFantasy/archive/2005/12/21/24975.html</link><dc:creator>FinalFantasy</dc:creator><author>FinalFantasy</author><pubDate>Wed, 21 Dec 2005 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/FinalFantasy/archive/2005/12/21/24975.html</guid><wfw:comment>http://www.blogjava.net/FinalFantasy/comments/24975.html</wfw:comment><comments>http://www.blogjava.net/FinalFantasy/archive/2005/12/21/24975.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/FinalFantasy/comments/commentRss/24975.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/FinalFantasy/services/trackbacks/24975.html</trackback:ping><description><![CDATA[<P>Problem Statement</P>
<P>You are given a String[] cityMap representing the layout of a city. The city consists of blocks. The first element of cityMap represents the first row of blocks, etc. A 'B' character indicates a location where there is a bus stop. There will be exactly one 'X' character, indicating your location. All other characters will be '.'. You are also given an int walkingDistance, which is the maximum distance you are willing to walk to a bus stop. The distance should be calculated as the number of blocks vertically plus the number of blocks horizontally. Return the number of bus stops that are within walking distance of your current location.<BR><BR>Definition<BR><BR>Class:BusStops<BR>Method:countStops<BR>Parameters:String[], int<BR>Returns:int<BR>Method signature:int countStops(String[] cityMap, int walkingDistance)<BR>(be sure your method is public)<BR><BR>Constraints<BR><BR>-cityMap will contain between 1 and 50 elements, inclusive.<BR>-Each element of cityMap will contain between 1 and 50 characters, inclusive.<BR>-Each element of cityMap will contain the same number of characters.<BR>-Each character of each element of cityMap will be 'B', 'X', or '.'.<BR>-There will be exactly one 'X' character in cityMap.<BR>-walkingDistance will be between 1 and 100, inclusive.<BR><BR>Examples<BR><BR>0)</P>
<P>{"...B.",<BR>&nbsp;".....",<BR>&nbsp;"..X.B",<BR>&nbsp;".....",<BR>&nbsp;"B...."}<BR>3<BR>Returns: 2<BR>You can reach the bus stop at the top (3 units away), or on the right (2 units away). The one in the lower left is 4 units away, which is too far.<BR><BR>1)</P>
<P>{"B.B..",<BR>&nbsp;".....",<BR>&nbsp;"B....",<BR>&nbsp;".....",<BR>&nbsp;"....X"}<BR>8<BR>Returns: 3<BR>A distance of 8 can get us anywhere on the map, so we can reach all 3 bus stops.<BR><BR>2)</P>
<P>{"BBBBB",<BR>&nbsp;"BB.BB",<BR>&nbsp;"B.X.B",<BR>&nbsp;"BB.BB",<BR>&nbsp;"BBBBB"}<BR>1<BR>Returns: 0<BR>Plenty of bus stops, but unfortunately we cannot reach any of them.<BR><BR>3)</P>
<P>{"B..B..",<BR>&nbsp;".B...B",<BR>&nbsp;"..B...",<BR>&nbsp;"..B.X.",<BR>&nbsp;"B.B.B.",<BR>&nbsp;".B.B.B"}<BR>3<BR>Returns: 7<BR></P>
<HR>
说实话我觉得这一题没啥意思，超简单，首先先确定X的位置，再用遍历数组找B的位置，再求相减的绝对值然后判断是否超出给出的最大距离就行了。相对这题PlayCars却很有意思，到现在我也没想出除了穷举以外的一个更好的算法，因为我觉得穷举可能会超时。有哪位有其它的办法的话，请告诉我，大家探讨一下，谢谢。好了，不废话了，下面是这题的答案：<BR><BR>public class BusStops {<BR>&nbsp;public static void main(String[] arg){<BR>&nbsp;&nbsp;BusStops&nbsp;total = new BusStops();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(total.countStops({"...B.",".....","..X.B",".....","B...."},3));<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;public int countStops(String[] cityMap, int walkingDistance){<BR>&nbsp;&nbsp;int sum= 0;<BR>&nbsp;&nbsp;int locationX = -1;<BR>&nbsp;&nbsp;int locationY = -1;<BR>&nbsp;&nbsp;for(int i=0;i&lt;cityMap.length;i++){<BR>&nbsp;&nbsp;&nbsp;for(int j=0;j&lt;cityMap[i].length();j++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(cityMap[i].charAt(j)=='X'){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;locationX = i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;locationY = j;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;for(int i=0;i&lt;cityMap.length;i++){<BR>&nbsp;&nbsp;&nbsp;for(int j=0;j&lt;cityMap[i].length();j++){<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(cityMap[i].charAt(j)=='B' &amp;&amp; (Math.abs(locationX - i) + Math.abs(locationY - j)&lt;=walkingDistance))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum++;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return sum;<BR>&nbsp;}<BR>}<img src ="http://www.blogjava.net/FinalFantasy/aggbug/24975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/FinalFantasy/" target="_blank">FinalFantasy</a> 2005-12-21 18:24 <a href="http://www.blogjava.net/FinalFantasy/archive/2005/12/21/24975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Garbage.java的思考</title><link>http://www.blogjava.net/FinalFantasy/archive/2005/11/01/17664.html</link><dc:creator>FinalFantasy</dc:creator><author>FinalFantasy</author><pubDate>Tue, 01 Nov 2005 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/FinalFantasy/archive/2005/11/01/17664.html</guid><wfw:comment>http://www.blogjava.net/FinalFantasy/comments/17664.html</wfw:comment><comments>http://www.blogjava.net/FinalFantasy/archive/2005/11/01/17664.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/FinalFantasy/comments/commentRss/17664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/FinalFantasy/services/trackbacks/17664.html</trackback:ping><description><![CDATA[<FONT face=宋体 size=2>《thinking in java》中一段代码剖析</FONT>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><B style="mso-bidi-font-weight: normal"><FONT face=宋体><FONT size=2>程序代码<SPAN lang=EN-US></SPAN></FONT></FONT></B></P>
<P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体 size=2>//chapter03:Garbage.java</FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体 size=2>// Demonstration of the garbage</FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体 size=2>// collector and finalization</FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US></SPAN></P>
<P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体 size=2>class Chair { </FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>static boolean gcrun = false;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>static boolean f = false;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>static int created = 0;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>static int finalized = 0;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>int i;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;</SPAN><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>Chair() { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>i = ++created;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>if(created == 47) </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.out.println("Created 47");</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>public void finalize() { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>if(!gcrun) { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// The first time finalize() is called:</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>gcrun = true;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.out.println(</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"Beginning to finalize after " +</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>created + " Chairs have been created");</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>if(i == 47) { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.out.println(</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"Finalizing Chair #47, " +</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"Setting flag to stop Chair creation");</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>f = true;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>finalized++;</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>if(finalized &gt;= created)</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.out.println(</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"All " + finalized + " finalized");</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体 size=2>}</FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US></SPAN></P>
<P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体 size=2>public class Garbage { </FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>public static void main(String[] args) { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>// As long as the flag hasn't been set,</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>// make Chairs and Strings:</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>while(!Chair.f) { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;</SPAN>new Chair();</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>new String("To take up space");</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>System.out.println(</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"After all Chairs have been created:\n" +</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>"total created = " + Chair.created +</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>", total finalized = " + Chair.finalized);</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>// Optional arguments force garbage</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>// collection &amp; finalization:</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>if(args.length &gt; 0) { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>if(args[0].equals("gc") &amp;line;&amp;line; </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>args[0].equals("all")) { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.out.println("gc():");</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.gc();</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>if(args[0].equals("finalize") &amp;line;&amp;line; </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>args[0].equals("all")) { </FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.out.println("runFinalization():");</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.runFinalization();</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>System.out.println("bye!");</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=宋体><FONT size=2><SPAN style="mso-spacerun: yes">&nbsp; </SPAN>}</FONT></FONT></SPAN></P>
<P class=p10 style="MARGIN: auto 0cm; TEXT-INDENT: 21pt"><FONT face=宋体><FONT size=2><SPAN lang=EN-US>} ///:~</SPAN>为什么执行<SPAN lang=EN-US style="COLOR: red">java Garbage gc</SPAN>以后，当所有对象创建完（比如<SPAN lang=EN-US>8000</SPAN>个），这时只清除了<SPAN lang=EN-US>2000</SPAN>个（不定），应该只能创建<SPAN lang=EN-US>47</SPAN>个对象啊</FONT></FONT></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><B><FONT face=宋体 size=2>分析：</FONT></B></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><FONT face=宋体 size=2>首先，在一个循环当中创建对象，并且只是创建，而不引用，也就是说这个对象会自动的被系统当作垃圾处理掉。但请注意，<SPAN lang=EN-US>finalize()</SPAN>方法并不是立刻就会执行的，执行的时间完全由系统来决定。所以很有可能的情况是已经创建了<SPAN lang=EN-US>20000</SPAN>个对象，才开始其中的某一个对象的清除工作（这可能和时间或者系统内容的占用有关）。看<SPAN lang=EN-US>finalize()</SPAN>方法中的一段代码：</FONT></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;if (!gcrun) { </FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gcrun = true;</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\nBeginning to finalize after" + created + "Chairs have been created\nat ");</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp; }</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><FONT face=宋体 size=2>就会出现这样的结果：</FONT></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>Beginning to finalize after 25038 Chairs have been created</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US></SPAN></P>
<P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><FONT face=宋体 size=2>这时对象的创建过程仍在继续（因为已经<SPAN lang=EN-US>Finalize</SPAN>的对象还不满<SPAN lang=EN-US>47</SPAN>个，<SPAN lang=EN-US>Chair.f</SPAN>还是<SPAN lang=EN-US>false</SPAN>）。所以<SPAN lang=EN-US>Chair.created</SPAN>会继续增加。</FONT></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><FONT face=宋体 size=2>直到有<SPAN lang=EN-US>47</SPAN>个对象被清除了，<SPAN lang=EN-US>Chair.f</SPAN>被置成<SPAN lang=EN-US>true</SPAN>了，创建对象的循环才结束。看<SPAN lang=EN-US>main</SPAN>方法中的一段代码：</FONT></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"\nAfter all chairs have been created:\n"</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "total created ="</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ Chair.created</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ ",total finalized ="</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ Chair.finalized+"\n");</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><FONT face=宋体 size=2>如上所说，<SPAN lang=EN-US>Chair.created</SPAN>是不断增加的，而在这段代码执行之前，又会有<SPAN lang=EN-US>N</SPAN>个对象被释放掉了，所以<SPAN lang=EN-US>finalized</SPAN>也增加了。</FONT></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><FONT face=宋体 size=2>结果可能是这样的：</FONT></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US><FONT face=宋体 size=2>total created =29096,total finalized =73</FONT></SPAN></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US></SPAN></P>
<P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><FONT face=宋体><FONT size=2>其实这一过程和使用的<SPAN lang=EN-US>JVM</SPAN>有很大关系，执行结果可能会很不相同。但有一点是可以肯定的，那就是<SPAN style="COLOR: red">我们无法确定<SPAN lang=EN-US>JVM</SPAN>什么时候做对象的清除工作</SPAN>（这也是<SPAN lang=EN-US>Thinking in java</SPAN>中这段代码的想要说明的），<SPAN style="COLOR: red">可能会在这个对象刚刚<SPAN lang=EN-US>“</SPAN>无用<SPAN lang=EN-US>”</SPAN>的时候就清除掉了，也可能滞后几秒，甚至永远不清除。</SPAN></FONT></FONT></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: normal"><SPAN lang=EN-US></SPAN></P>
<P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><B><FONT face=宋体 size=2>结论：</FONT></B></P>
<P class=p10 style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><FONT face=宋体 size=2>不能指望<SPAN lang=EN-US>finalize()</SPAN>方法能稳定的工作，尤其不能依靠它来做文件的关闭等操作，由于<SPAN lang=EN-US>finalize()</SPAN>的不确定性，往往得不到你想要的结果。事实上我们只需要知道所有无用的对象，<SPAN lang=EN-US>JVM</SPAN>会自己清除就够了。省点心思去睡觉岂不是更好的一件事情 ：）</FONT></P><img src ="http://www.blogjava.net/FinalFantasy/aggbug/17664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/FinalFantasy/" target="_blank">FinalFantasy</a> 2005-11-01 13:05 <a href="http://www.blogjava.net/FinalFantasy/archive/2005/11/01/17664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整合Apache和Tomcat打造PHP、JSP服务器</title><link>http://www.blogjava.net/FinalFantasy/archive/2005/10/06/14894.html</link><dc:creator>FinalFantasy</dc:creator><author>FinalFantasy</author><pubDate>Thu, 06 Oct 2005 11:28:00 GMT</pubDate><guid>http://www.blogjava.net/FinalFantasy/archive/2005/10/06/14894.html</guid><wfw:comment>http://www.blogjava.net/FinalFantasy/comments/14894.html</wfw:comment><comments>http://www.blogjava.net/FinalFantasy/archive/2005/10/06/14894.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/FinalFantasy/comments/commentRss/14894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/FinalFantasy/services/trackbacks/14894.html</trackback:ping><description><![CDATA[<SPAN id=zoom>&nbsp;
<P>洛阳的天气可真是讨厌，昨天好不容易放晴了一天，今天就又下起了大雨，本来计划好去买衣服的，现在只能泡汤了。这几天来上网查了很多的资料，为了组建一个PHP、JSP、ASP的全能平台，PHP跟JSP的平台是组建好了，可是ASP怎么样都不行，好不容易下了个IASP装上了，配置了之后却老是出现错误。哎NB怎么就不配个专业版的系统给我呢，这样我就不用那么费劲了，只要把IIS跟Apache整合起来就行了。趁着有点时间就把用apache组建的PHP、JSP平台教程整理出来了，说实话光这两个都费了我好多的劲呀，特别是JSP，网上的教程都不知道是什么年代写的了，几乎都不能用了，我废了好几天的功夫才把这些零件给找齐，所以还特别记下了下载的地址，要下的就要赶快了！好了，废话不多说了，往下看吧。对了，另外再多说一句，下面的配置是我安装我本机的安装地址的，如果你的安装地址跟我的不符，那么你就要一些相应的改进！还有，如果一下的下载地址无效了，你可以在我这留下你的邮箱，我可以将这些东西发给你。<BR></P>
<HR>
前期准备：&nbsp; 
<P>
<P>所需软件列表 <BR>1、apache_2.0.54-win32-x86-no_ssl.exe （Apache web服务器） <A href="http://apache.justdn.org/httpd/binaries/win32/apache_2.0.54-win32-x86-no_ssl.exe"><A href="http://apache.justdn.org/httpd/binaries/win32/apache_2.0.54-win32-x86-no_ssl.exe" target=_blank>http://apache.justdn.org/......2.0.54-win32-x86-no_ssl.exe</A></A><BR>2、php-5.0.5-Win32 （PHP语言解析器）<BR>4、jdk1.4.2（JAVA 语言环境） <BR>5、jakarta-tomcat-5.5.12 （Tomcat JSP解析服务器） <A href="http://mirror.vmmatrix.net/apache/dist/jakarta/tomcat-5/v5.5.12-alpha/bin/apache-tomcat-5.5.12.exe"><A href="http://mirror.vmmatrix.net/apache/dist/jakarta/tomcat-5/v5.5.12-alpha/bin/apache-tomcat-5.5.12.exe" target=_blank>http://mirror.vmmatrix.ne......in/apache-tomcat-5.5.12.exe</A></A> <BR>7、mod_jk-1.2.14-apache-2.0.54.so.asc （整合Apache+Tomcat的plus） <A href="http://apache.linuxforum.net/dist/jakarta/tomcat-connectors/jk/binaries/win32/jk-1.2.14/mod_jk-1.2.14-apache-2.0.54.so.asc"><A href="http://apache.linuxforum.net/dist/jakarta/tomcat-connectors/jk/binaries/win32/jk-1.2.14/mod_jk-1.2.14-apache-2.0.54.so.asc" target=_blank>http://apache.linuxforum.......1.2.14-apache-2.0.54.so.asc</A></A>（为了找这个文件都把我给找疯了，网上的教程到处都说要mod_jk_1.2.5_2.0.47.dll，可是我找了两天死都找不到，后来到apache的官方网站看着生硬的EN去查才找到这么个文件，看文件名直觉就告诉我找对了，现在的apache不都是用so扩展了么，而且在那个页面也说明了这一点，要使用还要改名，所以在这里特别指出下载地址，让大家少走很多的弯路）</P>
<P>开始安装： <BR>一、 Apahce+PHP安装配置&nbsp; </P>
<P>1、安装apache_2.0.54-win32-x86-no_ssl.exe，为了方便把路径改为c:\吧，其他都不用管一路next下去。 <BR>2、安装完成之后，apache服务自动加载，这时打开浏览器，浏览：<A href="http://localhost/"><A href="http://localhost/" target=_blank>http://localhost</A></A>，出现apache欢迎页面（这步需要将C:\apache2\htdocs目录中的文件“index.html.en”改为“index.html”，方能显示）；如果这步出现异常，请检查安装源文件，重新安装。 <BR>3. 安装php-5.0.5-Win32,一般下载的PHP文件为一个免安装的压缩包，解压到C：\PHP就可以。&nbsp; <BR>4. 配置PHP和Apache，使之能解析php程序。&nbsp; <BR>PHP配置：将C:\PHP\目录中的“php.ini-dist”改名“php.ini”,然后添加环境变量。在环境变量里的classpath中添加“.;c:\php;”，在新建一个“PHPRC”的变量，里面同样是添加“.;c:\php;”&nbsp; <BR>Apache配置：&nbsp; <BR>打开C:\apache2\conf\httpd.conf&nbsp; </P>
<P>httpd.conf是apache的配置文件，在此配置文件最后添加以下语句，用以支持php程序：&nbsp; </P>
<P>ScriptAlias /php/ "C:/PHP/"&nbsp; </P>
<P>AddType application/x-httpd-php .php3&nbsp; </P>
<P>AddType application/x-httpd-php .php&nbsp; </P>
<P>AddType application/x-httpd-php .phtml&nbsp; </P>
<P>Action application/x-httpd-php "/php/php.exe"&nbsp; </P>
<P>ok，接下来重启Apache服务器（如果加载PHP成功，可以在Apache监控器中看到Apache/2.0.52(win32) PHP/5.0.4）就可以测试了PHP了，用编辑器编写如下语句：&nbsp; <BR>&lt;? <BR>phpinfo();&nbsp; </P>
<P>?&gt;&nbsp; </P>
<P>保存文件名为“test.php”到C:\apache2\htdocs目录，然后打开浏览器，浏览：<A href="http://localhost/test.php"><A href="http://localhost/test.php" target=_blank>http://localhost/test.php</A></A>，出现PHP基本信息就说明配置成功。严格按以上说明安装配置，都会一次成功。 </P>
<P>二、安装JDK和Tomcat</P>
<P>1. 安装j2sdk-1_4_2-windows-i586，JDK一定要在Tomcat之前安装，默认安装路径就可以。<BR>2. 安装Jakarta-Tomcat-5.5.12，默认安装路径就可以。<BR>4．设置环境变量（桌面-&gt;我的电脑-&gt;右键点击-&gt;选择“属性”-&gt;高级-&gt;环境变量），所有设置均在系统变量栏进行。<BR>新建-&gt;变量名：JAVA_HOME<BR>-&gt;变量值：C:\j2sdk1.4.2<BR>新建-&gt;变量名：TOMCAT_HOME<BR>-&gt;变量值：C:\Program Files\Apache Software Foundation\Tomcat 5.5<BR>新建-&gt;变量名： PATH<BR>-&gt;变量值：.;C:\j2sdk1.4.2\bin; （前面的“.;”一定要有）<BR>修改增加环境变量 CLASSPATH (如果没有此变量名，则新建)<BR>-&gt;增加变量值：.;C:\j2sdk1.4.2\lib\dt.jar;C:\j2sdk1.4.2\lib\tool.jar; <BR>C:\j2sdk1.4.2\lib\NetComponents.jar;<BR>C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\classes;<BR>C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib;<BR>C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar;（前面的“.;”一定要有）</P>
<P>5. 启动Tomcat服务器，打开浏览器，浏览：<A href="http://localhost:8080/"><A href="http://localhost:8080/" target=_blank>http://localhost:8080/</A></A> ，出现Tomcat欢迎页面；如果这步出现异常，请检查安装源文件，重新安装。</P>
<P>三、整合Apache+Tomcat服务器</P>
<P>1. 复制mod_jk-1.2.14-apache-2.0.54.so.asc文件到C:\Apache2\modules目录，并将其文件名改为mod_jk.so。<BR>2. Apache配置：<BR>C:\apahce2\conf\httpd.conf<BR>httpd.conf<BR>在此配置文件最后添加以下语句，用以支持jsp程序：<BR>LoadModule jk_module modules/mod_jk.so </P>
<P>JkWorkersFile "C:/Program Files/Apache Software Foundation/Tomcat 5.5/conf/workers.properties" <BR>JkMount /servlet/* ajp13 <BR>JkMount /*.jsp ajp13</P>
<P>还有要在<BR>DirectoryIndex index.html index.html.var的后面加上default.jsp index.jsp（前面忘了说了，支持PHP还要加上index.php default.php）</P>
<P>3. 在C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\目录下，新建文件名为“workers.properties”的文件，将如下内容复制到新建文件workers.properties中。</P>
<P>workers.properties<BR># 只复制以下内容即可：</P>
<P>workers.tomcat_home=C:\Program Files\Apache Software Foundation\Tomcat 5.5<BR>workers.java_home=C:\j2sdk1.4.2<BR>ps=\<BR># worker.list=ajp13 <BR>worker.list=ajp12,ajp13 </P>
<P>worker.ajp12.port=8007<BR>worker.ajp12.host=localhost<BR>worker.ajp12.type=ajp12 <BR>worker.ajp12.lbfactor=1</P>
<P>worker.ajp13.port=8009 <BR>worker.ajp13.host=localhost <BR>worker.ajp13.type=ajp13<BR>worker.ajp13.lbfactor=1</P>
<P>worker.loadbalancer.type=lb </P>
<P>worker.loadbalancer.balanced_workers=ajp12, ajp13<BR>worker.inprocess.type=jni <BR>worker.inprocess.class_path=$(workers.tomcat_home)$(ps)classes <BR>worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)jaxp.jar </P>
<P>worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)parser.jar </P>
<P>worker.inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$(ps)jasper.jar </P>
<P>worker.inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$(ps)servlet.jar </P>
<P>worker.inprocess.class_path=$(workers.tomcat_home)$(ps)common$(ps)lib$(ps)webserver.jar</P>
<P>worker.inprocess.class_path=$(workers.java_home)$(ps)lib$(ps)tools.jar </P>
<P>worker.inprocess.cmd_line=-config </P>
<P>worker.inprocess.cmd_line=$(workers.tomcat_home)/conf/jni_server.xml </P>
<P>worker.inprocess.cmd_line=-home </P>
<P>worker.inprocess.cmd_line=$(workers.tomcat_home) </P>
<P>worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)jvm.dll </P>
<P><BR>worker.inprocess.stdout=$(workers.tomcat_home)$(ps)inprocess.stdout </P>
<P>worker.inprocess.stderr=$(workers.tomcat_home)$(ps)inprocess.stderr </P>
<P>worker.inprocess.sysprops=tomcat.home=$(workers.tomcat_home)</P>
<P>接下来重启Tomcat和Apache服务器（必须先重启Tomcat再重启Apache，不然会出错，如果加载JK成功，这个时候你可以在Apache监控器中看到Apache/2.0.52(win32) PHP/5.0.4 mod_jk/1.2.8）就可以测试了，把Tomcat的webapps这个目录拷贝到Apache的htdocs目录下面，然后直接在浏览器地址栏输入：<A href="http://localhost/webapps"><A href="http://localhost/webapps" target=_blank>http://localhost/webapps</A></A> 和 <A href="http://localhost:8080/"><A href="http://localhost:8080/" target=_blank>http://localhost:8080</A></A>如果显示的页面一样就说明成功了。</P>
<P>剩下的就是连接MySQL了，但是本人不才一个叫mm.mysql-2.0.4-bin.jar的文件怎么也找不到，只找到了个mysql-connector-java-3.1.5-gamma-bin.jar的文件，可是我试过了一点用都没有，所以连接数据库的教程等我试验成功再说拉！如果哪位高人能救救我的告诉我mm.mysql-2.0.4-bin.jar的下载地址或者告诉我IASP到底改如何配置，我真是感激不尽。<BR><BR><BR></P></SPAN><img src ="http://www.blogjava.net/FinalFantasy/aggbug/14894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/FinalFantasy/" target="_blank">FinalFantasy</a> 2005-10-06 19:28 <a href="http://www.blogjava.net/FinalFantasy/archive/2005/10/06/14894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>