﻿<?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-★yesjoy★-文章分类-Spring学习</title><link>http://www.blogjava.net/yesjoy/category/17091.html</link><description>&lt;font color="red"&gt;★&lt;/font&gt;&lt;font color="blue"&gt;总在爬山 所以艰辛;总在寻梦 所以苦痛&lt;/font&gt;&lt;font color="red"&gt;★&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 06 Sep 2010 04:38:44 GMT</lastBuildDate><pubDate>Mon, 06 Sep 2010 04:38:44 GMT</pubDate><ttl>60</ttl><item><title>Spring MVC框架的高级配置</title><link>http://www.blogjava.net/yesjoy/articles/107020.html</link><dc:creator>★yesjoy★</dc:creator><author>★yesjoy★</author><pubDate>Wed, 28 Mar 2007 08:57:00 GMT</pubDate><guid>http://www.blogjava.net/yesjoy/articles/107020.html</guid><wfw:comment>http://www.blogjava.net/yesjoy/comments/107020.html</wfw:comment><comments>http://www.blogjava.net/yesjoy/articles/107020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yesjoy/comments/commentRss/107020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yesjoy/services/trackbacks/107020.html</trackback:ping><description><![CDATA[
		<span class="h1b">Spring MVC框架的高级配置<br /><br /></span>转贴来自：<a href="http://dev2dev.bea.com.cn/techdoc/2006068810.html">http://dev2dev.bea.com.cn/techdoc/2006068810.html</a><br /><br /><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td height="64">时间：2006-06-08<br />作者：<a href="http://dev2dev.bea.com.cn/author/516.html">Dejan Bosanac</a><br />浏览次数：
<script language="JavaScript" src="/beadevcount.jsp?d_id=162307" type="text/JavaScript"></script>
 7201 <br />本文关键字：<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=Spring">Spring</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=configuration">configuration</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=source control">source control</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=CVS">CVS</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=subversion">subversion</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=配置">配置</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=源代码控制">源代码控制</a></td><td><table class="box_content" cellspacing="0" cellpadding="0" border="0"><tbody><tr><td><span class="h2b">文章工具</span><br /><img height="10" alt="推荐给朋友" src="http://dev2dev.bea.com.cn/images/letter001.gif" width="19" align="absMiddle" /> <a href="javascript:sendmail()">推荐给朋友</a><br /><img height="18" alt="打印文章" src="http://dev2dev.bea.com.cn/images/print001.gif" width="19" align="absMiddle" /> <a href="javascript:window.print()">打印文章</a></td></tr></tbody></table></td></tr></tbody></table><!-- 提取技术文章 --><div class="beas"><img height="1" alt="" src="http://dev2dev.bea.com.cn/images/dot6B6B6B.gif" width="100%" /></div><p>　　本文将为您提供关于<a href="http://www.springframework.org/" target="_blank">Spring MVC框架</a>的配置技巧，以帮助管理基于Spring的web应用程序的多个实例。本配置管理主题常被学术界所忽略，但是，这对于现实的web开发尤为重要。本主题并不直接关联任何具体的技术，因此，我们将从最基本的概念开始对这个问题进行说明。下面，我们将根据Spring MVC框架，为基于本技术开发的项目提供一系列的解决方案。</p><h1>Spring配置</h1><p>　　人们经常会在一台以上的主机上配置一种Web应用程序。例如，在生产中，一个网站可能只有一个实例。除了此实例外，开发人员可以在用于开发的机器上配置其他的（开发）实例。也可以在公司（机构）内部的本地开发服务器上维护其他应用程序装置，这将让您受益匪浅。该实例的目的是使Web设计者可以获得有质量保证的材料，并为需要为应用程序提供文件资料的人提供准入。</p><p>　　大家都知道，即使是最简单的场景，也需要安装、配置和维护三个实例。而对于位于不同地理位置的团队来说，要从事这样的项目便更加困难。对于任何不是特别简单的Web应用程序项目，都需要多名开发人员来安装项目装置和本地设置以及运行单元测试的装置等。</p><p>　　很多组织都将自己开发的产品作为Web应用程序。我们可以在很多产品中发现这种情况，例如电子商务系统、<a href="http://www.onjava.com/pub/a/onjava/2006/03/22/advanced-spring-configuration.html" target="_blank">内容管理</a>系统（CMS），以及博客发布平台等。这类产品可在多个服务器中进行部署。对于成功的多用途Web应用程序来说，他们的开发人员必须要保证他们的应用程序便于安装，并且能够与其他Web应用程序完美集成。经过上述讨论之后，我们应该明了，作为本文主题的应用程序配置是通用Web应用程序项目开发人员所需要解决的重要问题之一。</p><p>　　诸如CVS或Subversion之类的版本控制系统是开发组织使用的一种标准工具。这种工具代表了一些组织的中心源代码版本库，它们被用于保持源代码的有序。用户可以跟踪应用程序源代码的变化，显示不同版本的区别，并可以确定项目分支。而且，它们使得在应用程序部署中进行部分更新成为可能。</p><p>　　很明显，版本控制系统软件是跟踪源代码所必需的，它对于解决应用程序配置问题有非常大的帮助。在本文中，我们将不会把重点放在版本控制系统上，因为这方面已经有很多相关的材料了。在此，我们将关注版本控制问题中的一个小话题：如何使Web应用程序的配置更加便捷（尤其是使用Spring MVC框架编写的Web应用程序）。</p><p>　　问题是：我们在此讨论的是一种什么样的配置？任何Web应用程序都需要一些资源，这些资源通常都是其所运行的服务器所特有的，例如数据库URL、发送电子邮件的SMTP服务器，以及包含专用软件文件的文件夹等。这样的设置应该集中，从而使应用程序配置更加简单。</p><p>　　但是，这只是这个问题最简单的一种版本。有时候，在应用程序开发中需要更加复杂的配置。这意味着，必须将各次部署中的不同Bean连接起来，而这会使问题更加复杂。</p><p>　　这些应用程序配置问题的解决方案有诸多优势，包括：简化应用程序的安装和配置过程，使源代码版本控制更加简便，减少源代码版本库中的冲突现象。下面，我们将通过示例详细讨论这个话题。</p><h1>问题</h1><p>　　我们首先来演示一下上文所提到的最简单的版本。在这一场景中，我们希望在应用程序部署中改变的是简单的配置参数，例如链接、密码等。如果您曾经使用Spring MVC框架开发过Web应用程序，那么您应该知道这里将用到的两个配置文件：</p><ul><li>/WEB-INF/applicationContext.xml，它让您可以配置Bean，或者显示应用程序上下文。通过这个文件，您可以定义自己的业务逻辑Bean、资源以及其他可以与Web端口相关联的所有Bean。 
