﻿<?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-Asktalk</title><link>http://www.blogjava.net/asktalk/</link><description>&lt;span class="STYLE3"&gt;天行健，君子以自强不息！&lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 27 Apr 2026 21:28:55 GMT</lastBuildDate><pubDate>Mon, 27 Apr 2026 21:28:55 GMT</pubDate><ttl>60</ttl><item><title>高性能分页标签extremeTable的Limit设计架构思想剖析</title><link>http://www.blogjava.net/asktalk/archive/2007/12/26/170625.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Wed, 26 Dec 2007 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/26/170625.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/170625.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/12/26/170625.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/170625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/170625.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">这是一个目前最好的一个开源分页标签的实现</span>---extremeTable<span style="font-family: 宋体">标签。今天谈谈它的</span>Limit<span style="font-family: 宋体">的设计架构思想。</span></p>
<p><span style="font-family: 宋体">这个设计很通用，经过作者的多次重构，现在extremeTable的架构非常漂亮。这个标签现在缺点是有些参数对mvc控制器屏蔽了，应提供一致的对外接口。不过整体上设计还是很精致的，面向对象来处理 html元素，与spring非常的默契</span><span style="font-family: 宋体">，非常便于开发和测试。</span></p>
<h1><span style="font-family: 宋体">类图关系<br />
<img height="680" alt="" src="http://www.blogjava.net/images/blogjava_net/asktalk/limit.png" width="776" border="0" /><br />
</span></h1>
<h1 style="margin-left: 18pt; text-indent: -18pt">1，&nbsp;<span style="font-family: 宋体">工厂</span>LimitFactory</h1>
<p>TableLimitFactory<span style="font-family: 宋体">，</span>AbstractLimitFactory<span style="font-family: 宋体">，</span>LimitFactory</p>
<p>TableLimitFactory<span style="font-family: 宋体">是最终实现的工厂，它</span>extends<span style="font-family: 宋体">了</span>AbstractLimitFactory<span style="font-family: 宋体">抽象类，</span>AbstractLimitFactory <span style="font-family: 宋体">类</span>implements<span style="font-family: 宋体">了</span>LimitFactory<span style="font-family: 宋体">接口。</span></p>
<p>TableLimitFactory<span style="font-family: 宋体">主要是用来实例化，通过构造函数传入参数。同时创建</span>Registry<span style="font-family: 宋体">来完成</span>jsp<span style="font-family: 宋体">页面参数传入</span>Registry<span style="font-family: 宋体">。当然还有一个功能就是从</span>web.xml<span style="font-family: 宋体">的配置文件读取一些全局参数。首先读取配置文件参数，然后根据参数创建</span>LimitRegistry<span style="font-family: 宋体">对象。</span></p>
<p>this.registry = new LimitRegistry(context, tableId, prefixWithTableId, state, stateAttr);</p>
<p>AbstractLimitFactory<span style="font-family: 宋体">主要是用来获取</span>jsp<span style="font-family: 宋体">页面上设置的参数，比如分页的信息（第几页，起始行，结束行，每页显示行数，查询条件，排序条件等），当然他是通过工具类</span>Registry<span style="font-family: 宋体">来实现。</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">2，&nbsp;Limit</h1>
<p>TableLimit<span style="font-family: 宋体">，</span>Limit<span style="font-family: 宋体">。其主要作用是一个参数参数器，就是把</span>Registry<span style="font-family: 宋体">对象的参数传入</span>TableLimit<span style="font-family: 宋体">，考虑到分层吧，</span>TableLimit<span style="font-family: 宋体">是该标签和</span>action<span style="font-family: 宋体">通信的桥梁。就像我们的</span>j2ee<span style="font-family: 宋体">项目</span>vo<span style="font-family: 宋体">是</span>dao<span style="font-family: 宋体">和</span>struts<span style="font-family: 宋体">等</span>view<span style="font-family: 宋体">等数据传输工具。</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">3，&nbsp;Preferences</h1>
<p>TableProperties<span style="font-family: 宋体">，</span>Properties <span style="font-family: 宋体">主要是来实现从</span>web.xml<span style="font-family: 宋体">配置的文件中读取配置的一些全局参数。</span></p>
<p>InputStream input = this.getClass().getResourceAsStream(preferencesLocation);</p>
<p>if (input != null) {</p>
<p style="text-indent: 15.75pt">properties.load(input);</p>
<p>}</p>
<p><span style="font-family: 宋体">其中</span>preferencesLocation<span style="font-family: 宋体">是路径，在</span>TableLimitFactory<span style="font-family: 宋体">初始化时候，</span><span style="font-family: 宋体">通过工具类</span>TableModelUtils.getPreferencesLocation(context)<span style="font-family: 宋体">获取。</span></p>
<p><span style="font-family: 宋体">这个设计也是大多数需要配置文件的系统常用的方法。</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">4，&nbsp;Registry</h1>
<p>LimitRegistry<span style="font-family: 宋体">，</span>AbstractRegistry<span style="font-family: 宋体">，</span>Registry</p>
<p><span style="font-family: 宋体">这个体系结构和上面的工厂模式一样，就是</span>LimitRegistry<span style="font-family: 宋体">主要是用来实例化，通过构造函数传入参数。</span>AbstractRegistry<span style="font-family: 宋体">是实际实现类，获取</span>jsp<span style="font-family: 宋体">表单提交的参数，并提供</span>getter<span style="font-family: 宋体">方法供</span>Limit<span style="font-family: 宋体">来使用。</span>Registry<span style="font-family: 宋体">是一个接口。</span></p>
<p><span style="font-family: 宋体">所以这设计模式，我们可以来学习，</span></p>
<p><span style="font-family: 宋体">经典表述：<span style="color: red">类</span></span><span style="color: red">—</span><span style="color: red; font-family: 宋体">抽象类</span><span style="color: red">—</span><span style="color: red; font-family: 宋体">接口</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">类：初始化，定义构造函数，传入参数。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">抽象类：定义业务方法在此。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">接口：定义接口方法，这个不用多说。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">（作者：asktalk&nbsp;&nbsp; 来自&nbsp;<a href="http://www.blogjava.net/askltak">http://www.blogjava.net/askltak</a> 原创文章，转载请注明出处）</p>
<img src ="http://www.blogjava.net/asktalk/aggbug/170625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-26 16:17 <a href="http://www.blogjava.net/asktalk/archive/2007/12/26/170625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Web框架与Struts的区别</title><link>http://www.blogjava.net/asktalk/archive/2007/12/25/asktalk.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Mon, 24 Dec 2007 18:23:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/25/asktalk.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/170198.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/12/25/asktalk.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/170198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/170198.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p><span style="font-family: 宋体">下面是从</span>struts<span style="font-family: 宋体">的角度来谈谈</span>spring<span style="font-family: 宋体">自带的</span>web<span style="font-family: 宋体">框架的使用。</span><span style="font-family: 宋体"><br />
当然，我们在配置</span>web<span style="font-family: 宋体">框架前，需要把</span>spring<span style="font-family: 宋体">配置好，这里就不多说了。</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">1.web<span style="font-family: 宋体">框架核心</span>servlet<span style="font-family: 宋体">在</span>web.xml<span style="font-family: 宋体">中的配置。<br />
</span></h1>
<p style="margin-left: 18pt; text-indent: 0cm"><br />
&nbsp;</p>
<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: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">Dispatcher</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.springframework.web.servlet.DispatcherServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">contextConfigLocation</span><span style="color: #000000">&lt;/</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">&gt;/</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF</span><span style="color: #000000">/</span><span style="color: #000000">Config.xml</span><span style="color: #000000">&lt;/</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">Dispatcher</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;*</span><span style="color: #000000">.</span><span style="color: #0000ff">do</span><span style="color: #000000">&lt;/</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p style="margin-left: 18pt; text-indent: 0cm">&nbsp;</p>
<p style="margin-left: 18pt; text-indent: 0cm"><span style="font-family: 宋体">如果没有配置</span>config.xml<span style="font-family: 宋体">文件，那么其默认的配置文件为</span>[ servlet-name ]-servlet.xml <span style="font-family: 宋体">。也就是我们这个配置的默认配置文件是</span>Dispatcher-servlet.xml</p>
<h1 style="margin-left: 18pt; text-indent: -18pt">2.web<span style="font-family: 宋体">框架的</span>xml<span style="font-family: 宋体">配置</span></h1>
<p>spring web<span style="font-family: 宋体">框架与</span>struts<span style="font-family: 宋体">最大的不同就是</span>spring web<span style="font-family: 宋体">框架根据分工，把每一种功能都定义为一种组件，所以在开发过程中需要配置的东西就非常多；</span>Spring<span style="font-family: 宋体">中分为几个角色：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">核心控制器，就是</span>web<span style="font-family: 宋体">框架的主</span> servlet<span style="font-family: 宋体">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">业务控制器，也就是</span>struts<span style="font-family: 宋体">中的</span>action<span style="font-family: 宋体">对象；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">映射处理器，定义了访问路径如何与</span>web<span style="font-family: 宋体">的</span>xml<span style="font-family: 宋体">中的</span>bean<span style="font-family: 宋体">相匹配，就是定义了一种策略；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">视图和视图解析器，视图就是</span>jstl,velocity,xslt<span style="font-family: 宋体">等，视图解析器定义了</span>action<span style="font-family: 宋体">最终导航页面的策略；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">模型，就是</span>struts MVC<span style="font-family: 宋体">结构中的</span>model<span style="font-family: 宋体">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span>Command<span style="font-family: 宋体">对象，类似于</span>struts<span style="font-family: 宋体">中的</span>formBean<span style="font-family: 宋体">；</span></p>
<h2>2.1 Spring web<span style="font-family: 宋体">框架与</span>struts<span style="font-family: 宋体">框架的区别</span></h2>
<p><span style="font-family: 宋体">下面列出了一些。例如，</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>Web<span style="font-family: 宋体">框架要拦截</span>*.do<span style="font-family: 宋体">路径，那么</span>*.do<span style="font-family: 宋体">如何与我们下面的</span>bean<span style="font-family: 宋体">匹配，就需要一个映射控制器。在</span>struts<span style="font-family: 宋体">中就是名字相同的匹配，不需要配置。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>action<span style="font-family: 宋体">最后要导向到不同的页面，在</span>struts<span style="font-family: 宋体">中我们用的是默认的不需要在</span>xml<span style="font-family: 宋体">文件中配置，在</span>spring<span style="font-family: 宋体">中就需要配置视图解析器。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span><span style="font-family: 宋体">下面代码中，</span>Action<span style="font-family: 宋体">中</span><span style="font-family: 'Courier New'">commandClass</span><span style="font-family: 宋体">配置的就是类似于</span><span style="font-family: 'Courier New'">struts</span><span style="font-family: 宋体">中的</span><span style="font-family: 'Courier New'">formBean</span><span style="font-family: 宋体">对象。<br />
</p>
<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: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!</span><span style="color: #000000">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-//SPRING//DTD&nbsp;BEAN//EN</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://www.springframework.org/dtd/spring-beans.dtd</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">beans</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">Definition&nbsp;of&nbsp;View&nbsp;Resolver&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">viewResolver</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.web.servlet.view.InternalResourceViewResolver</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">viewClass</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.springframework.web.servlet.view.JstlView</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">prefix</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;/</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF</span><span style="color: #000000">/</span><span style="color: #000000">view</span><span style="color: #000000">/&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">suffix</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">.jsp</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!</span><span style="color: #000000">—就是我们上面说的映射控制器&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">Request&nbsp;Mapping&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">urlMapping</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.web.servlet.handler.SimpleUrlHandlerMapping</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mappings</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">props</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">prop&nbsp;key</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/login.do</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">LoginAction</span><span style="color: #000000">&lt;/</span><span style="color: #000000">prop</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">props</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!---</span><span style="color: #000000">类似于struts的action配置</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;!---</span><span style="color: #000000">Action&nbsp;Definition</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">LoginAction</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.maxway.action.LoginAction</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">commandClass</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">com.maxway.action.LoginInfo</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">fail_view</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">loginfail</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">success_view</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">main</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">beans</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p style="margin-left: 21pt; text-indent: -21pt"><br />
</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">&nbsp;</h1>
<h1 style="margin-left: 18pt; text-indent: -18pt">3.<span style="font-family: 宋体">代码的编写</span></h1>
<p style="margin-left: 18pt; text-indent: 0cm">Action<span style="font-family: 宋体">不外乎继承一些现成的类，来实现我们</span>view<span style="font-family: 宋体">部分的业务。<br />
<span style="font-family: 宋体">作者：<a href="http://www.blogjava.net/asktalk">http://www.blogjava.net/asktalk</a></span></span></p>
<img src ="http://www.blogjava.net/asktalk/aggbug/170198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-25 02:23 <a href="http://www.blogjava.net/asktalk/archive/2007/12/25/asktalk.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse启动机制（1）</title><link>http://www.blogjava.net/asktalk/archive/2007/12/22/169593.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Sat, 22 Dec 2007 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/22/169593.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/169593.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/12/22/169593.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/169593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/169593.html</trackback:ping><description><![CDATA[&nbsp;
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">最近我一直在研究</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">的架构体系，下面我们就来看看</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">的启动机制吧</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">1</span><span style="font-size: 10.5pt; font-family: 新宋体">、</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">源代码</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
eclipse-sourceBuild-srcIncluded-3.3.1.1.zip&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt; font-family: 新宋体">版本：</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">3.3.1.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt; font-family: 新宋体">大小：</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">95.058MB<br />
</span><span style="font-size: 10.5pt; font-family: 新宋体">下载地址：</span><a href="http://download.eclipse.org/eclipse/downloads"><span style="font-size: 10.5pt; color: windowtext; font-family: 'Arial','sans-serif'; text-decoration: none; text-underline: none">http://download.eclipse.org/eclipse/downloads</a></span></p>
<p style="background: white">解压后的目录结构如下图，通过执行build.bat可以编译出完整的Eclipse-sdk-3.3.1.1运行包，和我们网上下载的一样。但是这个过程可能需要一个小时左右的时间，要有耐性哦。所有的插件工程目录在plugins中，我们只需要导入现有工程即可把plugins下所有工程导入。<br />
<img height="567" alt="" src="http://www.blogjava.net/images/blogjava_net/asktalk/eclipse1.jpg" width="446" border="0" /><br />
</p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">下面我们就先来研究一下</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">最核心的部分，就是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">RCP</span><span style="font-size: 10.5pt; font-family: 新宋体">部分必须的插件。下面我列出了</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse RCP</span><span style="font-size: 10.5pt; font-family: 新宋体">需要的插件。<br />
<img height="348" alt="" src="http://www.blogjava.net/images/blogjava_net/asktalk/eclipse.jpg" width="435" border="0" /><br />
</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">将这些代码解压缩到一个空目录里，然后导入到</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Source&nbsp;Insight</span><span style="font-size: 10.5pt; font-family: 新宋体">的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Project</span><span style="font-size: 10.5pt; font-family: 新宋体">里。</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">二、</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">启动过程</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">首先我们从</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">的启动过程开始分析。</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">1</span><span style="font-size: 10.5pt; font-family: 新宋体">、</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">exe</span><span style="font-size: 10.5pt; font-family: 新宋体">部分的引导</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse.exe</span><span style="font-size: 10.5pt; font-family: 新宋体">是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">的启动文件，是与平台相关的可执行文件。它的功能比较简单，主要是加载</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">startup.jar</span><span style="font-size: 10.5pt; font-family: 新宋体">文件，代码在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">源代码的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip</span><span style="font-size: 10.5pt; font-family: 新宋体">，对应多个平台。对于</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">win32</span><span style="font-size: 10.5pt; font-family: 新宋体">平台，你可以直接运行</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">win32</span><span style="font-size: 10.5pt; font-family: 新宋体">目录下的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">build.bat</span><span style="font-size: 10.5pt; font-family: 新宋体">文件来编译得到它（需要安装</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">C</span><span style="font-size: 10.5pt; font-family: 新宋体">编译器）。</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">2</span><span style="font-size: 10.5pt; font-family: 新宋体">、</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">java</span><span style="font-size: 10.5pt; font-family: 新宋体">代码部分的执行入口</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">对于</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse 3.3.1.1</span><span style="font-size: 10.5pt; font-family: 新宋体">版本来说，如果在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">目录下没有找到</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">startup.jar</span><span style="font-size: 10.5pt; font-family: 新宋体">，则直接执行</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">org.eclipse.equinox.launcher.Main.main</span><span style="font-size: 10.5pt; font-family: 新宋体">方法。</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">当然我们可以在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">目录下定制我们自己的启动引导包</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">startup.jar</span><span style="font-size: 10.5pt; font-family: 新宋体">，现在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse 3.3.1.1</span><span style="font-size: 10.5pt; font-family: 新宋体">好像已经不建议这样做了。如果有这个包，那么这个包将是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">java</span><span style="font-size: 10.5pt; font-family: 新宋体">代码的执行入口，你可以在命令行下运行</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">java -jar startup.jar</span><span style="font-size: 10.5pt; font-family: 新宋体">命令来启动</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">。它的入口是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">org.eclipse.core.launcher.Main</span><span style="font-size: 10.5pt; font-family: 新宋体">类，这个类最终执行的还是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">org.eclipse.equinox.launcher.Main.main</span><span style="font-size: 10.5pt; font-family: 新宋体">方法。它对应的源代码在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">org.eclipse.equinox.launcher</span><span style="font-size: 10.5pt; font-family: 新宋体">目录下的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Main.java</span><span style="font-size: 10.5pt; font-family: 新宋体">。关于此文件的定制详细信息请查看</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip</span><span style="font-size: 10.5pt; font-family: 新宋体">中的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse.c</span><span style="font-size: 10.5pt; font-family: 新宋体">的注解部分。<br />
<br />
<span style="font-size: 10.5pt; font-family: 新宋体">我们从</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">main</span><span style="font-size: 10.5pt; font-family: 新宋体">函数往后跟踪，找到</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">basicRun</span><span style="font-size: 10.5pt; font-family: 新宋体">方法，这个是启动的主要部分。</span><br />
</span></p>
<p style="background: white">
<table cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">protected</span></strong><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">void</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> basicRun(String[] args) </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">throws</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> Exception {</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<em>getProperties</em>().put(</span><span style="font-size: 9pt; color: #2a00ff; font-family: 'Arial','sans-serif'">"eclipse.startTime"</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">, Long.<em>toString</em>(System.<em>currentTimeMillis</em>())); </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//$NON-NLS-1$</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">commands</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> = args;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] passThruArgs = processCommandLine(args);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">if</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> (!</span><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">debug</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// debug can be specified as system property as well</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">debug</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> = System.<em>getProperty</em>(</span><em><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">PROP_DEBUG</span></em><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">) != </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">null</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setupVMProperties();&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Arial','sans-serif'">//</span><span style="font-family: 新宋体">设置</span><span style="font-family: 'Arial','sans-serif'">VM</span><span style="font-family: 新宋体">属性</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processConfiguration();&nbsp;&nbsp; </span><span style="font-family: 'Arial','sans-serif'">//</span><span style="font-family: 新宋体">读取</span><span style="font-family: 'Arial','sans-serif'">configuration/config.ini</span><span style="font-family: 新宋体">配置文件</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// need to ensure that getInstallLocation is called at least once to initialize the value.</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// Do this AFTER processing the configuration to allow the configuration to set</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// the install location.&nbsp;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getInstallLocation();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// locate boot plugin (may return -dev mode variations)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL[] bootPath = getBootPath(</span><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">bootLocation</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//Set up the JNI bridge.&nbsp;We need to know the install location to find the shared library</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setupJNI(bootPath);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//ensure minimum Java version, do this after JNI is set up so that we can write an error message </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//with exitdata if we fail.</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">if</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> (!checkVersion(System.<em>getProperty</em>(</span><span style="font-size: 9pt; color: #2a00ff; font-family: 'Arial','sans-serif'">"java.version"</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">), System.<em>getProperty</em>(</span><em><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">PROP_REQUIRED_JAVA_VERSION</span></em><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">))) </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//$NON-NLS-1$</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">return</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setSecurityPolicy(bootPath);&nbsp;</span><span style="font-family: 'Arial','sans-serif'">//</span><span style="font-family: 新宋体">设置执行权限</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// splash handling is done here, because the default case needs to know</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// the location of the boot plugin we are going to use</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handleSplash(bootPath);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beforeFwkInvocation();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invokeFramework(passThruArgs, bootPath);&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Arial','sans-serif'">//</span><span style="font-family: 新宋体">启动</span><span style="font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-family: 新宋体">内核</span></p>
            <p><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp; }</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://www.blogjava.net/asktalk/aggbug/169593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-22 16:33 <a href="http://www.blogjava.net/asktalk/archive/2007/12/22/169593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近正在研究的Eclipse插件项目</title><link>http://www.blogjava.net/asktalk/archive/2007/12/22/169490.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Fri, 21 Dec 2007 16:43:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/22/169490.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/169490.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/12/22/169490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/169490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/169490.html</trackback:ping><description><![CDATA[先列出这些开源项目，随后对其实现过程深入分析。<br />
