﻿<?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-六月天-随笔分类-j2ee开发</title><link>http://www.blogjava.net/hiswing/category/13507.html</link><description>关注java相关技术
</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 06:12:24 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 06:12:24 GMT</pubDate><ttl>60</ttl><item><title>领域服务与应用服务的职责</title><link>http://www.blogjava.net/hiswing/archive/2006/10/11/74476.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Wed, 11 Oct 2006 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/10/11/74476.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/74476.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/10/11/74476.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/74476.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/74476.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 　　我们知道，在领域设计中，划分为三种模型，分别为：实体(Entity)、值对象(Value Object)、和服务(Service)。其中Service与我们传统设计中的Service有什么不同呢？&nbsp;&nbsp;<a href='http://www.blogjava.net/hiswing/archive/2006/10/11/74476.html'>阅读全文</a><img src ="http://www.blogjava.net/hiswing/aggbug/74476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-10-11 10:22 <a href="http://www.blogjava.net/hiswing/archive/2006/10/11/74476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts的陷阱－－死循环</title><link>http://www.blogjava.net/hiswing/archive/2006/10/08/73689.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Sun, 08 Oct 2006 01:26:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/10/08/73689.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/73689.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/10/08/73689.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/73689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/73689.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 　　如今，struts已经不是热问的话题了。但凡是j2ee开发者，或多或少都使用过struts来开发应用。虽然struts已经有些年头了，但在开发过程中，由于操作不当或其它事务的影响还是会出现许多问题。本文的题目也许不是很恰当，也许应该叫做“struts中一个不可忽视的问题”更加合适。&nbsp;&nbsp;<a href='http://www.blogjava.net/hiswing/archive/2006/10/08/73689.html'>阅读全文</a><img src ="http://www.blogjava.net/hiswing/aggbug/73689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-10-08 09:26 <a href="http://www.blogjava.net/hiswing/archive/2006/10/08/73689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jsp文件中也用velocity语句</title><link>http://www.blogjava.net/hiswing/archive/2006/09/21/71210.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Thu, 21 Sep 2006 14:48:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/09/21/71210.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/71210.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/09/21/71210.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/71210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/71210.html</trackback:ping><description><![CDATA[　　velocity强大的模板功能和简洁的语法可以帮助我们更加快速地开发web应用。我们知道，velocity默认解析的文件为*.vm文件。那么在jsp文件中是否也可以使用velocity语法呢？答案是当然可以，不过需要两样东西来帮忙--即<a href="http://viscomp.utdallas.edu/FACADE/tutorials/jspguide/vel/veltag.tld" target="_blank">veltag.tld</a>和<a href="http://viscomp.utdallas.edu/FACADE/tutorials/jspguide/vel/veltag-0.01-dev.jar" target="_blank">veltag-0.01-dev.jar</a>。<br /><br />　　veltag.tld是标签文件，是我们将要在jsp中引入用来解标记velocity语句的。将其拷贝至WEB-INF下，并在web.xml中加入如下代码：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taglib</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taglib-uri</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">veltag</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">taglib-uri</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">taglib-location</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/WEB-INF/veltag.tld</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">taglib-location</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">taglib</span><span style="COLOR: #0000ff">&gt;</span></div><br />　　veltag-0.0.1-dev.jar是必需的运行包，将其拷贝至WEB-INF\lib目录下。以下是jsp文件：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_2_49_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_49_Open_Text.style.display='none'; Codehighlighter1_2_49_Closed_Image.style.display='inline'; Codehighlighter1_2_49_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_2_49_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2_49_Closed_Text.style.display='none'; Codehighlighter1_2_49_Open_Image.style.display='inline'; Codehighlighter1_2_49_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span><span id="Codehighlighter1_2_49_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_2_49_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@ taglib uri</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">/WEB-INF/veltag.tld</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> prefix</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">vel</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> Velocity! </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">jsp:useBean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mybean"</span><span style="COLOR: #ff0000">  class</span><span style="COLOR: #0000ff">="GeirBean"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">vel:velocity </span><span style="COLOR: #ff0000">strictaccess</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         #set($mybean = $scopetool.getPageScope("mybean"))<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         #if(true)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            this is true!<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         #end<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         $mybean.string<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />         </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        #foreach($item in $mybean.array) <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            $item </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        #end<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">vel:velocity</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />　　是不是很简单呢？<img src ="http://www.blogjava.net/hiswing/aggbug/71210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-09-21 22:48 <a href="http://www.blogjava.net/hiswing/archive/2006/09/21/71210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts结合Velocity开发web应用</title><link>http://www.blogjava.net/hiswing/archive/2006/09/07/68177.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Thu, 07 Sep 2006 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/09/07/68177.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/68177.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/09/07/68177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/68177.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/68177.html</trackback:ping><description><![CDATA[
		<p>　　我想大家对Struts都应该不会陌生，过去的几年里，Struts占去了MVC模式开发Web应用的大半江山，关于Struts的话题网络上有太多太多了。Velocity是近一两年才火起来的，它是一个基于java的模板引擎（template engine）。它允许任何人仅仅简单的使用模板语言（template language）来引用由java代码定义的对象。有兴趣的朋友可以参照<a href="http://www.junesky.org/blog/article.asp?id=14">http://www.junesky.org/blog/article.asp?id=14</a>，也可以在官网<a href="http://jakarta.apache.org/velocity/index.html">http://jakarta.apache.org/velocity/index.html</a> 上了解更多Velocity的最新信息。</p>
		<p>　　既然Struts与Velocity都是如此出色，并且它们关注的方面也不相同，何不将其优点集中起来进行开发呢？关于Struts和Velocity的配置方法请参照<a href="http://www-128.ibm.com/developerworks/cn/java/j-sr1.html">http://www-128.ibm.com/developerworks/cn/java/j-sr1.html</a> 这上面已经说的非常详细了，这里我们就不在说明了。请注意，以下步骤都是建立在环境都已配置成功的基础之上的。所以，在进行以下步骤之前，请确保你的环境已经配置成功。</p>
		<p>　　根据上面的文章配置好环境后，就可以进行开发了。不过这里需要提醒各位一点，在配置toolbox.xml的时候，记得要先在这里<a href="http://jakarta.apache.org/velocity/index.html">http://jakarta.apache.org/velocity/index.html</a> 下载velocityTools，并将其拷贝至lib目录下后，才可以启动web容器，否则报错。这是因为在toolbox.xml配置了velocitytools中的类库。</p>
		<p>　　在开始我们的例子前需要说明一下，这篇文章并不打算讲解如何使用struts和velocity，而是将目标锁定在struts和velocity的协同工作上面。</p>
		<p>一切准备就绪后，就开始我们的第一个例子吧。</p>
		<p>1、建立一个test.vm文件，和jsp放在同一目录中。</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">
				<img id="Codehighlighter1_2_28_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_28_Open_Text.style.display='none'; Codehighlighter1_2_28_Closed_Image.style.display='inline'; Codehighlighter1_2_28_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_2_28_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2_28_Closed_Text.style.display='none'; Codehighlighter1_2_28_Open_Image.style.display='inline'; Codehighlighter1_2_28_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span id="Codehighlighter1_2_28_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_2_28_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@ page pageEncoding</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">utf-8</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_34_73_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_73_Open_Text.style.display='none'; Codehighlighter1_34_73_Closed_Image.style.display='inline'; Codehighlighter1_34_73_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_34_73_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_34_73_Closed_Text.style.display='none'; Codehighlighter1_34_73_Open_Image.style.display='inline'; Codehighlighter1_34_73_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span id="Codehighlighter1_34_73_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_34_73_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />request.setCharacterEncoding(</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">utf-8</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">meta </span>
				<span style="COLOR: #ff0000">http-equiv</span>
				<span style="COLOR: #0000ff">="Content-Type"</span>
				<span style="COLOR: #ff0000"> content</span>
				<span style="COLOR: #0000ff">="text/html; charset=utf-8"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">struts velocity 六月天</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />${test.getTest()} //注意这里使用了velocity代码，从test对象中取数据。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>2、新建Form Bean，使它拥有一个属性test。</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">
				<img id="Codehighlighter1_41_198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_198_Open_Text.style.display='none'; Codehighlighter1_41_198_Closed_Image.style.display='inline'; Codehighlighter1_41_198_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_41_198_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_198_Closed_Text.style.display='none'; Codehighlighter1_41_198_Open_Image.style.display='inline'; Codehighlighter1_41_198_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> TestForm </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> ActionForm </span>
				<span id="Codehighlighter1_41_198_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_41_198_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> String test;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_98_125_Open_Image" onclick="this.style.display='none'; Codehighlighter1_98_125_Open_Text.style.display='none'; Codehighlighter1_98_125_Closed_Image.style.display='inline'; Codehighlighter1_98_125_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_98_125_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_98_125_Closed_Text.style.display='none'; Codehighlighter1_98_125_Open_Image.style.display='inline'; Codehighlighter1_98_125_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> String getTest() </span>
						<span id="Codehighlighter1_98_125_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_98_125_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> test;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_164_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_196_Open_Text.style.display='none'; Codehighlighter1_164_196_Closed_Image.style.display='inline'; Codehighlighter1_164_196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_164_196_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_196_Closed_Text.style.display='none'; Codehighlighter1_164_196_Open_Image.style.display='inline'; Codehighlighter1_164_196_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> setTest(String test) </span>
						<span id="Codehighlighter1_164_196_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_164_196_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.test </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> test;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>3、新建一个TestAction。</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">
				<img id="Codehighlighter1_39_449_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_449_Open_Text.style.display='none'; Codehighlighter1_39_449_Closed_Image.style.display='inline'; Codehighlighter1_39_449_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_39_449_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_39_449_Closed_Text.style.display='none'; Codehighlighter1_39_449_Open_Image.style.display='inline'; Codehighlighter1_39_449_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> TestAction </span>
				<span style="COLOR: #0000ff">extends</span>
				<span style="COLOR: #000000"> Action </span>
				<span id="Codehighlighter1_39_449_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_39_449_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> ActionForward execute(ActionMapping mapping, ActionForm form,<br /><img id="Codehighlighter1_164_447_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_447_Open_Text.style.display='none'; Codehighlighter1_164_447_Closed_Image.style.display='inline'; Codehighlighter1_164_447_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_164_447_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_447_Closed_Text.style.display='none'; Codehighlighter1_164_447_Open_Image.style.display='inline'; Codehighlighter1_164_447_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />HttpServletRequest req, HttpServletResponse res) </span>
						<span id="Codehighlighter1_164_447_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_164_447_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        TestForm cform </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (TestForm)form;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        cform.setTest(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">hello struts and velocity</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">注意这里，将form置入request中，它的key是test<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">这个key也就是vm页面中的test对象的引用${test.getTest()}</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        req.setAttribute(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">test</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">, cform);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> mapping.findForward(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">success</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>
				<br />4、配置struts-config.xml文件</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">form-beans</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">form-bean </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="TestForm"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="org.junesky.form.TestForm"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">form-beans</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">action<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="TestForm"</span>
				<span style="COLOR: #ff0000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />input</span>
				<span style="COLOR: #0000ff">="/error.jsp"</span>
				<span style="COLOR: #ff0000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />scope</span>
				<span style="COLOR: #0000ff">="request"</span>
				<span style="COLOR: #ff0000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />path</span>
				<span style="COLOR: #0000ff">="/test"</span>
				<span style="COLOR: #ff0000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />validate</span>
				<span style="COLOR: #0000ff">="false"</span>
				<span style="COLOR: #ff0000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />type</span>
				<span style="COLOR: #0000ff">="org.junesky.action.TestAction"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">forward <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="success"</span>
				<span style="COLOR: #ff0000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />path</span>
				<span style="COLOR: #0000ff">="/test.vm"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">action</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>检查没有错误后，运行，就会在页面上显示出hello struts and velocity。</p>
		<p>　　关于struts和velocity的配置是很容易理解的，最令初学者头痛的是，velocity是如何取到数据的？我们在单独使用velocity进行开发时，需要初始化，并为其设置想要返回的页面。如下：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">VelocityEngine ve </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> VelocityEngine();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ve.init();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Template t </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ve.getTemplate( </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hellosite.vm</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> );</span>
		</div>
		<p>而当与struts一同进行开发时，这一步就可以省去了，并且我们不必在为context中赋值：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">VelocityContext context </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> VelocityContext();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />context.put(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">test</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hello struts and velocity </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);</span>
		</div>
		<p>我们只需在Struts的Action层中将值置入request或session中即能达到相同的效果。</p>
