﻿<?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-计算机程序虚拟的人生</title><link>http://www.blogjava.net/leixiangjian/</link><description>虚拟世界中的游魂</description><language>zh-cn</language><lastBuildDate>Tue, 05 May 2026 12:44:01 GMT</lastBuildDate><pubDate>Tue, 05 May 2026 12:44:01 GMT</pubDate><ttl>60</ttl><item><title>mule源码分析之一</title><link>http://www.blogjava.net/leixiangjian/archive/2009/09/04/293848.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Fri, 04 Sep 2009 04:25:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/09/04/293848.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/293848.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/09/04/293848.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/293848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/293848.html</trackback:ping><description><![CDATA[第一次接触mina这个物件，在网上看了一些相关的资料，同时也参考了别人的一些分析mina的心得和方式！<br />
mina是何物？<br />
Mina是一个用于开发高性能和高可用性的网络应用程序基础架构，它封装了底层的I/O和线程并发等复杂工作。<br />
Mina主要是基于java NIO类库开发；采用非阻塞方式的异步传输、事件驱动、批量数据传输；支持TCP、UDP网络协议<br />
<br />
首先从服务器端启动NioSocketAcceptor对象进行分析。<br />
1、实例化DefaultSocketSessionConfig会话配置器和异步传输NioProcessor处理器<br />
2、实例化AbstractPollingIoAcceptor构造器同时实例化SimpleIoProcessorPool处理器池<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --〉在SimpleProcessorPool中初始化执行器&lt;线程池&gt;，然后初始化一个IoProcessor对象数组，长度为3，最后将处理器对象放入到IoProcessor数组中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--〉处理化传输带元数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --〉初始化服务监视器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --〉初始化异常监视器<br />
3、初始化过滤链<br />
4、初始化选择器 <br />
<br />
架构介绍<br />
<p>应用结构图<br />
<img height="219" alt="" src="http://www.blogjava.net/images/blogjava_net/leixiangjian/dd.GIF" width="460" border="0" /><br />
深入分析结构图<br />
<img height="385" alt="" src="http://www.blogjava.net/images/blogjava_net/leixiangjian/cc.GIF" width="519" border="0" /><br />
mina的基本应用可以分为3层：<br />
1、I/O Serivce：实际执行I/O层<br />
2、I/OFilter chain：数据过滤和转换层，主要是把字节转换为需要的数据格式或者反过来处理<br />
3、I/OHandler：业务处理层<br />
创建Mina应用分为3部分：<br />
1、创建I/O 2、创建过滤链<br />
3、创建I/O业务处理</p>
<img src ="http://www.blogjava.net/leixiangjian/aggbug/293848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-09-04 12:25 <a href="http://www.blogjava.net/leixiangjian/archive/2009/09/04/293848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dojo入门</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/29/284599.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Mon, 29 Jun 2009 06:20:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/29/284599.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/284599.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/29/284599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/284599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/284599.html</trackback:ping><description><![CDATA[&nbsp;Dojo介绍<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dojo 是一个用javascript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)), 这也是为什么叫它a \"unified\" toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些，长期存在 、历史问题。historical problems with DHTML 跨浏览器问题。Dojo让你更容易 使web页面具有动态能力，或在任何稳健的支持javascript语言的环境中发挥作用。<br />
<br />
a、利用dojo提供的组件，你可以提升你的web应用程序可用性、交互能力以及功能上的提高；<br />
b、你也可以 更容易的建立degradeable user interfaces ？？，dojo提供小巧的 widgets ，animate transitions；<br />
c、利用它的低级APIs和可兼容的代码，写出轻便的、单一风格（复杂）的javascript代码，Dojo的 event system, I/O APIs, and generic language enhancement form the basis of a powerful programming environment.<br />
d、通过Dojo提供的工具，你可以为你的代码写命令行式的单元测试代码。<br />
e、the Dojo package system使你自己的代码更容易维护，偶合性更低。
<p>Dojo通过很少的代码完成了以上的功能。（以后可能我详细说说dojo的package system ，只需要三个js文件）。当你写脚本时，只需要包含很少的js文件（大小）。也可以选择的（包含）下载dojo提供的庞大的功能。Dojo provides MultiplePointsOfEntry, InterpreterIndependence, ForwardLookingAPIs, and focuses on ReducingBarriersToAdoption.<br />
　　dojo试图建立一种新的标签语言DojoML。目标是，在DojoML和javascript脚本语言不变的情况下，用不同的render方式展示数据， Renderings may be made available in several rendering contexts (such as SVG, or perhaps even the desktop or Flash)。（比较美好啊）更进一步，the DojoML 剖析器可以接受html和svg为输入，容易的建立DegradeableResponsiveApplications。<br />
<br />
第一部分&nbsp;&nbsp;安装<br />
第一个小节&nbsp; 怎么安装Dojo&nbsp;Toolkit<br />
&nbsp;Dojo在磁盘上只是一堆文件，它不需要特殊的设置，它可以通过以下三种途径获得：<br />
&nbsp;1、可以从google的内容分布网络获得<br />
&nbsp;&nbsp; 加载的方法可以参考<a href="http://code.google.com/intl/zh-CN/apis/ajaxlibs/documentation/index.html#dojo">http://code.google.com/intl/zh-CN/apis/ajaxlibs/documentation/index.html#dojo</a><br />
&nbsp;2、.在你自己的服务器上使用Dojo<br />
&nbsp; a、下载最新的dojo包，地址：<a href="http://dojotoolkit.org/downloads">http://dojotoolkit.org/downloads</a>；目前最新的包为1.3.1<br />
&nbsp; b、解压下载的压缩文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --dojo-release-1.3.1-src<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----dijit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----dojo<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----dojox<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----util<br />
&nbsp;&nbsp;c、可以通过D:\Apache-Source\dojo\1.3.1\dojo-release-1.3.1-src\dojo-release-1.3.1-src\dijit\themes\themeTester.html 这样的路径来查看相关的JS例子<br />
3、每日构建代码<br />
&nbsp;&nbsp; 你可以通过SVN地址获得<br />
<tt class="docutils literal"><span class="pre">For instance, Dojo Core repository is: <br />
http://svn.dojotoolkit.org/src/dojo/trunk <br />
<br />
There are two versions of this view: anonymous and committer. <br />
<br />
For users (readonly):<br />
http://svn.dojotoolkit.org/src/view/anon/all/trunk<br />
<br />
For committers (read/write):<br />
https://svn.dojotoolkit.org/src/view/committer/all/trunk<br />
<br />
第二部分 <font style="background-color: #ffffff">Ajax<br />
第一个小节 ajax<br />
a、ajax and Dojo<br />
1）XHR选项<br />
例子：<br />
</p>
<pre><span class="c">// post some data, ignore the response:</span>
<span class="nx">dojo</span><span class="p">.</span><span class="nx">xhrPost</span><span class="p">({</span>
<span class="nx">form</span><span class="o">:</span> <span class="s2">"someFormId"</span><span class="o">,</span> <span class="c">// read the url: from the action="" of the &lt;form&gt;</span>
<span class="nx">timeout</span><span class="o">:</span> <span class="mi">3000</span><span class="o">,</span> <span class="c">// give up after 3 seconds</span>
<span class="nx">content</span><span class="o">:</span> <span class="p">{</span> <span class="nx">part</span><span class="o">:</span><span class="s2">"one"</span><span class="o">,</span> <span class="nx">another</span><span class="o">:</span><span class="s2">"part"</span> <span class="p">}</span> <span class="c">// creates ?part=one&amp;another=part with GET, Sent as POST data when using xhrPost</span>
<span class="p">});</span>
<span class="c">// get some data, convert to JSON</span>
<span class="nx">dojo</span><span class="p">.</span><span class="nx">xhrGet</span><span class="p">({</span>
<span class="nx">url</span><span class="o">:</span><span class="s2">"data.json"</span><span class="o">,</span>
<span class="nx">handleAs</span><span class="o">:</span><span class="s2">"json"</span><span class="o">,</span>
<span class="nx">load</span><span class="o">:</span> <span class="k">function</span><span class="p">(</span><span class="nx">data</span><span class="p">){</span>
<span class="k">for</span><span class="p">(</span><span class="k">var</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">data</span><span class="p">){</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"key"</span><span class="o">,</span> <span class="nx">i</span><span class="o">,</span> <span class="s2">"value"</span><span class="o">,</span> <span class="nx">data</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">});</span>
</pre>
<p>2）XHR回调<br />
有三种方法可以附加到XHR选择对象，以确定当数据回调时该怎么做。<br />
<br />
</font><br />
</span></tt></p>
<img src ="http://www.blogjava.net/leixiangjian/aggbug/284599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-29 14:20 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/29/284599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>petstore--分析</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/29/284579.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Mon, 29 Jun 2009 04:34:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/29/284579.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/284579.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/29/284579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/284579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/284579.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 如果不输入绝对的URL访问地址，例如：URL=http://localhost:8080/petstore；则Glassfish能够自动的搜索项目中是否存在index.html或者index.jsp页面作为入口页面。&nbsp;<br />
&nbsp;&nbsp; CatalogFacade对象在服务器启动时被实例化，然后将实例化的CatalogFacade对象放置到ServletContext环境中，这样可以直接从ServletContext环境中取得CatalogFacade对象进行相关数据方法的调用。<br />
&nbsp;&nbsp; index.jsp中涉足到一个js框架DOJO，这个需要进一步的学习。 <br />
&nbsp;&nbsp; 对数据的增、删、改、查主要用到了JPA来处理。
<img src ="http://www.blogjava.net/leixiangjian/aggbug/284579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-29 12:34 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/29/284579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>petstore--JSF</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/26/284215.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Fri, 26 Jun 2009 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/26/284215.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/284215.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/26/284215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/284215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/284215.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 由于PetStore涉及到了jsf，那就没有办法了，还是先看看JSF<br />
--------------------------------------------------------------------------<br />
&nbsp;&nbsp;&nbsp; JSF是有JCP（JAVA Community Process）团队研发出来的一套标准，并在2004年3月发表JavaServer Faces1.0成果。<br />
<br />
&nbsp;&nbsp;&nbsp; 看到一篇内容对初学者目前jsf的了解很重要：注意这篇文章是2006年的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span lang="EN-US" style="font-size: 11.5pt; color: blue; line-height: 135%; font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-weight: bold">JSF1.1</span> <span style="font-size: 11.5pt; color: blue; line-height: 135%; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">，</span> <span lang="EN-US" style="font-size: 11.5pt; color: blue; line-height: 135%; font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-weight: bold">JSF1.2</span> <span style="font-size: 11.5pt; color: blue; line-height: 135%; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">，</span> <span lang="EN-US" style="font-size: 11.5pt; color: blue; line-height: 135%; font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-weight: bold">myfaces,oracle ADF,ajax4jsf</span> <span style="font-size: 11.5pt; color: blue; line-height: 135%; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">，</span> <span lang="EN-US" style="font-size: 11.5pt; color: blue; line-height: 135%; font-family: Arial; mso-font-kerning: 0pt; mso-bidi-font-weight: bold">facelets,</span> <span style="font-size: 11.5pt; color: blue; line-height: 135%; font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">它们究竟是什么，有什么关系呢？<br />
<p style="margin: 0cm 5.25pt 8.05pt; text-indent: 15.75pt; line-height: 135%; text-align: left" align="left"><span style="font-size: 11.5pt; color: red; line-height: 135%; font-family: Arial">JSF1.1</span> <span style="font-size: 11.5pt; color: red; line-height: 135%; font-family: 宋体">、</span> <span style="font-size: 11.5pt; color: red; line-height: 135%; font-family: Arial">1.2</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">都是</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">JSF</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">的标准，定义例如接口、规范（</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">JSF</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">是面向接口编程的），必须通过实现才能被我们所使用，而实现包括有</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">JSF RI(Reference Implementation)</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">，还有</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">myfaces core1.1.4</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">的实现等。</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">JSF RI</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">是</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">SUN</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">对</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">JSF</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">的实现，相对来说兼容性比较好，也比较稳定（因为</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">1.1</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">已经很久没更新过了，已经转向</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">1.2</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">去了），而</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">myfaces</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体"><clk style="font-size: 11.5pt; line-height: 16pt">更新比较快，<nobr oncontextmenu="return false" onmousemove="$cE.MoW()" id="clickeyekey2" onmouseover="$cE.s(event,2)" style="font-size: 11.5pt; color: #6600ff; line-height: 16pt; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick='$cE.c(event,2,"",1)' onmouseout="$cE.OuK()">功能</nobr>也比较多一点，初学的推荐</clk></span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">JSF RI1.1</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">就可以了，</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">1.2</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">需要新的</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">servlet2.5/jsp2.1</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">以及服务器支持，现在还不稳定。</span> </p>
<p style="margin: 0cm 5.25pt 8.05pt; text-indent: 15.75pt; line-height: 135%; text-align: left" align="left"><span style="font-size: 11.5pt; color: red; line-height: 135%; font-family: Arial">myfaces</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体"><clk style="font-size: 11.5pt; line-height: 16pt">，它是一个大的<nobr oncontextmenu="return false" onmousemove="$cE.MoW()" id="clickeyekey1" onmouseover="$cE.s(event,1)" style="font-size: 11.5pt; color: #6600ff; line-height: 16pt; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick='$cE.c(event,1,"",1)' onmouseout="$cE.OuK()">项目</nobr>，下面有几个子项目，分别是</clk></span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">myfaces core, sandbox ,tabago,tomahawk</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">，（奇怪的名字，好难说，我简称它为</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">TOM</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">），还有一个新的</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">ADF Faces</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">（跟</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">oracle adf</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">有关，应该是兼容整合</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">adf</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">的功能吧）。</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">Tabago,tom</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">都是组件库，</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">tabago</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">比较好玩的是支持换肤，还有一些支持</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">ajax</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">的组件，</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">TOM</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">则是一个丰富的增强组件库，大概有三十个之多，例如</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">TREE</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">，</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">TAB</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">等等。</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">Sandbox</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">是测试用的。</span> </p>
<p style="margin: 0cm 5.25pt 8.05pt; text-indent: 15.75pt; line-height: 135%; text-align: left" align="left"><span style="font-size: 11.5pt; color: red; line-height: 135%; font-family: Arial">Oracle ADF</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">是</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">oracle</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">为</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">jsf</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">做的一个大型的组件库，以前是收费的，现在开源了，我没用过，不好说。</span> </p>
<p style="margin: 0cm 5.25pt 8.05pt; text-indent: 15.75pt; line-height: 135%; text-align: left" align="left"><span style="font-size: 11.5pt; color: red; line-height: 135%; font-family: Arial">Ajax4jsf</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">是为</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">jsf</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">提供</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">AJAX</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">支持的一个标签库，使用它提供的标签，就能在原有的</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">JSF</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">程序上轻易的加上</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">AJAX</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">的功能，而且不用写任何</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">Javascript</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">。</span> </p>
<p style="margin: 0cm 5.25pt 8.05pt; text-indent: 15.75pt; line-height: 135%; text-align: left" align="left"><span style="font-size: 11.5pt; color: red; line-height: 135%; font-family: Arial">Facelets</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">这个是很激动人心的一个框架，有了这个框架才把</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">JSF</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">的组件化发挥出来，通过模板的方式来组合成我们所需要的组件，而且可以不使用</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">&lt;h:input&gt;</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">这样的标签库，而用</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">&lt;input type=&#8221;text&#8221; jsfc=&#8221;h:input&#8221;&gt;</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">这样的方式来使用组件，这样就可以方便的使用</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">UI</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">可视化工具去开发我们的</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">WEB</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">程序。这个框架我会在以后的文章中详细的说，以及和</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: Arial">jsp2.0</span> <span style="font-size: 11.5pt; color: black; line-height: 135%; font-family: 宋体">的模板功能作对比。</span> <br />
--------------------------------------------------------------------------------<br />
&nbsp;&nbsp; JSF的session超时问题会在页面上抛出如下异常：<br />
javax.faces.application.ViewExpiredException: viewId:/pages/index.faces - View /pages/index.faces could not be restored.<br />
&nbsp;at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:185)<br />
&nbsp;at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)<br />
&nbsp;at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)<br />
&nbsp;at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)<br />
&nbsp;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)<br />
&nbsp;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br />
&nbsp;at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)<br />
&nbsp;at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)<br />
&nbsp;at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)<br />
&nbsp;at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)<br />
&nbsp;at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)<br />
&nbsp;at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)<br />
&nbsp;at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)<br />
&nbsp;at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)<br />
&nbsp;at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)<br />
&nbsp;at java.lang.Thread.run(Unknown Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;解决方案：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在web.xml中添加如下代码：<br />
&nbsp; &lt;error-page&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;exception-type&gt;javax.faces.application.ViewExpiredException&lt;/exception-type&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;location&gt;/pages/SessionRefire.jsp&lt;/location&gt;<br />
&nbsp; &lt;/error-page&gt;<br />
<br />
----------------------------------------------------<br />
注意：所有的JSF标签一定要包含在&lt;f:view&gt;&lt;/f:view&gt;这个节点中，不然会报一下问题：<br />
</p>
<pre>javax.servlet.ServletException: Component javax.faces.component.UIViewRoot@f1fad1 not expected type.  Expected: javax.faces.component.UIOutput.  Perhaps you're missing a tag?
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
</pre>
<p style="margin: 0cm 5.25pt 8.05pt; text-indent: 15.75pt; line-height: 135%; text-align: left" align="left"><br />
&nbsp;</p>
</span>
<img src ="http://www.blogjava.net/leixiangjian/aggbug/284215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-26 09:19 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/26/284215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate-配置</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/25/284113.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Thu, 25 Jun 2009 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/25/284113.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/284113.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/25/284113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/284113.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/284113.html</trackback:ping><description><![CDATA[&nbsp;Hibernate本身自带的连接池算法不成熟，并不适合用于产品系统或者性能测试。出于最佳性能和稳定性考虑你应该使用第三方连接池。<br />
比如使用：C3PO。<br />
C3PO是一个随Hibernate一同分发的开源JDBC连接池。
<img src ="http://www.blogjava.net/leixiangjian/aggbug/284113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-25 15:17 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/25/284113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载：使用HTML5构建下一代的Web Form</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/24/283863.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Wed, 24 Jun 2009 01:04:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/24/283863.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/283863.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/24/283863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/283863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/283863.html</trackback:ping><description><![CDATA[<h1>使用HTML5构建下一代的Web Form</h1>
<p class="info">作者 <strong><a class="editorlink" href="http://www.infoq.com/cn/bycategory.action?authorName=%E8%92%8B%E5%8D%9A">蒋博</a> </strong>发布于 2009年6月22日 上午4时52分 </p>
<dl class="tags2">
<dt class="community">社区</dt>
<dd><a id="1,390" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;" href="http://www.infoq.com/cn/architecture" name="architecture">Architecture</a>,</dd>
<dd><a id="739" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;" href="http://www.infoq.com/cn/java" name="java">Java</a></dd>
<dt class="topics">主题</dt>
<dd><a id="831" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;" href="http://www.infoq.com/cn/Programming" name="Programming">编程</a>,</dd>
<dd><a id="3,560" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;" href="http://www.infoq.com/cn/Language" name="Language">语言</a></dd>
<dt class="topics">标签</dt>
<dd><a id="1,269" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;" href="http://www.infoq.com/cn/w3c" name="w3c">W3C</a>,</dd>
<dd><a id="1,161" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;" href="http://www.infoq.com/cn/MarkupLanguages" name="MarkupLanguages">标识语言</a></dd></dl>
<p>HTML5 是由 WHATWG (Web Hypertext Application Technology Working Group) 发起的，最开始的名称叫做Web Application 1.0，而后这个标准吸纳了Web Forms 2.0的标准，并一同被W3C组织所采用，合并成为下一代的HTML5标准。</p>
<div class="vendor-content-box-float">
<h3>相关<span class="vendor">厂商</span>内容</h3>
<p class="entrypdf"><a href="http://www.infoq.com/cn/vendorcontent/show.action?vcr=603" target="_blank">Adobe开发者技术日，7月16日上海，免费报名！ </a></p>
</div>
<h2>前言</h2>
<p>HTML语言作为如今编程最为广泛的语言，具有易用、快捷、多浏览平台兼容等特点，但是随着时代的进步，HTML的标准却停滞不前，这一次还在不断开发中的HTML5标准的更新可以说给这门标记语言带来了新的生命力。本文将着重讨论HTML5中的Web Forms 2.0, 即表单的部分。</p>
<p>表单是网页中常见的控件(集)。小到网站注册登录，大到一个企业的数据管理系统，都基本上有表单的身影。表单之所以如此重要，主要是因为它担负大量的用户和网页后台数据更新交互的任务。Web开发人员，对于网页表单可以说又爱又恨，爱的是它方便的收集、组织数据的功能，恨的是它的功能很大程度上也就仅此而已。一些在最终网站用户看起来稀松平常的功能，比如说输入类型检查、表单校验、错误提示等等，开发人员无不需要花费大量精力利用 JavaScript和DOM编程来满足这些天然所需的功能点，而随着Ajax的流行，出现的一些JavaScript的工具库，比如Dojo, YUI等都提供了方便的JavaScript Widget或者API来减轻开发人员的负担。</p>
<h2>HTML5的表单新特性</h2>
<p>HTML5 Web Forms 2.0是对目前Web表单的全面提升，它在保持了简便易用的特性的同时，增加了许多内置的控件或者控件属性来满足用户的需求，并且同时减少了开发人员的编程。在我看来，HTML5 主要在以下几个方面对目前的Web表单做了改进：</p>
<ul>
    <li>新的控件类型
    <ul>
        <li>还在为类型检查犯愁吗，还在为那一长串看不太明白的检验输入的正则表达式而苦恼吗，HTML5提供的一系列新的控件将天然的具备类型检查的功能。比如说URL输入框，Email输入框等。<br />
        <pre>&lt;input type="url"&gt;&lt;/input&gt;<br />
        &lt;input type="email"&gt;&lt;/input&gt;
        </pre>
        </li>
        <li>当然还有非常重要的日期输入框，要知道使用JavaScript和CSS来&#8220;手工&#8221;制作一个日期输入框还是非常花功夫的，类似Dojo，YUI这样的类库也无不在这个widget上面大做文章。<br />
        <pre>&lt;input type="date"&gt;&lt;/input&gt;</pre>
        </li>
        <li>作为我痛苦记忆的一部分，我经常记得我们开发人员要为一个select下拉别表动态的添加非常多的选项,这些选项大多数都是来自数据库，比如说国家、省市列表等等。这个事情非常繁琐。HTML5将支持data属性，为select控件外联数据源！<br />
        <pre>&lt;select data="http://domain/getmyoptions"&gt;&lt;/select&gt;</pre>
        </li>
    </ul>
    </li>
    <li>改进的文件上传控件，你可以使用一个控件上传多个文件，自行规定上传文件的类型（accept），你甚至可以设定每个文件最大的大小（maxlength）。你看出它和一般操作系统提供的文件上传控件的区别了吗，反正我觉得基本一致了。在HTML5应用中，文件上传控件将变得非常强大和易用。</li>
    <li>重复（repeat）的模型，HTML5提供一套重复机制来帮助我们构建一些重复输入列表，其中包括一些诸如 add、remove、move-up，move-down的按钮类型，通过这一套重复的机制，开发人员可以非常方便的实现我们经常看到的编辑列表，这是一个很常见的模式，我们可以增加一个条目、删除某个条目、或者移动某个条目等等。</li>
    <li>内建的表单校验系统，HTML5为不同类型的输入控件各自提供了新的属性，来控制这些控件的输入行为，比如我们常见的必填项required属性，以及为数字类型控件提供的max、min等。而在你提交表单的时候，一旦校验错误，浏览器将不执行提交操作，而会显示相应的检验错误信息。
    <pre>&lt;input type="text" required&gt;&lt;/input&gt;<br />
    &lt;input type="number" min=10 &nbsp;max=100&gt;&lt;/input&gt;</pre>
    </li>
    <li>XML Submission，我们一般常见的是form的编码格式是application/x-www-form-urlencoded。开发人员都很清楚这种格式，数据送到服务器端，可以方便的存取。HTML5将提供一种新的数据格式：XML Submission，即application/x-www-form+xml。简单的举例说，服务器端将直接接收到XML形式的表单数据。<br />
    <pre>&lt;submission&gt;<br />
    &nbsp;&nbsp; &nbsp;&lt;field name="name" index="0"&gt;Peter&lt;/field&gt;<br />
    &nbsp;&nbsp; &nbsp;&lt;field name="password" index="0"&gt;password&lt;/field&gt;<br />
    &lt;/submission&gt;</pre>
    </li>
</ul>
<h2>实例分析</h2>
<p>我将利用HTML5新的表单系统, 做一个简单的用户注册的界面，包括用户名，密码，出生日期，保密问题等内容，代码如下：</p>
<pre>&lt;! doctype html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;style&gt;
p label {
width: 180px;
float: left;
text-align: right;
padding-right: 10px
}
table {
margin-left: 80px
}
table td {
border-bottom: 1px solid #CCCCCC
}
input.submit {
margin-left: 80px
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form action='/register' enctype="application/x-www-form+xml" method="post"&gt;
&lt;p&gt;
&lt;label for='name'&gt;ID(请使用Email注册)&lt;/label&gt;
&lt;input name='name' required type='email'&gt;&lt;/input&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;label for='password'&gt;密码&lt;/label&gt;
&lt;input name='password' required type='password'&gt;&lt;/input&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;label for='birthday'&gt;出生日期&lt;/label&gt;
&lt;input type='date' name='birthday' /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;label for='gender'&gt;国籍&lt;/label&gt;
&lt;select name='country' data='countries.xml'&gt;&lt;/select&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;label for='photo'&gt;个性头像&lt;/label&gt;
&lt;input type='file' name='photo' accept='image/*' /&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;td&gt;&lt;button type="add" template="questionId"&gt;+&lt;/button&gt; 保密问题&lt;/td&gt;
&lt;td&gt;答案&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/thead&gt;
&lt;tr id="questionId" repeat="template" repeat-start="1" repeat-min="1" repeat-max="3"&gt;
&lt;td&gt;&lt;input type="text" name="questions[questionId].q"&gt;&lt;/td&gt;
&lt;td&gt;&lt;input type="text" name="questions[questionId].a"&gt;&lt;/td&gt;
&lt;td&gt;&lt;button type="remove"&gt;删除&lt;/button&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;input type='submit' value='send' class='submit' /&gt;
&lt;/p&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>由于目前HTML5标准仍然在开发中，不同的浏览器对HTML5特性的支持都相当有限。其中Opera在表单方面支持得比较好，本实例在Opera9上运行一切正常，效果图如下：</p>
<p class="image-wide"><img alt="" src="http://www.infoq.com/resource/articles/html5-web-form/zh/resources/image1.jpg" _href="img://image1.jpg" /></p>
<p>这个实例运用了一些HTML5的新的表单元素，比如email类型的输入框(ID)，日期类型的输入框(出生日期)。并且使用了重复模型来引导用户填写保密问题，而在个性头像的上传中，通过限制文件类型，方便用户选择图片进行合乎规范的内容上传。而用户选择国籍的下拉选择输入框中，采用的是外联数据源的形式，外联数据源使用coutries.xml，内容如下：</p>
<pre>&lt;select xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;option&gt;China&lt;/option&gt;
&lt;option&gt;Japan&lt;/option&gt;
&lt;option&gt;Korea&lt;/option&gt;
&lt;/select&gt;
</pre>
<p>并且form的enctype是application/x-www-form+xml，也就是HTML5的XML提交。所以一旦form校验通过，form的内容将会以XML的形式提交。你还会发现，在ID输入框如果没有值，或者输入了非email类型的字符串时，一旦试图提交表单，就会有提示错误的信息出现，而这都是浏览器内置的。</p>
<h2>结语</h2>
<p>HTML5对表单控件的更新，无疑是很振奋人心的。本文描述了一部分表单的新特性，还有一部分新特性同样很令人期待。相信随着标准的深入开发以及浏览器对HTML5支持程度的进一步提升，设计一个简单易用的表单的工作，将变得非常轻松。</p>
<h2>参考资料</h2>
<ol>
    <li>W3C HTML5 规范：&nbsp;<a href="http://www.w3.org/TR/html5/">http://www.w3.org/TR/html5/</a></li>
    <li>HTML5 与 HTML4的差异：<a href="http://www.w3.org/TR/html5-diff/">http://www.w3.org/TR/html5-diff/</a></li>
    <li>Opera dev: Improve your forms with HTML5：&nbsp;<a href="http://dev.opera.com/articles/view/improve-your-forms-using-html5/">http://dev.opera.com/articles/view/improve-your-forms-using-html5/</a></li>
    <li>Comparison of layout engines（HTML5）：<br />
    <a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28HTML_5%29">http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(HTML_5)</a></li>
</ol>
<h2>关于作者</h2>
<p>蒋博，主要从事Web前端技术的开发工作，在Web开发与性能分析以及敏捷实践等领域有较丰富的经验。对HTML5的发展以及各种 JavaScript类库有比较浓厚的兴趣，经常关注社交型的网站发展情况，平常喜欢听音乐，看一些历史类书籍。（本文仅代表个人观点，与公司立场无关。）</p>
<hr />
<p>给InfoQ中文站投稿或者参与内容翻译工作，请邮件至<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#100;&#105;&#116;&#111;&#114;&#115;&#64;&#99;&#110;&#46;&#105;&#110;&#102;&#111;&#113;&#46;&#99;&#111;&#109;">editors@cn.infoq.com</a>。也欢迎大家加入到<a href="http://groups.google.com/group/InfoQChina" target="_blank">InfoQ中文站用户讨论组</a>中与我们的编辑和其他读者朋友交流。</p>
<img src ="http://www.blogjava.net/leixiangjian/aggbug/283863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-24 09:04 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/24/283863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringGuide-读完的感觉</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283833.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Tue, 23 Jun 2009 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283833.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/283833.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/283833.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/283833.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 看完这本书给我的感觉，比较实在，基本上对spring有个初步的认识。<br />
&nbsp;&nbsp;&nbsp; 接下来我会接着看&lt;Spring参考手册&gt;，这样更好的理解Spring这个轻量级的框架。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 从纵向第三方框架集成方面讲<br />
&nbsp;&nbsp;&nbsp; 1、&nbsp;web层的集成<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spring对于web层集成外部框架有：Struts、webwork、Tapestry、JSF、Dinamica、VRaptor<br />
&nbsp;&nbsp;&nbsp; 2、DAO层的集成<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spring对于DAO层集成外部框架有：Hibernate、Ibatis、JDO<br />
<br />
&nbsp;&nbsp;&nbsp; 事务处理上，Spring可以利用不同的事务管理对象进行事务上的配置，根据不同的数据层环境而定。
<img src ="http://www.blogjava.net/leixiangjian/aggbug/283833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-23 21:44 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/23/283833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringGuide-事务</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283812.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Tue, 23 Jun 2009 12:08:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283812.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/283812.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/283812.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/283812.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;Spring的容器事务主要是基于动态AOP来处理。<br />
&nbsp;下面这段xml配置片断展示了Spring中的事务设定方式：<br />
&lt;beans&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="dataSource"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.apache.commons.dbcp.BasicDataSource"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destroy-method="close"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="driverClassName"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;org.gjt.mm.mysql.Driver&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="url"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;jdbc:mysql://localhost/sample&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="username"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;user&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;mypass&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;&lt;bean id="transactionManager"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dataSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="dataSource" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="userDAO" class="net.xiaxin.dao.UserDAO"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="dataSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="dataSource" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean id="userDAOProxy"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="transactionManager" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="target"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="userDAO" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="transactionAttributes"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="insert*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="get*"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROPAGATION_REQUIRED,readOnly<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&lt;/beans&gt; <br />
<br />
------------------------------------------------------------------------------------------------------------------------------------------------------------------<br />
EJB事务处理与Spring事务处理的区别，关键两点：<br />
1、Spring可以将任意Java Class 纳入事务管理这里的UserDAO只是我们编写的一个普通Java Class，其中包含了一些基本的数据应用逻辑。通过Spring，我们即可简单的实现事务的可配置化。也就是说，我们可以随意为某个类的某个方法指定事务管理机制。与之对比，如果使用EJB容器提供的事务管理功能，我们不得不按照EJB规范编将UserDAO 进行改造，将其转换为一个标准的EJB。<br />
2、Spring事务管理并不依赖特定的事务资源。EJB 容器必须依赖于JTA 提供事务支持。而Spring 的事务管理则支持JDBC、JTA 等多种事务资源。这为我们提供了更多的选择，从而也使得我们的系统部署更加灵活。<br />
<img src ="http://www.blogjava.net/leixiangjian/aggbug/283812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-23 20:08 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/23/283812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring-Guide--模板技术</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283726.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Tue, 23 Jun 2009 05:13:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283726.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/283726.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/283726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/283726.html</trackback:ping><description><![CDATA[&nbsp; 模板技术相对传统JSP技术有以下三个主要的优势：<br />
&nbsp;&nbsp;&nbsp;1、表现逻辑与业务逻辑的分离<br />
&nbsp;&nbsp; 2、将UI和程序分离，即将美工人员和程序员分离<br />
&nbsp;&nbsp; 3、如果需要，模板引擎可以脱离web容器单独运行，为系统可能的移植需求提供了更多的弹性空间<br />
<br />
&nbsp;&nbsp; 目前spring支持以下模板技术：&nbsp;<br />
&nbsp;&nbsp; 1、XSLT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XSLT的性能相对较低，因为在XSLT中，每个节点都是一个java对象，大量对象的存储对内存占用极大，同时大量对象的频繁创建和销毁也对JVM垃圾收集产生了较大的负面影响。<br />
&nbsp;&nbsp; 2、Velocity<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前最为成熟的模板技术，它是apache jakarta项目中的一个子项目。<br />
&nbsp;&nbsp;&nbsp;3、FreeMarker<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于web开发而言，FreeMarker在生产效率和学习成本上更具优势，而velocity的相对优势在于更多第三方工具的支持和更广泛的开发和用户团体。<br />
&nbsp;&nbsp; 
 <img src ="http://www.blogjava.net/leixiangjian/aggbug/283726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-23 13:13 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/23/283726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring-Guide 关于web容器的加载</title><link>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283710.html</link><dc:creator>小兄弟（Robbins）</dc:creator><author>小兄弟（Robbins）</author><pubDate>Tue, 23 Jun 2009 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283710.html</guid><wfw:comment>http://www.blogjava.net/leixiangjian/comments/283710.html</wfw:comment><comments>http://www.blogjava.net/leixiangjian/archive/2009/06/23/283710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leixiangjian/comments/commentRss/283710.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leixiangjian/services/trackbacks/283710.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 对于web应用，spring提供了可配置的ApplicatonContext加载机制；加载器目前有两种加载选择：ContextLoaderListener和ContextLoaderServlet<br />
<br />
&nbsp;&nbsp;&nbsp; 加载器目前有两种选择：ContextLoaderListener和ContextLoaderServlet。这两者在功能上完全等同，只是一个是基于Servlet2.3版本中新引入的Listener接口实现，而另一个基于Servlet接口实现。开发中可根据目标Web容器的实际情况进行选择。<br />
<br />
在web.xml中增加：<br />
&lt;listener&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.springframework.web.context.ContextLoaderListener<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/listener-class&gt;<br />
&lt;/listener&gt;<br />
-----------------------------------------------------------------<br />
&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;context&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
通过以上配置，Web容器会自动加载/WEB-INF/applicationContext.xml初始化 <br />
<br />
如果需要指定配置文件位置，可通过context-param加以指定<br />
&lt;context-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/myApplicationContext.xml&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
<br />
<img src ="http://www.blogjava.net/leixiangjian/aggbug/283710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leixiangjian/" target="_blank">小兄弟（Robbins）</a> 2009-06-23 11:32 <a href="http://www.blogjava.net/leixiangjian/archive/2009/06/23/283710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>