<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>shanghuo.net(上火网)</title>
		<link>http://www.shanghuo.net/</link>
		<description>人间五十年，万事如梦幻。一度生存者，岂有长不灭？</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>shanghuo Version 1.6 Build 20071004</generator>
		<lastBuildDate>Thu, 11 Mar 2010 02:32:50 +0000</lastBuildDate>
		<ttl></ttl>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=313</guid>
			<title>Google勇敢新世界：两个天才的相遇</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p><span id="media_name">南方人物周刊</span></p><br /><br /><a href="http://www.shanghuo.net/?action=show&amp;id=313" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=313</link>
			<category domain="http://www.shanghuo.net/?cid=17">search</category>
			<pubDate>2010-01-25 11:39</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=312</guid>
			<title>linux下ps命令</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>1. ps简介</p>
<p>要对进程进行监测和控制，首先必须要了解当前进程的情况，也就是需要查看当前进程，而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。</p>
<p>2. ps命令及其参数</p>
<p>　 ps命令最常用的还是用于监控后台进程的工作情况，因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的，所以如果需要检测其情况，便可以使用ps命令了。</p>
<p>　　该命令语法格式如下：</p>
<p>　　ps [选项]</p>
<p>　　下面对命令选项进行说明：</p>
<p>　　-e 显示所有进程。</p>
<p>　　-f 全格式。</p>
<p>　　-h 不显示标题。</p>
<p>　　-l 长格式。</p>
<p>　　-w 宽输出。</p>
<p>　　a 显示终端上的所有进程，包括其他用户的进程。</p>
<p>　　r 只显示正在运行的进程。</p>
<p>　　x 显示没有控制终端的进程。</p>
<p>　　O[+|-] k1 [，[+|-] k2 [，&hellip;]] 根据SHORT KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列表。对于ps的不同格式都存在着默认的顺序指定。这些默认顺序可以被用户的指定所覆盖。其中&ldquo;+&rdquo;字符是可选的，&ldquo;-&rdquo;字符是倒转指定键的方向。</p>
<p>　　以下介绍长命令行选项，这些选项都使用&ldquo;--&rdquo;开头：</p>
<p>　　--sort X[+|-] key [，[+|-] key [，&hellip;]] 从SORT KEYS段中选一个多字母键。&ldquo;+&rdquo;字符是可选的，因为默认的方向就是按数字升序或者词典顺序。<br />
比如： ps -jax -sort=uid，-ppid，+pid。</p>
<p>　　--help 显示帮助信息。</p>
<p>　　--version 显示该命令的版本信息。</p>
<p>　　在前面的选项说明中提到了排序键，接下来对排序键作进一步说明。需要注意的是排序中使用的值是ps使用的内部值，并非仅用于某些输出格式的伪值。排序键列表见表4-3。</p>
<p>　　表4-3　排序键列表</p>
<p>　　短格式 <br />
　　长格式 <br />
　　说 明</p>
<p>　　c <br />
　　cmd <br />
　　可执行的简单名称</p>
<p>　　C <br />
　　cmdline <br />
　　完整命令行</p>
<p>　　f <br />
　　flags <br />
　　长模式标志</p>
<p>　　g <br />
　　pgrp <br />
　　进程的组ID</p>
<p>　　G <br />
　　tpgid <br />
　　控制tty进程组ID</p>
<p>　　j <br />
　　cutime <br />
　　累计用户时间</p>
<p>　　J <br />
　　cstime <br />
　　累计系统时间</p>
<p>　　k <br />
　　utime <br />
　　用户时间</p>
<p>　　K <br />
　　stime <br />
　　系统时间</p>
<p>　　m <br />
　　min_flt <br />
　　次要页错误的数量</p>
<p>　　M <br />
　　maj_flt <br />
　　主要页错误的数量</p>
<p>　　n <br />
　　cmin_flt <br />
　　累计次要页错误</p>
<p>　　N <br />
　　cmaj_flt <br />
　　累计主要页错误</p>
<p>　　o <br />
　　session <br />
　　对话ID</p>
<p>　　p <br />
　　pid <br />
　　进程ID</p>
<p>　　P <br />
　　ppid <br />
　　父进程ID</p>
<p>　　r <br />
　　rss <br />
　　驻留大小</p>
<p>　　R <br />
　　resident <br />
　　驻留页</p>
<p>　　s <br />
　　size <br />
　　内存大小（千字节）</p>
<p>　　S <br />
　　share <br />
　　共享页的数量</p>
<p>　　t <br />
　　tty <br />
　　tty次要设备号</p>
<p>　　T <br />
　　start_time <br />
　　进程启动的时间</p>
<p>　　U <br />
　　uid <br />
　　UID</p>
<p>　　u <br />
　　user <br />
　　用户名</p>
<p>　　v <br />
　　vsize <br />
　　总的虚拟内存数量（字节）</p>
<p>　　y <br />
　　priority <br />
　　内核调度优先级</p>
<p>　　3. 常用ps命令参数</p>
<p>　　前面两节介绍的参数可能让读者觉得有些可怕，实际上这是一个非常容易使用的命令，一般的用户只需掌握一些最常用的命令参数就可以了。</p>
<p>　　最常用的三个参数是u、a、x，下面将通过例子来说明其具体用法。</p>
<p>　　[例] 以root身份登录系统，查看当前进程状况</p>
<p>　　$ ps</p>
<p>　　PID TTY TIME COMMAND</p>
<p>　　5800 ttyp0 00:00:00 bash</p>
<p>　　5835 ttyp0 00:00:00 ps</p>
<p>　　可以看到，显示的项目共分为四项，依次为PID（进程ID）、TTY（终端名称）、TIME（进程执行时间）、COMMAND（该进程的命令行输入）。</p>
<p>　　可以使用u选项来查看进程所有者及其他一些详细信息，如下所示：</p>
<p>　　$ ps u</p>
<p>　　USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND</p>
<p>　　test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash</p>
<p>　　test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u</p>
<p>　　在bash进程前面有条横线，意味着该进程便是用户的登录shell，所以对于一个登录用户来说带短横线的进程只有一个。还可以看到%CPU、%MEM两个选项，前者指该进程占用的CPU时间和总时间的百分比；后者指该进程占用的内存和总内存的百分比。在这种情况下看到了所有控制终端的进程；但是对于其他那些没有控制终端的进程还是没有观察到，所以这时就需要使用x选项。使用x选项可以观察到所有的进程情况。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=312</link>
			<category domain="http://www.shanghuo.net/?cid=16">sever</category>
			<pubDate>2009-05-07 18:45</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=311</guid>
			<title>jsp环境县官</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题，于是总结了一下如何tomcat下配置jsp、servlet和ben，希望对那些初学者有所帮助。 <br />