<img src ="http://www.blogjava.net/hiswing/aggbug/68177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-09-07 09:32 <a href="http://www.blogjava.net/hiswing/archive/2006/09/07/68177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>URLClassLoader加载class到当前线程类加载器</title><link>http://www.blogjava.net/hiswing/archive/2006/08/25/65764.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Fri, 25 Aug 2006 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/25/65764.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/65764.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/25/65764.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/65764.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/65764.html</trackback:ping><description><![CDATA[
		<p>　　我们知道，Java利用ClassLoader将类载入内存，并且在同一应用中，可以有很多个ClassLoader，通过委派机制，把装载的任务传递给上级的装载器的，依次类推，直到启动类装载器（没有上级类装载器）。如果启动类装载器能够装载这个类，那么它会首先装载。如果不能，则往下传递。当父类为null时，JVM内置的类(称为:bootstrap class loader)就会充当父类。想想眼下的越来越多用XML文件做配置文件或者是描述符、部署符。其实这些通过XML文档描述的配置信息最终都要变成Java类，基实都是通过ClassLoader来完成的。URLClassLoader是ClassLoader的子类，它用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。也就是说，通过URLClassLoader就可以加载指定jar中的class到内存中。</p>
		<p>下面来看一个例子，在该例子中，我们要完成的工作是利用URLClassLoader加载jar并运行其中的类的某个方法。</p>
		<p>首先我们定义一个接口，使所有继承它的类都必须实现action方法，如下：</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">
				<img id="Codehighlighter1_33_63_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_63_Open_Text.style.display='none'; Codehighlighter1_33_63_Closed_Image.style.display='inline'; Codehighlighter1_33_63_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_33_63_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_33_63_Closed_Text.style.display='none'; Codehighlighter1_33_63_Open_Image.style.display='inline'; Codehighlighter1_33_63_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">interface</span>
				<span style="COLOR: #000000"> ActionInterface </span>
				<span id="Codehighlighter1_33_63_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_33_63_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> String action();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<p>完成后将其打包为testInterface.jar文件。</p>
		<p>接下来新建一工程，为了编译通过，引入之前打好的testInterface.jar包。并创建TestAction类，使它实现ActionInterface接口。如下：</p>
		<p>
		</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">
				<img id="Codehighlighter1_51_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_135_Open_Text.style.display='none'; Codehighlighter1_51_135_Closed_Image.style.display='inline'; Codehighlighter1_51_135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_51_135_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_51_135_Closed_Text.style.display='none'; Codehighlighter1_51_135_Open_Image.style.display='inline'; Codehighlighter1_51_135_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> TestAction </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> ActionInterface </span>
				<span id="Codehighlighter1_51_135_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_51_135_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_80_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_80_133_Open_Text.style.display='none'; Codehighlighter1_80_133_Closed_Image.style.display='inline'; Codehighlighter1_80_133_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_80_133_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_80_133_Closed_Text.style.display='none'; Codehighlighter1_80_133_Open_Image.style.display='inline'; Codehighlighter1_80_133_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> String action() </span>
						<span id="Codehighlighter1_80_133_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_80_133_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">com.mxjava.TestAction.action</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>完成后将其打包为test.jar，放在c盘根目录下。下面要做的就是利用URLClassLoader加载并运行TestAction的action方法，并将返回的值打印在控制台上。</p>
		<p>新建一工程，引入testInterface.jar包。并创建一可执行类（main方法），在其中加入如下代码：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">URL url </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> URL(“file:C:</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">test.jar”);<br /><img id="Codehighlighter1_99_105_Open_Image" onclick="this.style.display='none'; Codehighlighter1_99_105_Open_Text.style.display='none'; Codehighlighter1_99_105_Closed_Image.style.display='inline'; Codehighlighter1_99_105_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_99_105_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_99_105_Closed_Text.style.display='none'; Codehighlighter1_99_105_Open_Image.style.display='inline'; Codehighlighter1_99_105_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />URLClassLoader myClassLoader </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> URLClassLoader(</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> URL[] </span>
				<span id="Codehighlighter1_99_105_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_99_105_Open_Text">
						<span style="COLOR: #000000">{ url }</span>
				</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Class myClass </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> myClassLoader.loadClass(“com.mxjava.TestAction”);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ActionInterface action </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> (ActionInterface)myClass.newInstance();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />System.out.println(action.action());</span>
		</div>
		<p>　　在上面的例子中，首先利用URLClassLoader加载了C:\test.jar包，将其中的com.mxjava.TestAction类载入内存，将其强制转型为testInterface包中的ActionInterface类型，最后调用其action方法，并打印到控制台中。</p>
		<p>　　执行程序后，在控制台上如期打印出我们想要的内容。但是，事情并没有那么简单，当我们将该代码移动web应用中时，就会抛出异常。原来，Java为我们提供了三种可选择的ClassLoader：<br />1. 系统类加载器或叫作应用类加载器 (system classloader or application classloader)<br />2. 当前类加载器<br />3. 当前线程类加载器</p>
		<p>　　在上例中我们使用javac命令来运行该程序，这时候使用的是系统类加载器 (system classloader)。这个类加载器处理 -classpath下的类加载工作，可以通过ClassLoader.getSystemClassLoader()方法调用。 ClassLoader 下所有的 getSystemXXX()的静态方法都是通过这个方法定义的。在代码中，应该尽量少地调用这个方法，以其它的类加载器作为代理。否则代码将只能工作在简单的命令行应用中。当在web应用中时，服务器也是利用ClassLoader来加载class的，由于ClassLoader的不同，所以在强制转型时JVM认定不是同一类型。（在JAVA中，一个类用其完全匹配类名(fully qualified class name)作为标识，这里指的完全匹配类名包括包名和类名。但在JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识。因此，如果一个名为Pg的包中，有一个名为Cl的类，被类加载器KlassLoader的一个实例kl1加载，Cl的实例，即C1.class在JVM中表示为(Cl, Pg, kl1)。这意味着两个类加载器的实例(Cl, Pg, kl1) 和 (Cl, Pg, kl2)是不同的，被它们所加载的类也因此完全不同，互不兼容的。）为了能够使程序正确运行，我们首要解决的问题就是，如何将URLClassLoader加载的类，同当前ClassLoader保持在同一类加载器中。解决方法很简单，利用java提供的第三种ClassLoader—当前线程类加载器即可。jdk api文档就会发现，URLClassLoader提供了三种构造方式：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">使用默认的委托父 ClassLoader 为指定的 URL 构造一个新 URLClassLoader。 </span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">URLClassLoader(URL[] urls) <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">为给定的 URL 构造新 URLClassLoader。 </span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">URLClassLoader(URL[] urls, ClassLoader parent) <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">为指定的 URL、父类加载器和 URLStreamHandlerFactory 创建新 URLClassLoader。</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">URLClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory) </span>
		</div>
		<p>接下来要做的就是，在构造URLClassLoader时，将当前线程类加载器置入即可。如下：</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">
				<img id="Codehighlighter1_60_66_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_66_Open_Text.style.display='none'; Codehighlighter1_60_66_Closed_Image.style.display='inline'; Codehighlighter1_60_66_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_60_66_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_66_Closed_Text.style.display='none'; Codehighlighter1_60_66_Open_Image.style.display='inline'; Codehighlighter1_60_66_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span style="COLOR: #000000">URLClassLoader myClassLoader </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> URLClassLoader(</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> URL[] </span>
				<span id="Codehighlighter1_60_66_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_60_66_Open_Text">
						<span style="COLOR: #000000">{ url }</span>
				</span>
				<span style="COLOR: #000000">, Thread.currentThread().getContextClassLoader());</span>
		</div>
		<p>
				<strong>总结：<br />　　</strong>Java是利用ClassLoader来加载类到内存的，ClassLoader本身是用java语言写的，所以我们可以扩展自己的ClassLoader。利用URLClassLoader可以加载指定jar包中的类到内存。在命行上利用URLClassLoader加载jar时，是使用系统类加载器来加载class的，所以在web环境下，就会出错。这是因为JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识的。我们只要利用URLClassLoader的第二种构造方法并传入当前线程类加载器即可解决。<br /><br /><em>参考：<br /></em><a href="/sharajava/archive/2006/07/25/59946.html"><em>http://www.blogjava.net/sharajava/archive/2006/07/25/59946.html</em></a><br /><a href="http://kb.csdn.net/java/Articles/200510/a1843d60-05b1-456f-9f72-811cb45ea4ae.html"><em>http://kb.csdn.net/java/Articles/200510/a1843d60-05b1-456f-9f72-811cb45ea4ae.html</em></a><br /></p>
