﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-白银时代</title><link>http://www.blogjava.net/NicholasEcho/</link><description>。。。。。。</description><language>zh-cn</language><lastBuildDate>Wed, 22 Apr 2026 00:15:57 GMT</lastBuildDate><pubDate>Wed, 22 Apr 2026 00:15:57 GMT</pubDate><ttl>60</ttl><item><title>Hibernate Query查询杂乱字段的问题</title><link>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253650.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Fri, 06 Feb 2009 15:44:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253650.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/253650.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/253650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/253650.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C02%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" latentstylecount="156">
</w:LatentStyles>
</xml><![endif]--><style>
<!-- /* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:1 135137280 18 0 262144 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:1 135137280 18 0 262144 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">Select</span><span style="color: #000000;">&nbsp;</span><span style="color: #ff00ff;">count</span><span style="color: #000000;">(cust.custlevel),custname&nbsp;</span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;Customer&nbsp;cust&nbsp;</span><span style="color: #0000ff;">group</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">by</span><span style="color: #000000;">&nbsp;cust.custlevel;</span></div>
<p class="MsoNormal"><span style="font-size: 12pt; color: black;" lang="EN-US"><span>&nbsp;</span></span><span style="font-size: 12pt; font-family: 宋体; color: black;">这条</span><span style="font-size: 12pt; color: black;" lang="EN-US">HQL</span><span style="font-size: 12pt; font-family: 宋体; color: black;">语句查询</span><span style="font-size: 12pt; color: black;" lang="EN-US">Customer</span><span style="font-size: 12pt; font-family: 宋体; color: black;">表，根据</span><span style="font-size: 12pt; color: black;" lang="EN-US">custlevel</span><span style="font-size: 12pt; font-family: 宋体; color: black;">分组查询有多少条记录。</span><span style="font-size: 12pt; color: black;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 6.1pt; text-indent: -6.1pt;"><span style="font-size: 12pt; color: black;" lang="EN-US"><span>&nbsp;</span></span><span style="font-size: 12pt; font-family: 宋体; color: black;">问题一：如果用</span></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">Query&nbsp;query</span><span style="color: #000000;">=</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.getSession().createQuery(hql);</span></div>
<p class="MsoNormal" style="margin-left: 6.1pt; text-indent: -6.1pt;"><span style="font-size: 12pt; color: black;" lang="EN-US">count</span><span style="font-size: 12pt; font-family: 宋体; color: black;">计数并且是已</span><span style="font-size: 12pt; color: black;" lang="EN-US">Group
by</span><span style="font-size: 12pt; font-family: 宋体; color: black;">分组的话</span><span style="font-size: 12pt; color: black;" lang="EN-US">,count</span><span style="font-size: 12pt; font-family: 宋体; color: black;">查询的必须是分组的字段</span><span style="font-size: 12pt; color: black;" lang="EN-US">.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 6.1pt; text-indent: -6.1pt;"><span style="font-size: 12pt; color: black;" lang="EN-US"><span>&nbsp;</span></span><span style="font-size: 12pt; font-family: 宋体; color: black;">问题二：通过</span><span style="font-size: 12pt; color: black;" lang="EN-US">query.list()</span><span style="font-size: 12pt; font-family: 宋体; color: black;">返回一个结果，</span><span style="font-size: 12pt; color: black;"> </span><span style="font-size: 12pt; font-family: 宋体; color: black;">在</span><span style="font-size: 12pt; color: black;" lang="EN-US">JSP</span><span style="font-size: 12pt; font-family: 宋体; color: black;">页面中的显示可以用</span><span style="font-size: 12pt; color: black;" lang="EN-US">JSTL,</span><span style="font-size: 12pt; font-family: 宋体; color: black;">代码如下：</span><span style="font-size: 12pt; color: black;" lang="EN-US"><o:p></o:p></span></p>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">c:foreach&nbsp;</span><span style="color: #ff0000;">item</span><span style="color: #0000ff;">=&#8221;${list}&#8221;&nbsp;</span><span style="color: #ff0000;">var</span><span style="color: #0000ff;">=&#8221;index&#8221;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;Index[0]&nbsp;&nbsp;&nbsp;//通过索引可以这样访问到数据，比如这里访问的就是count(cust.custlevel)<br />
<br />
&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">c:foreach</span><span style="color: #0000ff;">&gt;</span></div>
<p class="MsoNormal" style="margin-left: 6.1pt; text-indent: -6.1pt;"><span style="font-size: 12pt; color: black;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 6.1pt;"><span style="font-size: 12pt; font-family: 宋体; color: black;">该如何去把这个结果转换为</span><span style="font-size: 12pt; color: black;" lang="EN-US">Pojo</span><span style="font-size: 12pt; font-family: 宋体; color: black;">？</span><span style="font-size: 12pt; color: black;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left: 6.1pt;"><span style="font-size: 12pt; color: black;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin-left: 6.1pt;"><span style="font-size: 12pt; color: black;" lang="EN-US">query.list();</span><span style="font-size: 12pt; font-family: 宋体; color: black;">返回的</span><span style="font-size: 12pt; color: black;" lang="EN-US">List</span><span style="font-size: 12pt; font-family: 宋体; color: black;">集合装载的是一个一个的</span><span style="font-size: 12pt; color: black;" lang="EN-US">Object []</span><span style="font-size: 12pt; font-family: 宋体; color: black;">，如果要赋予</span><span style="font-size: 12pt; color: black;" lang="EN-US">Pojo</span><span style="font-size: 12pt; font-family: 宋体; color: black;">属性可以这样：</span><span style="font-size: 12pt; color: black;" lang="EN-US"><o:p></o:p></span></p>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">list.size();i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;Object&nbsp;[]obj</span><span style="color: #000000;">=</span><span style="color: #000000;">(Object&nbsp;[])list.get(i);<br />
<br />
&nbsp;&nbsp;&nbsp;Pojo.setXXX(obj[</span><span style="color: #000000;">0</span><span style="color: #000000;">]);</span><span style="color: #008000;">//</span><span style="color: #008000;">这里装载就是count(cust.custlevel)</span><span style="color: #008000;"><br />
</span><span style="color: #000000;"><br />
}</span></div>
<p class="MsoNormal" style="margin-left: 6.1pt;"><span style="font-size: 12pt; color: black;" lang="EN-US"><o:p></o:p></span></p>
<img src ="http://www.blogjava.net/NicholasEcho/aggbug/253650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2009-02-06 23:44 <a href="http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring AOP配置问题</title><link>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253649.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Fri, 06 Feb 2009 15:41:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253649.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/253649.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/253649.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/253649.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C02%5Cclip_filelist.xml" /><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="State"></o:smarttagtype><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" latentstylecount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if !mso]><object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"></object>
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]--><style>
<!-- /* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:1 135137280 18 0 262144 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:1 135137280 18 0 262144 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">import</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> java.util.List;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">import</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> org.hibernate.Query;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">import</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">
org.springframework.orm.hibernate3.support.HibernateDaoSupport;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US">/*</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US"><span>&nbsp;</span>* </span><span style="font-size: 10pt; font-family: 宋体; color: #3f7f5f;">最基本的</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US">DAO</span><span style="font-size: 10pt; font-family: 宋体; color: #3f7f5f;">操作</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US">,</span><span style="font-size: 10pt; font-family: 宋体; color: #3f7f5f;">已供应其他类来调用</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US"><span>&nbsp;</span>*/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">public</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">class</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> BaseDAO </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">extends</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> <span style="background: silver none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">HibernateDaoSupport</span>
{</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US">/*</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span>* </span><span style="font-size: 10pt; font-family: 宋体; color: #3f7f5f;">添加</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span>*/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">public</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">boolean</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> addObject(Object obj) {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">boolean</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> state = </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">true</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">try</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">this</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">.getHibernateTemplate().save(obj);</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>} </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">catch</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> (Exception e) {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>e.printStackTrace();</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>state = </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">false</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">return</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> state;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US">/*</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span>* </span><span style="font-size: 10pt; font-family: 宋体; color: #3f7f5f;">删除</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f5f;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span>*/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">public</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">boolean</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> delObject(Object obj) {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">boolean</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> state = </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">true</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">try</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">this</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">.getHibernateTemplate().delete(obj);</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>} </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">catch</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> (Exception e) {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>state = </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">false</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">return</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> state;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: 宋体; color: black;">这个类是最原始的去</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">DAO</span><span style="font-size: 10pt; font-family: 宋体; color: black;">，封装了一些数据的增删查改，然后我编写了数据访问接口，数据访问的实现类继承自这个类再实现接口。代码如下：</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">import</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> com.custservice.base.BasdBase;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">import</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> com.custservice.basicdao.BaseDAO;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">public</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">class</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> BasdService </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">extends</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> BaseDAO </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">implements</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> BasdBase {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">public</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">boolean</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> delete(Object obj) {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">return</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">super</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">.delObject(obj);</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">public</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">boolean</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> saveObj(Object obj) {</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">return</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"> </span><strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f0055;" lang="EN-US">super</span></strong><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">.addObject(obj);</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 5.2pt;"><span style="font-size: 10pt; font-family: 宋体; color: black;">当我</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">AOP</span><span style="font-size: 10pt; font-family: 宋体; color: black;">的切入点配置到</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">BaseDAO</span><span style="font-size: 10pt; font-family: 宋体; color: black;">是事务是不会提交的，这个事务的切入点必须配置到直接访问数据库类的上一层。配置文件如下：</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">tx:advice </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">id</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"txAdvice" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">transaction-manager</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"transactionManager"</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">tx:attributes</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">tx:method </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">name</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"save*"
</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">propagation</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"REQUIRED" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">/&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">tx:method </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">name</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"update*"
</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">propagation</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"REQUIRED" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">/&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">tx:method </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">name</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"<st1:state w:st="on"><st1:place w:st="on">del</st1:place></st1:state>*" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">propagation</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"REQUIRED" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">/&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">tx:method </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">name</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"*" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">read-only</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"true" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">/&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">tx:attributes</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">tx:advice</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">aop:config</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">aop:pointcut </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">id</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"allMethod"</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">expression</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"execution(*
com.custservice.service.*.*(..))" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">/&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">aop:advisor </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">pointcut-ref</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"allMethod"
</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #7f007f;" lang="EN-US">advice-ref</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #2a00ff;" lang="EN-US">"txAdvice" </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">/&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>
<span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f7f7f;" lang="EN-US">aop:config</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;" lang="EN-US">&gt;</span>
<img src ="http://www.blogjava.net/NicholasEcho/aggbug/253649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2009-02-06 23:41 <a href="http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2.x乱码问题</title><link>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253648.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Fri, 06 Feb 2009 15:40:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253648.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/253648.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/253648.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/253648.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Normal07.8 磅02falsefalsefalseMicrosoftInternetExplorer4/* Style Definitions */table.MsoNormalTable{mso-style-name:普通表格;mso-tstyl...&nbsp;&nbsp;<a href='http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253648.html'>阅读全文</a><img src ="http://www.blogjava.net/NicholasEcho/aggbug/253648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2009-02-06 23:40 <a href="http://www.blogjava.net/NicholasEcho/archive/2009/02/06/253648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 防止重复提交 防止重复刷新 防止后退问题以及处理方式</title><link>http://www.blogjava.net/NicholasEcho/archive/2008/12/24/248137.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Wed, 24 Dec 2008 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2008/12/24/248137.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/248137.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2008/12/24/248137.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/248137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/248137.html</trackback:ping><description><![CDATA[<p>一。前言<br />
你在任何一个比较专业的BBS都会看到这样的问题，即使你Google一下，也会发现有很多的人在关注和询问，但大家给出的解决方法却都是千差万别，（有
的人主张采用脚本来解决;有的则想重定向到别的页面;有的则将此问题提升到Token的角度）为什么会有如此大的差异呢？</p>
<p>二。问题场景<br />
首先，我们应该先了解为什么要处理这样的问题？或者专业一点就是它适合的场景是什么？（似乎只有人来问没有人来解释）</p>
<p>1。重复提交、重复刷新的场景<br />
重复提交、重复刷新都是来解决系统重复记录的问题。也就是说某个人在多次的提交某条记录（为什么？也许是闲了没有事情干的;最有可能是用户根本就不知道自己的提交结果是否已经执行了？！）。</p>
<p>但出现了这样的问题并不见得就必须处理，要看你所开发的系统的类别而定。比如你接手的是某个资源管理系统，系统本身从需求的角度根本就不允许出现"
重复"的记录，在这样需求的约束条件下，去执行重复的提交动作只会引发&#8220;业务级异常&#8221;的产生，根本就不可能执行成功也就无所谓避免不避免的问题了。</p>
<p> </p>
<p>2。防止后退的场景<br />
了解了重复刷新、重复提交的场景，我们来了解一下"防止后退"操作的原因是什么？比如你在开发某个投票系统，它有很多的步骤，并且这些步骤之间是有联系
的，比如第一步会将某些信息发送给第二步，第二步缓存了这些信息，同时将自身的信息发送给了第三步。。。。。等等，如果此时用户处在第三步骤下，我们想象
一下某个淘气用户的用户点击了后退按钮，此时屏幕出现了第二步骤的页面，他再次的修改或者再次的提交，进入到下一个步骤（也就是第三步骤），错误就会在此
产生？！什么错误呢？最为典型的就是这样的操作直接导致了对于第一个步骤信息的丢失！（如果这样的信息是依靠Request存放的话，当然你可以存放在
Session或者更大的上下文环境中，但这不是个好主意！关于信息存放的问题，下次在就这个问题详细的讨论）</p>
<p><br />
三。如何处理的问题<br />
当然很多的系统（比如订票系统从需求上本身是允许个人重复订票的）是必须要避免重复刷新、重复提交、以及防止后退的问题的，但即使是这样的问题，也要区分
如何处理以及在哪里处理的（网上只是告诉你如何处理，但很少去区分在哪里处理的），显然处理的方式无非是客户端或者服务器端两种，而面对不同的位置处理的
方式也是不同的，但有一点要事先声明：任何客户端（尤其是B/S端）的处理都是不可信任的，最好的也是最应该的是服务器端的处理方法。</p>
<p>客户端处理：<br />
面对客户端我们可以使用Javascript脚本来解决，如下</p>
<p>1。重复刷新、重复提交<br />
Ways One：设置一个变量，只允许提交一次。<br />
&lt;script language="javascript"&gt; <br />
&nbsp;&nbsp;&nbsp;  var checkSubmitFlg = false; <br />
&nbsp;&nbsp;&nbsp;  function checkSubmit() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (checkSubmitFlg == true) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return false; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  checkSubmitFlg = true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return true; <br />
&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;  document.ondblclick = function docondblclick() { <br />
&nbsp;&nbsp;&nbsp;  window.event.returnValue = false; <br />
&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;  document.onclick = function doconclick() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (checkSubmitFlg) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  window.event.returnValue = false; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;  } <br />
&lt;/script&gt; <br />
&lt;html:form action="myAction.do" method="post" onsubmit="return checkSubmit();"&gt;</p>
<p>Way Two : 将提交按钮或者image置为disable<br />
&lt;html:form action="myAction.do" method="post"  <br />
&nbsp;&nbsp;&nbsp;  onsubmit="getElById('submitInput').disabled = true; return true;"&gt;&nbsp;&nbsp;  <br />
&lt;html:image styleId="submitInput" src="images/ok_b.gif" border="0" /&gt; <br />
&lt;/html:form&gt; </p>
<p>2。防止用户后退<br />
这里的方法是千姿百态，有的是更改浏览器的历史纪录的，比如使用window.history.forward()方法;有的是&#8220;用新页面的URL替换当
前的历史纪录，这样浏览历史记录中就只有一个页面，后退按钮永远不会变为可用。&#8221;比如使用
javascript:location.replace(this.href); event.returnValue=false;</p>
<p><br />
2.服务器端的处理（这里只说Struts框架的处理）<br />
利用同步令牌（Token）机制来解决Web应用中重复提交的问题，Struts也给出了一个参考实现。</p>
<p>基本原理：<br />
服务器端在处理到达的请求之前，会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较，<br />
看是否匹配。在处理完该请求后，且在答复发送给客户端之前，将会产生一个新的令牌，该令牌除传给<br />
客户端以外，也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次<br />
提交的话，客户端传过来的令牌就和服务器端的令牌不一致，从而有效地防止了重复提交的发生。</p>
<p>if (isTokenValid(request, true)) { <br />
&nbsp;&nbsp;&nbsp;  // your code here <br />
&nbsp;&nbsp;&nbsp;  return mapping.findForward("success"); <br />
} else { <br />
&nbsp;&nbsp;&nbsp;  saveToken(request); <br />
&nbsp;&nbsp;&nbsp;  return mapping.findForward("submitagain"); <br />
}</p>
<p>Struts根据用户会话ID和当前系统时间来生成一个唯一（对于每个会话）令牌的，具体实现可以参考<br />
TokenProcessor类中的generateToken()方法。</p>
<p>1. //验证事务控制令牌,&lt;html:form &gt;会自动根据session中标识生成一个隐含input代表令牌，防止两次提交<br />
2. 在action中：</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //&lt;input type="hidden" name="org.apache.struts.taglib.html.TOKEN"  <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //  value="6aa35341f25184fd996c4c918255c3ae"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if (!isTokenValid(request)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  errors.add(ActionErrors.GLOBAL_ERROR, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  new ActionError("error.transaction.token")); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  resetToken(request); //删除session中的令牌</p>
<p>3. action有这样的一个方法生成令牌<br />
&nbsp;&nbsp;  protected String generateToken(HttpServletRequest request) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  HttpSession session = request.getSession(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte id[] = session.getId().getBytes(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte now[] = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  new Long(System.currentTimeMillis()).toString().getBytes(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  MessageDigest md = MessageDigest.getInstance("MD5"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  md.update(id); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  md.update(now); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (toHex(md.digest())); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch (IllegalStateException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (null); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch (NoSuchAlgorithmException e) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return (null); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } <br />
&nbsp;&nbsp;  } </p>
<p>总结<br />
对于重复提交、重复刷新、防止后退等等都是属于系统为避免重复记录而需要解决的问题，在客户端去处理需要针对每一种的可能提出相应的解决方案，然而在服务器端看来只不过是对于数据真实性的检验问题，基于令牌的处理就是一劳永逸的方法。</p>
<p>同时我们也看到，从不同的角度去看待问题，其解决的方法也是不同的。客户端更追求的是用户的操作，而服务端则将注意力放在了数据的处理上，所以在某
个对于服务器端看似容易的问题上，用客户端来解决却麻烦了很多！反之依然。所以在某些问题的处理上我们需要综合考虑和平衡，是用客户端来解决？还是用服务
器端来处理？</p>
<img src ="http://www.blogjava.net/NicholasEcho/aggbug/248137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2008-12-24 18:56 <a href="http://www.blogjava.net/NicholasEcho/archive/2008/12/24/248137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>普通行列转换(转载)</title><link>http://www.blogjava.net/NicholasEcho/archive/2008/12/24/248136.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Wed, 24 Dec 2008 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2008/12/24/248136.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/248136.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2008/12/24/248136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/248136.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/248136.html</trackback:ping><description><![CDATA[ /*
<br />
普通行列转换
<br />
(爱新觉罗.毓华 2007-11-18于海南三亚)
<br />
<br />
假设有张学生成绩表(tb)如下:
<br />
Name Subject Result
<br />
张三 语文　　74
<br />
张三 数学　　83
<br />
张三 物理　　93
<br />
李四 语文　　74
<br />
李四 数学　　84
<br />
李四 物理　　94
<br />
*/
<br />
<br />
-------------------------------------------------------------------------
<br />
/*
<br />
想变成
<br />
姓名         语文        数学        物理
<br />
---------- ----------- ----------- -----------
<br />
李四         74          84          94
<br />
张三         74          83          93
<br />
*/
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看</a><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">复制到剪切板</a><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>create&nbsp;table&nbsp;tb&nbsp;&nbsp;</span></span></li>
    <li class=""><span>(&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;varchar(<span class="number">10</span><span>)&nbsp;,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;Subject&nbsp;varchar(<span class="number">10</span><span>)&nbsp;,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;Result&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>insert&nbsp;into&nbsp;tb(Name&nbsp;,&nbsp;Subject&nbsp;,&nbsp;Result)&nbsp;values(<span class="string">'张三'</span><span>&nbsp;,&nbsp;</span><span class="string">'语文'</span><span>&nbsp;,&nbsp;</span><span class="number">74</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>insert&nbsp;into&nbsp;tb(Name&nbsp;,&nbsp;Subject&nbsp;,&nbsp;Result)&nbsp;values(<span class="string">'张三'</span><span>&nbsp;,&nbsp;</span><span class="string">'数学'</span><span>&nbsp;,&nbsp;</span><span class="number">83</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>insert&nbsp;into&nbsp;tb(Name&nbsp;,&nbsp;Subject&nbsp;,&nbsp;Result)&nbsp;values(<span class="string">'张三'</span><span>&nbsp;,&nbsp;</span><span class="string">'物理'</span><span>&nbsp;,&nbsp;</span><span class="number">93</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>insert&nbsp;into&nbsp;tb(Name&nbsp;,&nbsp;Subject&nbsp;,&nbsp;Result)&nbsp;values(<span class="string">'李四'</span><span>&nbsp;,&nbsp;</span><span class="string">'语文'</span><span>&nbsp;,&nbsp;</span><span class="number">74</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>insert&nbsp;into&nbsp;tb(Name&nbsp;,&nbsp;Subject&nbsp;,&nbsp;Result)&nbsp;values(<span class="string">'李四'</span><span>&nbsp;,&nbsp;</span><span class="string">'数学'</span><span>&nbsp;,&nbsp;</span><span class="number">84</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>insert&nbsp;into&nbsp;tb(Name&nbsp;,&nbsp;Subject&nbsp;,&nbsp;Result)&nbsp;values(<span class="string">'李四'</span><span>&nbsp;,&nbsp;</span><span class="string">'物理'</span><span>&nbsp;,&nbsp;</span><span class="number">94</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>go&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>--静态SQL,指subject只有语文、数学、物理这三门课程。&nbsp;&nbsp;</span></li>
    <li class="alt"><span>select&nbsp;name&nbsp;姓名,&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;max(<span class="keyword">case</span><span>&nbsp;subject&nbsp;when&nbsp;</span><span class="string">'语文'</span><span>&nbsp;then&nbsp;result&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;end)&nbsp;语文,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;max(<span class="keyword">case</span><span>&nbsp;subject&nbsp;when&nbsp;</span><span class="string">'数学'</span><span>&nbsp;then&nbsp;result&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;end)&nbsp;数学,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;max(<span class="keyword">case</span><span>&nbsp;subject&nbsp;when&nbsp;</span><span class="string">'物理'</span><span>&nbsp;then&nbsp;result&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;end)&nbsp;物理&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>from&nbsp;tb&nbsp;&nbsp;</span></li>
    <li class=""><span>group&nbsp;by&nbsp;name&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none;" name="code" class="java" id="code_274_1">create table tb
(
Name    varchar(10) ,
Subject varchar(10) ,
Result  int
)
insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
go
--静态SQL,指subject只有语文、数学、物理这三门课程。
select name 姓名,
max(case subject when '语文' then result else 0 end) 语文,
max(case subject when '数学' then result else 0 end) 数学,
max(case subject when '物理' then result else 0 end) 物理
from tb
group by name</pre>
/*
<br />
姓名         语文        数学        物理
<br />
---------- ----------- ----------- -----------
<br />
李四         74          84          94
<br />
张三         74          83          93
<br />
*/
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看</a><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">复制到剪切板</a><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>--动态SQL,指subject不止语文、数学、物理这三门课程。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>declare&nbsp;<span class="annotation">@sql</span><span>&nbsp;varchar(</span><span class="number">8000</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>set&nbsp;<span class="annotation">@sql</span><span>&nbsp;=&nbsp;</span><span class="string">'select&nbsp;Name&nbsp;as&nbsp;'</span><span>&nbsp;+&nbsp;</span><span class="string">'姓名'</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>select&nbsp;<span class="annotation">@sql</span><span>&nbsp;=&nbsp;</span><span class="annotation">@sql</span><span>&nbsp;+&nbsp;</span><span class="string">'&nbsp;,&nbsp;max(case&nbsp;Subject&nbsp;when&nbsp;'</span><span class="string">''</span><span>&nbsp;+&nbsp;Subject&nbsp;+&nbsp;</span><span class="string">''</span><span class="string">'&nbsp;then&nbsp;Result&nbsp;else&nbsp;0&nbsp;end)&nbsp;['</span><span>&nbsp;+&nbsp;Subject&nbsp;+&nbsp;</span><span class="string">']'</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>from&nbsp;(select&nbsp;distinct&nbsp;Subject&nbsp;from&nbsp;tb)&nbsp;as&nbsp;a&nbsp;&nbsp;</span></li>
    <li class=""><span>set&nbsp;<span class="annotation">@sql</span><span>&nbsp;=&nbsp;</span><span class="annotation">@sql</span><span>&nbsp;+&nbsp;</span><span class="string">'&nbsp;from&nbsp;tb&nbsp;group&nbsp;by&nbsp;name'</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>exec(<span class="annotation">@sql</span><span>)&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre style="display: none;" name="code" class="java" id="code_274_2">--动态SQL,指subject不止语文、数学、物理这三门课程。
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' from tb group by name'
exec(@sql) </pre>
/*
<br />
姓名         数学        物理        语文
<br />
---------- ----------- ----------- -----------
<br />
李四         84          94          74
<br />
张三         83          93          74
<br />
*/
<br />
<br />
-------------------------------------------------------------------
<br />
/*加个平均分，总分
<br />
姓名         语文        数学        物理        平均分                总分
<br />
---------- ----------- ----------- ----------- -------------------- -----------
<br />
李四         74          84          94          84.00                252
<br />
张三         74          83          93          83.33                250
<br />
*/
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看</a><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">复制到剪切板</a><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>--静态SQL,指subject只有语文、数学、物理这三门课程。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>select&nbsp;name&nbsp;姓名,&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;max(<span class="keyword">case</span><span>&nbsp;subject&nbsp;when&nbsp;</span><span class="string">'语文'</span><span>&nbsp;then&nbsp;result&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;end)&nbsp;语文,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;max(<span class="keyword">case</span><span>&nbsp;subject&nbsp;when&nbsp;</span><span class="string">'数学'</span><span>&nbsp;then&nbsp;result&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;end)&nbsp;数学,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;max(<span class="keyword">case</span><span>&nbsp;subject&nbsp;when&nbsp;</span><span class="string">'物理'</span><span>&nbsp;then&nbsp;result&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;end)&nbsp;物理,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;cast(avg(result*<span class="number">1.0</span><span>)&nbsp;as&nbsp;decimal(</span><span class="number">18</span><span>,</span><span class="number">2</span><span>))&nbsp;平均分,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;sum(result)&nbsp;总分&nbsp;&nbsp;</span></li>
    <li class=""><span>from&nbsp;tb&nbsp;&nbsp;</span></li>
    <li class="alt"><span>group&nbsp;by&nbsp;name&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none;" name="code" class="java" id="code_274_3">--静态SQL,指subject只有语文、数学、物理这三门课程。
select name 姓名,
max(case subject when '语文' then result else 0 end) 语文,
max(case subject when '数学' then result else 0 end) 数学,
max(case subject when '物理' then result else 0 end) 物理,
cast(avg(result*1.0) as decimal(18,2)) 平均分,
sum(result) 总分
from tb
group by name</pre>
/*
<br />
姓名         语文        数学        物理        平均分                总分
<br />
---------- ----------- ----------- ----------- -------------------- -----------
<br />
李四         74          84          94          84.00                252
<br />
张三         74          83          93          83.33                250
<br />
*/
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">查看</a><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">复制到剪切板</a><a href="http://www.java2000.net/viewthread.jsp?tid=274#" style="font-size: 9pt;" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">打印</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>--动态SQL,指subject不止语文、数学、物理这三门课程。&nbsp;&nbsp;</span></span></li>
    <li class=""><span>declare&nbsp;<span class="annotation">@sql1</span><span>&nbsp;varchar(</span><span class="number">8000</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>set&nbsp;<span class="annotation">@sql1</span><span>&nbsp;=&nbsp;</span><span class="string">'select&nbsp;Name&nbsp;as&nbsp;'</span><span>&nbsp;+&nbsp;</span><span class="string">'姓名'</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>select&nbsp;<span class="annotation">@sql1</span><span>&nbsp;=&nbsp;</span><span class="annotation">@sql1</span><span>&nbsp;+&nbsp;</span><span class="string">'&nbsp;,&nbsp;max(case&nbsp;Subject&nbsp;when&nbsp;'</span><span class="string">''</span><span>&nbsp;+&nbsp;Subject&nbsp;+&nbsp;</span><span class="string">''</span><span class="string">'&nbsp;then&nbsp;Result&nbsp;else&nbsp;0&nbsp;end)&nbsp;['</span><span>&nbsp;+&nbsp;Subject&nbsp;+&nbsp;</span><span class="string">']'</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>from&nbsp;(select&nbsp;distinct&nbsp;Subject&nbsp;from&nbsp;tb)&nbsp;as&nbsp;a&nbsp;&nbsp;</span></li>
    <li class=""><span>set&nbsp;<span class="annotation">@sql1</span><span>&nbsp;=&nbsp;</span><span class="annotation">@sql1</span><span>&nbsp;+&nbsp;</span><span class="string">'&nbsp;,&nbsp;cast(avg(result*1.0)&nbsp;as&nbsp;decimal(18,2))&nbsp;平均分,sum(result)&nbsp;总分&nbsp;from&nbsp;tb&nbsp;group&nbsp;by&nbsp;name'</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>exec(<span class="annotation">@sql1</span><span>)&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre style="display: none;" name="code" class="java" id="code_274_4">--动态SQL,指subject不止语文、数学、物理这三门课程。
declare @sql1 varchar(8000)
set @sql1 = 'select Name as ' + '姓名'
select @sql1 = @sql1 + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql1 = @sql1 + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 总分 from tb group by name'
exec(@sql1) </pre>
/*
<br />
姓名         数学        物理        语文        平均分                总分
<br />
---------- ----------- ----------- ----------- -------------------- -----------
<br />
李四         84          94          74          84.00                252
<br />
张三         83          93          74          83.33                250
<br />
*/
<br />
<img src ="http://www.blogjava.net/NicholasEcho/aggbug/248136.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2008-12-24 18:54 <a href="http://www.blogjava.net/NicholasEcho/archive/2008/12/24/248136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate之one2many</title><link>http://www.blogjava.net/NicholasEcho/archive/2008/12/11/245808.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Thu, 11 Dec 2008 15:19:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2008/12/11/245808.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/245808.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2008/12/11/245808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/245808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/245808.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C02%5Cclip_filelist.xml" />
<link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C02%5Cclip_editdata.mso" /><!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PlaceType"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PlaceName"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"></o:smarttagtype><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" latentstylecount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if !mso]><object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"></object>
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]--><style>
<!-- /* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:1 135137280 18 0 262144 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:1 135137280 18 0 262144 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US">Hibernate</span><span style="font-size: 12pt; font-family: 宋体;">中的一对多映射，以一个学校对应多个学生举例。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US">Pojo</span><span style="font-size: 12pt; font-family: Wingdings;" lang="EN-US"><span>--&gt;</span></span><span style="font-size: 12pt;" lang="EN-US"> Student</span></p>
<p class="MsoNormal"><img alt="" src="http://www.blogjava.net/images/blogjava_net/nicholasecho/clip_image001.jpg" width="311" height="393" /><br />
<span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter" />
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0" />
<v:f eqn="sum @0 1 0" />
<v:f eqn="sum 0 0 @1" />
<v:f eqn="prod @2 1 2" />
<v:f eqn="prod @3 21600 pixelWidth" />
<v:f eqn="prod @3 21600 pixelHeight" />
<v:f eqn="sum @0 0 1" />
<v:f eqn="prod @6 1 2" />
<v:f eqn="prod @7 21600 pixelWidth" />
<v:f eqn="sum @8 21600 0" />
<v:f eqn="prod @7 21600 pixelHeight" />
<v:f eqn="sum @10 21600 0" />
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
<o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:233.25pt;
height:294.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\02\clip_image001.png" o:title="" />
</v:shape><![endif]--><!--[if !vml]--><!--[endif]--><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><st1:place w:st="on"><st1:placename w:st="on"><span style="font-size: 12pt;" lang="EN-US">Pojo</span></st1:placename><span style="font-size: 12pt;" lang="EN-US"> </span><span style="font-size: 12pt; font-family: Wingdings;" lang="EN-US"><span>--&gt;</span></span><span style="font-size: 12pt;" lang="EN-US"> <st1:placetype w:st="on">School</st1:placetype></span></st1:place><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:263.25pt;height:307.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\02\clip_image003.png" o:title="" />
</v:shape><![endif]--><!--[if !vml]--><img alt="" src="http://www.blogjava.net/images/blogjava_net/nicholasecho/clip_image002.jpg" width="351" height="410" /><!--[endif]--><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US">Set students</span><span style="font-size: 12pt; font-family: 宋体;">表示被装载的</span><span style="font-size: 12pt;" lang="EN-US">Student</span><span style="font-size: 12pt; font-family: 宋体;">类对象的唯一标识信息，在一对多的映射当中充当外键的作用。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">再来看看</span><span style="font-size: 12pt;" lang="EN-US">hbm.xml</span><span style="font-size: 12pt; font-family: 宋体;">配置信息，</span><span style="font-size: 12pt;" lang="EN-US">Student</span><span style="font-size: 12pt; font-family: 宋体;">的配置信息很简单，因为是被映射的基本上只需配置简单的属性即可。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:393.75pt;height:114.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\02\clip_image005.png" o:title="" />
</v:shape><![endif]--><!--[if !vml]--><img alt="" src="http://www.blogjava.net/images/blogjava_net/nicholasecho/clip_image003.jpg" width="514" height="153" /><!--[endif]--><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">而</span><span style="font-size: 12pt;" lang="EN-US">School</span><span style="font-size: 12pt; font-family: 宋体;">的配置信息就得配置从</span><span style="font-size: 12pt;" lang="EN-US">School</span><span style="font-size: 12pt; font-family: 宋体;">类的主键到</span><span style="font-size: 12pt;" lang="EN-US">Student</span><span style="font-size: 12pt; font-family: 宋体;">类外键的映射关系。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75" style='width:415.5pt;height:193.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\02\clip_image007.png" o:title="" />
</v:shape><![endif]--><!--[if !vml]--><img alt="" src="http://www.blogjava.net/images/blogjava_net/nicholasecho/clip_image004.jpg" width="554" height="258" /><!--[endif]--><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US">Hibernate.cfg.xml</span><span style="font-size: 12pt; font-family: 宋体;">中配置这两个</span><span style="font-size: 12pt;" lang="EN-US">XML</span><span style="font-size: 12pt; font-family: 宋体;">的路径即可。。。</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体;">我们来插入两个学生和一个学校测试一下：</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><!--[if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75" style='width:423pt;height:304.5pt'>
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\02\clip_image009.png" o:title="" />
</v:shape><![endif]--><!--[if !vml]--><img alt="" src="http://www.blogjava.net/images/blogjava_net/nicholasecho/clip_image005.jpg" width="564" height="406" /><!--[endif]--><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US">MySQL</span><span style="font-size: 12pt; font-family: 宋体;">结果为：</span><span style="font-size: 12pt;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><!--[if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75" style='width:189pt;height:195.75pt'>
<v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\02\clip_image011.png" o:title="" />
</v:shape><![endif]--><!--[if !vml]--><img alt="" src="http://www.blogjava.net/images/blogjava_net/nicholasecho/clip_image006.jpg" width="252" height="261" /><!--[endif]--><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.blogjava.net/NicholasEcho/aggbug/245808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2008-12-11 23:19 <a href="http://www.blogjava.net/NicholasEcho/archive/2008/12/11/245808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts1.3.8学习小结</title><link>http://www.blogjava.net/NicholasEcho/archive/2008/11/29/243473.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Sat, 29 Nov 2008 14:46:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2008/11/29/243473.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/243473.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2008/11/29/243473.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/243473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/243473.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C04%5Cclip_filelist.xml" /><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="chsdate"></o:smarttagtype><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" latentstylecount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if !mso]><object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id="ieooui"></object>
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]--><style>
<!-- /* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:1 135137280 18 0 262144 0;}
@font-face
{font-family:"AR PL UMing CN";
mso-font-alt:"Times New Roman";
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:"Bitstream Vera Sans";
mso-font-alt:"Times New Roman";
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:1 135137280 18 0 262144 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:none;
mso-hyphenate:none;
font-size:12.0pt;
font-family:"AR PL UMing CN";
mso-fareast-font-family:"Bitstream Vera Sans";
mso-bidi-font-family:"Times New Roman";
mso-font-kerning:.5pt;
mso-fareast-language:#00FF;}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;
text-underline:single;}
code
{mso-ansi-font-size:12.0pt;
mso-bidi-font-size:12.0pt;
font-family:宋体;
mso-ascii-font-family:宋体;
mso-fareast-font-family:宋体;
mso-hansi-font-family:"Courier New";
mso-bidi-font-family:宋体;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.25pt 841.85pt;
margin:2.0cm 2.0cm 2.0cm 2.0cm;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;
mso-footnote-position:beneath-text;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
<p class="MsoNormal"><span lang="EN-US">Struts</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">是</span><span lang="EN-US">Apache</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">组织研发的一个</span><span lang="EN-US">MVC</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">开源框架，基于</span><span lang="EN-US">J2EE</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">平台，目前我学习的版本是</span><st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">1.3.8</span></st1:chsdate><span style="font-family: &quot;Bitstream Vera Sans&quot;;">，接近两个礼拜的学习后，写下此笔记。</span></p>
<p class="MsoNormal"><span style="font-family: &quot;Bitstream Vera Sans&quot;;">首先应该从普通的</span><span lang="EN-US">JSP+Servlet+JavaBean(</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">后文略写为</span><span lang="EN-US">JSJ)</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">谈起，这样的话才能体现出</span><span lang="EN-US">Struts</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">框架的优秀特点，这里我把纯</span><span lang="EN-US">JSP</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">开发和</span><span lang="EN-US">Struts</span><span lang="EN-US">1.X</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">做个对比。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">1.JSJ</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">开发</span><span lang="EN-US">Web</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">应用时，把经常用到的数据全部封装</span><span lang="EN-US">JavaBean</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">，在当时看来，这是件很好的事情，但是当我们的</span><span lang="EN-US">Web</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">应用变得相对比较庞大时就暴露出</span><span lang="EN-US">JavaBean</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">的不足，当获取到数据时，我们难免都要</span><span lang="EN-US">get or set</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">数据一下，这无疑是纯粹的手工劳动，那有什么解决方法呢？我们留到后面讲。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">2.JSP</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">传递参数到</span><span lang="EN-US">Servlet</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">的时候，</span><span lang="EN-US">Servlet</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">使用</span><span lang="EN-US">HttpServletRequest</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">对象的</span><span lang="EN-US">getParameter</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">方法接收</span><span lang="EN-US">JSP</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">传递过来的参数，当表单的数据量比较多的时候，呵呵，比如一个资料比较详细的用户注册，</span></p>
<p class="MsoNormal"><span style="font-family: &quot;Bitstream Vera Sans&quot;;">那么只能写</span><span lang="EN-US">N</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">多个</span><span lang="EN-US">getParameter</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">3.</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">当要做多个业务的时候，比如做一个用户登录和购物的例子，使用</span><span lang="EN-US">JSJ</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">开发的时候需要把相应的业务传到</span><span lang="EN-US">Servlet</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">的</span><span lang="EN-US">doGet or doPost</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">方法中根据传递的参数进行判断需要调用哪个</span><span lang="EN-US">Model</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">，像购物车有添加商品、修改商品数量、删除商品、购买、清空购物车等等操作，我们用</span><span lang="EN-US">JSJ</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">的时候是不是根据动作参数来判断是购买呢还是删除？那这样的话就购物业务的</span><span lang="EN-US">Servlet</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">的</span><span lang="EN-US">doGet or doPost</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">中就写了许多的判断动作的代码，前期写的时候也许条理很清晰，但是后期维护的话是相当麻烦的。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Struts</span><span lang="EN-US">1.X</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">解决这些赘重问题有了一套非常不错的</span><span lang="EN-US">MVC</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">架构，层与层之间的耦合度缩小使开发人员后期维护变得不那么复杂，但节省代码量就得付出配置的代价，</span><span lang="EN-US">Struts</span><span lang="EN-US">1.X</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">的</span><span lang="EN-US">struts-config.xml</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">为</span><span lang="EN-US">Struts</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">专用的</span><span lang="EN-US">xml</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">配置文件，当我们添加</span><span lang="EN-US">MyE</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">的</span><span lang="EN-US">Struts</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">支持时，此文件就已经生成了，如果你要更改</span><span lang="EN-US">struts-config.xml</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">的名称，同时你就得必须在</span><span lang="EN-US">Web.xml</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">中修改加载时读入的</span><span lang="EN-US">xml</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">文件名，如下：</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;init-param&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;param-name&gt;config&lt;/param-name&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<span>&nbsp; </span></span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">／／改成你修改后的名称</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/init-param&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Bitstream Vera Sans&quot;;">我们打开</span><span lang="EN-US">web.xml</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">来分析一下</span><span style="font-family: 宋体;">下面这几对</span><span style="font-family: &quot;Bitstream Vera Sans&quot;;">标签</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;servlet-name&gt;action&lt;/servlet-name&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;servlet-mapping&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;
</span>&lt;servlet-name&gt;action&lt;/servlet-name&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;
</span>&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;</span>&lt;/servlet-mapping&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">ActionServlet</span><span style="font-family: 宋体;">为</span><span lang="EN-US">Struts1.X</span><span style="font-family: 宋体;">的前端控制的</span><span lang="EN-US">Servlet</span><span style="font-family: 宋体;">，此</span><span lang="EN-US">Servlet</span><span style="font-family: 宋体;">的作用把</span><span lang="EN-US">struts-config.xml</span><span style="font-family: 宋体;">中配置的信息映射到相应的操作中，在添加</span><span lang="EN-US">Struts1.X</span><span style="font-family: 宋体;">支持的时候我们习惯性的使用</span><span lang="EN-US">action</span><span style="font-family: 宋体;">这个名字，上面的</span><span lang="EN-US">&lt;servlet-mapping&gt;</span><span style="font-family: 宋体;">标签又起到一个什么样的作用呢？我们可以把</span><span lang="EN-US">ActionServlet</span><span style="font-family: 宋体;">想像成一个前端拦截器，</span><span lang="EN-US">&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;</span><span style="font-family: 宋体;">是拦截所有以</span><span lang="EN-US">.do</span><span style="font-family: 宋体;">结尾的路径。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">说到前端控制器我们不得不思考一个问题，</span><span lang="EN-US">JSJ</span><span style="font-family: 宋体;">有没有前端控制器、既然有前端控制器那有没有后端控制器？</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">答案是</span><span lang="EN-US">JSJ</span><span style="font-family: 宋体;">中有前端控制器但没有后端控制，我们以前用</span><span lang="EN-US">JSJ</span><span style="font-family: 宋体;">开发的时候是的都是一个一个的</span><span lang="EN-US">Servlet</span><span style="font-family: 宋体;">堆砌出来的前端控制，当用户提交操作的时候通过</span><span lang="EN-US">form</span><span style="font-family: 宋体;">的</span><span lang="EN-US">Action</span><span style="font-family: 宋体;">路径找到相应的控制然后调用相应的</span><span lang="EN-US">Model</span><span style="font-family: 宋体;">业务，这样做不好的地方我们上面已经说过，故此不添赘言。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">而我们理想的状态是当用户提交操作的时候不需要进入前端控制器编写代码来判断需要那种业务，当然配置映射是无可避免的，不写代码又不配置，没有这样好的事情。我们再来看一下</span><span lang="EN-US">ActionServlet</span><span style="font-family: 宋体;">是怎么根据用户的提交调用相应的后端控制器，打开</span><span lang="EN-US">struts-config.xml</span><span style="font-family: 宋体;">分析一下，我们看一下</span><span lang="EN-US">&lt;action-mappings&gt;</span><span style="font-family: 宋体;">这个标签，见名之意，此标签为一个动作映射的配置，它里面有一个子标签叫</span><span lang="EN-US">&lt;action&gt;</span><span lang="EN-US"> </span><span style="font-family: 宋体;">，在这个</span><span lang="EN-US">Action</span><span style="font-family: 宋体;">标签里我们配置映射信息，比如</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;action-mappings&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;action
name=</span><span style="font-family: 宋体;">&#8221;</span><span lang="EN-US">form_name</span><span style="font-family: 宋体;">&#8221;</span><span lang="EN-US">input=</span><span style="font-family: 宋体;">&#8221;</span><span lang="EN-US">/</span><span style="font-family: 宋体;">发生错误后跳转的页面&#8221;</span><span lang="EN-US"> path=</span><span style="font-family: 宋体;">&#8221;</span><span lang="EN-US">/action</span><span style="font-family: 宋体;">提交的名称&#8221;</span><span lang="EN-US">type=</span><span style="font-family: 宋体;">&#8221;后端控制器的全文路径&#8221;</span><span lang="EN-US">&gt; <span>&nbsp;&nbsp;</span>///</span><span style="font-family: 宋体;">如果你的某个后端控制器有多个方法的话，则要在此标签里添加一个</span><span lang="EN-US">parameter</span><span style="font-family: 宋体;">属性，属性内容为你传递参数判断调用那个方法的变量名</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;forward<span>&nbsp; </span>name=</span><span style="font-family: 宋体;">&#8221;</span><span lang="EN-US">key</span><span style="font-family: 宋体;">&#8221;</span><span lang="EN-US">path=</span><span style="font-family: 宋体;">&#8221;</span><span lang="EN-US">/pathName</span><span style="font-family: 宋体;">&#8221;</span><span lang="EN-US"> /&gt;
//</span><span style="font-family: 宋体;">跳转路径，</span><span lang="EN-US">name</span><span style="font-family: 宋体;">为跳转页面</span><span lang="EN-US">(path</span><span style="font-family: 宋体;">属性</span><span lang="EN-US">)</span><span style="font-family: 宋体;">相应的</span><span lang="EN-US">key<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 18.35pt;"><span lang="EN-US">&lt;/action&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/action-mappings&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">可在</span><span lang="EN-US">action-mappings</span><span style="font-family: 宋体;">标签中添加多个</span><span lang="EN-US">action</span><span style="font-family: 宋体;">子标签</span><span lang="EN-US">,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">服务器启动的时候自动在</span><span lang="EN-US">Web.xml</span><span style="font-family: 宋体;">中编译</span><span lang="EN-US">ActionServlet</span><span style="font-family: 宋体;">，并把</span><span lang="EN-US">struts-config.xml</span><span style="font-family: 宋体;">全部读到内存中，如果是第一次加载则创建动态</span><span lang="EN-US">Form</span><span style="font-family: 宋体;">，如果已编译过此</span><span lang="EN-US">Form</span><span style="font-family: 宋体;">则把</span><span lang="EN-US">Form</span><span style="font-family: 宋体;">映射到</span><span lang="EN-US">Action</span><span style="font-family: 宋体;">中，通过</span><span lang="EN-US">action</span><span style="font-family: 宋体;">标签映射到对应的类文件中。这就是</span><span lang="EN-US">ActionServlet</span><span style="font-family: 宋体;">的作用。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">我们再来谈谈那些后端控制器，</span><span lang="EN-US">ActionServlet</span><span style="font-family: 宋体;">既然可以拦截所有以</span><span lang="EN-US">.do</span><span style="font-family: 宋体;">结尾的路径名，</span><code><span>我们应该想想。。。用户从页面提交参数到服务器，那么服务器的一些控制已经通过<span lang="EN-US">xml</span>配置好了，</span></code><span style="font-family: 宋体;">那么它做业务分发的时候怎么传递请求响应和表单数据呢？</span><code><span lang="EN-US"><o:p></o:p></span></code></p>
<p class="MsoNormal"><span style="font-family: 宋体;">这里</span><span lang="EN-US">Struts1.X</span><span style="font-family: 宋体;">类叫</span><span lang="EN-US">Action</span><span style="font-family: 宋体;">，这个</span><span lang="EN-US">Action</span><span style="font-family: 宋体;">有一个方法叫</span><code><span lang="EN-US"><o:p></o:p></span></code></p>
<table class="MsoNormalTable" style="width: 100%;" width="100%" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="padding: 2.25pt; background: white none repeat scroll 0% 0%; width: 1%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="1%">
            <p class="MsoNormal" style="text-align: right;" align="right"><span style="font-family: 宋体;" lang="EN-US"><a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/ActionForward.html" title="class in org.apache.struts.action">ActionForward</a></span><span style="font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
            </td>
            <td style="padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <p class="MsoNormal"><strong><span style="font-family: 宋体;" lang="EN-US"><a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/Action.html#execute%28org.apache.struts.action.ActionMapping,%20org.apache.struts.action.ActionForm,%20javax.servlet.http.HttpServletRequest,%20javax.servlet.http.HttpServletResponse%29">execute</a></span></strong><span style="font-family: 宋体;" lang="EN-US">(<a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/ActionMapping.html" title="class in org.apache.struts.action">ActionMapping</a></span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US">mapping, <a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/ActionForm.html" title="class in org.apache.struts.action">ActionForm</a></span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US">form, javax.servlet.http.HttpServletRequest</span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US">request,
            javax.servlet.http.HttpServletResponse</span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US">response)</span><span style="font-family: 宋体;" lang="EN-US"> <o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><code><span>我们来看看这四个参数的用法，<span lang="EN-US">ActionMapping</span>封装了一些映射的信息，比如找到服务器转发的跳转路径。<span lang="EN-US">ActionForm</span>封装了表单信息<span lang="EN-US">,</span></span><span lang="EN-US"> </span></code><code><span>其他两个参数为就不介绍了，当用户从页面把表单提交到服务器的时候，通过<span lang="EN-US">XML</span>的配置自动会调用<span lang="EN-US">ActionForm</span>类的<span lang="EN-US">execute</span>方法，<span lang="EN-US">execute</span>方法只有一个，业务多的话，我们怎么再做分发呢？<span lang="EN-US"><o:p></o:p></span></span></code></p>
<p class="MsoNormal"><code><span lang="EN-US">Struts1.X</span></code><code><span>有一个类叫<span lang="EN-US">DispatchAction</span>实现于<span lang="EN-US">Actiond</span>的子类</span></code><span lang="EN-US">BaseAction</span><span style="font-family: 宋体;">，</span><span lang="EN-US">DispatchAction</span><span style="font-family: 宋体;">，而这个</span><span lang="EN-US">DispatchAction</span><span style="font-family: 宋体;">的</span><span lang="EN-US">execute</span><span style="font-family: 宋体;">方法与</span><span lang="EN-US">Action</span><span style="font-family: 宋体;">的</span><span lang="EN-US">execute</span><span style="font-family: 宋体;">方法参数一样，并且可以更改为你自己想要的名称，需要注意的是更改的方法必须与传递过来的参数值一致，这样的话我们就可以做到一个动态的后端控制器</span><span lang="EN-US">.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">我们还要谈一下</span><span lang="EN-US">ActionForm</span><span style="font-family: 宋体;">，写一个类继承自</span><span lang="EN-US">ActionForm</span><span style="font-family: 宋体;">重写它的两个方法</span><code><span lang="EN-US"><o:p></o:p></span></code></p>
<table class="MsoNormalTable" style="width: 100%;" width="100%" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="padding: 2.25pt; background: white none repeat scroll 0% 0%; width: 6.28%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="6%">
            <p class="MsoNormal" style="text-align: right;" align="right"><span style="font-family: 宋体;" lang="EN-US">void</span><span style="font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
            </td>
            <td style="padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <p class="MsoNormal"><strong><span style="font-family: 宋体;" lang="EN-US"><a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/ActionForm.html#reset%28org.apache.struts.action.ActionMapping,%20javax.servlet.http.HttpServletRequest%29">reset</a></span></strong><span style="font-family: 宋体;" lang="EN-US">(<a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/ActionMapping.html" title="class in org.apache.struts.action">ActionMapping</a></span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US">mapping,
            javax.servlet.http.HttpServletRequest</span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US">request)</span><span style="font-family: 宋体;" lang="EN-US"> <o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><code><span lang="EN-US"><o:p>&nbsp;</o:p></span></code></p>
<table class="MsoNormalTable" style="width: 100%;" width="100%" border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td style="padding: 2.25pt; background: white none repeat scroll 0% 0%; width: 1%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" valign="top" width="1%">
            <p class="MsoNormal" style="text-align: right;" align="right"><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US"><a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/ActionErrors.html" title="class in org.apache.struts.action">ActionErrors</a></span><span style="font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p>
            </td>
            <td style="padding: 2.25pt; background: white none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
            <p class="MsoNormal"><strong><span style="font-family: 宋体;" lang="EN-US"><a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/ActionForm.html#validate%28org.apache.struts.action.ActionMapping,%20javax.servlet.http.HttpServletRequest%29">validate</a></span></strong><span style="font-family: 宋体;" lang="EN-US">(<a href="mk:@MSITStore:C:%5CDocument%5Cstruts-1.3.8_en_US.CHM::/org/apache/struts/action/ActionMapping.html" title="class in org.apache.struts.action">ActionMapping</a></span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US">mapping,
            javax.servlet.http.HttpServletRequest</span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span style="font-family: 宋体;" lang="EN-US">request)</span><span style="font-family: 宋体;" lang="EN-US"> <o:p></o:p></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Reset</span><span style="font-family: 宋体;">方法为保证数据的安全性，在传入表单数据清空其字段。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Validate</span><span style="font-family: 宋体;">为验证其字段，默认返回错误为空，程序将往下执行，如果你编写代码判断出错的话，则跳转到</span><span lang="EN-US">struts-config.xml</span><span style="font-family: 宋体;">的</span><span lang="EN-US">action</span><span style="font-family: 宋体;">标签的</span><span lang="EN-US">input</span><span style="font-family: 宋体;">属性值中，此</span><span lang="EN-US">input</span><span style="font-family: 宋体;">属性较好的解释应该是</span><span lang="EN-US">error</span><span style="font-family: 宋体;">。</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">当在外界程序需要设置自己编写的</span><span lang="EN-US">ActionForm</span><span style="font-family: 宋体;">子类的字段时，需要用此对象调用</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">&nbsp;get or set</span><span style="font-family: 宋体;">方法，这种</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">get or set</span><span style="font-family: 宋体;">完全可以用</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DynaActionForm</span><span style="font-family: 宋体;">所代替，但实体的</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DTO</span><span style="font-family: 宋体;">有时候还是蛮有用的。我们再来看一下</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">ActionForm</span><span style="font-family: 宋体;">在</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">XML</span><span style="font-family: 宋体;">中的配置信息：</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">&lt;form-beans&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;form-bean <span>&nbsp;</span>name=&#8221;form_name&#8221; type=&#8221;ActionForm</span><span style="font-family: 宋体;">子类的原文路径</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">&#8221; /&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp; </span>///</span><span style="font-family: 宋体;">当我们配置</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">action</span><span style="font-family: 宋体;">标签的时候，</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">action</span><span style="font-family: 宋体;">的</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">name</span><span style="font-family: 宋体;">属性值就是你配置的</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">form-bean</span><span style="font-family: 宋体;">的</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">name</span><span style="font-family: 宋体;">属性值</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">&lt;/ form-beans&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">这个实体的</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DTO</span><span style="font-family: 宋体;">不好的地方是需要编写一个类继承自</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">ActionForm</span><span style="font-family: 宋体;">，而</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DynaActionForm</span><span style="font-family: 宋体;">就做到了把</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">bean</span><span style="font-family: 宋体;">信息完全封装在</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">struts-config.xml</span><span style="font-family: 宋体;">，我们看一下：</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;form-beans&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;form-bean name="userinfo"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>type="org.apache.struts.action.DynaActionForm"&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;form-property name="id"
type="java.lang.Integer" /&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;form-property name="username"
type="java.lang.String" /&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;form-property name="password"
type="java.lang.String" /&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/form-bean&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/form-beans&gt;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">我们现在配置的</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">bean</span><span style="font-family: 宋体;">信息是在</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">&lt;form-beans&gt;</span><span style="font-family: 宋体;">标签里面配置，需要注意的是</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">form-bean</span><span style="font-family: 宋体;">的类型是</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DynaActionForm</span><span style="font-family: 宋体;">，</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">&lt;form-property&gt;</span><span style="font-family: 宋体;">标签里封装了以前在</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DTO</span><span style="font-family: 宋体;">中的字段，那么我们就可以用这个</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">form-bean</span><span style="font-family: 宋体;">的</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">name</span><span style="font-family: 宋体;">属性值映射到</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">&lt;form-property&gt;</span><span style="font-family: 宋体;">里配置的字段了。</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">此笔记还得记录一下</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">Struts1.X</span><span style="font-family: 宋体;">的架构思想，用一个关于卖衣服和鞋子工厂的例子来概述一下：</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">如果要开办一家工厂，首先应该想到的是做什么东西，比如我要做衣服和鞋子，而衣服和鞋子必须得有料子才行，所以我得先弄到料子（</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DTO</span><span style="font-family: 宋体;">或</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DynaActionForm</span><span style="font-family: 宋体;">），这个料子可能不止一种，所以我得先弄到我需要的料子</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">(</span><span style="font-family: 宋体;">编写或配置不同的</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DTO</span><span style="font-family: 宋体;">或</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DynaActionForm)</span><span style="font-family: 宋体;">，那么我还得创建做衣服和鞋子的部门</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">(</span><span style="font-family: 宋体;">类似于</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">DAO</span><span style="font-family: 宋体;">等等</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">)</span><span style="font-family: 宋体;">，部门经理总得有个上级吧，部门经理的上级叫某某经理</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">(DispatchAction)</span><span style="font-family: 宋体;">，这个某某经理只需要把总经理</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">(ActionServlet)</span><span style="font-family: 宋体;">交代要做的一些事情分给下面的部门经理，返回东西给他就行。而总经理上面还有个头儿是董事长</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">(View)</span><span style="font-family: 宋体;">，这个董事长只需要把他需要的信息告诉下级并且返回东西给董事长就行了，其他的一些制度和约束</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">(XML)</span><span style="font-family: 宋体;">都明摆着，按照这个流程运转就</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">OK</span><span style="font-family: 宋体;">了。</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">这是我的理解，有些粗糙，但本质上是这样子的，具体的话还的多花时间去学习。期待</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US">Struts2.X</span><span style="font-family: 宋体;">。。。</span><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: &quot;Times New Roman&quot;;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.blogjava.net/NicholasEcho/aggbug/243473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2008-11-29 22:46 <a href="http://www.blogjava.net/NicholasEcho/archive/2008/11/29/243473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL和JDBC中文乱码问题</title><link>http://www.blogjava.net/NicholasEcho/archive/2008/11/03/238310.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Mon, 03 Nov 2008 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2008/11/03/238310.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/238310.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2008/11/03/238310.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/238310.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/238310.html</trackback:ping><description><![CDATA[MySQL和JDBC的中文乱码问题一直是比较麻烦，首先在考虑不使用过滤器的情况下避免乱码的问题<br />
设置URL：jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;amp;characterEncoding=UTF-8<br />
这条语句是解决MySQL和Java之间的乱码，当然还得设置MySQL的内部编码才行，在MySQL的ConfigManager中配置MySQL的编码，如图：<br />
<img src="http://www.blogjava.net/images/blogjava_net/nicholasecho/mysql.jpg" alt="" border="0" /><br />
把字符编码设置后，而MySQL的配置文件里的编码却没有更改，进入MySQL的安装目录<br />
找到My.ini把default-character-set更改成GBK即可，然后重启服务，我的MySQL和Java之间的中文乱码问题就是这样解决的。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/NicholasEcho/aggbug/238310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2008-11-03 11:52 <a href="http://www.blogjava.net/NicholasEcho/archive/2008/11/03/238310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>各种排序算法(转载)</title><link>http://www.blogjava.net/NicholasEcho/archive/2008/10/31/237914.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Fri, 31 Oct 2008 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2008/10/31/237914.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/237914.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2008/10/31/237914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/237914.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/237914.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 插入排序:&nbsp;Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;package&nbsp;org.rut.util.algorithm.support;&nbsp;import&nbsp;org.rut...&nbsp;&nbsp;<a href='http://www.blogjava.net/NicholasEcho/archive/2008/10/31/237914.html'>阅读全文</a><img src ="http://www.blogjava.net/NicholasEcho/aggbug/237914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2008-10-31 22:36 <a href="http://www.blogjava.net/NicholasEcho/archive/2008/10/31/237914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单列+JDom+XML</title><link>http://www.blogjava.net/NicholasEcho/archive/2008/10/17/234926.html</link><dc:creator>橡皮人</dc:creator><author>橡皮人</author><pubDate>Fri, 17 Oct 2008 06:50:00 GMT</pubDate><guid>http://www.blogjava.net/NicholasEcho/archive/2008/10/17/234926.html</guid><wfw:comment>http://www.blogjava.net/NicholasEcho/comments/234926.html</wfw:comment><comments>http://www.blogjava.net/NicholasEcho/archive/2008/10/17/234926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/NicholasEcho/comments/commentRss/234926.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/NicholasEcho/services/trackbacks/234926.html</trackback:ping><description><![CDATA[&nbsp; 使用JDom做一个数据屏蔽的例子<br />
&nbsp;<br />
&nbsp; XML代码如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">sys-info</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">sqlinfo</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">driver</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.mysql.jdbc.Driver</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">driver</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">url</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">jdbc:mysql://localhost:3306/address</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">url</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">username</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">root</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">username</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">password</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">nicholas</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">password</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">sqlinfo</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">programeinfo</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">beans</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="com.nicholas.inter.IUserDAO"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="com.nicholas.inter.imple.UserDAO"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">beans</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">programeinfo</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">sys-info</span><span style="color: #0000ff;">&gt;</span></div>
其中bean的信息使用属性来封装，这样做比多个XML对象要灵活一些，我的意图是用Util下的Map装载这些信息，实现父类引用指向子类对象。<br />
<br />
写一个JDBC访问对象的Bean<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;SysInfo&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;driver;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;username;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;password;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;SysInfo()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getDriver()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;driver;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setDriver(String&nbsp;driver)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.driver&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;driver;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getUrl()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setUrl(String&nbsp;url)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getUsername()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;username;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setUsername(String&nbsp;username)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.username&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;username;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getPassword()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;password;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setPassword(String&nbsp;password)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.password&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;password;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
<br />
现在开始使用JDom解析XML的数据<br />
<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ParseMessage&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;SAXBuilder&nbsp;builder&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Document&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;el_root&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">创建单列模式</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;ParseMessage&nbsp;instance;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;ParseMessage()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SAXBuilder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;builder.build(</span><span style="color: #000000;">"</span><span style="color: #000000;">config.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el_root&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;doc.getRootElement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(JDOMException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;ParseMessage&nbsp;getInstance()&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(instance&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ParseMessage();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;instance;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;SysInfo&nbsp;getSysInfo()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SysInfo&nbsp;si&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;el_driver&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;<br />
<br />
XPath.selectSingleNode(el_root,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">//driver</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;el_url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;<br />
<br />
XPath.selectSingleNode(el_root,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">//url</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;el_username&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;<br />
<br />
XPath.selectSingleNode(el_root,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">//username</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;el_password&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;<br />
<br />
XPath.selectSingleNode(el_root,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">//password</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;driver&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;el_driver.getText();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;el_url.getText();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;username&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;el_username.getText();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;el_password.getText();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;si&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SysInfo();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;si.setDriver(driver);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;si.setUrl(url);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;si.setUsername(username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;si.setPassword(password);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(JDOMException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;si;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Map&nbsp;initBeans()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;map&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;HashMap();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;XPath.selectNodes(el_root,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">//bean</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(JDOMException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;index&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;list.size();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;index;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;el_parameter&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Element)&nbsp;list.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute&nbsp;att_inter&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;<br />
<br />
el_parameter.getAttribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">id</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attribute&nbsp;att_imple&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;<br />
<br />
el_parameter.getAttribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">class</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;inter&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;att_inter.getValue();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;imple&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;att_imple.getValue();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(inter,&nbsp;imple);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;map;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;UserDAO&nbsp;getUserDAO(Class&nbsp;c)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserDAO&nbsp;userdao</span><span style="color: #000000;">=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">用户数据访问层</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;map</span><span style="color: #000000;">=</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.initBeans();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userdao</span><span style="color: #000000;">=</span><span style="color: #000000;">(UserDAO)Class.forName(map.get<br />
<br />
(c.getName()).toString()).newInstance();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(InstantiationException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(IllegalAccessException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(ClassNotFoundException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;userdao;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
<br />
<br />
DB层依靠ParseMessage类解析出来的数据获得Driver等等<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;SysInfo&nbsp;si</span><span style="color: #000000;">=</span><span style="color: #000000;">ParseMessage.getInstance().getSysInfo();<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;Connection&nbsp;getConn()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">1&nbsp;装驱动</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(si.getDriver());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DriverManager.getConnection(si.getUrl(),&nbsp;si.getUsername(),&nbsp;si.getPassword());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;conn;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
Servlet依靠JSP页面传递过来的Username Password进行判断<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">response.setContentType(</span><span style="color: #000000;">"</span><span style="color: #000000;">text/html;charset=gbk</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;username</span><span style="color: #000000;">=</span><span style="color: #000000;">request.getParameter(</span><span style="color: #000000;">"</span><span style="color: #000000;">username</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password</span><span style="color: #000000;">=</span><span style="color: #000000;">request.getParameter(</span><span style="color: #000000;">"</span><span style="color: #000000;">password</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;User();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">User&nbsp;bean</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setUsername(username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setPassword(password);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserDAO&nbsp;userdao</span><span style="color: #000000;">=</span><span style="color: #000000;">ParseMessage.getInstance().getUserDAO<br />
<br />
(IUserDAO.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">传递UserDAO父接口</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(userdao.isRight(user))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">登录成功!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">登录失败!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
其中应该注意的是XML的路径问题，使用Tomcat配置项目的时候并没有把XML文件导入到项目的子文件中，根据需要可以把XMl文件放到SRC中，修改ParseMessage中的路径即可，因为是写小例子，我直接把XML文件放到Tomcat目录下的Bin文件夹中，Tomcat默认会查找Bin文件夹。<br />
<br />
初次写Java单列和JDom，刚写的时候非常不习惯，但是要达到屏蔽数据的效果，可以考虑使用。<br />
<br />
<img src ="http://www.blogjava.net/NicholasEcho/aggbug/234926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/NicholasEcho/" target="_blank">橡皮人</a> 2008-10-17 14:50 <a href="http://www.blogjava.net/NicholasEcho/archive/2008/10/17/234926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>