<br />
一、开发环境配置 <br />
<br />
第一步：下载j2sdk和tomcat：到sun官方站（<a href="http://java.sun.com/j2se/1.5.0/download.jsp" target="_blank">http://java.sun.com/j2se/1.5.0/download.jsp</a>）下载 j2sdk，注意下载版本为Windows Offline Installation的SDK，同时最好下载J2SE 1.5.0 Documentation，然后到tomcat官方站点（http: //jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi）下载tomcat（下载最新 5.5.9版本的tomcat）； <br />
<br />
第二步：安装和配置你的j2sdk和tomcat：执行j2sdk和tomcat的安装程序，然后按默认设置进行安装即可。 <br />
<br />
1.安装j2sdk以后，需要配置一下环境变量，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.5.0）： <br />
<br />
JAVA_HOME=c:\j2sdk1.5.0 <br />
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;（.;一定不能少，因为它代表当前路径) <br />
path=%JAVA_HOME%\bin <br />
<br />
接着可以写一个简单的java程序来测试J2SDK是否已安装成功： <br />
<br />
public class Test{ <br />
public static void main(String args[]){ <br />
System.out.println(&quot;This is a test program.&quot;); <br />
} <br />
} <br />
<br />
将上面的这段程序保存为文件名为Test.java的文件。 <br />
<br />
然后打开命令提示符窗口，cd到你的Test.java所在目录，然后键入下面的命令 <br />
<br />
javac Test.java <br />
java Test <br />
<br />
此时如果看到打印出来This is a test program.的话说明安装成功了，如果没有打印出这句话，你需要仔细检查一下你的配置情况。 <br />
<br />
2.安装Tomcat后，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat)： <br />
<br />
CATALINA_HOME=c:\tomcat <br />
CATALINA_BASE=c:\tomcat <br />
<br />
然后修改环境变量中的classpath，把tomat安装目录下的common\lib下的(可以根据实际追加)servlet.jar追加到classpath中去，修改后的classpath如下： <br />
<br />
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar; <br />
<br />
接着可以启动tomcat，在IE中访问<a href="http://localhost:8080/" target="_blank">http://localhost:8080</a>，如果看到tomcat的欢迎页面的话说明安装成功了。 <br />
<br />
第三步：建立自己的jsp app目录 <br />
<br />
1.到Tomcat的安装目录的webapps目录，可以看到ROOT，examples, tomcat-docs之类Tomcat自带的的目录； <br />
2.在webapps目录下新建一个目录，起名叫myapp； <br />
3.myapp下新建一个目录WEB-INF，注意，目录名称是区分大小写的； <br />
4.WEB-INF下新建一个文件web.xml，内容如下： <br />
<br />
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt; <br />
&lt;!DOCTYPE web-app <br />
PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; <br />
&quot;<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">http://java.sun.com/dtd/web-app_2_3.dtd</a>&quot;&gt; <br />
&lt;web-app&gt; <br />
&lt;display-name&gt;My Web Application&lt;/display-name&gt; <br />
&lt;description&gt; <br />
A application for test. <br />
&lt;/description&gt; <br />
&lt;/web-app&gt; <br />
<br />
5.在myapp下新建一个测试的jsp页面，文件名为index.jsp，文件内容如下： <br />
&lt;html&gt;&lt;body&gt;&lt;center&gt; <br />
Now time is: &lt;%=new java.util.Date()%&gt; <br />
&lt;/center&gt;&lt;/body&gt;&lt;/html&gt; <br />
<br />
6.重启Tomcat <br />
<br />
7.打开浏览器，输入<a href="http://localhost:8080/myapp/index.jsp" target="_blank">http://localhost:8080/myapp/index.jsp</a> 看到当前时间的话说明就成功了。 <br />
<br />
第四步：建立自己的Servlet： <br />
<br />
1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个servlet程序，文件名为Test.java，文件内容如下： <br />
<br />
package test; <br />
import java.io.IOException; <br />
import java.io.PrintWriter; <br />
import javax.servlet.ServletException; <br />
import javax.servlet.http.HttpServlet; <br />
import javax.servlet.http.HttpServletRequest; <br />
import javax.servlet.http.HttpServletResponse; <br />
public class Test extends HttpServlet { <br />
protected void doGet(HttpServletRequest request, HttpServletResponse response) <br />
throws ServletException, IOException { <br />
PrintWriter out=response.getWriter(); <br />
out.println(&quot;&lt;html&gt;&lt;body&gt;&lt;h1&gt;This is a servlet test.&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;); <br />
out.flush(); <br />
} <br />
} <br />
<br />
2 .编译 <br />
将Test.java放在c:\test下，使用如下命令编译： <br />
<br />
C:\Test&gt;javac Test.java <br />
<br />
然后在c:\Test下会产生一个编译后的servlet文件：Test.class <br />
<br />
3 .将结构test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下，也就是剪切那个test目录到classes目录下，如果classes目录不存在，就新建一个。现在webapps\myapp\WEB-INF\ classes下有test\Test.class的文件目录结构 <br />
<br />
4 .修改webapps\myapp\WEB-INF\web.xml，添加servlet和servlet-mapping <br />
<br />
编辑后的web.xml如下所示，红色为添加的内容: <br />
<br />
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt; <br />
&lt;!DOCTYPE web-app <br />
PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; <br />
&quot;<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">http://java.sun.com/dtd/web-app_2_3.dtd</a>&quot;&gt; <br />
&lt;web-app&gt; <br />
&lt;display-name&gt;My Web Application&lt;/display-name&gt; <br />
&lt;description&gt; <br />
A application for test. <br />
&lt;/description&gt; <br />
&lt;servlet&gt; <br />
&lt;servlet-name&gt;Test&lt;/servlet-name&gt; <br />
&lt;display-name&gt;Test&lt;/display-name&gt; <br />
&lt;description&gt;A test Servlet&lt;/description&gt; <br />
&lt;servlet-class&gt;test.Test&lt;/servlet-class&gt; <br />
&lt;/servlet&gt; <br />
&lt;servlet-mapping&gt; <br />
&lt;servlet-name&gt;Test&lt;/servlet-name&gt; <br />
&lt;url-pattern&gt;/Test&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; <br />
&lt;/web-app&gt; <br />
<br />
这段话中的servlet这一段声明了你要调用的Servlet，而servlet-mapping则是将声明的servlet&quot;映射&quot;到地址/Test上 <br />
<br />
5 .好了，重启动Tomcat，启动浏览器，输入<a href="http://localhost:8080/myapp/Test" target="_blank">http://localhost:8080/myapp/Test</a> 如果看到输出This is a servlet test.就说明编写的servlet成功了。 <br />
<br />
注意：修改了web.xml以及新加了class，都要重启Tomcat <br />
<br />
第四步：建立自己的Bean： <br />
<br />
1.用你最熟悉的编辑器（建议使用有语法检查的java ide）新建一个java程序，文件名为TestBean.java，文件内容如下： <br />
<br />
package test; <br />
public class TestBean{ <br />
private String name = null; <br />
public TestBean(String strName_p){ <br />
this.name=strName_p; <br />
} <br />
public void setName(String strName_p){ <br />
this.name=strName_p; <br />
} <br />
public String getName(){ <br />
return this.name; <br />
} <br />
} <br />
<br />
2 .编译 <br />
<br />
将TestBean.java放在c:\test下，使用如下命令编译： <br />
<br />
C:\Test&gt;javac TestBean.java <br />
<br />
然后在c:\Test下会产生一个编译后的bean文件：TestBean.class <br />
<br />
3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下， <br />
<br />
4 .新建一个TestBean.jsp文件，文件内容为： <br />
<br />
&lt;%@ page import=&quot;test.TestBean&quot; %&gt; <br />
&lt;html&gt;&lt;body&gt;&lt;center&gt; <br />
&lt;% <br />
TestBean testBean=new TestBean(&quot;This is a test java bean.&quot;); <br />
%&gt; <br />
Java bean name is: &lt;%=testBean.getName()%&gt; <br />
&lt;/center&gt;&lt;/body&gt;&lt;/html&gt; <br />
<br />
5 .好了，重启Tomcat，启动浏览器，输入<a href="http://localhost:8080/myapp/TestBean.jsp" target="_blank">http://localhost:8080/myapp/TestBean.jsp</a> 如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。 <br />
<br />
这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码，自己多动手写代码以增强自己在这方面开发的能力了。 <br />
<br />
jvm应填写到 <br />
c:\j2sdk\bin <br />
<br />
给你一个简单的配置：：：： <br />
<br />
JSP环境配置心得 <br />
<br />
首先要说的是，使用jdk+tomcat完全可以配置我们的jsp服务器，不再需要其实任何东东，有很多文章介绍了Apache，其实根本用不着，一般的学习调试tomcat完全可以胜任了。 <br />
<br />
安装jdk后，tomcat在安装之前会自动找到jdk的安装路径，一路点击&quot;下一步&quot;，经过一段时间的文件复制，最后&quot;close&quot;，完成comcat的安装。 <br />
<br />
您最好去下载一个版本较高的tomcat，比如4.1以上的，因为它不需要设置太多的系统变量，右击&quot;我的电脑&quot;，选择&quot;属性&quot;-&gt;&quot;高级&quot;- &gt;&quot;环境变量&quot;-&gt;&quot;系统变量&quot;，新建一个TOMCAT_HOME，值设置成你的tomcat所在的路径，比如：D:\Program Files\Apache Group\Tomcat 5.5，配置完成。 <br />
<br />
从开始菜单中找到tomcat选项，一般打开顺序是：开始-&gt;程序-&gt;Apache Tomcat 5.5，选择&quot;Start Tomcat&quot;，让jsp服务器开始运行，此时会打开一个类似Dos的窗口，会显示一些相关的信息。 <br />
<br />
如果您使用代理上网，一定要先撤掉代理，不然您的jsp程序永远也得不到执行。如果不是代理的，这一步就跳过了。 <br />
<br />
打开浏览器，在地址栏中输入：<a href="http://localhost:8080/" target="_blank">http://localhost:8080</a>，如果看到有老虎（我也不知道是老虎还是猫）的画面，恭喜您，您成功了一半。 <br />
<br />
先来享受一下成功的喜悦吧，请输入下面的代码： <br />
<br />
&lt;html&gt; <br />
&lt;head&gt; <br />
&lt;title&gt;First Page&lt;/title&gt; <br />
&lt;/head&gt; <br />
&lt;body&gt; <br />
&lt;H3&gt;Today is: h <br />
&lt;%= new java.util.Date() %&gt; <br />
&lt;/H3&gt; <br />
&lt;/body&gt; <br />
&lt;/html&gt; <br />
<br />
将该程序保存为:First.jsp，放到Tomcat的ROOT目录下，然后在浏览器的地址栏中输入：<a href="http://localhost/" target="_blank">http://localhost:</a> 8080/First.jsp，(First.jsp跟我们保存的文件名的大小写要一致)回车，如果不出意外，应该可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的结果。 <br />
<br />
注意：ROOT是tomcat的默认虚拟目录，如果要改成自己的虚拟目录怎么办呢？请继续往下看吧。 <br />
<br />
要改成自己的虚拟目录，就要请出server.xml来了，该文件是一个配置文件，在Tomcat\conf目录下，使用任何文本编辑软件都能打开它，我们先找到下面一句： <br />
<br />
&lt;Connector className=&quot;org.apache.coyote.tomcat4.CoyoteConnector&quot; <br />
port=&quot;8080&quot; minProcessors=&quot;5&quot; maxProcessors=&quot;75&quot; <br />
enableLookups=&quot;true&quot; redirectPort=&quot;8443&quot; <br />
acceptCount=&quot;100&quot; debug=&quot;0&quot; connectionTimeout=&quot;20000&quot; <br />
useURIValidationHack=&quot;false&quot; disableUploadTimeout=&quot;true&quot; /&gt; <br />
<br />
这里的port=&quot;8080&quot;就是端口，我们完全可以用别的端口来代替，但不能是被系统占用的端口（0--1023），这里简单提一下。 <br />
<br />
下面我们再往下找，会发现以下的语句： <br />
<br />
&lt;/Context&gt; <br />
&lt;/Host&gt; <br />
<br />
我们就应该找到这两个语句，如果不懂E文，您就认定这两个语句好了。然后我们将该语句更改如下： <br />
<br />
&lt;/Context&gt; <br />
&lt;Context path=&quot;/myjsp&quot; debug=&quot;0&quot; docBase=&quot;e:/myjsp&quot; reloadable=&quot;true&quot;&gt; <br />
&lt;/Context&gt; <br />
&lt;/Host&gt; <br />
<br />
这里的path=&quot;/myjsp&quot;就是我们就配置的虚拟目录了，以后在地址栏中输入<a href="http://localhost:8080/myjsp" target="_blank">http://localhost:8080/myjsp</a>即可。而docBase=&quot;e:/myjsp&quot; 则是机器本地路径，他们通过这个语句形成一个映射关系，其它照抄。 <br />
<br />
将上面的First.jsp文件放到e:/myjsp目录下，输入<a href="http://localhost:8080/myjsp/First.jsp" target="_blank">http://localhost:8080/myjsp/First.jsp</a>，是不是有一种喜上眉梢的感觉？ <br />
<br />
在论坛里我见得最多的就是很多人不知道javaBean文件放到哪里，老实说开始我也不知道，更令人不解的是，十个人有九种不同的说法，这更让我们茫然。其实这问题也不是我们想像的那么复杂，我们以一个例子说明： <br />
<br />
先建立一个java程序，代码如下： <br />
<br />
package hall; <br />
public class SimpleBean { <br />
private String message = &quot;No message specified&quot;; <br />
public String getMessage() { <br />
return(message); <br />
} <br />
public void setMessage(String message) { <br />
this.message = message; <br />
} <br />
} <br />
<br />
保存为SimpleBean.java，编译后会生成一个包，其实就相当于一个目录，也就是SimpleBean.class会存放在hall目录中，暂且保存起来，将来备用。 <br />
<br />
再输入以下代码： <br />
<br />
&lt;HTML&gt; <br />
&lt;HEAD&gt; <br />
&lt;TITLE&gt;Reusing JavaBeans in JSP&lt;/TITLE&gt; <br />
&lt;/HEAD&gt; <br />
&lt;BODY&gt; <br />
&lt;CENTER&gt; <br />
&lt;TABLE BORDER=5&gt; <br />
&lt;TR&gt;&lt;TH CLASS=&quot;TITLE&quot;&gt; <br />
Reusing JavaBeans in JSP&lt;/TABLE&gt; <br />
&lt;/CENTER&gt; <br />
&lt;P&gt; <br />
&lt;jsp:useBean id=&quot;test&quot; class=&quot;hall.SimpleBean&quot; /&gt; <br />
&lt;jsp:setProperty name=&quot;test&quot; property=&quot;message&quot; value=&quot;Hello WWW&quot; /&gt; <br />
&lt;H1&gt;Message: &lt;I&gt; <br />
&lt;jsp:getProperty name=&quot;test&quot; property=&quot;message&quot; /&gt; <br />
&lt;/I&gt;&lt;/H1&gt; <br />
&lt;/BODY&gt; <br />
<br />
保存在我们刚才建立的虚拟目录e:/myjsp下面，并命名为：BeanTest.jsp。 <br />
<br />
现在我们应该将hall（包）目录放在哪儿呢？别急，我们先在e:/myjsp下建立一个文件夹WEB-INF，然后再在WEB-INF下建立一个 classes文件夹，最后将hall目录放到classes下，当然，hall下的字节码文件SimpleBean.class也一并要移过来，而 SimpleBean.java就和BeanTest.jsp放到同一目录吧（可以不需要放的，自己试试）。 <br />
<br />
重新启动机器（如果您试了好多次都不行，这一步一定要做），在浏览器中输入：<a href="http://localhost:8080/myjsp/BeanTest.jsp" target="_blank">http://localhost:8080/myjsp/BeanTest.jsp</a>，您看到了什么？呵，别告诉我您什么都没看到，那肯定是您设置的问题了。 <br />
<br />
Java学习 - 技术文章中心 <br />
<br />
初学者问的诸如：《怎样配置环境变量》《怎样运行Servlet》啊？这样的问题太多了，现在我写一个初学者入门必读，以便对初学者有指导作用！ <br />
<br />
首先是下载工具： <br />
<br />
我建议初学者用Editplus＋JDK，我觉得如果用例如JB，Eclipse，JCreator，虽然刚开始的时候比较方便，但是确使初学者门不知道怎样配置环境变量， <br />
<br />
从而难以达到知其然，知其所以然的地步 <br />
<br />
可以通过如下地址下载： <br />
<br />
Editplus (最新版本是v2.11)：<a href="http://count.skycn.com/softdown.php?id=3641&amp;url=http:" target="_blank">http://count.skycn.com/softdown.php?id=3641&amp;url=http:</a> //sc-http.skycn.net/down/epp211a_cn.exe(要照注册码就自己找吧，网上很多的） <br />
<br />
JDK(最新版本是Java2sdk1_5_0)：http: //192.18.97.54/ECom/EComTicketServlet/BEGIN30AA3B63E5C2F61C8C26F84B78970A98/ -2147483648/926882595/1/627578/627410/926882595/2ts+/westCoastFSEND/jdk-1.5.0_04 -oth-JPR/jdk-1.5.0_04-oth-JPR:3/jdk-1_5_0_04-windows-i586-p.exe（这是For Windows） <br />
<br />
然后就是安装JDK，我是把它装到从c:\JDK目录下面： <br />
<br />
然后就是CLASSPATH的问题了： <br />
<br />
正如操作系统利用PATH来搜索可执行程序一样，Java运行环境也会遍历CLASSPATH来查找类，即便是HelloWorld这样简单的程序，JVM也会遍历 <br />
<br />
CLASSPATH定义的每一个路径，直到找到相应的文件为止。 <br />
<br />
相信大家用的系统不是2k就是XP，然后就应当如下设置Path： <br />
<br />
我的电脑-&gt;属性-&gt;高级-&gt;环境变量 <br />
<br />
然后在环境变量的Path后面追加: C:\JDK\bin;.;C:\JDK\lib <br />
<br />
也可以这样配置:C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar <br />
<br />
★记住:环境变量中的 . 切记不能少，它表示当前路径，如果少掉出现的错误等会就说！ <br />
<br />
dt.jar是关于运行环境的类库，tools.jar是关于一些工具的类库 <br />
<br />
如果没有配置:C:\JDK\bin，则会出现 &quot; javac&prime; 不是内部或外部命令，也不是可运行的程序或批处理文件。&quot;这样的错误。 <br />
<br />
然后下面就该写程序了： <br />
<br />
首先是(HelloWorld.java),打开Editplus，新建一个Java文件，请照着如下输入，要一字不漏，并且分清大小写： <br />
<br />
public class HelloWorld{ <br />
public static void main(String[] args){ <br />
System.out.println(&quot;Hello,World!&quot;); <br />
} <br />
} <br />
<br />
然后把这个文件保存(ctrl + s)到HelloWorld.java,记住大小写一定要分清，是HelloWorld.java不是helloworld.java或者其它的 <br />
<br />
下面就该运行了，开始-&gt;运行-&gt;cmd <br />
<br />
在控制台中把目录切换到当前目录： <br />
<br />
javac HelloWorld.java <br />
java HelloWorld <br />
<br />
你就会在控制台上看见输出的Hello,World!(没出来？我把电脑吃了：）) <br />
<br />
javac是编译命令，它把HelloWorld.java编译成HelloWorld.class <br />
<br />
java就是解释命令，JVM把HelloWorld.class解释执行. <br />
<br />
在这个时候： <br />
<br />
1。如果出现Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: HelloWorld <br />
<br />
那就是你在环境变量中没有加上那个.(dot) <br />
<br />
2。如果出现Exception in thread &quot;main&quot; java.lang.NoSuchMethodError: main <br />
<br />
或者HelloWorld.java:1: Public class helloworld must be defined in a file called <br />
<br />
&quot;HelloWorld.java&quot;. <br />
<br />
那就是你没有分清大小写的写入这个HelloWorld，或者保存得时候没有保存为HelloWorld.java <br />
<br />
这个名字一定要跟public class的名字一样 <br />
<br />
对于环境变量的问题就说到这里，下面我先所说怎么在Editplus里面编译和运行，在Tools－&gt;参数设置-&gt;配置用户工具 <br />
<br />
1.添加工具（添加应用程序） <br />
<br />
菜单文字：Compile Java Program <br />
<br />
程序：C:\JDK\bin\javac.exe <br />
<br />
参数：文件名称 <br />
<br />
初始目录：文件目录 <br />
<br />
2.添加工具（添加应用程序） <br />
<br />
菜单文字：Run Java Program <br />
<br />
程序：C:\JDK\bin\java.exe <br />
<br />
参数：文件名称（不含扩展名） <br />
<br />
初始目录：文件目录 <br />
<br />
工具组名称可以随便添，比如Debug Java Program <br />
<br />
然后在Tools的下拉菜单中，你就会看见Compile Java Program以及Run Java Program这两个选项，以后你就可以利用ctrl + 1编译和ctrl ＋2运行程序了 <br />
<br />
下面就讨论Servlet的运行： <br />
<br />
首先要运行Servlet，则需要JSP/Servlet container，我建议初学者用Tomcat <br />
<br />
Tomcat（最新版本5.5）：<a href="http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.exe" target="_blank">http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.exe</a>然后把这个压缩包解压到： <br />
<br />
C:\Tomcat <br />
<br />
然后再配置环境变量： <br />
<br />
添加三个系统变量： <br />
<br />
JAVA_HOME: C:\JDK <br />
TOMCAT_HOME: C:\Tomcat <br />
CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib <br />
<br />
Tomcat的环境变量就配置完毕了，下面检验Tomcat是否能够运行： <br />
<br />
在控制台中转到C:\Tomcat\bin这个目录，运行startup，然后回出现一个窗口，连跳一大串东西，最后表示Server已经运行 <br />
<br />
在浏览器中输入<a href="http://localhost:8080/" target="_blank">http://localhost:8080</a>，出现欢迎界面，则表示Tomcat没问题了 <br />
<br />
然后和上面一样，写入你的第一个Servlet <br />
<br />
import java.io.*; <br />
import javax.servlet.*; <br />
import javax.servlet.http.*; <br />
public class HelloWorld extends HttpServlet <br />
{ <br />
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException <br />
{ <br />
response.setContentType(&quot;text/html&quot;); <br />
PrintWriter out = response.getWriter(); <br />
out.println(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;&quot;); <br />
out.println(&quot;This is my first Servlet&quot;); <br />
out.println(&quot;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&quot;); <br />
out.println(&quot;&lt;h1&gt;Hello,World!&lt;/h1&gt;&quot;); <br />
out.println(&quot;&lt;/body&gt;&lt;/html&gt;&quot;); <br />
<br />
} <br />
} <br />
<br />
然后照样用javac HelloWorld.java来编译这个文件，如果出现无法import javax.servlet.* <br />
<br />
那么就是应该把C:\Tomcat\common\lib里面的servlet.jar（根据实际来看）文件拷贝到C:\JDK\jre\lib\ext中，再次编译，就没有问题了！ <br />
<br />
然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文件结构： <br />
<br />
ROOT\index.html <br />
ROOT\welcom.jsp <br />
ROOT\WEB-INF\lib\MyServlet.jar（如果你的servlet的.class打成了.jar文件，则放在lib下面) <br />
ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个里面) <br />
<br />
然后在浏览器中输入<a href="http://localhost:8080/servlet/HelloWorld" target="_blank">http://localhost:8080/servlet/HelloWorld</a>,于是Server众望所归的报错了:Error 404--Not Found <br />
<br />
怎么回事呢？ <br />
<br />
Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册，用EP打开这个web.xml文件，在里面加入 <br />
<br />
&lt;servlet&gt; <br />
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br />
&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt; <br />
&lt;/servlet&gt; <br />
&lt;servlet-mapping&gt; <br />
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br />
&lt;url-pattern&gt;/servlet/helloworld&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; <br />
<br />
这样的结构 <br />
<br />
&lt;servlet&gt; <br />
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br />
&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt; <br />
&lt;/servlet&gt; <br />
<br />
表示指定包含的servlet类. <br />
而以下的结构 <br />
<br />
&lt;servlet-mapping&gt; <br />
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br />
&lt;url-pattern&gt;/servlet/HelloWorld&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; <br />
<br />
表示指定HelloServlet应当映射到哪一种URL模式。 <br />
<br />
在修改web.xml完毕过后，重新启动Server，然后再输入<a href="http://localhost:8080/servlet/HelloWorld" target="_blank">http://localhost:8080/servlet/HelloWorld</a>，那么偌大一个Hello,World!等着你呢。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=311</link>
			<category domain="http://www.shanghuo.net/?cid=2">php学习</category>
			<pubDate>2009-05-07 18:43</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=310</guid>
			<title>韩国人篡改中国历史行为大集合！</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>1、向联合国申报&ldquo;活字印刷术&ldquo;是韩国发明的，联合国教科文组织不明究里，竟同意了；</p>