<br />
1，Hibernate Synchronizer Eclipse Plugin&nbsp;&nbsp; 最近更新在2006.04.26<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://hibernatesynch.sourceforge.net/">http://hibernatesynch.sourceforge.net/</a>&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源代码：:pserver:anonymous@hibernatesynch.cvs.sourceforge.net:/cvsroot/hibernatesynch&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HibernateSynchronizer3&nbsp;&nbsp; 为新项目，支持Eclipse3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HibernateSynchronizer&nbsp; &nbsp;&nbsp; 为旧项目，支持Eclipse2&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本插件使用方法：http://dev2dev.bea.com.cn/bbsdoc/20060124187.html<br />
&nbsp;&nbsp;&nbsp;&nbsp; 可以生成hibernate的所有配置文件和dao。基本流程是 hibernate.cfg.xml-&gt;xxx.hbm.xml-&gt;po and dao<br />
<br />
2,&nbsp; SqlExplorer&nbsp;&nbsp;&nbsp;&nbsp;最近更新 2007.09.08<br />
&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.sqlexplorer.org/index.php">http://www.sqlexplorer.org/index.php</a><br />
&nbsp;&nbsp;&nbsp;&nbsp; http://sourceforge.net/projects/eclipsesql<br />
&nbsp;&nbsp;&nbsp;&nbsp; 源代码：:pserver:anonymous@eclipsesql.cvs.sourceforge.net:/cvsroot/eclipsesql<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与myEclipse的数据库管理工具相近。<br />
<br />
3，GmailClipse 一个Eclipse RCP&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://sourceforge.net/projects/gmclipse/">http://sourceforge.net/projects/gmclipse/</a> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;源代码：:pserver:anonymous@gmclipse.cvs.sourceforge.net:/cvsroot/gmclipse&nbsp;&nbsp;&nbsp; 源代码为空，没有共享<br />
&nbsp;&nbsp;&nbsp;&nbsp; 像hotmail一样的邮件客户端收发系统。其源代码对于学习RCP有很大的帮助。<br />
<br />
4,&nbsp; SpringIde&nbsp;&nbsp;&nbsp; spring官方的IDE工具。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://springide.org/project/browser/trunk"><font color="#000000">源代码：</font>http://springide.org/project/browser/trunk</a><br />
<br />
5， Hibernate tools&nbsp;&nbsp; hibernate官方IDE工具。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;官方介绍：<a href="http://www.hibernate.org/268.html">http://www.hibernate.org/268.html</a>&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;源代码svn: <a href="http://anonhibernate.labs.jboss.com/branches/Branch_3_2/HibernateExt">http://anonhibernate.labs.jboss.com/branches/Branch_3_2/HibernateExt</a>&nbsp;<br />
<br />
6,&nbsp;&nbsp; Html解析工具 HTML Parser<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;官方网址：<a href="http://htmlparser.sourceforge.net/">http://htmlparser.sourceforge.net/</a> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/asktalk/aggbug/169490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-22 00:43 <a href="http://www.blogjava.net/asktalk/archive/2007/12/22/169490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL常用命令</title><link>http://www.blogjava.net/asktalk/archive/2007/12/21/169201.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Thu, 20 Dec 2007 17:50:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/21/169201.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/169201.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/12/21/169201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/169201.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/169201.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">有很多朋友虽然安装好了mysql但却不知如何使用它。在这篇文章中我们就从连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令。 <br />
<br />
<strong>一、连接MYSQL。</strong> </p>
<p style="color: red; text-indent: 2em">格式： mysql -h主机地址 -u用户名 －p用户密码 </p>
<p style="text-indent: 2em">1、例1：连接到本机上的MYSQL。 </p>
<p style="text-indent: 2em">首先在打开DOS窗口，然后进入目录 mysqlbin，再键入命令mysql -uroot -p，回车后提示你输密码，如果刚安装好MYSQL，超级用户root是没有密码的，故直接回车即可进入到MYSQL中了，MYSQL的提示符是：mysql&gt; </p>
<p style="text-indent: 2em">2、例2：连接到远程主机上的MYSQL。假设远程主机的IP为：110.110.110.110，用户名为root,密码为abcd123。则键入以下命令： </p>
<p style="text-indent: 2em">mysql -h110.110.110.110 -uroot -pabcd123 </p>
<p style="text-indent: 2em">（注:u与root可以不用加空格，其它也一样） </p>
<p style="text-indent: 2em">3、退出MYSQL命令： exit （回车） <br />
<br />
<strong>二、修改密码。</strong> </p>
<p style="color: red; text-indent: 2em">格式：mysqladmin -u用户名 -p旧密码 password 新密码 </p>
<p style="text-indent: 2em">1、例1：给root加个密码ab12。首先在DOS下进入目录mysqlbin，然后键入以下命令 </p>
<p style="text-indent: 2em">mysqladmin -uroot -password ab12 </p>
<p style="text-indent: 2em">注：因为开始时root没有密码，所以-p旧密码一项就可以省略了。 </p>
<p style="text-indent: 2em">2、例2：再将root的密码改为djg345。 </p>
<p style="text-indent: 2em">mysqladmin -uroot -pab12 password djg345<br />
<br />
<strong>三、增加新用户。<br />
</strong>（注意：和上面不同，下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符） </p>
<p style="color: red; text-indent: 2em">格式：grant select on 数据库.* &nbsp;to&nbsp; 用户名@登录主机 &nbsp;identified by&nbsp; \"密码\" </p>
<p style="text-indent: 2em">例1、增加一个用户test1密码为abc，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL，然后键入以下命令： </p>
<p style="text-indent: 2em">grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\"; </p>
<p style="text-indent: 2em">但例1增加的用户是十分危险的，你想如某个人知道test1的密码，那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了，解决办法见例2。 </p>
<p style="text-indent: 2em">例2、增加一个用户test2密码为abc,让他只可以在localhost上登录，并可以对数据库mydb进行查询、插入、修改、删除的操作（localhost指本地主机，即MYSQL数据库所在的那台主机），这样用户即使用知道test2的密码，他也无法从internet上直接访问数据库，只能通过MYSQL主机上的web页来访问了。 </p>
<p style="text-indent: 2em">grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\"; </p>
<p style="text-indent: 2em">如果你不想test2有密码，可以再打一个命令将密码消掉。 </p>
<p style="text-indent: 2em">grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\"; <br />
</p>
<p style="text-indent: 2em"><br />
<br />
在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意：你必须首先登录到MYSQL中，以下操作都是在MYSQL的提示符下进行的，而且每个命令以分号结束。 <br />
<br />
<strong>一、操作技巧</strong> </p>
<p style="text-indent: 2em">1、如果你打命令时，回车后发现忘记加分号，你无须重打一遍命令，只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打，完后用分号作结束标志就OK。 </p>
<p style="text-indent: 2em">2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。<br />
<br />
<strong>二、显示命令</strong> </p>
<p style="text-indent: 2em">1、显示数据库列表。 </p>
<p style="color: red; text-indent: 2em">show databases; </p>
<p style="text-indent: 2em">刚开始时才两个数据库：mysql和test。mysql库很重要它里面有MYSQL的系统信息，我们改密码和新增用户，实际上就是用这个库进行操作。 </p>
<p style="text-indent: 2em">2、显示库中的数据表： </p>
<p style="text-indent: 2em"><span style="color: red">use mysql；</span> ／／打开库，学过FOXBASE的一定不会陌生吧 </p>
<p style="text-indent: 2em"><span style="color: red">show tables; </span></p>
<p style="text-indent: 2em">3、显示数据表的结构： </p>
<p style="text-indent: 2em"><span style="color: red">describe 表名; </span></p>
<p style="text-indent: 2em">4、建库： </p>
<p style="text-indent: 2em"><span style="color: red">create database 库名; </span></p>
<p style="text-indent: 2em">5、建表： </p>
<p style="text-indent: 2em"><span style="color: red">use 库名； </span></p>
<p style="text-indent: 2em"><span style="color: red">create table 表名 (字段设定列表)；</span> </p>
<p style="text-indent: 2em">6、删库和删表: </p>
<p style="text-indent: 2em"><span style="color: red">drop database 库名; </span></p>
<p style="text-indent: 2em"><span style="color: red">drop table 表名；</span> </p>
<p style="text-indent: 2em">7、将表中记录清空： </p>
<p style="text-indent: 2em"><span style="color: red">delete from 表名; </span></p>
<p style="text-indent: 2em">8、显示表中的记录： </p>
<p style="text-indent: 2em"><span style="color: red">select * from 表名; <br />
<br />
从文本文件执行SQL语句<br />
</span></p>
<p style="text-indent: 2em">三、一个建库和建表以及插入数据的实例 </p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>drop database if exists school; //如果存在SCHOOL则删除 <br />
            create database school; //建立库SCHOOL <br />
            use school; //打开库SCHOOL <br />
            create table teacher //建立表TEACHER <br />
            ( <br />
            id int(3) auto_increment not null primary key, <br />
            name char(10) not null, <br />
            address varchar(50) default '深圳', <br />
            year date <br />
            ); //建表结束 <br />
            //以下为插入字段 <br />
            insert into teacher values('','glchengang','深圳一中','1976-10-10'); <br />
            insert into teacher values('','jack','深圳一中','1975-12-23');</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em">注：在建表中（1）将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key（2）将NAME设为长度为10的字符字段（3）将ADDRESS设为长度50的字符字段，而且缺省值为深圳。varchar和char有什么区别呢，只有等以后的文章再说了。（4）将YEAR设为日期字段。 </p>