</li><li>/WEB-INF/<strong>[servlet-name]</strong>-servlet.xml，它被用于配置Web层、视图解析器、控制器、校验器以及其他所有MVC框架中必需的Bean。<strong>[servlet-name]指的是在</strong>web.xml部署描述符中定义的<strong>Spring </strong>dispatcher servlet的名称。 </li></ul><p>　　那么问题在哪儿呢？问题就出在applicationContext.xml中将包括一些特定于主机的Bean定义。其中，最明显的一个示例就是包含了JDBC连接信息的bean，但是任何一种稍微复杂些的应用程序都有十几个类似的Bean。看一下下面的示例：</p><pre class="code"><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">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</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: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.springframework.jdbc.datasource.DriverManagerDataSource</span><span style="COLOR: #000000">"</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">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">driverClassName</span><span style="COLOR: #000000">"</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">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">org.postgresql.Driver</span><span style="COLOR: #000000">&lt;/</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">property</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">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">url</span><span style="COLOR: #000000">"</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">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">jdbc:postgresql:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">localhost/test&lt;/value&gt;</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">   </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">property</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">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">username</span><span style="COLOR: #000000">"</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">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">postgres</span><span style="COLOR: #000000">&lt;/</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">property</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">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&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">value</span><span style="COLOR: #000000">&gt;&lt;/</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">property</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">bean</span><span style="COLOR: #000000">&gt;</span></div></pre><p>　　这个解决方案的问题在于对applicationContext.xml文件的维护。对于初学者来说，设想一下，项目放在源代码版本控制系统中，例如CVS。下面，假设您希望在网站中添加新的功能，那么就需要在应用程序上下文定义中添加额外的Bean定义。问题是如何在生产服务器上体现这些改变。</p><p>　　通常情况下，应用程序的本地实例不会与活动站点使用同样的数据库，因此applicationContext.xml文件将包括让您能够访问本地数据库的设置。当您想提交在源代码版本库中的改变时，就需要注意这些特定于主机属性的同步性。版本库中的文件最终可能使用本地设置中的配置。如果想在生产服务器上更新配置，就必须手动同步这些属性的值。这是非常枯燥的任务，而且还非常容易出错。</p><p>　　对于应用程序的每个实例来说，这个问题更加重要。假如有三位开发人员正在使用代码段基址，而且他们使用的是本地的数据库。当您提交更改的时候，他们每个人在本地服务器上更新源代码的时候都必须非常谨慎。他们会手动同步这些更改，然后提交他们的工作。这样一来，版本控制系统对于这些配置文件来说已经毫无用处。如果曾经使用过Spring MVC，那么您应该知道applicationContext.xml是应用程序中的关键组件，因为是它将所有的东西粘合在一起。所以，我们需要一种机制来帮助使应用程序中各项保持有序，这点非常重要。</p><p>　　正如前面所提到的，这是您可能遇到的较简单的配置问题。更难的问题出现在当需要在不同服务器中进行不同的Bean连接的时候。这类问题常会出现在日常软件开发任务中。例如，假如您的产品有一个客户身份验证模块，可以对来自关系数据库或LDAP服务器中的用户进行身份验证。自然，这一身份验证模块可以使用抽象了特定版本库的Bean进行配置。如果您想改变不同应用程序部署中验证用户的方式，就需要在applicationContext.xml文件中进行不同的Bean连接。这种配置问题常见于在部署中有可配置特性的所有应用程序。</p><p>　　在下文中，我们将讨论这两种配置问题。首先我们会关注同步的Bean属性问题及其解决方案，接下来，我们会讨论更加复杂的同步Bean连接问题。</p><h1>解决方案</h1><h3>同步Bean属性</h3><p>　　这个问题的一种可行的解决方案是将所有特定于主机的参数都放到普通的Java属性文件中，使用Spring的PropertyPlaceHolderConfigurer类，将这些参数写入Bean属性中。</p><p>　　使用这一解决方案，我们可以生成如下的属性文件（/WEB-INF/jdbc.properties）：</p><pre class="code"> <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">jdbc.driver=org.postgresql.Driver<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />jdbc.url=jdbc:postgresql://localhost/test<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />jdbc.user=postgres<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />jdbc.password=<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div></pre><p>　　我们的Bean配置如下：</p><pre class="code"><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">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="propertyConfigurer"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> class</span><span style="COLOR: #0000ff">="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</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">="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">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/WEB-INF/jdbc.properties</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">bean</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">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="dataSource"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> class</span><span style="COLOR: #0000ff">="org.springframework.jdbc.datasource.DriverManagerDataSource"</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">="driverClassName"</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.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">="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" />         </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${jdbc.url}</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">="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" />         </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${jdbc.user}</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">="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" />         </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${jdbc.password}</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">bean</span><span style="COLOR: #0000ff">&gt;</span></div></pre><p>　　如上所述，我们定义了一个PropertyPlaceholderConfigurer类的实例，并将其位置属性设置为我们的属性文件。该类被实现为Bean工厂的后处理器，并将使用定义在文件中的属性来代替所有的占位符（${...}value）。</p><p>　　利用这种技术，我们可以从applicationContext.xml中移除所有特定于主机的配置属性。通过这种方式，我们可以自由地为该文件添加新的Bean，而不必担心特定于主机属性的同步性。这样可以简化生产部署和维护。</p><h3>同步性连接</h3><p>　　上面的技术解决了第一个问题，可是如果您计划修改不同应用程序部署之间的Bean连接，这一技术便不很适合。针对这一问题的一个解决方案便是额外创建一个名为applicationContext-<strong>[hostname]</strong>.xml 的XML定义文件。其中<strong>[hostname]</strong>是部署应用程序的主机的名称。例如，在本地的机器上，这个文件通常名为applicationContext-<strong>localhost</strong>.xml，而在部署时，它可能更名为applicationContext-<strong>somehost.com</strong>.xml。</p><p>　　可以猜测，这一文件必须包括特定于某一主机的所有配置Bean。在本文中，我们将假设dataSource bean定义将位于这类文件中，而不是通用的applicationContext.xml定义。当然，这种机制与前者并非冲突，但是为了更加简单明了，我们将只关注这种方法。</p><p>　　既然我们已经有了特定的配置，下面我们就来讨论一下如何将其整合到整个Spring MVC配置概念中。要达到这一目的，可以有许多方法，我们将详细地一一说明。但首先，我们应该注意到，由于有些Bean可能位于独立的配置文件中，因此在applicationContext.xml中，所有对它们的局部引用都必须更换成全局名称。</p><p>　　例如，如下引用：</p><pre class="code"><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">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="someProperty"</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">ref </span><span style="COLOR: #ff0000">local</span><span style="COLOR: #0000ff">="someBean"</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></pre><p>　　应更改为：</p><pre class="code"><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">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="someProperty"</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">ref </span><span style="COLOR: #ff0000">bean</span><span style="COLOR: #0000ff">="someBean"</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></pre><p>　　在这之后，我们有很多可以添加额外的资源以用于配置的方式。其中最明显的就是使用&lt;import&gt;标签将这一额外资源包含在applicationContext.xml配置文件中。使用时，要将该标签放在applicationContext.xml文件开头。例如：</p><pre class="code"><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">import </span><span style="COLOR: #ff0000">resource</span><span style="COLOR: #0000ff">="applicationContext-somehost.com.xml"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> </span></div></pre><p>　　现在，在独立的XML定义文件和普通的应用程序上下文定义文件中的所有通用Bean定义都有了特定于主机的连接。由于大多数的Bean都不是特定于主机的，因此我们可以像处理Web应用程序中的其他资源一样自由地处理applicationContext.xml文件，并可以通过合适的版本控制系统与其进行同步。</p><p>　　但是，上述方法也有一定的弊端。如果您想保留不同XML文件的不同配置，就仍然必须担心applicationContext.xml的同步性，因为资源的名称必须根据不同服务器进行更改。虽然与原有的解决方案相比有了很大提高，只需更改文件名，但是这还是需要开发人员的手动协助。</p><p>　　由于与applicationContext.xml相比，主机配置不需如此频繁地进行更改，因此下一步便是将主机配置移动到web.xml文件中（如果可能的话）。幸运的是，我们有一个可用的解决方案。看一下下面关于web.xml配置的片断：</p><pre class="code"><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">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"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    org.springframework.web.context.ContextLoaderListener<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"><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">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"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    /WEB-INF/applicationContext.xml <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />       /WEB-INF/applicationContext-somehost.com.xml<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"><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></pre><p>　　正如您所看到的，除了web.xml文件中常有的ContextLoaderListener之外，我们还添加了contextConfigLocation上下文参数配置。这一参数用于指示框架查找这些配置文件的位置。如果这一参数被省略，则Spring就只能到applicationContext.xml中查找。这里我们也定义了特定于主机的配置文件来使用。</p><p>　　利用这种方法，我们将所有特定于主机的配置从applicationContext.xml文件中移除，这样便减轻了其在不同应用程序部署中的同步性。</p><p>　　如果这种方法成为您的新习惯，您还可以使其更加灵活。通过遵守下列指令，也可以将特定于主机的配置从web.xml文件中移除。</p><p>　　为此，需要创建特定于我们的应用程序上下文的类：</p><pre class="code"><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"> net.nighttale.spring.util;<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.net.InetAddress;<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"> org.springframework.web.context.support.XmlWebApplicationContext;<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">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> PerHostXmlWebApplicationContext <br /><img id="Codehighlighter1_220_1274_Open_Image" onclick="this.style.display='none'; Codehighlighter1_220_1274_Open_Text.style.display='none'; Codehighlighter1_220_1274_Closed_Image.style.display='inline'; Codehighlighter1_220_1274_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_220_1274_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_220_1274_Closed_Text.style.display='none'; Codehighlighter1_220_1274_Open_Image.style.display='inline'; Codehighlighter1_220_1274_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> XmlWebApplicationContext </span><span id="Codehighlighter1_220_1274_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_220_1274_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img id="Codehighlighter1_282_1272_Open_Image" onclick="this.style.display='none'; Codehighlighter1_282_1272_Open_Text.style.display='none'; Codehighlighter1_282_1272_Closed_Image.style.display='inline'; Codehighlighter1_282_1272_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_282_1272_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_282_1272_Closed_Text.style.display='none'; Codehighlighter1_282_1272_Open_Image.style.display='inline'; Codehighlighter1_282_1272_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> String[] getDefaultConfigLocations() </span><span id="Codehighlighter1_282_1272_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_282_1272_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            String hostname </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">localhost</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_343_426_Open_Image" onclick="this.style.display='none'; Codehighlighter1_343_426_Open_Text.style.display='none'; Codehighlighter1_343_426_Closed_Image.style.display='inline'; Codehighlighter1_343_426_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_343_426_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_343_426_Closed_Text.style.display='none'; Codehighlighter1_343_426_Open_Image.style.display='inline'; Codehighlighter1_343_426_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_343_426_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_343_426_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                hostname </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> InetAddress.getLocalHost().getHostName();<br /><img id="Codehighlighter1_448_462_Open_Image" onclick="this.style.display='none'; Codehighlighter1_448_462_Open_Text.style.display='none'; Codehighlighter1_448_462_Closed_Image.style.display='inline'; Codehighlighter1_448_462_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_448_462_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_448_462_Closed_Text.style.display='none'; Codehighlighter1_448_462_Open_Image.style.display='inline'; Codehighlighter1_448_462_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 e) </span><span id="Codehighlighter1_448_462_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_448_462_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/InBlock.gif" align="top" />            <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            String perHostConfiguration </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> DEFAULT_CONFIG_LOCATION_PREFIX <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                 </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">applicationContext-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                 </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> hostname <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                 </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> DEFAULT_CONFIG_LOCATION_SUFFIX<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/InBlock.gif" align="top" />            logger.debug(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                 </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Adding per host configuration file: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                 </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> perHostConfiguration<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 id="Codehighlighter1_892_1115_Open_Image" onclick="this.style.display='none'; Codehighlighter1_892_1115_Open_Text.style.display='none'; Codehighlighter1_892_1115_Closed_Image.style.display='inline'; Codehighlighter1_892_1115_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_892_1115_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_892_1115_Closed_Text.style.display='none'; Codehighlighter1_892_1115_Open_Image.style.display='inline'; Codehighlighter1_892_1115_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (getNamespace() </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_892_1115_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_892_1115_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_934_1100_Open_Image" onclick="this.style.display='none'; Codehighlighter1_934_1100_Open_Text.style.display='none'; Codehighlighter1_934_1100_Closed_Image.style.display='inline'; Codehighlighter1_934_1100_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_934_1100_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_934_1100_Closed_Text.style.display='none'; Codehighlighter1_934_1100_Open_Image.style.display='inline'; Codehighlighter1_934_1100_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String[] </span><span id="Codehighlighter1_934_1100_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_934_1100_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              DEFAULT_CONFIG_LOCATION_PREFIX <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> getNamespace() <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> DEFAULT_CONFIG_LOCATION_SUFFIX<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />             , perHostConfiguration}</span></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 id="Codehighlighter1_1134_1266_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1134_1266_Open_Text.style.display='none'; Codehighlighter1_1134_1266_Closed_Image.style.display='inline'; Codehighlighter1_1134_1266_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1134_1266_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1134_1266_Closed_Text.style.display='none'; Codehighlighter1_1134_1266_Open_Image.style.display='inline'; Codehighlighter1_1134_1266_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_1134_1266_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_1134_1266_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_1176_1251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1176_1251_Open_Text.style.display='none'; Codehighlighter1_1176_1251_Closed_Image.style.display='inline'; Codehighlighter1_1176_1251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1176_1251_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1176_1251_Closed_Text.style.display='none'; Codehighlighter1_1176_1251_Open_Image.style.display='inline'; Codehighlighter1_1176_1251_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String[] </span><span id="Codehighlighter1_1176_1251_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_1176_1251_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />             DEFAULT_CONFIG_LOCATION<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />              , perHostConfiguration}</span></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/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></pre><p>　　这个类拓展了Spring中常被作为默认值使用的XmlWebApplicationContext。XmlWebApplicationContext类将Web应用程序的配置从XML定义文件中复制过来。默认情况下，它可以配置来自applicationContext.xml和<strong>[servlet-name]</strong>-servlet.xml文件中的应用程序。这个类执行的惟一一项额外任务便是获取它所在的主机名称，并将applicationContext-<strong>[hostname]</strong>.xml文件添加到配置文件列表中。</p><p>　　为了使用这个类，我们需要对其进行编译，将其包含在类途径中，并指示Spring框架使用它。前两步非常简单，我们就不在此赘述。我们可以指示Sping通过contextClass上下文参数来使用它。除了web.xml文件中的原有配置，我们还可以添加下列内容：</p><pre class="code"><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">contextClass</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"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   net.nighttale.spring.util.PerHostXmlWebApplicationContext<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"><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></pre><p>　　如果我们使用这一配置片断，将会有三个文件被用于初始化这个框架：<strong>[servlet-name]</strong>-servlet.xml、applicationContext-<strong>[hostname]</strong>.xml以及applicationContext.xml。</p><p>　　正如您所看到的，applicationContext.xml和web.xml文件已经完全摆脱了任何特定的配置细节，而且您也不必担心会在更新应用程序时破坏配置。</p><p>　　但是，这种方法有一个不足之处。因为，不论是否会使用，都需要在应用程序部署中有第三个配置文件。在这种情况下，便不需要特定于主机的配置。例如：</p><pre class="code"><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 beans PUBLIC "-//SPRING//DTD BEAN//EN" <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    "http://www.springframework.org/dtd/spring-beans.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">beans</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span></div></pre><p>　　最后，需要知道应用程序上下文类需要查找的特定主机名。检查主机名称的最简单的方法是在机器上运行下列代码：</p><pre class="code">System.out.println(InetAddress.getLocalHost().getHostName())</pre><p>　　可以将其作为Java代码执行，也可在喜欢使用的脚本语言（如BeanShell或Groovy）中作为一个具有Java风格语法的脚本执行。在获取了主机的名称之后，应该创建一个默认的/WEB-INF/applicationContext-<strong>[hostname]</strong>.xml空文件夹（如我们上面所定义的），然后便可以开始了。</p><h3>结束语</h3><p>　　在本文中，我们提供了一系列的配置技巧，让您在使用Spring MVC框架完成日常工作的时候更加轻松。如果您希望知道如何维护各种Web应用程序部署，可以试着找出最适合您的开发过程的解决方案。您的生活会更为轻松。</p><h3>参考资料</h3><ul><li><a href="http://www.springframework.org/" target="_blank">Spring framework</a></li></ul><p><b>原文出处:</b><a href="http://www.onjava.com/pub/a/onjava/2006/03/22/advanced-spring-configuration.html" target="_blank">http://www.onjava.com/pub/a/onjava/2006/03/22/advanced-spring-configuration.html</a></p><!--文章其他信息--><div class="dot001"><img height="1" alt="" src="http://dev2dev.bea.com.cn/images/_.gif" width="100%" /></div><table cellspacing="0" cellpadding="3" width="100%" border="0"><tbody><tr valign="bottom"><td colspan="2" height="20"> <span class="h2b">作者简介</span></td></tr><tr><td valign="top" align="middle" width="0"></td><td><a href="http://www.onjava.com/pub/au/1763" target="_blank">Dejan Bosanac</a> 是一位软件开发人员、技术顾问和作者，他主要关注不同技术的整合和协作，尤其是与Java和Web相关的技术</td></tr></tbody></table><img src ="http://www.blogjava.net/yesjoy/aggbug/107020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yesjoy/" target="_blank">★yesjoy★</a> 2007-03-28 16:57 <a href="http://www.blogjava.net/yesjoy/articles/107020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 jodd:form tag</title><link>http://www.blogjava.net/yesjoy/articles/80411.html</link><dc:creator>★yesjoy★</dc:creator><author>★yesjoy★</author><pubDate>Fri, 10 Nov 2006 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/yesjoy/articles/80411.html</guid><wfw:comment>http://www.blogjava.net/yesjoy/comments/80411.html</wfw:comment><comments>http://www.blogjava.net/yesjoy/articles/80411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yesjoy/comments/commentRss/80411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yesjoy/services/trackbacks/80411.html</trackback:ping><description><![CDATA[
		<div class="postcontent">
				<p dir="ltr" style="MARGIN-RIGHT: 0px">
						<font face="Arial" size="2">在</font>
						<a href="http://www.springside.org.cn/">
								<font face="Arial" size="2">SpringSide</font>
						</a>
						<font face="Arial" size="2">里翻到一个好东西： </font>
						<font face="Arial">
								<font size="2">
										<strong>jodd:form<br /><br />"<br /></strong>
										<font color="#0033cc">Jodd Form的使用极其简单，因为太简单了，才会名不见经传而被我们选用，让我们罔顾各大Framework的Form Tag．</font>
								</font>
						</font>
				</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px">
						<font face="Arial" color="#0033cc" size="2">
								<strong>他只要把&lt;form&gt;的头尾以&lt;jodd:form bean= "mybean"&gt;包住即可，就会自动绑定mybean的所有同名属性到普通html标记--input, selectbox, checkbox,radiobox.....在这些input框里不用再写任何代码</strong>
						</font>
				</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px">
						<font face="Arial" color="#0033cc" size="2">
								<strong>可见，它的好处一是节约代码，二是保留了html版的form tag, 不需要用一套taglib来代替</strong>
						</font>
				</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px">
						<font face="Arial" color="#0033cc" size="2">而且支持内嵌对象的绑定，如book.category.name。</font>
				</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px">
						<font face="Arial" color="#0033cc" size="2">比那些需要使用非纯html标记的&lt;ww:input&gt;，逐个绑定input框，select框的Form Tag，虽减了些许灵活性，但实在方便得太厉害。</font>
				</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px">
						<font face="Arial" color="#0033cc" size="2">如果属性来自于request，而不是某个java bean，写&lt;jodd:form bean= "request"&gt;</font>
				</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px">
						<font face="Arial" color="#0033cc" size="2">jodd采用的是普通的bean反射，调用所有属性的toString()函数。</font>
				</p>
				<p dir="ltr" style="MARGIN-RIGHT: 0px">
						<font face="Arial" size="2">
								<font color="#0033cc">注意，jodd在html tag不含value="xxx"属性时才会自动绑定。如果某个input框你不希望jodd自动绑定，或者默认的toString()不能满足要求时，可以手工为该input框写上 value="xxxx"，jodd看到你已经定义了属性值，就会自动绕开。<br /></font>
								<strong>"<br /><br /></strong>
						</font>
				</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 </span>
						<span style="COLOR: #ff0000">name</span>
						<span style="COLOR: #0000ff">="form1"</span>
						<span style="COLOR: #ff0000"> action</span>
						<span style="COLOR: #0000ff">="action.do?method=save"</span>
						<span style="COLOR: #0000ff">/&gt;</span>
						<span style="COLOR: #000000">"  method="post"&gt; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">jodd:form </span>
						<span style="COLOR: #ff0000">bean</span>
						<span style="COLOR: #0000ff">="form1"</span>
						<span style="COLOR: #ff0000"> scope</span>
						<span style="COLOR: #0000ff">="request"</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">table </span>
						<span style="COLOR: #ff0000">class</span>
						<span style="COLOR: #0000ff">="border"</span>
						<span style="COLOR: #ff0000"> width</span>
						<span style="COLOR: #0000ff">="90%"</span>
						<span style="COLOR: #ff0000"> cellSpacing</span>
						<span style="COLOR: #0000ff">=0 </span>
						<span style="COLOR: #ff0000">cellPadding</span>
						<span style="COLOR: #0000ff">=2 </span>
						<span style="COLOR: #ff0000">align</span>
						<span style="COLOR: #0000ff">="center"</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">tr</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">td </span>
						<span style="COLOR: #ff0000">width</span>
						<span style="COLOR: #0000ff">="160"</span>
						<span style="COLOR: #ff0000"> class</span>
						<span style="COLOR: #0000ff">="left"</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">姓名</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">td</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">td </span>
						<span style="COLOR: #ff0000">colspan</span>
						<span style="COLOR: #0000ff">="3"</span>
						<span style="COLOR: #ff0000"> class</span>
						<span style="COLOR: #0000ff">="right"</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">input </span>
						<span style="COLOR: #ff0000">name</span>
						<span style="COLOR: #0000ff">="name"</span>
						<span style="COLOR: #ff0000"> type</span>
						<span style="COLOR: #0000ff">="text"</span>
						<span style="COLOR: #ff0000"> class</span>
						<span style="COLOR: #0000ff">="text"</span>
						<span style="COLOR: #ff0000"> size</span>
						<span style="COLOR: #0000ff">="40"</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">label </span>
						<span style="COLOR: #ff0000">class</span>
						<span style="COLOR: #0000ff">="star"</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">label</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">td</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">tr</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">tr</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">td </span>
						<span style="COLOR: #ff0000">width</span>
						<span style="COLOR: #0000ff">="160"</span>
						<span style="COLOR: #ff0000"> class</span>
						<span style="COLOR: #0000ff">="left"</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">性别</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">td</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">td </span>
						<span style="COLOR: #ff0000">width</span>
						<span style="COLOR: #0000ff">="303"</span>
						<span style="COLOR: #ff0000"> class</span>
						<span style="COLOR: #0000ff">="right"</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">input </span>
						<span style="COLOR: #ff0000">name</span>
						<span style="COLOR: #0000ff">="sex"</span>
						<span style="COLOR: #ff0000"> type</span>
						<span style="COLOR: #0000ff">="text"</span>
						<span style="COLOR: #ff0000"> class</span>
						<span style="COLOR: #0000ff">="text"</span>
						<span style="COLOR: #ff0000"> size</span>
						<span style="COLOR: #0000ff">="40"</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">label </span>
						<span style="COLOR: #ff0000">class</span>
						<span style="COLOR: #0000ff">="star"</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">label</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">td</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">tr</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">table</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">jodd:form</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</span>
						<span style="COLOR: #0000ff">&gt;</span>
				</div>
				<p dir="ltr" style="MARGIN-RIGHT: 0px">确实好用！</p>
		</div>