<p>韩国在德国办&ldquo;韩国是印刷术的起源国&rdquo;展览</p>
<p>在石墓林中走读&ldquo;1377年，世界上发生过什麽惊天动地的大事珐&rdquo;韩国方面的答案是：人类历史上最古老的金属活字本&mdash;&mdash;《白云和尚抄录佛祖直指心体要节》（简称《直指》）诞生了，这比德国人古登堡的四十二行圣经还要早78年。</p>
<p>自认为一直站在日本、中国文化阴影＿的韩国，此次便是高举着&ldquo;活字印刷术起源国&rdquo;的尚方宝剑，一路劈开路障，顺利登上全球最大书展主宾国的舞台，在数万观众的集体记忆＿刻上烙印。</p>
<p>然而，&ldquo;金属活字印刷&rdquo;一直是中韩两国之间共同争夺的古代科学专利。北宋时期，平民毕升发明活字印刷术，但在韩国学者看来，毕升只有奇思妙想，所造活字并不适用，很快便被束之高阁。中方专家引用《梦溪笔谈》、《造活字印书法》等历史文献中的相关资料反唇相讥，要求韩国学界匡正视听、还历史本来面目。近年来，韩国go-vern-ment对《直指》表现出异乎寻常的重视，进行了超大规模的宣传，并争取到了联合国教科文组织的承认，确立了《直指》的世界元老地位，并将之编入小学课本以传后世。</p>
<p>不止如此，其他三大发明他们也说是他们的！！</p>
<p>2、抢注端午节为韩国文化遗产，也成功了；</p>
<p>由韩国申报的江陵端午祭巴黎时间2006年7月24日被联合国教科文组织正式确定为&ldquo;人类传说及无形遗产着作&rdquo;。一度沸沸扬扬的中韩端午节&ldquo;申遗&rdquo;之争以韩国的胜利而告终。</p>
<p>3、正在酝酿把孔子纳入韩国的遗产，不久就要出手了；</p>
<p>9月28日，是孔子诞辰2557周年，大陆与台湾同时举行了祭孔大典。而在此前的9月26日，一组韩国祭孔大典的图片也成为各大门户网站的头条。抢在中国之前大规模宣传自己的祭孔活动，韩国人的用意又何在呢？韩国人的目的很明确，就是要让人觉得只有他们才是祭孔的正统，只有他们才最有资格祭祀孔子。然后就可以拿他们几百年历史的祭孔大典去申请世界文化遗产！韩国人论证孔子是韩国人还有这样的论据：朝鲜半岛最早建立政权的是商朝贵族箕子。箕子是商朝纣王的亲戚，西周武王伐纣。箕子不愿意接受西周统治。于是率领5000名商朝人逃跑到朝鲜半岛和辽东半岛，建立了政治难民国家&mdash;箕子朝鲜。而商朝大部分人都留在了中国，分布在西周封建的宋卫等多个国家。宋国的第一个国君就是箕子的亲戚&mdash;微子。孔子是宋国贵族后代，当然也就是韩国祖宗箕子的后代了。</p>
<p>除了孔子，古代美女西施，撰写了《本草纲目》的李时珍也早已是韩国人了！！</p>
<p>4、官民学大联合，进占中国东海苏岩礁，把我东海大陆架暗礁俨然视为韩国的最南端，指鹿为马的说它是&ldquo;岛&ldquo;，以在中国东海捞取最大的好处；</p>
<p>当代，科学技术发达，航海航空手段先进，大海不再是制约人类的天堑了，韩国开始向东拓展领域，在日本海上与日本争夺竹岛（韩称独岛），采取先占原则，日方居下风，韩国成功开辟了东疆。这回，韩国又开始扩张南疆的领土了，照搬在日本海的方式来中国东海，强硬迅速地先占为主，中国go-vern-ment已经两次交涉此问题，韩方没当回事儿。韩国想将苏岩礁筑成一个人工岛，然后根据国际海洋法，在我国东海、黄海圈出一块相当于法国大小的大片海域来，属于韩国私有，欲鲸吞东中国海。去年底，中国飞机在苏岩岛上空侦察飞行，韩国传媒立即群情汹涌，指摘中国侵犯韩国领土，韩国go-vern-ment也向中国抗出抗议。</p>
<p>5、把中医、本草纲目、人参、针灸据为己有，说成是韩国发明的，或韩国的文化遗产；</p>
<p>6、汉城pol.ice对中国外交官进行迫害，联合媒体教唆记者仗着&ldquo;本地人&ldquo;的优势，对孤立无援的&ldquo;外地人&ldquo;进行围攻，在欺侮中国外交官的同时，中方捍卫着国格，保卫着外交官的尊严，pol.ice强迫有外交豁免权的外交官下车，其实是以检查是否酒后驾车为名，欲剥夺中国外交官豁免权之目的，双方僵持不下，韩国媒体次日狠狠地大大的曝光这一事件，&ldquo;中外交人员酒驾，拒我pol.ice取缔&ldquo;、&ldquo;中使馆蛮横无理，在我地界闹事&ldquo;，目的就是丑化中国形象，替韩国加分。</p>
<p>7、今年长春冬季奥运会上，众多韩国运动员在领奖台上联手打出&ldquo;长白山是我们的领土&ldquo;的韩文标语，在中国的地盘上如此嚣张，不是背后有韩go-vern-ment撑腰，就是长期以来的歪曲历史教育所导致的恶劣影响；</p>
<p>8、韩国有六千年历史，日前韩国教育部着手修订历史教科书，把韩国青铜器出现的时间提前了一千年，超过传授他此项技术的中国；</p>
<p>世界杯足球赛韩国总统的讲话还比较客气的,说有5000年历史,后来媒体进一步说他们的历史有6000年比中国还长。另据韩国媒体称，韩国教育人力资源部23日表示，从今年新学期开始将采用新编初中、高中教科书，新教科书将青铜器时代的开始时间从&ldquo;公元前10世纪(公元前1000年)&rdquo;修改为&ldquo;公元前20世纪(公元前2000年)-公元前15世纪(公元前1500年)&rdquo;。照韩国人的思维方式，估计过不了多久他们的历史起始就和恐龙同时代了！！</p>
<p>9、把今年新版的10000圆钞票（韩面额最大纸币，相当于人民币80元左右）的背面，印上了中国古代天文学家张衡发明的&ldquo;浑天仪&ldquo;图案，这意味着浑天仪是韩国人发明的，是韩国的东西；</p>
<p>10、黄禹锡&ldquo;第一&rdquo;科学家</p>
<p>韩国的民族英雄黄禹锡造假事件，如今可以说已经真相大白，只剩下残局留待韩国各界的处理。如果硬要说中国人要有什么启发的话，那就是要学一下韩国人的敢于无耻，那就是以后中国人对于韩国人的吹牛无耻一定要小心。</p>
<p>11、哺育黄河文明</p>
<p>韩国没有自己的炫耀的文明，先是中国为宗主国，是中国的附属国；近代受日本欺负，造成他们偏执狭隘的心理。最为典型的要算韩国92年出版的教科书了.</p>
<p>这部共分5章:一开头宣示韩民族的祖先在公元前8000年从帕米尔高原远涉迁移到了半岛,途中催醒了满洲的&rdquo;红山文明&rdquo;,哺育了中原的&rdquo;黄河文明&rdquo;,韩人并在公元前7000东渡日本,创造了日本文明&hellip;...不过后来见了韩国人的&ldquo;考古&rdquo;，我倒觉得至少日本人还想着去做假证据，韩国人甚至把这一步都省了，还把成果出来大肆宣传。</p>
<p>12、去汉化</p>
<p>就是&ldquo;韩民族&rdquo;割断文化和中华文化的联系。汉城改&ldquo;汉城&rdquo;的闹剧刚刚过去，这不，几个韩国议员又开始张罗把&ldquo;汉江&rdquo;改为&ldquo;韩江&rdquo;了。在韩国，&ldquo;中医&rdquo;被改名成&ldquo;韩医&rdquo;，并被作为高丽医学而拼命向世界宣传推广。大长今中针灸也被认为是韩国人发明的。但朝鲜日报分明是报道了这个&ldquo;发现&rdquo;，并找到了个法国人作证，宣称要纠正世界人民的错误认识，把针灸还给韩国。怎么不把八卦图国旗也改了？八卦图可是正宗中国文化。什么时候韩国不用有中国八卦图的国旗,再来和中国谈尊严吧!日本人很自豪地说，我们的文化学习自中国，但是我们发扬光大了。所以，有这种意识的日本终究还是个强国。可是今天的韩国人否认了历史，忘记了中国文明对自己的教化.</p>
<p>13、台湾不属中国</p>
<p>韩国是先和台湾建交的，后来才和大陆建交的，我的同学说如果她不来中国，根本不知道台湾是中国的领土，可见韩国媒体对中国的妖魔化宣传。认识很多韩国同学.但确实他们国家的媒体会经常丑化中国，夸张中国的落后与贫穷.我曾遇到过这样的事：韩国人如果比较喜欢你，会对你说：&ldquo;你长得像韩国人&rdquo;，他们认为这是赞扬你。但我认识的一位朋友为表示友好，对一个韩国人说,&rdquo;你长得像中国人&ldquo;，结果那人非常不高兴，认为是污辱它。</p>
<p>14、蒙古人是朝鲜族分支</p>
<p>韩国人没有过征服别人的纪录（韩国人似乎很看重这一点），可以说韩国（朝鲜）的历史就是一部窝囊废的历史。他们就迂回出击&mdash;&mdash;和那些能征善战的民族&ldquo;攀亲戚&rdquo;。曾经征服过中原的北方的蒙古族和满族理所当然的是首选，于是上述两个民族全部变成了韩民族的&ldquo;分支&rdquo;。</p>
<p>&ldquo;爱新觉罗&rdquo;去掉&ldquo;爱&rdquo;和&ldquo;觉&rdquo;就是&ldquo;新罗&rdquo;，因此&ldquo;爱新觉罗&rdquo;的意思就是&ldquo;勿忘新罗&rdquo;或者&ldquo;爱新罗&rdquo;。说努尔哈赤的父亲来自朝鲜半岛，可稍具历史常识的人都知道，&ldquo;爱新觉罗&rdquo;出自满语，意思是&ldquo;金&rdquo;。韩国人籍此说&ldquo;金&rdquo;是韩国大姓，因此满族是朝鲜族分支！！！而韩国人论证自己与蒙古人关系的依据就更可笑&mdash;&mdash;韩国人新生婴儿屁股上有个青斑，和蒙古人一样。因此蒙古人是朝鲜族分支！！！可惜，这个蒙古斑是所有东亚人种共有的标记！</p>
<p>近日网上很多朝鲜人去满族的论坛&ldquo;认亲&rdquo;，其谄媚、下贱（被对方迎头痛骂之后，或是装作不知、或是说人家不是真正满族），让人&ldquo;五体投地&rdquo;。更好笑的是,某些韩国人认为孔子是韩国人，连西施都是韩国人。</p>
<p>15、教大禹治水</p>
<p>为了突出他们文明的优越，韩国学者做了篇文章，乖乖，连大禹治水用的&ldquo;神书&rdquo;都是朝鲜半岛传过来的，对韩国学者的学术能力找不到语言形容了，惊如天人。他们说他们的祖先檀宗，是我们祖先大禹的老师，是他教大禹治水的&mdash;&mdash;呵呵，后来甚至进一步说他们的历史有6000年比中国还长(世界杯足球赛韩国总统的讲话还是比较客气的，说有5000年，汗呀～～～世界杯靠黑哨拿第四名)韩国新歌剧《啊，高句丽！广大土好太王》。。&rdquo;。结尾是高句丽征服了燕国，燕国将高句丽的好太王供奉为主君。是一部典型的历史胡说剧！辽东在七雄时期是燕国，秦始皇灭六国而统一中国是世界公认的历史，还反咬一口说是中国人歪曲历史。秦始皇灭燕怎会突然之间变为高句丽王灭燕又突发奇想地出现在韩国的历史舞台上？庆幸的是，多数人还是有着清醒的头脑和良知，如果都按照韩国方式诠释历史，世界从此多事矣。</p>
<p>16、剽窃高句丽</p>
<p>请注意，高句丽和韩国的高丽完全是两码事情，高句丽是中国古代少数民族的一支。唐朝名将薛仁贵在高句丽的最后一个首都平壤（高句丽前后有过三个首都）接受了高句丽王的无条件投降书后，大唐军接收了高句丽全部的领土，自然继承了高句丽文化。而此时韩国的前身王氏高丽还没有诞生。在高句丽灭亡了二百多年以后，也就是公元9世纪初，由原高句丽旁边的新罗合并百济组成了高丽王朝。2004年9月17日，在被韩国命名为&ldquo;高句丽在韩国的历史作用&rdquo;的有多国学者参与的国际学术研讨会上，中国学者，沈阳东亚研究所研究员孙进已发言重申：&ldquo;高句丽是中国的历史因为高句丽的主体发生在中国，直至今天，原高句丽2/3的领土都在中国，而在当时3/4的高句丽居民都归顺了中国&rdquo;.&ldquo;在高句丽的大部分历史里，高句丽一直归属中原。看看韩国忠南大学考古学教授朴洋震论证&ldquo;满洲历史上属于高丽&rdquo;。拿出两个据他说是在满洲和韩半岛出土的青铜器，说这两件文物相似，又举出一件据说是中原出土的文物，说与前两件不同。于是得出结论：满洲和韩半岛属于一个文化共同体，满洲历史上韩民族的舞台。这是笔者平生所看见过的最荒唐最无耻的历史论证了。还扬言&ldquo;把满洲归纳与韩国古代领域不仅合乎情理，而且也是必要的&rdquo;甚至想把中国东北境内的高句丽历史剽窃为己有。2004年，中国把高句丽成功向联合国申请为中国的人类文化遗产，就是为了挫败韩国对历史的篡改。灭国先灭其史，韩国在赤裸裸的伪造历史！谈到满洲和朝鲜半岛的关系，还有一个朴洋震极力回避的突出的例子就是满清建立了满洲国后，为什么不是马上去合并朝鲜，以实现今天朴洋震等领土扩张野心家的梦想，去组成由满洲加半岛所谓韩民族的大统一？而要舍近求远，舍易攻难地入关攻克北京直捣中原？就是因为满洲人认为自己是中国人要入关统一中国。而对近在咫尺的朝鲜半岛，在满族人看来？是一个无关重要的边隧小邻国。</p>
<p>绑着写有&ldquo;还我河山&rdquo;四个鲜红大字布条的韩国人时常会成群结队出现在吉林吉安，延边，或者长白山。朝鲜日报做的调查，居然过半的韩国年轻人赞成&ldquo;夺回&rdquo;&ldquo;满洲（东北）和间岛（吉林延边）&rdquo;。韩国在高句丽问题上已经完成了发动群众的工作，而中国人大概很少有人知道这个争端关系到了东北的归属。</p>
<p>17、将中国领土划入版图百济曾统治西藏</p>
<p>根据史书记载，古代朝鲜半岛南部地区存在着两个古代王朝：新罗、百济。而北部则是领土跨越鸭绿江两岸的高勾丽。后来百济和高勾丽相继灭亡，新罗基本上完成了朝鲜半岛的统一。但在林均泽所着的《韩国史》标记的地图内容却与历史相差甚大，书中中国地图竟然用三种颜色分为三个国家：百济、新罗和唐朝。其中的百济除了统治整个朝鲜半岛外，还统治中国华北和西藏，而上海、江苏、浙江在内长江以南的中国区域则标记着&ldquo;新罗&rdquo;，表示这是新罗的统治区。而云南、四川部分地区，地图中用红颜色在这块小小地区标着&ldquo;唐&rdquo;。另外，该书的作者在描述三国割据结束后，统一的新罗王朝甚至还成立了安西都护府、安东都护府这样的government机构。</p>
<p>18、韩国已向联合国提交汉服申遗书。</p>
<p>据称，朝鲜族民族服装襦裙就是明朝汉族女性平常爱穿的服装，韩国已向联国提交汉服申遗书。</p>
<p>韩国还斥巨资对汉服拍摄电视剧《朱蒙》，为汉服申遗造势。剧中汉服飘飘，文化鲜明，韩国自信此剧定能为申遗加分。《朱蒙》被一些网民所指责，认为此剧歪曲历史，亦有人指剧集丑化了中国人。例如：剧中指汉武帝消灭了卫满朝鲜之后，把古朝鲜的遗民用作试验钢兵器的材料。这种说法都欠缺历史根据，有污蔑之嫌。韩国自古以来崇拜中国文化，而今就以为中国的历史是他们创造的了。还记得韩国2005年将首都的中文名称从汉城改名为汉城，虽然不可谓之不妥，却是民族主义空前高涨的一个表现。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=310</link>
			<category domain="http://www.shanghuo.net/?cid=7">新闻</category>
			<pubDate>2009-03-23 17:29</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=309</guid>
			<title>Gmail访问量超YouTube 成美国第十大网站</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>据国外媒体报道，美国互联网流量监测机构Hitwise周二公布的统计数据显示，在截至今年3月7日的前两周期间，谷歌旗下Gmail电子邮件服务网站的访问量已超过该公司旗下视频共享网站YouTube。以流量为标准，Gmail已成为美国第十大网站。</p>