<p style="text-indent: 2em">如果你在mysql提示符键入上面的命令也可以，但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql，然后复制到c:\\下，并在DOS状态进入目录\\mysql\\bin，然后键入以下命令： </p>
<p style="text-indent: 2em">mysql -uroot -p密码 &lt; c:\\school.sql </p>
<p style="text-indent: 2em">如果成功，空出一行无任何显示；如有错误，会有提示。（以上命令已经调试，你只要将//的注释去掉即可使用）。<br />
<br />
<strong>四、将文本数据转到数据库中</strong> </p>
<p style="text-indent: 2em">1、文本数据应符合的格式：字段数据之间用tab键隔开，null值用\\n来代替. </p>
<p style="text-indent: 2em">例： </p>
<p style="text-indent: 2em">3 rose 深圳二中 1976-10-10 </p>
<p style="text-indent: 2em">4 mike 深圳一中 1975-12-23 </p>
<p style="text-indent: 2em">2、数据传入命令 load data local infile \"文件名\" into table 表名; </p>
<p style="text-indent: 2em">注意：你最好将文件复制到\\mysql\\bin目录下，并且要先用use命令打表所在的库。 </p>
<p style="text-indent: 2em">五、备份数据库：（命令在DOS的\\mysql\\bin目录下执行） </p>
<p style="text-indent: 2em">mysqldump --opt school&gt;school.bbb </p>
<p style="text-indent: 2em">注释:将数据库school备份到school.bbb文件，school.bbb是一个文本文件，文件名任取，打开看看你会有新发现。 </p>
<p style="text-indent: 2em">后记：其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异，您最好找本将SQL的书看看。我在这里只介绍一些基本的，其实我也就只懂这些了，呵呵。最好的MYSQL教程还是"晏子"译的"MYSQL中文参考手册"不仅免费每个相关网站都有下载，而且它是最权威的。可惜不是象\"PHP4中文手册\"那样是chm的格式，在查找函数命令的时候不太方便。 </p>
<img src ="http://www.blogjava.net/asktalk/aggbug/169201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-21 01:50 <a href="http://www.blogjava.net/asktalk/archive/2007/12/21/169201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL:InnoDB和MyISAM的差别</title><link>http://www.blogjava.net/asktalk/archive/2007/12/21/169200.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Thu, 20 Dec 2007 17:09:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/21/169200.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/169200.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/12/21/169200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/169200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/169200.html</trackback:ping><description><![CDATA[<p>InnoDB和MyISAM是在使用MySQL最常用的两个表类型，各有优缺点，视具体应用而定。下面是已知的两者之间的差别，仅供参考。</p>
<p><strong>innodb</strong><br />
InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level)，提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation)，因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。</p>
<p>InnoDB 的设计目标是处理大容量数据库系统，它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上，InnoDB 是一套放在 MySQL 后台的完整数据库系统，InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里，可能包含多个文件，这与其它的不一样，举例来说，在 MyISAM 中，表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小，一般为 2 GB。</p>
<p>在 http://www.innodb.com/ 上可以找到 InnoDB 最新的信息。InnoDB 手册的最新版本总是被放置在那里，并且在那里可以得到 InnoDB 的商业许可(order commercial licenses)以及支持。</p>
<p>InnoDB 现在(2001年十月)在一些大的需高性能的数据库站点上被使用。著名的 Internet 新闻站点 Slashdot.org 就是使用的 InnoDB。 Mytrix, Inc. 在 InnoDB 表上存储了超过 1 TB 的数据，而且另外的一个站点在 InnoDB 表上处理着平均每秒 800 次的插入/更新的负载。 <br />
<br />
<strong>
MyISAM </strong><br />
MyISAM 是MySQL缺省存贮引擎 .<br />
<br />
每张MyISAM 桌被存放在盘在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。</p>
<p><strong>以下是一些细节和具体实现的差别：</strong></p>
<p>1.InnoDB不支持FULLTEXT类型的索引。<br />
2.InnoDB 中不保存表的具体行数，也就是说，执行select count(*) from
table时，InnoDB要扫描一遍整个表来计算有多少行，但是MyISAM只要简单的读出保存好的行数即可。注意的是，当count(*)语句包含
where条件时，两种表的操作是一样的。<br />
3.对于AUTO_INCREMENT类型的字段，InnoDB中必须包含只有该字段的索引，但是在MyISAM表中，可以和其他字段一起建立联合索引。<br />
4.DELETE
FROM table时，InnoDB不会重新建立表，而是一行一行的删除。<br />
5.LOAD TABLE FROM
MASTER操作对InnoDB是不起作用的，解决方法是首先把InnoDB表改成MyISAM表，导入数据后再改成InnoDB表，但是对于使用的额外的InnoDB特性（例如外键）的表不适用。</p>
<p>另外，InnoDB表的行锁也不是绝对的，如果在执行一个SQL语句时MySQL不能确定要扫描的范围，InnoDB表同样会锁全表，例如update table
set num=1 where name like &#8220;%aaa%&#8221;</p>
<p>任何一种表都不是万能的，只用恰当的针对业务类型来选择合适的表类型，才能最大的发挥MySQL的性能优势。</p>
<p>&nbsp;
</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/asktalk/aggbug/169200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-21 01:09 <a href="http://www.blogjava.net/asktalk/archive/2007/12/21/169200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Glassfish中间件实践</title><link>http://www.blogjava.net/asktalk/archive/2007/03/25/106243.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Sun, 25 Mar 2007 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/03/25/106243.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/106243.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/03/25/106243.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/106243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/106243.html</trackback:ping><description><![CDATA[<p style="text-align: center"><span style="font-size: 12pt"></span>&nbsp;</p>
<p><strong>1, 下载 </strong></p>
<p>从<a href="https://glassfish.dev.java.net/downloads/v2-b33.html">https://glassfish.dev.java.net/downloads/v2-b33.html</a>选择下载版本,这里下载的是windows版. </p>
<p>Solaris SPARC Platform </p>
<p><a href="http://www.java.net/download/javaee5/promoted/SunOS/glassfish-installer-v2-b33.jar">glassfish-installer-v2-b33.jar</a>, size 70M </p>
<p>Solaris x86 Platform </p>
<p><a href="http://java.net/download/javaee5/promoted/SunOS_X86/glassfish-installer-v2-b33.jar">glassfish-installer-v2-b33-sunos_x86.jar</a> size 67M </p>
<p>Windows Platform </p>
<p><a href="http://java.net/download/javaee5/promoted/WINNT/glassfish-installer-v2-b33.jar">glassfish-installer-v2-b33-winnt.jar</a> size 63M </p>
<p>Linux Platform </p>
<p><a href="http://java.net/download/javaee5/promoted/Linux/glassfish-installer-v2-b33.jar">glassfish-installer-v2-b33-linux.jar</a> size 64M </p>
<p>MacOS Platform </p>
<p><a href="http://java.net/download/javaee5/promoted/Darwin/glassfish-installer-v2-b33.jar">glassfish-installer-v2-b33-darwin.jar</a> size 67M </p>
<p>&nbsp;</p>
<p>2,设置Java和Ant环境变量 </p>
<p>系统需要安装J2SE 5.0 <br />
</p>
<p>3,执行安装 </p>
<p>java -Xmx256m -jar glassfish-installer-v2-b33.jar </p>
<p>直接点击运行glassfish-installer-v2-b33.jar无法安装,必须在cmd命令环境下执行上述命令. </p>
<p>执行完毕后在glassfish-installer-v2-b33.jar的同级目录会出现一个glassfish文件夹,所有文件都已经解压到这个目录了,<span style="color: red">记着,只是解压还没有安装哪! </span></p>
<p>&nbsp;</p>
<p>下面cd glassfish ,切换到glassfish目录下,运行ant脚本setup.xml,执行真正的安装过程.<br />
运行 ant -f setup.xml </p>
<p></p>
<p>4,运行domain. </p>
<p>大家都用过IBM Websphere 和BEA Weblogic,domain相当于服务器的一个具体实例,所有配置参数都在这里面.在步骤3中已经为我们生成了一个domain,在glassfish\domains\domain1目录中. </p>
<p>切换到cd glassfish/bin目录下 </p>
<p>执行asadmin start -domain domain1 ,运行domain1.结果如下 </p>
<p>&nbsp;</p>
<p>5,浏览控制台 </p>
<p>打开浏览器，输入 <a href="http://192.168.1.3:8080/">http://192.168.1.3:8080/</a> 看到如下图: </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>控制台首页: http://192.168.1.3:4848/ <br />
user name: admin <br />
password: adminadmin </p>
<p>控制台首页如下: </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/asktalk/aggbug/106243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-03-25 16:48 <a href="http://www.blogjava.net/asktalk/archive/2007/03/25/106243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于SOA的架构师的定位问题</title><link>http://www.blogjava.net/asktalk/archive/2006/12/18/88616.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Mon, 18 Dec 2006 11:39:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2006/12/18/88616.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/88616.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2006/12/18/88616.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/88616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/88616.html</trackback:ping><description><![CDATA[		<table class="sectionTable" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td class="sectionTableCell">
										<p>
												<font face="Arial">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 系统架构设计师角色是技术上的领导和系统开发创新远景的来源。<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 随着现在技术的进步，特别师银行，电信都在搞省集中，那么集中意味这什么，数据量增大，并发增大，特别是现在在银行，电信项目中为了达到平台专业化，都是在向SOA靠拢。这意味这什么？接口增多了，而且都是基于总线，那么在这种情况下，软件的管理和规划设计和原来的都不一样了，就需要更高级的架构师。<br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这一年我一直在做电信的项目，以前一个97项目，包罗万象，什么都有。所以到了今年中国电信提出平台专业化，都在向省集中靠拢，那么以前的一个项目就搞定了，现在变成了10几个厂商都在，由于SOA还不成熟，基于总线，接口非常之多，数据，模型等都需要一个技术专家组，也就是所谓的架构师去换一种思路设计整体的架构。特别是SOA有很多没有一个很成熟的方案，所以架构是在这个时候就需要具有透视未来的能力，以后压力增大，系统可以承受吗？很多都需要重新思考。需要一个正规的流程就显的特别重要！！下面说说理想中的架构师。应该向这方面靠拢！<br /><br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 系统架构设计师建立并改进系统逻辑结构和物理结构并参与优化这些结构，优化结构要根据主要的系统元素及其接口，并要权衡各种竞争因素和约束（如，性能、价格和环境影响），评估生成所需行为的可能方案。系统架构设计师的视野跨越整个系统以及内部和外部可能影响到开发的所有因素。考虑到要维持该广阔的视野，系统分析员很少深入地参与系统的详细工程，而倾向于把它们留给各个工程专业的其他专业人员。 </font>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font face="Arial">
				<img height="142" alt="架构师.jpg" src="http://www.blogjava.net/images/blogjava_net/asktalk/架构师.jpg" width="894" border="0" />
				<br />
				<br />
		</font>
		<font color="#ff3300">
				<strong>
						<font face="Arial">系统架构师应具备的技能：<br /></font>
				</strong>
				<font color="#000000">
						<p>
								<font face="Arial">系统架构设计师角色要求精通促成系统工程的多个规程，并在分析和解决方案合成方面技术娴熟。系统架构设计师还必须善于启发式和归纳式推理（大部分系统体系结构所依赖的），以及对其他工程规程的演绎推理。系统架构设计师不只是地考虑解决方案的技术，还考虑许多其他问题，比如系统操作、性能、经济可行性、可维护性和后勤支持，以及有关这些问题的政治、技术、社会、财务和环境因素（及其他因素）。&#160; </font>
						</p>
						<p>
								<font face="Arial">系统架构设计师必须成熟有经验，使其能够完成对象分析和贸易研究以从多个解决方案中选择最优解决方案，能够在信息不完整或不明确时作出好的判断，并能够认识到&#8220;最好&#8221;通常是由政治、经济以及工程考虑支配的。 </font>
						</p>
						<p>
								<font face="Arial">在处理由人员、硬件和软件组合的系统时，系统架构设计师需要对任何解决方案中由人员和硬件组件施加的物理限制和约束有很强的判断力。除了在系统工程方面的经验（以及对联合规程方面的知识，如操作调查和工程经济）之外，系统架构设计师在软件工程（由于它在现代系统中普遍存在）方面也要有坚实的基础以及以下素质： </font>
						</p>
						<ul>
								<li>
										<font face="Arial">在问题领域的<strong>经验</strong>和对需求的深入理解。该专业技能可以在系统体系结构团队中分摊。 </font>
								</li>
								<li>
										<font face="Arial">
												<strong>领导</strong>品质，用以推动跨各团队的技术工作，在压力下制定关键决策，并坚持贯彻这些决策。为达到效果，系统架构设计师和项目经理必须紧密协作，前者领导技术事宜，后者领导管理事宜。系统架构设计师必须有权作出技术决策。 </font>
								</li>
								<li>
										<font face="Arial">
												<strong>沟通</strong>技能，以赢得信任，进行说服、激励和指导。系统架构设计师不是通过职位拥有权利，而是因为有目共睹的能力和成绩。为了达到效果，系统架构设计师必须指挥项目团队、项目经理、顾客和用户团体，并管理团队。 </font>
								</li>
								<li>
										<font face="Arial">
												<strong>面向目标和主动性</strong>，专注于成果。系统架构设计师是项目背后的技术驱动力，而不是顾问或梦想家。对于一名成功的系统架构设计师而言，其职业就是在压力和许多不确定情况下作出一系列次最佳（但通常不是<i>非常</i>次最佳）决策。只有那些能够专注于需做之事的人才会在这种环境中获得成功。 </font>
								</li>
						</ul>
						<p>
								<font face="Arial">系统架构设计师角色具有系统设计人员的技能，但前者的技能重点是战略性的，并不详细。 <br /><br /><strong>系统架构设计师与软件设计人员的关系</strong></font>
						</p>
						<p>
								<font face="Arial">这两个角色有很多相似点；实际上对于那些因规模或复杂程度而被看作&#8220;系统&#8221;开发、但仍是大型的或完整的软件项目来说，这两个角色是合为一体的。 然而，通常情况下，系统架构设计师比软件设计人员的支持范围大。 系统架构设计师必须对付物理上强加的约束，这些约束在软件更易适应的领域中不存在。但是，正是软件的灵活性使得体系结构演进具有可能的道路，这在以前是无法设想的。因此，软件设计人员和系统架构设计师之间并不是严格的从属关系：从软件体系结构上考虑的反馈可能对系统的体系结构有深远的影响；否认这一点将要承担潜在的次最佳<i>系统</i>体系结构的风险，这些体系结构基于软件体系结构可从需求的分配（由系统架构设计师完成）派生到计算平台这一简单的概念。但是以下说法也是正确的：在系统架构设计师和软件设计人员的团队中，系统架构设计师角色的职责要求系统架构设计师是<i>团队中的佼佼者</i>，因为系统是最终产品。 </font>
						</p>
				</font>
		</font>
 <img src ="http://www.blogjava.net/asktalk/aggbug/88616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2006-12-18 19:39 <a href="http://www.blogjava.net/asktalk/archive/2006/12/18/88616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于XDoclet的Hibernate3企业级开发培训（1）——one2one映射类型的书写要点</title><link>http://www.blogjava.net/asktalk/archive/2006/03/05/33750.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Sun, 05 Mar 2006 13:27:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2006/03/05/33750.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/33750.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2006/03/05/33750.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/33750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/33750.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 摘要：此为我给公司内部新员工培训的实战演示例子，傻瓜级教程，讲述了开发中的注意要点和常见错误，目的主要是让他们适应企业级快速流水作业。由于是面对面讲解，所以没有详细的文档，现在简单整理如下，希望对入门者有帮助。<br><br>培训的目标：对下面的开发过程和模式快速理解和应用。基于我的UML架构-----〉Java POJOs代码------〉在pojos中做xdoclet标识-------〉基于ant生成*.hbm.xml文件（借助于eclipse可以自动化配置）------〉生成database schma和数据库sql语句。逐步可以让新员工过渡到java5的annotation来开发EJB3 .<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/asktalk/archive/2006/03/05/33750.html'>阅读全文</a><img src ="http://www.blogjava.net/asktalk/aggbug/33750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2006-03-05 21:27 <a href="http://www.blogjava.net/asktalk/archive/2006/03/05/33750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java语法探究——从多层内部类/嵌套的类中访问外部类的成员</title><link>http://www.blogjava.net/asktalk/archive/2006/02/19/31535.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Sun, 19 Feb 2006 11:24:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2006/02/19/31535.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/31535.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2006/02/19/31535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/31535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/31535.html</trackback:ping><description><![CDATA[<H5 style="MARGIN: 14pt 0cm 14.5pt"><FONT size=5><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">从多层内部类</SPAN><SPAN lang=EN-US style="mso-font-kerning: 0pt"><FONT face=宋体>/</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">嵌套的类中访问外部类的成员</SPAN><SPAN lang=EN-US style="mso-font-kerning: 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></H5>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文用到名词说明</SPAN><SPAN lang=EN-US><FONT face=宋体>:<o:p></o:p></FONT></SPAN></STRONG></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN style="FONT-WEIGHT: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">内部类：</SPAN></STRONG><STRONG><SPAN lang=EN-US style="FONT-WEIGHT: normal; mso-bidi-font-weight: bold"><FONT face=宋体>Inner Class<o:p></o:p></FONT></SPAN></STRONG></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN style="FONT-WEIGHT: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">嵌套类：</SPAN></STRONG><SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-bidi-font-weight: bold">Static Nested Class </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-weight: bold; mso-bidi-font-family: Arial">（与标题上的嵌套的类不同，此处是专有名词）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-bidi-font-weight: bold"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">静态内部类：同嵌套类一个意思，一物两个名字而已。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN lang=EN-US style="FONT-WEIGHT: normal; mso-bidi-font-weight: bold"><o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></STRONG></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在下面，我们看到对于</SPAN><FONT face=宋体><SPAN lang=EN-US>B</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类来说他的嵌套层次是：</SPAN></FONT><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">AcessMethod-</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">〉</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A-</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">〉</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">B </SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">，</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">那么访问方法如下：</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt"><CODE><B><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #7f0055">class&nbsp;</SPAN></B></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">B&nbsp;{</SPAN></CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">void&nbsp;</SPAN></B><SPAN style="COLOR: black">h()&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">System.out.println(</SPAN><SPAN style="COLOR: #2a00ff">"h()"</SPAN><SPAN style="COLOR: black">);</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">g();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">f();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}<o:p></o:p></SPAN></CODE></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt"><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">AcessMethod</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">和</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">来说对Ｂ，都是透明的，直接调用。</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">嵌套类实例化的顺序：有外到里！</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">AcessMethod-</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">〉</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A-</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">〉</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">B<o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">调用代码如下：</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">AcessMethod&nbsp;am&nbsp;=&nbsp;</SPAN></CODE><CODE><B><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #7f0055">new&nbsp;</SPAN></B></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">AcessMethod();</SPAN></CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">AcessMethod.A&nbsp;a&nbsp;=&nbsp;am.</SPAN><B><SPAN style="COLOR: #7f0055">new&nbsp;</SPAN></B><SPAN style="COLOR: black">A();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">AcessMethod.A.B&nbsp;b&nbsp;=&nbsp;a.</SPAN><B><SPAN style="COLOR: #7f0055">new&nbsp;</SPAN></B><SPAN style="COLOR: black">B();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">b.h();<o:p></o:p></SPAN></CODE></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt"><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">这里很有意思的一点，</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">’.new’</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">语法产生了正确的作用域。</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt"><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p>&nbsp;</o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt"><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">疑问：</SPAN></STRONG><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">下面我们来看一下在</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">B.h()</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中怎样调用</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1.g()</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">方法？</SPAN></CODE><CODE><B><SPAN lang=EN-US style="FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-font-size: 10.5pt"><o:p></o:p></SPAN></B></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p>&nbsp;</o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">下面我们来看是否可以在</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">B</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中调用</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1.g()</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">方法，在</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">B.h()</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">方法中原则上可以这样调用</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1.g()</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">但是</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">没有实例化，所以这样是错误的，也就是在</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">B</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中无法调用</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中的非静态方法了。</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN lang=EN-US><o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></STRONG></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设：</SPAN></STRONG><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">如果</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1.g()</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">为</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">static</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">类型，那么在</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">B</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中可以这样调用</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">种的方法：</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1.this.g()</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">；</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black"><o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><B><SPAN lang=EN-US style="FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ansi-font-size: 10.5pt"><o:p>&nbsp;</o:p></SPAN></B></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">但是这是不可能的，因为在</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">A1.g()</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">不可能定义为</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">static</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">类型，详细看下面的问题</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">1</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">（</SPAN></CODE><STRONG><SPAN style="FONT-WEIGHT: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">问题</SPAN></STRONG><FONT face=宋体><STRONG><SPAN lang=EN-US style="FONT-WEIGHT: normal; mso-bidi-font-weight: bold">1:</SPAN></STRONG><STRONG><SPAN style="FONT-WEIGHT: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">在什么情况下可以定义</SPAN></STRONG><STRONG><SPAN lang=EN-US style="FONT-WEIGHT: normal; mso-bidi-font-weight: bold">static </SPAN></STRONG><STRONG><SPAN style="FONT-WEIGHT: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold">方法），这是一个缺点吧，但是可以使用嵌套类来解决了。</SPAN></STRONG></FONT><B><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #3f5fbf">/**</SPAN></CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;</SPAN><SPAN style="COLOR: #3f5fbf">*&nbsp;</SPAN></CODE></SPAN><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">从多层嵌套类中访问外部类的成员</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #3f5fbf">.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN></SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">“</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #3f5fbf">.new</SPAN></CODE><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: #3f5fbf; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">“语法产生了正确的作用域</SPAN></CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;</SPAN><SPAN style="COLOR: #3f5fbf">*/</SPAN></CODE><BR><CODE><B><SPAN style="COLOR: #7f0055">public&nbsp;class&nbsp;</SPAN></B><SPAN style="COLOR: black">AcessMethod&nbsp;{</SPAN></CODE><BR><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">private&nbsp;void&nbsp;</SPAN></B><SPAN style="COLOR: black">f()&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">System.out.println(</SPAN><SPAN style="COLOR: #2a00ff">"f()"</SPAN><SPAN style="COLOR: black">);</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}<o:p></o:p></SPAN></CODE></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">class&nbsp;</SPAN></B><SPAN style="COLOR: black">A1&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">private&nbsp;void&nbsp;</SPAN></B><SPAN style="COLOR: black">g()&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">System.out.println(</SPAN><SPAN style="COLOR: #2a00ff">"A<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:chmetcnv UnitName="g" SourceValue="1" HasSpace="False" Negative="False" NumberType="1" TCSC="0" w:st="on">1 </st1:chmetcnv>- g()"</SPAN><SPAN style="COLOR: black">);</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}<o:p></o:p></SPAN></CODE></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15pt; mso-char-indent-count: 1.5"><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">}<o:p></o:p></SPAN></CODE></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15pt; mso-char-indent-count: 1.5"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">class&nbsp;</SPAN></B><SPAN style="COLOR: black">A&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">private&nbsp;void&nbsp;</SPAN></B><SPAN style="COLOR: black">g()&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">System.out.println(</SPAN><SPAN style="COLOR: #2a00ff">"g()"</SPAN><SPAN style="COLOR: black">);</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}</SPAN></CODE><BR><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">class&nbsp;</SPAN></B><SPAN style="COLOR: black">B&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">void&nbsp;</SPAN></B><SPAN style="COLOR: black">h()&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">System.out.println(</SPAN><SPAN style="COLOR: #2a00ff">"h()"</SPAN><SPAN style="COLOR: black">);</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">g();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">f();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}</SPAN></CODE><BR><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">public&nbsp;static&nbsp;void&nbsp;</SPAN></B><SPAN style="COLOR: black">main(String[]&nbsp;args)&nbsp;{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">AcessMethod&nbsp;am&nbsp;=&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">new&nbsp;</SPAN></B><SPAN style="COLOR: black">AcessMethod();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">AcessMethod.A&nbsp;a&nbsp;=&nbsp;am.</SPAN><B><SPAN style="COLOR: #7f0055">new&nbsp;</SPAN></B><SPAN style="COLOR: black">A();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">AcessMethod.A.B&nbsp;b&nbsp;=&nbsp;a.</SPAN><B><SPAN style="COLOR: #7f0055">new&nbsp;</SPAN></B><SPAN style="COLOR: black">B();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">b.h();</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}</SPAN></CODE><BR><CODE><SPAN style="COLOR: black">}<o:p></o:p></SPAN></CODE></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">运行结果：</SPAN></CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">h()</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 50pt; TEXT-ALIGN: left; mso-char-indent-count: 5.0; mso-layout-grid-align: none" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">g()</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 50pt; mso-char-indent-count: 5.0"><SPAN lang=EN-US style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">f()</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 50pt; mso-char-indent-count: 5.0"><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题</SPAN><SPAN lang=EN-US><FONT face=宋体>1:</FONT></SPAN></STRONG><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在什么情况下可以定义</SPAN><SPAN lang=EN-US><FONT face=宋体>static </FONT></SPAN></STRONG><STRONG><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法</SPAN></STRONG><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">？</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p><FONT face=宋体>&nbsp;</FONT></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只有在顶层类中定义，或者在静态内部类中定义，看下面的例子</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><CODE><B><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #7f0055">public&nbsp;class&nbsp;</SPAN></B></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">Test&nbsp;{</SPAN></CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">static&nbsp;void&nbsp;</SPAN></B><SPAN style="COLOR: black">t(){}</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">class&nbsp;</SPAN></B><SPAN style="COLOR: black">T2{</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #3f7f5f">//!</SPAN></CODE></SPAN><CODE><SPAN style="FONT-SIZE: 10pt; COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">错误，</SPAN></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #3f7f5f">The&nbsp;method&nbsp;a&nbsp;cannot&nbsp;be&nbsp;declared&nbsp;static;&nbsp;</SPAN></CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #3f7f5f">//static&nbsp;methods&nbsp;can&nbsp;only&nbsp;be&nbsp;declared&nbsp;in&nbsp;a&nbsp;static&nbsp;or&nbsp;top&nbsp;level&nbsp;type</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #3f7f5f">//static&nbsp;void&nbsp;a(){}</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}<o:p></o:p></SPAN></CODE></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.05pt; mso-char-indent-count: 1.0"><CODE><B><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #7f0055">static</SPAN></B></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: white">&nbsp;</SPAN></CODE><CODE><B><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #7f0055">class&nbsp;</SPAN></B></CODE><CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black">T3{</SPAN></CODE><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><B><SPAN style="COLOR: #7f0055">static&nbsp;void</SPAN></B><SPAN style="COLOR: #3f7f5f">&nbsp;</SPAN><SPAN style="COLOR: black">a(){}</SPAN></CODE><BR><CODE><SPAN style="COLOR: white">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: black">}</SPAN></CODE><BR><CODE><SPAN style="COLOR: black">}</SPAN></CODE></SPAN></P><img src ="http://www.blogjava.net/asktalk/aggbug/31535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2006-02-19 19:24 <a href="http://www.blogjava.net/asktalk/archive/2006/02/19/31535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Thinking in java 第四版来了先读为快！（可以下载）</title><link>http://www.blogjava.net/asktalk/archive/2006/02/17/31145.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Fri, 17 Feb 2006 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2006/02/17/31145.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/31145.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2006/02/17/31145.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/31145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/31145.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Thinking in java 第四版来了，增加了java 5.0的泛型，新语法等的讨论，还加入了java6.0的最新技术，主要是对web2.0的支持方面。<br><br>... I wish I had this book when I started programming. I recommend this book to every student as well as beginner and intermediate Java programmer. This book would also serve as a guide to those who would wish to write the Sun Certified Java Programmer (SCJP) certification exam. It also introduces design patterns and testing which is really good since we see programmers writing 100’s of lines of code with no&nbsp;&nbsp;<a href='http://www.blogjava.net/asktalk/archive/2006/02/17/31145.html'>阅读全文</a><img src ="http://www.blogjava.net/asktalk/aggbug/31145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2006-02-17 10:20 <a href="http://www.blogjava.net/asktalk/archive/2006/02/17/31145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以一个装饰模式来看IBM RSA与Together2006(附UML图)</title><link>http://www.blogjava.net/asktalk/archive/2006/02/14/30718.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Tue, 14 Feb 2006 15:41:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2006/02/14/30718.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/30718.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2006/02/14/30718.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/30718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/30718.html</trackback:ping><description><![CDATA[现实的发票有三部分组成：头部分，主题部分（数据部分），尾部分；不同的对象打印出来的头和尾是不一样的，但是主体部分是一样，那么要实现这样的需求，就应该采用装饰模式，下面是UML图示。<BR>下面是一个发票打印系统，其中<BR>SalesOrder是发票的主体，也就是中间的数据部分<BR>HeaderDecorator,HeaderDecorator1是头部分样式；<BR>FooterDecorator,FooterDecorator2是尾部分样式；<BR>OrderLine是主体中的单列数据；<BR><BR><IMG height=595 alt=printinvoice.gif src="http://www.blogjava.net/images/blogjava_net/asktalk/images/printinvoice.gif" width=614 border=0><BR><BR>对IBM RSA与Together2006的比较：<BR>IBM RSA：<BR>1，比较易用，外观漂亮，可以很方便调整颜色：<BR>2，运行速度比较快，相比较&nbsp;&nbsp;&nbsp;&nbsp;Together2006；<BR>3，智能化技术非常低，在反向工程中最明显；<BR>4，不支持Java5.0技术；<BR><BR>Together2006（上图Together2006实现）：<BR>1，智能化技术非常高，没发现出现低级错误，在反向工程中最明显；<BR>2，支持Java5.0技术；<BR>3，运行速度慢，有时候让人难以接受；<BR><BR>先写到这，有时间接着写。。。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR><img src ="http://www.blogjava.net/asktalk/aggbug/30718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2006-02-14 23:41 <a href="http://www.blogjava.net/asktalk/archive/2006/02/14/30718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流行FrameWork整合之Spring­­—— IoC反向控制篇</title><link>http://www.blogjava.net/asktalk/archive/2006/02/14/30623.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Tue, 14 Feb 2006 07:48:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2006/02/14/30623.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/30623.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2006/02/14/30623.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/30623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/30623.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: J2EE开发正在变得越来越复杂，J2EE已经发展为一个API、复杂化的编程和配置的复杂网络。这几年，新的框架和方法不断涌现从一定程度上缓解了开发的复杂和降低了开发的成本，但是要把这些Framework整合起来，如Struts,JSF,Webwork,Hibernate,JDO等等，并不是那么容易，就目前来看这个职位只有Spring能够胜任，采用的就是IoC技术。那么反向控制到底什么？&nbsp;&nbsp;<a href='http://www.blogjava.net/asktalk/archive/2006/02/14/30623.html'>阅读全文</a><img src ="http://www.blogjava.net/asktalk/aggbug/30623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2006-02-14 15:48 <a href="http://www.blogjava.net/asktalk/archive/2006/02/14/30623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Sourceforge.net 开源网站被禁？？</title><link>http://www.blogjava.net/asktalk/archive/2006/01/19/28710.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Thu, 19 Jan 2006 15:50:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2006/01/19/28710.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/28710.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2006/01/19/28710.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/28710.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/28710.html</trackback:ping><description><![CDATA[著名的开源站点无法访问，打听了不同地方的朋友，好像都不能访问，听朋友说被禁了，是不是真的禁了。<BR>不明白为什么？2002年前好像一直被禁，后来开放了，但是现在又无法访问；大家试一下，自己的<BR>能访问吗？<BR><BR>开源的权威站点啊，hibernate,spring ,等等都来自哪里啊！！<img src ="http://www.blogjava.net/asktalk/aggbug/28710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2006-01-19 23:50 <a href="http://www.blogjava.net/asktalk/archive/2006/01/19/28710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate深入研究3-1</title><link>http://www.blogjava.net/asktalk/archive/2006/01/18/28548.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Wed, 18 Jan 2006 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2006/01/18/28548.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/28548.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2006/01/18/28548.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/28548.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/28548.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Hibernate中有三种状态，对它的深入理解，才能更好的理解hibernate的运行机理，刚开始不太注意这些概念，后来发现它是重要的。对于理解hibernate，JVM和sql的关系有更好的理解。对于需要持久化的JAVA对象，在它的生命周期中有三种状态，而且互相转化。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/asktalk/archive/2006/01/18/28548.html'>阅读全文</a><img src ="http://www.blogjava.net/asktalk/aggbug/28548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2006-01-18 18:26 <a href="http://www.blogjava.net/asktalk/archive/2006/01/18/28548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JCL(Jakarta Commons Logging)应用开发小结</title><link>http://www.blogjava.net/asktalk/archive/2005/08/18/10387.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Wed, 17 Aug 2005 17:18:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2005/08/18/10387.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/10387.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2005/08/18/10387.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/10387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/10387.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JCL(Jakarta Commons Logging)和log4j不都是做log的吗，怎么在jcl的源码包中，还有个log4j的包？倒底怎么回事？看了jcl的用户指南，就明白了。 



 1、Commons-Loggin简介 



　　Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface)，同时兼顾轻量级和不依赖于具体的日志实现工具。 它提供给中间件/日志工具开发者一个简单的日志操作抽象，允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口，对其它一些日志工具，包括Log4J, Avalon LogKit, and JDK 1.4等，进行了简单的包装，此接口更接近于Log4J和LogKit的实现. 
&nbsp;&nbsp;<a href='http://www.blogjava.net/asktalk/archive/2005/08/18/10387.html'>阅读全文</a><img src ="http://www.blogjava.net/asktalk/aggbug/10387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2005-08-18 01:18 <a href="http://www.blogjava.net/asktalk/archive/2005/08/18/10387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate3之One-to-one关系映射</title><link>http://www.blogjava.net/asktalk/archive/2005/08/18/10384.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Wed, 17 Aug 2005 16:26:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2005/08/18/10384.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/10384.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2005/08/18/10384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/10384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/10384.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     对于hibernate的one-to-one关系来说，在hibernate中有两种方法：第一种就是用many-to-one来代替一对多，其实one-to-one也就是many-to-one的一种极限方式，若把many-to-one设置unique="true"，则这时候的many-to-one实质上就是one-to-one;这里为什么能够用many-to-one来代替one-to-one呢？最根本的是连个对象必须有一个字段相关联，那么你也发现one-to-one中没有column属性，也就是不能够把one-to-one的这种关系生成一个字段/属性，而many-to-one可以，它有column属性。所以，说了这么多，你应该明白为什么可以用many-to-one来代替one-to-one.&nbsp;&nbsp;<a href='http://www.blogjava.net/asktalk/archive/2005/08/18/10384.html'>阅读全文</a><img src ="http://www.blogjava.net/asktalk/aggbug/10384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2005-08-18 00:26 <a href="http://www.blogjava.net/asktalk/archive/2005/08/18/10384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CVS团队开发：Window2003版</title><link>http://www.blogjava.net/asktalk/archive/2005/08/14/10059.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Sat, 13 Aug 2005 23:14:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2005/08/14/10059.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/10059.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2005/08/14/10059.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/10059.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/10059.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: CVS团队开发：Window2003版用法&nbsp;&nbsp;<a href='http://www.blogjava.net/asktalk/archive/2005/08/14/10059.html'>阅读全文</a><img src ="http://www.blogjava.net/asktalk/aggbug/10059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2005-08-14 07:14 <a href="http://www.blogjava.net/asktalk/archive/2005/08/14/10059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用xdoclet开发hibernate3的ant通用代码</title><link>http://www.blogjava.net/asktalk/archive/2005/07/30/8784.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Sat, 30 Jul 2005 08:31:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2005/07/30/8784.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/8784.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2005/07/30/8784.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/8784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/8784.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 不知道为什么，复制到这里颜色没了，所以就成下面的了。还可以凑或着看吧<br>不用多说了，已经注释很详细了，希望对你有帮助&nbsp;&nbsp;<a href='http://www.blogjava.net/asktalk/archive/2005/07/30/8784.html'>阅读全文</a><img src ="http://www.blogjava.net/asktalk/aggbug/8784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2005-07-30 16:31 <a href="http://www.blogjava.net/asktalk/archive/2005/07/30/8784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE安全策略：为tomcat页面设置访问权限（j_security_check）</title><link>http://www.blogjava.net/asktalk/archive/2005/07/23/8221.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Fri, 22 Jul 2005 20:12:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2005/07/23/8221.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/8221.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2005/07/23/8221.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/8221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/8221.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><FONT face=Arial><B><SPAN style="COLOR: #05006c; LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial">为<SPAN lang=EN-US>tomcat</SPAN>页面设置访问权限<BR></SPAN></B><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><FONT face=Arial>CSDN网址：</FONT><A href="http://blog.csdn.net/fasttalk"><FONT face=Arial>http://blog.csdn.net/fasttalk</FONT></A><BR><FONT face=Arial>刚从CSDN搬到这里，先发表一篇！<BR>在<SPAN lang=EN-US>web</SPAN>应用中，对页面的访问控制通常通过程序来控制，流程为：</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=Arial>登录<SPAN lang=EN-US> -&gt; </SPAN>设置<SPAN lang=EN-US>session -&gt; </SPAN>访问受限页面时检查<SPAN lang=EN-US>session</SPAN>是否存在，如果不存在，禁止访问<SPAN lang=EN-US> <o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><FONT face=Arial>对于较小型的<SPAN lang=EN-US>web</SPAN>应用，可以通过<SPAN lang=EN-US>tomcat</SPAN>内置的访问控制机制来实现权限控制。采用这种机制的好处是，程序中无需进行权限控制，完全通过对<SPAN lang=EN-US>tomcat</SPAN>的配置即可完成访问控制。<SPAN lang=EN-US> <o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><FONT face=Arial>为了在<SPAN lang=EN-US>tomcat</SPAN>页面设置访问权限控制，在项目的<SPAN lang=EN-US>WEB-INFO/web.xml</SPAN>文件中，进行如下设置：<SPAN lang=EN-US> <o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><TEXTAREA style="WIDTH: 669px; HEIGHT: 358px" rows=22 cols=79>&lt;web-app&gt;

