??xml version="1.0" encoding="utf-8" standalone="yes"?> 谢朓《王孙游》赏?/strong>
Since arriving on the scene in 2000, Apache Struts has enjoyed a very successful run, by most any standard, helping to build many, if not most, of the Java-based web applications deployed today. Its history tells of how Struts provided a solid framework to organize the mess of JSP and Servlets to make developing applications, which used mostly server-generated HTML with a touch Javascript for client-side validation, easier to develop and maintain. As time moved forward, and customer demands of web applications grew and grew, Struts 1 pretty much stayed the same, leaving more and more plumbing to the web developer. At JavaOne 2005, several of the Struts developers (Martin Cooper, Don Brown) sat down with Rich Feit (Apache Beehive) and a few Struts users to discuss the future of Struts. We came up with the Struts Ti proposal, which described a framework that brought together a lot of good things that were developing in the web framework community. The problem is that the Struts 1 code base didn’t lend itself to drastic improvements, and its feature set was rather limited, particularly lacking in features such as Ajax, rapid development, and extensibility. At the same JavaOne, I sat down with Jason Carreira of the OpenSymphony WebWork 2 project to discuss how we could better work together. I was interested in building on XWork, the core of their command pattern implementation, but he suggested building on WebWork 2 directly. As Rich and I worked on the first few versions of Struts Ti, we decided to take Jason’s advice. We thought it was time for a framework to address higher level application needs, and by building on the proven WebWork 2 framework, we could spend our precious spare time where we felt it would make a difference. From then on, Rich and I worked mostly with Patrick Lightbody, also a core WebWork 2 developer, and found ourselves constantly “stealing” each others ideas for our respective code bases. Around this time, Patrick and Keith Donald of the Spring WebFlow project were kicking around an idea of a web framework to bind them all, Clarity. Clarity brought together Spring WebFlow (Keith), Struts (Ted Husted and myself), WebWork (Patrick and Jason), and Beehive (Rich) to talk about the possibility of combining efforts into one framework. Unfortunately, the devil is in the details as soon as Beehive and WebFlow were unable to make progress on merging their wizard/conversion scope features, and questions about project ownership, brand, and identity soon broke up the party. Not wanting to lose momentum, Ted and I started discussions with Patrick and Jason on how we could better work together, and after Patrick casually suggested the idea of a merger, Ted jumped on it and the Struts/WebWork merger was born. Since Struts Ti was already based on WebWork, it wasn’t that far a leap to bring the WebWork code into the Struts project. We started the Apache Incubator process for WebWork 2 in January and graduated the WebWork 2 code, developers, and community to Apache Struts that May. At that time, Struts was struggling with the project’s core identity, whether it was an umbrella for multiple web frameworks or not. We had Apache Shale, a web framework based off JSF, as a Struts subproject, along side Struts Action 1 (now called Struts 1) and Struts Action 2 (the graduated WebWork 2 code). Unfortunately, these subprojects were confusion to the developer and user community, accustomed to the name “Struts” referring to a single framework. After an attempt to unify the Struts Action 2 and Shale subprojects into a single Struts 2 framework, the Shale developers felt it would be better if they were their own top level project (TLP) where they are today. Struts Action 2 was soon after renamed to simply Struts 2. Today, the Apache Struts project has two major versions of its framework, but it is one action-based framework project. WebWork continues to deliver patch releases, and will certainly continue to do so until Struts 2 goes GA or final, but all new development takes place on the Struts 2 code. For those looking for drama or a controversy in the Struts/WebWork merger story, you’ll have to look elsewhere. Both groups of developers are working happily towards a Struts 2.0 GA release, trying to combine the stability and accessibility of Struts 1 with the elegant architecture of WebWork 2. Since the initial incubation, the Struts 2 code has added major features including a plugin framework, a new API, and better Ajax tags, and as promised in the Struts Ti proposal, we won’t stop there. I decided to write this down to help clear up where this Struts 2.0 project came from and why it includes WebWork 2 code. Mergers are tricky things and it seems even in the Open Source community, one that champions collaboration, a merger between two projects is a rarity and needs to be defended. Amusing, because you’d be hard pressed to find a Java web developer that felt there are too few web frameworks. I think the WebWork and Struts communities pulled off something special in Struts 2, and hope the merger fever catches on in the Open Source world.
l草蔓如丝①Q杂树红英发②。无论君不归③,君归芛_歇④?nbsp;
惌下蝲直接在地址栏输入:http://www.aygfsteel.com/Files/ash011/wangsunyou.mp3
【注释】①蔓:蔓g。 ②英Q花。这两句是说C长满了如丝的l草Q树上开满了各样的红花,已是暮春时节了。 ③无论:莫说。 ④歇Q尽。这两句是说莫说你不回来Q即使回来,春天也过M?
【赏析?
q是一首乐府诗Q《乐府诗集》收?#8220;杂曲歌辞”一cR魏晋以来,文h创作乐府诗往往有一个特点:L围绕着“古辞”(汉乐?打{转,或拟古辞Q或以古辞ؓ引子生发开?当然也有弃古辞于不顾而自怼辞的)。这U从古辞中寻?#8220;母题”使创作上有所依傍的作法,已Ş成一个程式。南朝诗人写乐府诗虽然也依这一E式Q但却出现另一U們Q他们有时撇开汉乐府古辞,而直接上溯到《楚辞》中d?#8220;母题”。比如,南齐王融和萧梁费昉写过一首《思公子》,中心题旨是采自《楚?#183;九歌?“风飒飒兮木萧萧,思公子兮徒离忧?#8221;谢朓的这首诗也属于这U情况,?#8220;母题”Z《楚?#183;招隐士?“王孙游兮不归Q春草生兮萋萋?#8221;也就是说Q诗人的创作灉|莯《楚辞》,而所写内容则完全是现实生zM的感受。在古老的“母题”之中Q诏注了zȝ生的现实内容?
蔓,蔓gQ红英,即红花。春天,l草如丝Q葱p茸,蔓g大地Q绘写出一z的世界;各种各样的树上,U花竞放Q绚丽夺目。绿的氛_U的ҎQ在鲜明的对比之中,烘托Zz机勃勃的景象。窈H少奻I目睹此景Q心伤离情,不禁怦然心动Q情思缱l,不无惆怅地发出了感?“无论君不归,君归芛_歇?#8221;且不要说心上的h儿不回来Q即使等C回来Q那l丽的花有|已凋谢了Q那大好春光早已白白地流逝了Q我那美妙的q华也早x焉M。红颜难久持啊!q里Q诗Z主要写少奛_何急切地等待着情hQ如何急不可耐,而是着重写她对于红q珍惜Q对于大好春色的留恋Q由此描写出Ҏ君、恋君的春一般的情愫。如此写来,把Mh公的心态从一般的女怀春,从感情的倾诉和渲泄,升华C一U对春的珍惜、对时的留恋的理性高度,渗透出一U强烈的旉意识和生命意识。这P从景的描l,到情的抒发,再到理性的升华Q三者水乳交融般地融汇在一起了。所以,q是一首充满了生命意识的景、情、理׃的好诗?
诗虽短小Q艺术风格却颇具特色Q体C齐梁间诗歌创作雅俗结合的一U們。首先,从《楚辞》中生发出来的母题,显而易见带有文人的雅、艳色彩Q暗CZ它与文h文学的关p;但诗人却用南朝乐府民歌五a四句的诗歌Ş式,来表现这一古?#8220;母题”Q这便将原有华贵、雍雅的色彩悄悄褪去QE化,使之在语a风格上呈现出清思婉转,风情摇曳的特艌Ӏ其ơ,诗写春的景色逗引h的情思,因景而生情,情景相生Q短章途RQ风姿ԒU,q原是南朝乐府民歌的本色Q是“?#8221;。然而在描写W法上却颇具匠心Q诗人在l的氛围中缀以红qҎQyW对比,着意渲染,露出文人精心构制的痕迹Q表现出“?#8221;。雅俗结合,创ؓx。另外,诗的用韵也值得一提。诗用仄韵,短促Q急切Q对表现Z人公惜春、惜时的时不我待的急切心情Qv到很好的作用Q呈现出语浅意深、韵短情长的艺术风貌?/p>
我本人很喜欢,听了心里很^静的感觉~
by Don Brown in Opinion
Listen:/Files/ash011/struts2.rar
q里我把我自己最后成功的W记分nl大?
一 CVS服务器的安装Q?/span>
1Q?nbsp;查看你的操作pȝ上是否安装了CVSQ?/span>
#> rpm -qa|grep cvs
guile-1.8.0-8.20060831cvs
cvs-1.11.22-4
2Q?nbsp;建立cvs用户l:
/usr/sbin/groupadd cvs
3 建立cvsl的cvsroot用户和所属的目录Q?/span>
#> /usr/sbin/useradd -g cvs -G cvs –d /cvsroot cvsroot
4 ?/span>cvsroot用户d密码Q?/span>
#> passwd cvsroot
密码Q?/span>cvsroot123456
5 改变 /cvsroot/ 的目录属性:
#> chmod –R 770 /cvsroot
6改变用户登陆w䆾Q?/span>
#> su cvsroot
7 开始创建单个项目:
#> cd /cvsroot
#> mkdir configuration
#>mkdir psgui
#>mkdir davinci
8 开始徏立仓库:
#> cvs –d /cvsroot/configuration init
#> cvs –d /cvsroot/psgui init
#> cvs –d /cvsroot/davinci init
#> chmod -R 770 ./configuration/ ./psgui/ ./davinci/
9建立CVS服务启动文gQ我们?/span>xinetd方式Q?/span>
#> [Crtl]+[d] 切换?/span>root用户w䆾
#> cd /etc/xinetd.d
#> vi cvspserver
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvsroot/configuration --allow-root=/cvsroot/psgui --allow-root=/cvsroot/davinci pserver
log_on_failure += USERID
}
注:׃xinetd?/span>server_args长度限制,当你惌行很多的单个仓库的时?/span>,可以q么做:
10 加入cvs服务Q?/span>
#>vi /etc/services
cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service
已经存在了,如下Q(没有d了)
cvspserver 2401/tcp # CVS client/server operations
cvspserver 2401/udp # CVS client/server operations
11 启动cvs服务Q?/span>
#> /etc/init.d/xinetd restart
12 ?/span>cvspserver服务是否已经启动Q?/span>
#> netstat -l |grep cvspserver
应该有如下结果:
tcp 0 0 *:cvspserver *:* LISTEN
已经有上面的昄l果
?/span>CVS服务的用L理:
上面我们已经建立?/span>configuration?/span>psgui?/span>davinci三个CVS仓库Q下面我们分别给q三个仓库徏?/span>cvs用户?/span>
13创徏可以登陆cvs服务器的用户名和密码Q?/span>
#> su cvsroot
#> vi /cvsroot/configuration/CVSROOT/passwd
yujiabo:*****:cvsroot
#>vi /cvsroot/psgui/CVSROOT/passwd
lianghuoyan:*****:cvsroot
yujiabo:*****:cvsroot
q两个文件的意思是?/span>yujiaboQ?/span>lianghuoyan两个cvs用户Q?/span>lianghuoyan拥有psgui的用权限,yujiabo拥有configuration?/span>psgui的用权?/span>,登陆后的权限?/span>cvsroot权限?/span>
注意Q这里的cvs用户和系l用h不同的?/span>
14 *****为密码,׃下文件生成:
#> vi /cvsroot/passwd.pl
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}
";
#>chmod a+x /cvsroot/passwd.pl
15 如果你想生成一个密码是“123456”Q则Q?/span>
#> /cvsroot/passwd.pl “123456”
回R卛_得到加密密码,用其替换passwd文g中的*****
16 OkQ?/span>cvs现在已经全部安装完成了,如果你想让一个用h?/span>psgi的权限,你就?/span>/cvsroot/psgui/CVSROOT/passwd中给他加入一个用P如果你想让一个用户同时具?/span>psgui?/span>davinci的权限,你就l?/span>/cvsroot/psgui/CVSROOT/passwd?/span>/cvsroot/davinci/CVSROOT/passwd里给他加一个用户名和密码相同的用户卛_。最后,我们试用一下:
#> cvs -d :pserver:yujiabo@168.68.73.122:/cvsroot/psgui login
敲入命o回R后提C?/span>yujiabo的密?/span>,你按照自p|的密码输入,如果没有什么错误信息出现就是成功了(我的机器IP地址?/span>168.68.73.122)
客户端测试:
?/span>ash用户登陆168.68.73.123
q行#
cvs -d :pserver:yujiabo@168.68.73.122:/cvsroot/configuration login
123456Q输入的密码Q?/span>
出现错误Q?/span>2401 failed: No route to host
客户端连接不上,攑ּ服务器防火墙2401端口Q方法如下:
?/span>168.68.73.122?/span>root登陆后,q行#system-config-securitylevel
选择“定制”Q其它端口处输入Q?/span>2401Q然?#8220;定”讄?/span>
现在客户端可以连接了?/span>
Windows下的客户端Y?/span>WinCvs1.3配置如下Q?br />
CVSROOT
认证方式:pserver
路径:/cvsroot/configuration
用户?yujiabo
CVSROOT:yujiabo@168.68.73.122:/cvsroot/configuration
Mantis版本Q?1.1.0(RC2)
TestLink版本Q?.7.1
PHP版本Q?.2.5
MySQL版本Q?.0.22
需要修改TestLink的文Ӟlib\bugtracking\int_mantis.php
function getBugSummaryString($id)
{
if (!$this->isConnected())
return false;
//$this->m_dbConnection->aaa();
$this->m_dbConnection->exec_query("set names 'GB2312'"); //<-新增加的
$status = null;
// 20070302 - {$this->m_dbName}.mantis_bug_table -> mantis_bug_table
// Problems with MS-SQL
$query = "Select summary FROM mantis_bug_table Where id='" . $id."'";
$result = $this->m_dbConnection->exec_query($query);
if ($result)
{
$summary = $this->m_dbConnection->fetch_array($result);
// 20070302 - BUGID - on MS-SQL fetch_array() does not returns numeric indexes, then
// only choice is accessing my field name (IMHO better)
if ($summary)
$summary = iconv("GB2312",TL_TPL_CHARSET,$summary['summary']);//<-修改?/font>
else
$summary = null;
}
return $summary;
}
以便往后借鉴Q?/span>
Q 需求不E_Q从一开始,需求就没有完全定q,直到现在Q需求还在增加或变动?br />
感觉现在整个pȝ像在打补丁Q客户那q突然想起哪里缺了什么,p补什么,
不会֏pȝ架构Q这样子多多少会破坏之前搭建好的系l架构.
Q 我自q的错Q在实施q程中,发现某些需求有歧义Q但未反馈给客户认Q?br /> 自己下了l论Q按自己的想法做Q结果ƈ不是客户的意思.
Q q个是最烦h的,整个pȝ代码一个月多一点就全部完成Q但那时一直打电话要求客户那边协助试Q?br />
因ؓ客户的业务很复杂Q也有很多特例,pȝ哪里有问题,只要他们自己一用就会发现的Q可那时客户那边
没有专门负责q方面的人,一直都拖着Q直到现在他们没有怎么试Q就上线Q发现问题较多?/span>
apache_2.2.6-win32-x86-no_ssl.msi
mysql-5.0.22-win32_Setup.exe
bugzilla-3.0.2.tar.gz
bugzilla-bundle.zip
win下搭建bugzilla实太难了,因ؓ本来׃是ؓ工作在win下而设计的Qbugzilla也是在最q几个版本才加强了对win的支持?br />
我的环境?
ActivePerl-5.8.8.817-MSWin32-x86-257965.msi安装为F:\Perl目录
mysql-5.0.22-win32_Setup.exe安装为F:\MySQL
apache_2.2.6-win32-x86-no_ssl.msi安装为F:\Apache2目录
下面开始安?
1. 配置数据?br />
打开mysql的command line client
输入之前讄好的root密码Q?a onclick="javascript:tagshow(event, '%B4%B4%BD%A8');" href="javascript:;" target="_self">创徏数据库bugsQ用户bugsQ密码ؓI。ƈ赋予q个用户一定的权限。(因ؓbugzilla配置文g中默认是数据库bugsQ用户bugsQ密码ؓI,所以我们在q里讄好后往下进行就会较方便了。)
创徏数据库:
mysql>create database bugs;
创徏用户q赋予权限:
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,INDEX, ALTER,CREATE,DROP,REFERENCES,LOCK TABLES,CREATE TEMPORARY TABLES ON bugs.* TO bugs@localhost IDENTIFIED BY '';
h一下:
mysql> FLUSH PRIVILEGES;
mysql的设|就完成了?/p>
2 安装bugzilla
bugzilla 2.20.1文gҎ有文件全部拷贝到E:\php\bugzilla\下。在 开?〉程?〉运?中输入CMDQ进入E:\php\bugzilla目录下,q行
perl checksetup.pl 查bugzilla安装所需模块是否都已扑ֈQ默认情况下是需要安装许多模块的。bugzilla-bundle.zip解压~这个zip包,攑ֈE:\phpQ打开CMDQ定位到q里Q运行ppmQ在ppm>下依ơ输入ƈ回RQ?
install AppConfig.ppd
install DBI.ppd
install GD.ppd
install GDTextUtil.ppd
install MailTools.ppd
install PatchReader.ppd
install Template-Toolkit.ppd
install TimeDate.ppd
install Chart.ppd
install DBD-mysql.ppd
install GDGraph.ppd
install MIME-tools.ppd
卛_安装完所有模?br />
中间可能某一个模块会提示安装p|Q这时请安装完其他模块后再重新安装失败的模块
在安装之前失败的模块?请带上\径安装,如:
ppm intsall http://www.brides.org/perl/ppm/PerlMagick.ppd
ppm uninstall mod_perl 之前安装的mod_perl卸蝲Q?br />
׃版本不正,所以可能会报已l安装了mod_perlQ但q报mod_perl需要ppm install,
所以先卸蝲再用下面的命令重装一?br />
ppm install http://theoryx5.uwinnipeg.ca/ppm/mod_perl.ppd
ppm install http://trouchelle.com/ppm/Email-MIME-Creator.ppd安装q个时会报还有它的依赖包未安装,
q时qq个|址路径安装相应的依赖包之后Q再用以上命令安装这个包p了.
再从命o行到E:\php\bugzilla\下运?perl checksetup.plQ检查是否需要的模块都已l安装ƈ扑ֈ了。是的话则会在目录下生成一个localconfig文gQ这个文件是bugzillaq行时的配置文g。打开q个文g我们只需看一下用户名和密码那块是否和我们在mysql中设|的一样即可?/p>
再次q行 perl checksetup.pl 会生成bugzilla需要的模版和数据库中的表?/p>
输入exchange服务器(q个不要输入错误Q因为bugzilla以后很多的操作都是需要发送邮件的Q比如新Z个account后初始密码是发送到你的邮箱里的Q。接着会让你输入管理员的邮地址Q名字,密码
认输入后即完成bugzilla的安装了?/p>
再次输入perl checksetup.pl 认数据库已l连接正常。修改E:\php:\bugzilla\目录下所有cgi,pl文gQ将执行文g最前面?#路径Ҏperl .exe的\径?/span>