﻿<?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>IT博客-宇通-随笔分类-J2ee -struts</title><link>http://www.cnitblog.com/woo/category/279.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 02 Oct 2011 14:47:43 GMT</lastBuildDate><pubDate>Sun, 02 Oct 2011 14:47:43 GMT</pubDate><ttl>60</ttl><item><title>网页图片快速露脸六法</title><link>http://www.cnitblog.com/woo/archive/2005/12/01/5052.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Thu, 01 Dec 2005 11:39:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/12/01/5052.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/5052.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/12/01/5052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/5052.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/5052.html</trackback:ping><description><![CDATA[　网页设计者应该怎么做，才能让图片尺寸小一点，网页下载速度快一点，而又不牺牲掉美丽的图像呢？在这里笔者根据个人心得，建议你：<BR><BR>■<B>控制图片的尺寸</B><BR>　　最直接的办法是尽量避免大尺寸的图片，而多采用轻薄短小的导航按钮、装饰图形、Logo。<BR><BR>　　■<B>控制图片的用色数量</B><BR>　　图片内色彩数量愈多，文件尺寸就愈大，所以尽可能多用平板（非渐层）的色彩，以利于压缩，尽可能少用显示得过分精细的图形。细腻的光影、渐层、肌理纹路的显示，均会耗用大量的色彩，使得GIF尺寸增大。而如果你选用JPEG格式，就得考虑加上解压所需时间，这是否反而使得图片显示得更慢？<BR><BR>　　■<B>适当地运用 GIF和JPEG图片格式</B><BR>　　了解GIF与JPEG格式各自擅长处理何种材质的图形，可让你灵活地运用GIF与JPEG格式，获得一个尺寸经济并且画质优美传神的图片。<BR><BR>　　■<B>尽可能多采用GIF图片格式</B><BR>　　JPEG的文件尺寸或许小，然而一旦加上解压缩所需的时间，则未必比GIF图片显示得快。尤其是应用在较小的图片上，如：按钮、小圆球、小logo等。<BR><BR>　　■<B>在原始文件里标注图片的长度与宽度</B><BR>　　在原始文件里标注图片的长度与宽度，可以帮助浏览器迅速、准确地对网页的版面进行安排，避免浏览器在显示图片的过程中重新调整、配置网页的版面。<BR>　　图片长宽度的标注方法为：&lt;img src=″url″ width=″x″ height=″y″ &gt; ，其中的 ″x″, ″y″ 表示图档的长宽各为多少像素（pixels）。<BR><BR>　　■<B>为较大的图片先暂时提供一个略小或略粗糙的低解像度的low source图片</B><BR>　　如果你打算将一个较大的图片放上网页的话，不妨先提供一个解像度略差或长宽度略小的图片当做 low source，使得浏览器可以先快速地展现出这个low source图片，然后再渐渐地以高画质或较大图片取代之。<BR>　　在原始文件时标注 low source的方法为：<BR>　　&lt;img src=″url″ lowsrc=″url″ width=″x″ height=″y″ &gt;<BR>　　特值得注意的是：其中的width=″x″ height=″y″ 是指img src 的长宽度，并非 lowsrc的长宽度。如果你不加上width=″x″ height=″y″ 的标示，浏览器将一律视为以较小图片作为长宽尺寸。<BR><A href="http://www.5tb.com/index.asp?classid=6&amp;Nclassid=16">http://www.5tb.com/index.asp?classid=6&amp;Nclassid=16</A><BR><img src ="http://www.cnitblog.com/woo/aggbug/5052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-12-01 19:39 <a href="http://www.cnitblog.com/woo/archive/2005/12/01/5052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写跨浏览器的DHTML应用程序</title><link>http://www.cnitblog.com/woo/archive/2005/12/01/5051.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Thu, 01 Dec 2005 11:32:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/12/01/5051.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/5051.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/12/01/5051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/5051.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/5051.html</trackback:ping><description><![CDATA[本文介绍了IE和Navigator两种浏览器对DHTML标准实现的差异，特别是如何编写Navigator中运行的DHTML程序。<BR><BR>　　DHTML(Dynamic HTML)是W3C组织提出的一种新的规范，它对原有的HTML做了许多扩充，并结合Javascript，使得静态的HTML页面产生了许多动态效果，例如菜单的展开和收起，页面元素的外观动态改变等。IE 4.0以上，Navigator 4.0以上的版本都支持这个标准。但是，不同的浏览器厂家对它都做了不同程度的扩充。以最流行IE的和NS为例，IE的实现更接近于W3C的方案，而NS，说实话，与W3C的方案差异很大，而且并没有完全实现，甚至可以说是另一套方案。笔者在初识DHTML时，按照书上讲的编写了几个小程序，在IE上一试就通，而在NS上可以说费尽了周折才逐渐找到解决方案。由于市面上很少有讲述NS的DHTML实现方案的书(大概NS由于的实现不符合标准)，而真正的商业网站至少应同时支持IE和NS这两种主要的浏览器，我愿意把我的一些心得写出来与大家共享，使大家不必再走我走过的弯路。对于二者的实现相同的部分，本文作一简略介绍，您若有兴趣可参考有关书籍或网上资源。<BR><BR>　　DHTML实际上由三两部分组成：CSS(Cascade Style Sheet，级联样式表)，层(Layer)和Javascript。<BR><BR>　　所谓CSS，概念上类似于C++中的类，在类定义中指明元素的外观样式，如字体，颜色，大小等等，页面中的任何一个HTML元素如被指定属于这个类，就自动拥有该类的特性；还可以为某种HTML元素定义样式，这样页面中的所有这种元素都有了同样的外观。如果将这样的样式定义存在一个单独的.css文件中(就象C++那样将类定义存在 .h文件中)，再在页面中将其包含进来，则一个网站的所有页面就有了同样的外观。IE和NS对CSS的实现基本相同，在此就不再详细介绍了。<BR><BR>　　两者的差异主要体现在层的实现上。所谓层，就是页面上的一块区域，其中可以包含任何的HTML元素，通过改变层的属性，其间的元素可以跟着出现，消失，更改，移动等。 在IE中，层依靠&lt;DIV&gt;&lt;/DIV&gt;和&lt;SPAN&gt;&lt;/SPAN&gt;来实现，两者基本相同，通常&lt;DIV&gt;用于较大的层，&lt;SPAN&gt;用于较小的层，并且&lt;DIV&gt;在实现的层后面加上一个回车换行，而&lt;SPAN&gt;不加。它的语法如下(二者相同)：<BR><BR>　　&lt;div id=layername style="style definition"&gt;Layer content&lt;/div&gt; 或<BR><BR>　　&lt;div id=layername class="classname"&gt;Layer content&lt;/div&gt;<BR><BR>　　其中style definition是一组有分号隔开的样式定义，常用的有以下几种：<BR><BR>　　position：其值可以为absolute和relative，所谓absolute(绝对定位)，就是层的内容不必按照出现的先后次序在浏览器上依次排列，而是可以像素为单位定位到浏览器用户区域的任意位置；而relative(相对定位)则是层按照相邻的内容依次排列。<BR><BR>　　left，top，width，height：指层的左上角坐标以及它的宽度和高度。<BR><BR>　　z-index：由于层可以被放置在页面的任何位置，当它与其它内容重合时，z-index值大的显示在上面，所有层的z-index值为1。但是在NS中，所有的表单元素(文本框，列表框，按钮等)，只要是可见的就无法被遮住，而无论z-index值是多少。因此在设计页面时，要注意不要使动态出现或隐藏的元素(例如弹出式菜单)的位置上放置表单元素。<BR><BR>　　Visibility：指明层是否可见，通过在程序中动态改变这个值，可以实现层的出现和消失，比如下拉菜单就要依靠它来实现。它的三个候选值为：inherit，可见性与父元素的可见性相同；visible，可见(在NS中是show)；hidden，不可见(在NS中是hide)。<BR><BR>　　NS同样支持这两个标记，但是支持得很不好，经常出现一些莫名其妙的错误，我想这可能是出于策略上的考虑，而不见得是NS的产品质量不好。NS引入了另两个标记，&lt;layer&gt;和&lt;ilayer&gt;，&lt;layer&gt;用于绝对定位，&lt;ilayer&gt;用于相对定位，因此在这两个标记的样式定义中没有position属性。<BR><BR>　　两个浏览器对层的不同实现体现在以下几点：<BR><BR>　　1. 层的引用。在IE中，页面上的每个可编程元素(不仅是层，还包括其它任何指明了ID值的元素，详见下文)都是document.all集合的一项；而在NS中，页面中每个层，无论是用上面四个标记中的哪个定义的，也无论是绝对或是相对定位，都是document.layers集合的一项。因此，若想引用名为layer1的层，应以如下语法：<BR><BR>　　IE：document.all["layer1"]或document.all.layer1<BR><BR>　　NS：document.layers["layer1"]或document.layers.layer1<BR><BR>　　2. 层的坐标和大小。在IE中，每个涉及层的外观的属性，如位置，大小，颜色等，都是层的style属性集合的以一项，如层的左上角x坐标为document.all.layer1.style.pixelLeft，y坐标为　　document.all.layer1.style.pixelTop，宽度为document.all.layer1.style.pixelWidth，高度为document.all.layer1.style.pixelHeight。还有几组属性如scrollxxx，offsetxxx，clientxxx，其中xxx为Left，Top，Width，Height ，分别描述层的滚动，位移，客户区等属性，详见MSDN中关于坐标的描述。而在NS中，每个层都有一个clip属性集，x，y，width，height是这个集的集合元素。<BR><BR>　　另外，IE中所有元素拥有同一个坐标系，无论它位于层外或层内；在NS中，每个层都有一个独立的坐标系。<BR><BR>　　3. 层的内容。IE中的层包含innerHTML和outerHTML属性(由于并非描述层的外观，所以它们不是style属性集的元素，而是层的属性)，其含义如下：<BR><BR>　　innerHTML：层中的HTML代码，但是不包括层的定义。<BR><BR>　　outerHTML：层中的HTML代码，且包括层的定义。<BR><BR>　　改变这些属性值就可以改变层的内容，如下语句改变层layer1的内容为加粗的字符串"layer1"：document.all.layer1.innerHTML=”&lt;b&gt;layer1&lt;/b&gt;” ，而在NS中，每一个document.layers集合中的元素，即一个层，都NS被视为一个独立的窗口，有独立document属性，就象Javascript中的document属性一样，通过调用document.write函数，可以动态改变层的内容。上例在NS中应修改为：<BR><BR>　　document.layers.layer1.document.open();<BR><BR>　　doucment.layers.layer1.write("&lt;div&gt;&lt;b&gt;layer1&lt;/b&gt;&lt;/div&gt;");<BR><BR>　　document.layers.layer1.document.close;<BR><BR>　　同样，对于层中的其它可编程元素，例如图象，其引用语法如下：document.layers.layer1.document.images[imgname]，而如果该图象位于层的外面，其语法应为document.images[imgname]，而在IE中，无论图象位于层内或层外，其语法都是后者。<BR><BR>　　Javascript是Netscape公司首先提出的一种客户端编程的脚本语言，随后有扩展到服务器端。它的语法和概念都类似于C++，但是没有C++那样严格。IE同样支持客户端Javascript(微软还推出了类似的，功能更强大的Vbscript，但是NS却不支持)。两种浏览器对Javascript的基本实现是一样的，但是又都对它做了许多不同的扩展，而在DHTML编程中，很多情况下都需要用到这些扩展。由于此时已经没有标准可遵循，二者已经看不出有相同之处。例如，浏览器的客户区的宽度，在IE中是document.body.clientWidth，在NS中是window.innerWidth；再比如你想知道用户按浏览器的滚动条滚动了多少像素，在IE中是document.body.scrollTop，在NS中是window.pageYOffset。在这种情况下，你只能查阅二者的文档。IE的Javascript文档包含在MSDN中，也可以到微软的站点上单独下载。NS的Javascript文档可以到 http://developer.netscape.com上下载，那里也能得到NS的DHTML文档。<BR><BR>　　NS没有实现的功能。 <BR><BR>　　1.IE中，页面中的任何元素都是可编程的，只要赋予它ID属性，其语法如下：<BR><BR>　　&lt;div id=itemid&gt;content&lt;/div&gt;或&lt;span id=itemid&gt;content&lt;/span&gt;<BR><BR>　　而在NS中，除非元素位于层中，否则无法对它编程。<BR><BR>　　2.IE中增添了元素的渐变(Transition)和滤镜(Filter)效果，NS中没有。<BR><BR>　　3.IE中支持客户端的数据绑定(Data bind)，即页面中的某个元素(例如表格中的一个格)可以与服务器端的数据库的某个字段绑定，在数据内容不变的情况下，可以不必再次访问数据库而改变页面的形式(例如按某个字段重新排序)。NS同样没有实现这种特性。<BR><BR>　　以上列举了二者的如此之多的差别，那我们如何编写跨浏览器的DHTML页面呢？一种方法是编写两个独立的页面，而在入口文件中根据浏览器的不同而重定向到不同的页面，如：<BR><BR>　　&lt;HTML&gt;&lt;BODY&gt;<BR><BR>　　&lt;Script Language="Javascript"&gt;<BR><BR>　　isNS=(navigator.appName=="Netscape");<BR><BR>　　if (isNS)<BR><BR>　　 window.location="ns.html";<BR><BR>　　else<BR><BR>　　 window.location="ie.html";<BR><BR>　　&lt;/Script&gt;<BR><BR>　　&lt;/BODY&gt;&lt;/HTML&gt;<BR><BR>　　这种方法简单，页面整洁，缺点是有很大冗余，毕竟一个页面中程序是少量的，大部分静态内容在两个浏览器中并没有区别，一旦静态的内容发生改变必须在两个页面中一起更改，而且当包含DHTML的页面增多时，每一个页面都需要三个页面来实现，增大了维护的负担。<BR><BR>　　另一种方法是在同一个页面中集成两个浏览器的代码。在每一个实现特定功能的函数中都根据浏览器的不同分别写代码，如：<BR><BR>　　&lt;HTML&gt;&lt;BODY&gt;<BR><BR>　　&lt;Script Language="Javascript"&gt;<BR><BR>　　isNS=(navigator.appName=="Netscape");<BR><BR>　　function fun1(){<BR><BR>　　if (isNS)<BR><BR>　　 //NS codes here<BR><BR>　　else<BR><BR>　　 //IE codes here<BR><BR>　　}<BR><BR>　　&lt;/Script&gt;<BR><BR>　　&lt;/BODY&gt;&lt;/HTML&gt;<BR><BR>　　对于HTML代码也不同的部分，可以利用Javascript函数 document.writeln()来实现，例如对于层的定义，可以如下实现：<BR><BR>　　&lt;Script Language="Javascript"&gt;<BR><BR>　　 if(isNS)<BR><BR>　　 document.writeln("&lt;layer id=\"layer1\" left=20 top=30 width=40 height=50 z-index=2&gt;");<BR><BR>　　 else<BR><BR>　　 document.writeln("&lt;div id=\"layer1\" style=\"position:absolute;left:20;top:30;width:40;height:50;z-index:2\"&gt;");<BR><BR>　　&lt;/Script&gt;<BR><BR>　　Layer content here<BR><BR>　　&lt;Script Language="Javascript"&gt;<BR><BR>　　 if(isNS)<BR><BR>　　 document.writeln("&lt;/layer&gt;");<BR><BR>　　 else<BR><BR>　　 document.writeln("&lt;/div&gt;");<BR><BR>　　&lt;/Script&gt;<BR><BR>　　这种实现方法维护简单，缺点是失去了页面编辑器所见即所得的特性(因为只有到运行时才能将层的定义写入浏览器，在编辑阶段它们只是些Javascript程序)，调整层的坐标和大小都比较困难。在实际编程中可以先按一种浏览器的定义写，待调整完毕后再将它转成另一种定义。但总的来说，这种办法适合对HTML标准比较熟悉的开发人员。<BR><A href="http://www.5tb.com/"><STRONG>【网路文摘】</STRONG></A>→网络文摘→网络技术<BR><A href="http://www.5tb.com/list.asp?id=683">http://www.5tb.com/list.asp?id=683</A><img src ="http://www.cnitblog.com/woo/aggbug/5051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-12-01 19:32 <a href="http://www.cnitblog.com/woo/archive/2005/12/01/5051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>值得关注的持久化技术： hibernate </title><link>http://www.cnitblog.com/woo/archive/2005/08/16/2125.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Tue, 16 Aug 2005 02:10:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/08/16/2125.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/2125.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/08/16/2125.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/2125.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/2125.html</trackback:ping><description><![CDATA[<P align=center><B><FONT size=2>值得关注的持久化技术： hibernate </FONT></B></P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家都是怎样持久化数据的呢？ejb(cmp)? jdo? jdbc+sql?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=2>这里我要向大家推举另一个值得关注的对象-关系映射框架hibernate,它是sourceforge.net的一个子项目，</FONT></P>
<P><FONT size=2>本文旨在用例子给出大概轮廓(很省时间)，具体请参考其自带的优秀文档。</FONT></P>
<P><SPAN class=artTitle><FONT face=仿宋_GB2312 size=2>参考:一群牛人关于jdo和ejb的讨论：<A href="http://www.infoworld.com/article/03/03/25/HNentity_1.html">Java object models debated</A> 其中也提到了此开源项目。</FONT></SPAN></P>
<UL>
<LI><SPAN class=artTitle><A href="http://www.huihoo.com/java/hibernate/index.htm#1.简述："><FONT face=宋体 size=2>简述</FONT></A></SPAN> 
<LI><SPAN class=artTitle><A href="http://www.huihoo.com/java/hibernate/index.htm#2.一个简单的例子"><FONT face=宋体 size=2>第一次亲密接触：一个简单的例子</FONT></A></SPAN> 
<LI><SPAN class=artTitle><A href="http://www.huihoo.com/java/hibernate/index.htm#复杂关系例子"><FONT face=宋体 size=2>复杂关系例子</FONT></A></SPAN> </LI></UL>
<P><SPAN class=artTitle><A name=1.简述：><B><FONT face=宋体 color=#ff0000 size=2>1.简述：</FONT></B></A></SPAN></P>
<P><SPAN class=artTitle><FONT face=宋体 size=2>&nbsp;&nbsp;&nbsp; 学习一项新的技术要花时间的，它会不会把时间在使用它之后补回来是应该关注的问题：</FONT></SPAN></P>
<P><FONT size=2>我们可以用关键字:"jdo ejb cmp hibernate"在google上找一找对他们的评论文章，其中只要使用</FONT></P>
<P><FONT size=2>过hibernate的人都对它很推崇(我也是).</FONT></P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp; 我们的对象模型可以被hibernate很好的利用，下图中的Persistent Object是简单的业务实体对象</FONT></P>
<P><FONT size=2>(要被持久化的对象)。通过hibernate被透明的持久化到数据库中。下面的例子会说明一切。</FONT></P>
<P><FONT size=2><IMG height=380 src="http://www.huihoo.com/java/hibernate/images/overview.gif" width=340 align=center></FONT></P>
<P><A name=2.一个简单的例子><B><FONT color=#ff0000 size=2>2.</FONT></B></A><FONT color=#ff0000 size=2><B><A name=2.一个简单的例子><SPAN class=artTitle><FONT face=宋体>一个简单的例子</FONT></SPAN></A></B></FONT></P>
<P><SPAN class=artTitle><FONT face=宋体 size=2>我们开发一个Person类：</FONT></SPAN></P>
<P><FONT size=2><IMG height=155 src="http://www.huihoo.com/java/hibernate/images/Person.jpg" width=239 border=1></FONT></P>
<P><FONT size=2>可以想象数据表是下面的样子：</FONT></P>
<P><FONT size=2>表person</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=1 cellSpacing=0 cellPadding=0 width="80%" border=2>
<TBODY>
<TR>
<TD width="33%"><FONT size=2>id(primary key)</FONT></TD>
<TD width="33%"><FONT size=2>name</FONT></TD>
<TD width="34%"><FONT size=2>address</FONT></TD></TR>
<TR>
<TD width="33%"><FONT size=2>000000001</FONT></TD>
<TD width="33%"><FONT size=2>陈鹏</FONT></TD>
<TD width="34%"><FONT size=2>西安</FONT></TD></TR>
<TR>
<TD width="33%"><FONT size=2>...</FONT></TD>
<TD width="33%"><FONT size=2>　</FONT></TD>
<TD width="34%">　</TD></TR></TBODY></TABLE>
<P><FONT size=2><B>要通过hibernate实现它要经过以下步骤：</B></FONT></P>
<P><FONT size=2><B>&nbsp;&nbsp;&nbsp; 主要是先根据对象模型编写简单的业务实体类(简单的bean规范类,即有get,set方法的类,可以用<A href="http://jac.aopsys.com/">jac</A>等工具生成)，</B></FONT></P>
<P><FONT size=2><B>再用xml映射文件描述其映射数据库的方式(很easy)，最后就可以通过很少的hibernate api写测试类对其进行持久化</B></FONT></P>
<P><FONT size=2><B>操作。</B></FONT></P>
<P><FONT size=2>2.1 写Person类(Persistent Object),它和普通的类没甚末不同，但注意它应该复合bean的规范，为每个属性提供get,set方法：</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=165 cellSpacing=0 cellPadding=0 width="97%" border=2>
<TBODY>
<TR>
<TD width="100%" bgColor=#c0c0c0 height=16><FONT size=2>h.Person</FONT></TD></TR>
<TR>
<TD width="100%" height=145><PRE>//
// WARNING: this file has been automatically generated by JAC
// DO NOT MODIFY unless you know what you are doing
//

package h;

public class Person {

    String name;

/**
Sets the value of field name.
@param name value of field name
*/

    public void setName(String value) {
        this.name=value;
    }

/**
Gets the value of field name.
@return value of field name
*/

    public String getName() {
        return name;
    }

    String address;

/**
Sets the value of field address.
@param address value of field address
*/

    public void setAddress(String value) {
        this.address=value;
    }

/**
Gets the value of field address.
@return value of field address
*/

    public String getAddress() {
        return address;
    }

    String id;

/**
Sets the value of field id.
@param id value of field id
*/

    public void setId(String value) {
        this.id=value;
    }

/**
Gets the value of field id.
@return value of field id
*/

    public String getId() {
        return id;
    }
}</PRE>
<P>　 </P></TD></TR></TBODY></TABLE>
<P><FONT size=2>2.2 填写对象-关系映射xml文件，不用担心它的复杂程度，我们可以抄嘛：</FONT></P>
<P><FONT size=2>和所有o-r 映射工具一样都要写这种映射文件。</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=165 cellSpacing=0 cellPadding=0 width="97%" border=2>
<TBODY>
<TR>
<TD width="100%" bgColor=#c0c0c0 height=16><FONT size=2>Person.hbm.xml 建议命名为:"类名"+"hbm.xml" 并且放置在Person类相同包目录下</FONT></TD></TR>
<TR>
<TD width="100%" height=145><PRE>&lt;?xml version="1.0" encoding="GB2312"?&gt;
&lt;!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" &gt;
&lt;hibernate-mapping&gt;

	&lt;class name="h.Person"&gt;
	    &lt;!--hibernate为我们生成主键id--&gt;
		&lt;id name = "id" unsaved-value = "null"&gt;
			&lt;generator class="uuid.hex"/&gt;
		&lt;/id&gt;
		
	    &lt;!--默认把类的变量映射为相同名字的表列，当然我们可以修改其映射方式--&gt;
		&lt;property name="name"/&gt;
		&lt;property name="address"/&gt;
	&lt;/class&gt;
&lt;/hibernate-mapping&gt;</PRE>　 </TD></TR></TBODY></TABLE>
<P><FONT size=2>2.3 TestPerson 我们用hibernate api来进行持久化Person</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=165 cellSpacing=0 cellPadding=0 width="97%" border=2>
<TBODY>
<TR>
<TD width="100%" bgColor=#c0c0c0 height=16><FONT size=2>h.TestPerson&nbsp;</FONT></TD></TR>
<TR>
<TD width="100%" height=145><PRE>package h;

import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;

class TestPerson{ 

	private static SessionFactory sessions;

    public static void main(String[] args) throws Exception{        	
    	//配置环境，分析xml映射文件
    	Configuration conf= new Configuration()
			.addClass(Person.class);
        
        //生成并输出sql到文件（当前目录）和数据库
        SchemaExport dbExport=new SchemaExport(conf);
        dbExport.setOutputFile("build\\sql.txt");
        dbExport.create(true, true);
 
		sessions = conf.buildSessionFactory();
        //以上都是些固定格式的环境配置
        
        //start......
        Session s = sessions.openSession();
		Transaction t =  s.beginTransaction();
	    
        //1.用普通使用方式建立对象，填充数据
	    Person p1=new Person();
	    p1.setName("陈鹏");
	    p1.setAddress("西安东郊黄陵");
	    
	    //2.持久化
	    s.save(p1);
		//此时p1已经可以在数据库中找到

	    t.commit();
	    s.close();
    }
}</PRE>
<P>　 </P></TD></TR></TBODY></TABLE>
<P><FONT size=2>2.4 为了运行当然要配置数据库：我以mysql数据库为例子：(只用劳动1次即可)</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=165 cellSpacing=0 cellPadding=0 width="97%" border=2>
<TBODY>
<TR>
<TD width="100%" bgColor=#c0c0c0 height=16><FONT size=2>hibernate.properties 在hibernate源程序的根目录可以找到此文件模板，copy到我们的类的根目录。即：“..\h”</FONT></TD></TR>
<TR>
<TD width="100%" height=145><PRE>## MySQL
## 前两行人家都给你填好了，只用填数据库连接和username,password</PRE><PRE>hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate.connection.url jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=GBK
hibernate.connection.username root
hibernate.connection.password </PRE></TD></TR></TBODY></TABLE>
<P><FONT size=2>2.5 运行TestPerson类,在mysql中观察create好的表person和其中的数据</FONT></P>
<P><FONT size=2>ok!整个过程主要的是前3步:<B>写bean类(Persistent Object)，写o-r映射文件,写存取测试类。</B></FONT></P>
<P><SPAN class=artTitle><B><FONT face=宋体 color=#ff0000 size=2>3. <A name=复杂关系例子>复杂关系例子</A></FONT></B></SPAN></P>
<P><SPAN class=artTitle><B><FONT face=宋体 size=2>我们换一个稍微复杂的例子来看看：</FONT></B></SPAN></P>
<P><FONT size=2><IMG height=270 src="http://www.huihoo.com/java/hibernate/images/Person-Company.jpg" width=243 border=1></FONT></P>
<P><FONT size=2>可以想象数据表是下面的样子：</FONT></P>
<P><FONT size=2>表person</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=1 cellSpacing=0 cellPadding=0 width="80%" border=2>
<TBODY>
<TR>
<TD width="33%"><FONT size=2>id(primary key)</FONT></TD>
<TD width="33%"><FONT size=2>company_id</FONT></TD>
<TD width="33%"><FONT size=2>name</FONT></TD>
<TD width="34%"><FONT size=2>address</FONT></TD></TR>
<TR>
<TD width="33%"><FONT size=2>000000001</FONT></TD>
<TD width="33%"><FONT size=2>000000002</FONT></TD>
<TD width="33%"><FONT size=2>陈鹏</FONT></TD>
<TD width="34%"><FONT size=2>西安</FONT></TD></TR>
<TR>
<TD width="33%">　</TD>
<TD width="33%">　</TD>
<TD width="33%">　</TD>
<TD width="34%">　</TD></TR></TBODY></TABLE>
<P><FONT size=2>表Company</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=1 cellSpacing=0 cellPadding=0 width="47%" border=2>
<TBODY>
<TR>
<TD width="33%"><FONT size=2>id(primary key)</FONT></TD>
<TD width="33%"><FONT size=2>name</FONT></TD></TR>
<TR>
<TD width="33%"><FONT size=2>000000002</FONT></TD>
<TD width="33%"><FONT size=2>东软</FONT></TD></TR>
<TR>
<TD width="33%"><FONT size=2>...</FONT></TD>
<TD width="33%"><FONT size=2>　</FONT></TD></TR></TBODY></TABLE>
<P>　</P>
<P><FONT size=2>3.1 Person(已有),Company类:Persistent Object</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=87 cellSpacing=0 cellPadding=0 width="97%" border=2>
<TBODY>
<TR>
<TD width="100%" bgColor=#c0c0c0 height=1><FONT size=2>h.Company</FONT></TD></TR>
<TR>
<TD width="100%" height=85><PRE>package h;</PRE><PRE>public class Company {</PRE><PRE>    String id;
    public void setId(String value) {
        this.id=value;
    }
    public String getId() {
        return id;
    }</PRE><PRE>    String name;
    public void setName(String value) {
        this.name=value;
    }
    public String getName() {
        return name;
    }</PRE><PRE>    java.util.List employees=new java.util.Vector();
    public void setEmployees(java.util.List value) {
        this.employees=value;
    }
    public java.util.List getEmployees() {
        return employees;
    }
    public void addEmployee(h.Person value) {
        employees.add(value);
    }
    public void removeEmployee(h.Person value) {
        employees.remove(value);
    }
    public void clearEmployees() {
        employees.clear();
    }
}</PRE>　 </TD></TR></TBODY></TABLE>
<P><FONT size=2>3.2 填写对象-关系映射xml文件,Person.hbm.xml照旧</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=87 cellSpacing=0 cellPadding=0 width="97%" border=2>
<TBODY>
<TR>
<TD width="100%" bgColor=#c0c0c0 height=1><FONT size=2>Company.hbm.xml 也放到h.Company类相同目录下</FONT></TD></TR>
<TR>
<TD width="100%" height=85><PRE>&lt;?xml version="1.0" encoding="GB2312"?&gt;
&lt;!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" &gt;
&lt;hibernate-mapping&gt;</PRE><PRE>	&lt;class name="h.Company"&gt;
	    &lt;!--hibernate为我们生成主键id--&gt;
		&lt;id name = "id" unsaved-value = "null"&gt;
			&lt;generator class="uuid.hex"/&gt;
		&lt;/id&gt;
		</PRE><PRE>        &lt;property name="name"/&gt;</PRE><PRE>	    &lt;!--1:n关系的映射--&gt;
	    &lt;list name="employees" cascade="all"&gt;
            &lt;key column="company_id"/&gt;
            &lt;index column="posn"/&gt;
            &lt;one-to-many class="h.Person"/&gt;
        &lt;/list&gt;
	&lt;/class&gt;