<p><br />
Hitwise称，在截至今年1月10之前，YouTube在美国市场的流量排名一直稳居第十位，但进入2月份以来，这种情况发生了变化。到3月7日的前两周中，Gmail网站已取代了YouTube第十位置。Hitwise表示，由于此前美国十大网站流量排名一直非常稳定，这次Gmail取代YouTube，说明美国网民使用Gmail的频率已大幅提高。</p>
<p><br />
如果以谷歌旗下各项资产为标准，则Gmail流量已位居第二，仅位于谷歌搜索之后，YouTube退居第三。Hitwise称，与去年同期相比，Gmail网站3月7日的前两周中流量增长了70%。尽管YouTube流量与去年同期相比也有所提高(同比增长19%)，但增速已不如Gmail。(编译/中涛)</p>
<p><br />
附：Hitwise所统计今年3月7日前两周美国前12大网站排名(以流量为标准)：</p>
<p><br />
1、谷歌搜索</p>
<p><br />
2、雅虎邮箱</p>
<p><br />
3、雅虎网站</p>
<p><br />
4、新闻集团旗下社交网站Myspace</p>
<p><br />
5、美国社交网站Facebook</p>
<p><br />
6、美国网上拍卖网站eBay</p>
<p><br />
7、微软Windows Live邮箱</p>
<p><br />
8、雅虎搜索</p>
<p><br />
9、微软MSN网站</p>
<p><br />
10、谷歌Gmail邮箱</p>
<p><br />
11、谷歌旗下视频共享网站YouTube</p>
<p><br />
12、谷歌图片搜索</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=309</link>
			<category domain="http://www.shanghuo.net/?cid=7">新闻</category>
			<pubDate>2009-03-11 13:49</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=308</guid>
			<title>file_get_contents 和 curl</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>&lt;?php<br />