&lt;!--servlet等其他配置--&gt;

&lt;security-constraint&gt;
  &lt;web-resource-collection&gt;
      &lt;display-name&gt;Example Security Constraint&lt;/display-name&gt;
      &lt;web-resource-name&gt;My Test&lt;/web-resource-name&gt;
   
      &lt;url-pattern&gt;/ddly/admin/*&lt;/url-pattern&gt;
  &lt;/web-resource-collection&gt;
  
&lt;auth-constraint&gt;
    &lt;role-name&gt;role1&lt;/role-name&gt;
    &lt;role-name&gt;tomcat&lt;/role-name&gt;
&lt;/auth-constraint&gt;

&lt;/security-constraint&gt;

&lt;login-config&gt;
    &lt;auth-method&gt;BASIC&lt;/auth-method&gt;
    &lt;realm-name&gt;My Test&lt;/realm-name&gt;
&lt;/login-config&gt;

&lt;/web-app&gt;
</TEXTAREA><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><FONT face=Arial>其中，<SPAN lang=EN-US>&lt;url-pattern&gt;</SPAN>中指定受限的<SPAN lang=EN-US>url</SPAN>，可以使用通配符<SPAN lang=EN-US>*</SPAN>，通常对整个目录进行访问权限控制。</FONT><SPAN lang=EN-US><BR><FONT face=Arial>&lt;auth-constraint&gt;</FONT></SPAN><FONT face=Arial>中指定哪些角色可以访问<SPAN lang=EN-US>&lt;url-pattern&gt;</SPAN>指定的<SPAN lang=EN-US>url</SPAN>，在<SPAN lang=EN-US>&lt;role-name&gt;</SPAN>中可以设置一个或多个角色名。<SPAN lang=EN-US> <o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><FONT face=Arial>使用的角色名来自<SPAN lang=EN-US>tomcat</SPAN>的配置文件<SPAN lang=EN-US>${CATALINA_HOME}/conf/tomcat-users.xml</SPAN>。<SPAN lang=EN-US> <o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><FONT face=Arial><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">&lt;login-config&gt;</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt">中设置登录方式，<SPAN lang=EN-US>&lt;auth-method&gt;</SPAN>的取值为<SPAN lang=EN-US>BASIC</SPAN>或<SPAN lang=EN-US>FORM</SPAN>。如果为<SPAN lang=EN-US>BASIC</SPAN>，浏览器在需要登录时弹出一个登录窗口。如果为<SPAN lang=EN-US>FORM</SPAN>方式，需要指定登录页面和登录失败时的提示信息显示页面。<SPAN lang=EN-US> <o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><FONT face=Arial>使用<SPAN lang=EN-US>FORM</SPAN>方式的配置样例如下：<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><TEXTAREA style="WIDTH: 667px; HEIGHT: 134px" rows=8 cols=79>&lt;login-config&gt;
   &lt;auth-method&gt;FORM&lt;/auth-method&gt;
   &lt;realm-name&gt;Example Form-Based Authentication Area&lt;/realm-name&gt;
   &lt;form-login-config&gt;
      &lt;form-login-page&gt;/login.jsp&lt;/form-login-page&gt;
      &lt;form-error-page&gt;/error.jsp&lt;/form-error-page&gt;
   &lt;/form-login-config&gt;
&lt;/login-config&gt;
</TEXTAREA><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 9pt; WORD-BREAK: break-all; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><FONT face=Arial>其中的<SPAN lang=EN-US>&lt;form-login-page&gt;</SPAN>指定登录页面<SPAN lang=EN-US>url</SPAN>，<SPAN lang=EN-US>&lt;form-error-page&gt;</SPAN>指定登录失败时的提示页面<SPAN lang=EN-US>url</SPAN>。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=Arial>登录页面中，<SPAN lang=EN-US>form</SPAN>的<SPAN lang=EN-US>action</SPAN>，以及其中的用户名和密码两个参数的名称，都应取固定的值。登录的后台处理程序为<SPAN lang=EN-US>j_security_check</SPAN>；用户名和密码的参数名称分别为：<SPAN lang=EN-US>j_username</SPAN>和<SPAN lang=EN-US>j_password</SPAN>。</FONT><SPAN lang=EN-US><BR></SPAN><FONT face=Arial>如下是登录页面（如：<SPAN lang=EN-US>login.jsp</SPAN>）的一段示例代码：<SPAN lang=EN-US> <o:p></o:p></SPAN></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial; mso-font-kerning: 0pt"><TEXTAREA style="WIDTH: 668px; HEIGHT: 294px" rows=18 cols=79>&lt;form method="POST" action='&lt;%= response.encodeURL("j_security_check") %&gt;' &gt;
  &lt;table border="0" cellspacing="5"&gt;
    &lt;tr&gt;
      &lt;th align="right"&gt;Username:&lt;/th&gt;
      &lt;td align="left"&gt;&lt;input type="text" name="j_username"&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;th align="right"&gt;Password:&lt;/th&gt;
      &lt;td align="left"&gt;&lt;input type="password" name="j_password"&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td align="right"&gt;&lt;input type="submit" value="Log In"&gt;&lt;/td&gt;
      &lt;td align="left"&gt;&lt;input type="reset"&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/form&gt;
</TEXTAREA></SPAN><SPAN lang=EN-US style="FONT-FAMILY: 新宋体; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P>
<P><FONT face=Arial></FONT>&nbsp;</P> <img src ="http://www.blogjava.net/asktalk/aggbug/8221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2005-07-23 04:12 <a href="http://www.blogjava.net/asktalk/archive/2005/07/23/8221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很高兴，我的blog从csdn转移到这里了！</title><link>http://www.blogjava.net/asktalk/archive/2005/05/20/4978.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Fri, 20 May 2005 02:51:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2005/05/20/4978.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/4978.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2005/05/20/4978.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/4978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/4978.html</trackback:ping><description><![CDATA[由于csdn的blog太不稳定，让我伤透了心，现在有找到了一个新家，我非常高兴！希望与大家交流java技术。<img src ="http://www.blogjava.net/asktalk/aggbug/4978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2005-05-20 10:51 <a href="http://www.blogjava.net/asktalk/archive/2005/05/20/4978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>