&lt;/hibernate-mapping&gt;</PRE>　 </TD></TR></TBODY></TABLE>
<P><FONT size=2>3.3 TestCompany 我们用hibernate api来进行持久化Person,Company</FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#000000 height=165 cellSpacing=0 cellPadding=0 width="97%" border=2>
<TBODY>
<TR>
<TD width="100%" bgColor=#c0c0c0 height=16><FONT size=2>h.TestCompany</FONT></TD></TR>
<TR>
<TD width="100%" height=145><PRE>package h;

import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;

class TestCompany{ 

	private static SessionFactory sessions;

    public static void main(String[] args) throws Exception{        	
    	//配置环境，分析xml映射文件
    	Configuration conf= new Configuration()
			.addClass(Person.class)
			.addClass(Company.class);
        
        //生成并输出sql到文件（当前目录）和数据库
        SchemaExport dbExport=new SchemaExport(conf);
        dbExport.setOutputFile("build\\sql.txt");
        dbExport.create(true, true);
 
		sessions = conf.buildSessionFactory();
        //以上都是些固定格式的环境配置
        
        //start......
        Session s = sessions.openSession();
		Transaction t = s.beginTransaction();
	    
	    //1.用普通方式建立对象，填充数据
	    Company c=new Company();
	    c.setName("东软");
	    
	    Person p1=new Person();
	    p1.setName("陈鹏");
	    p1.setAddress("西安东郊黄陵");

	    Person p2=new Person();
	    p2.setName("孙昱鹏");
	    p2.setAddress("南郊电子城");
	    
	    c.addEmployee(p1);
	    c.addEmployee(p2);
	    
	    //2.持久化
	    s.save(c);
		//此时c,p1,p2已经可以在数据库中找到
  
	    t.commit();
	    s.close();
    }
}</PRE>
<P>　 </P></TD></TR></TBODY></TABLE>
<P><FONT size=2>3.4 不用再配置数据库了。</FONT></P>
<P><FONT size=2>3.5 运行TestCompany类,在mysql中观察create好的表person和Company其中的数据.</FONT></P>
<P><FONT color=#ff0000 size=2><B>总结：</B></FONT></P>
<P><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里只展现了极为简单的2个持久化例子，更多的1:1,1:n,m:n等的对象模型的实现请看hibernate附带的文档，</FONT></P>
<P><FONT size=2>越是复杂的模型越能体现其威力。&nbsp; 使用hibernate,jdo,ejb这样的对象-关系映射中间件的好处是显而易见的，</FONT></P>
<P><FONT size=2>还在刻苦写sql+jdbc的同志们该歇歇了，我是辛苦够了！(你不会自己去构建这样的中间件吧，厉害！)</FONT></P>
<P><FONT color=#ff0000 size=2><B>例子下载：</B></FONT></P>
<P style="MARGIN-LEFT: 30px"><FONT size=2><A href="http://www.huihoo.com/java/hibernate/src/1.rar">Person类的例子</A></FONT></P>
<P style="MARGIN-LEFT: 30px"><FONT size=2><A href="http://www.huihoo.com/java/hibernate/src/2.rar">Person-Company的例子</A></FONT></P>
<P style="MARGIN-LEFT: 30px"><FONT size=2>2个例子都需要hibernate的lib,请自行下载<A href="http://sourceforge.net/projects/hibernate/">hibernate</A>。</FONT></P>
<P><FONT color=#ff0000 size=2><B>参考连接：</B></FONT></P>
<P style="MARGIN-LEFT: 30px"><FONT size=2><B><A href="http://www.theserverside.com/home/thread.jsp?thread_id=18161&amp;article_count=8"><FONT face="Verdana, Arial, Helvetica, sans-serif">xPetstore 3.0 </FONT></A></B>应用hibernate的一个完整的例子.</FONT></P>
<P style="MARGIN-LEFT: 30px"><FONT size=2>异常活跃的<A href="http://sourceforge.net/projects/hibernate/">hibernate</A>。</FONT></P>
<P style="MARGIN-LEFT: 30px"><FONT size=2>mysql:<A href="http://www.mysql.com/">http://www.mysql.com/</A></FONT></P>
<P style="MARGIN-LEFT: 30px"><FONT size=2>mysql的一个很简单好用的图形客户端：<A href="http://www.mysqlstudio.com/">http://www.mysqlstudio.com/</A></FONT></P>
<P style="MARGIN-LEFT: 30px"><FONT size=2><A href="http://www.huihoo.com/java/hello-jdo/index.html">我的另一篇介绍jdo的文章</A><BR><BR><BR><BR>引文 <A href="http://www.huihoo.com/java/hibernate/index.htm">http://www.huihoo.com/java/hibernate/index.htm</A></P>
<P class=MsoNormal><FONT size=2>陈鹏，东软西安公司。作为一名狂热的程序员希望每一天都能成长进步，并希望与大家分享快乐和知识。<BR>请用以下方式和他联系：email <A href="mailto:chen56@msn.com">chen56@msn.com</A> &nbsp;</FONT></P></FONT><img src ="http://www.cnitblog.com/woo/aggbug/2125.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-08-16 10:10 <a href="http://www.cnitblog.com/woo/archive/2005/08/16/2125.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CVS的常用命令速查手册</title><link>http://www.cnitblog.com/woo/archive/2005/08/16/2124.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Tue, 16 Aug 2005 02:07:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/08/16/2124.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/2124.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/08/16/2124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/2124.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/2124.html</trackback:ping><description><![CDATA[<P>概述：CVS是一个C/S系统，多个开发人员通过一个中心版本控制系统来记录文件版本，从而达到保证文件同步的目的。 </P>
<P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CVS服务器（文件版本库）<BR>&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<BR>（版 本 同 步）<BR>&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \&nbsp;&nbsp;<BR>开发者1&nbsp; 开发者2&nbsp;&nbsp; 开发者3 </P>
<P>以下是本文主要内容：开发人员可以主要挑选2, 6看就可以了，CVS的管理员则更需要懂的更多一些 </P>
<OL>
<LI><A href="http://www.lslnet.com/linux/docs/linux-3874.htm#init" rel=nofollow>CVS环境初始化</A>：CVS环境的搭建&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 管理员 
<LI><A href="http://www.lslnet.com/linux/docs/linux-3874.htm#daily" rel=nofollow>CVS的日常使用</A>：日常开发中最常用的CVS命令，&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开发人员&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 管理员 
<LI><A href="http://www.lslnet.com/linux/docs/linux-3874.htm#branch" rel=nofollow>CVS的分支开发</A>：项目按照不同进度和目标并发进行&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 管理员 
<LI><A href="http://www.lslnet.com/linux/docs/linux-3874.htm#ssh" rel=nofollow>CVS的用户认证</A>：通过SSH的远程用户认证，安全，简单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 管理员 
<LI><A href="http://www.lslnet.com/linux/docs/linux-3874.htm#cvsweb" rel=nofollow>CVSWEB</A>：CVS的WEB访问界面大大提高代码版本比较的效率&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 管理员 
<LI><A href="http://www.lslnet.com/linux/docs/linux-3874.htm#tag" rel=nofollow>CVS TAG</A>：将$Id$加入代码注释中，方便开发过程的跟踪&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开发人员 
<LI><A href="http://www.lslnet.com/linux/docs/linux-3874.htm#vss" rel=nofollow>CVS vs VSS</A>: CVS和Virsual SourceSafe的比较 </LI></OL>
<P>一个系统20%的功能往往能够满足80%的需求，CVS也不例外，以下是CVS最常用的功能，可能用到的还不到它全部命令选项的10%，更多的功能请在实际应用过程中体会，学习过程中应该是用多少，学多少，用到了再学也不迟。 </P>
<P><BR><A name=init><B>CVS环境初始化<BR></B></A><B>============</B></P>
<P>环境设置：指定CVS库的路径CVSROOT<BR>tcsh<BR>setenv CVSROOT /path/to/cvsroot<BR>bash<BR>CVSROOT=/path/to/cvsroot ; export CVSROOT</P>
<P>后面还提到远程CVS服务器的设置：<BR>CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH<BR><BR>初始化：CVS版本库的初始化。<BR>cvs init</P>
<P>一个项目的首次导入<BR>cvs import -m "write some comments here" project_name vendor_tag release_tag<BR>执行后：会将所有源文件及目录导入到/path/to/cvsroot/project_name目录下<BR><I>vender_tag: 开发商标记<BR>release_tag: 版本发布标记</I></P>
<P>项目导出：将代码从CVS库里导出<BR>cvs checkout project_name<BR><I>cvs 将创建project_name目录，并将最新版本的源代码导出到相应目录中。这个checkout和Virvual SourceSafe中的check out不是一个概念，相对于Virvual SourceSafe的check out是cvs update， check in是cvs commit。</I><BR><BR><A name=daily><B>CVS的日常使用</B></A><B>&nbsp;&nbsp;</B><BR><B>=============</B></P>
<P><B>注意：第一次导出以后，就不是通过cvs checkout来同步文件了，而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步（添加，修改，删除）操作。</B></P>
<P>将文件同步到最新的版本：<BR>cvs update<BR><I>不制定文件名，cvs将同步所有子目录下的文件，也可以制定某个文件名/目录进行同步<BR></I>cvs update file_name<BR><I>最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次，并养成“先同步 后修改”的习惯，和Virvual SourceSafe不同，CVS里没有文件锁定的概念，所有的冲突是在commit之前解决，如果你修改过程中，有其他人修改并commit到了CVS库中，CVS会通知你文件冲突，并自动将冲突部分用<BR>&gt;&gt;&gt;&gt;&gt;&gt;<BR>content on cvs server<BR>&lt;&lt;&lt;&lt;&lt;&lt;<BR>content in your file<BR>&gt;&gt;&gt;&gt;&gt;&gt;<BR>标记出来，由你确认冲突内容的取舍。<BR>版本冲突一般是在多个人修改一个文件造成的，但这种项目管理上的问题不应该指望由CVS来解决。</I></P>
<P>确认修改写入到CVS库里：<BR>cvs commit -m "write some comments here" file_name</P>
<P><I>注意：CVS的很多动作都是通过cvs commit进行最后确认并修改的，最好每次只修改一个文件。在确认的前，还需要用户填写修改注释，以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话，cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。<BR>注释的质量很重要：所以不仅必须要写，而且必须写一些比较有意义的内容：以方便其他开发人员能够很好的理解<BR>不好的注释，很难让其他的开发人员快速的理解：比如： -m "bug fixed" 甚至 -m ""<BR>好的注释，甚至可以用中文: -m "在用户注册过程中加入了Email地址校验"</I> <BR><BR>修改某个版本注释：每次只确认一个文件到CVS库里是一个很好的习惯，但难免有时候忘了指定文件名，把多个文件以同样注释commit到CVS库里了，以下命令可以允许你修改某个文件某个版本的注释：<BR>cvs admin -m 1.3:"write some comments here" file_name<BR><BR>添加文件<BR>创建好新文件后，比如：touch new_file<BR>cvs add new_file<BR><I>注意：对于图片，Word文档等非纯文本的项目，需要使用cvs add -b选项，否则有可能出现文件被破坏的情况<BR>比如：cvs add -kb new_file.gif<BR></I>然后确认修改并注释 <BR>cvs ci -m "write some comments here"</P>
<P>删除文件：<BR>将某个源文件物理删除后，比如：rm file_name<BR>cvs rm file_name<BR>然后确认修改并注释<BR>cvs ci -m "write some comments here"<BR>以上面前2步合并的方法为：<BR>cvs rm -f file_name<BR>cvs ci -m "why delete file"<BR></P>
<P><I>注意：很多cvs命令都有缩写形式：commit=&gt;ci; update=&gt;up; checkout=&gt;co; remove=&gt;rm;</I></P>
<P><BR>添加目录：<BR>cvs add dir_name<BR><BR>查看修改历史：cvs log file_name<BR>cvs history file_name<BR><BR>查看当前文件不同版本的区别<BR>cvs diff -r1.3 -r1.5 file_name<BR>查看当前文件（可能已经修改了）和库中相应文件的区别<BR>cvs diff file_name<BR>cvs的web界面提供了更方便的定位文件修改和比较版本区别的方法，具体安装设置请看后面的cvsweb使用</P>
<P>正确的通过CVS恢复旧版本的方法：<BR>如果用cvs update -r1.2 file.name<BR>这个命令是给file.name加一个STICK TAG： "1.2" ，虽然你的本意只是想将它恢复到1.2版本<BR>正确的恢复版本的方法是：cvs update -p -r1.2 file_name &gt;file_name<BR>如果不小心已经加成STICK TAG的话：用cvs update -A 解决</P>
<P>移动文件：文件重命名<BR>cvs里没有cvs move或cvs rename，因为这两个操作是先cvs remove old_file_name，然后cvs add new_file_name实现的。</P>
<P>删除，移动目录：<BR>最方便的方法是让管理员直接移动，删除CVSROOT里相应目录（因为CVS一个项目下的子目录都是独立的，移动到$CVSROOT目录下都可以作为新的独立项目：好比一颗树，其实砍下任意一枝都能独立存活），对目录进行了修改后，要求其开发人员重新导出项目cvs checkout project_name 或者用cvs update -dP同步。</P>
<P><A name=branch><B>CVS Branch：项目多分支同步开发<BR></B></A><B>=============================</B></P>
<P>确认版本里程碑：多个文件各自版本号不一样，项目到一定阶段，可以给所有文件统一指定一个阶段里程碑版本号，方便以后按照这个阶段里程碑版本号导出项目，同时也是项目的多个分支开发的基础。<BR>cvs tag release_1_0</P>
<P>开始一个新的里程碑：<BR>cvs commit -r 2 标记所有文件开始进入2.x的开发</P>
<P><I>注意：CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。</I></P>
<P>在开发项目的2.x版本的时候发现1.x有问题，但2.x又不敢用，则从先前标记的里程碑：release_1_0导出一个分支release_1_0_patch<BR>cvs rtag -b -r release_1_0 release_1_0_patch proj_dir</P>
<P>一些人先在另外一个目录下导出release_1_0_patch这个分支：解决1.0中的紧急问题，<BR>cvs checkout -r release_1_0_patch<BR>而其他人员仍旧在项目的主干分支2.x上开发</P>
<P>在release_1_0_patch上修正错误后，标记一个1.0的错误修正版本号<BR>cvs tag release_1_0_patch_1</P>
<P>如果2.0认为这些错误修改在2.0里也需要，也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中：<BR>cvs update -j release_1_0_patch_1</P>
<P><B>CVS的远程认证：</B><A name=ssh><B>通过SSH远程访问CVS<BR></B></A><B>================================</B></P>
<P>使用cvs本身的远程认证很麻烦,需要定义服务器和用户组，用户名，设置密码等，而且不安全，因此和系统本地帐号认证并通过SSH传输是比较好的办法，通过在客户机的/etc/profile里设置一下内容：<BR>CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH<BR>所有客户机所有本地用户都可以映射到CVS服务器相应同名帐号了。<BR><BR>如果CVS所在服务器的SSH端口不在缺省的22，或者和客户端与CVS服务器端SSH缺省端口不一致，有时候设置了：<BR>:ext:$USER@test.server.address#port:/path/to/cvsroot&nbsp;<BR><BR>仍然不行，比如有以下错误信息：<BR>ssh: test.server.address#port: Name or service not known<BR>cvs [checkout aborted]: end of file from server (consult above messages if any)<BR><BR>解决的方法是做一个脚本指定端口转向（不能使用alias，会出找不到文件错误）：<BR>创建一个/usr/bin/ssh_cvs文件：<BR>#!/usr/bin/sh<BR>/path/to/ssh -p 34567 "$@"<BR>然后：chmod +x /usr/bin/ssh_cvs<BR>并CVS_RSH=ssh_cvs; export CVS_RSH</P>
<P>注意：port是指相应服务器SSH的端口，不是cvs pserver的端口<BR><BR><A name=cvsweb><B>CVSWEB：提高程序员比较文件修改效率<BR></B></A><B>================================</B></P>
<P>CVSWEB就是CVS的WEB界面，可以大大提高程序员定位修改的效率:<BR>使用的样例可以看：<A href="http://www.freebsd.org/cgi/cvsweb.cgi" rel=nofollow>http://www.freebsd.org/cgi/cvsweb.cgi</A></P>
<P>CVSWEB的下载：CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本，这个是个人感觉觉得安装设置比较方便的：<BR><A href="http://www.spaghetti-code.de/software/linux/cvsweb/" rel=nofollow>http://www.spaghetti-code.de/software/linux/cvsweb/</A><BR><BR>下载解包：<BR>tar zxf cvsweb.tgz<BR>把配置文件cvsweb.conf放到安全的地方（比如和apache的配置放在同一个目录下），<BR>修改：cvsweb.cgi让CGI找到配置文件：<BR>$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';<BR><BR>转到/path/to/apache/conf下并修改cvsweb.conf：</P>
<OL>
<LI>修改CVSROOT路径设置：<BR>%CVSROOT = (<BR>'Development' =&gt; '/path/to/cvsroot', #&lt;==修改指向本地的CVSROOT<BR>); 
<LI>缺省不显示已经删除的文档：<BR>"hideattic" =&gt; "1",#&lt;==缺省不显示已经删除的文档 
<LI>在配置文件cvsweb.conf中还可以定制页头的描述信息，你可以修改$long_intro成你需要的文字 </LI></OL>
<P>CVSWEB可不能随便开放给所有用户，因此需要使用WEB用户认证：<BR>先生成 passwd:<BR>/path/to/apache/bin/htpasswd -c cvsweb.passwd user<BR><BR>修改httpd.conf: 增加<BR>&lt;Directory "/path/to/apache/cgi-bin/cvsweb/"&gt;<BR>AuthName "CVS Authorization"<BR>AuthType Basic<BR>AuthUserFile /path/to/cvsweb.passwd<BR>require valid-user<BR>&lt;/Directory&gt;<BR><BR><A name=tag><B>CVS TAGS: who? when?<BR></B></A><B>====================</B></P>
<P>将$Id$ 加在程序文件开头的注释里是一个很好的习惯，cvs能够自动解释更新其中的内容成：file_name version time user_name 的格式，比如：cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp，可以这些信息了解文件的最后修改人和修改时间<BR><BR>几个常用的缺省文件：<BR>default.php<BR>&lt;?php<BR>/*<BR>* Copyright (c) 2002 Company Name.<BR>* $Header$<BR>*/<BR><BR>?&gt; </P>
<P>==================================== <BR>Default.java: 注意文件头一般注释用 /* 开始 JAVADOC注释用 /** 开始的区别<BR>/*<BR>* Copyright (c) 2002 Company Name.<BR>* $Header$<BR>*/<BR><BR>package com.netease;<BR><BR>import java.io;<BR><BR>/**<BR>* comments here<BR>*/<BR>public class Default {<BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp; *<BR>&nbsp;&nbsp;&nbsp; * @param<BR>&nbsp;&nbsp;&nbsp; * @return<BR>&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; public toString() {<BR><BR>&nbsp;&nbsp;&nbsp; }<BR>} </P>
<P>==================================== <BR>default.pl:<BR>#!/usr/bin/perl -w<BR># Copyright (c) 2002 Company Name.<BR># $Header$<BR><BR># file comments here<BR><BR>use strict;<BR></P>
<P><A name=vss><B>CVS vs VSS</B></A>　<BR>=========== </P>
<P>CVS没有文件锁定模式，VSS在check out同时，同时记录了文件被导出者锁定。 </P>
<P>CVS是update commit， VSS是check out check in </P>
<P>在CVS中，标记自动更新功能缺省是打开的，这样也带来一个潜在的问题，就是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。 </P>
<P>Virsual SourceSafe中这个功能称之为Keyword Explaination，缺省是关闭的，需要通过OPITION打开，并指定需要进行源文件关键词扫描的类型：*.txt,*.java,*.html... </P>
<P>对于Virsual SourceSafe和CVS都通用的TAG有：<BR>$Header$<BR>$Author$<BR>$Date$ <BR>$Revision$ </P>
<P>尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。 </P>
<P>　 </P>
<P>相关资源：</P>
<P>CVS HOME：<BR><A href="http://www.cvshome.org/" rel=nofollow>http://www.cvshome.org</A></P>
<P>CVS FAQ：<BR><A href="http://www.loria.fr/~molli/cvs-index.html" rel=nofollow>http://www.loria.fr/~molli/cvs-index.html</A><BR><BR>相关网站:<BR><A href="http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/" rel=nofollow>http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/</A></P>
<P>CVS 免费书:<BR><A href="http://cvsbook.red-bean.com/" rel=nofollow>http://cvsbook.red-bean.com/</A></P>
<P>CVS 命令的速查卡片：<BR><A href="http://www.refcards.com/about/cvs.html" rel=nofollow>http://www.refcards.com/about/cvs.html</A></P>
<P></P><BR>
<P>摘自：<A href="http://www.chedong.com/tech/cvs_card.html" target=_blank rel=nofollow>http://www.chedong.com/tech/cvs_card.html</A></P><img src ="http://www.cnitblog.com/woo/aggbug/2124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-08-16 10:07 <a href="http://www.cnitblog.com/woo/archive/2005/08/16/2124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>界面美化</title><link>http://www.cnitblog.com/woo/archive/2005/08/16/2121.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Mon, 15 Aug 2005 23:24:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/08/16/2121.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/2121.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/08/16/2121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/2121.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/2121.html</trackback:ping><description><![CDATA[<P>基本方式：在平台如ASP.NET中可以使用Visual&nbsp;Studio&nbsp;.NET工具制作表单，在java平台下的jsp中的表单可以使用JBuilder或是Eclipse制作表单，这些工具都提供了可视化的,即见即所得的编辑方式，但此类工具都常偏重于给程序设计，所以要制作一个漂亮的界面，基本上都需要使用工具中的原码编辑来制作。程序编码效率虽然很高，可是很难达到一个美化效果。<BR><BR>推荐方式一：借助DW工具。</P>
<P>　　DW也就是由macromedia出品的Dreamweaver。Dreamweaver家族一直是Web美工的最爱，也是目前最强大的网页制作工具之一。DW其实对程序人员有一个好处，无论希望制作任何语言和平台下的表单，DW中都可以做到，更重要的是DW能满足任何美术要求下的表单制作。</P>
<P>　　DW工具界面</P>
<P><BR>此主题相关图片如下：<BR><A href="http://www.itgoogle.com/web/Upfile/UploadFile/2005-8-12/3.bmp" target=_blank><IMG alt="" src="http://www.itgoogle.com/web/Upfile/UploadFile/2005-8-12/3.bmp" onload="javascript:if(this.width>screen.width-480){this.width=screen.width-480;this.height=(image.height*screen.width-480)/image.width;}" border=0 dypop="按此在新窗口浏览图片"></A></P>
<P>在DW做表单界面时如果能学会熟练使用DW中一些功能，可以大大的加快制作表单的速度：在此列出给大家作为参考。</P>
<P>１、学会使用设计区或代码区下的块代码选中功能。</P>
<P>２、输入区的html控件使用css样式来控制外观。（最好养成样式名一致的习惯）</P>
<P>３、css样式内容存入外部文件，在需要的页面中引入该css文件内容。</P>
<P>4、辅助各种表单功能的<I>javascript</I>内容做成function并存成一个单独文件。</P>
<P>５、适当并且合理的使用DW提供的模板(Template)和库(Library)功能来存放界面中被重用的代码。</P>
<P>推荐方式二：CSS2.0。</P>
<P>CSS2.0是一套全新的样式表结构，是由W3C推行的，同以往的CSS1.0或CSS1.2完全不一样，CSS2.0推荐的是一套内容和表现效果分离的方式，HTML元素可以通过CSS2.0的样式控制显示效果，可完全不使用以往HTML中的table和td来定位表单的外观和样式，只需使用div和Li此类HTML标签来分割元素，之后即可通过CSS2.0样式来定义表单界面的外观。</P>
<P>CSS2.0提供给我们了一个机制，让程序员开发时可以不考虑显示和界面就可以制作表单和界面，显示问题可由美工或是程序员后期再来编写相应的CSS2.0样式来解决。不过由于CSS2.0目前尚未见过很好的编辑软件，所以无法做到所见即所得，编写起来不易!国内纯美工能编写CSS2.0样式的我还没见过。呜呼，还是要程序员自己来写。但是CSS2.0起码已经给我们开启了一个美好的明天。关于CSS2.0有兴趣的朋友可以查看W3C的资料。<IMG src="http://www.itgoogle.com/web/images/url.gif" align=absMiddle border=0> <A href="http://www.w3.org/TR/REC-CSS2/" target=_blank>http://www.w3.org/TR/REC-CSS2/</A></P>
<P>方式三（重点推荐）：NoahWeb引擎所提供的表单制作方式。</P>
<P>NoahWeb不愧为新一代的轻量级B/S应用开发引擎，NoahWeb提供了一整套非常强大的表单制作机制，使用NoahWeb开发B/S应用时，程序人员完全可以不用考虑表单的外观，用NoahWeb提供的XML格式结构化标签可定义表单，表单的最终显示效果完全由美术设计的表单模板决定。表现和结构分离，重用性也非常的好。</P>
<P>假设需要制作一个下面这样一个登陆表单界面：如下图：</P>
<P><BR>此主题相关图片如下：<BR><A href="http://www.itgoogle.com/web/Upfile/UploadFile/2005-8-12/4.bmp" target=_blank><IMG alt="" src="http://www.itgoogle.com/web/Upfile/UploadFile/2005-8-12/4.bmp" onload="javascript:if(this.width>screen.width-480){this.width=screen.width-480;this.height=(image.height*screen.width-480)/image.width;}" border=0 dypop="按此在新窗口浏览图片"></A></P>
<P>在NoahWeb中定义的时候就可以用下面的代码（大家不要被这些代码吓倒，仔细看，非常容易懂）：</P>
<P><BR></P><img src ="http://www.cnitblog.com/woo/aggbug/2121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-08-16 07:24 <a href="http://www.cnitblog.com/woo/archive/2005/08/16/2121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java关键字</title><link>http://www.cnitblog.com/woo/archive/2005/07/28/1159.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Wed, 27 Jul 2005 22:23:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/28/1159.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1159.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/28/1159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1159.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1159.html</trackback:ping><description><![CDATA[　正确识别java语言的关键字（keyword）和保留字（reserved word）是十分重要的。Java的关键字对java的编译器有特殊的意义，他们用来表示一种数据类型，或者表示程序的结构等。保留字是为java预留的关键字，他们虽然现在没有作为关键字，但在以后的升级版本中有可能作为关键字。<BR><BR>　　关键字列表<BR><BR>　　abstract boolean break byte case<BR>　　catch char class continue default<BR>　　do double else extends false<BR>　　final finally float for if<BR>　　implements import instanceof int interface<BR>　　long native new null package<BR>　　private protected public return short<BR>　　static super switch synchronized this<BR>　　throw throws transient true try<BR>　　void volatile while <BR>　　<BR>　　保留字<BR>　　const，goto<BR><BR>　　注意点<BR><BR>　　识别java语言的关键字，不要和其他语言如c/c++的关键字混淆。<img src ="http://www.cnitblog.com/woo/aggbug/1159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-28 06:23 <a href="http://www.cnitblog.com/woo/archive/2005/07/28/1159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写在初学Java时... </title><link>http://www.cnitblog.com/woo/archive/2005/07/28/1156.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Wed, 27 Jul 2005 20:31:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/28/1156.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1156.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/28/1156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1156.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1156.html</trackback:ping><description><![CDATA[<DIV class=postTitle>
<DIV class=postTitle><A href="http://blog.csdn.net/kerry365/archive/2005/07/26/435530.aspx"><FONT color=#000080>写在初学Java时...</FONT></A>
<SCRIPT language=javascript>document.title="写在初学Java时... - "+document.title</SCRIPT>
 </DIV>
<DIV class=postText>初次涉及Java领域，感觉到Java入门是好像没有C,C++入门快，工具也没有什么Turbo C,Visual C++好用（自己的破机器实在陪不起JBuilder，贪婪的家伙，以后一定要收拾她）。什么JAVA_HOME,CLASSPATH，虚拟机等概念都是初次基础，旁边的人都很少用Java的。感觉Java就是做Applet的。慢慢的知道了<A href="http://java.sun.com/"><FONT color=#000080>http://java.sun.com</FONT></A>，开始知道Java博大精深。让我不可思议的是JAVA 2,JDK,J2SE,J2EE,J2ME等新名词在自己的脑海里蔓延。慢慢的自己知道了JCP组织是制定Java相关规范的发源地<A href="http://java.jcp.org/"><FONT color=#000080>http://java.jcp.org</FONT></A> ,于是订阅了一份邮件列表。真是好东西啊，定期有Java的最新动向，所以Java的动态尽收眼里，建议大家也去订阅一份。免费的。自己动手下载了Java(TM) 2 SDK和Java(TM) 2 SDK Documentation后,不懂的就查Java(TM) 2 SDK Documentation,特别好用，也不需要什么手册之类的，建议大家都要有一份。 <BR>搭起Java开发环境后，记得还是用UltraEdit编辑并编译的（在其中可以配好Java的编译环境）。慢慢的改用JCreator了。不错，至少很多方面有改进。最开始卖了一套&lt;Java 2核心技术&gt; 2本书，还不错。对于入门来说足够了。慢慢的知道&lt;Thinking in Java&gt;是一本好书，后来才知道，有了Java经验后，看这本书特别过瘾，所以现在还经常翻翻。周而复始的看，效果特别好。慢慢的知道了Oreilly公司（<A href="http://www.oreilly.com/"><FONT color=#000080>http://www.oreilly.com</FONT></A>）出的图书不错，很高雅，国内翻译的也还可以（<A href="http://www.oreilly.com.cn/"><FONT color=#000080>http://www.oreilly.com.cn</FONT></A>）。本人收集了很多Oreilly的原版图书，有需要的可以和我联系（Acrobat pdf格式）。慢慢知道了jjhou这个人.(<A href="http://jjhou.csdn.net/"><FONT color=#000080>http://jjhou.csdn.net</FONT></A> )以及他的个人网站，最让我感兴趣的是jjhou老师写的散文，书评，很有收获，不是为技术而技术。很有趣味性。其中, <A href="http://www.epubcn.com/"><FONT color=#000080>http://www.epubcn.com</FONT></A> 上有很多美丽的图书。 <BR>不知道什么时候，要开始干项目了，以前从书上看到的东西，慢慢的在项目中有了很好的机会去温习，慢慢的有了感觉，开始主要是用Swing,开发桌面系统，放置一个按钮怎么也放不好，后来才知道有一个布局管理器。咳，这个婆婆的Java也讨厌的很。开始涉及到数据库访问,JDBC。后来我才知道，Sun的Java网站有一个Java Tutorial。（<A href="http://java.sun.com/docs/books/tutorial/"><FONT color=#000080>http://java.sun.com/docs/books/tutorial/</FONT></A> ）。同时，也知道了蔡學鏞先生的sleepless in java(<A href="http://www.oreilly.com.tw/sleepless/index.htm"><FONT color=#000080>http://www.oreilly.com.tw/sleepless/index.htm</FONT></A> ),太美了，美的很。 满满的，OReilly, <A href="http://www.onjava.com/"><FONT color=#000080>http://www.onjava.com/</FONT></A> 也是不错的地方。都有很多优秀的文章。<A href="http://www-900.ibm.com/developerWorks/cn/index.shtml"><FONT color=#000080>http://www-900.ibm.com/developerWorks/cn/index.shtml</FONT></A>，也很棒。 <BR>每次，美美的享用一顿大餐后，也来也觉得自己是不是应该换一种学习方式，因为这样学习效果不太好。比较乱。让我想起了Java Specification，对，我开始研究Java规范了。最开始下载的规范是JDBC Specification，很多概念一目了然，尤其是DATABASE的事务性控制，自己对于她的理解慢慢的有了较为深入的了解。对于开发C/S结构，比如,Swing+JDBC,开发数据库应用系统，让我学会开发两层结构的应用系统。很神气。 <BR>也不知道什么时候要开始开发一个网站，基于Linux+JSP+JavaBean+Oracle的系统。很是有意思。为什么这么说呢？因为不同于Swing+JDBC的开发模式，系统之间多了一层(JavaBean,姑且就这么叫吧！嘻嘻)；同时，很多开发技术和面向左面系统不一样，比如分页技术。 <BR>完成项目后，自己对于Java的很多方面都比较了解了。开始思考一个问题，J2EE是什么东西？。我们学习Java大概有3个方向，第一，桌面系统，包括C/S结构；第二，J2ME,面向无限领域，很有潜力的家伙，看看中国的手机用户就知道了。第三，面向企业应用、计算的平台,J2EE. <BR>在痛苦的抉择后，我选择J2EE..分享J2EE给我带来的快乐。学到现在，最大的感觉，就是: 简单就是美，美就是Java.不会有学MFC的痛苦，也不会有去分析STL的艰辛，网路应用上一点也不逊色于C++。开始进入我的J2EE之旅。 <BR>还是下载了一份J2EE规范，一份J2EE SDK。开始研究J2EE,结合<A href="http://java.sun.com/j2ee/tutorial/index.html"><FONT color=#000080>http://java.sun.com/j2ee/tutorial/index.html</FONT></A> 提供的J2EE Tutorial开始研究了。大概过了1个月，开始有感觉了，也就在这个时候，需要我去完成一个J2EE构架方面的项目。差不多边学编写完成了，很多概念在写完后都不是很清晰，因为东西太多了，主要是基于JSP(Servlet)+Session Bean+EIS构架开发系统。当然也学到很多东西，至少对SB EJB的编写不成问题。懂得了JSP如何调用EJB…….. <BR>完成项目后，我开始研究Java Pet Store了，很是过瘾。开始知道了Servlet过滤器，XML方面较为全面的知识，知道了J2EE整个框架中各种技术的实际应用。慢慢的，开始研究WebLogic配置好的Pet Store（也是Sun公司的）。慢慢的分析两者的不同之处。开始对J2EE Specification有了很好的感觉。因为J2EE Specification本身是很严肃的，但Pet Store给出了活力。在反复的学习中，我明白了J2EE构架的70—80%。新的问题又出来了，实际企业中会如何建构一个J2EE系统呢？带着这个问题，我开始分析Core J2EE Patterns,这本书。同时，也有EJB Design Patterns。慢慢的，开始知道了J2EE的魅力所在，知道了J2EE为什么会在企业中得到较为好的认可。大家都知道，设计模式一词，在公司上班，你们的老板会看你的代码吗？会赞赏你的DP很好吗，我想很少。在完成你的工作进度之余，加班，加班，再加班，我想你没有更多的时间去分析研究DP.但，J2EE框架不一样，她内置了很多优秀的设计模式，我们在设计开发、构架一个J2EE系统中用到了很多设计模式。比如，MVC,EJB中封装的DAO设计模式。构架J2E系统用Session Fa&amp;ccedil;ade,Message Fa&amp;ccedil;ade设计模式也不会太困难。这也是后来J2EE吸引我的地方。慢慢的我知道了，作为一个J2EE开发者，我们要掌握其中的核心内容。我个人认为，3方面很重要。实施EJB系统常用的架构、设计模式，比如session fa&amp;ccedil;ade、message fa&amp;ccedil;ade、DTO等。J2EE系统构架中常用的模式。UML-&gt; EJB,EJB-&gt;UML相互映射。现在也一样在研究。<BR><BR>本文引用通告地址： http://blog.csdn.net/kerry365/services/trackbacks/435530.aspx </DIV></DIV>
<DIV class=postText>初次涉及Java领域，感觉到Java入门是好像没有C,C++入门快，工具也没有什么Turbo C,Visual C++好用（自己的破机器实在陪不起JBuilder，贪婪的家伙，以后一定要收拾她）。什么JAVA_HOME,CLASSPATH，虚拟机等概念都是初次基础，旁边的人都很少用Java的。感觉Java就是做Applet的。慢慢的知道了<A href="http://java.sun.com/">http://java.sun.com</A>，开始知道Java博大精深。让我不可思议的是JAVA 2,JDK,J2SE,J2EE,J2ME等新名词在自己的脑海里蔓延。慢慢的自己知道了JCP组织是制定Java相关规范的发源地<A href="http://java.jcp.org/">http://java.jcp.org</A> ,于是订阅了一份邮件列表。真是好东西啊，定期有Java的最新动向，所以Java的动态尽收眼里，建议大家也去订阅一份。免费的。自己动手下载了Java(TM) 2 SDK和Java(TM) 2 SDK Documentation后,不懂的就查Java(TM) 2 SDK Documentation,特别好用，也不需要什么手册之类的，建议大家都要有一份。 <BR>搭起Java开发环境后，记得还是用UltraEdit编辑并编译的（在其中可以配好Java的编译环境）。慢慢的改用JCreator了。不错，至少很多方面有改进。最开始卖了一套&lt;Java 2核心技术&gt; 2本书，还不错。对于入门来说足够了。慢慢的知道&lt;Thinking in Java&gt;是一本好书，后来才知道，有了Java经验后，看这本书特别过瘾，所以现在还经常翻翻。周而复始的看，效果特别好。慢慢的知道了Oreilly公司（<A href="http://www.oreilly.com/">http://www.oreilly.com</A>）出的图书不错，很高雅，国内翻译的也还可以（<A href="http://www.oreilly.com.cn/">http://www.oreilly.com.cn</A>）。本人收集了很多Oreilly的原版图书，有需要的可以和我联系（Acrobat pdf格式）。慢慢知道了jjhou这个人.(<A href="http://jjhou.csdn.net/">http://jjhou.csdn.net</A> )以及他的个人网站，最让我感兴趣的是jjhou老师写的散文，书评，很有收获，不是为技术而技术。很有趣味性。其中, <A href="http://www.epubcn.com/">http://www.epubcn.com</A> 上有很多美丽的图书。 <BR>不知道什么时候，要开始干项目了，以前从书上看到的东西，慢慢的在项目中有了很好的机会去温习，慢慢的有了感觉，开始主要是用Swing,开发桌面系统，放置一个按钮怎么也放不好，后来才知道有一个布局管理器。咳，这个婆婆的Java也讨厌的很。开始涉及到数据库访问,JDBC。后来我才知道，Sun的Java网站有一个Java Tutorial。（<A href="http://java.sun.com/docs/books/tutorial/">http://java.sun.com/docs/books/tutorial/</A> ）。同时，也知道了蔡學鏞先生的sleepless in java(<A href="http://www.oreilly.com.tw/sleepless/index.htm">http://www.oreilly.com.tw/sleepless/index.htm</A> ),太美了，美的很。 满满的，OReilly, <A href="http://www.onjava.com/">http://www.onjava.com/</A> 也是不错的地方。都有很多优秀的文章。<A href="http://www-900.ibm.com/developerWorks/cn/index.shtml">http://www-900.ibm.com/developerWorks/cn/index.shtml</A>，也很棒。 <BR>每次，美美的享用一顿大餐后，也来也觉得自己是不是应该换一种学习方式，因为这样学习效果不太好。比较乱。让我想起了Java Specification，对，我开始研究Java规范了。最开始下载的规范是JDBC Specification，很多概念一目了然，尤其是DATABASE的事务性控制，自己对于她的理解慢慢的有了较为深入的了解。对于开发C/S结构，比如,Swing+JDBC,开发数据库应用系统，让我学会开发两层结构的应用系统。很神气。 <BR>也不知道什么时候要开始开发一个网站，基于Linux+JSP+JavaBean+Oracle的系统。很是有意思。为什么这么说呢？因为不同于Swing+JDBC的开发模式，系统之间多了一层(JavaBean,姑且就这么叫吧！嘻嘻)；同时，很多开发技术和面向左面系统不一样，比如分页技术。 <BR>完成项目后，自己对于Java的很多方面都比较了解了。开始思考一个问题，J2EE是什么东西？。我们学习Java大概有3个方向，第一，桌面系统，包括C/S结构；第二，J2ME,面向无限领域，很有潜力的家伙，看看中国的手机用户就知道了。第三，面向企业应用、计算的平台,J2EE. <BR>在痛苦的抉择后，我选择J2EE..分享J2EE给我带来的快乐。学到现在，最大的感觉，就是: 简单就是美，美就是Java.不会有学MFC的痛苦，也不会有去分析STL的艰辛，网路应用上一点也不逊色于C++。开始进入我的J2EE之旅。 <BR>还是下载了一份J2EE规范，一份J2EE SDK。开始研究J2EE,结合<A href="http://java.sun.com/j2ee/tutorial/index.html">http://java.sun.com/j2ee/tutorial/index.html</A> 提供的J2EE Tutorial开始研究了。大概过了1个月，开始有感觉了，也就在这个时候，需要我去完成一个J2EE构架方面的项目。差不多边学编写完成了，很多概念在写完后都不是很清晰，因为东西太多了，主要是基于JSP(Servlet)+Session Bean+EIS构架开发系统。当然也学到很多东西，至少对SB EJB的编写不成问题。懂得了JSP如何调用EJB…….. <BR>完成项目后，我开始研究Java Pet Store了，很是过瘾。开始知道了Servlet过滤器，XML方面较为全面的知识，知道了J2EE整个框架中各种技术的实际应用。慢慢的，开始研究WebLogic配置好的Pet Store（也是Sun公司的）。慢慢的分析两者的不同之处。开始对J2EE Specification有了很好的感觉。因为J2EE Specification本身是很严肃的，但Pet Store给出了活力。在反复的学习中，我明白了J2EE构架的70—80%。新的问题又出来了，实际企业中会如何建构一个J2EE系统呢？带着这个问题，我开始分析Core J2EE Patterns,这本书。同时，也有EJB Design Patterns。慢慢的，开始知道了J2EE的魅力所在，知道了J2EE为什么会在企业中得到较为好的认可。大家都知道，设计模式一词，在公司上班，你们的老板会看你的代码吗？会赞赏你的DP很好吗，我想很少。在完成你的工作进度之余，加班，加班，再加班，我想你没有更多的时间去分析研究DP.但，J2EE框架不一样，她内置了很多优秀的设计模式，我们在设计开发、构架一个J2EE系统中用到了很多设计模式。比如，MVC,EJB中封装的DAO设计模式。构架J2E系统用Session Fa&amp;ccedil;ade,Message Fa&amp;ccedil;ade设计模式也不会太困难。这也是后来J2EE吸引我的地方。慢慢的我知道了，作为一个J2EE开发者，我们要掌握其中的核心内容。我个人认为，3方面很重要。实施EJB系统常用的架构、设计模式，比如session fa&amp;ccedil;ade、message fa&amp;ccedil;ade、DTO等。J2EE系统构架中常用的模式。UML-&gt; EJB,EJB-&gt;UML相互映射。现在也一样在研究。<BR><BR>本文引用通告地址： http://blog.csdn.net/kerry365/services/trackbacks/435530.aspx </DIV><img src ="http://www.cnitblog.com/woo/aggbug/1156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-28 04:31 <a href="http://www.cnitblog.com/woo/archive/2005/07/28/1156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计迷踪:给JAVA设计开发新手的一些建议和意见(一) </title><link>http://www.cnitblog.com/woo/archive/2005/07/28/1155.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Wed, 27 Jul 2005 20:21:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/28/1155.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1155.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/28/1155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1155.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1155.html</trackback:ping><description><![CDATA[<P><FONT color=#ff0000><SPAN style="COLOR: blue"><FONT color=#000000>scud(飞云小侠) 2005-7-23 </FONT><A href="http://www.jscud.com/"><FONT color=#002c99>http://www.jscud.com</FONT></A><FONT color=#000000> 转载请注明作者</FONT><BR>为了给朋友同事一些设计问题上的指导,特撰写此文,很多观点都是从别人的文章中获取,有些观点肯定也有偏颇,有些观点也仅仅是提出并没有做详细论述,请多拍砖,以便改正.</SPAN><FONT color=#000000> </FONT><BR></FONT></P>
<P><BR><STRONG>【概述】</STRONG><BR>-------<BR>&nbsp;&nbsp;&nbsp; 在工作中,作为一个程序员或者一个设计师,总是要设计一些函数库或者一个框架,当然最经常的还是做项目,即使是一个项目,也会被经常改动,甚至交给别人改动.<BR>当你做这些工作的时候,你的这些成果都是要给别人了解使用的,或者说给以后的你使用的,为了别人的方便或者为了自己的方便,我们要尽可能做好设计.<BR>&nbsp;</P>
<P><BR><STRONG>【放正心态,任何东西都是不断发展的】<BR></STRONG>----------------------------------</P>
<P>&nbsp;技术是日新月异的,每一天都有新的技术出来,正所谓"山外有山,人外有人",每一个新的轮子出来,都可能比你要设计的轮子好,所以在设计的时候,应该了解一下是否已经有了类似的轮子,是否要设计一个新的轮子.<BR>&nbsp;即使你的轮子已经设计好了,也不好认为自己的轮子一定比别人的轮子好,虽然你的轮子可能更适合你的实际使用.<BR>&nbsp;技术在不断的发展中,你以及你的朋友/同事都在不断进步,"士别三日,当刮目相看",所以不要认为你的水平一定比别人高,"尺有所短,寸有所长",所以别人对你的函数库/框架提出意见,提出疑问的时候,请不要惊奇,不要反感,不要认为别人在"挑刺",也许你的函数库/框架早就不适合当前的发展了.<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;态度决定一切.你的领导或许更重视这一点.<BR>&nbsp;<BR>&nbsp;<BR><STRONG>【必要的组成部分:单元测试,文档,实例,手册etc】</STRONG><BR>--------------------------------------------</P>
<P>&nbsp;单元测试,文档,API Doc,手册,演示程序,Change Log,Readme,build.xml等等</P>
<P>&nbsp;有一天别人使用了你设计的函数库/框架,当你升级后,原来的项目却不能工作了,经过一天的调试,你终于找到了原因,原来是不小心写错了一个东西.<BR>&nbsp;你肯定不希望上述的事情发生,那么请你写单元测试吧,这样既不浪费自己的时间,也不耽误别人的工作,何乐而不为.你花在写单元测试的时间/带来的乐趣和你升级后改正莫名其妙的错误的时间和苦恼相比,肯定更有价值.你看到单元测试的绿条,难道不感到高兴吗?!<BR>&nbsp;如果你不能保证你的程序修改没有错误,不要指望你的同事认为你的错误是可以容忍的,他们在心里早就开始骂你了,呵呵.写单元测试吧<BR>&nbsp;<BR>&nbsp;看看任何一个知名的框架,都包含完善的文档,单元测试,示例程序,用户手册,那么请你也包含这些吧.哦,对了,请详细地写好JavaDoc,它很重要.<BR>&nbsp;<BR>&nbsp;使用你的框架/函数库的人如果到处去找使用方法,去找某个类(但是他不知道是否有这个类),那么说明你的文档没有到位.如果你希望别人使用你的这个类或者功能,那么请写好文档,不要指望别人去读你的源码然后就能理解它是干什么用的.<BR>&nbsp;<BR>&nbsp;如果你做到这些,那么你的函数库/框架也有了"知名"的前提,难道不是吗?如果没有,我想是没法让别人更好地使用的.<BR>&nbsp;<BR>&nbsp;对了,有了这些东西,还要有一个良好的目录组织,这个也可以参考别的框架的组织方式.<BR>&nbsp;<BR>&nbsp;<BR><STRONG>【借鉴成熟的设计,参考已有的项目】</STRONG><BR>--------------------------------</P>
<P>&nbsp;1.要做一个新的东西,没有想法.不要惊讶,我肯定先找一个现有的东西来借鉴.<BR>&nbsp;<BR>&nbsp;当然前提是不要重新发明轮子,或者是你有充分条件要重新发明一个轮子.<BR>&nbsp;Struts,WebWork,Spring等等都是成熟的框架,不管你使用起来是否符合你的习惯.<BR>&nbsp;在你成为大师之前,你的设计思想估计前人都已经提出并实践过了,所以要勇敢地去借鉴."站在巨人的肩膀上"我们能更近一步.<BR>&nbsp;<BR>&nbsp;例如我们厌倦了在访问数据库时使用如下的代码:</P>
<P>
<TABLE class=code cellSpacing=1 cellPadding=1 width=400 align=center border=0>
<TBODY>
<TR>
<TD>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//your code here<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch(Exception e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//catch Exception&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;finally<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//must do something<BR>&nbsp;&nbsp;}</TD></TR></TBODY></TABLE><BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;我们就可以借鉴Spring框架的JdbcTemplate类,看看它是如何利用回调函数来处理的.&nbsp;<BR>&nbsp;<BR>&nbsp;我们使用hibernate时是不是也会使用类似上面的代码,那么可以参考Spring框架的HibernateTemplate.<BR>&nbsp;<BR>&nbsp;借鉴也是一种捷径.<BR>&nbsp;<BR>&nbsp;警告:借鉴但不要抄袭,借鉴代码要注明来源,尊重他人也是尊重自己.<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;2.在实际的项目中,往往可以参考已经有的项目来做自己的设计.<BR>&nbsp;<BR>&nbsp;例如做一个网站,我不知道如何访问数据库,如何布局,如何分层,那么我们可以参考已经有的网站程序,看看别人是如何利用SiteMesh或者tiles布局,如何使用Hibernate来访问数据库或者使用已经封装好的JDBC类来访问数据库,如何利用Struts,WebWork或者其他访问来分层.<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR><STRONG>【遵守约定俗成的一些做法】</STRONG>&nbsp;<BR>-------------------------</P>
<P>&nbsp;为了使别人更方便地使用你的东西,那么在设计一些通用的函数或者类的时候,请遵守通用的做法,不要与众不同,除非你的内部实现确实与众不同.</P>
<P><BR>&nbsp;例如实现一个类似ArrayList的类,那么请不要这样写:</P>
<P>
<TABLE class=code cellSpacing=1 cellPadding=1 width=400 align=center border=0>
<TBODY>
<TR>
<TD>&nbsp;public int count()<BR>&nbsp;{<BR>&nbsp;&nbsp;return list.size();<BR>&nbsp;}<BR>&nbsp;public Item getItem(int i)<BR>&nbsp;{<BR>&nbsp;&nbsp;return list.get(i);<BR>&nbsp;}<BR></TD></TR></TBODY></TABLE><BR>&nbsp;<BR>&nbsp;&nbsp;而应该这样:</P>
<P>
<TABLE class=code cellSpacing=1 cellPadding=1 width=400 align=center border=0>
<TBODY>
<TR>
<TD>&nbsp;public int size()<BR>&nbsp;{<BR>&nbsp;&nbsp;return list.size();<BR>&nbsp;}<BR>&nbsp;public Item get(int i)<BR>&nbsp;{<BR>&nbsp;&nbsp;return list.get(i);<BR>&nbsp;}<BR></TD></TR></TBODY></TABLE><BR>&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;当然每个人都有自己的想法,如果你非常认为你原来的方式比普通的好,那么请提供2套方式供别人选择.它不会给你带来麻烦,只是一个一看就懂的做法,不用怀疑,这样做有好处.<BR>&nbsp;<BR>&nbsp;很多类的设计都有一些约定俗成的做法,那么在你设计一个新类的时候,先借鉴一下吧,多看看JDK的源码/文档,看看别人是怎么实现的.这更有助于推广你的成果.<BR>&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;</P>
<P><STRONG>【不要迷信权威】</STRONG>&nbsp;<BR>---------------</P>
<P>&nbsp;在使用已有的框架或者函数库时,不要认为所有的东西都是正确的或者是最好的最好,肯定不是.没有完美的东西,已经存在的东西在设计的时候因为种种局限或者因为作者的水平,对现在来说肯定存在不合理的设计,或者过于理想化的设计,而不能满足实际情况.<BR>&nbsp;<BR>&nbsp;不迷信权威,才能到达新的境界.<BR>&nbsp;</P>
<P><STRONG>【不要轻易排斥,不了解就不要草率发表意见,要严谨】</STRONG><BR>------------------------------------------------</P>
<P>&nbsp;在网上经常看到.Net和Java的比较/火拼,或者是Struts VS Webwork或者是其他等等,非常之多.经常看到的是一方对对方的东西不甚了解,就开始批评,结果说不到点子上,反而被嘲笑一番.<BR>&nbsp;几种技术的比较有时候是必要的,例如技术选型的时候.但是如果一些对这些技术根本不了解的人来选型,来评判,你能对结果信服吗?<BR>&nbsp;存在就是合理,任何技术都有其存在的理由,虽然有些东西早就过时了,但是在当时它也是应运而生的.<BR>&nbsp;几种技术,都是来解决同样的问题,但是问题也有很多方面,解决方式也有很多种,每个人的想法也都不一样,思路也不一样,所以没有绝对符合要求的技术,但是应该有符合你的技术,不符合你的技术不等于也不满足别人的要求.所以不要轻易排斥别的东西.<BR>&nbsp;<BR>&nbsp;在做技术比较的时候,如果你不了解,那么请不要轻易发表意见,至少你可以亲自去了解,去实践之后在发表你的意见岂不是更好.<BR>&nbsp;<BR>&nbsp;在发表意见的时候,也要严谨,不要轻易下结论,要经过求证,否则一旦错误只会让对手笑话,让你的同事看不起你.例如你说Hibernate3不支持jdk1.3,那么最好去好好找到你的证据,否则就会成为错误.(Hibernate3支持jdk1.3)&nbsp; <BR>&nbsp;<BR>&nbsp;作为一个技术人员,严谨应该是我们的习惯之一,无论做开发还是做设计.</P><img src ="http://www.cnitblog.com/woo/aggbug/1155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-28 04:21 <a href="http://www.cnitblog.com/woo/archive/2005/07/28/1155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改server and  iss download</title><link>http://www.cnitblog.com/woo/archive/2005/07/26/1136.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Mon, 25 Jul 2005 20:09:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/26/1136.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1136.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/26/1136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1136.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1136.html</trackback:ping><description><![CDATA[<P>首先介绍一下Tomcat的主要目录结构： <BR>\bin 包含启动startup.bat,startup.sh和关闭shutdown.bat,shutdown.sh等文件 <BR>\common 放置公用的JAR、类文件，所有站点都可以使用 <BR>\conf 其中有Tomcat的主要配置文件server.xml、tomcat-users.xml、web.xml、catalina.policy <BR>\logs 存放Tomcat日志文件的目录 <BR>\src 放置Tomcat相关的源代码 <BR>\webapps 放置web站点的目录 <BR><BR>建立一个新的站点： <BR><STRONG>修改server.xml <BR></STRONG>修改conf\server.xml将下面代码加在server.xml尾端的 &lt;!-- Tomcat Root Context --&gt;之后 <BR>&lt;Context path="/jsp" reloadable="true" docBase="{安装Tomcat所在的盘符}\Tomcat 5.0\webapps\jsp" debug="0" crosscontext="true" /&gt; <BR>path="/jsp"表示新建的站点的名字 <BR>docBase="{安装Tomcat所在的盘符}\Tomcat 5.0\webapps\jsp" 表示站点在本机的路径 <BR>reloadable="true"表示Tomcat在执行时，修改过的class或web.xml会被自动重新加载 <BR>debug="0"设置debug level，0表示提供最少的信息，9表示提供最多的信息 <BR>crosscontext="true" 表示允许你通过ServletContext.getContext()存取其他的站点 <BR>然后在jsp目录下建立WEB-INF目录，并建立classes、lib目录和web.xml文件 <BR><BR><STRONG>修改web.xml <BR></STRONG>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; <BR>&lt;!--&lt;?xml version="1.0" encoding="GB2312"?&gt;--&gt; </P>
<P>&lt;web-app xmlns="<A href="http://java.sun.com/xml/ns/j2ee"><FONT color=#edd6e1>http://java.sun.com/xml/ns/j2ee</FONT></A>" <BR>&nbsp;&nbsp;&nbsp; xmlns:xsi="<A href="http://www.w3.org/2001/XMLSchema-instance"><FONT color=#edd6e1>http://www.w3.org/2001/XMLSchema-instance</FONT></A>" <BR>&nbsp;&nbsp;&nbsp; xsi:schemaLocation="<A href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><FONT color=#edd6e1>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</FONT></A>" <BR>&nbsp;&nbsp;&nbsp; version="2.4"&gt; </P>
<P>&nbsp;&nbsp;&nbsp; &lt;display-name&gt;JSP Examples&lt;/display-name&gt; <BR>&nbsp;&nbsp;&nbsp; &lt;description&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSP Examples <BR>&nbsp;&nbsp;&nbsp; &lt;/description&gt; </P>
<P>&nbsp;&nbsp;&nbsp; &lt;error-page&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&lt;error-code&gt;404&lt;/error-code&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&lt;location&gt;/error.jsp&lt;/location&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;/error-page&gt; </P>
<P>&nbsp;&nbsp;&nbsp; &lt;welcome-file-list&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt; <BR>&nbsp;&nbsp;&nbsp; &lt;/welcome-file-list&gt; <BR>&lt;/web-app&gt; <BR></P><A href="http://www.cqforest.com/soft/12484.htm"><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD class=title1 align=middle width="100%" bgColor=#eeeeee colSpan=3 height=40><B>Win2K下Apache2+TomCat5.0整合解决方案</B></TD></TR>
<TR>
<TD align=middle width="100%" bgColor=#eeeeee></TD></TR></TBODY></TABLE></TD></TR><!-- end of article title -->
<TR>
<TD vAlign=top align=middle width="100%"><!--start of article content -->
<TABLE width="98%" border=0>
<TBODY>
<TR>
<TD class=text align=left width="100%"><BR><!-- Google Ad -->
<TABLE cellSpacing=0 cellPadding=0 align=right border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 align=left border=0>
<TBODY>
<TR>
<TD><!-- 这儿显示Google的广告 -->
<SCRIPT language=javascript>showbanner(6,6,1);</SCRIPT>

<SCRIPT type=text/javascript>google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =240;google_ad_format = "120x240_as";google_ad_channel="8570654326";google_color_border = "CCCCCC";google_color_bg ="FFFFFF";google_color_link = "000000";google_color_url ="666666";google_color_text = "333333";</SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript></SCRIPT>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>Win2K下Apache2.0+TomCat5.0解决方案<BR>&nbsp;&nbsp;<BR>操作系统：windows&nbsp;2000&nbsp;professional&nbsp;中文版＋sp4<BR>java&nbsp;环境：j2sdk1.4.2_01&nbsp;JAVA_HOME=&nbsp;C:\j2sdk1.4.2_01<BR>apache&nbsp;2.0.48&nbsp;for&nbsp;win32：apache_2.0.48-win32-x86-no_ssl.msi下载地址<BR><A href="http://archive.apache.org/dist/httpd/">http://archive.apache.org/dist/httpd/</A><BR>tomcat&nbsp;5.0.16&nbsp;for&nbsp;win32：jakarta-tomcat-5.0.16.exe下载地址<BR><A href="http://jakarta.apache.org/site/binindex.cgi">http://jakarta.apache.org/site/binindex.cgi</A><BR>jk2&nbsp;模块&nbsp;for&nbsp;win32：&nbsp;mod_jk2-2.0.43.dll&nbsp;下载地址<BR><A href="http://apache.scarlet.be/jakarta/tomcat-connectors/jk2/binaries/win32/">http://apache.scarlet.be/jakarta/tomcat-connectors/jk2/binaries/win32/</A><BR>以上软件的下载网址：<A href="http://www.apache.org/">http://www.apache.org</A><BR>1.&nbsp;&nbsp;&nbsp;&nbsp;安装并测试Apache和TomCat5.0；<BR>注意事项：&nbsp;Apache默认端口为80，与IIS冲突，更改端口或关闭IIS,<BR>TomCat安装完后配置环境变量。<BR>2.&nbsp;&nbsp;&nbsp;&nbsp;开始整合；<BR>首先，将文件mod_jk2.so&nbsp;复制到Apache&nbsp;的模块目录(%Apache%\Apache2\modules)中。<BR>备份Tomcat&nbsp;和Apache&nbsp;的缺省配置文件，以防不测。<BR>其次，编辑配置文件。具体的配置文件有四个，<BR>它们分别是：httpd.conf、jk2.properties、server.xml、workers2.properties。<BR><BR>a、&nbsp;修改ApacheRoot\Apache2\conf\httpd.conf&nbsp;文件<BR>1&gt;修改web&nbsp;主目录，即将<BR>DocumentRoot&nbsp;"D:/websrv/Apache2/htdocs"&nbsp;改为自己的web主目录<BR>eg:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot&nbsp;&nbsp;&nbsp;&nbsp;"D:/websrv/myweb"<BR>2&gt;修改web&nbsp;主目录对应的目录，即将<BR>&lt;Directory&nbsp;"D:/websrv/Apache2/htdocs"&gt;改为<BR>eg:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Directory&nbsp;"D:/websrv/myweb"&nbsp;&gt;<BR>此目录块要与DocumentRoot的路径对应,块中的语法是对此块对应Web主目录的操作权限设置。<BR>3&gt;修改目录缺省的web&nbsp;文件，即将<BR>DirectoryIndex&nbsp;index.html&nbsp;index.html.var&nbsp;改为<BR>eg:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DirectoryIndex&nbsp;index.html&nbsp;index.html.var&nbsp;index.jsp<BR>语法说明：当向Apache&nbsp;发出请求时容器将顺次去找index.html,如果没有，将接着找index.htm,最后找index.jsp。<BR>4&gt;修改cgi-bin&nbsp;所在目录，即将<BR>ScriptAlias&nbsp;/cgi-bin/&nbsp;"D:/websrv/Apache2/cgi-bin/"改为<BR>ScriptAlias&nbsp;/cgi-bin/&nbsp;"D:/websrv/myweb/cgi-bin/"<BR>&lt;Directory&nbsp;"D:/websrv/Apache2/cgi-bin"&gt;&nbsp;改为<BR>&lt;Directory&nbsp;"D:/websrv/myweb/cgi-bin"&gt;<BR>如果程序中需要用到cgi时修改以上两处。<BR>5&gt;添加指定的虚拟目录(别名)，及其对应目录的属性<BR>#这是测试用的文件夹，能执行jsp&nbsp;文件。<BR>Alias&nbsp;&nbsp;/jj/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"D:/websrv/myweb/jj/"<BR>&lt;Directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"D:/websrv/myweb/jj"&nbsp;&gt;<BR>AllowOverride&nbsp;None<BR>Options&nbsp;IncludesNoExec<BR>AddOutputFilter&nbsp;Includes&nbsp;html<BR>AddHandler&nbsp;type-map&nbsp;var<BR>Order&nbsp;allow,deny<BR>Allow&nbsp;from&nbsp;all<BR>&lt;/Directory&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alias&nbsp;&nbsp;/chengxin/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"D:/websrv/myweb/chengxin/"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"D:/websrv/myweb/chengxin"&nbsp;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AllowOverride&nbsp;None<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Options&nbsp;IncludesNoExec<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddOutputFilter&nbsp;Includes&nbsp;html<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddHandler&nbsp;type-map&nbsp;var<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Order&nbsp;allow,deny<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allow&nbsp;from&nbsp;all<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Directory&gt;<BR>#在web主目录myweb中添加了两个测试应用程序jj和chengxin<BR>语法说明：<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alias&nbsp;&nbsp;/web程序别名/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"程序根目录/"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##别忘啦最后有“/”<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"程序根目录"&nbsp;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AllowOverride&nbsp;None<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Options&nbsp;IncludesNoExec<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddOutputFilter&nbsp;Includes&nbsp;html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对此程序的具体操作权限设置&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddHandler&nbsp;type-map&nbsp;var&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Order&nbsp;allow,deny<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allow&nbsp;from&nbsp;all<BR>&lt;/Directory&gt;<BR>注意：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序根目录必须和%Tomcat5%\conf\server.xml中配置的虚拟目录相吻合。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&gt;修改缺省的字符集，使之支持中文，即将<BR>AddDefaultCharset&nbsp;ISO-8859-1&nbsp;改为<BR>AddDefaultCharset&nbsp;GB2312<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&gt;在文件最后添加如下内容，以加载jk2&nbsp;模块<BR>&lt;IfModule&nbsp;!mod_jk2.c&gt;<BR>LoadModule&nbsp;jk2_module&nbsp;modules/mod_jk2.so<BR>&lt;/IfModule&gt;<BR><BR>b、&nbsp;修改Tomcat5Root\conf\jk2.properties&nbsp;文件<BR>在文件最后添加如下内容，打开shm&nbsp;文件设置<BR>#Shared&nbsp;memory&nbsp;directive<BR>shm.file=ApacheRoot/Apache2/logs/jk2.shm<BR>可以在ApacheRoot/Apache2/logs/下新建jk2.shm文件<BR>c、&nbsp;修改Tomcat5Root\conf\server.xml&nbsp;文件<BR>在apache&nbsp;中对应指定的虚拟目录，server.xml&nbsp;中也应指定，所以在<BR>　　&lt;!--&nbsp;Tomcat&nbsp;Root&nbsp;Context&nbsp;--&gt;<BR>&lt;!--<BR>&lt;Context&nbsp;path=""&nbsp;docBase="ROOT"&nbsp;debug="0"&gt;<BR>--&gt;<BR>的下面添加<BR>&lt;Context&nbsp;path="/jj"&nbsp;docBase="d:\websrv\myweb\jj"&nbsp;debug="0"&nbsp;reloadable="true"<BR>crossContext="true"&gt;&lt;/Context&gt;<BR>&lt;Context&nbsp;path="/chengxin"&nbsp;docBase="d:\websrv\myweb\chengxin"&nbsp;debug="0"&nbsp;reloadable="true"<BR>crossContext="true"&gt;&lt;/Context&gt;<BR><BR><BR><BR><BR>d、&nbsp;修改ApacheRoot\Apache2\conf\workers2.properties&nbsp;文件<BR>注意：如果此文件不存在，则在目录ApacheRoot&nbsp;\Apache2\conf&nbsp;下新建一个。<BR>添加如下内容<BR>#***************************************************************************<BR>#&nbsp;only&nbsp;at&nbsp;beginnin.&nbsp;In&nbsp;production&nbsp;uncomment&nbsp;it&nbsp;out&nbsp;必须在文件开头定义<BR>[logger.apache2]<BR>level=DEBUG<BR>#define&nbsp;the&nbsp;shared&nbsp;memory&nbsp;file&nbsp;定义shm&nbsp;文件<BR>[shm]<BR>file=ApacheRoot&nbsp;/Apache2/logs/jk2.shm&nbsp;&nbsp;&nbsp;&nbsp;#指向Apache文件下的logs/jk2.shm文件<BR>size=1048576<BR>#&nbsp;Define&nbsp;the&nbsp;communication&nbsp;channel&nbsp;定义信道<BR>[channel.socket:localhost&nbsp;:8009]<BR>tomcatId=localhost&nbsp;:8009<BR>#&nbsp;define&nbsp;the&nbsp;worker<BR>[ajp13:localhost:8009]<BR>channel=channel.socket:localhost:8009<BR>#jk2&nbsp;的状况，可通过<A href="http://localhost/status">http://localhost/status</A>&nbsp;查看<BR>[status:]<BR>info=Status&nbsp;worker,&nbsp;displays&nbsp;runtime&nbsp;information<BR>channel=channel.socket:localhost:8009<BR>#&nbsp;Uri&nbsp;mapping&nbsp;Uri&nbsp;映射<BR>#[uri:/path/*]会把<A href="http:///">http://</A>域名/path/里的所有请求发给tomcat。<BR>#而[uri:/path/*.jsp]会把<A href="http:///">http://</A>域名/path&nbsp;里的jsp&nbsp;文件请求发给tomcat&nbsp;处理。<BR>#此path&nbsp;可以是apache&nbsp;的虚拟目录，也可以是tomcat&nbsp;的虚拟目录，<BR>#还可以是tomcat&nbsp;的物理目录，这儿是配置jk2&nbsp;的关键，试试就知道了。<BR>[uri:/status/*]<BR>worker=status:localhost:8009<BR>group=status:<BR>＃[uri:/*]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;###表示web主目录下的所有请求都给TomCat处理<BR>[uri:/jj/*.jsp]　　　&nbsp;###表示web主目录下的jj程序中所有jsp文件请求都给TomCat处理<BR>[uri:/chengxin/*]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;###表示web主目录下的changxin程序中所有请求都给TomCat处理<BR>#[uri:/jsp/*.jsp]<BR>worker=ajp13:localhost:8009<BR>info=Map&nbsp;the&nbsp;whole&nbsp;webapp<BR>注意：此文件中的8009端口设置必须与TomCatRoot\conf\server.xml文件中<BR>　　　&nbsp;&nbsp;&nbsp;&nbsp;&lt;Connector&nbsp;port="8009"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups="false"&nbsp;redirectPort="8443"&nbsp;debug="0"<BR>protocol="AJP/1.3"&nbsp;/&gt;<BR>对应。<BR>到此已基本配置完成。<BR><BR>如果要通过配置虚拟主机的方法来访问还要进行以下配置：<BR>　以下配置的是一个IP对应多个域名的方法。<BR>1&gt;&nbsp;&nbsp;&nbsp;&nbsp;在apacheRoot\apache2\conf\httpd.conf修改<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listen&nbsp;&nbsp;&nbsp;80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#监听端口为80<BR>#NameVirtualHost&nbsp;&nbsp;*:80&nbsp;为<BR>NameVirtualHost&nbsp;192.168.1.208:80<BR>##################################Ip影射到程序主目<BR>&lt;VirtualHost&nbsp;192.168.1.208:80&gt;<BR>#管理员Email<BR>&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webmaster@dummy-host.example.com<BR>&nbsp;&nbsp;&nbsp;&nbsp;#jj&nbsp;&nbsp;web程序目录<BR>DocumentRoot&nbsp;&nbsp;&nbsp;&nbsp;d:/websrv/myweb/jj<BR>#域名&nbsp;<BR>&nbsp;&nbsp;&nbsp;ServerName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ccjg.test.com<BR>&nbsp;&nbsp;#日志<BR>&nbsp;ErrorLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs/dummy-host.example.com-error_log<BR>&nbsp;&nbsp;&nbsp;&nbsp;CustomLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs/dummy-host.example.com-access_log&nbsp;common<BR>#多个域名对应一个程序是可以在此添加<BR>ServerAlias&nbsp;&nbsp;&nbsp;ccjg.test.gov.cn<BR>#注意:<BR>#每在ServerName或ServerAlias添加一个域名时相应的就应该在<BR>#TomcatRoot\conf\server.xml文件中添加相应的&lt;Host&gt;块标记与之对应<BR>#如果要在本机测试则在C:\WINNT\system32\drivers\etc\hosts须添加相应<BR>#的IP对应于你的所设置域名，域名解析时用到<BR>#eg：&nbsp;&nbsp;&nbsp;192.168.1.208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ccjg.test.gov.cn<BR>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;192.168.1.208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ccjg.test.com&nbsp;&nbsp;&nbsp;<BR>&lt;/VirtualHost&gt;<BR><BR>&lt;VirtualHost&nbsp;&nbsp;&nbsp;&nbsp;192.168.1.208:80&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;webmaster@dummy-host.example.com<BR>#chengxin&nbsp;&nbsp;web程序目录<BR>&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d:/websrv/myweb/chengxin<BR>&nbsp;&nbsp;&nbsp;&nbsp;ServerName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chengxin.test.com<BR>&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs/dummy-host.example.com-error_log<BR>&nbsp;&nbsp;&nbsp;&nbsp;CustomLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs/dummy-host.example.com-access_log&nbsp;common<BR>ServerAlias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ccjg.test.gov.cn<BR>&lt;/VirtualHost&gt;<BR>以上是一个IP对应两个web程序。<BR>2&gt;&nbsp;&nbsp;&nbsp;&nbsp;在TomCatRoot\conf\server.xml中添加对应的&lt;Host&gt;块<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Host&nbsp;name="ccjg.test.com"&nbsp;debug="0"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appBase="d:/websrv/jj"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unpackWARs="true"&nbsp;autoDeploy="true"&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Context&nbsp;path=""&nbsp;docBase=""&nbsp;debug="0"/&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logger&nbsp;className="org.apache.catalina.logger.FileLogger"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;directory="logs"&nbsp;prefix="cust1_log."&nbsp;suffix=".txt"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timestamp="true"/&gt;&nbsp;<BR>&lt;/Host&gt;&nbsp;<BR>&lt;Host&nbsp;name="ccjg.test.gov.cn"&nbsp;debug="0"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appBase="d:/websrv/jj"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unpackWARs="true"&nbsp;autoDeploy="true"&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Context&nbsp;path=""&nbsp;docBase=""&nbsp;debug="0"/&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logger&nbsp;className="org.apache.catalina.logger.FileLogger"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;directory="logs"&nbsp;prefix="cust1_log."&nbsp;suffix=".txt"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timestamp="true"/&gt;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Host&gt;<BR>到此OK<BR><BR>&nbsp;&nbsp;&nbsp; http://www.javaresearch.org/article/showarticle.jsp?column=556&amp;thread=16115 </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>iis<BR><BR>http://www.cqforest.com/soft/12484.htm</A><img src ="http://www.cnitblog.com/woo/aggbug/1136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-26 04:09 <a href="http://www.cnitblog.com/woo/archive/2005/07/26/1136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows让Apache支持ASP，Ajpa-Server v1.0</title><link>http://www.cnitblog.com/woo/archive/2005/07/24/1106.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Sat, 23 Jul 2005 18:33:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/24/1106.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1106.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/24/1106.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1106.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1106.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;asp2php&nbsp;是一个把&nbsp;ASP&nbsp;转成&nbsp;PHP&nbsp;的程式，作者表示，这个软件只是一个转换程式，而不是一个可以让&nbsp;ASP&nbsp;在&nbsp;Linux&nbsp;底下跑的程式，很多使用者写信给作者表示，希望让&nbsp;ASP&nbsp;可以在&nbsp;Linux&nbsp;上执行，因此作者列了三个可以达到此功能的软件，分别是&nbsp;Chilisoft，InstantASP&nbsp;与&nbsp;Free&nbsp;ASP，不过作者表示，VBScript&nbsp;的效能实在是无法与&nbsp;PHP&nbsp;相比，因此，PHP&nbsp;才是最好的选择，目前&nbsp;asp2php&nbsp;可以转换大部分的&nbsp;ASP&nbsp;程式码，不过，仍还有些&nbsp;bug&nbsp;等待修正。<IFRAME name=import_frame src="http://member.skycn.com/httpd.php?id=2111" frameBorder=no width=1 height=1></IFRAME><BR><BR><A href="http://www.skycn.com/soft/2111.html">http://www.skycn.com/soft/2111.html</A><A href="http://www.skycn.com/soft/18514.html"></A><BR>&nbsp;Ajpa-Server&nbsp;v1.0是Apache+asp+php+cgi+jsp+mysql<BR>组合的一种超级全能服务器套件。外加配置的环境变量：<BR>右击我的电脑—&gt;属性—&gt;高级—&gt;环境变量<BR>变量名：path&nbsp;<BR>变量值：D:\\usr\\Java\\jdk\\bin&nbsp;<BR>变量名：JAVA_HOME&nbsp;<BR>变量值：D:\\usr\\Java\\jdk&nbsp;<BR>变量名：CLASSPATH&nbsp;<BR>变量值：.\\;D:\\usr\\Java\\jdk\\lib\\dt.jar;D:\\usr\\Java\\jdk\\lib\\tools.jar;d:\\usr\\java\\jdbc\\mysql-connector-java\\mysql-connector-java.jar<BR>变量名：resin_home<BR>变量值：D:\\usr\\Java\\resin<BR>使用程序及其版本：<BR>Apache&nbsp;v1.3.31&nbsp;<BR>PHP&nbsp;v4.3.7&nbsp;<BR>Zend&nbsp;Optimizer&nbsp;v2.5.2&nbsp;<BR>iasp&nbsp;2.1.01<BR>jdk&nbsp;jdk-1_5_0-beta2<BR>resin&nbsp;3.0.8<BR>ActivePerl&nbsp;v5.8.0.809&nbsp;<BR>MySQL&nbsp;v4.0.18&nbsp;<BR>phpMyAdmin&nbsp;v2.5.7<BR>&nbsp;&nbsp;&nbsp;&nbsp;MySQL&nbsp;数据库用户名：&nbsp;root&nbsp;，密码：linhu<IFRAME name=import_frame src="http://member.skycn.com/httpd.php?id=18514" frameBorder=no width=1 height=1></IFRAME><BR><A href="http://www.skycn.com/soft/18514.html">http://www.skycn.com/soft/18514.html</A><BR><BR>在网上搜到了无数这方面（Windows下让Apache支持ASP）的文章，可是，可能是我没有找到真正的好文章呢，80％的文章都没有很细致深入的说一说，浅尝辄止。我也来浅尝辄止一会，不过我的主要目的不在于全面翔实的介绍这六个产品，而是为了告诉和我有一样目的的朋友：省省吧，Windows地下支持ASP还是用IIS吧。</P>
<P>这里说一说我在Windows下让Apache支持ASP的痛苦旅程。</P>
<P>首先，Apache支持ASP的产品（模块？解决方案？都不太准确，姑且理解为产品吧，不一定是要卖钱的）大致有这么几种：</P>
<UL>
<LI>
<DIV>SUN ONE ASP</DIV>
<LI>
<DIV>iASP</DIV>
<LI>
<DIV>Apache::ASP</DIV>
<LI>
<DIV>OpenASP</DIV>
<LI>
<DIV>Mod_gb</DIV>
<LI>
<DIV>ModVB</DIV></LI></UL>
<P>下面我就分别说说这几个咚咚的优劣和我体验的过程。</P>
<P>上面列出的六个产品，除了前面两个是收费的，其他的都是开远的项目，我的初衷是做一个Win32平台的支持ASP/JSP/PHP/Perl/Python的绿色服务器套间包，这个套间包可以直接拿来做Internet服务器，而不局限于Web编程爱好者搭建本机测试环境。因此，我首先看中了Open Source的项目。</P>
<H3>SUN ONE ASP</H3>
<P>它应该是六个当中功能最全最值得推荐（相对！）的了，是SUN收购了Chilisoft之后的产品，也就是原来的ChiliASP，SUN把它收购之后改称SUN ONE（Open Network Environment）ASP，后又改称SUN Java System Active Server Page。</P>
<P>我今天下午装上了它，基本上VBScript的大部分功能，它都实现了，而且是跨平台（废话，SUN Java XXX系列能不跨平台吗）的，在Win下可以免费安装使用，而且没有期限的样子，只要你愿意，好像可以一直使用下去。</P>
<P>SUN&nbsp;ASP依赖于JRE（Java运行环境），不过安装包自带了JRE，最新版本是SUN Java ASP 4.0，安装完毕重启Apache即可，好像它把我的Apache 1.3.33认成1.3.27，Apache2.0.52认成2.0.43，GreenAMP的两个版本都可以用，这个我测试过了。</P>
<P>下面说说它让我不爽的地方：</P>
<P>1.并不完全兼容VBscript，也就是说，如果你原来有基于ASP的Web应用，你不一定可以不作任何改动迁移到Apache+SUN&nbsp;ASP下面来，^_^，举个简单的例子，</P>
<P><!--r />=Request.ServerVariables("REMOTE_ADDR")<br /--></P>
<P>这在VBscript中是允许的，IIS上运行会得到正确的结果，不过SUN ASP</P>
<P>必须写成这样：<!--equest.ServerVariables("REMOTE_ADDR"--></P>
<P>2.Parent Paths（父目录）</P>
<P>如果说上面这个问题情有可原，这个父目录的问题就让我费解了，Win2003的IIS默认也是禁用父目录的，那意味着你不能在include中使用../来代替父目录，你必须手工Enable Parent Paths，不过操作还算简单。</P>
<P>SUN ASP就让我有些苦笑不得了，我运行一个简单ASP程序的时候，给我报错，说我不能用../来表示父目录，因为上周刚碰到了一个2003下面类似的问题，我想到可能也是由于安全的原因，SUN ASP默认不开启这个选项，于是去文档里面查，也查到了（顺便说一下，那个离线的HTML文档居然可以用JavaScript搜索，不错），说默认是不开启的，需要管理员设置。</P>
<P>让我恼火的问题出现了，它只说管理员可以开启这个选项，但无论如何就是不告诉你去改那个文件，只说通过管理员控制台去修改设置，于是乎，去找管理员控制台，它说<A href="http://hostname:port/" rel=nofollow><FONT color=#002c99>http://hostname:port</FONT></A>访问，port默认的是5100，可我找了半天，没有发现5100端口有任何服务，又找了半天没有发现类似Apache的httpd.conf的配置文件。</P>
<P>我觉得这是最让人不愉快的，按照它的操作手册不能得到正确的结果，手工修改配置文件它又不告诉我在哪里改，去安装目录和Systemroot又没看到它把配置文件藏在哪。</P>
<P>顺便说一句，我第一次安装SUN ASP的时候，它只给我建了一个SUN ONE ASP（确实叫这个名字，但这个产品现在确实叫做<FONT size=+0>Sun Java System Active Server Pages还特地注明formerly Sun ONE Active Server Pages </FONT>）的目录，目录下面空空如也，自然也就无法运行，于是重装了一次，好了，可以运行了。最奇妙的是，重启之后它又不干活儿了，我的Apache正常，PHP可以工作，目录列表也有，SUN ASP的手册也可以访问，就是一访问ASP页面就找不到服务器。</P>
<P>用到这里，我对SUN有些失望了，一个还算熟悉Win32平台和Web开发环境搭建的人都如此难以上手，SUN ASP如何在开发人员中推广？</P>
<P>也许是我太愚笨，也许是SUN根本就没打算让初学者去碰他们的产品，没打算让客户自己安装和测试——SUN最喜欢做的事情就是让客户花几十上百万买个小服务器，然后送一年技术支持和培训，^_^<BR><BR><A href="http://oldblog.blogchina.com/article_22.663864.html">http://oldblog.blogchina.com/article_22.663864.html</A></P><img src ="http://www.cnitblog.com/woo/aggbug/1106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-24 02:33 <a href="http://www.cnitblog.com/woo/archive/2005/07/24/1106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win2000ADV+apache+php+asp+jsp</title><link>http://www.cnitblog.com/woo/archive/2005/07/24/1105.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Sat, 23 Jul 2005 18:22:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/24/1105.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1105.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/24/1105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1105.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1105.html</trackback:ping><description><![CDATA[<TABLE class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR vAlign=center align=middle>
<TD class=main_ArticleTitle style="WORD-BREAK: break-all" colSpan=2 height=50></TD></TR>
<TR vAlign=center align=middle>
<TD class=main_ArticleSubheading style="WORD-BREAK: break-all" colSpan=2 height=20></TD></TR>
<TR class=left_tdbgall align=middle>
<TD colSpan=2></TD></TR>
<TR>
<TD class=main_tdbg_760 id=fontzoom style="WORD-BREAK: break-all" vAlign=top colSpan=2 height=300>
<P>
<P>
<TABLE style="TABLE-LAYOUT: fixed" cellSpacing=0 cellPadding=0 width="98%" align=center border=0>
<TBODY>
<TR>
<TD class=ReadNewsTitle style="WORD-WRAP: break-word" vAlign=bottom align=middle colSpan=2><B>Win2000ADV+apache+php+asp+jsp<BR></B></TD></TR>
<TR>
<TD align=middle colSpan=2>
<HR align=center width="100%" noShade SIZE=1>
</TD></TR>
<TR>
<TD class=NEWSREADME align=middle colSpan=2></TD></TR>
<TR>
<TD colSpan=2>
<TABLE style="TABLE-LAYOUT: fixed" cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD height=40>&nbsp; </TD></TR>
<TR>
<TD class=news style="WORD-WRAP: break-word"><FONT color=#000000>Win2000ADV+apache+php+asp+jsp（web服务器配置 ）<BR>最近工作的地方使用的微软的iis出了故障吗！！弄了好长时间也没有解决。所以就上网找了一些关于apache支持asp的资料，通过一系列的下载和配置后终于可以使apache支持asp和php了！<BR>————————————————————————————————————<BR>下面就对配置的过程做一下简单的介绍希望可以对需要解决这方面问题的朋友有所帮助！ </FONT>
<P></P>
<P><FONT color=#000000>【一】首先下载软件：<BR>(apache) 我用的是在华军软件园下载的apache_1.3.26-win32-x86-no_src！！<BR>(jdk!) 在首页上面就有连接。<BR>(php4) 不用多说了code-labs上面就有也可以去php的官方网站看看！！<BR>(iasp) 最重要的一个软件了——————————————————————————————————<BR>【二】安装apache<BR>1、双击apache的安装文件，和普通windows程序安装一样，一路点“next”就可以。 <BR>2、安装程序要求你输入你的network domain（网络域名：形如xxx.com）;server domain(服务器域名：形www.xxx.com)和网站管理员的e-mail。有的话就按实填写，个人用户若没有的话可以按格式随便填一下。 <BR>3、到了选择安装路径，本人强烈建议你将安装路径改为“c:\”，因为这样可以省去好多的配置麻烦。 4、一路“next”直至“finish”。安装就结束了。<BR>这时，你的apache已经启动了，你可以在ie地址栏里输入：http://localhost/或http://127.0.0.1看看。在“管理工具”的“服务”项中，也可以找到apache服务的身影了，以后apache就可以作为一项windows2000服务，随着机器的启动而运行了！ <BR>------------------------------------------------------------------------------<BR>【三】配置apache<BR>打开配置文件主要修改的项目是：<BR>(1)、查找documentroot。这个语句指定你的网站路径，也就是你主页放置的目录。你可以使用默认的，也可以自己指定一个，但记住，这句末尾不要加“/”。<BR>(2)、寻找到directoryindex。这就是你站点第一个显示的主页，在index.html的后面加入index.htm index.php index.php3 index.cgi index.pl index.asp等等。注意，每种类型之间都要留一空格！<BR>(3)、特别说明一点就是port(端口号)，如果没安装iis的话，就保持80不要变，否则，就要改一下（因为iis的web服务占据了80），可以改成81等等，或者干脆改iis的默认端口号！随你高兴。<BR>(4)．#bindaddress * 改为 bindaddress 127.0.0.1(用记事本打开/然后点编辑/查找）<BR>其他都是以后深入使用是才要配置的项目了！安装完毕后运行http://localhost/<BR>就可以看见apache的帮助文件了！<BR>-----------------------------------------------------------------------------<BR>【四】安装xxx(注意这个最主要的了)(关闭apache服务)<BR>(1)、下面安装php首先安装php到c:\php4 （别改路径了！否则以后的配置....哼哼）我用的是php的4.0.2版，<BR>(2)、接下来就要拷贝msvcrt.dll到c:\winnt\system32\下面系统就回提示所文件正在被windows使用了，不要紧正常现象！覆盖任何原有文件。<BR>(3)、把 c:\php.ini-dist改名为php.ini,拷贝到c:\winnt下，<BR>(4)、好了现在打开apache的配置文件httpd.conf增加下面的语句：（随便什么地方都可以，但要单独成行）<BR>scriptalias /php4/ "c:/php4/"<BR>addtype application/x-httpd-php4 .php<BR>addtype application/x-httpd-php4 .php3<BR>addtype application/x-httpd-php4 .php4<BR>action application/x-httpd-php4 "/php4/php.exe"<BR>directoryindex index.html<BR>directoryindex index.htm <BR>directoryindex index.php <BR>directoryindex index.php3 <BR>directoryindex index.php4 <BR>directoryindex index.asp<BR>(5)、接下来修改php.ini文件<BR>找到windows extensions项：增加<BR>extension_dir = c:\php4 </FONT></P>
<P><FONT color=#000000>extension=php_zlib.dll</FONT></P>
<P><FONT color=#000000>extension =php_ldap.dll </FONT></P>
<P><FONT color=#000000>extension =php_zlib.dll </FONT></P>
<P><FONT color=#000000>extension =php_calendar.dll </FONT></P>
<P><FONT color=#000000>extension =php_exif.dll </FONT></P>
<P><FONT color=#000000>extension =php_ftp.dll </FONT></P>
<P><FONT color=#000000>extension =php_mssql70.dll （这一项不要加，没有mssql7.0呀）</FONT></P>
<P><FONT color=#000000>extension =php_imap.dll <BR>■ok存盘ko■<BR>在你的documentroot的目录下建立test.php文件<BR>&lt;?phpinfo();?&gt;<BR>ok看见php的测试页面了！！至此php的配置已经完成了！<BR>下面安装jdk也是进行默认安装就可以了！之后在windows的环境变量里面增加path变量值c:\j2sdk*\bin（*：不同版本的安装路径名不同）<BR>好了下面安装iasp使用默认安装就可以了！在安装过程后软件会提示你进行web server的设置首先选择：<BR>instant asp native servlet surport 选项接下来选择apache server<BR>之后要求你选择apche的版本号和httpd.conf的路径选择好后系统自动进行配置如果一切顺利就可以测试了！！<BR>建立test.asp<BR>&lt;%response.write("hell world!")%&gt;<BR>现在运行http://localhost/test.asp，看到helloworld！好了一切搞定有可以使用apache了！！！<BR>------------------------------------------------------------------------<BR>【五】、上面说到了windows+apache+php+asp的运行环境了今天来说说在这个基础上使apache也可以支持jsp的运行。<BR>1：所需软件resin（resin2.1.4)resin http://www.caochu.com<BR>下面说说怎么安装：<BR>resin在下载后是.zip文件只要简单的解压缩到指定的目录就可以了这里我使用的是c:\resin-ee-2.1.4 利用命令 c:\resin-ee-2.1.4\bin\httpd.exe -install(remove)将resin作为win2000的一个service<BR>ok！下面找到win2000的环境变量"控制面板--&gt;系统--&gt;高级--&gt;环境变量“<BR>增加变量"resin_home"变量值"c:\resin-ee-2.1.4"如果你已经安装了 jdk那么就不需要设置什么了！没有的话就看看的我的上一篇文章！！！ok向下~~<BR>现在修改apache的设置文件httpd.conf假如下面的代码：<BR>loadmodule caucho_module c:/resin-ee-2.1.4/libexec/apache-1.3/mod_caucho.dll<BR>addmodule mod_caucho.c</FONT></P>
<P><FONT color=#000000>cauchohost localhost 6802<BR>addhandler caucho-request jsp<BR>&lt;location /servlet/*&gt;<BR>sethandler caucho-request<BR>&lt;/location&gt;<BR>修改resin的配置文件c:\resin-ee-2.1.4\conf\resin.conf<BR>找到这一行：&lt;app-dir&gt;doc&lt;/app-dir&gt;<BR>改成：&lt;app-dir&gt;(你的apache的documentroot默认是apache/htdocs/&lt;/app-dir&gt;<BR>重起 apache and resin<BR>在你的web root 目录下建立test.jsp内容如下：<BR>&lt;%@ page language=javascript %&gt;<BR>2 + 2 = &lt;%= 2 + 2 %&gt; <BR>在浏览器中执行http://localhost/test.jsp<BR>如果看见了2+2=4，那么恭喜你了你成功使apache和resin 结合到一起了！<BR>剩下的就是数据库的问题了等等在写吧！<BR>【六】、php的优化（可有可无）<BR>　　安装zend optimizer（zend优化器）<BR>　　zend optimizer(以下简称zo)用优化代码的方法来提高php 4.0应用程序的执行速度。实现的原理是对那些在被最终执行之前由运行编译器(run-time compiler)产生的代码进行优化。 <BR>　　 一般情况下，执行使用zo的php程序比不使用的要快40%到100%。这意味着网站的访问者可以更快的浏览网页，从而完成更多的事务，创造更好的客户满意度。 <BR>　　1、终止apache服务，并且一定要使用zo的windows版（一定要记住）<BR>　　2、 把zendoptimizer.dll拷贝到这个目录<BR>　　c:\zendoptimizer<BR>　　3、 把下列行加入php.ini，不要加入任何空格<BR>　　zend_optimizer.optimization_level=15<BR>　　zend_extension_ts="zo的安装目录\zendoptimizer.dll"<BR>　　4、重启apache。<BR>　　重新运行刚才已编好的test.php程序！可以发现多了一行：<BR>　　with zend optimizer v1.0.0, copyright (c) 1998-2000, by zend technologies<BR>　　这表示zo已经安装成功！！<BR>　　如果你担心自己辛辛苦苦编写的php代码外泻的话！可以考虑使用zend encoder,它可以将php程序加以编码後执行，但是2400美元的软件费用也实在是太高！！（不过可以免费试用30天）</FONT></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></P></TD></TR></TBODY></TABLE><A href="http://code.rwen.cn/Article/Class1/200405/20040528120026.html">http://code.rwen.cn/Article/Class1/200405/20040528120026.html</A><img src ="http://www.cnitblog.com/woo/aggbug/1105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-24 02:22 <a href="http://www.cnitblog.com/woo/archive/2005/07/24/1105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 2.1, Lomboz 2.1.3 and Tomcat 5 的 JSP 调试</title><link>http://www.cnitblog.com/woo/archive/2005/07/20/1072.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Tue, 19 Jul 2005 22:19:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/20/1072.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1072.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/20/1072.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1072.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1072.html</trackback:ping><description><![CDATA[<P><A href="http://www.zahui.com/html/6/13087.htm">http://www.zahui.com/html/6/13087.htm</A><BR>过去我都用手工写jsp,甚至struts+hibernate的，今天在网上找了资料，学会了怎么用eclipse2.1+lomboz+tomcat5调试jsp,提高了编写代码的效率。</P>
<P>我看了dawave的3篇文章和另外一篇文章才搞定的。<BR>文章链接如下：<BR><A href="http://blog.csdn.net/dawave/archive/2004/07/22/49307.aspx">http://blog.csdn.net/dawave/archive/2004/07/22/49307.aspx</A><BR><A href="http://blog.csdn.net/dawave/archive/2004/07/23/50242.aspx">http://blog.csdn.net/dawave/archive/2004/07/23/50242.aspx</A><BR><A href="http://blog.csdn.net/dawave/archive/2004/07/25/51879.aspx">http://blog.csdn.net/dawave/archive/2004/07/25/51879.aspx</A><BR><A href="http://coolbear.yculblog.com/post-100318.html">http://coolbear.yculblog.com/post-100318.html</A></P>
<P>dawave在第3篇文章中写道：<BR>===========================================<BR>启动tomcat前还有一个重要的设置，为你的web project建立一个tomcat的配置文件，位置在tomcat目录下的conf\Catalina\localhost，文件可以起任意名字，但一定要用xml的扩展名（总之要符合tomcat的规矩了）。配置文件的内容很简单，比如我的project 叫blog，那配置文件（blog.xml）的内容就是：</P>
<P>&lt; CONTEXT workdir="h:/project/blog/j2src" reloadable="true" debug="0" docbase="h:/project/blog/blog" path="/blog" &gt;<BR>===========================================<BR>但是我试验下来，发现tomcat启动失败，说blog.xml语法有问题。<BR>然后我用了另一篇文章的办法，在tomcat的server.xml文件中作了修改后，成功。<BR><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD><SPAN class=atitle>使用Eclipse开发Jsp</SPAN></TD>
<TD width=8><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=8 border=0></TD>
<TD align=right width=180><NOBR>
<TABLE cellSpacing=0 cellPadding=0>
<TBODY>
<TR vAlign=top>
<TD align=right></TD>
<TD width=46>
<FORM action=https://www-130.ibm.com/developerworks/secure/email-it.jsp><INPUT type=hidden value="Eclipse作为一个java应用的IDE，使用非常方便，但是对于Jsp的开发支持还显得不够，在这里向大家推荐一个eclipse的plugins来协助JSP开发。这个名称叫lomboz，不但支持JSP语法高亮显示，还有Code Assist功能，可以与Jbuilder媲美。下面简要介绍一下eclipse2.1结合Tomcat开发Jsp的过程。" name=body><INPUT type=hidden value=使用Eclipse开发Jsp name=subject><INPUT type=hidden value=cn name=lang><INPUT type=image src="http://www-128.ibm.com/developerworks/cn/i/icon-email.gif" border=0 name=email></FORM></TD></TR></TBODY></TABLE></NOBR></TD>
<TD width=6><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=6 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=5><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=100 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=5><IMG height=8 alt="" src="http://www.ibm.com/i/c.gif" width=100 border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width=5><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=5 border=0></TD>
<TD width="100%">
<TABLE cellSpacing=0 cellPadding=0 width=168 align=right border=0>
<TBODY>
<TR>
<TD width=8><IMG height=21 alt="" src="http://www.ibm.com/i/c.gif" width=5></TD>
<TD width=160>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerworks/cn/i/bg-gold.gif height=5><B>内容：</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/index.html#1">开发环境</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/index.html#2">建立工程</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR><!--Standard links for every dw-article-->
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/index.html#resources">参考资料 </A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/index.html#author1">关于作者</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/index.html#rating">对本文的评价</A></TD></TR>
<TR>
<TD><IMG height=10 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerworks/cn/i/bg-gold.gif height=5><B>订阅:</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=1 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/newsletter/">developerWorks 时事通讯</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=150 bgColor=#000000 colSpan=2 height=2><IMG height=2 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD width=150 bgColor=#ffffff colSpan=2 height=2><IMG height=2 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/index.html#author1"><NAME>左锦</NAME></A><BR><BR>2003 年 4 月 21 日</P>
<BLOCKQUOTE>Eclipse作为一个java应用的IDE，使用非常方便，但是对于Jsp的开发支持还显得不够，在这里向大家推荐一个eclipse的plugins来协助JSP开发。这个名称叫lomboz，不但支持JSP语法高亮显示，还有Code Assist功能，可以与Jbuilder媲美。下面简要介绍一下eclipse2.1结合Tomcat开发Jsp的过程。</BLOCKQUOTE>
<P><A name=1><SPAN class=atitle2>开发环境</SPAN></A><BR>
<OL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/">
<LI>软件 
<P>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD width=150>名称</TD>
<TD width=200>安装路径</TD>
<TD width=200>下载网站</TD></TR>
<TR>
<TD>j2sdk1.4.1_02</TD>
<TD>D:\j2sdk1.4.1_02</TD>
<TD>http://java.sun.com</TD></TR>
<TR>
<TD>eclipse2.1</TD>
<TD>D:\eclipse2.1</TD>
<TD>http://www.eclipse.org/</TD></TR>
<TR>
<TD>Tomcat 4.0</TD>
<TD>E:\Tomcat 4.0</TD>
<TD>http://java.apache.org/</TD></TR>
<TR>
<TD>lomboz.21</TD>
<TD>D:\eclipse2.1\plugins</TD>
<TD>http://www.objectlearn.com/</TD></TR></TBODY></TABLE></P>注意： <BR>
<UL>
<LI>如果你使用eclipse2.0，那么请你下载2.1，在2.0下我尝试很多次都没有配置好lomboz.。 
<LI>以上是我电脑的安装路径，方便大家对照后面的配置进行修改 </LI></UL>
<LI>配置软件 
<P>下载好各软件，依次安装JDK，Tomcat, eclipse2.1后, 首先保证你的tomcat和eclipse2.1能够独立运行。 </P>
<P>把lomboz.21.zip解压缩后到把com.objectlearn.jdt.j2ee整个文件夹复制到eclipse2.1的plugins下。</P>
<P><B>配置eclipse2.1</B> </P>
<P>1．启动eclipse2.1,进入菜单【window】---&gt;【Preference】---&gt;【Java】---&gt;【Classpath variables】选择【New】建立name为JDK_TOOLS Path为你JDK的Tools.jar的路径.[如：D:/j2sdk1.4.1_02/lib/tools.jar] </P>
<P>同上，新建name为TOMCAT，path为Tomcat安装目录.[如：E:/Tomcat 4.0] 进入【window】---&gt;【Customize Perspective】---&gt;【Window&gt;Show View】 选择Lomboz J2EE View 保存退出之后在你的eclipse2.1的工具栏中，如图位置，多一个按钮 </P>
<P><A name=N100AE><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image002.jpg"> </P>
<P>2．进入【window】－【Preference】－【Java】－【new Project】，如图设置</P>
<P><A name=N100BD><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image004.jpg"> </P>
<P><B>配置lomboz.</B> </P>
<P>启动eclipse2.1,菜单【window】－【Preference】选择【Lomboz】如下图</P>
<P><A name=N100D2><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image006.jpg"> </P>
<P>在【LomBoz】的【JDK Tools.jar】设定你的JDK中的tools.jar的完全路径(包括文件)[如：D:\j2sdk1.4.1_02\lib\tools.jar],对照修改即可。</P>
<P>选择【Server Definitions】如图</P>
<P><A name=N100E4><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image008.jpg"> </P>
<P>选择 【Server types】中选择 Apache Tomcat v4.0.1/4.0.2设定好你的Tomcat的目录，参照上图设定,如Application Server Directory 为E:/Tomcat 4.0，ClassPath Varible name 为上面设定的TOMCAT Classpath Varible 为E:/Tomcat 4.0 点【Apply】按钮，再查看【ClassPath】选项页，如果设置正确，那么应该是如下图所示,如果设置错误，Server Libraries会显示错误标记。</P>
<P><A name=N100F3><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image009.jpg"> </P></LI></OL>
<P></P>
<P><A name=2><SPAN class=atitle2>建立工程</SPAN></A><BR></P>
<P>操作过程：</P>
<P>菜单【new】－【Project】选择【Lomboz J2EE Wizards】－【Lomboz J2EE Project】，下一步输入你的工程名称，如图所示</P>
<P><A name=N10110><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image010.jpg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>下一步</P>
<P>选择【Web Modules】添加Module 如图所示</P>
<P><A name=N10122><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image011.jpg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>输入 Module名称 [如：test]</P>
<P>选择Targeted Servers ,选择配置好的【Apache Tomcat v 4.01/4.02】,添加后，完成，如图所示[界面可能跟个人的界面设置不同而有所不同]</P>
<P><A name=N10134><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image013.jpg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>点上面介绍的的那个hint为 Press to open a J2EE project Outliner的按钮，打开Lomboz J2EE View，如图所示,选择Run Server菜单,启动Tomcat，在你的浏览器输入 http://localhost:8080/test/index.jsp看看。显示的页面是index.jsp。</P>
<P><A name=N10143><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image015.jpg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P><A name=N1014F><B></B></A><BR><IMG alt="" src="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/images/image016.jpg" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>就这么简单，其实Lomboz不仅仅支持Jsp，还支持EJB的开发，部署和测试等其他J2EE应用。可以参照LOMBOZ Tutorials使用。</P></TD></TR></TBODY></TABLE></P><A href="http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/index.html">http://www-128.ibm.com/developerworks/cn/java/l-jsp-eclipse/index.html</A><img src ="http://www.cnitblog.com/woo/aggbug/1072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-20 06:19 <a href="http://www.cnitblog.com/woo/archive/2005/07/20/1072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Eclipse中开发struts应用程序 </title><link>http://www.cnitblog.com/woo/archive/2005/07/17/1025.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Sat, 16 Jul 2005 23:04:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/17/1025.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1025.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/17/1025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1025.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1025.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width=5><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=5 border=0></TD>
<TD width="100%">
<TABLE cellSpacing=0 cellPadding=0 width=168 align=right border=0>
<TBODY>
<TR>
<TD width=8><IMG height=21 alt="" src="http://www.ibm.com/i/c.gif" width=5></TD>
<TD width=160>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerworks/cn/i/bg-gold.gif height=5><B>内容：</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/#1">一． 下载并安装Easy Struts包</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/#2">二． 配置和开发struts应用项目</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/#3">三． 总结</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR><!--Standard links for every dw-article-->
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/#resources">参考资料 </A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/#author1">关于作者</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/#rating">对本文的评价</A></TD></TR>
<TR>
<TD><IMG height=10 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerworks/cn/i/bg-gold.gif height=5><B>订阅:</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=1 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-128.ibm.com/developerworks/cn/newsletter/">developerWorks 时事通讯</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=150 bgColor=#000000 colSpan=2 height=2><IMG height=2 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR>
<TR>
<TD width=150 bgColor=#ffffff colSpan=2 height=2><IMG height=2 alt="" src="http://www.ibm.com/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<P><NAME><A href="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/">http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/</A><BR><BR>在本文中作者向大家介绍了如何配置基于eclipse的easy structs插件，并介绍了如何结合使用easy structs和eclipes来开发struts的应用。</P>
<P><A name=1><SPAN class=atitle2>一． 下载并安装Easy Struts包</SPAN></A><BR></P>
<P>1． Easy Struts是开放源代码组织sourceforge.net上的一个项目，目前最新的版本是0.64，可以在它的网站 <A href="http://sourceforge.net/projects/easystruts" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/">http://sourceforge.net/projects/easystruts</A>上下载压缩文件org.easystruts.eclipse_0.6.4.zip (Eclipse的安装这里不再描述) </P>
<P>2． 将下载后的压缩包解压到{ECLIPSE}\plugins目录下，其中{ECLIPSE}为Eclipse所在的目录。应该注意的是解压后plugins目录下应该多一个子目录，目录名为：com.cross.easystruts.eclipse_[ver]，[ver]为相应的版本号。</P>
<P>3． Easy Struts的初始化设置：启动Eclipse，通过菜单Windows-&gt;Preferences打开设置窗口。窗口的左边会多出一个选项：Easy Struts。如下图所示：</P>
<P><A name=N10055><B></B></A><BR><IMG height=249 alt=图1 src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/image001.png" width=191 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>图1 
<P>在设置Easy Struts之前要先准备好struts所需的文件（可在Jakarta网站上下载），包括struts.jar，然后是几个用于定义标签库的描述文件包括：struts_html.tld、struts_bean.tld、struts_logic.tld。点击设置窗口左边的Easy Struts后出现如下图2：Easy Struts的初始化设置界面。根据所下载struts的版本选择struts 1.0或者struts 1.1，最新的版本都是struts 1.1。在这里我们选择struts 1.1并在struts 1.1所需的库文件中找到并添加struts.jar文件。在struts 1.1所需的类型库描述文件中建议至少加入前面提到的三个描述文件分别是：struts_html.tld、struts_bean.tld、struts_logic.tld，这三个文件会在创建struts应用项目时自动拷贝到项目的WEB-INF目录下。设置界面上的其他内容基本上按照默认的值即可，无需改动。好了，点击OK按钮关闭设置对话框使设置生效。至此我们已经完成Easy Struts的基本设置可以开始struts的开发了。</P>
<P><A name=N10066><B></B></A><BR><IMG height=449 alt=图2 src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/image003.png" width=451 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>图2 
<P><A name=2><SPAN class=atitle2>二． 配置和开发struts应用项目</SPAN></A><BR></P>
<P>1． 新建JAVA项目并设置为支持Easy Struts：新建一个JAVA项目，暂且把这个项目命名为：StrutsDemo，新建完项目后除了Eclipse本身用来描述JAVA项目的两个文件.project和.classpath外并没有其他任何文件。为了使该项目集成Easy Struts，只需点击工具条上的新建图标，选择Java-&gt;Easy Struts-&gt;Add Easy Struts Support并点击下一步按钮，如下图3所示：</P>
<P><A name=N1007F><B></B></A><BR><IMG height=500 alt=图3 src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/image005.png" width=500 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>图3 
<P>点击下一步按钮后到了Easy Struts项目一些基本信息的输入界面，如下图4所示：</P>
<P><A name=N10090><B></B></A><BR><IMG height=500 alt=图4 src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/image007.png" width=597 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>图4 
<P>在图4的界面中输入web应用程序的目录名，例如struts_demo，发布的时候只需要把该目录打包成WAR文件即可。根据应用服务器的实际情况选择web应用程序的版本，建议使用2.3，目前大部分应用服务器的主流版本都支持2.3版本的WEB应用程序。选择Struts 1.1。修改Easy Struts自动产生的程序包名，例如test.struts。点击完成按钮后Easy Struts会自动产生文件.easystrutsplugin以及创建刚刚在设置界面中输入的web应用服务器目录名的目录，该目录包含WEB-INF子目录，Easy Struts会自动拷贝几个tld文件到该目录下，我们还必须手工的将struts.jar文件拷贝到WEB-INF\lib目录下。</P>
<P>同时产生一个配置文件：ApplicationResources.properties，这个文件可以用来存放用户自己的配置信息。该配置文件支持多语言，struts会自动根据环境配置信息来获取相应的配置文件，例如ApplicationResources_zh_CN.properties对应的是中文简体的配置信息。web.xml也在这个时候产生，该文件已经自动定义好ActionServlet入口，以及这个servlet所需的参数，用户无需再行配置，极大的方便了初学者学习和使用struts。要改变刚刚所输入的信息只需要打开项目的属性对话框即可修改这些配置。</P>
<P>2． 开发struts应用程序：在开发struts应用程序之前还有一项准备工作要做，需要给项目的类路径中添加struts.jar以及servlet.jar这两个文件否则新建struts程序时将会有一大堆错误信息，并设置项目的默认输出文件夹为\struts_demo\WEB-INF\classes。在解压完后，Easy Struts插件已经在Eclipse开发环境中添加了几个用于创建struts相关程序的向导。点击工具条上的新建图标打开图3所示的对话框即可选择与struts相关的程序的开发，例如最常用的Action类的开发，Form类的开发等等。下面我们着重介绍一下Action类的开发。</P>
<P>在新建对话框中选择新建Easy Action并点击下一步按钮</P>
<P><A name=N100AA><B></B></A><BR><IMG height=607 alt=图5 src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/image009.png" width=580 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>图5 
<P>在用例文本框(Use case)中输入Action类的名称，Easy Struts会自动根据你输入的值更新对应的URL请求的路径(path)以及Action类名(Type)。在这个界面中Module name文本框指的是当有多个struts_config文件时选择其他文件，默认的是使用struts_config.xml。而Form name是当Action类需要与一个Form类对应时做的选择。其他信息使用默认的值，点击下一步添加错误处理，以及页面的跳转处理。点击完成按钮即已完成Action类的向导，Easy Struts自动产生类XxxxAction.java，并在struts_config.xml做相应的配置信息。所有的这些向导也可以通过双击项目文件struts_config.xml，并在struts_config.xml界面中操作链接来完成，这是一个可视化的界面用来编辑struts_config.xml内容。如下图所示：</P>
<P><A name=N100BB><B></B></A><BR><IMG height=453 alt=图6 src="http://www-128.ibm.com/developerworks/cn/java/l-eclipse-struts/image011.png" width=693 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/"> </P>图6 
<P><A name=3><SPAN class=atitle2>三． 总结</SPAN></A><BR></P>
<P>Easy Struts现在还是一个开发中的版本，但是其具有的强大的功能以及易用性已经显露无疑。通过与Eclipse的结合使Struts的开发变成一件非常简单的事情。本文只是简单的介绍了如何开始来使用Easy Struts这个插件帮助我们开发struts应用程序，具体与struts相关的开发已经有非常多的文章介绍了，况且这也不是我们的本意，所以此处并没有做深入的叙述。总而言之，Easy Struts还有很多功能需要我们继续的发掘。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<P></P>
<P><A href="http://www.eclipse.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/">www.eclipse.org</A>Eclipse的官方网站； </P>
<P><A href="http://sourceforge.net/projects/easystruts" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/">http://sourceforge.net/projects/easystruts</A>Easy Struts项目网站 </P>
<P><A href="http://jakarta.apache.org/struts/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:dw="http://www.ibm.com/developerworks/">http://jakarta.apache.org/struts/index.html</A>Apache Struts网站 </P></TD></TR></TBODY></TABLE><img src ="http://www.cnitblog.com/woo/aggbug/1025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-17 07:04 <a href="http://www.cnitblog.com/woo/archive/2005/07/17/1025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>j2ee sample</title><link>http://www.cnitblog.com/woo/archive/2005/07/17/1024.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Sat, 16 Jul 2005 22:58:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/17/1024.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/1024.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/17/1024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/1024.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/1024.html</trackback:ping><description><![CDATA[<P><STRONG><FONT size=2>BBS-CS 天乙社区 v6.0.1(含源码) </FONT></STRONG><BR>天乙社区6.0是一套基于JAVA技术的网络虚拟社区，采用了Hibernate+Spring+Struts的轻量级J2EE框架，较5.x的内核有又了很大的提高，主要特点有： <BR>&nbsp;&nbsp;&nbsp;&nbsp;1、跨平台：天乙社区完全具有java语言跨平台的特性，可以方便的运行在windows、linux、unix等操作系统上。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;2、支持多数据库：天乙社区6.0采用了Hibernate作为数据库持久化的解决方案，支持DB2、PostgreSQL、MySQL、Oracle、Sybase、Microsoft SQL Server、SAP DB、Informix、HypersonicSQL、Ingres、Progress、Mckoi SQL、Interbase、Pointbase、FrontBase、Firebird等多种数据。<BR>&nbsp;&nbsp;&nbsp;&nbsp;3、国际化：天乙社区6.0采用完全的国际化内核，同时支持多种语言。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;4、全文检索：天乙社区6.0采用Lucene全文检索，并支持完全国际化多语言的全文检索。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;5、MVC框架：天乙社区6.0继续了5.x的Struts框架，但经过优化，WEB端更加简洁高效。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;6、集群支持：系统可以运行在集群上。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;7、功能方面：大大加强了管理功能，用户可以多样化的定制系统的各项信息，包括用户级别、封锁IP、过滤字等等，论坛功能上主要增加了投票帖、上传附件类型多样、帖子中显示用户信息等等功能。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;8、开源：天乙社区从开始就是一个开源项目，希望有更多的人能够参与进来，运用、学习先进的技术。&nbsp;</P>
<P><BR>凌云论坛(LyBBS)的架构是基于Jsp/JavaBean的模式，这种模式非常稳定，而且，速度比较优越，是被全球企业证明的可以高效稳定的进行企业运算开发的平台。</P><img src ="http://www.cnitblog.com/woo/aggbug/1024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-17 06:58 <a href="http://www.cnitblog.com/woo/archive/2005/07/17/1024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不做技术狂人,要做牛人  </title><link>http://www.cnitblog.com/woo/archive/2005/07/15/998.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Thu, 14 Jul 2005 16:53:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/15/998.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/998.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/15/998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/998.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/998.html</trackback:ping><description><![CDATA[<TABLE cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD width=10></TD>
<TD><SPAN id=ArticleContent1_ArticleContent1_lblContent>看了这篇名为<A href="http://blog.csdn.net/whoopee/archive/2005/06/27/404172.aspx">《开发工程师之路》</A>的文章，颇有感慨。特写此文与所有java爱好者共勉。<BR>对于我个人来说，从事技术工作已快有两年了，有时问问自己，这些年来到底真正掌握的技术有多少？自己天天都做了些什么？如今有什么值得回味的呢？<BR><BR>一想到这些问题，就不免身冒冷汗。仔细一想，这两年来，每天除了工作就是学习（当然周末有例外），新技术，新工具，一个个的学，一个个的用。到如今呢，说学了什么？能列出来的不就是java相关的东西吗?技术方面:Servlet,JSP(TagLib),EJB,JNDI,JDBC,JMail,JMS,XML,UML,AOP,ICO,JMX。工具方面呢？开源的Ant,Log4j,Exe4j,Junit,dom4j,Xdoclet,Resin,Tomcat,Eclipse,Struts,Hibernate,Spring.其它工具:Jboss,Jbuild等，另外就是学了一些设计模式，项目管理相关的知识，再就是windows,linux下的一些其它东东。留下的看得见的东西可能就是做过的七八来个项目和一堆读书笔记(由于时间原因，未放在网上，我会陆续发表的，请关注)。<BR>从整个JAVA的技术领域来看，我所学的只能算冰山一角，还有很多东西只是听说过而已,就拿J2EE来说，就有Web Services,JSF,SOAP,WSDL,JAAS还有其它JAVA技术JINI,JWS等等,还有当前正在流行的N多开源项目：HiveMind，Turbine，Tapestry，Ruby... 当然,还有很多J2SE的技术未包括：像java 2D,java sound,而且这还不包括J2ME的内容。对于已经学习过的东西，可能很快就被遗忘了，因为学的越多，忘记越多。要真正掌握一个领域内完成的知识体系，可能就像这篇文章<A href="http://gentoo.hsefz.com/linux/Linux%20Forum/public/938175749921/forum_topic">《在十年里学会编程》</A> 里所说的，真的需要十年时间！！！十年以后，就可成为一个领域内的专家？通才？不，很有可能是一个“什么都会”的技术狂人。“什么都会”意味什么？可能，目前流行工具你都会，主流技术你能用，但是新的技术，新的工具不断的涌现，你还需要不断地学。所以说，要做这样的技术狂人十年是远不够的！然而，象这样学习，十年，对于 我来说太长了！(当然，学习是一辈子的事,活到老，学到老嘛 ^ - ^ ) 
<P></P>
<P><FONT size=2>不要做技术狂人，要做就做技术牛人！！！人的精力是有限的，对于技术，我认为不可盲目追求，要适可而止。<BR>为什么这么说呢？难道自己对技术没兴趣了，不。关键是目前的技术范围太大，太广，一个人不可能什么都懂，什么都会。当然这句话的前提是在时间有限的情况下。那么，如何在有限的时间里掌握更多的知识呢？</FONT></P>
<P><FONT size=2>我觉得首先对所学的东西有一个着重点的认识，抓重点学。<BR>什么是重要的？对于java来说，j2se是最重要的。最重要的也是最基础的，学好的基础的，其它学起来不仅轻松而且是效率高。学好了j2se里最基础的，学J2EE就快了。不要一开始就是EJB，JMS，当然这些技术可先了解。<STRONG>学好了j2EE</STRONG>，再来用Struts,Hibernate,Spring岂不是小儿科，<STRONG>三天搞定</STRONG>！！！声明一下，前而说的“<STRONG>学好了j2EE</STRONG>”，是指完全掌握其原理，对技术细节要有一定了解,至于其它方面，只需知道怎么查文档就可以了,也就是说对于某一细节，可快速查找到相应文档即可。再一个，前面说所的“三天搞定”，是指知道其原理，学会简单使用方法（复杂的使用查文档不就完了），实现细节就不用管了，因为有java基础，还愁不知道是怎么实现的?如果你起Struts,Hibernate,Spring觉得很难，一句话，基础知识没学好！这里不排除通过用Struts,Hibernate,Spring来学基础的人。<BR>总之，学基础的，没错!什么是基础的？借用一名流行的话：一流的公司卖标准,二流的公司卖技术,三流的公司卖产品，标准就是基础。</FONT></P>
<P><FONT size=2>其次，不要在掌握了基础之后，自己写一些所谓的工具。因为这些工具如果有用，你能想到的，别人肯定也想到了，所以没有必要花时间去创造东西，而是去寻找别人已经做好了的东西，学习使用别人的东西。<A href="http://sourceforge.net/">http://sourceforge.net</A>上有N多工具供你选择。如果你想到的别人没有呢，那好啊，做成项目（见下）</FONT></P>
<P><FONT size=2>最后，用你可以用你所学的开发出一两个完整的项目。不要太多，两个就够!项目一定要完整，而且还要实用，最好从实际需求出发，整合自己所学的知识和第三方的工具。</FONT></P>
<P><FONT size=2>另外，在自己的blog上多发表文章,多与人探讨。</FONT></P>
<P><FONT size=2>做到以上四点,不用十年，绝对可成技术牛人!希望所有的java爱好者成为技术牛人!!!<BR></FONT></P></SPAN><BR>
<DIV style="FONT-SIZE: 14px; LINE-HEIGHT: 25px"><STRONG>作者Blog：</STRONG><A id=ArticleContent1_ArticleContent1_AuthorBlogLink href="http://blog.csdn.net/sylilzy/" target=_blank>http://blog.csdn.net/sylilzy/</A></DIV></TD></TR></TBODY></TABLE><img src ="http://www.cnitblog.com/woo/aggbug/998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-15 00:53 <a href="http://www.cnitblog.com/woo/archive/2005/07/15/998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初学者如何开发出一个高质量的J2EE系统</title><link>http://www.cnitblog.com/woo/archive/2005/07/15/997.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Thu, 14 Jul 2005 16:48:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/15/997.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/997.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/15/997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/997.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/997.html</trackback:ping><description><![CDATA[<TABLE cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD height=19></TD></TR>
<TR>
<TD width=10></TD>
<TD><SPAN id=ArticleContent1_ArticleContent1_lblContent>
<P></P>
<P>J2EE学习者越来越多，J2EE本身技术不断在发展，涌现出各种概念，本文章试图从一种容易理解的角度对这些概念向初学者进行解释，以便掌握学习J2EE学习方向。</P>
<P>　　首先我们需要知道Java和J2EE是两个不同概念，Java不只是指一种语言，已经代表与微软不同的另外一个巨大阵营，所以Java有时是指一种软件系统的流派，当然目前主要是.NET和Java两大主流体系。</P>
<P>　　J2EE可以说指Java在数据库信息系统上实现，数据库信息系统从早期的dBase、到Delphi/VB等C/S结构，发展到B/S（Browser浏览器/Server服务器）结构，而J2EE主要是指B/S结构的实现。</P>
<P>　　J2EE又是一种框架和标准，框架类似API、库的概念，但是要超出它们。如果需要详细了解框架，可先从<A href="http://www.jdon.com/designpatterns/index.htm" target=_blank>设计模式</A>开始学习。</P>
<P>　　J2EE是一个虚的大的概念，J2EE标准主要有三种子技术标准：WEB技术、EJB技术和JMS，谈到J2EE应该说最终要落实到这三个子概念上。</P>
<P>　　这三种技术的每个技术在应用时都涉及两个部分：容器部分和应用部分，Web容器也是指Jsp/Servlet容器，你如果要开发一个Web应用，无论是编译或运行，都必须要有Jsp/Servlet库或API支持（除了JDK/J2SE以外）。</P>
<P>　　Web技术中除了Jsp/Servlet技术外，还需要JavaBeans或Java Class实现一些功能或者包装携带数据，所以Web技术最初裸体简称为Jsp/Servlet+JavaBeans系统。</P>
<P>　　谈到JavaBeans技术，就涉及到组件构件技术（component），这是Java的核心基础部分，很多软件设计概念（设计模式）都是通过JavaBeans实现的。</P>
<P>　　JavaBeans不属于J2EE概念范畴中，如果一个JavaBeans对象被Web技术（也就是Jsp/Servlet）调用，那么JavaBeans就运行在J2EE的Web容器中；如果它被EJB调用，它就运行在EJB容器中。</P>
<P>　　EJB（企业JavaBeans）是普通JavaBeans的一种提升和规范，因为企业信息系统开发中需要一个可伸缩的性能和事务、安全机制，这样能保证企业系统平滑发展，而不是发展到一种规模重新更换一套软件系统。</P>
<P>　　至此，JavaBeans组件发展到EJB后，并不是说以前的那种JavaBeans形式就消失了，这就自然形成了两种JavaBeans技术：EJB和POJO，POJO完全不同于EJB概念，指的是普通JavaBeans，而且这个JavaBeans不依附某种框架，或者干脆可以说：这个JavaBeans是你为这个应用程序单独开发创建的。</P>
<P>　　J2EE应用系统开发工具有很多：如JBuilder、Eclipse等，这些IDE首先是Java开发工具，也就是说，它们首要基本功能是可以开发出JavaBeans或Java class，但是如果要开发出J2EE系统，就要落实到要么是Web技术或EJB技术，那么就有可能要一些专门模块功能(如eclipse需要lomboz插件)，最重要的是，因为J2EE系统区分为容器和应用两个部分，所以，在任何开发工具中开发J2EE都需要指定J2EE容器。</P>
<P>　　J2EE容器分为WEB容器和EJB容器，Tomcat/Resin是Web容器；JBoss是EJB容器+Web容器等，其中Web容器直接使用Tomcat实现的。所以你开发的Web应用程序可以在上面两种容器运行，而你开发的Web+EJB应用则只可以在JBoss服务器上运行，商业产品Websphere/Weblogic等和JBoss属于同一种性质。</P>
<P>　　J2EE容器也称为J2EE服务器，大部分时它们概念是一致的。</P>
<P>　　如果你的J2EE应用系统的数据库连接是通过JNDI获得，也就是说是从容器中获得，那么你的J2EE应用系统基本与数据库无关，如果你在你的J2EE应用系统耦合了数据库JDBC驱动的配置，那么你的J2EE应用系统就有数据库概念色彩，作为一个成熟需要推广的J2EE应用系统，不推荐和具体数据库耦合，当然这其中如何保证J2EE应用系统运行性能又是体现你的设计水平了。</P>
<P>　　衡量J2EE应用系统设计开发水平高低的标准就是：解耦性；你的应用系统各个功能是否能够彻底脱离？是否不相互依赖，也只有这样，才能体现可维护性、可拓展性的软件设计目标。</P>
<P>　　为了达到这个目的，诞生各种框架概念，J2EE框架标准将一个系统划分为WEB和EJB主要部分，当然我们有时不是以这个具体技术区分，而是从设计上抽象为表现层、服务层和持久层，这三个层次从一个高度将J2EE分离开来，实现解耦目的。</P>
<P>　　因此，我们实际编程中，也要将自己的功能向这三个层次上靠，做到大方向清楚，泾渭分明，但是没有技术上约束限制要做到这点是很不容易的，因此我们还是必须借助J2EE具体技术来实现，这时，你可以使用EJB规范实现服务层和持久层，Web技术实现表现层；</P>
<P>　　EJB为什么能将服务层从Jsp/Servlet手中分离出来，因为它对JavaBeans编码有强制的约束，现在有一种对JavaBeans弱约束，使用Ioc模式实现的（当然EJB 3.0也采取这种方式），在Ioc模式诞生前，一般都是通过工厂模式来对JavaBeans约束，形成一个服务层，这也是是Jive这样开源论坛设计原理之一。</P>
<P>　　由此，将服务层从表现层中分离出来目前有两种可选架构选择：管理普通JavaBeans（POJO）框架(如Spring、<A href="http://www.jdon.com/jdonframework/index.htm" target=_blank>JdonFramework</A>)以及管理EJB的EJB框架，因为EJB不只是框架，还是标准，而标准可以扩展发展，所以，这两种区别将来是可能模糊，被纳入同一个标准了。　但是，个人认为：标准制定是为某个目的服务的，总要牺牲一些换取另外一些，所以，这两种架构会长时间并存。</P>
<P>　　这两种架构分歧也曾经诞生一个新名词：完全POJO的系统也称为轻量级系统(lightweight)，其实这个名词本身就没有一个严格定义，更多是一个吸引人的招牌，轻量是指容易学习容易使用吗？按照这个定义，其实轻量Spring等系统并不容易学习；而且EJB 3.0（依然叫EJB）以后的系统是否可称为轻量级了呢？</P>
<P>　　前面谈了服务层框架，使用服务层框架可以将JavaBeans从Jsp/Servlet中分离出来，而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离，这部分JavaBeans主要负责显示相关，一般是通过标签库（taglib）实现，不同框架有不同自己的标签库，Struts是应用比较广泛的一种表现层框架。</P>
<P>　　这样，表现层和服务层的分离是通过两种框架达到目的，剩余的就是持久层框架了，通过持久层的框架将数据库存储从服务层中分离出来是其目的，持久层框架有两种方向：直接自己编写JDBC等SQL语句（如iBatis）；使用O/R Mapping技术实现的Hibernate和JDO技术；当然还有EJB中的实体Bean技术。</P>
<P>　　持久层框架目前呈现百花齐放，各有优缺点的现状，所以正如表现层框架一样，目前没有一个框架被指定为标准框架，当然，表现层框架现在又出来了一个JSF，它代表的页面组件概念是一个新的发展方向，但是复杂的实现让人有些忘而却步。</P>
<P>　　在所有这些J2EE技术中，虽然SUN公司发挥了很大的作用，不过总体来说：网络上有这样一个评价：SUN的理论天下无敌；SUN的产品用起来撞墙；对于初学者，特别是那些试图通过或已经通过SUN认证的初学者，赶快摆脱SUN的阴影，立即开溜，使用开源领域的产品来实现自己的应用系统。</P>
<P>　　最后，你的J2EE应用系统如果采取上面提到的表现层、服务层和持久层的框架实现，基本你也可以在无需深刻掌握设计模式的情况下开发出一个高质量的应用系统了。</P>
<P>　　还要注意的是: 开发出一个高质量的J2EE系统还需要正确的业务需求理解，那么域建模提供了一种比较切实可行的正确理解业务需求的方法，相关详细知识可从UML角度结合理解。</P>
<P>　　当然，如果你想设计自己的行业框架，那么第一步从设计模式开始吧，因为设计模式提供你一个实现JavaBeans或类之间解耦参考实现方法，当你学会了系统基本单元JavaBean或类之间解耦时，那么系统模块之间的解耦你就可能掌握，进而你就可以实现行业框架的提炼了，这又是另外一个发展方向了。</P>
<P>　　以上理念可以总结为一句话：<BR>J2EE开发三件宝: Domain Model（域建模）、patterns（模式）和framework（框架）。<BR></P></SPAN><BR>
<DIV style="FONT-SIZE: 14px; LINE-HEIGHT: 25px"><STRONG>作者Blog：</STRONG><A id=ArticleContent1_ArticleContent1_AuthorBlogLink href="http://blog.csdn.net/tanruitian/" target=_blank>http://blog.csdn.net/tanruitian/</A></DIV></TD></TR></TBODY></TABLE><img src ="http://www.cnitblog.com/woo/aggbug/997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-15 00:48 <a href="http://www.cnitblog.com/woo/archive/2005/07/15/997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C, java 面试,上海</title><link>http://www.cnitblog.com/woo/archive/2005/07/13/934.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Wed, 13 Jul 2005 13:50:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/13/934.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/934.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/13/934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/934.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/934.html</trackback:ping><description><![CDATA[<P>1。多线程共享的含义，线程创建的两个方法。<BR><BR>2。vector 与Arraylist 的区别<BR>3。求周长的方法,矩形的类型与周长<BR>4。java n 阶乘<BR><BR>int jiecheng(int i)<BR>{<BR>&nbsp;&nbsp; int s;<BR>&nbsp;&nbsp; if(i==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s=1;//是1不是0<BR>&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s=i*jiecheng(i-1)<BR>&nbsp;&nbsp; return s;<BR>}<BR>5。一句SQL 取出表中男女数<BR>网络<BR><BR>1。网络的拓扑结构主要哪几种<BR>2。tcp与udp的区别<BR>3。共享与交换区别<BR>4。snmp<BR><BR>c++ builder面试<BR>1。两个for循环的优点<BR>2。main（）是否能够编译通过<BR>3。const的作用<BR>4。静态类<BR><BR><BR>代码<BR>//&lt;BODY onmouseup=document.selection.empty() //oncontextmenu="return false" <BR>//onmousemove=HideMenu() onselectstart="return false" //ondragstart="return false" <BR>//onbeforecopy="return false" oncopy=document.selection.empty() //leftMargin=0 <BR>//topMargin=0 onselect=document.selection.empty()&gt;&lt;/body&gt;<BR><BR>2005-7-28 C#<BR>1.值，引用.实参，形参<BR>2。static<BR>3。const<BR>4.viewstate<BR>5.验证静态，动态<BR>6。postback<BR></P><img src ="http://www.cnitblog.com/woo/aggbug/934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-13 21:50 <a href="http://www.cnitblog.com/woo/archive/2005/07/13/934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Java语法规则</title><link>http://www.cnitblog.com/woo/archive/2005/07/12/889.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Tue, 12 Jul 2005 07:18:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/12/889.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/889.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/12/889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/889.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/889.html</trackback:ping><description><![CDATA[abstract、continue、for、new、switch、boolean、default、goto、null、synchronized、break、do、<BR>if、package、this、byte、double、implements、private、threadsafe、byvalue、else、import、protected、<BR>throw、case、extends、instanceof、public、transient、catch、false、int return、true、char、final、<BR>interface、short、try、class、finally、long、static、void、const、 float、native、super、while等。<BR><BR>________________________________________<BR>//多态 <BR><BR>定义：是指一个多态引用可以指向多个类的实列 <BR><BR>java通过方法重写和方法重载来实现多态 <BR><BR>//extends <BR><BR>通过在类的声明中加入extends子句来创建一个类的子类 <BR><BR>子类可以继承父类中访问权限设定为public,protected,friendly的成员变量和方法，但是不能继承访问权限为private的成员变量和方法。 <BR><BR>//final类 <BR><BR>final类不能被继承 <BR><BR>如果你认为一个类的定义已经很完美，不需要再生成它的子类，这时也应把它修饰为final类 <BR><BR>final class classname{...} <BR><BR>//abstract类 <BR><BR>abstract类必须被继承，方法必须被重载 <BR><BR>它不应该被实列化为一个对象。 <BR><BR>number就是一个abstract类 <BR><BR>//java.lang.object类 <BR><BR>1.equals():比较状态和功能上的相同 <BR><BR>Integer one = new Integer(1) , anotherOne = new Integer(1); <BR>if(one.equal(anotherOne)){ <BR>System.pringln(""objects are equal");} //return true <BR><BR>2.getClass() <BR><BR>是final方法， <BR>void printClassName(object obj) <BR>{ <BR>System.out.println("The object&amp;acute;s class is <BR>"+obj.getClass().getName(); <BR>} <BR><BR>创建一个类的实例，所创建的对象可以是任何类 <BR><BR>object createNewInstanceof(object obj) <BR>{ <BR>retuen obj.getClass().newInstance(); <BR>} <BR><BR>3.toString() <BR><BR>返回对象的字符串表示 <BR><BR>System.out.println(Thread.currentThread().toString()); <BR><BR>4.finalize(); <BR><BR>5.notify(),notifyAll(),wait() 用于多线程中的同步 <BR><BR>//成员变量 <BR><BR>。static:类变量 <BR>。final:常量 <BR>。volatile:共享变量 <BR><BR>//成员方法 <BR><BR>。static：不需要实列化即可引用(类成员)，其他则为(实例成员) <BR>。abstrace和final,是否可重载(可以和不可以) <BR>。native:把java代码和其他语言的代码集成起来 <BR>。synchronized:控制多个并发线程对共享数据的访问 <BR>。throwsExceptionList：列外处理 <BR><BR>。this :引用当前对象 <BR>。super:引用当前对象的父类 <BR><BR>使用情况： <BR>(1) super.variable //用来访问父类被隐藏的成员变量 <BR>(2) super.Method([paramlist]) //用来调用父类中被重载的方法 <BR>(3) super.([paramlist]) //调用父类中的构造函数 <BR><BR>在类方法中(static)，不能使用this或super修饰符 <BR><BR>//interface <BR><BR>是方法定义和常量值的集合 <BR>。通过接口可以实现不相关类的相同行为，而不需要考虑这些类之间的层次关系 <BR>。通过接口可以指明多个类需要实现的方法。 <BR>。通过接口可以了解对象的交互界面，而不需了解对象所对应的类。 <BR><BR>java不支持多重继承(一个类可以是多个类的子类)，用接口实现其多重继承。 <BR><BR>在类的申明中用implements来表示一个类使用某个接口，在类体中可以使用接口中定义的常量，而且必须实现接口中定义的所有方法。一个类可以实现多个接口，用，分隔<BR><BR><img src ="http://www.cnitblog.com/woo/aggbug/889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-12 15:18 <a href="http://www.cnitblog.com/woo/archive/2005/07/12/889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> JAVA 面试基础试题</title><link>http://www.cnitblog.com/woo/archive/2005/07/11/854.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Mon, 11 Jul 2005 02:46:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/11/854.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/854.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/11/854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/854.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/854.html</trackback:ping><description><![CDATA[出处：<A href="http://www.csdn.net">www.csdn.net</A> <BR>
<DIV align=center><STRONG>15位业界专家的面试高招</STRONG><A href="http://www.csdn.net/news/newstopic/11/11193.shtml">http://www.csdn.net/news/newstopic/11/11193.shtml</A><BR>更多<A href="http://blog.vckbase.com/knight/archive/2005/03/21/3799.aspx">http://blog.vckbase.com/knight/archive/2005/03/21/3799.aspx</A></DIV>
<P>　　找工作要面试，有面试就有对付面试的办法。以下一些题目来自我和我朋友痛苦的面试经历，提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, SUN, 以及其它大小公司。</P>
<P>
<TABLE align=left>
<TBODY>
<TR>
<TD align=left><BR><A href="http://www.tarena.com.cn/">&nbsp;</A></TD></TR></TBODY></TABLE>　　面试是没什么道理可讲的，它的题目有的不合情理、脱离实际。有在纸上写的，有当面考你的，也有在电话里问的，给你IDE的估计很少(否则你赶快去买彩票， 说不定中)。所以如果你看完此文后，请不要抱怨说这些问题都能用IDE来解决。你必须在任何情况下准确回答这些问题，在面试中如果出现一两题回答不准确很 有可能你就被拒之门外了。</P>
<P>　　当然这些都是Java的基本题，那些面试的人大多数不会问你Hibernate有多先进，Eclipse的三个组成部分，或command design pattern，他们都是老一辈了，最喜欢问的就是基础知识。别小看了这些基础，我朋友水平一流，结果就栽在一到基础知识的问题下，和高薪无缘。</P>
<P>　　好了废话少说，开始正题。</P>
<P>　　第一，谈谈final, finally, finalize的区别。<BR>最常被问到。</P>
<P>　　第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)?</P>
<P>　　第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。</P>
<P>　　第四，&amp;和&amp;&amp;的区别。<BR>这个问得很少。</P>
<P>　　第五，HashMap和Hashtable的区别。<BR>常问。</P>
<P>　　第六，Collection 和 Collections的区别。<BR>你千万别说一个是单数一个是复数。</P>
<P>　　第七，什么时候用assert。<BR>API级的技术人员有可能会问这个。</P>
<P>　　第八，GC是什么? 为什么要有GC? <BR>基础。</P>
<P>　　第九，String s = new String("xyz");创建了几个String Object?</P>
<P>　　第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少?</P>
<P>　　第十一，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?<BR>面试题都是很变态的，要做好受虐的准备。</P>
<P>　　第十二，sleep() 和 wait() 有什么区别?<BR>搞线程的最爱。</P>
<P>　　第十三，Java有没有goto?<BR>很十三的问题，如果哪个面试的问到这个问题，我劝你还是别进这家公司。</P>
<P>　　第十四，数组有没有length()这个方法? String有没有length()这个方法?</P>
<P>　　第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?<BR>常问。</P>
<P>　　第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?</P>
<P>　　第十七，给我一个你最常见到的runtime exception。<BR>如果你这个答不出来，面试的人会认为你没有实际编程经验。</P>
<P>　　第十八，error和exception有什么区别?</P>
<P>　　第十九，List, Set, Map是否继承自Collection接口?</P>
<P>　　第二十，abstract class和interface有什么区别?<BR>常问。</P>
<P>　　第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized?</P>
<P>　　第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?</P>
<P>　　第二十三，启动一个线程是用run()还是start()?</P>
<P>　　第二十四，构造器Constructor是否可被override?</P>
<P>　　第二十五，是否可以继承String类?</P>
<P>　　第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法?</P>
<P>　　第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后?</P>
<P>　　第二十八，编程题: 用最有效率的方法算出2乘以8等於几?<BR>有C背景的程序员特别喜欢问这种问题。</P>
<P>　　第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对?</P>
<P>　　第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递?</P>
<P>　　第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上?</P>
<P>　　第三十二，编程题: 写一个Singleton出来。<BR><BR></P>
<P>1，定义在一个方法中的内部类，除了能访问该方法中定义的final属性以外，还能不能访问外部类的属性？（定义在一个类中的内部类是可以的）</P>
<P>2，一个类能不能在继承一个类的同时又实现一个借口？<BR><BR></P>
<P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">编程：编写一个截取字符串的函数，输入为一个字符串和字节数，输出为按字节截取的字符串。</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"> </SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">但是要保证汉字不被截半个，如“我</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">ABC</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">”</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">4</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，应该截为“我</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">AB</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">”，输入“我</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">ABC</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">汉</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">DEF</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">”，</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">6</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，应该输出为“我</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">ABC</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">”而不是“我</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">ABC+</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">汉的半个”。<BR><BR><BR><BR><BR>package string;<BR>class SplitString <BR>{<BR>&nbsp;private String str;<BR>&nbsp;private int byteNum;</SPAN></P>
<P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp;public SplitString(){}</SPAN></P>
<P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp;public SplitString(String str,int byteNum)<BR>&nbsp;{<BR>&nbsp;&nbsp;this.str=str;<BR>&nbsp;&nbsp;this.byteNum=byteNum;</SPAN></P>
<P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">&nbsp;}<BR>&nbsp;<BR>&nbsp;public void splitIt()<BR>&nbsp;{<BR>什么是敏捷开发。。。。<BR><BR>什么叫重构，为什么要重构，什么时候重构<BR><BR>设计模式是什么。。。。<BR><BR><SPAN class=u><FONT size=3>java基础问题</FONT></SPAN><BR><BR><FONT size=3>1.简述逻辑操作(&amp;,|,^)与条件操作(&amp;&amp;,||)的区别。(15分)<BR>2.下面程序运行会发生什么结果?如果有错误,如何改正? (15分)<BR>interface&nbsp; A{<BR>&nbsp; int x = 0;<BR>}<BR>class B{<BR>&nbsp; int x =1;<BR>}<BR>class C<BR>&nbsp;&nbsp;&nbsp; extends B implements A {<BR>&nbsp; public void pX(){<BR>&nbsp;&nbsp;&nbsp; System.out.println(x);<BR>&nbsp; }<BR>&nbsp; public static void main(String[] args) {<BR>&nbsp;&nbsp;&nbsp; new C().pX();<BR>&nbsp; }<BR>}<BR>}<BR><BR><BR>3.简述 Java Server Page 和 Servlet 的联系和区别。(20分)<BR>4.XML文档定义有几种形式？它们之间有何本质区别？<BR>解析XML文档有哪几种方式？(20分)<BR>5.简述synchronized和java.util.concurrent.locks.Lock的异同 ？(15分)<BR>6.EJB规范规定EJB中禁止的操作有哪些？(15分)<BR><BR>最后还有一题考考你的眼力:<BR><BR>public String toString(){<BR>&nbsp;&nbsp; return this + "@" + this.hashCode();<BR>}<BR>这个toString()方法实现有无不当的地方?(toString方法其实可以按你想输出的任何内容输出一些该类的信息)<BR></FONT></P>
<P>**********************************************************************************</P>
<P>public String toString(){<BR>&nbsp;&nbsp; return this + "@" + this.hashCode();<BR>}<BR><BR><BR>会变成 <BR><BR>public String toString(){<BR>&nbsp;&nbsp; return String.valueOf(this) + "@" + String.valueOf(this.hashCode());<BR>}<BR><BR>而valueOf方法又将去调用toString();<BR>/**<BR>&nbsp;&nbsp; public static String valueOf(Object obj) {<BR>return (obj == null) ? "null" : obj.toString();<BR>&nbsp;&nbsp;&nbsp; }<BR>*/<BR><BR><BR>这样好像会有问题了吧？？？</P>
<P>以下答案供参考(不一定完全正确),也没有很详细说明.相关知识可以自己参考相关资料加上自己的理解.欢迎拍砖<BR><BR>1.简述逻辑操作(&amp;,|,^)与条件操作(&amp;&amp;,||)的区别。(15分)<BR>区别主要答两点:<BR>a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型<BR>b.逻辑操作不会产生短路.如:<BR>int a = 0;<BR>int b = 0;<BR><BR>if( (a = 3) &gt; 0 || (b = 3) &gt; 0 ) //操后a =3,b=0.<BR>if( (a = 3) &gt; 0 | (b = 3) &gt; 0 ) //操后a =3,b=3.<BR>&nbsp; <BR>答对第一点得5分,答对第二点得10分.<BR><BR>本题考察最最基本的知识,但仍然有很多大牛级开发人员下马,任何语言在开始的部分<BR>都会详细介绍这些基本知识,但除了学习第一种语言时,没有人在学习新的语言时愿意<BR>花五分钟来复习一下.<BR><BR><BR>2.下面程序运行会发生什么结果?如果有错误,如何改正? (15分)<BR>interface&nbsp; A{<BR>&nbsp; int x = 0;<BR>}<BR>class B{<BR>&nbsp; int x =1;<BR>}<BR>class C<BR>&nbsp;&nbsp;&nbsp; extends B implements A {<BR>&nbsp; public void pX(){<BR>&nbsp;&nbsp;&nbsp; System.out.println(x);<BR>&nbsp; }<BR>&nbsp; public static void main(String[] args) {<BR>&nbsp;&nbsp;&nbsp; new C().pX();<BR>&nbsp; }<BR>}<BR>}<BR><BR>本题在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,<BR>两个x都匹配,就象在同时import java.util和java.sql两个包时直接声明Date一样)<BR><BR>本题主要考察对接口和类的最最基本的结构的了解.对于父类的变量,可以用super.x来<BR>明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确.<BR><BR><BR>3.简述 Java Server Page 和 Servlet 的联系和区别。(20分)<BR>本题不用多说,在答相同点时应该明确知道jsp编译后是"类servlet"而"不是Servlet",<BR>答区别时应该回答出"侧重于(视图/控制逻辑)".其它可根据情况加减分值.知识很简单,<BR>但从面试的角度看,被试者不仅要能知道它们的区别,而且要能比较准确地表达出来(以<BR>后写文档要能让别人看得懂,不产生歧义),回答"jsp编译后就是servlet"视为错误,回答<BR>"jsp用于视图,servlet用于控制逻辑"视为错误,应该用侧重于,主要(多数)用于等词语<BR>表达.<BR><BR><BR>4.XML文档定义有几种形式？它们之间有何本质区别？<BR>解析XML文档有哪几种方式？(20分)<BR>本题三个答题点:<BR>a: 两种形式 dtd,schema<BR>b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的<BR>根本目的)<BR>c: 两种主要方式:dom,sax.答出两种得全分,如能答出saxt,或其它(在答出dom,sax的基<BR>础上,如果应试者认为其它方式也可以视为对xml的解析应该允许.但没有答出dom,sax把<BR>其它方式说成是对XML的解析不得分)应该加分.<BR><BR>5.简述synchronized和java.util.concurrent.locks.Lock的异同 ？(15分)<BR><BR>主要相同点:<BR>Lock能完成synchronized所实现的所有功能.(其它不重要)<BR>主要不同点:<BR>Lock有比synchronized更精确的线程语义和更好的性能(在相同点中回答此点也行)<BR>synchronized会自动释放锁.而Lock一定要求程序员手工释放.并且必须在finally从句<BR>中释放,如果没有答出在finally中释放不得分.就如Connection没有在finally中关闭一<BR>样.连最基本的资源释放都做不好,还谈什么多线程编程.<BR><BR><BR><BR><BR>6.EJB规范规定EJB中禁止的操作有哪些？(15分)<BR>共有8点,答出下列3-4点得满分.<BR><BR>1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等)<BR>2.不能操作awt<BR>3.不能实现服务器功能<BR>4.不能对静态属生存取.<BR>5.不能使用IO操作直接存取文件系统<BR>6.不能加载本地库.<BR>7.不能将this作为变量和返回.<BR>8.不能循环调用.<BR></P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>以下是香港电信的笔试题，请关心概念题的朋友和考官看一下，如果有时间请和大家一起分享一下你的思路。(不一定非要用英语在1小时完成)<BR>香港电信的工资肯定不只6000人民币!<BR><BR>1.Based on your understanding of the following java related technologies: <BR><BR>servlets,JavaServerPage,JavaBeans,Enterprise JavaBeans, how do you think these technologies are work together or are applied in the development of an internet-based application(25marks) <BR><BR>2.In your opinion ,what do you think are the advantages or benefitsof using an object-oriented approach to software development? how do you think those benefits can be achieved or realized?(15marks) <BR><BR>3.In designing your classes, given the choice between inheritance and aggregation which do you choose(15marks) <BR><BR>4.How would you work around the lack of multiple inheritance feature in Java(15marks) <BR><BR>5.What would you consider to be the hardest part of OO analysis and design and why(10marks) <BR><BR>6.How do you keep yourself up to date with the latest in software techonogy, especially in the field of software development(10marks) <BR><BR>7.What is your career aspiration? Why do you think this E-Commerce Development Center can help you in achieving your career goals(10marks) <BR><BR>(1hr, answer in English)<BR></P></SPAN><img src ="http://www.cnitblog.com/woo/aggbug/854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-11 10:46 <a href="http://www.cnitblog.com/woo/archive/2005/07/11/854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java什么是框架？</title><link>http://www.cnitblog.com/woo/archive/2005/07/10/842.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Sat, 09 Jul 2005 19:12:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/10/842.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/842.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/10/842.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/842.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/842.html</trackback:ping><description><![CDATA[<H3 align=center><A href="http://blog.csdn.net/chenyun2000/category/22304.aspx">http://blog.csdn.net/chenyun2000/category/22304.aspx</A></H3>
<H3 align=center><A href="http://51cmm.csai.cn/ANALYZE/NO000030.htm">http://51cmm.csai.cn/ANALYZE/NO000030.htm</A></H3>
<H3 align=center>什么是模式？什么是框架？</H3>
<P align=center>作者不详（出处不详）　　　2005年03月08日</P>　　 <SPAN class=main>现在软件设计里到处都是模式，框架。有次朋友问什么是模式？我也在学习中，就我的学习经验，给出以下小结。（注意：个人观点，仅供参考，欢迎指正。） </SPAN> 
<P><SPAN class=main>　　<STRONG>1．什么是模式？</STRONG><BR><BR>模式，即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度，那就是模式。 Alexander给出的经典定义是：每个模式都描述了一个在我们的环境中不断出现的问题，然后描述了该问题的解决方案的核心。通过这种方式，你可以无数次地使用那些已有的解决方案，无需在重复相同的工作。 模式有不同的领域，建筑领域有建筑模式，软件设计领域也有设计模式。当一个领域逐渐成熟的时候，自然会出现很多模式。 什么是框架？ <BR><BR>框架，即framework。其实就是某种应用的半成品，就是一组组件，供你选用完成你自己的系统。简单说就是使用别人搭好的舞台，你来做表演。而且，框架一般是成熟的，不断升级的软件。 </SPAN></P>
<P><SPAN class=main>　　<STRONG>2．为什么要用模式？ </STRONG><BR><BR>因为模式是一种指导，在一个良好的指导下，有助于你完成任务，有助于你作出一个优良的设计方案，达到事半功倍的效果。而且会得到解决问题的最佳办法。 </SPAN></P>
<P><SPAN class=main>　　为什么要用框架？ <BR><BR>因为软件系统发展到今天已经很复杂了，特别是服务器端软件，设计到的知识，内容，问题太多。在某些方面使用别人成熟的框架，就相当于让别人帮你完成一些基础工作，你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟，稳健的，他可以处理系统很多细节问题，比如，事物处理，安全性，数据流控制等问题。还有框架一般都经过很多人使用，所以结构很好，所以扩展性也很好，而且它是不断升级的，你可以直接享受别人升级代码带来的好处。 <BR>框架一般处在低层应用平台（如J2EE）和高层业务逻辑之间的中间层。 </SPAN></P>
<P><SPAN class=main>　　软件为什么要分层？ <BR><BR>为了实现“高内聚、低耦合”。把问题划分开来各个解决，易于控制，易于延展，易于分配资源…总之好处很多啦：）。 </SPAN></P>
<P><SPAN class=main>　　<STRONG>3．以下所述主要是JAVA，J2EE方面的模式和框架： </STRONG></SPAN></P>
<P><SPAN class=main>　　常见的设计模式有什么？ <BR><BR>首先，你要了解的是GOF的《设计模式--可复用面向对象软件的基础》一书（这个可以说是程序员必备的了），注意：GOF不是一个人，而是指四个人。它的原意是Gangs Of Four,就是“四人帮”，就是指此书的四个作者：Erich Gamma,Richard Helm，Ralph Johnson,John Vlissides。这本书讲了23种主要的模式，包括：抽象工厂、适配器、外观模式等。 <BR>还有其他的很多模式，估计有100多种。 <BR><BR>软件设计模式太多，就我的理解简单说一下最常见的MVC模式。 <BR>MVC模式是1996年由Buschmann提出的： <BR>模型（Model）：就是封装数据和所有基于对这些数据的操作。 <BR>视图（View）：就是封装的是对数据显示，即用户界面。 <BR>控制器（Control）：就是封装外界作用于模型的操作和对数据流向的控制等。 </SPAN></P>
<P><SPAN class=main>　　另外： <BR><BR>RUP（Rational Unified Process）软件统一过程，XP（Extreme Programming）极端编程，这些通常被叫做“过程方法”，是一种软件项目实施过程的方法论，它是针对软件项目的实施过程提出的方法策略。也是另一个角度的模式。 </SPAN></P>
<P><SPAN class=main>　　<STRONG>4．常见的JAVA框架有什么？ </STRONG><BR><BR>WAF： <BR><BR>全称：WEB APPLICATION FRAMEWORK <BR>主要应用方面：EJB层，（WEB层也有，但是比较弱）。 <BR>主要应用技术：EJB等 <BR>出处： <A href="http://java.sun.com/blueprints/code/index.html">http://java.sun.com/blueprints/code/index.html </A><BR>简述：这是SUN在展示J2EE平台时所用的例子PetStore(宠物商店系统)里面的框架。是SUN蓝皮书例子程序中提出的应用框架。它实现了 MVC和其他良好的设计模式。SUN的网站上有技术资料，最好下载PetStore来研究，WEBLOGIC里自带此系统，源码在bea\weblogic700\samples\server\src\petstore。这是学习了解J2EE的首选框架。 <BR>免费。 </SPAN></P>
<P><SPAN class=main>　　<A href="http://www.javafan.net/special/struts/index.jsp">Struts: </A><BR><BR>主要应用方面：WEB层。 <BR>主要应用技术：JSP,TagLib,JavaBean,XML等 <BR>出处： <A href="http://jakarta.apache.org/struts/index.html">http://jakarta.apache.org/struts/index.html </A><BR>简述：这是APACHE的开源项目，目前应用很广泛。基于MVC模式，结构很好，基于JSP。Jbuilder8里已经集成了STRUTS1.02的制作。 <BR>免费。 简述WAF+STRUTS结合的例子：WEB层用STRUTS，EJB层用WAF： <BR>JSP(TagLib)——&gt;ActionForm——&gt;Action ——&gt; Event——&gt;EJBAction——&gt;EJB ——&gt;DAO——&gt;Database JSP（TagLib） (forward) &lt;——Action &lt;——EventResponse&lt;—— </SPAN></P>
<P><SPAN class=main>　　<A href="http://www.javafan.net/special/turbine/index.jsp"> Turbine： </A><BR><BR>主要应用方面：WEB层。 <BR>主要应用技术：servlet等 <BR>出处： <A href="http://jakarta.apache.org/turbine/index.html">http://jakarta.apache.org/turbine/index.html </A><BR>简述：这是APACHE的开源项目。基于SERVLET。据说速度比较快，基于service（pluggable implementation可插拔的执行组件）的方式提供各种服务。 <BR>免费。 </SPAN></P>
<P><SPAN class=main>　　COCOON： <BR><BR>主要应用方面：WEB层。 <BR>主要应用技术：XML，XSP，servlet等 <BR>出处： <A href="http://cocoon.apache.org/2.0/">http://cocoon.apache.org/2.0/ </A><BR>简述：这是APACHE的一个开源项目。基于XML，基于XSP（通俗地说，XSP是在XML静态文档中加入Java程序段后形成的动态XML文档。）。特点是可以与多种数据源交互，包括文件系统，数据库，LDAP，XML资源库，网络数据源等。 <BR>免费。 </SPAN></P>
<P><SPAN class=main>　　ECHO： <BR><BR>主要应用方面：WEB层。 <BR>主要应用技术：servlet等 <BR>出处： <A href="http://www.nextapp.com/products/echo/">http://www.nextapp.com/products/echo/ </A><BR>简述：nextapp公司的一个开源项目。基于SERVLET。页面可以做的很漂亮，结合echopoint，可以作出很多图形效果（里面用了jfreechart包）。使用SWING的思想来作网页，把HTML当作JAVA的类来做。但是大量使用Session，页面分帧（Frame）很多,系统资源消耗很大。 <BR>免费。 </SPAN></P>
<P><SPAN class=main>　　JATO： <BR><BR>全称：SUN ONE Application Framework <BR>主要应用方面：WEB层。 <BR>主要应用技术：JSP,TagLib,JavaBean等 <BR>出处： <A href="http://www.sun.com/">http://www.sun.com/ </A><BR>简述：这是SUN推出的一个商业性框架，一看名字就知道是结合SUN ONE的平台推出的。我下载了JATO2.0看了一下，感觉有些简单，使用了JSP＋TagLib+JavaBean。如他的DOC所说JATO是适合用在小的WEB应用里。 <BR>免费。 </SPAN></P>
<P><SPAN class=main>　　TCF： <BR><BR>全称：Thin-Client Framework <BR>主要应用方面：JAVA GUI。 <BR>主要应用技术：JAVA application等 <BR>出处： <A href="http://www.alphaworks.ibm.com/tech/tcf">http://www.alphaworks.ibm.com/tech/tcf </A><BR>简述：这是IBM出的一个框架。基于MVC模式，基于JAVA Application。推荐一篇介绍文章： <A href="http://www-900.ibm.com/developerWorks/cn/java/j-tcf1/index.shtml">http://www-900.ibm.com/developerWorks/cn/java/j-tcf1/index.shtml </A><BR>收费：每个企业对象license:2000美元。 </SPAN></P>
<P><SPAN class=main>　　5．其实本文的目的在于“抛砖引玉”，希望各路高手请你们把各种框架的特点和出处罗列一下 ，供大家参考，选用。</SPAN></P><img src ="http://www.cnitblog.com/woo/aggbug/842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-10 03:12 <a href="http://www.cnitblog.com/woo/archive/2005/07/10/842.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts 入门</title><link>http://www.cnitblog.com/woo/archive/2005/07/01/665.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Fri, 01 Jul 2005 03:46:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/07/01/665.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/665.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/07/01/665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/665.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/665.html</trackback:ping><description><![CDATA[<FONT size=2>Struts和Jdo<BR>.net remoteing<BR><BR></FONT><A href="http://www.knowsky.com/4143.html"><FONT size=2>http://www.knowsky.com/4143.html</FONT></A><BR><FONT size=2>深入学习 struts1.1<BR></FONT><A href="http://www-128.ibm.com/developerworks/cn/java/l-struts1-1/"><FONT size=2>http://www-128.ibm.com/developerworks/cn/java/l-struts1-1/<BR></FONT></A><BR><A href="http://tech.ccidnet.com/pub/article/c317_a181555_p1.html"><FONT size=2>http://tech.ccidnet.com/pub/article/c317_a181555_p1.html</FONT></A><BR><A href="http://yesky.anhuinews.com/dev/404/2018904.shtml">JBuilder2005 Struts深度体验之改造</A><BR><A href="http://yesky.anhuinews.com/dev/42/2018542.shtml"><FONT color=#002c99>JBuilder2005 Struts深度体验之升级</FONT></A><BR><A href="http://yesky.anhuinews.com/dev/373/2018373.shtml"><FONT color=#002c99>JBuilder2005 Struts深度体验之概述</FONT></A><BR><BR><FONT size=2>　或许有人觉得struts不容易学，似乎里面的一些概念让未接触过的人迷惑，MVC1、MVC2、模式……我写这篇文章是想让从来没有接触过struts的人，能有个简单的入门指引，当然，系统地学习struts是必要的，里面有很多让人心醉的东东，那是后话了。 </FONT>
<P><FONT size=2>　　该案例包括首页，用户登陆、网站向导页面。就这么简单，没有深奥的struts概念，主要靠动手，然后用心体会。</FONT></P>
<P><FONT size=2>　　WEB Server用tomcat4。到</FONT><A href="http://jakarta.apache.org/"><FONT size=2>http://jakarta.apache.org</FONT></A><FONT size=2>下载struts1.1，把zip文件释放到c:\struts，拷贝C:\struts\webapps\struts-example.war到c:\tomcat4\webapps中，启动tomcat，war包被释放为struts-example文件夹，删除war包，把struts-example文件夹更名为test。<BR>　　一、把WEB-INF\web.xml改成：</FONT></P>
<P><FONT size=2>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "</FONT><A href="http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"><FONT size=2>http://java.sun.com/j2ee/dtds/web-app_2_2.dtd</FONT></A><FONT size=2>"&gt;</FONT></P>
<P><FONT size=2>&lt;web-app&gt;<BR>&lt;!—这是struts中的Controller（控制器），系统的指令中转由其，既ActionServlet 类负责，它从struts-config.xml中读取配置信息，并在服务器后台自动启动一个线程。如果没有特别的要求（如添加语言编转功能），程序员可以不管这部分，照用就可以了。--&gt; <BR>&lt;servlet&gt;<BR>&lt;servlet-name&gt;action&lt;/servlet-name&gt;<BR>&lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<BR>&lt;init-param&gt;<BR>&lt;param-name&gt;config&lt;/param-name&gt;<BR>&lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<BR>&lt;/servlet&gt;<BR>&lt;!--该系统的servlet可以映射成cool为后缀的文件，而不是常见的.jspdo等，后缀名可以改成任何名称，当然名字要健康＃◎￥％！--&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt;action&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;*.cool&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;!--该系统的默认首页是index.jsp，可以有多个，系统按次序找，类似IIS--&gt; <BR>&lt;welcome-file-list&gt;<BR>&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<BR>&lt;/welcome-file-list&gt;<BR>&lt;/web-app&gt; </FONT></P>
<P><FONT size=2>　　二、把test\WEB-INF\ struts-config.xml改成：</FONT></P>
<P><FONT size=2>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;<BR>&lt;!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" <BR>"</FONT><A href="http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"><FONT size=2>http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd</FONT></A><FONT size=2>"&gt;</FONT></P>
<P><FONT size=2>&lt;struts-config&gt;<BR>&lt;!--FormBean是struts的一个概念，本质是JavaBean，用来自动存储页面表单中各个域的值，并在适当的时候回填表单域，不需要象传统那样request.getParameter(“fieldName”);，常被action-mappings中的action 使用--&gt;<BR>&lt;form-beans&gt;<BR>&lt;!—稍后我们会新增一个UserForm类，用来存储用户信息。--&gt;<BR>&lt;form-bean name="userForm" type="test.UserForm"/&gt;<BR>&lt;/form-beans&gt;<BR>&lt;!--这里存放整个系统都可以使用的全局转向中转(Forward)地址，类似于javascript中的window.location(‘index.jsp’);，也类似于电视控制器上的各种按钮，可以转频道、调色等等是基于Struts的Web应用的控制流程流转。一般情况下，一个Action处理完毕后，会转发到一个JSP页面进行显示。这也是JSP中的MVC的实现的要点。--&gt;<BR>&lt;global-forwards&gt;<BR>&lt;!--failed.cool将被当成servlet请求，到action-mappings中寻找对应的action处理。--&gt;<BR>&lt;forward name="failed" path="/failed.cool"/&gt;<BR>&lt;forward name="regist" path="/regist.jsp"/&gt;<BR>&lt;/global-forwards&gt;<BR>&lt;!--还记得web.xml中后缀为cool的请求吗？它们是转到这里处理的。这里相当于struts的Model部分，Model部分是struts中比较灵活的地方。--&gt;<BR>&lt;action-mappings&gt;<BR>&lt;!--处理regist.cools的请求，使用的FormBean是userForm，既test.UserForm类，当处理过程发生错误时将返回index.jsp--&gt;<BR>&lt;action path="/regist" type="test.RegistAction" name="userForm" scope="request" input="/index.jsp" /&gt;<BR>&lt;action path="/overview" forward="/hello.jsp"/&gt;<BR>&lt;action path="/failed" forward="/wuwu.jsp" /&gt;<BR>&lt;/action-mappings&gt;<BR>&lt;/struts-config&gt; <BR>　　三、增加一个FormBean，类路径为test.UserForm，以下是这个类的内容：</FONT></P>
<P><FONT size=2>package test;<BR>import org.apache.struts.action.ActionForm;<BR>public class UserForm extends ActionForm<BR>{<BR>　private String name="lpw";//用户名<BR>　private String ps="1111";//密码 <BR>　public UserForm(){} <BR>　public void setName(String s) {name=s;}<BR>　public String getName() {return name;}<BR>　public void setPs(String s) {ps=s;} <BR>　public String getPs() {return ps;}<BR>} </FONT></P>
<P><BR><FONT size=2>　　四、增加一个Action的子类，类路径为test. RegistAction，以下是这个类的内容：</FONT></P>
<P><FONT size=2>package test;<BR>import java.lang.reflect.InvocationTargetException;<BR>import java.util.Locale;<BR>import javax.servlet.ServletException;<BR>import javax.servlet.http.HttpServletRequest;<BR>import javax.servlet.http.HttpSession;<BR>import javax.servlet.http.HttpServletResponse;<BR>import org.apache.struts.action.Action;<BR>import org.apache.struts.action.ActionError;<BR>import org.apache.struts.action.ActionErrors;<BR>import org.apache.struts.action.ActionForm;<BR>import org.apache.struts.action.ActionForward;<BR>import org.apache.struts.action.ActionMapping;<BR>import org.apache.struts.util.MessageResources;<BR>import test.UserForm;<BR>public final class RegistAction extends Action<BR>{<BR>　public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response) <BR>　throws Exception <BR>　{<BR>　　Locale locale = getLocale(request);<BR>　　MessageResources messages = getResources(request);<BR>　　HttpSession session = request.getSession(); <BR>　　UserForm userform = (UserForm) form;<BR>　　//此处可以调用其他类来执行数据库写入或其他逻辑判断<BR>　　// 如果UserForm传来的参数name的值为默认的lpw，将forward到failed， <BR>　　// 该名称将到struts-config.xml的&lt;global-forwards&gt;中寻找映射的url地址 <BR>　　// （可以是绝对路径，也可以是相对路径），对于本例，是转到failed.cool， <BR>　　// 还记得吗？后缀为cool的请求全部到action-mappings中寻找<BR>　　// 对应的action处理，最终目录是wuwu.jsp*/ <BR>　　if( "lpw".equals(userform.getName()) )<BR>　　　return (mapping.findForward("failed")); <BR>　　else <BR>　　　return (mapping.findForward("regist"));<BR>　}<BR>} </FONT></P>
<P><FONT size=2>　　五、以下所有新增或修改的页面相当于struts的View部分，把首页index.jsp改成：</FONT></P>
<P><FONT size=2>&lt;%@ page contentType="text/html;charset=GBK" language="java" %&gt;<BR>&lt;%@ page import = "test.*" %&gt;<BR>&lt;a href="overview.cool"&gt;站点导航&lt;/a&gt;&lt;br&gt;<BR>&lt;form action="regist.cool" method="post"&gt;<BR>&lt;!—表单中的域的名称要和UserForm中的参数一样，就可以实现数据自动获取功能，不需要用request.getParameter(“param”);--&gt;<BR>用户:&lt;input type="text" name="name"&gt;&lt;br&gt;<BR>密码:&lt;input type="password" name="ps"&gt;&lt;br&gt;<BR>&lt;input type=submit value="新增用户"&gt;<BR>&lt;/form&gt; </FONT></P>
<P><FONT size=2>　　六、增加hello.jsp，用于站点导航：</FONT></P>
<P><FONT size=2>&lt;h1&gt;site map&lt;/h1&gt;The following is content filling by reader </FONT></P>
<P><FONT size=2>　　七、增加wuwu.jsp，当没有新用户登陆时，将转到这个页面：</FONT></P>
<P><FONT size=2>&lt;%@ page contentType="text/html;charset=GBK" language="java" %&gt;<BR>&lt;jsp:useBean id="beanlpw" class="test.UserForm" scope="session"/&gt;<BR>现有用户：&lt;%=beanlpw.getName()%&gt;&lt;br&gt;<BR>密码：&lt;%=beanlpw.getPs()%&gt;&lt;br&gt; </FONT></P>
<P><FONT size=2>　　没有得到新的用户！</FONT></P>
<P><FONT size=2>　　八、增加regist.jsp，当有新用户登陆时，将转到这个页面：</FONT></P>
<P><FONT size=2>&lt;%@ page contentType="text/html;charset=GBK" language="java" %&gt;<BR>&lt;jsp:useBean id="beanlpw" class="test.UserForm" scope="session"/&gt;<BR>新用户帐号：&lt;%=beanlpw.getName()%&gt;&lt;br&gt;<BR>密码：&lt;%=beanlpw.getPs()%&gt; </FONT></P>
<P><FONT size=2>　　九、启动tomcat4，浏览器中键入</FONT><A href="http://localhost:8080/test/index.jsp"><FONT size=2>http://localhost:8080/test/index.jsp</FONT></A><FONT size=2>，操作一下，就可以看到结果，并初步理解struts的M、V、C各部分的协同工作原理，当然这是作者的良好意愿，如果读者看得一头雾水，欢迎指出错误在哪里 ：） </FONT></P><img src ="http://www.cnitblog.com/woo/aggbug/665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-07-01 11:46 <a href="http://www.cnitblog.com/woo/archive/2005/07/01/665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详解J2EE的13种核心技术 </title><link>http://www.cnitblog.com/woo/archive/2005/06/30/660.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Thu, 30 Jun 2005 14:22:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/06/30/660.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/660.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/06/30/660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/660.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/660.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width=572 align=center border=0>
<TBODY>
<TR>
<TD vAlign=center height=36>
<DIV align=center><A href="http://www.e-works.net.cn/ewk2004/ewkArticles/414/Article28889.htm">http://www.e-works.net.cn/ewk2004/ewkArticles/414/Article28889.htm</A></DIV></TD></TR>
<TR>
<TD height=18>
<DIV align=center><FONT color=#993300><BR>2005-3-30</FONT></DIV></TD></TR></TR>
<TR>
<TD align=right height=18><FONT color=#993300>UML软件工程组织</FONT></A></TD></TR>
<TR>
<TD height=18>
<DIV align=justify><SPAN class=news-11>&nbsp;&nbsp;本文将解释支撑J2EE的13种核心技术：JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail 和JAF，同时还将描述在何时、何处需要使用这些技术。当然，还要介绍这些不同的技术之间是如何交互的。</SPAN> </DIV><BR><SPAN class=news-12>
<P>&nbsp;&nbsp;&nbsp; Java最初是在浏览器和客户端机器中粉墨登场的。当时，很多人质疑它是否适合做服务器端的开发。现在，随着对Java2平台企业版（J2EE）第三方支持的增多，Java被广泛接纳为开发企业级服务器端解决方案的首选平台之一。</P>
<P>&nbsp;&nbsp;&nbsp; J2EE平台由一整套服务（Services）、应用程序接口（APIs）和协议构成，它对开发基于Web的多层应用提供了功能支持。</P>
<P>&nbsp;&nbsp;&nbsp; 本文将解释支撑J2EE的13种核心技术：JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail 和JAF，同时还将描述在何时、何处需要使用这些技术。当然，还要介绍这些不同的技术之间是如何交互的。</P>
<P>&nbsp;&nbsp;&nbsp; 此外，为了让您更好地感受J2EE的真实应用，我们将在WebLogic应用服务器,来自BEA Systems公司的一种广为应用的产品环境下来介绍这些技术。不论对于WebLogic应用服务器和J2EE的新手，还是那些想了解J2EE能带来什么好处的项目管理者和系统分析员，相信本文一定很有参考价值。</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 宏观印象： 分布式结构和J2EE</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 过去，二层化应用——通常被称为client/server应用——是大家谈论的最多的。在很多情况下，服务器提供的惟一服务就是数据库服务。在这种解决方案中，客户端程序负责数据访问、实现业务逻辑、用合适的样式显示结果、弹出预设的用户界面、接受用户输入等。client/server结构通常在第一次部署的时候比较容易，但难于升级或改进，而且经常基于某种专有的协议，通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。更重要的是，在Web时代，二层化应用通常不能体现出很好的伸缩性，因而很难适应Internet的要求。</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;Sun设计J2EE的部分起因就是想解决二层化结构的缺陷。于是，J2EE定义了一套标准来简化N层企业级应用的开发。它定义了一套标准化的组件，并为这些组件提供了完整的服务。J2EE还自动为应用程序处理了很多实现细节，如安全、多线程等。</P>
<P>&nbsp;&nbsp;&nbsp; 用J2EE开发N层应用包括将二层化结构中的不同层面切分成许多层。一个N层化应用A能够为以下的每种服务提供一个分开的层：</P>
<P>&nbsp;&nbsp;&nbsp; 显示：在一个典型的Web应用中，客户端机器上运行的浏览器负责实现用户界面。</P>
<P>&nbsp;&nbsp;&nbsp; 动态生成显示：尽管浏览器可以完成某些动态内容显示，但为了兼容不同的浏览器，这些动态生成工作应该放在Web服务器端进行，使用JSP、Servlets，或者XML（可扩展标记语言）和（可扩展样式表语言）。</P>
<P>&nbsp;&nbsp;&nbsp; 业务逻辑：业务逻辑适合用Session EJBs（后面将介绍）来实现。</P>
<P>&nbsp;&nbsp;&nbsp; 数据访问：数据访问适合用Entity EJBs（后面将介绍）和JDBC来实现。</P>
<P>&nbsp;&nbsp;&nbsp; 后台系统集成： 同后台系统的集成可能需要用到许多不同的技术，至于何种最佳需要根据后台系统的特征而定。</P>
<P>&nbsp;&nbsp;&nbsp; 您可能开始诧异：为什么有这么多的层？事实上，多层方式可以使企业级应用具有很强的伸缩性，它允许每层专注于特定的角色。例如，让Web服务器负责提供页面，应用服务器处理应用逻辑，而数据库服务器提供数据库服务。</P>
<P>&nbsp;&nbsp;&nbsp; 由于J2EE建立在Java2平台标准版（J2SE）的基础上，所以具备了J2SE的所有优点和功能。包括“编写一次，到处可用”的可移植性、通过JDBC访问数据库、同原有企业资源进行交互的CORBA技术，以及一个经过验证的安全模型。在这些基础上，J2EE又增加了对EJB（企业级Java组件）、Java servlets、Java服务器页面（JSPs）和XML技术的支持。</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 分布式结构与WebLogic应用服务器</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; J2EE提供了一个框架--一套标准API--用于开发分布式结构的应用，这个框架的实际实现留给了第三方厂商。部分厂商只是专注于整个J2EE架构中的的特定组件，例如Apache的Tomcat提供了对JSP和servlets的支持，BEA系统公司则通过其WebLogic应用服务器产品为整个J2EE规范提供了一个较为完整的实现。</P>
<P>&nbsp;&nbsp;&nbsp; WebLogic服务器已使建立和部署伸缩性较好的分布式应用的过程大为简化。WebLogic和J2EE代你处理了大量常规的编程任务，包括提供事务服务、安全领域、可靠的消息、名字和目录服务、数据库访问和连接池、线程池、负载平衡和容错处理等。</P>
<P>&nbsp;&nbsp;&nbsp; 通过以一种标准、易用的方式提供这些公共服务，象WebLogic服务器这样的产品造就了具有更好伸缩性和可维护性的应用系统，使其为大量的用户提供了增长的可用性。</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; J2EE技术</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 在接下来的部分里，我们将描述构成J2EE的各种技术，并且了解WebLogic服务器是如何在一个分布式应用中对它们进行支持的。最常用的J2EE技术应该是JDBC、JNDI、EJB、JSP和servlets，对这些我们将作更仔细的考察。</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 一、Java Database Connectivity (JDBC)</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; JDBC API以一种统一的方式来对各种各样的数据库进行存取。和ODBC一样，JDBC为开发人员隐藏了不同数据库的不同特性。另外，由于JDBC建立在Java的基础上,因此还提供了数据库存取的平台独立性。</P>
<P>&nbsp;&nbsp;&nbsp; JDBC定义了4种不同的驱动程序，现分述如下：</P>
<P>&nbsp;&nbsp;&nbsp; 类型 1： JDBC-ODBC Bridge</P>
<P>&nbsp;&nbsp;&nbsp; 在JDBC出现的初期，JDBC-ODBC桥显然是非常有实用意义的，通过JDBC-ODBC桥，开发人员可以使用JDBC来存取ODBC数据源。不足的是，他需要在客户端安装ODBC驱动程序，换句话说，必须安装Microsoft Windows的某个版本。使用这一类型你需要牺牲JDBC的平台独立性。另外，ODBC驱动程序还需要具有客户端的控制权限。</P>
<P>&nbsp;&nbsp;&nbsp; 类型 2： JDBC-native driver bridge</P>
<P>&nbsp;&nbsp;&nbsp; JDBC本地驱动程序桥提供了一种JDBC接口，它建立在本地数据库驱动程序的顶层，而不需要使用ODBC。JDBC驱动程序将对数据库的API从标准的JDBC调用转换为本地调用。使用此类型需要牺牲JDBC的平台独立性，还要求在客户端安装一些本地代码。</P>
<P>&nbsp;&nbsp;&nbsp; 类型 3： JDBC-network bridge</P>
<P>&nbsp;&nbsp;&nbsp; JDBC网络桥驱动程序不再需要客户端数据库驱动程序。它使用网络上的中间服务器来存取数据库。这种应用使得以下技术的实现有了可能，这些技术包括负载均衡、连接缓冲池和数据缓存等。由于第3种类型往往只需要相对更少的下载时间，具有平台独立性，而且不需要在客户端安装并取得控制权，所以很适合于Internet上的应用。</P>
<P>&nbsp;&nbsp;&nbsp; 类型 4： Pure Java driver</P>
<P>&nbsp;&nbsp;&nbsp; 第4种类型通过使用一个纯Java数据库驱动程序来执行数据库的直接访问。此类型实际上在客户端实现了2层结构。要在N-层结构中应用，一个更好的做法是编写一个EJB，让它包含存取代码并提供一个对客户端具有数据库独立性的服务。</P>
<P>&nbsp;&nbsp;&nbsp; WebLogic服务器为一些通常的数据库提供了JDBC驱动程序，包括Oracle, Sybase, Microsoft SQL Server以及Informix。它也带有一种JDBC驱动程序用于Cloudscape，这是一种纯Java的DBMS，WebLogic服务器中带有该数据库的评估版本。</P>
<P>&nbsp;&nbsp;&nbsp; 以下让我们看一个实例。</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; JDBC实例</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 在这个例子中我们假定你已经在Cloudscape中建立了一个PhoneBook数据库，并且包含一个表，名为CONTACT_TABLE ，它带有2个字段：NAME 和 PHONE。 开始的时候先装载Cloudscape JDBC driver，并请求 driver manager得到一个对PhoneBook Cloudscape数据库的连接。通过这一连接，我们可以构造一个 Statement 对象并用它来执行一个简单的SQL查询。最后，用循环来遍历结果集的所有数据，并用标准输出将NAME和PHONE字段的内容进行输出。</P>
<P>&nbsp;&nbsp;&nbsp; import java.sql.*;<BR>&nbsp;&nbsp;&nbsp; public class JDBCExample<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; public static void main( String args[] )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; try<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; Class.forName( COM.cloudscape.core.JDBCDriver );<BR>&nbsp;&nbsp;&nbsp; Connection conn = DriverManager.getConnection(&nbsp; jdbc：cloudscape：PhoneBook );<BR>&nbsp;&nbsp;&nbsp; Statement stmt = conn.createStatement();<BR>&nbsp;&nbsp;&nbsp; String sql =&nbsp; SELECT name, phone FROM CONTACT_TABLE ORDER BY name ;<BR>&nbsp;&nbsp;&nbsp; ResultSet resultSet = stmt.executeQuery( sql );<BR>&nbsp;&nbsp;&nbsp; String name;<BR>&nbsp;&nbsp;&nbsp; String phone;<BR>&nbsp;&nbsp;&nbsp; while ( resultSet.next() )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; name = resultSet.getString(1).trim();<BR>&nbsp;&nbsp;&nbsp; phone = resultSet.getString(2).trim();<BR>&nbsp;&nbsp;&nbsp; System.out.println( name + “,”&nbsp; + phone );<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch ( Exception e )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; // Handle exception here<BR>&nbsp;&nbsp;&nbsp; e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; 接着我们来看一看JDBC是如何在企业应用中的进行使用。 </P>
<P><STRONG>&nbsp;&nbsp;&nbsp; JDBC在企业级应用中的应用</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 以上实例其实是很基本的，可能有些微不足道。它假定了一个2层结构。在一个多层的企业级应用中，更大的可能是在客户端和一个EJB进行通信，该EJB将建立数据库连接。为了实现和改进可伸缩性和系统性能，WebLogic服务器提供了对连接缓冲池connection pool的支持。</P>
<P>&nbsp;&nbsp;&nbsp; Connection pool减少了建立和释放数据库连接的消耗。在系统启动以后即可建立这样的缓冲池，此后如故再有对数据库的请求，WebLogic服务器可以很简单地从缓冲池中取出数据。数据缓冲池可以在WebLogic服务器的weblogic.properties 文件中进行定义。</P>
<P>&nbsp;&nbsp;&nbsp; 在企业级应用的另一个常见的数据库特性是事务处理。事务是一组申明statement，它们必须做为同一个statement来处理以保证数据完整性。缺省情况下JDBC使用auto-commit 事务模式。这可以通过使用Connection类的 setAutoCommit() 方法来实现。</P>
<P>&nbsp;&nbsp;&nbsp; 现在我们已经对JDBC有了一些认识，下面该转向 Java Naming and Directory Interface(JNDI)了</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 二、JNDI</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP，本地文件系统，后者在应用服务器中的对象。</P>
<P>&nbsp;&nbsp;&nbsp; 在JNDI中，在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来说，它可以通过使用InitialContext 类来得到其第一个context：</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; Context ctx = new InitialContext();</P>
<P>&nbsp;&nbsp;&nbsp; 应用可以通过这个初始化的context经有这个目录树来定位它所需要的资源或对象。例如，假设你在Weblogic服务器中展开了一个EJB并将home接口绑定到名字myApp.myEJB ，那么该EJB的某个客户在取得一个初始化context以后，可以通过以下语句定位home接口： </P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; MyEJBHome home = ctx.lookup( “myApp.myEJB” );</P>
<P>&nbsp;&nbsp;&nbsp; 在这个例子中，一旦你有了对被请求对象的参考，EJB的home接口就可以在它上面调用方法。以上关于JNDI的讨论只是冰山之一角而已。如果要更进一步地在context中查找对象，JNDI也提供了一些方法来进行以下操作：　 </P>
<P>&nbsp;&nbsp;&nbsp; 将一个对象插入或绑定到context。这在你展开一个EJB的时候是很有效的。 </P>
<P>&nbsp;&nbsp;&nbsp; 从context中移去对象。 </P>
<P>&nbsp;&nbsp;&nbsp; 列出context中的所有对象。 </P>
<P>&nbsp;&nbsp;&nbsp; 创建或删除子一级的context。 </P>
<P>&nbsp;&nbsp;&nbsp; 接下来，我们要开始关注EJB了。 </P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 三、Enterprise Java Beans (EJB)</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; J2EE技术之所以赢得某体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑，由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务，例如目录服务、事务管理、安全性、资源缓冲池以及容错性。</P>
<P>&nbsp;&nbsp;&nbsp; EJB规范定义了3中基本的bean类型：</P>
<P>&nbsp;&nbsp;&nbsp; Stateless session beans：提供某种单一的服务，不维持任何状态，在服务器故障发生时无法继续存在，生命期相对较短。例如，一个stateless&nbsp;session bean可能被用于执行温度转换计算。</P>
<P>&nbsp;&nbsp;&nbsp; Stateful session bean：T提供了与客户端的会话交互，可以存储状态从而代表一个客户。典型例子是购物车。Stateful session bean在服务器故障时无法继续生存，生命气相对较短。每一个实例只用于一个单个的线程。</P>
<P>&nbsp;&nbsp;&nbsp; Entity beans： 提供了一致性数据的表示-- 通常存放在数据库中——在服务器故障发生后能继续存在。多用户情况下可以使用EJB来表示相同的数据。entity EJB的一个典型例子是客户的帐号信息。</P>
<P>&nbsp;&nbsp;&nbsp; 尽管有以上的区别，所有的EJB还是有许多的共同之处。它们都处理home interface。它定义了一个客户端是如何创建与消亡EJB的。可以在bean中对定义了客户端方法的远程接口进行调用；bean类则执行了主要的商务逻辑。</P>
<P>&nbsp;&nbsp;&nbsp; 描述EJB的开发已经超出了本文的范围。但是，如果一个EJB已经被开发了或者从第三方进行了购买，它就必须在应用服务器中进行发布。WebLogic Server 5.1带有一个EJB Deployer Tool来协助处理EJB的发布。当你使用EJB Deployer Tool的时候，你要定义客户端所用的JNDI名字来定位EJB。Deployer Tool将生成wrapper类来处理和容器的通信以及在一个jar文件中把被请求的Java类绑定在一起。</P>
<P>&nbsp;&nbsp;&nbsp; 一旦EJB被发布，客户端就可以使用它的JNDI名字来定位EJB。首先，它必须得到一个到home接口的reference。然后，客户端可以使用该接口，调用一个create() 方法来得到服务器上运行的某个bean实例的句柄；最后，客户端可以使用该句柄在bean中调用方法。</P>
<P>&nbsp;&nbsp;&nbsp; 了解 EJB后，让我们再来看JSP。</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 四、JavaServer Pages (JSPs)</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 我们中间可能已经有许多人已经熟悉Microsoft的Active Server Pages (ASP)技术了。JSP和ASP相对应的，但更具有平台对立性。他们被设计用以帮助Web内容开发人员创建动态网页，并且只需要相对较少的代码。 </P>
<P>&nbsp;&nbsp;&nbsp; 即使Web设计师不懂得如何编程也可以使用JSP，因为JSP应用是很方便的。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理，然后将生成的HTML页面返回给客户端的浏览器。</P>
<P>&nbsp;&nbsp;&nbsp; 下面我们来看一个JSP的简单实例。它只显示了服务器的当前日期和时间。虽然，对语法的具体解释已经超出了本文的范围，但我们还是可以很直观地看到，Java代码被放在符号的中间，而Java的表达式则放在符号之间。</P>
<P>&nbsp;&nbsp;&nbsp; Date JSP sample</P>
<P>&nbsp;&nbsp;&nbsp; The current date is .</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;您可能有时候听说过JHTML。这是JSP以前的一种较老的标准。WebLogic服务器既可支持JSP，又可支持JHTML。请注意，在缺省状况下，JSP在WebLogic服务器中并没有处于有效状态。要使之有效，你可以编辑weblogic.properties文件。如果Web服务器还没有处于有效状态，则要先使之有效。Servlet的情况和JSP是一样的。 </P>
<P>&nbsp;&nbsp;&nbsp; 下面是： Java servlets </P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 五、Java servlets</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;servlet提供的功能大多与JSP类似，不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码，而servlets全部由Java写成并且生成HTML。</P>
<P>&nbsp;&nbsp;&nbsp; servlet是一种小型的Java程序，它扩展了Web服务器的功能。作为一种服务器端的应用，当被请求时开始执行，这和CGI Perl脚本很相似。Servlets和CGI脚本的一个很大的区别是：每一个CGI在开始的时候都要求开始一个新的进程——而servlets是在servlet引擎中以分离的线程来运行的。因此servlets在可伸缩性上提供了很好的改进。</P>
<P>&nbsp;&nbsp;&nbsp; 在开发servlets的时候，您常常需要扩展javax.servlet.http.HttpServlet类，并且override一些它的方法，其中包括：</P>
<P>&nbsp;&nbsp;&nbsp; service()： 作为dispatcher来实现命令-定义方法<BR>&nbsp;&nbsp;&nbsp; doGet()： 处理客户端的HTTP GET请求。<BR>&nbsp;&nbsp;&nbsp; doPost()： 进行HTTP POST操作</P>
<P>&nbsp;&nbsp;&nbsp; 其它的方法还包括处理不同类型的HTTP请求 -- 可以参考HttpServlet API文档。 </P>
<P>&nbsp;&nbsp;&nbsp; 以上描述的是标准J2EE Servlet API的各种方法。WebLogic服务器提供了一个该API完整的实现途径。一旦你开发了一个servlet，你就可以在weblogic.properties 中加以注册并由此可以在WebLogic服务器中对它进行配置。 </P>
<P>&nbsp;&nbsp;&nbsp; 通过Java servlets,我们已经到达了J2EE主要技术的末尾了。但J2EE所提供的并不止于这些。下面的段落中我们将简要地看一下现存的一些技术，包括RMI, Java IDL和CORBA, JTA, 以及XML，等。 </P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 六、Remote Method Invocation (RMI) </STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 正如其名字所表示的那样，RMI协议是在远程对象上调用一些方法。它使用了连续序列方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更下层的协议。 </P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 七、Java IDL/CORBA </STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 在Java IDL的支持下，开发人员可以将Java和CORBA集成在一起。 他们可以创建Java对象并使之可在CORBA ORB中展开, 或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径，通过它Java可以被用于将你的新的应用和legacy系统相集成。 </P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 八、Java Transaction Architecture (JTA)/Java Transaction Service (JTS)</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;JTA定义了一种标准的API，应用系统由此可以存取各种事务监控。JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范，并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 九、JavaMail and JavaBeans Activation Framework</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; JavaMail是用于存取邮件服务器的API，它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器，也支持IMAP服务器。</P>
<P>&nbsp;&nbsp;&nbsp; JavaMail利用JavaBeans Activation Framework(JAF)来处理MIME-编码的邮件附件。MIME的字节流可以被转换成Java对象，或者转换自Java对象。由此大多数应用都可以不需要直接使用JAF。</P>
<P><STRONG>&nbsp;&nbsp;&nbsp; 十、Java Messaging Service (JMS)</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; JMS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域，有支持发布/订阅(publish/subscribe)类型的域，并且提供对下列类型的支持：经认可的消息传递,事务型消息的传递，一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来对您的应用与legacy backend系统相集成。</P>
<P>&nbsp;&nbsp;&nbsp;<STRONG> 十一、Extensible Markup Language (XML)</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。XML的发展和Java是相互独立的，但是，它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合，您可以得到一个完美的具有平台独立性的解决方案。目前正有许多不同的公司在为Java和XML的组合而努力。如果要了解更多的这方面的信息，可以访问Sun的Java-XML页面，或者IBM developerWorks的XML Zone。</P></SPAN></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=2 cellPadding=0 width=572 border=0>
<TBODY>
<TR>
<TD height=43>&nbsp;&nbsp;</TD></TR></TBODY></TABLE><STRONG><FONT color=#008000>分享]J2EE初学者到精通必须需要理解的问题<BR><BR></FONT></STRONG>
<TABLE style="LINE-HEIGHT: 15pt" cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><SPAN style="FONT-SIZE: 12px">J2EE体系结构简单介绍<BR><BR>　　一、J2EE提出的背景<BR><BR>　　1、 企业级应用框架的需求<BR><BR>　　在许多企业级应用中，例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块，这些模块如果每次再开发中都由开发人员来完成的话，将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。<BR><BR>　　2、 为了通用必须要提出规范，不然无法达到通用<BR><BR>　　在上面的需求基础之上，许多公司都开发了自己的中间件，但其与用户的沟通都各有不同，从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准。<BR><BR>　　注：中间件的解释<BR><BR>　　中间件处在操作系统和更高一级应用程序之间。他充当的功能是：将应用程序运行环境与操作系统隔离，从而实现应用程序开发者不必为更多系统问题忧虑，而直接关注该应用程序在解决问题上的能力 。我们后面说到的容器的概念就是中间件的一种。<BR><BR>　　二、相关名词解释<BR><BR>　　容器：充当中间件的角色 WEB容器：给处于其中的应用程序组件（JSP，SERVLET）提供一个环境，使JSP,SERVLET直接更容器中的环境变量接口交互，不必关注其它系统问题。主要有WEB服务器来实现。例如：TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。<BR><BR>　　EJB容器：Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器，马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。<BR><BR>　　WEB容器和EJB容器在原理上是大体相同的，更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节，直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制，直接由容器来完成。<BR><BR>　　RMI/IIOP:远程方法调用/internet对象请求中介协议，他们主要用于通过远程调用服务。例如，远程有一台计算机上运行一个程序，它提供股票分析服务，我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。<BR><BR>　　JNDI:JAVA命名目录服务。主要提供的功能是：提供一个目录系统，让其它各地的应用程序在其上面留下自己的索引，从而满足快速查找和定位分布式应用程序的功能。<BR><BR>　　JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。<BR><BR>　　JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是JAVA编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。<BR><BR>　　JTA：JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。 JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。<BR><BR>　　EAI:企业应用集成。是一种概念，从而牵涉到好多技术。J2EE技术是一种很好的集成实现。<BR><BR>　　三、J2EE的优越性<BR><BR>　　1、 基于JAVA 技术，平台无关性表现突出<BR><BR>　　2、 开放的标准，许多大型公司已经实现了对该规范支持的应用服务器。如BEA ,IBM,ORACLE等。<BR><BR>　　3、 提供相当专业的通用软件服务。<BR><BR>　　4、 提供了一个优秀的企业级应用程序框架，对快速高质量开发打下基础。<BR><BR>　　四、现状<BR><BR>　　J2EE是由SUN 公司开发的一套企业级应用规范。现在最高版本是1.4。支持J2EE的应用服务器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。</SPAN></TD></TR></TBODY></TABLE><img src ="http://www.cnitblog.com/woo/aggbug/660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-06-30 22:22 <a href="http://www.cnitblog.com/woo/archive/2005/06/30/660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作要求 j2ee</title><link>http://www.cnitblog.com/woo/archive/2005/06/27/584.html</link><dc:creator>woow</dc:creator><author>woow</author><pubDate>Mon, 27 Jun 2005 13:02:00 GMT</pubDate><guid>http://www.cnitblog.com/woo/archive/2005/06/27/584.html</guid><wfw:comment>http://www.cnitblog.com/woo/comments/584.html</wfw:comment><comments>http://www.cnitblog.com/woo/archive/2005/06/27/584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/woo/comments/commentRss/584.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/woo/services/trackbacks/584.html</trackback:ping><description><![CDATA[1.日语、计算机或相关专业，大专或以上学历，2年以上IT工作经验 <BR>2.熟悉JSP和Servlet的原理，熟悉Struts框架，有Struts框架下应用系统开发的实际经验 <BR>3.具有面向对象系统分析和设计的实际经验；熟悉UML； <BR><BR>1 本科以上，年龄35以下，英语四级以上，专业不限，从事J2EE相关开发两年以上。 <BR>2 良好的团队意识、亲和力、口头表达能力，一定的领导能力。 <BR>3 J2EE技能：精通Struts、Petstore WAF、Tapestry、WebWork2中的一种或几种，精通EJB、Hibernate、iBATIS、Spring、JDO中的一种或几种，精通两个以上的J2EE常用设计模式。 <BR><BR><FONT size=2>Struts和Jdo<BR>.net remoteing<BR><BR>sap 要求<BR>1. University Bachelor degree or equivalent degree majoring in IT areas.<BR>2. At least 2 years experience in customizing development with SAP R/3, with ability to debug complex code. <BR>3. Working experience with multi-national IT environments and multi-lingual teams is a must.<BR>4. Strong analytical and problem resolution skill<BR>5. Good working knowledge of EDI and/or B2B disciplines<BR>6. Experience programming with VB/.NET or Java/J2EE, XML/HTML, Oracle SQL a plus<BR>7. 2+ years of programming experience with ABAP/4, BAPI/SAP-DCOM, IDOC, ALV Report, BDC, ALE, and SAP Script<BR>8. Familiar with UNIX environment<BR>9. Fluent English (both oral and written).</FONT><img src ="http://www.cnitblog.com/woo/aggbug/584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/woo/" target="_blank">woow</a> 2005-06-27 21:02 <a href="http://www.cnitblog.com/woo/archive/2005/06/27/584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>