// create a new curl resource<br />
$ch = curl_init();</p>
<p>// set URL and other appropriate options<br />
curl_setopt($ch, CURLOPT_URL, &quot;<a href="http://www.example.com/">http://www.example.com/</a>&quot;);<br />
curl_setopt($ch, CURLOPT_HEADER, 0);</p>
<p>// grab URL and pass it to the browser<br />
curl_exec($ch);</p>
<p>// close curl resource, and free up system resources<br />
curl_close($ch);<br />
?&gt;</p>
<p>当然此功能也有被关闭的可能。</p>
<p>使用以上2个方法可以使用function_exists()判断使用</p>
<p>if(function_exists('file_get_contents')) {<br />
$file_contents = file_get_contents($url);<br />
} else {<br />
$ch = curl_init();<br />
$timeout = 5;<br />
curl_setopt ($ch, CURLOPT_URL, $url);<br />
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);<br />
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);<br />
$file_contents = curl_exec($ch);<br />
curl_close($ch);<br />
}<br />
return $file_contents;<br />
if(function_exists('file_get_contents')) {<br />
$file_contents = file_get_contents($url);<br />
} else {<br />
$ch = curl_init();<br />
$timeout = 5;<br />
curl_setopt ($ch, CURLOPT_URL, $url);<br />
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);<br />
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);<br />
$file_contents = curl_exec($ch);<br />
curl_close($ch);<br />
}<br />
return $file_contents;</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=308</link>
			<category domain="http://www.shanghuo.net/?cid=2">php学习</category>
			<pubDate>2009-03-09 16:35</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=307</guid>
			<title>几个常用的去空、分组、调试数组函数</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>dump() 把数组以数组格式数组，有益于调试</p>
