June 09
http://www.91files.com/?5BSFLQFU0ID1746DWFBL
I’ve been using the Selenium IDE as part of my exploratory testing sessions
lately, which, if you don’t know, is a testing tool that records my interaction
with a web site, allows me to replay it automatically, and also lets me export
it as automated tests in various coding languages (Ruby, in my case).
Unfortunately, the format of automated tests I want to create is not
supported by the Selenium IDE. The Ruby script it generates is for Unit::Test,
not RSpec, which is the format I want. So over the last week I’ve gotten pretty
good at generating the Unit::Test code and converting it to RSpec so we can run
it in a headless grid integrated with our CI environment.
But I’d rather just export it as RSpec directly and skip the whole conversion
process. As it turns out, it’s pretty easy to add a new exporting format to the
Selenium IDE. So I did it, by modifying the code that creates Ruby - Unit tests
so that it will create RSpec code instead. It only took about ten minutes to do,
and the end result isn’t 100% perfect, but for most of the testing I do it will
generate RSpec code that will run right the first time.
I know Selenium/RSpec doesn’t have a huge user base at the moment, but if
anyone would like to download the file, here it is. I’m not
reserving any rights to this - do what you want with it, use at your own risk.
To install it, open the Selenium IDE, pick Options=>Options. Click on the
formats tab, then the add button. You will see two fields, one tiny, one huge.
In the tiny field, type Ruby - RSpec. In the huge field paste the entire
contents of the file OVER the pre-populated stuff.
Now, whenever you export a file, Ruby - RSpec will show up as one of your
choices. Cool, eh?
If you make improvements to this file, please let me know. I’d like to
benefit from them as well. One of the things that would be cool is if I could
create describe…do and it…do blocks from the IDE. That would probably require a
combination of extensions and changes to the format.
http://www.techdarkside.com/rspec_export.txt
May 13
ZhuanZhi:http://hi.baidu.com/gsxu/blog/item/8063f3c8e5a082117f3e6fb1.html
关键字: use rake
原文:Ruby on Rails Rake Tutorial (aka. How rake turned me into an alcoholic)
引言:作为一个rails的开发者,你可能很熟悉使用rake进行你的测试,或者使用rake db:migrate运行你的migrations,但是你真的知道Rake的背后故事吗?你意识到可以自己写一个Rake任务或者一个有用的lib吗?
下面是我们使用Rake任务的例子:
1、给列表中的用户发送邮件
2、每晚数据的计算和报告
3、过期或重新生成缓存
4、备份数据和svn版本(how's this : subversion repository)
5、运行数据处理脚本(sort of,how much is called this )
6、Pouring drinks to get a good buzz on(一句玩笑,是这两位仁兄的风格)

这篇文章中,我们将讨论为什么要创建Rake,和他怎么样帮助我们的rails应用。最好你可以写自己的Rake。
一、历史回顾:make
为了了解Rake的来历,我们先了解一下Rake的爷爷:Make。
让我们回到那个代码块需要编译,解释性语言和iphone还没出现在地球上的时代。

回到那时,我们下载的大型程序,还是一堆源代码和一个shell脚本。这个shell脚本包含了所有需要用来compile/link/build的代码。你需要运行“install_me.sh”这个脚本,每一行代码将被运行(编译每一行源文件),然后生成一个你能够运行的文件。
对于大多数人这样是不错的,但是对于程序开发人员却是一个不幸。每次你对源代码进行一个小的改动,并进行测试的时候,你需要回到shell脚本,并重新编译所有的源代码,显然对于大的程序“那是相当的”耗时的。
1977年(作者出生那年,我78年),贝尔实验室的Stuart Feldman创造了“make”。解决了编译时间过长的问题。Make用来编译程序,取得两方面的进步:

Stuart Feldman
(1)Make可以发现哪个文件在上一次编译后改动过,根据这点,再次运行Make时,仅编译改动过的文件。这个很大程序上减少了重新编译大型程序的时间。
(2)Make可以进行从属跟踪。你可以告诉编译器,源文件A的编译需要源文件B,源文件B的编译需要源文件C,所以Make在编译A时发现B没有编译,将会先编译B。
可以这样定义:Make是一个可执行程序。像ls或dir一样。让Make理解如何让编译一个项目,需要创建一个makefile文件,描述所有的源文件和依赖关系。makefiles有自己的语法,你不用去了解。
这些年Make出现了其他的变体,并且被其他的语言使用。事实上,ruby用户在rake出现前也在使用它。
“但是,ruby并不需要编译,我们用它来干嘛?”
是啊。ruby是一个解释性语言,我们不需要编译它的源代码,所以ruby程序员为什么使用它呢?
两个重要的原因:
(1)创建任务
在大型的应用中,你经常编写脚本,在命令行下运行一些任务。比如清除缓存,维护任务,或者迁移数据库。你可以写一个MakeFile来组织你的任务,而不是写十个不相干的脚本(或者一个复杂的)。这样你可以简单的运行:“make stupid”。
(2)从属任务跟踪
当你开始写一些维护任务的时候,可能发现有些任务的使用可能有重复。比如,“migrate”任务和“schema:dump”都需要链接数据库,这样我可以创建一个任务"connect_to_database",使“migrate”和“schema:dump”都依赖于 "connect_to_database",这样下次运行“migrate”时,"connect_to_database"会先于“migrate” 运行
二、如何得到Rake
几年前,Jim Weirich在一个java项目上使用了Make,他发现如果在他的Makefile中写一小段ruby代码将会带来非常大的方便。所以他创建了Rake。

左:Jim Weirich,中:Jason Seifer,右:Gregg Pollack
(后面两位为本文作者)
Jim 为Rake创建了任务功能,附属关系跟踪,甚至创建了时间段判断(timestamp recognition),(在上一次编译的基础上仅编译改动的部分),当然,对于ruby,我们并不需要编译。
我很想知道Jim在代码里做了什么,你也想知道吧。Jim可能从来没想给这个代码写个文档,可能现在他也是被烦透了,写了一个。呵呵
三、Rake如何工作
开始我想给这个部分起名为"How to get wasted with Rake"。
那么我想喝点酒,该怎么做呢?
1、去买酒
2、喝酒
3、喝醉

如果我要使用Rake完成这个任务,我会创建一个“Rakefile”文件:
task :purchaseAlcohol do
puts "Purchased Vodka"
end
task :mixDrink do
puts "Mixed Fuzzy Navel"
end
task :getSmashed do
puts "Dood, everthing's blurry, can I halff noth'r drinnnk?"
end
这样我可以在这个Rakefile的目录,分别运行这些任务:
$ rake purchaseAlcohol
Purchased Vodka
$ rake mixDrink
Mixed Fuzzy Navel
$ rake getSmashed
Dood, everthing's blurry, can I halff noth'r drinnnk?
酷!但是从顺序上看,我可以用任何的顺序运行这个任务。比如喝醉在买酒或者喝酒之前。当然这不符合人的习惯。
四、Rake的顺序
task :purchaseAlcohol do
puts "Purchased Vodka"
end
task :mixDrink => :purchaseAlcohol do
puts "Mixed Fuzzy Navel"
end
task :getSmashed => :mixDrink do
puts "Dood, everthing's blurry, can I halff noth'r drinnnk?"
end
这样,如果想喝酒,就得先去买,如果想喝醉,就得先喝酒。
$ rake purchaseAlcohol
Purchased Vodka
$ rake mixDrink
Purchased Vodka
Mixed Fuzzy Navel
$ rake getSmashed
Purchased Vodka
Mixed Fuzzy Navel
Dood, everthing's blurry, can I halff noth'r drinnnk?
看到了吧,我喝醉和,因为酒已经买了,也被我喝了。(译者:我是喜欢百事的,所以倘若我写,定然拿百事当例子。但是我让我儿子和可口,为什么呢?下面告诉你。)
现在,你的欲望无法满足了,你想让你的朋友加入进来。就像一个团队的开发,如果你想加入一个新人,你得有合适的规划。你得有文档。那么问题来了。

五、如何给我的Rake添加文档
Rake添加文档非常的方便,使用“desc”就可以了:
desc "This task will purchase your Vodka"
task :purchaseAlcohol do
puts "Purchased Vodka"
end
desc "This task will mix a good cocktail"
task :mixDrink => :purchaseAlcohol do
puts "Mixed Fuzzy Navel"
end
desc "This task will drink one too many"
task :getSmashed => :mixDrink do
puts "Dood, everthing's blurry, can I halff noth'r drinnnk?"
end
看到了吧,我的每个任务都添加了desc,这样我们可以输入"rake -T"或者"rake --tasks":
$rake --tasks
rake getSmashed # This task will drink one too many
rake mixDrink # This task will mix a good cocktail
rake purchaseAlcohol # This task will purchase your Vodka
简单乎?呵呵
六、Rake的命名空间
当你开始酗酒,并且开始使用大量的rake任务的时候,你需要一个好方法将他们分类,这时用到了命名空间,如果我在上面的例子使用了命名空间,那么:
namespace :alcoholic do
desc "This task will purchase your Vodka"
task :purchaseAlcohol do
puts "Purchased Vodka"
end
desc "This task will mix a good cocktail"
task :mixDrink => :purchaseAlcohol do
puts "Mixed Fuzzy Navel"
end
desc "This task will drink one too many"
task :getSmashed => :mixDrink do
puts "Dood, everthing's blurry, can I halff noth'r drinnnk?"
end
end
命名空间允许你将一些任务放到特定的分类中,在一个Rakefile中,你可以加入几个命名空间。运行rake --tasks
rake alcoholic:getSmashed # This task will drink one too many
rake alcoholic:mixDrink # This task will mix a good cocktail
rake alcoholic:purchaseAlcohol # This task will purchase your Vodka
所以如果想运行这个任务,只要输入 rake alcoholic:getSmashed:
七、如何写一个有用的ruby任务
最近,我想用ruby创建几个文件夹:
desc "Create blank directories if they don't already exist"
task(:create_directories) do
# The folders I need to create
shared_folders = ["icons","images","groups"]
for folder in shared_folders
# Check to see if it exists
if File.exists?(folder)
puts "#{folder} exists"
else
puts "#{folder} doesn't exist so we're creating"
Dir.mkdir "#{folder}"
end
end
end
当然,还可以在rake中使用更多的 文件工具File Utils,或者加入其他的部分。
八、如何为我的rails应用写一个Rake任务
一个rails应用中,已经有了一些rake任务,你可以在你的项目目录里运行:rake --tasks。
为了给你的rails应用添加一个新的任务,你可以打开/lib/tasks目录(已经存在的),添加一个叫something.rake的文件,这个任务会被自动的检索到,这些任务会被添加到rake tasks列表中,你可以在根目录里运行他们,现在把我们上面的例子放到这个rails应用中。
utils.rake
namespace :utils do
desc "Create blank directories if they don't already exist"
task(:create_directories) do
# The folders I need to create
shared_folders = ["icons","images","groups"]
for folder in shared_folders
# Check to see if it exists
if File.exists?("#{RAILS_ROOT}/public/#{folder}")
puts "#{RAILS_ROOT}/public/#{folder} exists"
else
puts "#{RAILS_ROOT}/public/#{folder} doesn't exist so we're creating"
Dir.mkdir "#{RAILS_ROOT}/public/#{folder}"
end
end
end
end
注意上面的代码,我使用了#{RAILS_ROOT} 来得到rails应用的当前位置,现在运行“rake --tasks”,你可以看到我们的任务已经添加到tasks列表中了。
...
rake tmp:pids:clear # Clears all files in tmp/pids
rake tmp:sessions:clear # Clears all files in tmp/sessions
rake tmp:sockets:clear # Clears all files in tmp/sockets
rake utils:create_directories # Create blank directories if they don't already exist
...
九、如何在任务中调用rails的model
呵呵,这个正是我最多使用rake的地方,写一个rake任务,代替原来需要手工操作的地方,或者一些任务代替经常需要按照计划自动执行(使用 cronjobs)的事情。就像我开头说的那样我用rake任务执行下面的擦作:
1、给列表中的用户发送邮件
2、每晚数据的计算和报告
3、过期或重新生成缓存
4、备份数据和svn版本(how's this : subversion repository)
5、运行数据处理脚本(sort of,how much is called this )
这个补充了原来的功能,而且相当简单。下面这个任务是检查用户的过期时间,对快过期的用户发送邮件。
utils.rake
namespace :utils do
desc "Finds soon to expire subscriptions and emails users"
task(:send_expire_soon_emails => :environment) do
# Find users to email
for user in User.members_soon_to_expire
puts "Emailing #{user.name}"
UserNotifier.deliver_expire_soon_notification(user)
end
end
end
使用你的model只用一步,"=> :environment"
task(:send_expire_soon_emails => :environment) do
如果在我的开发环境上运行这个任务,我只需要"rake utils:send_expire_soon_emails",如果我想在产品环境下运行这个任务,我需要"rake RAILS_ENV=production utils:send_expire_soon_emails"。
如果你想在每晚都运行这个任务,你需要写一个 cronjob ,像这样:
0 0 * * * cd /var/www/apps/rails_app/ && /usr/local/bin/rake RAILS_ENV=production utils:send_expire_soon_emails
相当的方便。
十、在哪找到一些例子
现在对一个有用的rake任务已经了解很多了,那么我将给你几个资源,我想最好的学习方法是看看别人的代码。
brand new rake tasks 在edge rails 中,这个可以创建和重置你的数据库。
Craig Ambrose写的数据库备份, database backups。
Adam Greene写了一组任务 set of Rake tasks,可以将所有的数据备份到amazon S3。他还给了我一个升级版本,你可以在这下载here。
Jay Fields的任务测试,testing rake tasks。
a new way of setting the RAILS_ENV and teaches how to use rake to boot you into a Mysql shell (看的时候留意一下他的注释)
Rake Bookshelf Books,和Martin Fowler的Using the Rake Build Language 教程,这两个都很有用,虽然有点过时。
如果你发现其他更好的文章,发贴子给我们。
译者:恩,这段不用翻译,懂的朋友自然会去看的了。
Still reading? If you are, I wanted to let you know that we're looking for more people to write for RailsEnvy. If you have an idea for a good rails tutorial we want to hear from you! Basically we would work with you to flesh out the tutorial and help polish (acting as an editor). It could definitely be a great way to get your name out there, and start getting some hits (for your blog or company). Email Gregg at RailsEnvy if you're interested.
另:我刚收到jim的邮件,如何更简单的创建我的目录。
# This is needed because the existing version of directory in Rake is slightly broken, but Jim says it'll be fixed in the next version.
alias :original_directory :directory
def directory(dir)
original_directory dir
Rake::Task[dir]
end
# Do the directory creation
namespace :utils do
task :create_directories => [
directory('public/icons'),
directory('public/images'),
directory('public/groups'),
]
end
1. Go to: http://www.youtube.com and choose a video. Copy the video URL adress.
2. Go to: http://www.savevid.com and paste Video URL that you had chosen. And click download. And Don't forget: on the saving window You must change video name as "video001.avi". It is important to put ".avi" at the end of video name.
3. Go to: http://www.effectmatrix.com/total-vid... and click to download Video Converter exe. And Install the program.
Or... Try this way. Here the program Download link:
http://rapidshare.com/files/17752857/...
4. Put the converted video into "My YouTube Videos" and delete the other video that you downloaded from savevid.com And now you can start to watch videos with Windows Media Player.
Also you can convert videos to audio files (mp3) just for good quality music clips.
Have Fun !
April 29
中国经常被打败,但中国从未被摧毁
你问我什么是中国性格?
其实就是:什么是中国?
什么是中国?
中国是诗书礼易、唐诗宋词、高宗孝武、仓颉玄奘、解县关云长、常山赵子龙。
不过,中国也是夏桀殷纣、赵高秦桧、酷吏来俊臣、阉竖魏忠贤;口蜜腹剑李林甫、焚书坑儒秦始皇;还有专食人肝赵思绾、屠尽四川张献忠,扶不起的刘阿斗,贪不完的清和坤,跳梁小丑袁世凯、虎头蛇尾汪精卫。
什么是中国?
中国,是惟一从未中断过的古文明。
诞生两河流域的古巴比伦立国于公元前3000年,为人类带来汉漠拉比法典、楔形文字和世界七大奇迹之一空中花园,文明史延续2000多年。
诞生尼罗河畔的古埃及立国于公元前32世纪,历经31个王朝,文明史全长2500多年,领土涵盖埃及、苏丹、阿尔及利亚、以色列、耶路撒冷、土耳其、约旦和沙特,为人类带来象形文字、金字塔、几何学和历法。没有古埃及文明,就不会有后来的古希腊罗马文明。
诞生恒河流域的古印度立国于公元前2000年,疆土包括印度、巴基斯坦、孟加拉、不丹、尼泊尔和阿富汗,为人类带来史诗《摩诃婆国多》和《罗摩衍那》,还有伟大的佛教。此外,阿拉伯数字源于古印度,只是通过阿拉伯传播到西方。文明史全长1500年。
因此,古印度并非印度,古埃及也并非埃及。至于古巴比伦,此名今已不存。
所有的古文明都已灭绝。古巴比伦公元前729年灭于亚述帝国。古埃及公元前343年灭于汉斯帝国。古印度灭于雅利安蛮族。
它们灭绝至今均已超过2000年,所以在史书上,它们前面都要加一个“古”字。
中国文明公元前2800年发源于黄河岸边。
四大古文明中惟一从未灭绝的文明。
所以,史书上并无“古中国文明”。
它从来都叫“中国文明”。
我的问题是:为什么中国文明从未断绝?
并不是因为中华帝国疆土特别辽阔。
世界史上,疆土更辽阔的帝国比比皆是。例如古罗马帝国。这个横跨欧、亚、非三洲的庞大帝国始于公元前9世纪,全盛时国土囊括意大利、、圣马力诺、安道尔、马耳他、塞浦路斯、希腊、马其顿、塞尔维亚和黑山、波斯尼亚和黑塞哥维那、克罗地亚、斯洛文尼亚、阿尔巴尼亚、保加利亚、西班牙、葡萄牙、列支敦士登、瑞士、比利时、法国、摩纳哥、卢森堡,奥地利、匈牙利、德国、罗马尼亚、英国以及荷兰、黎巴嫩、叙利亚、以色列、巴勒斯坦,土耳其、约旦、突尼斯、埃及、利比亚及摩洛哥的一部分。
然而,二千多年后的1453年,奥斯曼帝国的滚滚铁骑贴地飞鹰般沿地平线汹涌而来,这个灭绝了古希腊、迦太基和古犹太文明的古罗马帝国轰然倒塌,就地灭绝。
并不是因为中华帝国军队特别骁勇。
世界史上,更骁勇的帝国军队比比皆是。例如亚历山大帝的军队。马其顿王子亚历山大接管帝位时年仅20。这个亚里斯多德的入门弟子率数万铁骑纵横欧亚非洲,军旗指处见阵杀阵,佛挡杀佛,底比斯、雅典、斯巴达、波斯和古印度等一干强大帝国如秋花般颓然凋零满地,无声染香他的马蹄。亚历山大在打爆世界的11 年中未尝一败,其横跨欧亚非三洲的帝国版图包括希腊、马其顿、保加利亚,阿尔巴尼亚、塞浦路斯、土耳其、黎巴嫩、叙利亚、以色列、巴勒斯坦、埃及、约旦、伊拉克、科威特、伊朗、巴基斯坦、阿富汗大部和印度一部。
然而,这个帝国几乎从未真正存在过。
公元前323年亚历山大在巴比伦豪饮后发烧,十天后去世,年仅32岁。
第二天,帝国崩溃。
并不是因为中华民族特别强悍。
世界史上,更强悍的民族比比皆是。例如斯巴达。斯巴达每一个男人生来就是战士,每一个女人活着就是为了生育战士。斯巴达婴儿出生必经长老检验,不合格立刻抛诸荒山郊野。长老首肯后母亲须用烈酒给婴儿洗澡,如婴儿抽风或昏迷,也马上抛弃。男孩7岁后一律编入军队接受正规军事训练。斯巴达母亲送儿上战场都送一个盾牌,她们说的话都一样:“持盾光荣归来,或让人抬回你的尸体”。
斯巴达字典没有“逃跑”和“投降”。曾有强敌要求斯巴达国王臣服,否则就夷斯巴达为平地。
斯巴达国王的回答只有一个字:“请!”
史称“斯巴达式的回答。”
公元前480年,波斯国王薛西斯手提数十万大军御驾亲征希腊。斯巴达国王莱昂尼达应雅典之请亲率三百勇士在希腊温泉关正面迎击,血战三天,毙敌二万余,最后全军覆灭。但波斯人打扫战场只找到298具斯巴达尸体:有两个战士因眼病和奉命回家报信幸免。逃出生天后,斯巴达全国拒绝与他们说话。最后,一个战士羞愤自杀。另一个在后来的战斗中牺牲。但,斯巴达人仍然拒绝他入葬烈士墓地。
小小的斯巴达正是凭着这样的强悍击败了伟大的雅典,一跃成为希腊霸主。
然而,这个全民强悍的国家,只存在了不到三百年。2004年初我去雅典大学客座研究时向希腊教授克拉马里斯提出想去斯巴达看看。他的回答是:你去哪里干吗?现在那里什么都没有了。什么都没有了。就是一片农田。你要看田吗?
中国文明超越所有这些伟大的文明。
中华民族超越所有这些伟大的民族。
当然是因为中国性格。
中国的性格不是辽阔,不是骁勇,不是强悍。
我告诉你什么是中国性格。
中国性格是:顽强。
失败是成功之母。顽强是伟大之冠。
中国文明从未中断,因为它的苦难从未中断。
一个国家最大的苦难莫过于人相食。人相食,是人类社会所有道德和秩序的终点。
你要知道,中国历史上,人相食并不罕见。鲁迅从历史书中只看到“吃人”两个字,即从实际操作来看,亦非虚言。
五胡乱华,五胡军队进入中原后吃人成风。羯族军队不带军粮,抢不到粮食就掳掠民女,夜间奸淫,白天宰杀烹食。慕容鲜卑攻占邺城后抢得五万少女,全数分配给部下,士兵们先奸后烹,一个冬天把这五万少女吃得一个不剩,尸骨在城外堆成山丘。
北宋末年“靖康之乱”,金兵南侵,江淮缺粮致人相食,人肉贱过猪肉和大米。当时军队以老百姓为军粮,称人为“两脚羊”,老瘦男子叫“饶把火”,意即烧这种人肉要多加把火,姑娘叫“不羡羊”,意即味美超过羊肉,小孩叫做“和骨烂”,意即连肉带骨均可食。元末官军缺粮,亦捕百姓为食,做人肉的方法丰富到可写三本烹饪书。他们称人肉为“想肉”,意即味道鲜美,吃了还想吃。
吃人的当然不止五胡,汉族也有很多权威专家。隋末的诸葛昂和高瓒是一对食人魔。某天高瓒宴请诸葛昂,主菜是一对10岁孪生兄弟,头、手、脚分别装盘上席。不久诸葛昂回请高瓒,让一位美妾敬酒,美妾无故笑了一声,诸葛昂即令退下,少顷该妾已被入大蒸笼蒸熟,涂脂抹粉,用锦锻盖着,盘腿打坐放在特大盘子上。上菜后诸葛昂手撕腿肉礼敬高瓒,同席宾客均捂脸闭眼不敢看,诸葛昂却神态自若,撕扯肥美乳房大吃大嚼。
我有更多看了心惊肉跳、夜做噩梦的恶例,不再一一列举。
后来遭遇兵乱,诸葛昂和高瓒一同被盗贼抓去索财,他们拿不出钱,盗贼就把他们绑在木桩上,一刀刀活割肉烤着下酒。
佛家所谓“现世报”。
我的亲爱的中国,你如何竟能从这样的苦难中涅磐?
一个国家比人相食更大的苦难,只有亡国。前三个古文明,都随亡国灭绝。
其实,中国并不是没有亡过国。
南北朝五胡乱华已可算作亡国。其后孱弱的宋朝一直遭契丹、女真和蒙古的烧杀奸掠,上百万平民惨死于屠刀之下。或成为军粮。
元军南下,一路屠城,士兵业余体育活动是比谁砍的人头多。当时中国北方登记人口四千五百万,元军过后,只剩六百多万,中原地区赤地千里,白骨遍野,水井塞满死尸,致水不可饮。今天,强奸是十恶大罪,那时,强奸要算优待妇女,至少,你的脑袋还在脖子上。
有愤青说,小小蒙古灭了大宋,并不证明蒙古强大,而是证明宋朝有问题。
真知卓见。要知道,指挥元军灭宋的,是河北涿州汉人张弘范。
元军后来打弹丸小国越南和日本都攻不进去,可十几万元军,却击败超过一百万的宋军,灭总人口超过一亿的中国,杀人超过五千万!
当然是宋朝自己出了问题。这事儿还用咱们在这儿讨论吗?!
这是中国第一次亡国。
在电脑上敲下这几行字时适逢北京倒春寒,我浑身哆嗦,夜不能寐。
我的亲爱的中国,你如何竟能从这样的亡国中涅磐?
276年后(1644年),伟大的农民起义领袖李自成与明朝平西伯吴三桂为妓女陈圆圆率数十万雄师激战山海关一片石,清军多尔衮在洪承畴谋划之下斜刺里杀出,大败李自成,轻松摘下北京。1662年,明朝末代皇帝永历被吴三桂绞杀于云南。1683年,降清明将施琅率清军攻入台湾击败郑成功后人,明朝监国宁靖王朱术桂自杀殉国。
这是中国第二次亡国。
清军长驱南下,明朝养了无数个千日的武将们降了一地,只一介文臣史可法死守扬州七天七夜方告失守,清军屠城十天十夜,史称“扬州十日”,死难者逾八十万。
一年后,清军下令江南人民十日内剃头,“留头不留发,留发不留头”。嘉定人黄淳耀和侯峒曾遂率嘉定人民起义。在徐州守城时望清军旗帜而降的明朝总兵官李成栋此时大勇,亲率清兵攻入嘉定屠城,杀两万余人,女子容貌不佳者当场砍头,年轻貌美者均遭“日昼街坊当众奸淫”,不从者“用长钉钉其两手于板,仍逼淫之 ”。三日后,嘉定浮尸满河,行舟无处下篙,血污堆过水面数分之高。
事后,李成栋运三百船金帛美女回老家。
次日江东人朱瑛再入城组织抗清,旋败,嘉定再遭屠城,“城内积尸成丘”,城郊“数十里内,草木尽毁”。
后明朝总兵吴之藩造反,再占嘉定,亦败,嘉定三遭屠城。
史称“嘉定三屠”。并非指嘉定被屠城三天,而是指嘉定被连续三次屠城。
明朝军队超过百万,居然被十几万清军纵横中原,如入无人之境,不止扬州和嘉定,被屠城的还有江阴、昆山、常熟、苏州、南昌、海宁、广州、赣州、湘潭、大同、四川、厦门等等等等,不可胜数。清军在关内一直杀了37年,共杀人3257万!明朝天启三年(1623)中国登记人口5165万,到清顺治十七年(1660)年清朝江山底定,锐减为1908万,全国人口被杀掉三分之二。
在电脑上敲下这些文字时,我的太阳穴被当年如溪奔流的鲜血敲击如鼓,我的身体与当年如山尸堆肌肤相亲而刺骨冰凉。
我是独生子。
可是,每一个被屠杀的,都是我的嫡亲兄弟姐妹。
我的亲爱的中国,你如何竟能从这样的血海中浴火涅磐?
中国能够浴火涅磐,当然是因为中国性格。
什么是中国性格?
元军铁骑攻破长沙,岳麓书院数百书生以赤手空拳相抗,全数战死,无一降者。
七百多年后,汶川大地震,四川绵竹东汽中学51岁教师谭千秋力抗断墙,身殉学生。
谭千秋毕业于湖南大学。
岳麓书院,就是湖南大学!
元16年(1279年),张弘范率元军在崖山(广东江门)全歼南宋残余部队,末代宰相陆秀夫身背9岁小皇帝赵昺投海,张弘范在崖山石壁刻“张弘范灭宋于此”,高奏凯歌而还。后人在前加刻一个“宋”字,变成“宋张弘范灭宋于此。”
泰坦尼克号沉没算不算震撼?官方统计死1503人。
崖山海战,南宋军民集体跳海殉国,次日海面浮尸10万!
所以才落下了那句话:崖山之后,再无中国。
史载,富饶文明、民风柔弱的江南小镇嘉定,历经“三屠”无一人投降,个个“留发不留头”。
史可法城破被俘,清军多铎劝降,史可法说:“我中国男儿,安肯苟活!城存我存,城亡我亡!我头可断而志不可屈!”慷慨就义,尸骨无存,家人只好将其衣帽埋在城外梅花岭作衣冠冢,迄今尚在,后获溢“忠正公”。史可法母亲临盆前梦见文天祥进家门,其后生下史可法。不论这个故事是否传说,史可法都已并肩文天祥青史留名。他为国捐躯时比文天祥还年轻3岁。然而,清朝皇帝乾隆却盛赞史可法等明朝忠臣为“完人”:“史可法之支撑残局,力矢孤忠,终蹈一死以殉。又如刘宗周、黄道周等之立朝謇谔,抵触佥壬,及遭际时艰,临危授命,均足称一代完人。”
1645年,江阴人因“剃发令”公推阎应元和陈明遇为首领造反,24万清军围攻这个弹丸小城,81天不下,连丧“3位王爷和18员大将”,损兵7万5千余人。8月20日城破,杀红眼的清军下令“满城杀尽,然后封刀”,全城人民连囚犯与妓女在内“咸以先死为幸,无一顺从者”。屠城持续三天三夜,死者17万2千,仅余老幼53人。
从战略上讲,史可法、文天祥、陆秀夫、阎应元、陈明义做的事情毫无意义。他们拚上满腔热血身家性命,也根本无法挽亡国狂澜于既倒。
从人类文明史上讲,只有他们做的这些事情才有意义!
没有他们,谈何中国性格!
你真认为这些长年在朝为官的人不明白什么叫做“战略”?
你真以为这些饱学之士是书呆子,不知道什么叫做“意义”?
那是因为你自己不明白什么才是“意义”。
那是因为你自己是个没读过书的酒囊饭袋。
设想一个只有张弘范和李成栋,而没有文天祥和史可法的中国!
那样的中国,还可能存在吗?
还有必要存在吗?
佟麟阁,中华民国陆军二级上将,抗战时北京南苑大战前,平津卫戍司令宋哲元下令佟麟阁撤军回城,他夫人更来信称其父病重盼归,佟麟阁回信:“大敌当前,此移孝作忠之时,我不能亲奉汤药,请代供子职,孝敬双亲”,乃集合所部大呼:“此杀敌报国之时也!”后果然求仁得仁,以身殉国。
北京复兴门内,至今尚有佟麟阁路。
中国的性格是顽强。
什么叫做顽强?顽强就是“明知其不可为而为之!”
中国文明从未灭绝,端赖“明知其不可为而为之”。
明末清初三大家王夫之、顾炎武和黄宗羲,从未在精神上归顺清朝。
1142年1月28日,精忠报国的岳飞被赵构和秦桧以“莫须有”(也许有)谋反的罪名毒死于临安(杭州)风波亭,时年39岁。岳飞临刑前挥笔写下“天日昭昭,天日昭昭”八个大字。
宋臣文天祥顽强抗元,1278年12月20日被伟大的张弘范击败于五坡岭,吞冰片自杀未死。张弘范将他押往崖山,让他写信劝降宋军,文天祥抄下自己的诗《过零丁洋》给张弘范。张伟大读到“人生自古谁无死,留取丹心照汗青”时掩卷长叹,遂不再强迫。
文天祥被囚四年,降元丞相留梦炎前来劝降,文天祥不见;降元宋恭帝赵显前来,文天祥北跪于地,泪流满面,仰脸朝天曰:“圣驾请回”,赵显无颜以对,废然而返。最后元世祖忽必烈亲自出马许以宰相之位,一片美意换来的回答是“天祥为宋状元宰相,宋亡,惟可死,不可生,愿一死足矣”。1283年1月9日,47 岁文天祥在大都(北京)柴市口面南而跪,引颈就刑,永照汗青。
明朝袁崇焕死得比文天祥和史可法还惨。一代名将袁崇焕数败努尔哈赤和皇太极,后明思宗听从谗言于1629年12月初将袁崇焕逮捕入狱,半年后车裂于西市,弃尸示众,并诏告天下袁崇焕“卖国通敌”,为国捐躯时与文天祥一样是 47岁。深受清军荼毒的北京市民不幸相信愚蠢政府,“见磔崇焕,时百姓将银一钱买肉一块,如手指大,啖之。食时必骂一声,须臾,崇焕肉悉卖尽”。
袁崇焕被他深爱的、他冒着枪林矢雨满腔热血竭诚保护的人民“食肉寝皮”。
超过最伟大的古希腊悲剧。
是夜,其卫士佘某趁夜盗取袁崇焕头颅埋于北京东花市斜街52号院内,并嘱子孙不回岭南老家,世代留京守墓。此墓至今尚存,守墓者是60多岁的佘幼芝,她自称从1630年至今佘家已守墓17代,379年。
明朝皇帝后来明白自己是混蛋,下诏为袁崇焕平反。1772年,灭明而立的清朝出了个皇帝乾隆,他隔山打牛再次下诏为袁崇焕平反,称其“虽与我朝为难,但尚能忠于所事,彼时主暗政昏,不能罄其忱悃,以致身罹重辟,深可悯恻”。
哪一种人最受人尊敬?
就是那种连敌人都尊敬的人!
哪一种人不受人尊敬?
贪生怕死,见钱眼开的叛贼!
1776年,乾隆下令编修《贰臣传》,共收录明朝降臣120余人,亲笔下旨称他们“遭际时艰,不能为其主临危授命”,实乃“大节有亏”。这些苟且偷生的利禄之徒只好加倍胁肩谄笑,唾面自干。《贰臣传》甲等赫然是洪承畴。这洪承畴乃明朝太子太保,兵部尚书(国防部长),一度打得农民起义领袖李自成只剩18 骑落荒而逃,其军队号“洪军”。松山大战后洪承畴被清军所擒,为劝降,皇太极连自己的宠妃沁博尔济吉特都洗干净喷上香水送给他睡。降清后,洪承畴成为清军总参谋长,一手策划山海关大战,力助清军拿下北京,荡平江南,可称清朝打天下第一犬马,可乾隆的评价是:“其人实不足齿,其书岂可复存!”连他写的书都不准流传。
还有那个卑鄙的吴三桂。他后来为私利在云南举旗反清,事败灭族,子孙后代包括襁褓中的婴儿都被杀光,乾隆连《贰臣传》都不准他入。因此,吴三桂,在家族上是个断子绝孙的不孝之子,在历史上是个非明非清的孤魂野鬼。
乾隆最后核准表彰的明朝忠臣有3600人之多,他读史可法写给多尔衮拒绝降清的回信后叹道:“惜可法之孤忠,叹福王之不惠,有如此臣而不能信用,使权奸掣其肘而卒致沦亡矣”,遂下令将原为禁书的该信原件全文刊刻,彰表天下。
乾隆这么做,当然是“为了维护他自己的统治”。
问题是,为什么他这样做,就可以维护自己的统治?
当然是因为中国文化。
无论时光如何荏苒,无论人类怎样进步,中国文化里,“忠臣”和“叛贼”,永远是大大不同的两回事。
这就是中国性格。
这才是中国性格。并且,直到今天,仍然是中国性格。
精通中华文化的乾隆知道,他必须唾弃叛贼,哪怕是为打下大清江山立下汗马功劳的叛贼,否则,他就无法“维护自己的统治”。
满清屠遍中国,也没能让中国人全盘接受满清文化,而中国文化没杀乾隆身边一个人,他却心悦诚服地全盘接受中国文化。
那么,到底谁征服了谁?
或者说:哪一种征服才能称之为征服?
没听说过“无剑之剑”?纵观人类文明史,其实只有一柄无剑之剑。
这柄无剑之剑就是文化。
五千年的中国文化,一路走来,从未改变:
每一次的天朝沦落,都会继之卧薪尝胆,精卫填海,每一次的血海没顶,都会带来鲲鹏展翅,凤鸣岐山。
五千年来,中国文化就是一个巨大的炼钢炉,无论有多少不肖子孙,无论有多少叛臣国贼,它永远烧得通红从未熄灭,外质一旦进入,其中的杂质就会变成一缕青烟消失,而其中的铁质就会煅造成为精钢。
五千年来,无人击败过中国文化。再过五千年,也不会有。
什么叫“中国万岁”?
这就叫“中国万岁”!
这才是真正的中国性格。
中国性格不是吴三桂,不是洪承畴,不是李成栋,不是张弘范,当然更不是诸葛昂和高瓒。
在任何一个国家,他们都称作人渣。如同宋恭帝赵显并不代表中国。
中国性格是岳飞,是史可法,是袁崇焕,是陆秀夫,是谭千秋,是那些历尽三屠仍“无一降者”的嘉定百姓,是17万2千“咸以先死为幸”的江阴人民。
他们才是中国!
中国是他们的中国。
中国文化,是充满尊严的顽强,是即使已经衰弱到无力抵御外侮、却仍然不屈昂首面对侵略者沾满鲜血的屠刀,心中充满必胜的信念:
你们将统治我们的国土,我们将统治你们的灵魂。
五胡乱华的那些“胡”,最后都变成了中国人。都变成了我们的兄弟手足。
中国经常被打败。
但中国文化从未被摧毁!
陈水扁不读史。他想当台湾共和国开国总统,永远都不会成功。
不是因为台湾太小,而是因为中国文化。因为台湾就是中国。
五胡乱华时中国同时有20多个国家,民国时期,中国先后有7省联治和12省联治等等。
联治,等于宣布独立。
所有这些分裂,没有一次成功。
中国文化中,“卖国贼”,是子子孙孙不可承受之重。
民进党应当告诉陈水扁,在杭州栖霞岭岳飞墓前,秦桧已经跪八百多年了。
历史书上写着,强大并不自动等于伟大。
现在世界上没有比美国更强大的国家。今年初我去美国斯坦福大学讲学,看NBC时亲耳听到一个美国著名教授说,美国根本不配自称伟大民族。伟大民族,是那些经历过历史最低潮、甚至灭亡,却总能够依靠自己重新站起来的民族。
是的,至少在这个问题上,美国教授是对的。
我甚至怀疑美国是不是一个民族。
见过所有的风雨,走过所有的逆境,挺过所有的失败,不止一次地从血海覆灭中浴火重生,这样的民族,才是真正的伟大民族。
伟大的民族,都拥有充满尊严的顽强。
在这个意义上,只有一个民族在这个世界上可以比肩中国。
犹太人。也不是强悍的民族。也不是嗜吃人肉的民族。也是充满内奸和叛卖的民族。
那是一个曾经连自己的国家都没有的民族。
然而,那个民族的文化,从未中断。
岂止从未中断,来自那个国家的宗教,现在几乎是所有世界强国的国教。
伟大到底有多大?
伟大不是占领全世界,伟大不是杀死全世界。
伟大,也不是让全世界照抄自己的生活方式,也不是让全世界宾服自己的意见。
伟大,是博大精深到无法从地球上抹去的文化。是亡国都无法让它中断的文化。是抽去它世界历史就得完全重写的文化。是连征服者也不得不心服口服虔诚皈依的文化。
中国真的是伟大的。
她伟大到甚至根本不需要我们这些子孙来承认。
她伟大到根本不会在乎那些以呵佛骂祖为标榜、吃饱饭不愿上班、满腔无名悲愤、众人皆醉我独醒、在每一个可能的场合向她头上倾倒一桶桶充满恶毒咒骂和无知污蔑的恶臭脏水的愤青。
她脸带平和的微笑默默地包容他们。
因为她知道,就连这些愤青,也仍然从骨子里爱着她。
性格决定命运,这句话并不全对。
性格,就是命运!
命运,就是性格!
中国的命运,其实早已证明中国的性格。
念过这首辞吧?或者,至少听人念过:
怒发冲冠,凭阑处,潇潇雨歇。
抬望眼,仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。
莫等闲、白了少年头,空悲切。
靖康耻,犹未雪;臣子恨,何时灭!
驾长车,踏破贺兰山缺,壮志饥餐胡虏肉,笑谈渴饮匈奴血。
待从头,收拾旧山河,朝天阙。
你问我什么是中国性格?
你真想知道什么是中国性格?
就算华夏奔突异族铁骑,就算神州横流屠城之血,就算汉奸国贼弹寇相庆,就算武将怕死文官爱钱,就算帝聩官贪政昏国灭,五千年来,我们这个国家,依然有无数壮士豪迈,忠臣义烈,他们总会顽强挺直脊梁,出血海而不折,仰首青天,锵然唱一声黄钟大吕,秦腔激越:
待从头,收拾旧山河,朝天阙.
autoit = WIN32OLE.new('AutoItX3.Control')
puts autoit.ole_methods
=>
QueryInterface
AddRef
Release
GetTypeInfoCount
GetTypeInfo
GetIDsOfNames
Invoke
error
SW_HIDE
SW_MAXIMIZE
SW_MINIMIZE
SW_RESTORE
SW_SHOW
SW_SHOWDEFAULT
SW_SHOWMAXIMIZED
SW_SHOWMINIMIZED
SW_SHOWMINNOACTIVE
SW_SHOWNA
SW_SHOWNOACTIVATE
SW_SHOWNORMAL
Init
AutoItSetOption
BlockInput
CDTray
ClipGet
ClipPut
ControlClick
ControlCommand
ControlDisable
ControlEnable
ControlFocus
ControlGetFocus
ControlGetHandle
ControlGetPosX
ControlGetPosY
ControlGetPosHeight
ControlGetPosWidth
ControlGetText
ControlHide
ControlListView
ControlMove
ControlSend
ControlSetText
ControlShow
DriveMapAdd
DriveMapDel
DriveMapGet
IniDelete
IniRead
IniWrite
IsAdmin
MouseClick
MouseClickDrag
MouseDown
MouseGetCursor
MouseGetPosX
MouseGetPosY
MouseMove
MouseUp
MouseWheel
Opt
PixelChecksum
PixelGetColor
PixelSearch
ProcessClose
ProcessExists
ProcessSetPriority
ProcessWait
ProcessWaitClose
RegDeleteKey
RegDeleteVal
RegEnumKey
RegEnumVal
RegRead
RegWrite
Run
RunAsSet
RunWait
Send
Shutdown
Sleep
StatusbarGetText
ToolTip
WinActivate
WinActive
WinClose
WinExists
WinGetCaretPosX
WinGetCaretPosY
WinGetClassList
WinGetClientSizeHeight
WinGetClientSizeWidth
WinGetHandle
WinGetPosX
WinGetPosY
WinGetPosHeight
WinGetPosWidth
WinGetProcess
WinGetState
WinGetText
WinGetTitle
WinKill
WinMenuSelectItem
WinMinimizeAll
WinMinimizeAllUndo
WinMove
WinSetOnTop
WinSetState
WinSetTitle
WinSetTrans
WinWait
WinWaitActive
WinWaitClose
WinWaitNotActive
GetTypeInfoCount
GetTypeInfo
GetIDsOfNames
Invoke
require 'watir/win32ole'
require 'watir' # for Watir.autoit
class WindowHelper
def initialize( )
@autoit = Watir.autoit
end
def push_alert_button
@autoit.WinWait "Microsoft Internet Explorer", ""
@autoit.Send "{ENTER}"
end
def push_confirm_button_ok
@autoit.WinWait "Microsoft Internet Explorer", ""
@autoit.Send "{ENTER}"
end
def push_confirm_button_cancel
@autoit.WinWait "Microsoft Internet Explorer", ""
@autoit.Send "{ESCAPE}"
end
def push_security_alert_yes
@autoit.WinWait "Security Alert", ""
@autoit.Send "{TAB}"
@autoit.Send "{TAB}"
@autoit.Send "{SPACE}"
end
def logon(title,name = 'john doe',password = 'john doe')
@autoit.WinWait title, ""
@autoit.Send name
@autoit.Send "{TAB}"
@autoit.Send password
@autoit.Send "{ENTER}"
end
def WindowHelper.check_autoit_installed
begin
Watir.autoit
rescue
raise Watir::Exception::WatirException, "The AutoIt dll must be correctly registered for this feature to work properly"
end
end
end
April 21
为了完成这个任务,在网上查了好多资料,要么是讲得不清楚,要么是软件版本太老,走了不少弯路,在这里以本人的实际操作为例,为大家说一下整合的过程,希望对大家有所帮助。
准备工作:
1、 Apache 2.2.4
下载地址:http://cztele1.skycn.com/down/apache_2.2.4-win32-x86-no_ssl.zip
2、 Tomcat 6.0.16
下载地址:http://apache.mirror.phpchina.co ... e-tomcat-6.0.16.zip
3、 JDK
下载地址:http://cds.sun.com/is-bin/INTERS ... -windows-i586-p.exe
如果只是应用的话,也可以选择安装JRE,因为JRE比较小:)
4 JK-1.2.26-httpd-2.2.4
下载地址:http://www.apache.org/dist/tomca ... 2.26-httpd-2.2.4.so
注意JK的版本一定要与Apache版本相同。如果你的版本与我的不同,可以去官网下载,有多种版本,适用于各种操作系统,下载适用的既可,地址:
http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/
开始安装:
软件的安装顺序可以适当调整,但是JDK(JRE)一定要在Tomcat之前安装:
1、安装JDK(JRE)
此处默认、自定义安装均可。安装完成以后按下面的示例设置你的系统环境变量:我的电脑 -> 属性 -> 高级 -> 环境变量 (这里要添加的是系统变量,非用户变量)
JAVA_HOME = D:\Program Files\Java\jdk1.6.0_07
CLASSPATH = .;%Java_Home%\lib\tools.jar;%Java_Home%\lib\dt.jar;
PATH = %Java_Home%\bin
注意JAVA_HOME的路径改为你的实际安装路径。其它两个不变。
2、安装Apache
此处注意,如果你本机已经装了IIS并且占用了80端口,你可以选择禁用IIS或者给IIS指定其它端口,或者给Apache指定其它端口,根据实际情况进行设置。在Apache的安装过程中要设置Network Domain和Server Name为Localhost,设置你的Email地址(这个一定要设置,不然Apache启动不起来)。
安装完成之后,如果apache用的是80端口,那么在浏览器中输入 http://localhost ,如果使用的是其它端口例如81,则输入 http://localhost:81 ,将会看到 Apache 的成功页面。此时Apache已经运行,在系统托盘可以看到它的图标,双击打开可以对Apache服务进行控制,我们下面还要安装Tomcat和JK,所以现在选择 Stop 停止 Apache 服务。
3、安装Tomcat
将Tomcat解压到 D:\Program Files\Tomcat 下,设置环境变量:
CATALINA_BASE = D:\Program Files\tomcat
CATALINA_HOME = D:\Program Files\tomcat
CLASSPATH = %CATALINA_HOME%\lib\servlet-api.jar
运行 D:\Program Files\Tomcat\bin\startup.bat 启动Tomcat,出现Tomcat页面则表示安装成功。
4、安装JK
把 mod_jk-1.2.26-httpd-2.2.4.so 拷贝到 D:\Program Files\Apache2.2\modules 下。
下面进行服务器的配置:
1、配置Tomcat
查找Tomcat目录下的 conf/server.xml文件,在<host></host>中间加入以下语句以修改其默认的目录:
<Context path="" docBase="E:\wwwroot" reloadable="true" crossContext="true"/>
在这里,如果 path 不为空,则设置的是虚拟目录,path 的值为虚拟目录名。
查找Tomcat目录下的 conf/workers.properties文件,并对比下方文本内容,如有不同处,以下方文本为准进行修改。
workers.tomcat_home=D:\Program Files\Tomcat #让mod_jk模块知道Tomcat的位置
workers.java_home=D:\Program Files\Java\jre1.6.0_07 #让mod_jk模块知道jre的位置
ps=\
worker.list=ajp13 #模块版本
worker.ajp13.port=8009 #工作端口,若没占用则不用修改
worker.ajp13.host=localhost #本机,若上面的Apache主机不为localhost,作相应修改
worker.ajp13.type=ajp13 #类型
worker.ajp13.lbfactor=1 #代理数,不用修改
如果此文件不存在,则依以上内容创建。对Tomcat的设置进行任何修改后都要重启才可以生效。
2、配置Apache
打开D:\Program Files\Apache2.2\conf下的httpd.conf,在最后加入下面这段代码并保存。
LoadModule jk_module modules\mod_jk-1.2.26-httpd-2.2.4.so
#此处mod_jk的文件为你下载的文件
JkWorkersFile "D:\Program Files\Tomcat\conf\workers.properties"
#指定tomcat监听配置文件地址
JkLogFile "D:\Program Files\Tomcat\logs\mod_jk2.log"
#指定日志存放位置
JkLogLevel info
#设置虚拟主机
<VirtualHost localhost>
#如果非虚拟主机,将<VirtualHost localhost>和最后的</VirtualHost>注释或者删除掉即可
ServerAdmin localhost
DocumentRoot E:/wwwroot
<Directory "E:/wwwroot">
#您的站点项目所在路径,应与tomcat中的目录设置相同,据说以上两个必须同时设置才可以生效,没有试过不同的时候会有什么情况
ServerName localhost
DirectoryIndex index.html index.htm index.jsp
ErrorLog logs/shsc-error_log.txt
CustomLog logs/shsc-access_log.txt common
JkMount /servlet/* ajp13
#让Apache支持对servlet传送,用以Tomcat解析
JkMount /*.jsp ajp13
#让Apache支持对jsp传送,用以Tomcat解析
JkMount /*.do ajp13
#让Apache支持对.do传送,用以Tomcat解析
</VirtualHost>
#开头的行为注释,可以删除。此处的配置我是以设置虚拟目录,重新指定了serverName,DocumentRoot路径的方式配置站点,实际上,Apache的配置可以非常灵活,你也可以不采用虚拟目录的方式,而直接去修改站点的默认配置,使用任意文本编辑工具,搜索如 ServerName,DocumentRoot,ServerAdmin等相关项,然后将该项的配置根据你的实际情况进行修改即可。我建议大家可以多多尝试不同的配置,这是一种很有乐趣的体验。
所有的修改完成以后,双击系统托盘中的Apache图标,然后点击Start启动Apache服务。
在地址栏中分别输入http://localhost/,与http://localhost:8080/若结果相同,Apache与Tomcat整合成功