﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Java技术专区--Hilly</title><link>http://www.blogjava.net/web/</link><description>http://blog.duyouyou.com</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:58:47 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:58:47 GMT</pubDate><ttl>60</ttl><item><title>关于破解星空极速的续，前面有一篇有网友有疑问啊</title><link>http://www.blogjava.net/web/archive/2007/06/17/sniffer_vnet_crack_1.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Sun, 17 Jun 2007 14:04:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2007/06/17/sniffer_vnet_crack_1.html</guid><wfw:comment>http://www.blogjava.net/web/comments/124844.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2007/06/17/sniffer_vnet_crack_1.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/124844.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/124844.html</trackback:ping><description><![CDATA[关于破解星空极速的续，前面有一篇有网友有疑问啊：<a id="_2fe7fc4aebae_HomePageDays_DaysList_ctl02_DayItem_DayList_ctl00_TitleUrl" href="/web/archive/2007/01/09/sniffer_vnet_crack.html"><font color="#223355">用Sniffer破解电信“星空极速”</font></a><br /><br />太忙了，好久不写博客了，这里详解一下，会的朋友不要嫌我罗嗦了。主要解决那位回复的朋友的问题。<br />“我已破获密码，但还是不能用XP自带程序拨号上网，什么原因？”<br /><br />打开IE选项，这个在哪里打开，我就不说了，找到连接选项卡，点添加按钮，选择通过。。。来连接网络，就是带pppoe的那个啦。<br />今天就提示到这里，改天有空再配图说明。<img src ="http://www.blogjava.net/web/aggbug/124844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2007-06-17 22:04 <a href="http://www.blogjava.net/web/archive/2007/06/17/sniffer_vnet_crack_1.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>这里的国际英文域名只要40元，真便宜啊。</title><link>http://www.blogjava.net/web/archive/2007/06/17/taobao_domain.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Sun, 17 Jun 2007 13:50:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2007/06/17/taobao_domain.html</guid><wfw:comment>http://www.blogjava.net/web/comments/124842.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2007/06/17/taobao_domain.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/124842.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/124842.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天在淘宝上看到一个店铺：安之信网络淘宝店http://shop34546947.taobao.com/，顶级国际英文域名<br>.com<br>.net<br>.org都只要40元，店主刚开店正在促销赚信誉啊！<br>域名都是新网互联的。<br>机会难得。还有虚拟主机也价优。<br>连忙收藏了。&nbsp;&nbsp;<a href='http://www.blogjava.net/web/archive/2007/06/17/taobao_domain.html'>阅读全文</a><img src ="http://www.blogjava.net/web/aggbug/124842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2007-06-17 21:50 <a href="http://www.blogjava.net/web/archive/2007/06/17/taobao_domain.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Sniffer破解电信“星空极速”</title><link>http://www.blogjava.net/web/archive/2007/01/09/sniffer_vnet_crack.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Tue, 09 Jan 2007 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2007/01/09/sniffer_vnet_crack.html</guid><wfw:comment>http://www.blogjava.net/web/comments/92686.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2007/01/09/sniffer_vnet_crack.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/92686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/92686.html</trackback:ping><description><![CDATA[<div class="postTitle">
				<font size="5">用Sniffer破解电信“星空极速”</font>
		</div>
		<table style="TABLE-LAYOUT: fixed" border="0">
				<tbody>
						<tr>
								<td>
										<div>　　近期，网上关于电信捆绑“星空极速”拨号器的消息闹得沸沸扬扬，网友们纷纷谴责这种损害客户利益的行为。用户明明已经为上网支付了费用，可电信公司却还在利用手中的便利条件，强制性的给客户安装所谓的“星空极速”拨号器，用户使用它拨号上网后会不时弹出广告窗口，影响了正常使用。<br /><br />　　更为可恶的是，一旦安装了“星空极速”拨号器以后，原来系统自带的拨号工具无法使用（提示用户名密码错误），尤其对那些不太了解电脑的用户来说，只能任凭电信的欺负。除了弹出广告，禁止XP拨号程序外，有些用户反应有资料表明“星空极速”软件和本地网卡的MAC地址进行了绑定，用户安装该软件后，，多用户通过路由器共享上网也被限制，部分地区甚至会弹出无法屏蔽的小广告窗口，卸载“极速星空”软件也不能重新恢复到原来的状态。 <br /><br />　　这样恶毒的程序，对广大电脑爱好者来说必须先杀之而后快。现在网上已经有朋友摸索出了破解的方法，对于那些尚未遭受“星空极速”拨号器骚扰的朋友来说，掌握应对方法是完全必要的。该软件是否为流氓软件我们姑且不去讨论，但是用Sniffer破解星空极速的这种解决方案确实可以很好地解决部分网友想要通过路由器共享上网的问题。 <br /><br />　　由于“星空极速”目前只是在全国部分地区推行，所以不一定所有的网友都适用。如果你没有受到该软件的骚扰，或者感觉此软件还不错，pass过去不用看了。</div>
										<br />
										<div>　　对于“星空极速”，很多用户还不了解：</div>
										<div>　　<span style="COLOR: #4b0082">电信自己的说法是：“星空极速”客户端（以下简称“星空极速”）是由中国电信组织研究和开发的新一代宽、窄带集成拨号软件。其主要功能是在现有的Windows操作系统环境下提供宽带和窄带拨号功能，同时在该客户端中提供给用户一些增值服务内容。本系统在充分考虑了用户使用习惯的同时，参考了目前热门软件的安装，卸载，在线升级以及相关一系列功能的设计思想，从而达到只要用户有过使用其他宽、窄带拨号软件上网的经验，在使用本软件的时候就能够轻松上手，达到尽情享受上网冲浪快乐的目标。</span></div>
										<br />
										<div>　　不过，网上很多用户反映：</div>
										<div>　　“星空极速”的推广策略包括在宽带网络中禁用Windows系统自带的拨号软件，只能使用“星空极速”才能连接到因特网。因此近段时间上海宽带用户大规模断网事件，电信方面给出的解决方案中的最后有一条“ADSL用户可下载中国电信‘星空极速3.0’客户端拨号程序作为ADSL的上网拨号软件使用”，被人质疑为强行推广“星空极速”的前奏。</div>
										<div>　　然而根据部分网友的实际测试，一旦安装这个“星空极速”之后，就无法再使用Windows XP自带的拨号软件拨号上网，部分地区甚至不能再使用路由拨号上网，有资料表明“星空极速”软件和本地网卡的MAC地址进行了绑定，因此多台电脑公用一个线路上网将不再可能，从而“节省”了电信越来越紧张的带宽资源。</div>
										<div>　　从网易科技上的投票显示，能接受和理解电信的这种行为的人只占1%，反对者占据了绝大多数，实际上这也是正常的，相信每个使用ADSL的用户，上网费都不少，花了这么多钱上网，为什么电信还要强迫用户看他的广告呢？这样的确很不讲道理，遭到网络媒体炮轰也是必然的。</div>
										<div>　　其实，以目前电信的技术，即使不安装这个“星空极速”拨号器，某些地方的ADSL用户也是会有电信广告弹出，因为电信可以使用HTTP劫持技术来实现广告弹出，对于这种广告，网易论坛的网友给出了解决方案就是“打电信客服10000号‘骂人’解决”。</div>
										<div>　　种种情况都表明，如果中国电信再不迅速澄清真相，扭转局面，那么广大的中国电信ADSL用户就会对中国电信的前途和命运就产生强烈的质疑！</div>
										<br />
										<div>　　装星空极速，登陆上网后，星空极速自动向服务器端发送主机网卡地址，服务端就会标记出你已经使用“星空极速”拨号，一旦标记成功，以后不管你使用什么拨号软件或者路由器都将无法拨通，显示密码错误，即使重装系统也不行。</div>
										<div>　　很多人都在使用路由器进行ADSL拨号，这样几台机子利用路由可以愉快的共享上网，电信的ADSL虚拟拨号用和是PPPOE的协议，这个协议是电信无法改变的，因此，电信很难限制大家共享上网。</div>
										<div>　　电信多次尝试封掉路由器未果，开始的时候有网络尖兵，相当于一个电信的网络扫描软件，不断的冲击路由器上的某些端口，导致路由无法正常工作，但是这个软件造成了网络的大量阻塞，在电信线路容量不扩充的前提下，是非常危险的软件，受害人可能会先是电信自己，同时现在的路由器通过刷固件升级，已经不害怕尖兵的扫描了，第一次攻击失败。</div>
										<div>　　最近，电信花了几百万发明了一个拨号服务端，叫做“星空极速”，电信号称这个软件可以提升上网速度，512K的 ADSL直接升级为1M，1M的升级为1.5M，西安地区的有人已经试过了，根本没有提速，而且电信也没有这样宣传，电信是派人挨家挨户的给用户安装这个软件的，安装之后的唯一结果就是你可能无法使用路由器拨号了。</div>
										<div>　　星空极速会改掉你的密码，给你的网络连接加一个PPPOE的密码协议转换，你在星空极速软件上使用的还是你原来的密码，但是实际PPPOE协议发出的密码，却是一套转换过的。</div>
										<div>　　mephisto （西安一网友）发现了这个现象，他在windows下装了星空极速，在Linux下使用原密码就不能上网了，用SNIFFER看了一下，实际密码是在原来的密码上加了一串MD5码，这个MD5码是根据用户名算出来的，就比如说你原来的密码是aaaaaaa，用户名是j88888888，那么装了急速星空之后，密码可能会变成aaaaaaa3D8CAB，这个3D8CAB是由j88888888用户名算出来的，但是在急速星空上你还是输入aaaaaaa当作密码，就是说你没有办法知道真实密码了，虽然路由器用的是PPPOE协议拨号，但不知道真实密码当然不能用。</div>
										<br />
										<div>
												<strong>
														<span style="FONT-SIZE: 12pt; COLOR: #ff0000">破解“星空极速”的方法：</span>
												</strong>
										</div>
										<div>　　想必大家对星空极速痛恨有加，西安的mephisto在他的blog（<a href="http://mephistophilis.spaces.live.com/">http://mephistophilis.spaces.live.com/</a> ） 放出破解程序，但是此程序只对应西安市个别地区有效，因为西安市有V、G、A开头的用户名，不能100%解除星空极速。</div>
										<div>　　用Sniffer破解星空极速的方法100%有效，而且不限地区，全国通用，解除后可以用XP自代程序拨号，可多机上网： <br />　　 <br />　　第一步:：下载 SNIFFER PRO 4.7.5 SP5  33MB 英文不好的可以下个汉化补丁 <br />　　<strong>Sniffer Pro v4.7.530 特别版 ：</strong>　　<a href="http://down.chinaz.com/GO.asp?31bdc6fd38194543fe5cacffb0efcd64ccecb6@026">下载1</a>    <a href="http://down.chinaz.com/GO.asp?31bdc6fd38194543fe5cacffb0efcd64ccecb6@010">下载2</a></div>
										<div>　　<strong>Sniffer Pro v4.7.530 汉化补丁：</strong>　　<a href="http://down.chinaz.com/GO.asp?8f394fbc0a2984581902e78be34bc1f0c3abd5@026">下载1</a>    <a href="http://down.chinaz.com/GO.asp?8f394fbc0a2984581902e78be34bc1f0c3abd5@010">下载2</a></div>
										<div>　　<strong>Sniffer Pro 4.7.5 注册汉化版（含教程）：　　</strong><a href="http://www.qcode.org/soft/download.asp?softid=12364&amp;downid=0&amp;id=12357">下载</a></div>
										<div>　　<strong>SN：SR424-255RR-255OO-255RR 　　SN：SA154-2558Y-255T9-2LASH </strong></div>
										<br />
										<div>　　第二步:：安装SNIFFER PRO ，安装汉化补丁，重新启动系统 <br />　　 <br />　　第三步:：不要运行星空极速连接网络，运行程序，点击“文件”---“选定设置”，选择你的网卡，确定 </div>
										<div>
												<img style="WIDTH: 500px; CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.7788ok.com/UpLoadFiles/20069485118694.jpg" onload="javascript:if(this.width&gt;500){this.resized=true;this.style.width=500;}" border="0" resized="true" />
										</div>
										<br />
										<div>　　第四步：点击菜单“监视器”___“主机列表”，出现如图，点击图中2处“本地”，点击图中3处“捕捉”，这时连接运行星空极速连接网络，连接上网后可以看到图中4处，变为望远镜有个红点，这时候点击图中4处，这样就停止了捕捉</div>
										<div>
												<img style="WIDTH: 500px; CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.7788ok.com/UpLoadFiles/20069485118268.jpg" onload="javascript:if(this.width&gt;500){this.resized=true;this.style.width=500;}" border="0" resized="true" />
										</div>
										<br />
										<div>　　第五步：点击图中1处解码，出现如图报告。在2处，可以通过单击每一步序号，观察3处本机与服务器通讯记录，找到你的用户名（涂红处），和加过密的密码（涂黑处）</div>
										<div>
												<img style="WIDTH: 500px; CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.7788ok.com/UpLoadFiles/20069485118972.jpg" onload="javascript:if(this.width&gt;500){this.resized=true;this.style.width=500;}" border="0" resized="true" />
										</div>
										<br />
										<div>　　第六步：删除星空极速，用XP自带程序拨号。注意，你的用户名不变，密码改为刚才截获的密码。</div>
										<br />
										<div>　　注意：很奇怪，别的地方星空极速后用户名通常是不变的，密码改变，而我们这里却是用户名变了，密码没变，不知其他地方是不是也有这样。<br /></div>
								</td>
						</tr>
				</tbody>
		</table>from：<a href="http://lzsy.51r.com/user3/lzsy/archives/2006/285495.shtml">http://lzsy.51r.com/user3/lzsy/archives/2006/285495.shtml</a><img src ="http://www.blogjava.net/web/aggbug/92686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2007-01-09 18:05 <a href="http://www.blogjava.net/web/archive/2007/01/09/sniffer_vnet_crack.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 应用程序 安装程序 制作工具 InstallAnywhere (转)</title><link>http://www.blogjava.net/web/archive/2007/01/08/HowToUsing_InstallAnywhere.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Mon, 08 Jan 2007 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2007/01/08/HowToUsing_InstallAnywhere.html</guid><wfw:comment>http://www.blogjava.net/web/comments/92322.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2007/01/08/HowToUsing_InstallAnywhere.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/92322.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/92322.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: InstallAnywhere来制作Java Application 应用程序的安装程序&nbsp;&nbsp;<a href='http://www.blogjava.net/web/archive/2007/01/08/HowToUsing_InstallAnywhere.html'>阅读全文</a><img src ="http://www.blogjava.net/web/aggbug/92322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2007-01-08 10:56 <a href="http://www.blogjava.net/web/archive/2007/01/08/HowToUsing_InstallAnywhere.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么要使用EJB</title><link>http://www.blogjava.net/web/archive/2006/09/07/why_use_EJB.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Thu, 07 Sep 2006 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2006/09/07/why_use_EJB.html</guid><wfw:comment>http://www.blogjava.net/web/comments/68364.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2006/09/07/why_use_EJB.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/68364.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/68364.html</trackback:ping><description><![CDATA[<h2 align="center">为什么要使用EJB？</h2>
		<p align="center">来源：<a href="http://www.jdon.com/artichect/whyEJB.htm">http://www.jdon.com/artichect/whyEJB.htm</a></p>
		<p align="left">　　首先，我们必须明确，为什么要使用J2EE？J2EE优点是什么？使用J2EE的主要原因是多层结构，传统的两层C/S结构难于维护，稳定性极差，界面代码和数据库代码混淆在一起，牵一动百，多层结构使得界面和数据库完全分离，并且诞生了中间件这样的技术，如下图：</p>
		<p align="center">
				<img height="186" src="http://www.jdon.com/artichect/images/middle.png" width="400" />
		</p>
		<h3>Web+EJB能组成真正的多层结构</h3>
		<p>　　为什么使用EJB我原先认为这不是一个讨论的话题，因为EJB是J2EE重要的组成部分，可以说没有EJB的J2EE只是一种Web系统，这样的系统非常容易丧失了多层结构的大部分优点（仔细想想那些混合多种层次功能JavaBeans和传统两层结构有什么区别？）。</p>
		<p>　　当然，可以人为地在Javabeans之间进行层次划分，例如Hibernate算数据持久层，某些JavaBeans是业务核心层，但是因为都是普通JavaBeans，这种划分没有一种强制性和明显标志性，这样的系统更换了主创人员或设计师，可能就会被新的程序员修改得非常混乱。</p>
		<p>　　我们先看看一个包含EJB的J2EE系统是如何清晰地表达层次。如下图：</p>
		<p align="center">
				<img height="300" src="http://www.jdon.com/artichect/images/j2ee.png" width="482" />
		</p>
		<p>　　Web完全只是一个MVC模式的实现，关键业务核心是在EJB的服务层实现，这样做的优点是，Web只负责界面相关部分，因为，如果是一个智能客户端，如Swing或J2ME，在不需要修改任何业务核心的情况下能够方便地更换。同样，提供Web Services功能，也只是在 Web层修改，不会涉及EJB方面的修改，同样保证了系统的稳定性，保证了系统升级和未来的扩展性。</p>
		<p>　　如果不使用EJB，在EJB服务层实现的业务核心将由普通JavaBeans实现，使用何种架构或设计能够保证负责MVC的JavaBeans和负责业务核心的JavaBeans清晰地分开，又如何保证在新的程序员不会破坏和打乱你精心布局的JavaBeans架构？</p>
		<h3>EJB提供性能优化支持</h3>
		<p>　　最主要的是性能问题，由于以前国内中文Java网站有些人弯曲EJB，认为EJB性能低，其实这是一种非常肤浅错误的认识，我们首先看看在一般Java环境中是如何提高性能。</p>
		<p>　　假定一个JavaBeans为A，那么一般使用这个JavaBeans命令如下：</p>
		<p>　　A a = new A();</p>
		<p>　　但是，在高访问量的环境中，new A()其实是很费时消耗系统性能的，因此，能不能在软件系统启动时候就预先建立一些对象，这样，系统运行时，从这些已经生成的对象池中借用一个，这样，就无需在使用时进行New，节约了开销，提高了性能，因此，真正成熟性能解决方案都是需要对象池等支持。</p>
		<p>　　在一个纯Web结构的系统（也就是只能运行在Tomat环境中），例如Struts + Hibernate等这样的系统，除非自己动手做，一般是没有对象池技术支持的，因此他们的性能只能算是Demo演示版本的性能，根本无法承受大容量并发访问，也无法称为一个成熟的系统，所以，我们研究成熟的开源Web系统，如Jive、OFBize，LifeRay等，他们都在Web层拥有自己的对象池和缓存池。</p>
		<p>　　对象池和缓存机制是J2EE必须的吗？当然，是所有成熟系统必须的，Windows系统如果去掉缓存将会变得怎样？</p>
		<p>　　自己动手开发对象池和缓存机制并不是一件简单的事情，需要对多线程以及同步锁等底层原理有深层次的把握，这其实也是一门非常深入的Java研究分支，所以，你可以抛开你的客户焦急的催促，精心研究开发自己的对象池和缓存池。</p>
		<p>　　但是，EJB容器（如JBoss）已经提供了对象池和缓存机制，所以，没有事务机制的无状态Session Bean的性能肯定要强于普通JavaBeans。EJB容器不但在单机中提供了对象池和缓存，而且可以跨服务器实现动态负载平衡，这些都无需开发者自己开发任何软件代码，结构如下：</p>
		<p align="center">
				<img height="227" src="http://www.jdon.com/artichect/images/ejb.png" width="304" />
		</p>
		<h3 align="left">EJB组件能提供真正的可重用框架</h3>
		<p align="left">　　每一个jar包代表一个EJB组件，一个系统可以由多个可重用的EJB组件构成，例如：树形结构EJB组件；自增序号EJB组件；用户资料EJB组件等，这样的EJB组件可以象积木一样搭配在大部分应用系统中，提高了系统的开发效率，保证了开发质量。</p>
		<p align="left">　　下图是某个新的具体系统时应用到的EJB组件图，在这个新的应用中，由于使用了以前大量可重用的EJB组件，新的开发工作基本集中在界面设计和流程安排上：</p>
		<p align="center">
				<img height="421" src="http://www.jdon.com/artichect/images/ejbcomps.png" width="297" />
		</p>
		<h3>EJB提供了事务机制</h3>
		<p>　　事务机制对于一些关键事务是很重要的，例如ATM机提款，提款有多个动作：修改数据库以及数钱等，如果这其中有任何一个环节出错，那么其它已经实现的操作必须还原，否则，就会出现，提款人没有拿到钱，但是卡上已经扣款等不可思议的事情发生。</p>
		<p>　　EJB提供的事务机制非常周全，但事务机制带来的缺点是性能的降低，因此，有些人认为EJB很重，因为在实际应用中，有的用户系统可能不需要事务机制，只是需要EJB提供的性能优化机制，这样，如果使用EJB，就象叫一个人来背东西，他除了背着我要的东西外，还背着我不要的东西。</p>
		<p>　　除非你是一个完美主义，在一般企业应用或数据库系统应用中，EJB不会对你构成很重的包袱。</p>
		<h3>CMP独特的优点</h3>
		<p>　　开源以及一些数据库持久层技术崇拜者，一直抨击CMP，认为CMP慢无用，实际最大的问题是他们的设计和使用问题。</p>
		<p>　　由于EJB容器（如JBoss）对CMP实现有事务机制的缓存优化，因此，CMP特别适合多个用户同时更新同一个数据源的情况，CMP这种严格的事务完整性保证多个用户同时操作一个数据记录时，能够保证性能优化和数据的完整性，如果这个数据记录是是软件系统的状态标志，它的状态会影响系统中很多的环节，那么状态更改的重要性不言而喻。</p>
		<p>　　如果没有事务完整性支持，你的软件系统在用户访问量变大，就会变得发生各种不可能发生的逻辑错误，查看程序逻辑是正确的，那么问题出在哪里？出在数据完整性上。</p>
		<p>　　由于每个CMP在内存中都有一个缓存，在实际应用中，如果使用CMP批量读数据库数据，几万条查询完毕，内存中充满了几万条CMP缓存，如果这时你的EJB容器设置不当（如使用JBoss缺省配置），那么JVM的垃圾回收机制就会频繁启动，导致你的系统变慢甚至死机，这也是一些人抨击CMP慢的原因所在，其实他们使用方法不当，或者没有正确配置EJB容器CMP缓存。</p>
		<p>　　对于这种情况，根据J2EE核心模式，推荐使用DAO+JDBC方式。</p>
		<h3>小结</h3>
		<p>　　除非你对设计模式非常精深，能够将自己系统中的JavaBeans使用模式或某种框架进行固定分层，同时，你孜孜不倦研发出对象池，又熟练于JTA等事务机制，你可以选择没有EJB的纯Web结构，就象Jive、OFBiz那样。当然还有一个前提，老板不懂或者非常有挑战性（做与IBM SUN 微软齐名的公司和技术）。</p>
		<p>　　不要再被TSS那些狂热的开源先生误导，他们有时间有保障可以做他们喜欢的事情，作为专业的J2EE程序员，按照J2EE标准去学习去行动，也不要认为，只要使用了J2EE其中某个技术如Jsp或JavaBeans就心安理得认为自己的系统是J2EE了。</p>
		<p>　　当然，我并不是说纯Web系统不能实现多层结构，但是至少在很多方面没有Web+EJB结构完善和清晰，所以，EJB不是J2EE可以忽视的部分，而是主要的重要的部分，重要业务功能核心都封装在EJB中，相反Web层是一种次要的、和界面相关的层次。</p>
		<p>　　补充：什么情况下不需要EJB，在SUN的SECA架构师试卷中回答：小型系统和不需要事务。另外过去那种认为“EJB有性能问题”根本是一种缪误，具体可参考下面有关问题。</p>
		<h3>相关文章：</h3>
		<p>
				<a href="http://www.jdon.com/jive/article.jsp?forum=121&amp;thread=22282" target="_blank">J2EE集群原理</a>
		</p>
		<p>
				<a href="http://www.jdon.com/jive/thread.jsp?forum=16&amp;thread=22281" target="_blank">为什么需要有态Session Bean</a>
		</p>
		<p>
				<a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;f=11&amp;t=006707" target="_blank">When to not use EJB </a>
		</p>
		<p>
				<a class="home_title" href="http://www.jdon.com/artichect/oo_math.htm" target="_blank">
				</a>
				<a href="http://www.jdon.com/jive/article.jsp?forum=16&amp;thread=24513" target="_blank">关于SPING与EJB的胡言乱语--重和轻永恒的话题</a>
				<br />
		</p>
		<h3>
				<a href="http://www.jdon.com/artichect/jdonframework/app.htm" target="_blank">
						<br />
				</a>
		</h3><img src ="http://www.blogjava.net/web/aggbug/68364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2006-09-07 20:04 <a href="http://www.blogjava.net/web/archive/2006/09/07/why_use_EJB.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 中的内存泄漏</title><link>http://www.blogjava.net/web/archive/2006/09/07/Leakage_of_Memory.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Thu, 07 Sep 2006 11:49:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2006/09/07/Leakage_of_Memory.html</guid><wfw:comment>http://www.blogjava.net/web/comments/68362.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2006/09/07/Leakage_of_Memory.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/68362.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/68362.html</trackback:ping><description><![CDATA[出自：ibm:developerworks中国网站 欧阳辰周欣 <br />一 问题的提出<br /><br />Java的一个重要优点就是通过垃圾收集器(Garbage Collection，GC)自动管理内存的回收，程序员不需要通过调用函数来释放内存。因此，很多程序员认为Java不存在内存泄漏问题，或者认为即使有内存泄漏也不是程序的责任，而是GC或JVM的问题。其实，这种想法是不正确的，因为Java也存在内存泄露，但它的表现与C 不同。<br /><br />随着越来越多的服务器程序采用Java技术，例如JSP，Servlet， EJB等，服务器程序往往长期运行。另外，在很多嵌入式系统中，内存的总量非常有限。内存泄露问题也就变得十分关键，即使每次运行少量泄漏，长期运行之后，系统也是面临崩溃的危险。<br /><br />二 Java是如何管理内存<br /><br />为了判断Java中是否有内存泄露，我们首先必须了解Java是如何管理内存的。Java的内存管理就是对象的分配和释放问题。在Java中，程序员需要通过关键字new为每个对象申请内存空间 (基本类型除外)，所有的对象都在堆 (Heap)中分配空间。另外，对象的释放是由GC决定和执行的。在Java中，内存的分配是由程序完成的，而内存的释放是有GC完成的，这种收支两条线的方法确实简化了程序员的工作。但同时，它也加重了JVM的工作。这也是Java程序运行速度较慢的原因之一。因为，GC为了能够正确释放对象，GC必须监控每一个对象的运行状态，包括对象的申请、引用、被引用、赋值等，GC都需要进行监控。<br /><br />监视对象状态是为了更加准确地、及时地释放对象，而释放对象的根本原则就是该对象不再被引用。<br /><br />为了更好理解GC的工作原理，我们可以将对象考虑为有向图的顶点，将引用关系考虑为图的有向边，有向边从引用者指向被引对象。另外，每个线程对象可以作为一个图的起始顶点，例如大多程序从main进程开始执行，那么该图就是以main进程顶点开始的一棵根树。在这个有向图中，根顶点可达的对象都是有效对象，GC将不回收这些对象。如果某个对象 (连通子图)与这个根顶点不可达(注意，该图为有向图)，那么我们认为这个(这些)对象不再被引用，可以被GC回收。<br /><br />以下，我们举一个例子说明如何用有向图表示内存管理。对于程序的每一个时刻，我们都有一个有向图表示JVM的内存分配情况。以下右图，就是左边程序运行到第6行的示意图。<br /><br /><br />Java使用有向图的方式进行内存管理，可以消除引用循环的问题，例如有三个对象，相互引用，只要它们和根进程不可达的，那么GC也是可以回收它们的。这种方式的优点是管理内存的精度很高，但是效率较低。另外一种常用的内存管理技术是使用计数器，例如COM模型采用计数器方式管理构件，它与有向图相比，精度行低(很难处理循环引用的问题)，但执行效率很高。<br /><br />三 什么是Java中的内存泄露<br /><br />下面，我们就可以描述什么是内存泄漏。在Java中，内存泄漏就是存在一些被分配的对象，这些对象有下面两个特点，首先，这些对象是可达的，即在有向图中，存在通路可以与其相连；其次，这些对象是无用的，即程序以后不会再使用这些对象。如果对象满足这两个条件，这些对象就可以判定为Java中的内存泄漏，这些对象不会被GC所回收，然而它却占用内存。<br /><br />在C 中，内存泄漏的范围更大一些。有些对象被分配了内存空间，然后却不可达，由于C 中没有GC，这些内存将永远收不回来。在Java中，这些不可达的对象都由GC负责回收，因此程序员不需要考虑这部分的内存泄露。<br /><br />通过分析，我们得知，对于C ，程序员需要自己管理边和顶点，而对于Java程序员只需要管理边就可以了(不需要管理顶点的释放)。通过这种方式，Java提高了编程的效率。<br /><br />因此，通过以上分析，我们知道在Java中也有内存泄漏，但范围比C 要小一些。因为Java从语言上保证，任何对象都是可达的，所有的不可达对象都由GC管理。<br /><br />对于程序员来说，GC基本是透明的，不可见的。虽然，我们只有几个函数可以访问GC，例如运行GC的函数System.gc()，但是根据Java语言规范定义， 该函数不保证JVM的垃圾收集器一定会执行。因为，不同的JVM实现者可能使用不同的算法管理GC。通常，GC的线程的优先级别较低。JVM调用GC的策略也有很多种，有的是内存使用到达一定程度时，GC才开始工作，也有定时执行的，有的是平缓执行GC，有的是中断式执行GC。但通常来说，我们不需要关心这些。除非在一些特定的场合，GC的执行影响应用程序的性能，例如对于基于Web的实时系统，如网络游戏等，用户不希望GC突然中断应用程序执行而进行垃圾回收，那么我们需要调整GC的参数，让GC能够通过平缓的方式释放内存，例如将垃圾回收分解为一系列的小步骤执行，Sun提供的HotSpot JVM就支持这一特性。<br /><br />下面给出了一个简单的内存泄露的例子。在这个例子中，我们循环申请Object对象，并将所申请的对象放入一个Vector中，如果我们仅仅释放引用本身，那么Vector仍然引用该对象，所以这个对象对GC来说是不可回收的。因此，如果对象加入到Vector后，还必须从Vector中删除，最简单的方法就是将Vector对象设置为null。<br /><br />Vector v=new Vector(10);<br />for (int i=1;i&lt;100; i )<br />{<br />Object o=new Object();<br />v.add(o);<br />o=null;<br />}<br />//此时，所有的Object对象都没有被释放，因为变量v引用这些对象。<br /><br />四 如何检测内存泄漏<br /><br />最后一个重要的问题，就是如何检测Java的内存泄漏。目前，我们通常使用一些工具来检查Java程序的内存泄漏问题。市场上已有几种专业检查Java内存泄漏的工具，它们的基本工作原理大同小异，都是通过监测Java程序运行时，所有对象的申请、释放等动作，将内存管理的所有信息进行统计、分析、可视化。开发人员将根据这些信息判断程序是否有内存泄漏问题。这些工具包括Optimizeit Profiler，JProbe Profiler，JinSight , Rational 公司的Purify等。<br /><br />下面，我们将简单介绍Optimizeit的基本功能和工作原理。<br /><br />Optimizeit Profiler版本4.11支持Application，Applet，Servlet和Romote Application四类应用，并且可以支持大多数类型的JVM，包括SUN JDK系列，IBM的JDK系列，和Jbuilder的JVM等。并且，该软件是由Java编写，因此它支持多种操作系统。Optimizeit系列还包括Thread Debugger和Code Coverage两个工具，分别用于监测运行时的线程状态和代码覆盖面。<br /><br />当设置好所有的参数了，我们就可以在OptimizeIt环境下运行被测程序，在程序运行过程中，Optimizeit可以监视内存的使用曲线(如下图)，包括JVM申请的堆(heap)的大小，和实际使用的内存大小。另外，在运行过程中，我们可以随时暂停程序的运行，甚至强行调用GC，让GC进行内存回收。通过内存使用曲线，我们可以整体了解程序使用内存的情况。这种监测对于长期运行的应用程序非常有必要，也很容易发现内存泄露。<br /><br /><br />在运行过程中，我们还可以从不同视角观查内存的使用情况，Optimizeit提供了四种方式：<br /><br />堆视角。 这是一个全面的视角，我们可以了解堆中的所有的对象信息(数量和种类)，并进行统计、排序，过滤。了解相关对象的变化情况。 <br />方法视角。通过方法视角，我们可以得知每一种类的对象，都分配在哪些方法中，以及它们的数量。 <br />对象视角。给定一个对象，通过对象视角，我们可以显示它的所有出引用和入引用对象，我们可以了解这个对象的所有引用关系。 <br />引用图。 给定一个根，通过引用图，我们可以显示从该顶点出发的所有出引用。 <br /><br />在运行过程中，我们可以随时观察内存的使用情况，通过这种方式，我们可以很快找到那些长期不被释放，并且不再使用的对象。我们通过检查这些对象的生存周期，确认其是否为内存泄露。在实践当中，寻找内存泄露是一件非常麻烦的事情，它需要程序员对整个程序的代码比较清楚，并且需要丰富的调试经验，但是这个过程对于很多关键的Java程序都是十分重要的。<br /><br />综上所述，Java也存在内存泄露问题，其原因主要是一些对象虽然不再被使用，但它们仍然被引用。为了解决这些问题，我们可以通过软件工具来检查内存泄露，检查的主要原理就是暴露出所有堆中的对象，让程序员寻找那些无用但仍被引用的对象。<br /><br />相关资源:<br /><br />文章:<br />Jim Patrick, Handling memory leaks in Java programs,<br /><a href="http://www-106.ibm.com/developerWorks/library/j-leaks/index.html" target="_blank">http://www-106.ibm.com/developerWorks/library/j-leaks/index.html</a><br />Ed Lycklama, Does Java Technology Have Memory Leaks?<br /><a href="http://www.klgroup.com/javaone" target="_blank">http://www.klgroup.com/javaone</a><br />Sun, The Java HotSpot Virtual Machine, Technical White Paper<br /><br />软件：<br />Sitraka Software's Jprobe <a href="http://www.sitraka.com/" target="_blank">http://www.sitraka.com</a><br />Boland Software's Optimizeit <a href="http://optimizeit/" target="_blank">http://optimizeit</a><br />IBM alphaWorks' Jinsight <a href="http://www.alphaworks.ibm.com/tech/jinsight" target="_blank">http://www.alphaworks.ibm.com/tech/jinsight</a><br /><br />关于作者 <br />欧阳辰，北京大学计算机硕士毕业，98年起开始研究基于java的软件开发、测试，参与开发、测试过多个基于Java的应用程序和Web服务项目。联系方式<a href="mailto:yeekee@sina.com">yeekee@sina.com</a><br />周欣，北京大学计算机系在读博士生，主要研究方向：程序理解、逆向工程及软件度量，联系方式 <a href="mailto:zhouxin@sei.pku.edu.cn">zhouxin@sei.pku.edu.cn</a><br /><br /><img src ="http://www.blogjava.net/web/aggbug/68362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2006-09-07 19:49 <a href="http://www.blogjava.net/web/archive/2006/09/07/Leakage_of_Memory.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么叫IPTV？(网络电视)</title><link>http://www.blogjava.net/web/archive/2006/08/20/WhatIsIPTV.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Sun, 20 Aug 2006 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2006/08/20/WhatIsIPTV.html</guid><wfw:comment>http://www.blogjava.net/web/comments/64609.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2006/08/20/WhatIsIPTV.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/64609.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/64609.html</trackback:ping><description><![CDATA[IPTV(网络电视)是基于IP协议的电视广播服务。显示终端为电视、PC或者移动终端(手机)。用户通过机顶盒接入宽带网络，可以获得数字广播电视、VOD点播、视频录像等多种服务。<img src ="http://www.blogjava.net/web/aggbug/64609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2006-08-20 13:21 <a href="http://www.blogjava.net/web/archive/2006/08/20/WhatIsIPTV.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE建议的学习路线</title><link>http://www.blogjava.net/web/archive/2006/08/16/J2EE_Learning_Router.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Wed, 16 Aug 2006 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2006/08/16/J2EE_Learning_Router.html</guid><wfw:comment>http://www.blogjava.net/web/comments/63969.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2006/08/16/J2EE_Learning_Router.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/63969.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/63969.html</trackback:ping><description><![CDATA[<h1>J2EE建议的学习路线</h1>
		<div class="text">来源: <a href="http://tech.163.com/06/0509/09/2GM0OHJD0009159T.html#" target="_blank">赛迪博</a>　</div>
		<!-- main -->
		<div id="endMain">
				<div id="endText">
						<p style="TEXT-INDENT: 2em">网络上、书店都提供了很多资料，很多方式都可以得到J2EE方面的资料。如何系统的、高效的学习J2EE这个问题摆在我们面前。比如，有些人在看完一大堆书后，动起手来时还是不知道怎么开始。等等这些问题是我们最难处理的。如何寻找到一条很好的方式方法呢？</p>
						<p style="TEXT-INDENT: 2em"> </p>
						<p style="TEXT-INDENT: 2em">其实，换一个角度来看，比如，学英语，一共有三个层面的东西，首先是词汇，然后是语法，再者是习惯用法(希望读者能够从程序设计的角度考虑问题，看看这两者有什么相似之处，其实他们的逻辑是一样的)。还比如，上数学课，老师在黑板上解题，大家都很轻松得听懂，自己动手时就会有很多问题。这些看来很简单的问题，其实都包含一个道理：理论联系实际，理论指导实践。</p>
						<p style="TEXT-INDENT: 2em">我们的理论在于，我们要有很好的方法。有些人看了很多书，写了不少程序，水平还是提高得很慢，很难跨越这道难关。还是方法问题。当然，我所谈论的方法，是自己的心得，体会，大家都有自己很独特的方法。没有绝对好、绝对坏的方法，看作用对象是谁。所以这里我们重点看看我这文章中所会提出来的方法。大家来评论评论。</p>
						<p style="TEXT-INDENT: 2em">上一篇文中《走向J2EE，漫长的道路》，我谈到学习J2EE是一个漫长的过程，对，就是如此。因为她里面包含了很多全新的东西。而且，J2EE是现在进行时。我们知道J2EE由很多技术构成，比如，EJB、XML、JDBC、RMI、JSP、Servlet等等这些，又包含很多内容。无论这些具体的技术会怎么发展，怎么变化，我们要抓住主线，那就是掌握J2EE构架的精髓。用什么来分析呢，作用对象自然是J2EE Specification（最新版是1.4，http://java.sun.com/j2ee ）！！！当然学习J2EE的前提是你对J2SE有了足够的熟悉了，还有一点，你有很好的态度和兴趣。只看J2EE规范是不够的，最好结合产品和例子去思考，我建议大家用JBuilder 7 +BEA WebLogc Platform 7.0,这种开发模式。为什么这么说呢?首先，JBuilder 7本身的功能就是不错，应该属于主流Java IDE了。其次，BEA WebLogic Platform 7.0对J2EE Specification最新版支持程度很好，同时也较容易获取，用的人也多。第三，开发效率不错。（Borland网站有一份讲述JBuilder 7 + BEA WebLogic 7.0集成开发的文档，PDF格式。）</p>
						<p style="TEXT-INDENT: 2em">JBuilder 7本身提供了很多帮助文档，有PDF格式，也有HTML格式(采用JavaHelp技术制作的)，另外书店有一些JBuilder的参考用书，个人认为没有必要，第一，提供的版本都比较陈旧；第二，没有什么内容；第三，一般都是抄袭JBuilder 本身提供的帮助文档。（个人观点，没有任何商业目的）。当然，你的外语差不多要有四级水平，这个可不能没有，至少阅读能力不错（其实也不是这样的，我最开始时也是害怕，但开始投入后，英语资料也很简单，而且很地道！同时提高了您的外语）。WebLogic同样也不错,也提供了很多文档，http://www.bestdown.com 上有一本WebLogic Bible(针对6.1版)，国内的BEA公司好像也出了一本，有兴趣地可以去china pub看看。</p>
						<p style="TEXT-INDENT: 2em">有了这两者，我们需要找出合适的对象来学习。在这里给出几方面的素材给大家提供参考。</p>
						<p style="TEXT-INDENT: 2em">第一，在JBuilder 7的安装目录的这个地方，~~:\JBuilder7\samples\Ejb\Ejb20\ESiteWL，有一个很好的例子，ESite。其中用到了Session Façade设计模式，用到了JSP、Servlet、Session Beans、Entity Beans(cmp)等技术，学习过程中不懂得地方可以参考第二。</p>
						<p style="TEXT-INDENT: 2em">第二, Sun公司提供的J2EE Tutorial资料，很不错。</p>
						<p style="TEXT-INDENT: 2em">第三，Java Pet Store，刚开始学习J2EE技术分析该例子有点困难，再者这个例子中的J2EE构架不是很实用，但她给我们展示了J2EE几乎所有的核心技术，同时还提供了一本书，Design Enterprise Applications with J2EE Platform,很不错。</p>
						<p style="TEXT-INDENT: 2em">第四，对J2EE构架比较了解，对EJB,XML，JSP，Servlet等技术有了较好的理解和程序经验后，建议看看这几本书:《J2EE In Practice》、《Core J2EE Patterns》、《Sun Certified ENT Architect for J2EE - Tech Study Guide》、《Java Tools for Extreme Programming - wiley》、《EJB Design Patterns》、《MasteringEJB 2》、《Enterprise JavaBeans,3rd》,够你看得了：）。</p>
						<p style="TEXT-INDENT: 2em">有了上述基础，结合大家做项目中的一些经验，我想水平应该会有不少提高。在初步掌握上述基础后，我们每个人都可以有自己在J2EE中的定位，比如有些开发人员可以考虑把时间花在商务逻辑层、另外一些喜欢花功夫在表示层，更有贪婪的家伙花在J2EE中所有的层。还有Web Services（J2EE 1.4 Specification的重点，估计2003年初推出，今后的重要发展方向）。</p>
						<p style="TEXT-INDENT: 2em">同时，大家要注意从软件工程的角度考虑系统设计，实施，建议用用Together!!!要求大家对UML有足够的了解。</p>
				</div>
		</div><img src ="http://www.blogjava.net/web/aggbug/63969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2006-08-16 17:44 <a href="http://www.blogjava.net/web/archive/2006/08/16/J2EE_Learning_Router.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>卸载Linux，恢复Windows启动菜单（转）</title><link>http://www.blogjava.net/web/archive/2006/08/16/LinuxUninstall.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Wed, 16 Aug 2006 09:42:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2006/08/16/LinuxUninstall.html</guid><wfw:comment>http://www.blogjava.net/web/comments/63967.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2006/08/16/LinuxUninstall.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/63967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/63967.html</trackback:ping><description><![CDATA[<div class="postText">
				<font size="2">1：完全卸载。<br /><br />不用想多少复杂的方法，用 WINDOWS 的 FDISK 命令或是 PQ 之类的东东把 LINUX 所在的分区的删除并重新格式化为 FAT32 格式就可以了。PQ 显示的 LINUX 分区格式为 EXT2，而 FDISK 不认识 EXT2，只会显示为非 DOS 分区，不过也可以删除；<br /><br />2：恢复启动。<br /><br />也是可用 WINDOWS 的 FDISK 命令搞定：FDISK/MBR 命令重定一下主引导记录（MBR）就可以清除 GRUB，再用 FDISK 的第 2 项功能??设置活动分区 这一项把启动分区设为 WINDOWS 所在分区就可以了。（一般可以不要这一步，只是如果 FDISK/MBR 还不能启动 WINDOWS 才要）</font>
				<br />
		</div><img src ="http://www.blogjava.net/web/aggbug/63967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2006-08-16 17:42 <a href="http://www.blogjava.net/web/archive/2006/08/16/LinuxUninstall.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts入门（转）</title><link>http://www.blogjava.net/web/archive/2006/08/16/StrutsNewComer.html</link><dc:creator>duyouyou.com</dc:creator><author>duyouyou.com</author><pubDate>Wed, 16 Aug 2006 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/web/archive/2006/08/16/StrutsNewComer.html</guid><wfw:comment>http://www.blogjava.net/web/comments/63965.html</wfw:comment><comments>http://www.blogjava.net/web/archive/2006/08/16/StrutsNewComer.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/web/comments/commentRss/63965.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/web/services/trackbacks/63965.html</trackback:ping><description><![CDATA[<strong>Struts安装：<br /></strong> 首先请到http://jakarta.apache.org/Struts下载Struts，建议使用release版，现在最高版本为1.1，下载后得到的是一个ZIP文件。将ZIP包解开，可以看到这个目录：lib和webapps，webapps下有一些WAR文件。假设你的Tomcat装在c:\Tomcat下，则将那些WAR文件拷贝到C:\Tomcat\webapps，重新启动Tomcat即可。打开浏览器，在地址栏中输入：http://localhost:8080/Struts-example/index.jsp，若能见到“powered by Struts”的深蓝色图标，即说明成功了。这是Struts自带的一个例子，附有详细的说明文档，可以做为初学者的入门教程。<br />另外，Struts还提供了一系统实用对象：XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息等 一个实例： 一个用户注册系统，用户通过网页输入相关信息：注册ID号，密码，EMAIL，若注册成功，则返回成功提示信息，反之出现注册失败提示信息。以下是相关文件的部分核心代码。 项目建立： 正式开发前，需要在Tocmat（我的tomcat装在c:\tomcat）中建立此项目。比较快的一种建立方式为：在C:\tomcat\webapps下新建目录test，再将C:\tomcat\webapps\struts-example下的 WEB-INF目录拷贝到test目录下，然后将test\WEB-INF下的src和classes目录清空，以及struts-config.xml文件中内容清空即可。这样，我们需要的Struts类包及相关的配置文件就都齐了。 开发时，将JSP文件放在test目录下，Java原文件放在test\WEB-INF\src下，编译后的类文件放在test\WEB-INF\classes下。 注册页面：reguser.jsp <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">@ page contentType</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/html;charset=UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">%&gt;<br />&lt;%</span><span style="COLOR: #000000">@ taglib uri</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/WEB-INF/Struts-bean.tld</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> prefix</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">%&gt;<br />&lt;%</span><span style="COLOR: #000000">@ taglib uri</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/WEB-INF/Struts-html.tld</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> prefix</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">html</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">%&gt;<br />&lt;?</span><span style="COLOR: #000000">XML:NAMESPACE PREFIX </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> HTML </span><span style="COLOR: #000000">/&gt;<br />&lt;</span><span style="COLOR: #000000">HTML:HTML locale</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">true</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;<br />&lt;</span><span style="COLOR: #000000">HTML:BASE</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">HTML:BASE</span><span style="COLOR: #000000">&gt;<br />&lt;</span><span style="COLOR: #000000">HTML:ERRORS</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">HTML:ERRORS</span><span style="COLOR: #000000">&gt;<br /><br />&lt;</span><span style="COLOR: #000000">HTML:FORM action</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/regUserAction</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> focus</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">logname</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">TABLE width</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100%</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> border</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">TBODY</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">        &lt;</span><span style="COLOR: #000000">TR</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        <span style="COLOR: #000000">        </span></span>&lt;</span><span style="COLOR: #000000">TH align</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">right</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">Logname: </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">TH</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        <span style="COLOR: #000000">        </span></span>&lt;</span><span style="COLOR: #000000">TD align</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">left </span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">HTML:TEXT property</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">logname</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> size</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> maxlength</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">HTML:TEXT</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">TD</span><span style="COLOR: #000000">&gt;<br /><span style="COLOR: #000000">        </span>&lt;/</span><span style="COLOR: #000000">TR</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        </span>&lt;</span><span style="COLOR: #000000">TR</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        <span style="COLOR: #000000">        </span></span>&lt;</span><span style="COLOR: #000000">TH align</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">right</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">Password: </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">TH</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        <span style="COLOR: #000000">        </span></span>&lt;</span><span style="COLOR: #000000">TD align</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">left</span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">HTML:PASSWORD property</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> size</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> maxlength</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">HTML:PASSWORD</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">TD</span><span style="COLOR: #000000">&gt;<br /><span style="COLOR: #000000">        </span>&lt;/</span><span style="COLOR: #000000">TR</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        </span>&lt;</span><span style="COLOR: #000000">TR</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        <span style="COLOR: #000000">        </span></span>&lt;</span><span style="COLOR: #000000">TH align</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">right</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">E</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">mail: </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">TH</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        <span style="COLOR: #000000">        </span></span>&lt;</span><span style="COLOR: #000000">TD align</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">left</span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">HTML:PASSWORD property</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">email</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> size</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">30</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> maxlength</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">HTML:PASSWORD</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">TD</span><span style="COLOR: #000000">&gt;<br /><span style="COLOR: #000000">        </span>&lt;/</span><span style="COLOR: #000000">TR</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        </span>&lt;</span><span style="COLOR: #000000">TR</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        <span style="COLOR: #000000">        </span></span>&lt;</span><span style="COLOR: #000000">TD align</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">middle</span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">HTML:SUBMIT property</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">submit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Submit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">HTML:SUBMIT</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">TD</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000"><span style="COLOR: #000000">        <span style="COLOR: #000000">        </span></span>&lt;</span><span style="COLOR: #000000">TD align</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">left</span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">HTML:RESET</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">HTML:RESET</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">TD</span><span style="COLOR: #000000">&gt;<br /><span style="COLOR: #000000">        </span>&lt;/</span><span style="COLOR: #000000">TR</span><span style="COLOR: #000000">&gt;<br />&lt;/</span><span style="COLOR: #000000">TBODY</span><span style="COLOR: #000000">&gt;<br />&lt;/</span><span style="COLOR: #000000">TABLE</span><span style="COLOR: #000000">&gt;<br />&lt;/</span><span style="COLOR: #000000">HTML:FORM</span><span style="COLOR: #000000">&gt;<br />&lt;/</span><span style="COLOR: #000000">HTML:HTML</span><span style="COLOR: #000000">&gt;</span></div><br /><br /><br /><br /><br />此JSP页面不同于普通的JSP页，因为它大量运用了taglib，这些taglib对初学者而言，可能难于掌握，可这却是Struts的精华之一。灵活运用，将大大提高开发效率。 <br />Struts-config.xml： <struts-config><form-beans><form-bean name="regUserForm" type="org.cjea.Struts.example. RegUserForm " /></form-beans><action-mappings><action type=" org.cjea.Struts.example.RegUserAction " path="/regUserAction" attribute=" regUserForm " scope="request" validate="false"><forward name="failure" path="/ messageFailure.jsp" /><forward name="success" path="/ messageSuccess.jsp" /></action></action-mappings></struts-config>Struts的核心是Controller，即ActionServlet，而ActionServlet的核心就是Struts-config.xml，Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目，通过此配置文件即可迅速把握其脉络，这不管是对于前期的开发，还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。 <br />FormBean：RegUserForm <br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> org.cjea.Struts.example;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.Servlet.http.HttpServletRequest;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.apache.Struts.action.ActionForm; <br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.apache.Struts.action.ActionMapping; <br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> RegUserForm </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> ActionForm{<br />       </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String logname;<br />       </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String password;<br />       </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String email;<br />       </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> RegUserForm(){<br />               logname </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br />               password </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br />               email </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br />       }<br />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getLogName() {<br />               </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.logname;<br />        }<br />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setLogName(String logname) {<br />               </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.logname </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> logname;<br />        }<br />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setPassWord(String password) {<br />               </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.password </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> password;<br />        }<br />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getPassWord() {<br />               </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.password;<br />        }<br />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setEmail(String email) {<br />               </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.email </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> email;<br />        }<br />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getEmail() {<br />               </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.email; <br />       }<br />        </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> reset(ActionMapping mapping, HttpServletRequest request) {<br />               logname </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br />               password </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br />               email </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br />        }<br /> }</span></div><br /><br />每一个FormBean 都必须继承ActionForm类，FormBean是对页面请求的封装。即把HTTP request 封装在一个对象中，需要说明的一点就是多个HTTP request可以共用一个FormBean，便于维护和重用。 ActionBean：RegUserAction<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> org.cjea.Struts.example;<br /> </span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.Servlet.http.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /> </span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.apache.Struts.action.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> RegUserAction </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> Action {<br />         </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ActionForward perform(ActionMapping mapping, ActionForm form, <br />                                                               HttpServletRequest req, HttpServletResponse res) {<br />                   String title </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> req.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">title</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />                   String password </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> req.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />                   String email </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> req.getParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">email</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />                   </span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> 取得用户请求,做相应数据库操作，略 </span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br />          }<br /> } </span></div><br />FormBean的产生是为了提供数据给ActionBean，在ActionBean中可以取得FormBean中封装的数据，经相应的逻辑处理后，调用业务方法完成相应业务要求。 Servlet的演变：在常规的 JSP，Servlet，JavaBean三层结构中，JSP实现View的功能，Servlet实现Controller的功能，JavaBean实现Model的实现。 在Struts中，将常规情况下的Servlet拆分与ActionServlet、FormBean、ActionBean三个部分。ActionServlet配合Struts-config.xml，专职完成页面导航，而不再负责具体的数据获取与相应逻辑，这两部分功能由FormBean和ActionBean来完成。<br /><br /><strong> Struts优缺点<br /></strong>优点： Struts跟Tomcat、Turbine等诸多Apache项目一样，是开源软件，这是它的一大优点。使开发者能更深入的了解其内部实现机制。<br /> 除此之外，Struts的优点主要集中体现在两个方面：Taglib和页面导航。Taglib是Struts的标记库，灵活动用，能大大提高开发效率。另外，就目前国内的JSP开发者而言，除了使用JSP自带的常用标记外，很少开发自己的标记，或许Struts是一个很好的起点。 关于页面导航，我认为那将是今后的一个发展方向，事实上，这样做，使系统的脉络更加清晰。通过一个配置文件，即可把握整个系统各部分之间的联系，这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时，这种优势体现得更加明显。<br /><br />缺点： Taglib是Struts的一大优势，但对于初学者而言，却需要一个持续学习的过程，甚至还会打乱你网页编写的习惯，但是，当你习惯了它时，你会觉得它真的很棒。 Struts将MVC的Controller一分为三，在获得结构更加清晰的同时，也增加了系统的复杂度。 Struts从产生到现在还不到半年，但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点，但它是一种非常优秀的J2EE MVC实现方式，如果你的系统准备采用J2EE MVC架构，那么，不妨考虑一下Struts。<br /> <br /><strong>Struts实施经验：<br /></strong> 1、基于Struts架构的项目开发，首先需要有一个很好的整体规划，整个系统中包括哪几个模块，每个模块各需要多少FormBean和ActionBean等，而且最好有专人负责Struts-config.xml的管理。开发基于Struts的项目的难点在于配置管理，尤其是对Struts-config.xml的管理<br /> 2、如果你的项目非常紧，并且项目组中又没有富有经验的Struts开发人员，建议不要冒然采用Struts。Struts的掌握需要一个过程，对于一个熟练的JSP程序员，自学大概需要半个月左右的时间。如果结合titls，则需要更长的时间<br /> 3、如果你在网页中大量运用taglib，那么你的美工将做出部分牺牲。当你结合Tiles，功能增强的同时，这种牺牲尤为明显。当然，你对功能和美观的取舍由你自己决定<br /> 4、Taglib是一个好东西，但灵活运用它却需要一个过程，如果你不想在Taglib上花太多的时间，那么只需理解与FORM有关的几个标记，其它的标记就放着吧，以后再看，先去研究ActionServlet和Struts-config.xml，你会觉得很有成就感<br /> 5、Struts是否只适合于大型项目呢？No！Struts适合于各种大小的项目，当然，对于大型项目，它所体现出来的优势更加明显。<img src ="http://www.blogjava.net/web/aggbug/63965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/web/" target="_blank">duyouyou.com</a> 2006-08-16 17:39 <a href="http://www.blogjava.net/web/archive/2006/08/16/StrutsNewComer.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>