<img src ="http://www.blogjava.net/yesjoy/aggbug/80411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yesjoy/" target="_blank">★yesjoy★</a> 2006-11-10 15:23 <a href="http://www.blogjava.net/yesjoy/articles/80411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用jodd form简化SpringMVC中Controller的配置 </title><link>http://www.blogjava.net/yesjoy/articles/80409.html</link><dc:creator>★yesjoy★</dc:creator><author>★yesjoy★</author><pubDate>Fri, 10 Nov 2006 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/yesjoy/articles/80409.html</guid><wfw:comment>http://www.blogjava.net/yesjoy/comments/80409.html</wfw:comment><comments>http://www.blogjava.net/yesjoy/articles/80409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yesjoy/comments/commentRss/80409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yesjoy/services/trackbacks/80409.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<p class="MsoNormal">
						<span lang="EN-US">Jodd</span>
						<span style="FONT-FAMILY: 宋体">是一个开源项目，</span>
						<span lang="EN-US" style="COLOR: black">
								<a href="http://jodd.sourceforge.net/">http://jodd.sourceforge.net</a>
						</span>
						<span style="COLOR: black; FONT-FAMILY: 宋体">，</span>
						<span style="FONT-FAMILY: 宋体">有一个好用的</span>
						<span lang="EN-US">jsp</span>
						<span style="FONT-FAMILY: 宋体">标签，可以大大简化有表单输入的</span>
						<span lang="EN-US">controller</span>
						<span style="FONT-FAMILY: 宋体">。</span>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US">
								<?XML:NAMESPACE PREFIX = O /?>
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal">
						<b>
								<span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体">使用</span>
						</b>
						<b>
								<span lang="EN-US" style="FONT-SIZE: 16pt">Jodd</span>
						</b>
						<b>
								<span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体">的优点：</span>
						</b>
						<b>
								<span lang="EN-US" style="FONT-SIZE: 16pt">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>1.<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span></span>&lt;!--[endif]--&gt;<span style="FONT-FAMILY: 宋体">简化和统一</span><span lang="EN-US">controller</span><span style="FONT-FAMILY: 宋体">，抛弃</span><span lang="EN-US">extends SimpleFormController</span><span style="FONT-FAMILY: 宋体">，统一使用</span><span lang="EN-US">implements Controller</span><span style="FONT-FAMILY: 宋体">的方式。</span></p>
				<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>2.<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span></span>&lt;!--[endif]--&gt;<span style="FONT-FAMILY: 宋体">简化</span><span lang="EN-US">JSP</span><span style="FONT-FAMILY: 宋体">页面的</span><span lang="EN-US">bind,</span><span style="FONT-FAMILY: 宋体">不需要一个字段一个字段的绑定。</span></p>
				<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>3.<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal"></span></span></span>&lt;!--[endif]--&gt;<span style="FONT-FAMILY: 宋体">对</span><span lang="EN-US">bean</span><span style="FONT-FAMILY: 宋体">没有任何要求，可以使用任意的</span><span lang="EN-US">bean</span><span style="FONT-FAMILY: 宋体">做为</span><span lang="EN-US">formBean.</span></p>
				<p class="MsoNormal">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal">
						<b>
								<span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体">使用方法简介：</span>
						</b>
						<b>
								<span lang="EN-US" style="FONT-SIZE: 16pt">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>１．</span></span>&lt;!--[endif]--&gt;<span style="FONT-FAMILY: 宋体">把</span><span lang="EN-US">jodd.jar</span><span style="FONT-FAMILY: 宋体">放到</span><span lang="EN-US">web-inf-&gt;lib</span><span style="FONT-FAMILY: 宋体">下，在</span><span lang="EN-US">web.xml</span><span style="FONT-FAMILY: 宋体">里声名标签：</span></p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: teal; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
						</span>
				</p>
				<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)">
						<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">taglib</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />       </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">taglib-uri</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">jodd</span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">taglib-uri</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />       </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">taglib-location</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">/WEB-INF/lib/jodd.jar</span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">taglib-location</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />    </span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">taglib</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
						</span>
				</div>
				<p class="MsoNormal">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: teal; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>２．</span></span>&lt;!--[endif]--&gt;<span style="FONT-FAMILY: 宋体">任意的一个</span><span lang="EN-US">javaBean做为FormBean</span></p>
				<p class="MsoNormal">
						<span lang="EN-US">
						</span>
				</p>
				<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)">
						<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
						<span style="COLOR: rgb(0,0,255)">package</span>
						<span style="COLOR: rgb(0,0,0)"> caike; <br /><br /></span>
						<span style="COLOR: rgb(0,0,255)">public</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,255)">class</span>
						<span style="COLOR: rgb(0,0,0)"> User {<br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">private</span>
						<span style="COLOR: rgb(0,0,0)"> String userName; <br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">private</span>
						<span style="COLOR: rgb(0,0,0)"> String password;<br />      <br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">public</span>
						<span style="COLOR: rgb(0,0,0)"> String getPassword() {<br /><br />              </span>
						<span style="COLOR: rgb(0,0,255)">return</span>
						<span style="COLOR: rgb(0,0,0)"> password;<br /><br />       } <br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">public</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,255)">void</span>
						<span style="COLOR: rgb(0,0,0)"> setPassword(String pwd) {<br /><br />              </span>
						<span style="COLOR: rgb(0,0,255)">this</span>
						<span style="COLOR: rgb(0,0,0)">.password </span>
						<span style="COLOR: rgb(0,0,0)">=</span>
						<span style="COLOR: rgb(0,0,0)"> pwd;<br /><br />       } <br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">public</span>
						<span style="COLOR: rgb(0,0,0)"> String getUserName() {<br /><br />              </span>
						<span style="COLOR: rgb(0,0,255)">return</span>
						<span style="COLOR: rgb(0,0,0)"> userName;<br /><br />       } <br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">public</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,255)">void</span>
						<span style="COLOR: rgb(0,0,0)"> setUserName(String username) {<br /><br />              </span>
						<span style="COLOR: rgb(0,0,255)">this</span>
						<span style="COLOR: rgb(0,0,0)">.userName </span>
						<span style="COLOR: rgb(0,0,0)">=</span>
						<span style="COLOR: rgb(0,0,0)"> username;<br /><br />       }<br /> <br /><br />}<br /></span>
				</div>
				<p class="MsoNormal">
						<span lang="EN-US">
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>３．</span></span>&lt;!--[endif]--&gt;<span style="FONT-FAMILY: 宋体">在</span><span lang="EN-US">JSP</span><span style="FONT-FAMILY: 宋体">页面使用</span><span lang="EN-US">jodd tag:,</span><span style="FONT-FAMILY: 宋体">比如对应用户登录页面的</span></p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,127,127); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
						</span>
				</p>
				<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)">
						<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(255,255,0)">&lt;%</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">@page import</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">=</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">caike.User</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(255,255,0)">%&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />
						</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(255,255,0)">&lt;%</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">@taglib uri</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">=</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">jodd</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)"> prefix</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">=</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">jodd</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(245,245,245)">"</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(255,255,0)">%&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
						</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(255,255,0)">
						</span>
						<span style="COLOR: rgb(0,0,0); BACKGROUND-COLOR: rgb(255,255,0)">
						</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br /> <br /><br /></span>
						<font color="#ff0000" size="4">
								<b>
										<span style="COLOR: rgb(0,0,255)">&lt;</span>
										<span style="COLOR: rgb(128,0,0)">jodd:form </span>
										<span style="COLOR: rgb(255,0,0)">beans</span>
										<span style="COLOR: rgb(0,0,255)">="user"</span>
										<span style="COLOR: rgb(255,0,0)"> scopes</span>
										<span style="COLOR: rgb(0,0,255)">="session"</span>
										<span style="COLOR: rgb(0,0,255)">&gt;</span>
								</b>
						</font>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />
						</span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">form </span>
						<span style="COLOR: rgb(255,0,0)">action</span>
						<span style="COLOR: rgb(0,0,255)">="my.htm"</span>
						<span style="COLOR: rgb(255,0,0)"> method</span>
						<span style="COLOR: rgb(0,0,255)">="post"</span>
						<span style="COLOR: rgb(255,0,0)"> </span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br /> <br /><br />    </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">table </span>
						<span style="COLOR: rgb(255,0,0)">width</span>
						<span style="COLOR: rgb(0,0,255)">="300"</span>
						<span style="COLOR: rgb(255,0,0)"> border</span>
						<span style="COLOR: rgb(0,0,255)">="0"</span>
						<span style="COLOR: rgb(255,0,0)"> cellspacing</span>
						<span style="COLOR: rgb(0,0,255)">="0"</span>
						<span style="COLOR: rgb(255,0,0)"> cellpadding</span>
						<span style="COLOR: rgb(0,0,255)">="0"</span>
						<span style="COLOR: rgb(255,0,0)">
								<br />
								<br />       align</span>
						<span style="COLOR: rgb(0,0,255)">="center"</span>
						<span style="COLOR: rgb(255,0,0)"> class</span>
						<span style="COLOR: rgb(0,0,255)">="white"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">  <br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">tr</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />           </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">td </span>
						<span style="COLOR: rgb(255,0,0)">height</span>
						<span style="COLOR: rgb(0,0,255)">="32"</span>
						<span style="COLOR: rgb(255,0,0)"> align</span>
						<span style="COLOR: rgb(0,0,255)">="right"</span>
						<span style="COLOR: rgb(255,0,0)"> width</span>
						<span style="COLOR: rgb(0,0,255)">="107"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">用户名：</span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">td</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />       </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">td </span>
						<span style="COLOR: rgb(255,0,0)">height</span>
						<span style="COLOR: rgb(0,0,255)">="32"</span>
						<span style="COLOR: rgb(255,0,0)"> width</span>
						<span style="COLOR: rgb(0,0,255)">="193"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;&lt;</span>
						<span style="COLOR: rgb(128,0,0)">input </span>
						<span style="COLOR: rgb(255,0,0)">type</span>
						<span style="COLOR: rgb(0,0,255)">="text"</span>
						<span style="COLOR: rgb(255,0,0)"> name</span>
						<span style="COLOR: rgb(0,0,255)">="userName"</span>
						<span style="COLOR: rgb(255,0,0)">
								<br />
								<br />              class</span>
						<span style="COLOR: rgb(0,0,255)">="input"</span>
						<span style="COLOR: rgb(255,0,0)"> size</span>
						<span style="COLOR: rgb(0,0,255)">="20"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">td</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">          <br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">tr</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />       </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">tr</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />           </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">td </span>
						<span style="COLOR: rgb(255,0,0)">height</span>
						<span style="COLOR: rgb(0,0,255)">="33"</span>
						<span style="COLOR: rgb(255,0,0)"> align</span>
						<span style="COLOR: rgb(0,0,255)">="right"</span>
						<span style="COLOR: rgb(255,0,0)"> width</span>
						<span style="COLOR: rgb(0,0,255)">="107"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">密码：</span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">td</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />           </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">td </span>
						<span style="COLOR: rgb(255,0,0)">height</span>
						<span style="COLOR: rgb(0,0,255)">="33"</span>
						<span style="COLOR: rgb(255,0,0)"> width</span>
						<span style="COLOR: rgb(0,0,255)">="193"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;&lt;</span>
						<span style="COLOR: rgb(128,0,0)">input </span>
						<span style="COLOR: rgb(255,0,0)">type</span>
						<span style="COLOR: rgb(0,0,255)">="password"</span>
						<span style="COLOR: rgb(255,0,0)"> name</span>
						<span style="COLOR: rgb(0,0,255)">="password"</span>
						<span style="COLOR: rgb(255,0,0)">
								<br />
								<br />              class</span>
						<span style="COLOR: rgb(0,0,255)">="input"</span>
						<span style="COLOR: rgb(255,0,0)"> size</span>
						<span style="COLOR: rgb(0,0,255)">="21"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">td</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />       </span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">tr</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />      <br /><br />        </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">tr</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />           </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">td </span>
						<span style="COLOR: rgb(255,0,0)">height</span>
						<span style="COLOR: rgb(0,0,255)">="69"</span>
						<span style="COLOR: rgb(255,0,0)"> align</span>
						<span style="COLOR: rgb(0,0,255)">="center"</span>
						<span style="COLOR: rgb(255,0,0)"> colspan</span>
						<span style="COLOR: rgb(0,0,255)">="2"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />            </span>
						<span style="COLOR: rgb(0,0,255)">&lt;</span>
						<span style="COLOR: rgb(128,0,0)">input </span>
						<span style="COLOR: rgb(255,0,0)">type</span>
						<span style="COLOR: rgb(0,0,255)">="submit"</span>
						<span style="COLOR: rgb(255,0,0)"> name</span>
						<span style="COLOR: rgb(0,0,255)">="Submit"</span>
						<span style="COLOR: rgb(255,0,0)"> value</span>
						<span style="COLOR: rgb(0,0,255)">="登录"</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />       </span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">tr</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />    </span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">table</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />
						</span>
						<span style="COLOR: rgb(0,0,255)">&lt;/</span>
						<span style="COLOR: rgb(128,0,0)">form</span>
						<span style="COLOR: rgb(0,0,255)">&gt;</span>
						<span style="COLOR: rgb(0,0,0)">
								<br />
								<br />
						</span>
						<b>
								<font size="4">
										<span style="COLOR: rgb(0,0,255)">&lt;/</span>
										<span style="COLOR: rgb(128,0,0)">jodd:form</span>
										<span style="COLOR: rgb(0,0,255)">&gt;</span>
								</font>
						</b>
						<span style="COLOR: rgb(0,0,0)">
								<br />
						</span>
				</div>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: red; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: red; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>４．</span></span>&lt;!--[endif]--&gt;<span lang="EN-US">Dispatch-servelt.xml</span><span style="FONT-FAMILY: 宋体">中对</span><span lang="EN-US">controller</span><span style="FONT-FAMILY: 宋体">的配置</span></p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: red; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">&lt;bean id="myController" class="caike.MyController"&gt;<span>     </span></span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: red; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>    </span>&lt;/bean&gt;</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: black; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>    </span>
						</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">不再需要这种方式：</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: black; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>    </span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,95,191); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">&lt;!-- </span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,95,191); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>       </span>&lt;bean id="myController" class="caike.MyFormController"&gt;<span>     </span></span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,95,191); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>       </span>&lt;property name="commandClass" value="caike" /&gt;<span>       </span></span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,95,191); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>       </span>&lt;property name="formView" value="userForm" /&gt;<span>    </span></span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,95,191); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>       </span>&lt;/bean&gt;</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,95,191); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>    </span>--&gt;</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: rgb(63,95,191); FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt">&lt;!--[if !supportLists]--&gt;<span lang="EN-US"><span>５．</span></span>&lt;!--[endif]--&gt;<span style="FONT-FAMILY: 宋体">在</span><span lang="EN-US">controller</span><span style="FONT-FAMILY: 宋体">中取出</span><span lang="EN-US">user</span></p>
				<p class="MsoNormal">
						<span lang="EN-US">
						</span>
				</p>
				<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)">
						<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
						<span style="COLOR: rgb(0,0,255)">package</span>
						<span style="COLOR: rgb(0,0,0)"> caike; <br /><br /></span>
						<span style="COLOR: rgb(0,0,255)">import</span>
						<span style="COLOR: rgb(0,0,0)"> javax.servlet.http.HttpServletRequest;<br /><br /></span>
						<span style="COLOR: rgb(0,0,255)">import</span>
						<span style="COLOR: rgb(0,0,0)"> javax.servlet.http.HttpServletResponse; <br /><br /></span>
						<span style="COLOR: rgb(0,0,255)">import</span>
						<span style="COLOR: rgb(0,0,0)"> jodd.bean.BeanUtil; <br /><br /></span>
						<span style="COLOR: rgb(0,0,255)">import</span>
						<span style="COLOR: rgb(0,0,0)"> org.springframework.web.servlet.ModelAndView;<br /><br /></span>
						<span style="COLOR: rgb(0,0,255)">import</span>
						<span style="COLOR: rgb(0,0,0)"> org.springframework.web.servlet.mvc.Controller;<br /><br /> <br /><br /></span>
						<span style="COLOR: rgb(0,0,255)">public</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,255)">class</span>
						<span style="COLOR: rgb(0,0,0)"> MyController </span>
						<span style="COLOR: rgb(0,0,255)">implements</span>
						<span style="COLOR: rgb(0,0,0)"> Controller {<br /><br /> <br /><br />       </span>
						<span style="COLOR: rgb(0,0,255)">public</span>
						<span style="COLOR: rgb(0,0,0)"> ModelAndView handleRequest(HttpServletRequest request,<br /><br />                     HttpServletResponse response) </span>
						<span style="COLOR: rgb(0,0,255)">throws</span>
						<span style="COLOR: rgb(0,0,0)"> Exception {<br /><br /> <br /><br />              User user </span>
						<span style="COLOR: rgb(0,0,0)">=</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,255)">new</span>
						<span style="COLOR: rgb(0,0,0)"> User();<br /><br />              BeanUtil.load(user, request);<br /><br />              System.out.println(</span>
						<span style="COLOR: rgb(0,0,0)">"</span>
						<span style="COLOR: rgb(0,0,0)">用户名:</span>
						<span style="COLOR: rgb(0,0,0)">"</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,0)">+</span>
						<span style="COLOR: rgb(0,0,0)"> user.getUserName() </span>
						<span style="COLOR: rgb(0,0,0)">+</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,0)">"</span>
						<span style="COLOR: rgb(0,0,0)"> 密码:</span>
						<span style="COLOR: rgb(0,0,0)">"</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,0)">+</span>
						<span style="COLOR: rgb(0,0,0)"> user.getPassword());<br /><br />              </span>
						<span style="COLOR: rgb(0,0,255)">return</span>
						<span style="COLOR: rgb(0,0,0)"> </span>
						<span style="COLOR: rgb(0,0,255)">null</span>
						<span style="COLOR: rgb(0,0,0)">;<br /><br />       }<br /><br /> <br /><br />}<br /></span>
				</div>
				<p class="MsoNormal">
						<span lang="EN-US">
						</span>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal">
						<b>
								<span style="FONT-SIZE: 16pt; FONT-FAMILY: 宋体">需要注意的地方：</span>
						</b>
						<b>
								<span lang="EN-US" style="FONT-SIZE: 16pt">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal">
						<span style="FONT-FAMILY: 宋体">表单中对应的名字</span>
						<span lang="EN-US">name</span>
						<span style="FONT-FAMILY: 宋体">和</span>
						<span lang="EN-US">javaBean</span>
						<span style="FONT-FAMILY: 宋体">里对应的属性名要相同。</span>
				</p>
				<p class="MsoNormal" style="MARGIN-LEFT: 5pt; TEXT-INDENT: -5pt; TEXT-ALIGN: left" align="left">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,127,127); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">&lt;input type="text" </span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: red; FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">name="userName"</span>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white 0% 50%; COLOR: rgb(63,127,127); FONT-FAMILY: 'Courier New'; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
								<span>              </span>class="input" size="20"&gt;</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: rgb(63,127,127); FONT-FAMILY: 'Courier New'">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US">public class User {<o:p><br /></o:p></span>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US">
								<span>       </span>private String userName;</span>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US">.......<br /></span>
				</p>
				<p class="MsoNormal">
						<font size="5">
								<b>
										<span lang="EN-US">
												<o:p> 参考：<br /></o:p>
										</span>
								</b>
						</font>
				</p>
				<p class="MsoNormal">
						<span lang="EN-US">http://www.blogjava.net/calvin/archive/2005/08/24/10914.html</span>
				</p>
				<p class="MsoNormal">
						<a id="_f9f3336a0f89507a_HomePageDays_DaysList__ctl31_DayItem_DayList__ctl1_TitleUrl" href="/caike/archive/2005/calvin/archive/2005/08/24/10914.html">　<span></span></a>
						<a id="Header2_HeaderTitle" href="/caike/archive/2005/calvin/">花钱的年华</a>
						<a id="_f9f3336a0f89507a_HomePageDays_DaysList__ctl31_DayItem_DayList__ctl1_TitleUrl" href="/caike/archive/2005/calvin/archive/2005/08/24/10914.html">　　　简化Spring(4)--View层</a>
				</p>
		</div>
<img src ="http://www.blogjava.net/yesjoy/aggbug/80409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yesjoy/" target="_blank">★yesjoy★</a> 2006-11-10 15:20 <a href="http://www.blogjava.net/yesjoy/articles/80409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>