<p>function dump($vars, $label = '', $return = false){<br />
&nbsp;&nbsp;&nbsp; if (ini_get('html_errors')) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content = &quot;&lt;pre&gt;\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($label != '') {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content .= &quot;&lt;strong&gt;{$label} :&lt;/strong&gt;\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content .= htmlspecialchars(print_r($vars, true));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content .= &quot;\n&lt;/pre&gt;\n&quot;;<br />
&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $content = $label . &quot; :\n&quot; . print_r($vars, true);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; if ($return) { return $content; }<br />
&nbsp;&nbsp;&nbsp; echo $content;<br />
&nbsp;&nbsp;&nbsp; return null;<br />
}</p>
<p>array_remove_empty()去除数组中为空的元素</p>
<p>function array_remove_empty(&amp; $arr, $trim = true){<br />
&nbsp;&nbsp;&nbsp; foreach ($arr as $key =&gt; $value) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (is_array($value)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array_remove_empty($arr[$key]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $value = trim($value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($value == '') {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unset($arr[$key]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } elseif ($trim) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr[$key] = $value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=307</link>
			<category domain="http://www.shanghuo.net/?cid=2">php学习</category>
			<pubDate>2009-03-09 16:33</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=306</guid>
			<title>德川家康4原则</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>原则一：活着就是硬道理。<br />
原则二：第一抉择：等待。<br />
原则三：安内方是根本。<br />
原则四：保全对手，就是保全自己。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=306</link>
			<category domain="http://www.shanghuo.net/?cid=18">成长</category>
			<pubDate>2009-01-05 09:37</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=305</guid>
			<title>优化PHP代码的42条建议</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p>英文版权归Reinhold&nbsp;&nbsp;Weber所有，中译文作者yangyang（aka&nbsp;&nbsp;davidkoree）。双语版可用于非商业传播，但须注明英文版作者、版权信息，以及中译文作者。翻译水平有限，请广大PHPer指正。<br />
<br />
1.如果一个方法可静态化，就对它做静态声明。速率可提升至4倍。<br />
<br />
2.echo 比 print 快。<br />
<br />
3.使用echo的多重参数（译注：指用逗号而不是句点）代替字符串连接。<br />
<br />
4.在执行for循环之前确定最大循环数，不要每循环一次都计算最大值。<br />
<br />
5.注销那些不用的变量尤其是大数组，以便释放内存。<br />
<br />
6.尽量避免使用__get，__set，__autoload。<br />
<br />
7.require_once()代价昂贵。<br />
<br />
8.在包含文件时使用完整路径，解析操作系统路径所需的时间会更少。<br />
<br />
9.如果你想知道脚本开始执行（译注：即服务器端收到客户端请求）的时刻，使用$_SERVER[&lsquo;REQUEST_TIME&rsquo;]要好于time()。<br />
<br />
10.函数代替正则表达式完成相同功能。<br />
<br />
11.str_replace函数比preg_replace函数快，但strtr函数的效率是str_replace函数的四倍。<br />
<br />
12.如果一个字符串替换函数，可接受数组或字符作为参数，并且参数长度不太长，那么可以考虑额外写一段替换代码，使得每次传递参数是一个字符，而不是只写一行代码接受数组作为查询和替换的参数。<br />
<br />
13.使用选择分支语句（译注：即switch case）好于使用多个if，else if语句。<br />
<br />
14.用@屏蔽错误消息的做法非常低效。<br />
<br />
15.打开apache的mod_deflate模块。<br />
<br />
16.数据库连接当使用完毕时应关掉。<br />
<br />
17.$row[&lsquo;id&rsquo;]的效率是$row[id]的7倍。<br />
<br />
18.错误消息代价昂贵。<br />
<br />
19.尽量不要在for循环中使用函数，比如for ($x=0; $x &lt; count($array); $x)每循环一次都会调用count()函数。<br />
<br />
20.在方法中递增局部变量，速度是最快的。几乎与在函数中调用局部变量的速度相当。<br />
<br />
21.递增一个全局变量要比递增一个局部变量慢2倍。<br />
<br />
22.递增一个对象属性（如：$this-&gt;prop++）要比递增一个局部变量慢3倍。<br />
<br />
23.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。<br />
<br />
24.仅定义一个局部变量而没在函数中调用它，同样会减慢速度（其程度相当于递增一个局部变量）。PHP大概会检查看是否存在全局变量。<br />
<br />
25.方法调用看来与类中定义的方法的数量无关，因为我（在测试方法之前和之后都）添加了10个方法，但性能上没有变化。<br />
<br />
26.派生类中的方法运行起来要快于在基类中定义的同样的方法。<br />
<br />
27.调用带有一个参数的空函数，其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。<br />
<br />
28.用单引号代替双引号来包含字符串，这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量，单引号则不会。当然，只有当你不需要在字符串中包含变量时才可以这么做。<br />
<br />
29.输出多个字符串时，用逗号代替句点来分隔字符串，速度更快。注意：只有echo能这么做，它是一种可以把多个字符串当作参数的&ldquo;函数&rdquo;（译注：PHP手册中说echo是语言结构，不是真正的函数，故把函数加上了双引号）。<br />
<br />
30.Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面，少用脚本。<br />
<br />
31.除非脚本可以缓存，否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能，以免除编译开销。<br />
<br />
32.尽量做缓存，可使用memcached。memcached是一款高性能的内存对象缓存系统，可用来加速动态Web应用程序，减轻数据库负载。对运算码 (OP code)的缓存很有用，使得脚本不必为每个请求做重新编译。<br />
<br />
33.当操作字符串并需要检验其长度是否满足某种要求时，你想当然地会使用strlen()函数。此函数执行起来相当快，因为它不做任何计算，只返回在zval 结构（C的内置数据结构，用于存储PHP变量）中存储的已知字符串长度。但是，由于strlen()是函数，多多少少会有些慢，因为函数调用会经过诸多步骤，如字母小写化（译注：指函数名小写化，PHP不区分函数名大小写）、哈希查找，会跟随被调用的函数一起执行。在某些情况下，你可以使用isset() 技巧加速执行你的代码。<br />
<br />
（举例如下）<br />
if (strlen($foo) &lt; 5) { echo &quot;Foo is too short&quot;$$ }<br />
（与下面的技巧做比较）<br />
if (!isset($foo{5})) { echo &quot;Foo is too short&quot;$$ }<br />
<br />
调用isset()恰巧比strlen()快，因为与后者不同的是，isset()作为一种语言结构，意味着它的执行不需要函数查找和字母小写化。也就是说，实际上在检验字符串长度的顶层代码中你没有花太多开销。<br />
<br />
34.当执行变量$i的递增或递减时，$i++会比++$i慢一些。这种差异是PHP特有的，并不适用于其他语言，所以请不要修改你的C或Java代码并指望它们能立即变快，没用的。++$i更快是因为它只需要3条指令(opcodes)，$i++则需要4条指令。后置递增实际上会产生一个临时变量，这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种，正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意，因为并不是所有的指令优化器都会做同样的优化处理，并且存在大量没有装配指令优化器的互联网服务提供商（ISPs）和服务器。<br />
<br />
35.并不是事必面向对象(OOP)，面向对象往往开销很大，每个方法和对象调用都会消耗很多内存。<br />
<br />
36.并非要用类实现所有的数据结构，数组也很有用。<br />
<br />
37.不要把方法细分得过多，仔细想想你真正打算重用的是哪些代码？<br />
<br />
38.当你需要时，你总能把代码分解成方法。<br />
<br />
39.尽量采用大量的PHP内置函数。<br />
<br />
40.如果在代码中存在大量耗时的函数，你可以考虑用C扩展的方式实现它们。<br />
<br />
41.评估检验(profile)你的代码。检验器会告诉你，代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序，评估检验总体上可以显示出代码的瓶颈。<br />
<br />
42.mod_zip可作为Apache模块，用来即时压缩你的数据，并可让数据传输量降低80%。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=305</link>
			<category domain="http://www.shanghuo.net/?cid=2">php学习</category>
			<pubDate>2008-12-24 11:46</pubDate>
		</item>
		<item>
			<guid>http://www.shanghuo.net/?action=show&amp;id=304</guid>
			<title>在linux下定时执行PHP脚本（定时执行crontab使用方法详解）</title>
			<author>jiashixiang</author>
			<description><![CDATA[<p style="text-indent: 2em">定时执行crontab使用方法详解</p>
<p style="text-indent: 2em">　　使用方式:</p>
<p style="text-indent: 2em">　　crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e }</p>
<p style="text-indent: 2em">　　说明:</p>
<p style="text-indent: 2em">　　crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。</p>
<p style="text-indent: 2em">　　参数:</p>
<p style="text-indent: 2em">　　-e:执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)</p>
<p style="text-indent: 2em">　　-r:删除目前的时程表</p>
<p style="text-indent: 2em">　　-l:列出目前的时程表</p>
<p style="text-indent: 2em">　　时程表的格式如下:</p>
<p style="text-indent: 2em">　　f1 f2 f3 f4 f5 program</p>
<p style="text-indent: 2em">　　其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。</p>
<p style="text-indent: 2em">　　当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推</p>
<p style="text-indent: 2em">　　当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推</p>
<p style="text-indent: 2em">　　当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推</p>
<p style="text-indent: 2em">　　当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推</p>
<p style="text-indent: 2em">　　使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。</p>
<p style="text-indent: 2em">　　例子:</p>
<p style="text-indent: 2em">　　每月每天每小时的第 0 分钟执行一次 /bin/ls:</p>
<p style="text-indent: 2em">　　0 7 * * * /bin/ls</p>
<p style="text-indent: 2em">　　在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup:</p>
<p style="text-indent: 2em">　　0 6-12/3 * 12 * /usr/bin/backup</p>
<p style="text-indent: 2em">　　周一到周五每天下午 5:00 寄一封信给 admin<a href="mailto:a@domain.name"><font color="#206b9f">@domain.name</font></a>:</p>
<p style="text-indent: 2em">　　0 17 * * 1-5 mail -s \&quot;hi\&quot; <a href="mailto:admin@domain.name"><font color="#206b9f">admin@domain.name</font></a> &lt; /tmp/maildata</p>
<p style="text-indent: 2em">　　每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo \&quot;haha\&quot;</p>
<p style="text-indent: 2em">　　20 0-23/2 * * * echo \&quot;haha\&quot;&nbsp;&nbsp;</p>
<p style="text-indent: 2em">　　注意:</p>
<p style="text-indent: 2em">　　当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 &gt; /dev/null 2&gt;&amp;1 即可。</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">crontab 基本上有兩种建立例行性命令的方式：</p>
<p style="text-indent: 2em">一种是针对所有使用者，可以藉由 crontab -e 的指令来下达工作排程；</p>
<p style="text-indent: 2em">另一种是针对系统管理员，你可以直接修改 /etc/crontab 这个文件，来直接定时执行。</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">假如你需要在每天的正午 12:00 发一封信给你自己，</p>
<p style="text-indent: 2em">#crontab -e</p>
<p style="text-indent: 2em">进入&nbsp;vi 的编辑画面来编辑你的例行性命令，输入如下语句</p>
<p style="text-indent: 2em">0 12 * * * mail xxx<a href="mailto:xxx@163.com"><font color="#206b9f">@163.com</font></a> &lt; /home/cheney/test.txt</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">以上有5个数字，分别代表的意思是：</p>
<p style="text-indent: 2em">&nbsp;&nbsp;&nbsp; 分（0-59）</p>
<p style="text-indent: 2em">　　小时（0-23）</p>
<p style="text-indent: 2em">　　日期（1-31）</p>
<p style="text-indent: 2em">　　月份（1-12）</p>
<p style="text-indent: 2em">　　周（0-6）</p>
<p style="text-indent: 2em">另外，如果是[ * ]的时候，代表所有数字都适用的意思。</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">所以，以上的语句就是不论何月、何日、星期几的 12 点 0 分时，执行 mail <a href="mailto:xxx@163.com"><font color="#206b9f">xxx@163.com</font></a> &lt; /home/cheney/test.txt 这个命令。</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">例1：</p>
<p style="text-indent: 2em">给你朋友发邮件，5月1号23：59时发送，使用：</p>
<p style="text-indent: 2em"># crontab -e 59 23 1 5 * mail <a href="mailto:xxx@163.com"><font color="#206b9f">xxx@163.com</font></a> &lt; /home/cheney/lover.txt</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">例2：</p>
<p style="text-indent: 2em">每隔6分钟检查相关文件，使用：</p>
<p style="text-indent: 2em"># crontab -e */6 * * * * /home/cheney/test.sh</p>
<p style="text-indent: 2em">删除例行性命令：</p>
<p style="text-indent: 2em"># crontab -r 就删除了</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">cron</p>
<p style="text-indent: 2em">在 Linux 中，任务可以被配置在指定的时间段、指定的日期、或系统平均载量低于指定的数量时自动运行。红帽企业 Linux 预配置了对重要系统任务的运行，以便使系统能够时时被更新。譬如，被 <tt>locate</tt> 命令使用的 slocate 数据库每日都被更新。系统管理员可使用自动化的任务来执行定期备份、监控系统、运行定制脚本等等。</p>
<p style="text-indent: 2em">红帽企业 Linux 随带几个自动化任务的工具：<tt>cron</tt>、<tt>at</tt>、和 <tt>batch</tt>。</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。</p>
<p style="text-indent: 2em">cron 假定系统持续运行。如果当某任务被调度时系统不在运行，该任务就不会被执行。</p>
<p style="text-indent: 2em">要使用 cron 服务，你必须安装了 <tt>vixie-cron</tt> RPM 软件包，而且必须在运行 <tt>crond</tt> 服务。要判定该软件包是否已安装，使用 <tt>rpm -q vixie-cron</tt> 命令。要判定该服务是否在运行，使用 <tt>/sbin/service crond status</tt> 命令。</p>
<p style="text-indent: 2em">配置 cron 任务</p>
<p style="text-indent: 2em">cron 的主配置文件是 <tt>/etc/crontab</tt>，它包括下面几行：</p>
<p style="text-indent: 2em">
<table width="100%" bgcolor="#dcdcdc">
    <tbody>
        <tr>
            <td>
            <p>&nbsp;</p>
            <p style="text-indent: 2em"><tt>SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly</tt></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p style="text-indent: 2em">前四行是用来配置 cron 任务运行环境的变量。<tt>SHELL</tt> 变量的值告诉系统要使用哪个 shell 环境（在这个例子里是 bash shell）；<tt>PATH</tt> 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 <tt>MAILTO</tt> 变量定义的用户名。如果 <tt>MAILTO</tt> 变量被定义为空白字符串（<tt>MAILTO=&quot;&quot;</tt>），电子邮件就不会被寄出。<tt>HOME</tt> 变量可以用来设置在执行命令或脚本时使用的主目录。</p>
<p style="text-indent: 2em"><tt>/etc/crontab</tt> 文件中的每一行都代表一项任务，它的格式是：
<table width="100%" bgcolor="#dcdcdc">
    <tbody>
        <tr>
            <td>
            <p>&nbsp;</p>
            <p style="text-indent: 2em"><tt>minute hour day month dayofweek command</tt></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p style="text-indent: 2em">&nbsp;</p>
<ul>
    <li>
    <p>&nbsp;</p>
    <p style="text-indent: 2em"><tt>minute</tt> &mdash; 分钟，从 0 到 59 之间的任何整数</p>
    </li>
    <li>
    <p>&nbsp;</p>
    <p style="text-indent: 2em"><tt>hour</tt> &mdash; 小时，从 0 到 23 之间的任何整数</p>
    </li>
    <li>
    <p>&nbsp;</p>
    <p style="text-indent: 2em"><tt>day</tt> &mdash; 日期，从 1 到 31 之间的任何整数（如果指定了月份，必须是该月份的有效日期）</p>
    </li>
    <li>
    <p>&nbsp;</p>
    <p style="text-indent: 2em"><tt>month</tt> &mdash; 月份，从 1 到 12 之间的任何整数（或使用月份的英文简写如 jan、feb 等等）</p>
    </li>
    <li>
    <p>&nbsp;</p>
    <p style="text-indent: 2em"><tt>dayofweek</tt> &mdash; 星期，从 0 到 7 之间的任何整数，这里的 0 或 7 代表星期日（或使用星期的英文简写如 sun、mon 等等）</p>
    </li>
    <li>
    <p>&nbsp;</p>
    <p style="text-indent: 2em"><tt>command</tt> &mdash; 要执行的命令（命令可以是 <tt>ls /proc &gt;&gt; /tmp/proc</tt> 之类的命令，也可以是执行你自行编写的脚本的命令。）</p>
    </li>
</ul>
<p>&nbsp;</p>
<p style="text-indent: 2em">在以上任何值中，星号（*）可以用来代表所有有效的值。譬如，月份值中的星号意味着在满足其它制约条件后每月都执行该命令。</p>
<p style="text-indent: 2em">整数间的短线（-）指定一个整数范围。譬如，<tt>1-4</tt> 意味着整数 1、2、3、4。</p>
<p style="text-indent: 2em">用逗号（,）隔开的一系列值指定一个列表。譬如，<tt>3, 4, 6, 8</tt> 标明这四个指定的整数。</p>
<p style="text-indent: 2em">正斜线（/）可以用来指定间隔频率。在范围后加上 <tt>/&lt;<tt>integer</tt>&gt;</tt> 意味着在范围内可以跳过 integer。譬如，<tt>0-59/2</tt> 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如，<tt>*/3</tt> 的值可以用在月份字段中表示每三个月运行一次任务。</p>
<p style="text-indent: 2em">开头为井号（#）的行是注释，不会被处理。</p>
<p style="text-indent: 2em">如你在 <tt>/etc/crontab</tt> 文件中所见，它使用 <tt>run-parts</tt> 脚本来执行 <tt>/etc/cron.hourly</tt>、<tt>/etc/cron.daily</tt>、<tt>/etc/cron.weekly</tt> 和 <tt>/etc/cron.monthly</tt> 目录中的脚本，这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。</p>
<p style="text-indent: 2em">如果某 cron 任务需要根据调度来执行，而不是每小时、每日、每周、或每月地执行，它可以被添加到 <tt>/etc/cron.d</tt> 目录中。该目录中的所有文件使用和 <tt>/etc/crontab</tt> 中一样的语法。</p>
<p style="text-indent: 2em">
<table width="100%" bgcolor="#dcdcdc">
    <tbody>
        <tr>
            <td>
            <p>&nbsp;</p>
            <p style="text-indent: 2em"><tt># record the memory usage of the system every monday # at 3:30AM in the file /tmp/meminfo 30 3 * * mon cat /proc/meminfo &gt;&gt; /tmp/meminfo # run custom script the first day of every month at 4:10AM 10 4 1 * * /root/scripts/backup.sh</tt></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p style="text-indent: 2em">例 37-1. crontab 的例子</p>
<p style="text-indent: 2em">根用户以外的用户可以使用 <tt>crontab</tt> 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在 <tt>/var/spool/cron</tt> 目录中，并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目，登录为该用户，然后键入 <tt>crontab -e</tt> 命令，使用由 <tt>VISUAL</tt> 或 <tt>EDITOR</tt> 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 <tt>/etc/crontab</tt> 相同。当对 crontab 所做的改变被保存后，该 crontab 文件就会根据该用户名被保存，并写入文件 <tt>/var/spool/cron/<tt>username</tt></tt> 中。</p>
<p style="text-indent: 2em">cron 守护进程每分钟都检查 <tt>/etc/crontab</tt> 文件、<tt>etc/cron.d/</tt> 目录、以及 <tt>/var/spool/cron</tt> 目录中的改变。如果发现了改变，它们就会被载入内存。这样，当某个 crontab 文件改变后就不必重新启动守护进程了。</p>
<p style="text-indent: 2em">控制对 cron 的使用</p>
<p style="text-indent: 2em"><tt>/etc/cron.allow</tt> 和 <tt>/etc/cron.deny</tt> 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了，cron 守护进程（<tt>crond</tt>）不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。</p>
<p style="text-indent: 2em">无论使用控制文件中的规定如何，根用户都总是可以使用 cron。</p>
<p style="text-indent: 2em">如果 <tt>cron.allow</tt> 文件存在，只有其中列出的用户才被允许使用 cron，并且 <tt>cron.deny</tt> 文件会被忽略。</p>
<p style="text-indent: 2em">如果 <tt>cron.allow</tt> 文件不存在，所有在 <tt>cron.deny</tt> 中列出的用户都被禁止使用 cron。</p>
<p style="text-indent: 2em">启动和停止服务</p>
<p style="text-indent: 2em">要启动 cron 服务，使用 <tt>/sbin/service crond start</tt> 命令。要停止该服务，使用 <tt>/sbin/service crond stop</tt> 命令。推荐你在引导时启动该服务。</p>]]></description>
			<link>http://www.shanghuo.net/?action=show&amp;id=304</link>
			<category domain="http://www.shanghuo.net/?cid=16">sever</category>
			<pubDate>2008-10-29 10:19</pubDate>
		</item>
	</channel>
</rss>