<img src ="http://www.blogjava.net/hiswing/aggbug/65764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-25 13:30 <a href="http://www.blogjava.net/hiswing/archive/2006/08/25/65764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Velocity中使用Struts的国际化文件</title><link>http://www.blogjava.net/hiswing/archive/2006/08/21/64746.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Mon, 21 Aug 2006 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/21/64746.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/64746.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/21/64746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/64746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/64746.html</trackback:ping><description><![CDATA[　　当利用Velocity和Struts一同开发web应用时，可能会遇到这样的问题，即.vm文件中无法使用Struts的标签。虽然Velocity的模板引擎以及它强大的语句可以使我们毫不犹豫地抛弃Struts的标签，但有时候，我们仍然需要在.vm文件中引用Struts的国际化文件ApplicationResources.properties，能否做到呢？答案是肯定的。替代的办法是使用toolbox.xml（关于toolbox.xml的配置请参照<a href="http://www.junesky.org/blog/article.asp?id=144" target="_blank" tip=""><font color="#002c99">http://www.junesky.org/blog/article.asp?id=144</font></a>），以下是一个toobox.xml文件：<br /><div class="UBBPanel"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">toolbox</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">link</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">request</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       org.apache.velocity.tools.struts.StrutsLinkTool<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">msg</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">request</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       org.apache.velocity.tools.struts.MessageTool<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">actionMsg</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">request</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       org.apache.velocity.tools.struts.ActionMessagesTool<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">errors</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">request</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       org.apache.velocity.tools.struts.ErrorsTool<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">form</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">request</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       org.apache.velocity.tools.struts.FormTool<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">tiles</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">request</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       org.apache.velocity.tools.struts.TilesTool<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">validator</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">key</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">request</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">scope</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       org.apache.velocity.tools.struts.ValidatorTool<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tool</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">toolbox</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />StrutsLinkTool：针对 Struts 的 LinkTool 专用版本，提供了 setAction() 和 setForward() 访问预先配置的活动映射。<br />MessageTool：提供对 Struts 国际化支持的访问，尤为特别的是依赖于语言的消息资源。<br />ErrorsTool：处理 Struts 错误消息，包括对国际化的支持。<br />FormTool：访问 Struts 的表单 beans。<br />TilesTool：提供对 Struts 1.1 Tiles 扩展支持的访问。<br />ValidatorTool：提供对 Struts 1.1 Validator 扩展的访问，生成代码验证表单输入字段。<br /><br />现在，我们有一个编译好了的文件：ApplicationResources_zh_CN.properties。它的内容如下：<br />name=六月天<br /><br />在.vm文件中，就可以这样写：<br />$!{msg.get(“name”)}<br /><br />更多内容请参照：<a href="http://www-128.ibm.com/developerworks/cn/java/j-velocity/" target="_blank" tip=""><font color="#002c99">http://www-128.ibm.com/developerworks/cn/java/j-velocity/</font></a></div><img src ="http://www.blogjava.net/hiswing/aggbug/64746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-21 11:33 <a href="http://www.blogjava.net/hiswing/archive/2006/08/21/64746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring研究-4(译)</title><link>http://www.blogjava.net/hiswing/archive/2006/08/18/64425.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Fri, 18 Aug 2006 12:07:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/18/64425.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/64425.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/18/64425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/64425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/64425.html</trackback:ping><description><![CDATA[
		<strong>web.xml的配置<br /><br /></strong>　　在Servlet环境下，使用Spring framework的时候，为了初始化应用程序上下文，可以ContextLoaderListener来做到这一点，该类实现了ServletContextListener接口。将以下代码加入web.xml的filter-mapping和servlet之间。注意：如果记录位置不正确，启动时可以会出现错误。有关代码记录位置请参照web.xml的DTD。<br /><br />即使同struts或Tapestry等web框架一起使用，以下代码也不会有任何问题。<br /><div class="UBBPanel"><div class="UBBTitle"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">web-app</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">listener</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">listener-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">org.springframework.web.context.ContextLoaderListener</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">listener-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">listener</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">web-app</span><span style="COLOR: #0000ff">&gt;</span></div></div></div><br />　　根据以上配置，web容器在启动时会自动调用ContextLoaderListener的contextInitialized方法将其初始化并加载至WebApplicationContext中。同样地，当web容器关闭时，会自动调用ContextLoaderListener的contextDestroyed方法释放应用程序上下文中保持的逻辑状态并从WebApplicationContext中将其删除。<br /><br /><strong>Jar文件的配置<br /></strong><br />　　Spring Framework中包含以下jar文件。将其拷贝至工程的lib下。<br />• dists/spring.jar <br />• lib/aop-alliance/aopalliance.jar <br />• lib/jakarta-commons/commons-logging.jar <br />如果不使用Spring Framework的AOP的话，就不要拷贝aopalliance.jar。<br /><br /><strong>Bean配置文件<br /></strong><br />　　运行期间，Spring Framework把所有Bean的引用都保持在应用上下文中。它是在抽象类AbstractApplicationContext和继承了它的子类AbstractXmlApplicationContext和 StaticApplicationContext中定义的。不过，我们没有必要去研究这些类，因为在程序开发过程中，我们只需要使用ApplicationContext接口就足够了。<br /><br />在定义Bean的时候，除了可以在xml中定义之外，也可以在程序中直接进行定义。<br /><br />ContextLoaderListener默认是从/WEB-INF/applicationContext.xml中读取Bean的定义的。可以从下载的Spring Framework的例子中拷贝这个文件，当然，你也可以重新写一个。如果下载的是Spring Framework 1.0-m2的话，在samples/webapp-typical/war/WEB-INF中包含了以下三个文件。<br />• applicationContext-aop.xml <br />• applicationContext-hibernate.xml <br />• applicationContext-jdbc.xml <br />以上三个文件的意义各不相同，我们可以将其做为模板，加以修改。applicationContext-aop.xml是利用AOP对事务进行管理的例子。applicationContext-hibernate.xml是和orm工具hibernate结合使用的例子，applicationContext-jdbc.xml是在没有使用hibernate的情况下，直接使用jdbc的例子。并且里面包含着JNDI数据源的取得和DBCP数据源的取得的设定。<br /><br /><strong>为Bean配置文件任意取名<br /></strong><br />　　除了ApplicationContext.xml外，也可以为Bean配置文件取任意的名字，在web.xml中，加入以下代码。<br /><div class="UBBPanel"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">context-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">contextConfigLocation</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/WEB-INF/spring-beans.xml</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">context-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />若要定义多个Bean配置文件，可以用逗号将其分开，格式如下。<br /></div><div class="UBBPanel"><div class="UBBTitle">&lt;param-value&gt;/WEB-INF/spring-dao.xml,/WEB-INF/spring-logic.xml&lt;/param-value&gt;</div></div><br /><br />原文地址:<a href="http://wiki.bmedianode.com/Spring/?Servlet%B4%C4%B6%AD%A4%D8%A4%CE%C6%B3%C6%FE" target="_blank" tip=""><font color="#002c99">http://wiki.bmedianode.com/Spring/?Servlet%B4%C4%B6%AD%A4%D8%A4%CE%C6%B3%C6%FE</font></a><br /><img src ="http://www.blogjava.net/hiswing/aggbug/64425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-18 20:07 <a href="http://www.blogjava.net/hiswing/archive/2006/08/18/64425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring研究-3</title><link>http://www.blogjava.net/hiswing/archive/2006/08/16/64013.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Wed, 16 Aug 2006 14:59:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/16/64013.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/64013.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/16/64013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/64013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/64013.html</trackback:ping><description><![CDATA[　　我们知道对于J2EE应用程序的事务管理方式一般分为两种：依赖特定事务资源的事务处理(利用JDBC或JTA的commit，rollback，O/R Mapping工具的commit，rollback方法等)和依赖容器的参数化事务处理。Spring是容器，属于依赖容器的参数化事务处理。由于它基于Aop的设计思想，所以运用起来相对灵活，可以将任何一个Bean的方法纳入事务处理机制中。<br /><div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="transactionAttributes"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="update*"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">PROPAGATION_REQUIRED</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="query*"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">PROPAGATION_REQUIRED, readOnly</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span></div></div></div><br />　　通过以上配置，Spring会把bean中所有名称以update和query开始的方法纳入事务处理机制中。当update方法中有异常抛出时，Spring会自动将事务回滚，否则提交事务。和update方法的事务处理机制相比，query方法的事务处理机制有所不同。它是以只读事务处理机制进行处理（许多数据库连接池及JDBC驱动O/R Mapping框架都对其进行了优化）。<br /><br />　　Spring的事务处理机制具有较高的灵活性，可配置性，它不依赖任何特定的事务资源。 <img src ="http://www.blogjava.net/hiswing/aggbug/64013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-16 22:59 <a href="http://www.blogjava.net/hiswing/archive/2006/08/16/64013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring+Hibernate配置数据库链接池</title><link>http://www.blogjava.net/hiswing/archive/2006/08/15/63770.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Tue, 15 Aug 2006 13:29:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/15/63770.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/63770.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/15/63770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/63770.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/63770.html</trackback:ping><description><![CDATA[　　使用jsp+javabean结构时，可以使用应用服务器自带的数据库链接池。使用struts时，可以利用struts来配置链接池。当使用Spring+Hibernate时，许多人使用应该用服务器自带的链接池，也有使用proxypool、dbcp、c3p0等链接池的，今天我们就介绍一下使用c3p0来配置Spring+Hibernate的数据链接池。<br /><br />　　在applicationContext.xml中配置一个id为dataSource类型为com.mchange.v2.c3p0.ComboPooledDataSource的bean。为其建立一个driverClass属性和jdbcUrl的属性（这里使用的mysql，其它数据库选择对应的数据库驱动）。重要的是properties属性，将所有链接池信息配置在props中。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 数据源配置 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="dataSource"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="com.mchange.v2.c3p0.ComboPooledDataSource"</span><span style="COLOR: #ff0000"> destroy-method</span><span style="COLOR: #0000ff">="close"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="driverClass"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">org.gjt.mm.mysql.Driver</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="jdbcUrl"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">jdbc:mysql://localhost/tycho?useUnicode=true</span><span style="COLOR: #ff0000">&amp;amp;</span><span style="COLOR: #000000">characterEncoding=utf-8</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="properties"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="hibernate.hbm2ddl.auto"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">update</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="c3p0.minPoolSize"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="hc3p0.maxPoolSize"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="hc3p0.timeout"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">60</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="c3p0.max_statement"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">50</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="c3p0.testConnectionOnCheckout"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">true</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="hibernate.c3p0.testConnectionOnCheckout"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">false</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="user"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">root</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="password"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">root</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span></div><br />　　接下来配置sessionFactory。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 配置sessionFactory </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="sessionFactory"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="org.springframework.orm.hibernate3.LocalSessionFactoryBean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="dataSource"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ref </span><span style="COLOR: #ff0000">local</span><span style="COLOR: #0000ff">="dataSource"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="mappingResources"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 8</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />          </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">com/mxjava/tycho/pojo/UserInfo.hbm.xml</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&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" />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&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" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="hibernateProperties"</span><span style="COLOR: #0000ff">&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" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&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" />          </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="hibernate.dialect"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">org.hibernate.dialect.MySQLDialect</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&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" />          </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="hibernate.show_sql"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">true</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&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" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&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" />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&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" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span></div><br />　　按照以上配置后，启动应用服务器，在控制台和log中就可以看到打印出的启动数据库链接池的信息。<br /><br />信息: Using DataSource [com.mchange.v2.c3p0.ComboPooledDataSource@1ff3fcf[ acquireIncrement -&gt; 3, acquireRetryAttempts -&gt; 30, acquireRetryDelay -&gt; 1000, autoCommitOnClose -&gt; false, automaticTestTable -&gt; null, breakAfterAcquireFailure -&gt; false, checkoutTimeout -&gt; 0, connectionTesterClassName -&gt; com.mchange.v2.c3p0.impl.DefaultConnectionTester, description -&gt; null, driverClass -&gt; org.gjt.mm.mysql.Driver, factoryClassLocation -&gt; null, forceIgnoreUnresolvedTransactions -&gt; false, identityToken -&gt; 1ff3fcf, idleConnectionTestPeriod -&gt; -1, initialPoolSize -&gt; 3, jdbcUrl -&gt; jdbc:mysql://localhost/tycho?useUnicode=true&amp;characterEncoding=utf-8, loginTimeout -&gt; 0, maxIdleTime -&gt; 0, maxPoolSize -&gt; 15, maxStatements -&gt; 0, maxStatementsPerConnection -&gt; 0, minPoolSize -&gt; 3, numHelperThreads -&gt; 3, preferredTestQuery -&gt; null, properties -&gt; {hibernate.c3p0.testConnectionOnCheckout=false, hc3p0.maxPoolSize=10, user=******, c3p0.max_statement=50, hc3p0.timeout=60, c3p0.testConnectionOnCheckout=true, hibernate.hbm2ddl.auto=update, password=******, c3p0.minPoolSize=1}, propertyCycle -&gt; 300, testConnectionOnCheckin -&gt; false, testConnectionOnCheckout -&gt; false, usesTraditionalReflectiveProxies -&gt; false ]] of Hibernate SessionFactory for HibernateTransactionManager<br /><br />　　以上代码在Spring1.2.8+Hibernate3.1.3+Tomcat5.0下使用正常。<img src ="http://www.blogjava.net/hiswing/aggbug/63770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-15 21:29 <a href="http://www.blogjava.net/hiswing/archive/2006/08/15/63770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring研究-2</title><link>http://www.blogjava.net/hiswing/archive/2006/08/15/63590.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Tue, 15 Aug 2006 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/15/63590.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/63590.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/15/63590.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/63590.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/63590.html</trackback:ping><description><![CDATA[1.什么是IoC？<br />　　IoC(Inversion of Control)是近年来兴起的一种思想，不仅仅是编程思想。主要是协调各组件间相互的依赖关系，同时大大提高了组件的可移植性，组件的重用机会也变得更多。在传统的实现中，由程序内部代码来控制程序之间的关系。我们经常使用new关键字来实现两组键间关系的组合，这种实现的方式会造成组件之间耦合(一个好的设计，不但要实现代码重用，还要将组件间关系解耦)。IoC很好的解决了该问题，它将实现组件间关系从程序内部提到外部容器来管理。也就是说由容器在运行期将组件间的某种依赖关系动态的注入组件中。控制程序间关系的实现交给了外部的容器来完成。即常说的好莱坞原则"Don't call us, we'll call you"。<br />Ioc也有称为DI(Dependecy Injection 依赖注射)，由Martin Fowler的一篇《Inversion of Control Containers and the Dependency Injection pattern》提出。 <br /><br />2.IoC的几种实现类型<br />(1)Type1接口注入<br />通常做法是利用接口将调用者与实现者分离。<br /><div class="UBBPanel"><div class="UBBContent"><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"><img id="Codehighlighter1_19_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_219_Open_Text.style.display='none'; Codehighlighter1_19_219_Closed_Image.style.display='inline'; Codehighlighter1_19_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_219_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_219_Closed_Text.style.display='none'; Codehighlighter1_19_219_Open_Image.style.display='inline'; Codehighlighter1_19_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sport </span><span id="Codehighlighter1_19_219_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_19_219_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> InterfaceBall ball; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">InterfaceBall是定义的接口</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_98_217_Open_Image" onclick="this.style.display='none'; Codehighlighter1_98_217_Open_Text.style.display='none'; Codehighlighter1_98_217_Closed_Image.style.display='inline'; Codehighlighter1_98_217_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_98_217_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_98_217_Closed_Text.style.display='none'; Codehighlighter1_98_217_Open_Image.style.display='inline'; Codehighlighter1_98_217_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> init() </span><span id="Codehighlighter1_98_217_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_98_217_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Basketball实现了InterfaceBall接口</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        ball </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (InterfaceBall) Class.forName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Basketball</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).newInstance();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />　　Sport类在编译期依赖于InterfaceBall的实现，为了将调用者与实现者分离，我们动态生成Basketball类并通了强制类型转换为InterfaceBall。Apache Avalon是一个典型的Type1型IoC容器。<br />(2)setter方法注入<br />在类中暴露setter方法来实现依赖关系。<br /></div></div><div class="UBBPanel"><div class="UBBContent"><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"><img id="Codehighlighter1_19_124_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_124_Open_Text.style.display='none'; Codehighlighter1_19_124_Closed_Image.style.display='inline'; Codehighlighter1_19_124_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_124_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_124_Closed_Text.style.display='none'; Codehighlighter1_19_124_Open_Image.style.display='inline'; Codehighlighter1_19_124_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sport </span><span id="Codehighlighter1_19_124_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_19_124_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> InterfaceBall ball;<br /><img id="Codehighlighter1_96_122_Open_Image" onclick="this.style.display='none'; Codehighlighter1_96_122_Open_Text.style.display='none'; Codehighlighter1_96_122_Closed_Image.style.display='inline'; Codehighlighter1_96_122_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_96_122_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_122_Closed_Text.style.display='none'; Codehighlighter1_96_122_Open_Image.style.display='inline'; Codehighlighter1_96_122_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setBall(InterfaceBall arg) </span><span id="Codehighlighter1_96_122_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_96_122_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ball </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> arg;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />这种方式对已经习惯了JavaBean的程序员而言，更显直观。Spring就是实现了该类型的轻量级容器。<br /><br />(3)Type3构造子注入<br />即通过构造方法完成依赖关系。<br /><div class="UBBPanel"><div class="UBBContent"><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"><img id="Codehighlighter1_19_117_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_117_Open_Text.style.display='none'; Codehighlighter1_19_117_Closed_Image.style.display='inline'; Codehighlighter1_19_117_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_117_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_117_Closed_Text.style.display='none'; Codehighlighter1_19_117_Open_Image.style.display='inline'; Codehighlighter1_19_117_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Sport </span><span id="Codehighlighter1_19_117_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_19_117_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> InterfaceBall ball;<br /><img id="Codehighlighter1_89_115_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_115_Open_Text.style.display='none'; Codehighlighter1_89_115_Closed_Image.style.display='inline'; Codehighlighter1_89_115_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_89_115_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_115_Closed_Text.style.display='none'; Codehighlighter1_89_115_Open_Image.style.display='inline'; Codehighlighter1_89_115_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Sport(InterfaceBall arg) </span><span id="Codehighlighter1_89_115_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_89_115_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ball </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> arg;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />　　可以看到，通过类的构造方法建立依赖关系。由于Type3在构造期就形成了对象的依赖关系，即存对象的重用变的困难。有些框架需要组件提供一个默认的构造方法，此时就体现了Type3的局限性。通常所有的参数都是通过构造方法注入的，当对象间的依赖关系较多时，构造方法就显的比较复杂，不利于单元测试。PicoContainer就是实现了Type3依赖注入模式的轻量级容器。<img src ="http://www.blogjava.net/hiswing/aggbug/63590.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-15 09:17 <a href="http://www.blogjava.net/hiswing/archive/2006/08/15/63590.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring研究-1</title><link>http://www.blogjava.net/hiswing/archive/2006/08/15/63554.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Mon, 14 Aug 2006 16:06:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/15/63554.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/63554.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/15/63554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/63554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/63554.html</trackback:ping><description><![CDATA[Spring Framework的官方网站：<a href="http://www.springframework.org/" target="_blank" tip=""><font color="#002c99">http://www.springframework.org/</font></a><br /><br />1.什么是Spring Framework？<br />　　Spring Framework(简称Spring)是根据Rod Johnson著名的《Expert One-on-One J2EE Design and Development》而开发的J2EE应用程序框架。目前主要根据Rod Johnson和Juergen Hoeller而进行开发的，目前发布的最新版为1.1.4。 Spring是J2EE应用程序框架，不过，更严格地讲它是针对Bean的生命周期进行管理的轻量级容器(Lightweight container)，可以单独利用Spring构筑应用程序，也可以和Struts，Webwork，Tapestry等众多Web应用程序框架组合使用，并且可以与Swing等桌面应用程序API组合。所以Spring并不仅仅只能应用在J2EE中，也可以应用在桌面应用及小应用程序中。针对Spring开发的组件不需要任何外部库。<br /><br />2.使用Spring有什么好处？<br />(1)Spring能有效地组织你的中间层对象。<br />(2)Spring能消除在许多工程中常见的对Singleton的过多使用。<br />(3)Spring能消除各种各样自定义格式的属性文件的需要，使配置信息一元化。<br />(4)Spring能够帮助我们真正意义上实现针对接口编程。<br />(5)在Spring应用中的大多数业务对象没有依赖于Spring。<br />(6)使用Spring构建的应用程序易于单元测试。<br />(7)Spring支持JDBC和O/R Mapping产品(Hibernate)<br />(8)MVC Web框架，提供一种清晰，无侵略性的MVC实现方式。<br />(9)JNDI抽象层，便于改变实现细节，可以方便地在远程服务和本地服务间切换。<br />(10)简化访问数据库时的例外处理。<br />(11)Spring能使用AOP提供声明性事务管理，可以不直接操作JTA也能够对事务进行管理。<br />(12)提供了JavaMail或其他邮件系统的支持。<br /><br />3.什么是轻量(Lightweight)级容器？<br />Spring的开发者可以避免使用重量级容器开发EJB时的缺点：<br />(1)带有侵略性的API。(代码依赖于EJB)<br />(2)对容器的依赖。(代码不能在EJB容器之外工作)<br />(3)提供固定的一组机能，不具有配置能力。<br />(4)不同的产品，部署过程不同，不易通用。<br />(5)启动时间长。<br /><br />　　针对以上问题，Spring采用了IoC使代码对Spring的依赖减少，根据Web应用，小应用程序，桌面应用程的不同，对容器的依赖程度也不同。Spring将管理的Bean作为POJO(Plain Old Java Object)进行控制，通过AOP Interceptor能够增加其它的功能。<br />除了Spring以外的轻量级容器还有PicoContainer，(不是轻量级容器)对Bean的生命周期进行管理的还有Apache Avalon Project的Avalon等。<br /><br />　　总结：Spring的核心思想便是IoC和AOP，Spring本身是一个轻量级容器，和EJB容器不同，Spring的组件就是普通的Java Bean，这使得单元测试可以不再依赖容器，编写更加容易。Spring负责管理所有的Java Bean组件，同样支持声明式的事务管理。我们只需要编写好Java Bean组件，然后将它们"装配"起来就可以了，组件的初始化和管理均由Spring完成，只需在配置文件中声明即可。这种方式最大的优点是各组件的耦合极为松散，并且无需我们自己实现Singleton模式。<img src ="http://www.blogjava.net/hiswing/aggbug/63554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-15 00:06 <a href="http://www.blogjava.net/hiswing/archive/2006/08/15/63554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>utf-8乱码解决方案</title><link>http://www.blogjava.net/hiswing/archive/2006/08/11/63086.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Fri, 11 Aug 2006 12:31:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/11/63086.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/63086.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/11/63086.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/63086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/63086.html</trackback:ping><description><![CDATA[在解决乱码问题前，必须先搞清楚几个相关的问题。<br /><br />　　q：为每个jsp页面设置了其编码格式(utf-8)，但传递数据到另一页面时依然显示为乱码？<br /><br />　　a：首先要需要了解的是web容器默认编码是iso-8859-1，一个汉字占用两个字节，而在utf-8中一个汉字占用三个字节。所以在数据传递过程中，必须手动设定容器编码格式，否则会出现字符位丢失的情况。即3个字节变为两个字节，自然会变成乱码。<br /><br />　　q：为什么保存到数据库中的数据都变成了乱码？<br /><br />　　a：原理同上，首先要搞清楚使用的数据库默认的编码格式，比如mysql默认的字符编码是ISO-8859-1。所以必须手动修改其默认编码格式。<br /><br />　　清楚了以上问题后，再来看如何解决utf-8的乱码问题。<br /><br />１．设置web容器的编码格式。为你的servlet的doGet或doPost方法开始处加入如下代码：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">request.setCharacterEncoding(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">utf-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />response.setCharacterEncoding(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">utf-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div><br />２．为每个jsp页面指定其编码格式。&lt;%@ page pageEncoding="utf-8"%&gt;<br />３．在连接数据库用的URL后加入：useUnicode=true;characterEncoding=utf-8　如：<br />　　url="jdbc:mysql:///db1?useUnicode=true;characterEncoding=utf-8"，<br />４．为指定数据库默认编码格式。在C:\WINDOWS目录下找到my.ini文件，并在[mysqld]中加入default-character-set=gbk，重新启动mysql服务。<br /><br />　　至此，乱码问题全部解决。起初总搞上去不清，为什么要将mysql的默认编码格式设置为gbk，后来由相关的资料得知utf-8默认输入编码方式为gbk，默认输出编码方式为utf-16be。<br /><br />　　个人认为，将数据进行utf-8进行编码的目的(即将中文编码为％的形式)，主要是为了在多层服务间进行数据传输时，防止发生字符丢失(如msn)。普通的web程序显然没有必要这样做，只要使用以上方法进行处理，就可以有效的解决乱码问题，从而结省存储空间。如果都像公司的SC系统那样，将一个汉字编码为18个字符后，再存储到数据库中，抛开效率不说，就存储空间的浪费就够人受的，要知道，那是需要银子地！ <img src ="http://www.blogjava.net/hiswing/aggbug/63086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-11 20:31 <a href="http://www.blogjava.net/hiswing/archive/2006/08/11/63086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate研究-8</title><link>http://www.blogjava.net/hiswing/archive/2006/08/08/62428.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Tue, 08 Aug 2006 13:01:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/08/62428.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62428.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/08/62428.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62428.html</trackback:ping><description><![CDATA[
		<p>　　在关系型数据库中，主键可分为自然主键和代理主键．自然主键是含有业务意义的，代理主键则不含有业务意义．因此代理主键可以适应不断变化的业务需求，所以推荐使用．代理主键一般设置为整型，hibernate中可以把OID设为long、int 和short类型及它们的包装类型（Long、Integer、Short）．关于代理主键的映射请参照<a href="http://www.junesky.org/blog/article.asp?id=31" target="_blank" tip=""><font color="#002c99">这里</font></a>，今天说说hibernate对自然主键的映射．<br /><br />　　映射单个自然主键同映射代理主键基本相同，这里简单说明一下映射复合自然主键．复合主键的映射有两种方法．<br />假如USERS表的主键为NAME字段和TEL字段，那么在User类中也应该存在相对应的属性和方法，映射方法如下：<br /><br /><strong>方法1</strong></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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">class </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="org.junesky.User"</span>
				<span style="COLOR: #ff0000"> table</span>
				<span style="COLOR: #0000ff">="USERS"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">composite-id</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">key-property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="name"</span>
				<span style="COLOR: #ff0000"> column</span>
				<span style="COLOR: #0000ff">="NAME"</span>
				<span style="COLOR: #ff0000">, type</span>
				<span style="COLOR: #0000ff">="string"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">key-property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="tel"</span>
				<span style="COLOR: #ff0000"> column</span>
				<span style="COLOR: #0000ff">="TEL"</span>
				<span style="COLOR: #ff0000">, type</span>
				<span style="COLOR: #0000ff">="long"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">id</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">composite-id</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="address"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">column </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="ADDRESS"</span>
				<span style="COLOR: #ff0000"> sql-type</span>
				<span style="COLOR: #0000ff">="string"</span>
				<span style="COLOR: #ff0000"> not-null</span>
				<span style="COLOR: #0000ff">="false"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">class</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>　　以下代码生成一个User对象，并保存．</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> User user </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> User();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setName(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hiswing</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setTel(</span>
				<span style="COLOR: #000000">12345678</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> session.save(user);</span>
		</div>
		<p>　　以下代码加载一个User对象．</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> User user </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> User();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setName(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hiswing</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setTel(</span>
				<span style="COLOR: #000000">12345678</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> session.load(User.</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">, user);</span>
		</div>
		<p>　　Session.load根据指定的条件从数据库中检索出记录后，会把数据拷贝到传入的参数user中．这里需要指出的是，User类必须实现java.io.Serializable接口，并覆写equals和hashcode方法．否则会弹出以下错误信息:<br /><br />net.sf.hibernate.MappingException: composite-id class must override equals() and hashCode(): org.junesky.orm.User<br /> at net.sf.hibernate.cfg.Binder.bindRootClass(Binder.java:303)<br /> at net.sf.hibernate.cfg.Binder.bindRoot(Binder.java:1229)<br /> at net.sf.hibernate.cfg.Configuration.add(Configuration.java:249)<br /> at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:285)<br /> at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:333)<br /> at org.junesky.action.HibernateRun.main(HibernateRun.java:24)<br />net.sf.hibernate.MappingException: Error reading resource: org/junesky/orm/User.hbm.xml<br /> at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:336)<br /> at org.junesky.action.HibernateRun.main(HibernateRun.java:24)<br />Caused by: net.sf.hibernate.MappingException: composite-id class must override equals() and hashCode(): org.junesky.orm.User<br /> at net.sf.hibernate.cfg.Binder.bindRootClass(Binder.java:303)<br /> at net.sf.hibernate.cfg.Binder.bindRoot(Binder.java:1229)<br /> at net.sf.hibernate.cfg.Configuration.add(Configuration.java:249)<br /> at net.sf.hibernate.cfg.Configuration.addInputStream(Configuration.java:285)<br /> at net.sf.hibernate.cfg.Configuration.addClass(Configuration.java:333)<br /> ... 1 more<br />Exception in thread "main"<br /><br />　　我们必须实现java.io.Serializable接口并覆写equals和hashCode两个方法．改正User类，如下：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> org.junesky.org;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.io.Serializable;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_98_534_Open_Image" onclick="this.style.display='none'; Codehighlighter1_98_534_Open_Text.style.display='none'; Codehighlighter1_98_534_Closed_Image.style.display='inline'; Codehighlighter1_98_534_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_98_534_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_98_534_Closed_Text.style.display='none'; Codehighlighter1_98_534_Open_Image.style.display='inline'; Codehighlighter1_98_534_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> User </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> Serializable </span>
				<span id="Codehighlighter1_98_534_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_98_534_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> String address;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> String name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Long tel;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_217_294_Open_Image" onclick="this.style.display='none'; Codehighlighter1_217_294_Open_Text.style.display='none'; Codehighlighter1_217_294_Closed_Image.style.display='inline'; Codehighlighter1_217_294_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_217_294_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_217_294_Closed_Text.style.display='none'; Codehighlighter1_217_294_Open_Image.style.display='inline'; Codehighlighter1_217_294_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">boolean</span>
						<span style="COLOR: #000000"> equals(Object o) </span>
						<span id="Codehighlighter1_217_294_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_217_294_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000"> o)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">true</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_327_499_Open_Image" onclick="this.style.display='none'; Codehighlighter1_327_499_Open_Text.style.display='none'; Codehighlighter1_327_499_Closed_Image.style.display='inline'; Codehighlighter1_327_499_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_327_499_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_327_499_Closed_Text.style.display='none'; Codehighlighter1_327_499_Open_Image.style.display='inline'; Codehighlighter1_327_499_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> hashCode() </span>
						<span id="Codehighlighter1_327_499_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_327_499_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> result;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        result </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (name </span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">?</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000"> : name.hashCode());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        result </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">29</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">*</span>
								<span style="COLOR: #000000"> result </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> (tel </span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">?</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000"> : tel.hashCode());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> result;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">此处省略getter和setter方法……</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #000000">}</span>
				</span>
		</div>
		<p>　　以下代码生成一个User对象，并保存．</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> User user </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> User();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setName(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hiswing</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setTel(</span>
				<span style="COLOR: #000000">12345678</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> session.save(user);</span>
		</div>
		<p>　　以下代码加载一个User对象．</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> User user </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> User();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setName(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hiswing</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setTel(</span>
				<span style="COLOR: #000000">12345678</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> session.load(User.</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">, user);</span>
		</div>
		<p>
				<strong>方法２</strong>
				<br />　　定义一个主键类，该类必须实现java.io.Serializable接口并覆写equals和hashcode方法．该类中定义了name和tel属性．<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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> org.junesky.org;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.io.Serializable;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_100_789_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_789_Open_Text.style.display='none'; Codehighlighter1_100_789_Closed_Image.style.display='inline'; Codehighlighter1_100_789_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_100_789_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_100_789_Closed_Text.style.display='none'; Codehighlighter1_100_789_Open_Image.style.display='inline'; Codehighlighter1_100_789_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> UserID </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> Serializable </span>
				<span id="Codehighlighter1_100_789_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_100_789_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> String name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Long tel;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_191_553_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_553_Open_Text.style.display='none'; Codehighlighter1_191_553_Closed_Image.style.display='inline'; Codehighlighter1_191_553_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_191_553_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_191_553_Closed_Text.style.display='none'; Codehighlighter1_191_553_Open_Image.style.display='inline'; Codehighlighter1_191_553_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">boolean</span>
						<span style="COLOR: #000000"> equals(Object o) </span>
						<span id="Codehighlighter1_191_553_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_191_553_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(o);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000"> o)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">true</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #000000">!</span>
								<span style="COLOR: #000000">(o </span>
								<span style="COLOR: #0000ff">instanceof</span>
								<span style="COLOR: #000000"> UserID))<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        UserID userId </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (UserID) o;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #000000">!</span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.name.equals(userId.getName()))<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #000000">!</span>
								<span style="COLOR: #0000ff">this</span>
								<span style="COLOR: #000000">.tel.equals(userId.getTel()))<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">false</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">true</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_586_758_Open_Image" onclick="this.style.display='none'; Codehighlighter1_586_758_Open_Text.style.display='none'; Codehighlighter1_586_758_Closed_Image.style.display='inline'; Codehighlighter1_586_758_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_586_758_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_586_758_Closed_Text.style.display='none'; Codehighlighter1_586_758_Open_Image.style.display='inline'; Codehighlighter1_586_758_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> hashCode() </span>
						<span id="Codehighlighter1_586_758_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_586_758_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> result;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        result </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> (name </span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">?</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000"> : name.hashCode());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        result </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">29</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">*</span>
								<span style="COLOR: #000000"> result </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> (tel </span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">?</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000"> : tel.hashCode());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> result;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">此处省略getter和setter方法……</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #000000">}</span>
				</span>
		</div>
		<p>　　在User类中，不必定义name和tel属性，而是定义UserID属性．<br /> Private UserID userID;<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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">hibernate-mapping</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">class </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="org.junesky.orm.User"</span>
				<span style="COLOR: #ff0000"> table</span>
				<span style="COLOR: #0000ff">="USERS"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">composite-id </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="userID"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="org.junesky.orm.UserID"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">key-property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="name"</span>
				<span style="COLOR: #ff0000"> column</span>
				<span style="COLOR: #0000ff">="NAME"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="string"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">key-property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="tel"</span>
				<span style="COLOR: #ff0000"> column</span>
				<span style="COLOR: #0000ff">="TEL"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="long"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">composite-id</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="address"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">column </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="ADDRESS"</span>
				<span style="COLOR: #ff0000"> sql-type</span>
				<span style="COLOR: #0000ff">="string"</span>
				<span style="COLOR: #ff0000"> not-null</span>
				<span style="COLOR: #0000ff">="false"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">class</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">hibernate-mapping</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>　　以下代码生成一个User对象，并保存．</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> UserID userid </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> UserID();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> userid.setTel(</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Long(</span>
				<span style="COLOR: #000000">12345678</span>
				<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> userid.setName(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hiswing</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> User user </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> User();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setAddress(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hangzho</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setUserID(userid);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> session.save(user);</span>
		</div>
		<p>　　以下代码加载一个User对象．</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> UserID userid </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> UserID();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> userid.setTel(</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Long(</span>
				<span style="COLOR: #000000">12345678</span>
				<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> userid.setName(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hiswing</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> User user </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> User();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setAddress(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hangzho</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> user.setUserID(userid);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> User user2 </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> (User) session.load(User.</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">, userid);</span>
		</div>
		<br />
		<br />
		<strong>　　</strong>写于：<strong>2004-08-18</strong><img src ="http://www.blogjava.net/hiswing/aggbug/62428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-08 21:01 <a href="http://www.blogjava.net/hiswing/archive/2006/08/08/62428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate研究-7</title><link>http://www.blogjava.net/hiswing/archive/2006/08/08/62427.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Tue, 08 Aug 2006 12:59:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/08/62427.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62427.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/08/62427.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62427.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62427.html</trackback:ping><description><![CDATA[　　为了保证记录的唯一性．一般我们使用代理主键，即没有业务含义的字段，通常取名为＂ID＂．代理主键一般是整数类型（比较节省空间）．在MySql中，我们可以把表的主键（ID）设置为auto_increment类型，数据库会为每一条记录自动加１．<br /><br />　　我们知道，java是按照地址来区分不同的对象的．如下：<br /><div class="UBBPanel"><div class="UBBContent"><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"><img id="Codehighlighter1_40_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_190_Open_Text.style.display='none'; Codehighlighter1_40_190_Closed_Image.style.display='inline'; Codehighlighter1_40_190_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_40_190_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_190_Closed_Text.style.display='none'; Codehighlighter1_40_190_Open_Image.style.display='inline'; Codehighlighter1_40_190_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_40_190_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_40_190_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    String a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    String b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    String c </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(a </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> b);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(a </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> c);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span></span></div><br />　　打印结果为：<br /> false<br /> true<br /><br />　　虽然a和b的值都为hello，但它们的地址是不相同的．c的地址指针指向了a的地址，所以它们是相同的．那么，在hibernate中，是如果区分相同和不同的记录的呢？OID．hibernate是使用OID来维持java对象和数据库表中记录的一一对应关系的．看代码，如下：<br /><br /></div></div><div class="UBBPanel"><div class="UBBTitle"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> Transaction tx </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> session.beginTransaction();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> User user1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (User) session.load(User.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Long(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> User user2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (User) session.load(User.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Long(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> User user3 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (User) session.load(User.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Long(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> System.out.println(user1 </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> user2);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> System.out.println(user1 </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> user3);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> tx.commit();</span></div><br />　　在以上程序中，调用了三次session.load方法，加载了OID为1和3的User对象，其中OID为1的User对象加载了两次，分别为user1和user2．这种情况下，user1和user2是否相等呢？答案是肯定的．因为在第一次加载OID为1的User对象时，先查询数据库表USERS中ID为1的记录，并创建User对象，然后将其保存在Session缓存中，最后把这个对象的引用赋值给变量user1．当第二次加载OID为1的User对象时，直接从缓存中OID为1的User对象引用赋值给变量user2，所以user1 == user2．当加载OID为3的User对象时，由于缓存中没有该对象，所以重新查询数据库表．<br /><br />　　为了保证持久化对象的OID的惟一性和不可变性，一般不在应用程序中对OID进行赋值．所以我们可以把OID的set方法设为private．<br /><br />　　在对象关系映射文件中，&lt;id&gt;元素用来设置对象标识符，如下：<br /><br /></div></div><div class="UBBPanel"><div class="UBBTitle"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">id </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=”id” </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">=”long” </span><span style="COLOR: #ff0000">column</span><span style="COLOR: #0000ff">=”ID”&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #ff0000">&lt;generator class</span><span style="COLOR: #0000ff">=”increment”/&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #ff0000">&lt;/id</span><span style="COLOR: #0000ff">&gt;</span></div><br />　　Generator元素用来设定标识符生成器．Hibernate提供了以下几种内置标识符生成器：<br /><br /><strong>Increment</strong>：适用于代理主键．由hibernate自动以递增的方式生成标识符，每次增量为1．<br /><strong>Identity</strong>：适用于代理主键．由底层数据库生成标识符．数据库必须支持自动增长字段类型．<br /><strong>Sequence</strong>：适用于代理主键．Hibernate根据底层数据库序列来生成标识符．前提是条件是底层数据库支持序列．<br /><strong>Hilo</strong>：适用于代理主键．Hibernate根据high/how算法来生成标识符．<br /><strong>Native</strong>：适用于代理主键．根据底层数据库对自动生成标识符的支持能力，来选择identity，sequence或hilo．<br /><strong>Uuid.hex</strong>：适用于代理主键．Hibernate采用128位的UUID（Universal Unique Identification）算法来生成标识符．UUID算法能够在网络环境中生成唯一的字符串标识符．但字符串型的主键比整型的主键占用更多的数据库空间．<br /><strong>Assigned</strong>：适用于自然主键．由Java应用程序生成标识符．<br /><br /><strong>　　</strong>写于：<strong>2004-08-17</strong></div></div><img src ="http://www.blogjava.net/hiswing/aggbug/62427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-08 20:59 <a href="http://www.blogjava.net/hiswing/archive/2006/08/08/62427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate研究-6</title><link>http://www.blogjava.net/hiswing/archive/2006/08/07/62191.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Mon, 07 Aug 2006 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/07/62191.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62191.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/07/62191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62191.html</trackback:ping><description><![CDATA[首先补充(5)没有记录完的内容。 <br /><br /><strong>Criteria的高级特性</strong><br />使用Criteria对查询语句进行对象化包装时，也可以对要查询的数据进行分页，限制查询数据个数等操作。 Criteria criteria = hdb.createCriteria(TeamPo.class); <br />criteria.setFirstResult(20);//查询后将第20条记录做为开始 <br />criteria.setMaxResults(100);//每次查询返回100条记录 <br /><br />还可以对查询的记录进行排序。 <br />criteria.addOrder(Order.asc("id")); <br />criteria.addOrder(Order.desc("name")); <br /><br />Criteria作为查询语句的对象化封装，做的并不是很完美。Hibernate似乎将精力集中在了HQL上，在实际运用中，Hibernate官方更推荐使用HQL查询封装模式。 <br /><br /><strong>HQL(Hibernate Query Language)查询封装模式</strong><br />在Hibernate官方手册中，HQL是被推荐的查询封装模式。因为HQL提供了较Criteria更为强大的查询功能。 <br />HQL语法同传统的SQL基本相同。如： <br />select team FROM Team AS team where teamId = '001' <br />只要你对SQL语句有所了解，那么就不需要去学习HQL，但要注意一点，在HQL中，要查询的数据都是以对象的形式存在的。如在上HQL语句中，select后跟的并不是数据库字段名，而是一个对象，Team是一个PO，id是Team的一个属性。要取出数据可以像下面这样写：<br /><br /><div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">以hibernate.cfg.xml文件作为配置文件时，一定要这样写。 </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">Configuration cfg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Configuration().configure(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对象持久化 </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">cfg.addClass(Team.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">生成Session工厂 </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">SessionFactory sessionFactory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> cfg.buildSessionFactory(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">生成Session </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">Session session </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> sessionFactory.openSession(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">查询数据 </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">Query query </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> session.createQuery(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">select team FROM Team AS team where teamId = '001'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">取得数据List </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">Iterator iterator </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> query.iterate(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">取出每条数据 </span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_450_594_Open_Image" onclick="this.style.display='none'; Codehighlighter1_450_594_Open_Text.style.display='none'; Codehighlighter1_450_594_Closed_Image.style.display='inline'; Codehighlighter1_450_594_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_450_594_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_450_594_Closed_Text.style.display='none'; Codehighlighter1_450_594_Open_Image.style.display='inline'; Codehighlighter1_450_594_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(iterator.hasNext()) </span><span id="Codehighlighter1_450_594_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_450_594_Open_Text"><span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Team po </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Team)iterator.next();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注意:这里取出的是TeamPo对象 </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    System.out.println(po.getTeamName()); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(po.getTeamId()); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />除了以上这种HQL写法，你也可以这样写： <br />select team.teamName, team.teamId FROM Team AS team where teamId = '001' <br /><br />查询时可以像下面这样写：<br /> <br /><div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><img src="http://www.blogjava.net/images/dot.gif" />.</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">省略 <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">查询数据 </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">Query query </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> session.createQuery(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">select team.teamName, team.teamId FROM Team AS team where teamId = '001'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">取得数据List </span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">Iterator iterator </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> query.iterate(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">取出每条数据 </span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_218_329_Open_Image" onclick="this.style.display='none'; Codehighlighter1_218_329_Open_Text.style.display='none'; Codehighlighter1_218_329_Closed_Image.style.display='inline'; Codehighlighter1_218_329_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_218_329_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_218_329_Closed_Text.style.display='none'; Codehighlighter1_218_329_Open_Image.style.display='inline'; Codehighlighter1_218_329_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000"> (iterator .hasNext()) </span><span id="Codehighlighter1_218_329_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_218_329_Open_Text"><span style="COLOR: #000000">{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Object[] o </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Object[])iterator .next(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(o[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    System.out.println(o[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />怎么样，是不是跟SQL语句一样呢？ <br /><br /><br />　　写于：<strong>2004-08-16</strong></div></div><img src ="http://www.blogjava.net/hiswing/aggbug/62191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-07 15:15 <a href="http://www.blogjava.net/hiswing/archive/2006/08/07/62191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate研究-5</title><link>http://www.blogjava.net/hiswing/archive/2006/08/07/62188.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Mon, 07 Aug 2006 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/07/62188.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62188.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/07/62188.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62188.html</trackback:ping><description><![CDATA[
		<p>　　Criteria Query是Hibernate提供的将SQL语句对象化表示的一种方法。当我们使用JDBC方式查询数据时会这样写： <br />select NAME FROM EMPLOYEE where ID = '001' </p>
		<p>使用Hibernate的Criteria Query方式查询时，就可以使用我们已经习惯了的面向对象的方式。如下： </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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> net.sf.hibernate.Criteria; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> net.sf.hibernate.expression.Expression; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><img src="http://www.blogjava.net/images/dot.gif" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Criteria criteria </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> session.createCriteria(Employee.</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />criteria.add(Expression.eq(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">id</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">001</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ArrayList list </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> criteria.list(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><img src="http://www.blogjava.net/images/dot.gif" /> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>　　Criteria会根据add的条件生成SQL语句。（可以将hibernate.cfg.xml配置文件中show_sql设置为true以查看生成的SQL语句） </p>
		<p>Expression对象是查询条件的描述，提供了对应的查询限定机制： <br />Expression的方法描述 <br />Expression.eq：对应SQL条件中的"field = value"。如：Expression.eq("id","001") <br />Expression.allEq：参数为一个Map对象，其中包含了多个属性和值对应关系。相当于多个Expression.eq关系，多个条件。如：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">map.put(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">id</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">001</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />map.put(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">name</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hiswing</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Expression.allEq(map); </span>
		</div>
		<p>Expression.gt：对应SQL条件中的"field &gt; value "。如：Expression.gt("salary", new Integer(5000)) <br />Expression.ge：对应SQL条件中的"field &gt;= value"。 <br />Expression.lt：对应SQL条件中的"field &lt; value"。 <br />Expression.le：对应SQL条件中的"field &lt;= value"。 <br />Expression.between：对应SQL条件中的"between"。 <br />Expression.like：对应SQL条件中的"field like value"。 <br />Expression.in：对应SQL条件中的"field in …"。 <br />Expression.eqProperty：用于比较两个属性之间的值，对应SQL条件中的"field = field"。如：Expression.eqProperty("Employee.id", "Group.eid"); <br />Expression.gtProperty：用于比较两个属性之间的值，对应SQL条件中的"field &gt; field"。 <br />Expression.geProperty：用于比较两个属性之间的值，对应SQL条件中的"field &gt;= field"。 <br />Expression.ltProperty：用于比较两个属性之间的值，对应SQL条件中的"field &lt; field"。 <br />Expression.leProperty：用于比较两个属性之间的值，对应SQL条件中的"field &lt;= field"。 <br />Expression.and：and关系组合。如：</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">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">Expression.and( <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    Expression.eq(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">name</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">hiswing</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">), <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    Expression.eq(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">sex</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">, </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Integer(</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">)) <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />) </span>
		</div>
		<p>Expression.or：or关系组合。(使用方法同Expression.and) <br />Expression.sql：我们可以通过这个方法直接通过SQL语句限定查询条件。 </p>
		<p>　　注：在使用Criteria时，Expression中的KEY为PO中的属性。如Expression.eq("id", "001")中的id为Employee对象中id这个属性，注意大小写。 <br /><br />　　写于<strong>2004-08-15</strong></p>
<img src ="http://www.blogjava.net/hiswing/aggbug/62188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-07 15:08 <a href="http://www.blogjava.net/hiswing/archive/2006/08/07/62188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate研究-4</title><link>http://www.blogjava.net/hiswing/archive/2006/08/07/62184.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Mon, 07 Aug 2006 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/07/62184.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62184.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/07/62184.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62184.html</trackback:ping><description><![CDATA[　　映射文件是O/R Mapping的关键，相当于控制中心。当数据库表较多时，手动配置该映射文件非常耗时。为了快速开发程序，使开发人员的注意力集中到业务逻辑上来，Hibernate官方提供的MiddleGen工具，它可以很方便的生成映射文件。这里下载：<a href="http://prdownloads.sourceforge.net/hibernate/?sort_by=date" target="_blank" tip=""><font color="#002c99">http://prdownloads.sourceforge.net/hibernate/?sort_by=date</font></a>&amp;sort=desc <br /><br />　　MiddleGen是根据数据库表来生成映射文件的，所以要与数据库进行配置。具体配置如下： <br />[1]修改数据库配置文件: <br />　　进入MiddleGen目录下的config/database子目录，可以看到有很多不同数据库的配置文件。根据我们的数据库选择，例如我使用的是MySql，所以打开mysql.xml文件。文件内容如下：<br /><br /><div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.script.file"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="/${src.dir}/sql/${name}-mysql.sql"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">在这里配置JDBC驱动文件，注意，请确保MiddleGen的lib目录下有该驱动</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.driver.file"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="/${lib.dir}/mm.mysql-2.0.14-bin.jar"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.driver.classpath"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="/${database.driver.file}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.driver"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="/org.gjt.mm.mysql.Driver"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">配置数据库URL</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.url"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="jdbc:mysql:///sports"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">用户名</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.userid"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="hiswing"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">密码</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.password"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="123"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.schema"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="database.catalog"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="jboss.datasource.mapping"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="mySQL"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> </span></div><br />[2]修改Build.xml文件: <br />　　该文件放在MiddleGen的根目录下。它是MiddleGen-Hibernate的Ant构建文件。MiddleGen-Hibernate是通过Build.xml文件的具体参数据来生成映射文件的。修改处如下：<br /><br /></div></div><div class="UBBPanel"><div class="UBBTitle"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">指定数据库配置文件，就是[1]中的那个文件，默认为./config/database/hsqldb.xml</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE project [ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;!ENTITY database SYSTEM "file:./config/database/mysql.xml"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />]&gt; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">配置Application Name，默认为airline</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="name"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="sports"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">配置文件输出目录，默认为${build.dir}/gen-src</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="build.gen-src.dir"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="E:\Programme\java\sports"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">配置对应JAVABEAN（PO）的包，默认为package="${name}.hibernate"</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">genXDocletTags设置为true时生成的代码将包含xdoclet tag，可用来调整映射文件</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">hibernate <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #ff0000">destination</span><span style="COLOR: #0000ff">="${build.gen-src.dir}"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    package</span><span style="COLOR: #0000ff">="com.cuitao.sports.po"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    genXDocletTags</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    genIntergratedCompositeKeys</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    javaTypeMapper</span><span style="COLOR: #0000ff">="middlegen.plugins.hibernate.HibernateJavaTypeMapper"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> </span></div><br />　　至此，MiddleGen-Hibernate的配置就算完成了。接下来，将使用Ant帮助我们启动MiddleGen-Hibernate。(可以在Apache网站上下载) <br /><br />　　运用MS-Dos方式进入MiddleGen的根目录，运行ant，将启动MiddleGen-Hibernate的界面。在此之前，别忘记启动数据库： ）<br />Domain Class Name ：PO的类名 <br />Key Generator：主键生成器。其中有一些选项，一般选用uuid.hex 方式生成主键将提供最好的性能和数据库平台适应性。 <br />Schema Name：数据库Schema Name <br />Persister：自定义持久类实现类类名。如果系统除了Hibernate 之外的其它持久层实现机制，如通过存储过程得到数据集，甚至从LDAP中获取数据来填充我们PO。 <br />Enable proxies：代理（用于延迟加载[Lazy Loading]）。 <br />Dynamic update：选定该项后，生成update SQL 时将不包含未发生变动的字段属性，可以提升SQL执行效率。 <br />Implement the Lifecyle interface：是否实现Lifecyle接口。实现Lifecyle接口后我们就可以在数据库操作之前，之后触发指定操作。 <br /><br />　　以上的配置是针对类进行的。下面将针对属性进行配置。 <br />Hibernate mapping specialty：映射类型Key=主键，Property=属性。 <br />Java property name：数据库字段对应的PO的属性名。 <br />Java Type：数据库字段对应的PO属性的数据类型。 <br /><br />　　最后，单击窗口顶部的Generate 按钮，MiddleGen将自动生成这些数据库表所对应的Hibernate映射文件。映射文件是以.hbm.xml 作为后缀的，一个映射文件对应数据库的一个表。 <br /><br />　　写于：<strong>2004-08-14</strong></div></div><img src ="http://www.blogjava.net/hiswing/aggbug/62184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-07 14:57 <a href="http://www.blogjava.net/hiswing/archive/2006/08/07/62184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate研究-3</title><link>http://www.blogjava.net/hiswing/archive/2006/08/07/62183.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Mon, 07 Aug 2006 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/07/62183.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62183.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/07/62183.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62183.html</trackback:ping><description><![CDATA[　　hibernate的配置文件有两种，hibernate.properties和hibernate.cfg.xml，相比较来说，使用hibernate.cfg.xml配置文件的好处是更易读，更强的扩展能力，并且可以直接对映射文件加以配置。（映射文件：O/R Mapping的配置文件，将PO的属性与数据库表字段映射。它是个xml文件。）以下就是hibernate.cfg.xml配置文件的例子： <br /><div class="UBBPanel"><div class="UBBTitle"><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE hibernate-configuration <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">hibernate-configuration</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">SessionFactory的配置</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">session-factory</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">数据库的URL,这里使用MYSQL</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="hibernate.connection.url"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      jdbc:mysql:///sports <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">数据库JDBC驱动程序</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="hibernate.connection.driver_class"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      org.gjt.mm.mysql.Driver <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">用户名</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="hibernate.connection.username"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      hiswing <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">密码</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="hibernate.connection.password"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      123 <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">方言,针对不同的数据库所特有的特性进行匹配,这里用的是MYSQL</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="dialect"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      net.sf.hibernate.dialect.MySQLDialect <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">是否在执行期在控制台上输出SQL语句</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="hibernate.show_sql"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      true <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">映射文件配置,配置文件名必须包含其相对于根的全路径</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">我在配置这里的时候，发现只要配置在相同包中的其中一个映射，其它映射的就可以不用配置了。</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">mapping </span><span style="COLOR: #ff0000">resource</span><span style="COLOR: #0000ff">="com/cuitao/sports/po/EmployeePo.hbm.xml"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">mapping resource="com/cuitao/sports/po/TeamPo.hbm.xml"/</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">mapping resource="com/cuitao/sports/po/JobPo.hbm.xml"/</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">mapping resource="com/cuitao/sports/po/TeamMemberPo.hbm.xml"/</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">session-factory</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">hibernate-configuration</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"> </span></div><br />　　以上配置列出了其中比较重要也是较常用的，还有一些其它的配置，在hibernate的官方文档中也有说明。需要指出的是，这个配置文件应该放在ClassPath中，简单点说，如果使用的开发环境是eclipse，那么就将这个文件与工程文件（.classpath和.project）放在一起。对于Web应用而言，应该将它放在/WEB-INF/classes目录下。 <br /><br />　　写于<strong>2004-08-13</strong></div></div><img src ="http://www.blogjava.net/hiswing/aggbug/62183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-07 14:55 <a href="http://www.blogjava.net/hiswing/archive/2006/08/07/62183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate研究-2</title><link>http://www.blogjava.net/hiswing/archive/2006/08/07/62182.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Mon, 07 Aug 2006 06:54:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/07/62182.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62182.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/07/62182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62182.html</trackback:ping><description><![CDATA[
		<p>
				<strong>数据库访问专家<br /></strong>　　要想使我们的程序更高较的访问数据库，在写SQL语句时就要格外谨慎，要考虑SQL语句的结构或某个关键字使用的是否合理，甚至使用某函数是否会带来性能上的瓶颈，这些都是必须考虑的。由于采用的数据库不同SQL语句的写法也略有不同。想要针对不同的数据库写出同样高性能的SQL语句是非常困难的事情。Hibernate可以帮我们做到这一点。有了它，我们不再需要SQL，更不需要专门针对某种数据库写SQL语句，只需在配置文件里配置一下即可。剩下的事情Hibernate会自动帮我们完成，它会根据不同的数据库生成高效的SQL语句。就好象JDBC专家一样，帮助我们优化访问数据库效率。当然，这只是它的一方面好处。<br /><br /><strong>是数据也是对象</strong><br />　　"一切事物均为对象"。这是OO世界的口号。也是在学习OO编程时的第一课，于是，我们懂得了OO带来的好处。但是，在数据库的世界中，关系型数据库依然傲视群雄，依然是当仁不让的主角。不管我们使用哪种面向对象的语言编程，只要与关系型数据库打交道，必然会在程序中参杂关系结构的概念进来。（也有将SQL于程序代码分离的做法，比如将SQL语句写入property文件中。但那样只是形式上的改变，并没有对程序有任何帮助，甚至会将底程序的效率。毕竟我们还要自己写SQL，毕竟还要读property文件）那么怎样才能使我们的程序真正面向对象呢？用对象来表示数据库中的数据，即封装JDBC，将所需的数据包装在对象中。这样一来，我们就可以不用理会数据库，而我们所要做的就是用户名是从用户对象中取得的就可以了。Hibernate一个开放源代码的O/R Mapping框架，一个针对JDBC进行了轻量级的对象封装。在程序中，你将找不到SQL语句，而你所看到的一切，均为对象。 <br /><br /><strong>配置文件</strong><br />　　要想使用Hibernate，就必须告诉它"你将帮我访问的数据库是XXX，我希望你使用XXX的形式访问等等"。配置文件的作用就在于此。Hibernate配置文件可以有两种格式，一种是 hibernate.properties ，另一种是 hibernate.cfg.xml 。两种的配置项都是一样的。先来看看properties配置文件，可以在Hibernate的src目录下找到 hibernate.properties 模板，里面已将待配置项写好了，我们只需在其中改改即可。 <br /><br /><strong>数据库信息的配置</strong><br />hibernate.dialect net.sf.hibernate.dialect.MySQLDialect <br />hibernate.connection.driver_class org.gjt.mm.mysql.Driver 数据库驱动 <br />hibernate.connection.url jdbc:mysql:///sports 数据库名 <br />hibernate.connection.username admin 用户名 <br />hibernate.connection.password 123 密码 <br /><br /><strong>数据库连接池参数</strong><br />hibernate.connection.pool_size 1 <br />hibernate.statement_cache.size 25 <br /><br /><strong>Hibernate的CRUD性能配置</strong><br />hibernate.jdbc.fetch_size 50 <br />hibernate.jdbc.batch_size 25 </p>
		<p>　　该项设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数。当然Fetch Size设的越大，读数据库的次数越少，速度越快；Fetch Size越小，读数据库的次数越多，速度越慢。 <br /><br />　　Batch Size是设定对数据库进行批量删除，批量更新和批量插入的时候的批次大小，有点相当于设置Buffer缓冲区大小的意思。Batch Size越大，批量操作的向数据库发送sql的次数越少，速度就越快。 <br /><br />　　曾经极力推荐公司采用hibernate来做某项目，经过公司认真的讨论后还是放弃使用。原因是公司中那些闭着眼睛都可以写出几百行SQL语句的"高手"们，他们一致反对，那天我理解了势单力孤的概念。呵~~也许是他们并没有真正了解面向对象的概念，也许是他们还接受不了不写SQL了编程方式。是啊，一个写了Ｎ年SQL语句的程序员，突然有一天你对他说请不要使用SQL操纵数据库，唔，或许他都不会编程了呢！<br /><br />　　写于<strong>2004-08-12</strong></p>
<img src ="http://www.blogjava.net/hiswing/aggbug/62182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-07 14:54 <a href="http://www.blogjava.net/hiswing/archive/2006/08/07/62182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate研究-1</title><link>http://www.blogjava.net/hiswing/archive/2006/08/07/62179.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Mon, 07 Aug 2006 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/07/62179.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/62179.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/07/62179.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/62179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/62179.html</trackback:ping><description><![CDATA[　　记得第一次接触O/R Mapping的时候，是在2003年夏天浙大的计算机学院的教室里。当时由《Refactoring》译者之一熊节先生讲述了《重构》的魅力。而另一位，也就是讲O/R Mapping的大师认真仔细的讲述了他对O/R Mapping的理解，并以他从前做过的一个项目为例，全方位的展示了对象关系映射的威力与魅力。(很遗憾，由于大师讲的实在精彩，以至于我过于专心听讲，竟然忘记了他的名字，罪过罪过，这里姑且就叫他大师吧)那次讲座确实给我留下了深刻的印象。O/R Mapping的工具有很多，如Hibernate，TopLink，JDO等等，我选择Hibernate，因为它的功能非常强大，更因为它是开源项目。下面就从一些最基本的概念开始吧！<br /><br />　　O/R Mapping -- Object Relational Mapping（对象关系映射）的缩写。通俗点讲，就是将对象与关系数据库绑定，用对象来表示关系数据。在O/R Mapping的世界里，有两个基本的也是重要的东东需要了解，即VO，PO。<br /><br />　　VO，值对象(Value Object)，PO，持久对象(Persisent Object)，它们是由一组属性和属性的get和set方法组成。从结构上看，它们并没有什么不同的地方。但从其意义和本质上来看是完全不同的。<br /><br />１．VO是用new关键字创建，由GC回收的。 <br />　　PO则是向数据库中添加新数据时创建，删除数据库中数据时削除的。并且它只能存活在一个数据库连接中，断开连接即被销毁。 <br />２．VO是值对象，精确点讲它是业务对象，是存活在业务层的，是业务逻辑使用的，它存活的目的就是为数据提供一个生存的地方。 <br />　　PO则是有状态的，每个属性代表其当前的状态。它是物理数据的对象表示。使用它，可以使我们的程序与物理数据解耦，并且可以简化对象数据与物理数据之间的转换。<br />３．VO的属性是根据当前业务的不同而不同的，也就是说，它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。 <br />　　PO的属性是跟数据库表的字段一一对应的。<br /><br /><br />　　<strong>写于2004-08-11</strong><img src ="http://www.blogjava.net/hiswing/aggbug/62179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-07 14:51 <a href="http://www.blogjava.net/hiswing/archive/2006/08/07/62179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>揭开velocity取值的秘密</title><link>http://www.blogjava.net/hiswing/archive/2006/08/03/61535.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Thu, 03 Aug 2006 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/03/61535.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/61535.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/03/61535.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/61535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/61535.html</trackback:ping><description><![CDATA[　　在利用velocity进行项目开发的过程中，很多人因为在页面取值时是使用javabean的方法还是属性争论不休。( ${obj.getName()} / ${obj.name} )今天我们就来揭开velocity取值的面纱。<br /><br />首先看一下Velocity的取值方式，有一个对象Customer: 
<div class="UBBPanel"><div class="UBBContent"><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"><img id="Codehighlighter1_22_97_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_97_Open_Text.style.display='none'; Codehighlighter1_22_97_Closed_Image.style.display='inline'; Codehighlighter1_22_97_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_97_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_22_97_Closed_Text.style.display='none'; Codehighlighter1_22_97_Open_Image.style.display='inline'; Codehighlighter1_22_97_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Customer </span><span id="Codehighlighter1_22_97_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_22_97_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String address;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">省略get set<img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /></span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span></div></div></div><br />将这个对象放入Velocity的上下文Context中： 
<div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">context.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">customer</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, customer);</span></div></div></div><br />我们在jsp页面上取这个消费者的地址和名字时就要如下这样写： 
<div class="UBBPanel"><div class="UBBContent">$!customer.address<br />$!customer.name</div></div><br />或者 
<div class="UBBPanel"><div class="UBBContent">$!customer.getAddress()<br />$!customer.getName()</div></div><br />我们注意到使用$!customer.address属性和使用$!customer.getAddress()方法具有相同效果。当然，我们更倾向于使用$!customer.getAddress()方法而不使用$!customer.address属性的方式，那么这两种调用方式是否有区别呢？我们来看看下面这个例子，还是以Customer为例，不同的是这里将Customer的getAddress方法的返回值设置为定数“123”，如下： 
<div class="UBBPanel"><div class="UBBContent"><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"><img id="Codehighlighter1_27_46_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_46_Open_Text.style.display='none'; Codehighlighter1_27_46_Closed_Image.style.display='inline'; Codehighlighter1_27_46_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_46_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_46_Closed_Text.style.display='none'; Codehighlighter1_27_46_Open_Image.style.display='inline'; Codehighlighter1_27_46_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getAddress() </span><span id="Codehighlighter1_27_46_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_27_46_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">123</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />在另一class中调用该对象为其赋值并将其置入Velocity的上下文Context中： 
<div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Customer customer </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Customer();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />customer.setAddress(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />customer.setName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">junesky.org</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />context.put(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">customer</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, customer);</span></div></div></div><br />这时我们在页面上利用$!customer.address属性和使用$!customer.getAddress()方法取到的值是什么？是否相同呢？考虑到在getAddress()方法中返回的值与address属性实际的值并不相同，也许你会觉得取到的值不相同。看看结果： 
<div class="UBBPanel"><div class="UBBContent">$!customer.address = 123<br />$!customer.getAddress() = 123</div></div><br />唔，是相同的。并且利用$!customer.getAddress()方法取到的值并不是我们设置的abc。再看一个例子,与上例基本相同,不同之处是将Customer的address属性名改为addressTest: 
<div class="UBBPanel"><div class="UBBContent"><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"><img id="Codehighlighter1_22_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_157_Open_Text.style.display='none'; Codehighlighter1_22_157_Closed_Image.style.display='inline'; Codehighlighter1_22_157_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_157_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_22_157_Closed_Text.style.display='none'; Codehighlighter1_22_157_Open_Image.style.display='inline'; Codehighlighter1_22_157_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Customer </span><span id="Codehighlighter1_22_157_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_22_157_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String addressTest;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 注意这里方法名</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_124_155_Open_Image" onclick="this.style.display='none'; Codehighlighter1_124_155_Open_Text.style.display='none'; Codehighlighter1_124_155_Closed_Image.style.display='inline'; Codehighlighter1_124_155_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_124_155_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_124_155_Closed_Text.style.display='none'; Codehighlighter1_124_155_Open_Image.style.display='inline'; Codehighlighter1_124_155_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">   </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getAddress() </span><span id="Codehighlighter1_124_155_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_124_155_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> addressTest;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></div></div><br />这时，在页面上利用属性$!customer.addressTest是取不到值的，利用$!customer.address和$!customer.getAddress()方法是可以取到的。<br /><br />　　根据以上两个例子，我们明白了Velocity的调用机制--无论使用属性还是使用方法，实际上都是调用对象的方法的。所以，在使用Velocity开发时，我们就不必为了使用属性方式还是使用方法而争论不休了。<img src ="http://www.blogjava.net/hiswing/aggbug/61535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-03 16:42 <a href="http://www.blogjava.net/hiswing/archive/2006/08/03/61535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取web.xml中参数的几种方法</title><link>http://www.blogjava.net/hiswing/archive/2006/08/02/61372.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Wed, 02 Aug 2006 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/08/02/61372.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/61372.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/08/02/61372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/61372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/61372.html</trackback:ping><description><![CDATA[　　为了在web容器启动时运行指定的类，我们可以在web.xml中配置一个自定义的servlet，复写init方法即可，如下：<br />web.xml<br /><div class="UBBPanel"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">tychoLoader</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">org.junesky.tycho.servlet.TychoLoaderServlet</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">3</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span></div><br />TychoLoaderServlet.java<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_52_188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_188_Open_Text.style.display='none'; Codehighlighter1_52_188_Closed_Image.style.display='inline'; Codehighlighter1_52_188_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_52_188_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_52_188_Closed_Text.style.display='none'; Codehighlighter1_52_188_Open_Image.style.display='inline'; Codehighlighter1_52_188_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> TychoLoaderServlet </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> HttpServlet </span><span id="Codehighlighter1_52_188_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_52_188_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_121_147_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_147_Open_Text.style.display='none'; Codehighlighter1_121_147_Closed_Image.style.display='inline'; Codehighlighter1_121_147_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_121_147_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_121_147_Closed_Text.style.display='none'; Codehighlighter1_121_147_Open_Image.style.display='inline'; Codehighlighter1_121_147_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> init(ServletConfig config) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> ServletException </span><span id="Codehighlighter1_121_147_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_121_147_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在这里做相应的处理</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_180_186_Open_Image" onclick="this.style.display='none'; Codehighlighter1_180_186_Open_Text.style.display='none'; Codehighlighter1_180_186_Closed_Image.style.display='inline'; Codehighlighter1_180_186_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_180_186_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_180_186_Closed_Text.style.display='none'; Codehighlighter1_180_186_Open_Image.style.display='inline'; Codehighlighter1_180_186_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> destroy() </span><span id="Codehighlighter1_180_186_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_180_186_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />在启动时，若要为其配置相应的参数又该如何处理呢？以下介绍几种常用的方法。<br /><br />1、在servlet中获取参数：<br />web.xml<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img 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"><br /><img 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">tychoLoader</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"><br /><img 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.junesky.tycho.servlet.TychoLoaderServlet</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"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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"><br /><img 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">filename</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"><br /><img 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">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">config</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">constants.properties</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 /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">load</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">on</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">startup</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">load</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">on</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">startup</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><img 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></div><br />TychoLoaderServlet.java<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_52_328_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_328_Open_Text.style.display='none'; Codehighlighter1_52_328_Closed_Image.style.display='inline'; Codehighlighter1_52_328_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_52_328_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_52_328_Closed_Text.style.display='none'; Codehighlighter1_52_328_Open_Image.style.display='inline'; Codehighlighter1_52_328_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> TychoLoaderServlet </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> HttpServlet </span><span id="Codehighlighter1_52_328_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_52_328_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_121_287_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_287_Open_Text.style.display='none'; Codehighlighter1_121_287_Closed_Image.style.display='inline'; Codehighlighter1_121_287_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_121_287_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_121_287_Closed_Text.style.display='none'; Codehighlighter1_121_287_Open_Image.style.display='inline'; Codehighlighter1_121_287_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> init(ServletConfig config) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> ServletException </span><span id="Codehighlighter1_121_287_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_121_287_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.init(config);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 利用ServletConfig的getInitParameter来获取参数</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        String filename </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> config.getInitParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">filename</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ……<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_320_326_Open_Image" onclick="this.style.display='none'; Codehighlighter1_320_326_Open_Text.style.display='none'; Codehighlighter1_320_326_Closed_Image.style.display='inline'; Codehighlighter1_320_326_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_320_326_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_320_326_Closed_Text.style.display='none'; Codehighlighter1_320_326_Open_Image.style.display='inline'; Codehighlighter1_320_326_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> destroy() </span><span id="Codehighlighter1_320_326_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_320_326_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />2、在jsp中获取参数：<br />web.xml<br /></div><div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">context-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">filename</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">config/constants.properties</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">context-param</span><span style="COLOR: #0000ff">&gt;</span></div><br />jsp</div></div><div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">String filename </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(application.getInitParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">filename</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));</span></div></div></div><br />3、在struts中获取参数：<br />web.xml<br /><div class="UBBPanel"><div class="UBBContent"><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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">action</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">org.junesky.tycho.servlet.EncodeActionServlet</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">config</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/WEB-INF/config/struts-config.xml</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">debug</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">3</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">detail</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">3</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">param-value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">init-param</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">2</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span></div></div></div><br />ContorlSysInfoAction.java<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_54_477_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_477_Open_Text.style.display='none'; Codehighlighter1_54_477_Closed_Image.style.display='inline'; Codehighlighter1_54_477_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_54_477_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_477_Closed_Text.style.display='none'; Codehighlighter1_54_477_Open_Image.style.display='inline'; Codehighlighter1_54_477_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ContorlSysInfoAction </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> TychoAction </span><span id="Codehighlighter1_54_477_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_54_477_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ActionForward execute(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    ActionMapping mapping, <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    ActionForm form,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    HttpServletRequest request, <br /><img id="Codehighlighter1_203_475_Open_Image" onclick="this.style.display='none'; Codehighlighter1_203_475_Open_Text.style.display='none'; Codehighlighter1_203_475_Closed_Image.style.display='inline'; Codehighlighter1_203_475_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_203_475_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_203_475_Closed_Text.style.display='none'; Codehighlighter1_203_475_Open_Image.style.display='inline'; Codehighlighter1_203_475_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    HttpServletResponse response) </span><span id="Codehighlighter1_203_475_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_203_475_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_218_393_Open_Image" onclick="this.style.display='none'; Codehighlighter1_218_393_Open_Text.style.display='none'; Codehighlighter1_218_393_Closed_Image.style.display='inline'; Codehighlighter1_218_393_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_218_393_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_218_393_Closed_Text.style.display='none'; Codehighlighter1_218_393_Open_Image.style.display='inline'; Codehighlighter1_218_393_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_218_393_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_218_393_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            javax.servlet.ServletConfig config </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.getServlet().getServletConfig();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">******</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> config.getInitParameter(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">config</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img id="Codehighlighter1_416_417_Open_Image" onclick="this.style.display='none'; Codehighlighter1_416_417_Open_Text.style.display='none'; Codehighlighter1_416_417_Closed_Image.style.display='inline'; Codehighlighter1_416_417_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_416_417_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_416_417_Closed_Text.style.display='none'; Codehighlighter1_416_417_Open_Image.style.display='inline'; Codehighlighter1_416_417_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception ex) </span><span id="Codehighlighter1_416_417_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_416_417_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> mapping.findForward(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">success</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />根据使用的框架不同，取得方法都不仅相同。这里仅仅列出几种较常用的方法供大家参考。 <img src ="http://www.blogjava.net/hiswing/aggbug/61372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-08-02 18:24 <a href="http://www.blogjava.net/hiswing/archive/2006/08/02/61372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Velocity处理Struts的验证信息</title><link>http://www.blogjava.net/hiswing/archive/2006/07/29/60676.html</link><dc:creator>hiswing</dc:creator><author>hiswing</author><pubDate>Fri, 28 Jul 2006 16:30:00 GMT</pubDate><guid>http://www.blogjava.net/hiswing/archive/2006/07/29/60676.html</guid><wfw:comment>http://www.blogjava.net/hiswing/comments/60676.html</wfw:comment><comments>http://www.blogjava.net/hiswing/archive/2006/07/29/60676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hiswing/comments/commentRss/60676.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hiswing/services/trackbacks/60676.html</trackback:ping><description><![CDATA[　　Velocity它那出色的模板引擎可以帮助我们减少很多不必要的编码工作，并使逻辑性代码更加优美地放置在了后台javabean中，从而渐渐成为java程序员们口的谈论的话题。更多的时候，我们把它与Struts联手作为web应用的表现层来使用。关于Velocity与Struts的配置可以参见《<a id="viewpost1_TitleUrl" href="/hiswing/articles/60672.html">使用Struts和Velocity开发web应用</a>》。本文要讨论的话题是利用Velocity来处理Struts的验证信息。<br /><br />　　我们经常利用Struts的ActionForm提供的验证服务(validate)来检查页面上输入的信息。当输入的信息不符合检验标准时，返回一个装载了错误信息的错误对象，如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_42_550_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_550_Open_Text.style.display='none'; Codehighlighter1_42_550_Closed_Image.style.display='inline'; Codehighlighter1_42_550_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_42_550_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_550_Closed_Text.style.display='none'; Codehighlighter1_42_550_Open_Image.style.display='inline'; Codehighlighter1_42_550_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> LoginForm </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> ActionForm </span><span id="Codehighlighter1_42_550_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_42_550_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_111_141_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_141_Open_Text.style.display='none'; Codehighlighter1_111_141_Closed_Image.style.display='inline'; Codehighlighter1_111_141_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_111_141_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_141_Closed_Text.style.display='none'; Codehighlighter1_111_141_Open_Image.style.display='inline'; Codehighlighter1_111_141_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setName(String name) </span><span id="Codehighlighter1_111_141_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_111_141_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img id="Codehighlighter1_176_206_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_206_Open_Text.style.display='none'; Codehighlighter1_176_206_Closed_Image.style.display='inline'; Codehighlighter1_176_206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_176_206_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_206_Closed_Text.style.display='none'; Codehighlighter1_176_206_Open_Image.style.display='inline'; Codehighlighter1_176_206_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_176_206_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_176_206_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ActionErrors validate(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        ActionMapping mapping,<br /><img id="Codehighlighter1_304_548_Open_Image" onclick="this.style.display='none'; Codehighlighter1_304_548_Open_Text.style.display='none'; Codehighlighter1_304_548_Closed_Image.style.display='inline'; Codehighlighter1_304_548_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_304_548_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_304_548_Closed_Text.style.display='none'; Codehighlighter1_304_548_Open_Image.style.display='inline'; Codehighlighter1_304_548_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        HttpServletRequest request) </span><span id="Codehighlighter1_304_548_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_304_548_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 生成错误对象</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">          ActionErrors errs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ActionErrors();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 名称不可为空</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_441_514_Open_Image" onclick="this.style.display='none'; Codehighlighter1_441_514_Open_Text.style.display='none'; Codehighlighter1_441_514_Closed_Image.style.display='inline'; Codehighlighter1_441_514_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_441_514_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_441_514_Closed_Text.style.display='none'; Codehighlighter1_441_514_Open_Image.style.display='inline'; Codehighlighter1_441_514_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">          </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">||</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">.equals(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name)) </span><span id="Codehighlighter1_441_514_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_441_514_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            errs.add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ActionMessage(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">msg.name.empty</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />          }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> errs;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />　　只要在struts-config.xml action的配置中加入input="/login.jsp"，并在页面上利用Struts 标签&lt;html:errors property="name"/&gt;就可以将ApplicationResources.properties中所定义的错误信息显示出来。这是Struts的传统做法。那么在Velocity中该如何处理这种情况呢？方法很简单，只要配置Velocity的toolbox.xml并将相应的.jar文件放在lib下面即可。关于toolbox.xml的详细配置请参见《<a id="viewpost1_TitleUrl" href="/hiswing/archive/2006/08/21/64746.html">Velocity中使用Struts的国际化文件</a>》。通过该文我们知道了Velocity为Struts的错误信息提供了专用的类org.apache.velocity.tools.struts.ErrorsTool。还是上面的例子，我们只要将页面中的&lt;html:errors property="name"/&gt;改为$!{errors.get("name")}即可。<img src ="http://www.blogjava.net/hiswing/aggbug/60676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hiswing/" target="_blank">hiswing</a> 2006-07-29 00:30 <a href="http://www.blogjava.net/hiswing/archive/2006/07/29/60676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>