﻿<?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/wyxdeniro/category/27590.html</link><description>舍我其谁</description><language>zh-cn</language><lastBuildDate>Mon, 07 Jan 2008 17:48:41 GMT</lastBuildDate><pubDate>Mon, 07 Jan 2008 17:48:41 GMT</pubDate><ttl>60</ttl><item><title>向上转型与接口回调的区别</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/12/25/170225.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Tue, 25 Dec 2007 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/12/25/170225.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/170225.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/12/25/170225.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/170225.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/170225.html</trackback:ping><description><![CDATA[(1)、接口回调：<br />
&nbsp;&nbsp;&nbsp;&nbsp;可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量，那么该接口变量就可以调用被类实现的接口的方法。实际上，当接口变量调用被类实现的接口中的方法时，就是通知相应的对象调用接口的方法，这一过程称为对象功能的接口回调。<br />
(2)、向上转型：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1&gt;如果a是类A的一个引用，那么，a可以指向类A的一个实例，或者说指向类A的一个子类，这是向上转型的情形。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2&gt;如果a是类A的一个引用，那么，a必须指向实现了接口A的一个类的实例。这是接口回调的情形。在java里面，向上转型是自动进行的，但是向下转型却不是，需要我们自己定义强制进行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从实现了某接口的对象，得到对此接口的引用，与向上转型为这个对象的基类，实质上效果是一样的。这些对象都可以调用基类型提供的方法，对于接口来说就是回调接口中的方法，对于父类来说就是调用父类的方法。当然在向上转型的情况下，还牵扯到子类重写父类方法的情形。
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/170225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-12-25 09:41 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/12/25/170225.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java小结</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/12/14/167797.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Fri, 14 Dec 2007 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/12/14/167797.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/167797.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/12/14/167797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/167797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/167797.html</trackback:ping><description><![CDATA[&nbsp; Java<span style="font-family: 宋体">常用问题</span>
<p><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）、</span><strong><u>java.lang.String split</u></strong></p>
<p style="margin-left: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">String value = "a,b,c,d,e"; </span></p>
<p style="margin-left: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">String[] names = value.split(","); </span></p>
<p style="margin-left: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">for(int i=0,n=names.length;i </span></p>
<p style="margin-left: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">System.out.print(names[i]); </span></p>
<p style="margin-left: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">} </span></p>
<p style="margin-left: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">public String[] split(String regex)</span><span style="font-size: 12pt; font-family: 宋体">其中的参数，表示正则表达式。</span></p>
<p style="margin-left: 18pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: 宋体">（2）、设置页面不缓存信息（在过滤器中设置）</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">httpResponse.setHeader(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"Cache-Control"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">, </span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"no-cache"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpResponse.setHeader(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"Cache-Control"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">, </span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"no-store"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpResponse.setDateHeader(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"Expires"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">, 0);<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.wyq.WebFilter;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.IOException;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.Filter;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.FilterChain;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.FilterConfig;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletException;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletRequest;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletResponse;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletResponse;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpSession;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.Globals;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionErrors;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionMessage;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts.action.ActionMessages;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_622_1821_Open_Image" onclick="this.style.display='none'; Codehighlighter1_622_1821_Open_Text.style.display='none'; Codehighlighter1_622_1821_Closed_Image.style.display='inline'; Codehighlighter1_622_1821_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_622_1821_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_622_1821_Closed_Text.style.display='none'; Codehighlighter1_622_1821_Open_Image.style.display='inline'; Codehighlighter1_622_1821_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ContextFilter&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Filter</span><span id="Codehighlighter1_622_1821_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_622_1821_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;onErrorUrl;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;FilterConfig&nbsp;filterConfig;<br />
<img id="Codehighlighter1_711_754_Open_Image" onclick="this.style.display='none'; Codehighlighter1_711_754_Open_Text.style.display='none'; Codehighlighter1_711_754_Closed_Image.style.display='inline'; Codehighlighter1_711_754_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_711_754_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_711_754_Closed_Text.style.display='none'; Codehighlighter1_711_754_Open_Image.style.display='inline'; Codehighlighter1_711_754_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&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;destroy()&nbsp;</span><span id="Codehighlighter1_711_754_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_711_754_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_888_1594_Open_Image" onclick="this.style.display='none'; Codehighlighter1_888_1594_Open_Text.style.display='none'; Codehighlighter1_888_1594_Closed_Image.style.display='inline'; Codehighlighter1_888_1594_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_888_1594_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_888_1594_Closed_Text.style.display='none'; Codehighlighter1_888_1594_Open_Image.style.display='inline'; Codehighlighter1_888_1594_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&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;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,&nbsp;FilterChain&nbsp;doFilter)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException,&nbsp;ServletException&nbsp;</span><span id="Codehighlighter1_888_1594_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_888_1594_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;httpRequest</span><span style="color: #000000">=</span><span style="color: #000000">(HttpServletRequest)request;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;httpResponse</span><span style="color: #000000">=</span><span style="color: #000000">(HttpServletResponse)response;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;httpSession</span><span style="color: #000000">=</span><span style="color: #000000">httpRequest.getSession();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpResponse.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Cache-Control</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">no-cache</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpResponse.setHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Cache-Control</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">no-store</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpResponse.setDateHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Expires</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1280_1538_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1280_1538_Open_Text.style.display='none'; Codehighlighter1_1280_1538_Closed_Image.style.display='inline'; Codehighlighter1_1280_1538_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1280_1538_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1280_1538_Closed_Text.style.display='none'; Codehighlighter1_1280_1538_Open_Image.style.display='inline'; Codehighlighter1_1280_1538_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(httpSession.getAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">epAccountInfo</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_1280_1538_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1280_1538_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionErrors&nbsp;errors</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ActionErrors();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errors.add(ActionMessages.GLOBAL_MESSAGE,</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ActionMessage(</span><span style="color: #000000">"</span><span style="color: #000000">没有登陆</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpRequest.setAttribute(Globals.ERROR_KEY,errors);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpRequest.getRequestDispatcher(onErrorUrl).forward(httpRequest,&nbsp;httpResponse);<br />
<img id="Codehighlighter1_1543_1588_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1543_1588_Open_Text.style.display='none'; Codehighlighter1_1543_1588_Closed_Image.style.display='inline'; Codehighlighter1_1543_1588_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1543_1588_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1543_1588_Closed_Text.style.display='none'; Codehighlighter1_1543_1588_Open_Image.style.display='inline'; Codehighlighter1_1543_1588_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span id="Codehighlighter1_1543_1588_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1543_1588_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doFilter.doFilter(request,&nbsp;response);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_1660_1817_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1660_1817_Open_Text.style.display='none'; Codehighlighter1_1660_1817_Closed_Image.style.display='inline'; Codehighlighter1_1660_1817_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1660_1817_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1660_1817_Closed_Text.style.display='none'; Codehighlighter1_1660_1817_Open_Image.style.display='inline'; Codehighlighter1_1660_1817_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&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;init(FilterConfig&nbsp;config)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;</span><span id="Codehighlighter1_1660_1817_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1660_1817_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filterConfig</span><span style="color: #000000">=</span><span style="color: #000000">config;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onErrorUrl</span><span style="color: #000000">=</span><span style="color: #000000">filterConfig.getInitParameter(</span><span style="color: #000000">"</span><span style="color: #000000">onError</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_1785_1814_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1785_1814_Open_Text.style.display='none'; Codehighlighter1_1785_1814_Closed_Image.style.display='inline'; Codehighlighter1_1785_1814_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1785_1814_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1785_1814_Closed_Text.style.display='none'; Codehighlighter1_1785_1814_Open_Image.style.display='inline'; Codehighlighter1_1785_1814_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(onErrorUrl</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">||</span><span style="color: #000000">""</span><span style="color: #000000">.equals(onErrorUrl))</span><span id="Codehighlighter1_1785_1814_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1785_1814_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onErrorUrl</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">onError</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
(3)<font face="Courier New" size="2">select * from TH_INT_ORG a where PAR_INT_ORG_ID is null</font> 判断某个字段为空的纪录，要用is null</span>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/167797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-12-14 16:05 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/12/14/167797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java程序员面试必备的32个要点---转中国it实验室</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/12/10/166668.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 10 Dec 2007 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/12/10/166668.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/166668.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/12/10/166668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/166668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/166668.html</trackback:ping><description><![CDATA[<p><strong>第一，谈谈final, finally, finalize的区别。<br />
</strong><br />
　final 用于声明属性，方法和类，分别表示属性不可变，方法不可覆盖，类不可继承。finally是异常处理语句结构的一部分，表示总是执行。finalize是 Object类的一个方法，在垃圾收集器执行的时候会调用被回收对象的此方法，可以覆盖此方法提供垃圾收集时的其他资源回收，例如关闭文件等。</p>
<p><strong>第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)?</strong> <br />
<br />
　可以继承其他类或完成其他接口，在swing编程中常用此方式。　</p>
<p><strong>第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。<br />
</strong><br />
　Static Nested Class是被声明为静态（static）的内部类，它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。　　</p>
<p><strong>第四，&amp;和&amp;&amp;的区别。<br />
</strong><br />
&nbsp;　&amp;是位运算符，表示按位与运算，&amp;&amp;是逻辑运算符，表示逻辑与（and）.　　</p>
<p><strong>第五，HashMap和Hashtable的区别。<br />
<br />
</strong>　HashMap是Hashtable的轻量级实现（非线程<a class="channel_keylink" href="http://security.chinaitlab.com/" target="_blank">安全</a>的实现），他们都完成了Map接口，主要区别在于HashMap允许空（null）键值（key）,由于非线程<a class="channel_keylink" href="http://security.chinaitlab.com/" target="_blank">安全</a>，效率上可能高于Hashtable.　　</p>
<p><strong>第六，Collection 和 Collections的区别。<br />
　</strong>　<br />
　Collection是集合类的上级接口，继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类，他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。　　</p>
<p><strong>第七，什么时候用assert。<br />
<br />
</strong>　1.4新增关键字（语法），用于测试boolean表达式状态，可用于调试程序。使用方法 assert <boolean>，表示如果表达式为真（true）,则下面的语句执行，否则抛出AssertionError。另外的使用方式assert &lt; boolean表达式&gt;:<other>，表示如果表达式为真，后面的表达式忽略，否则后面表达式的值用于AssertionError的构建参数。注意编译时要增加-source 1.4 参数，否则报错。]运行时要增加 &#8211;ea参数，否则assert行被忽略　　</other></boolean></p>
<p><strong>第八，GC是什么? 为什么要有GC? <br />
　</strong>　<br />
　GC是垃圾收集的意思（Gabage Collection）,内存处理是编程人员容易出现问题的地方，忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃，<a class="channel_keylink" href="http://java.chinaitlab.com/" target="_blank">Java</a>提供的GC功能可以 自动监测对象是否超过作用域从而达到自动回收内存的目的，<a class="channel_keylink" href="http://java.chinaitlab.com/" target="_blank">Java</a>语言没有提供释放已分配内存的显示操作方法。 　　</p>
<p><strong>第九，String s = new String("xyz");创建了几个String Object?<br />
</strong><br />
　两个　　</p>
<p><strong>第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少? <br />
<br />
</strong>　Math.round(11.5)==12Math.round(-11.5)==-11round方法返回与参数最接近的长整数，参数加1/2后求其floor.　　</p>
<p><strong>第十一，short s1 = 1; s1 = s1 + 1;有什么错?</strong> <strong>short s1 = 1; s1 += 1;有什么错?</strong></p>
<p>　short s1 = 1; s1 = s1 + 1; （s1+1运算结果是int型，需要强制转换类型）short s1 = 1; s1 += 1;（可以正确编译）　　</p>
<p><strong>第十二，sleep() 和 wait() 有什么区别?</strong> <br />
<br />
　sleep是线程类（Thread）的方法，导致此线程暂停执行指定时间，给执行机会给其他线程，但是监控状态依然保持，到时后会自动恢复。调用 sleep不会释放对象锁。wait是Object类的方法，对此对象调用wait方法导致本线程放弃对象锁，进入等待此对象的等待锁定池，只有针对此对 象发出notify方法（或notifyAll）后本线程才进入对象锁定池准备获得对象锁进入运行状态。　　</p>
<p><strong>第十三，Java有没有goto?</strong> <br />
<br />
　没有　　很十三的问题，如果哪个面试的问到这个问题，我劝你还是别进这家公司。</p>
<p><strong>第十四，数组有没有length()这个方法? String有没有length()这个方法？<br />
<br />
</strong>　数组没有length()这个方法，有length的属性。<br />
　String有有length()这个方法。</p>
<p><strong>第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?<br />
</strong><br />
　方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现， 重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方法被重写 (Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被&#8220;屏蔽&#8221;了。如果在一个类中定义了多个同名的方 法，它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。</p>
<strong>第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?<br />
</strong><br />
　Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。<br />
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的是当两个分离的对象的内容和类型相配的话，返回真值。<br />
<p><strong>第十八，error和exception有什么区别?<br />
</strong><br />
　error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。<br />
　exception 表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况。</p>
<p><strong>第十九，List, Set, Map是否继承自Collection接口?<br />
</strong><br />
List，Set是<br />
Map不是</p>
<p><strong>第二十，abstract class和interface有什么区别?<br />
</strong><br />
　声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。<br />
<br />
　接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个 有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。 然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到 接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口。</p>
<p><strong>第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized?<br />
<br />
</strong>都不能</p>
<p><strong>第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?<br />
<br />
</strong>　接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数。</p>
<p><strong>第二十三，启动一个线程是用run()还是start()?<br />
</strong><br />
　启动一个线程是调用start()方法，使线程所代表的虚拟处理机处于可运行状态，这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。</p>
<p><strong>第二十四，构造器Constructor是否可被override?<br />
</strong><br />
　构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Overloading。</p>
<p><strong>第二十五，是否可以继承String类?<br />
</strong><br />
　String类是final类故不可以继承。</p>
<p><strong>第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法?<br />
<br />
</strong>　不能，一个对象的一个synchronized方法只能由一个线程访问。</p>
<p><strong>第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后?<br />
</strong><br />
会执行，在return前执行。</p>
<p><strong>第二十八，编程题: 用最有效率的方法算出2乘以8等於几?<br />
</strong><br />
有C背景的程序员特别喜欢问这种问题。<br />
2 &lt;&lt; 3</p>
<p><strong>第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对?<br />
</strong><br />
不对，有相同的hash code。</p>
<p><strong>第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递?</strong> <br />
<br />
　是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的。</p>
<p><strong>第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上?<br />
</strong><br />
　switch（expr1）中，expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。</p>
<p><strong>第三十二，编程题: 写一个Singleton出来。<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。<br />
一般Singleton模式通常有几种种形式:<br />
<br />
　第一种形式: 定义一个类，它的构造函数为private的，它有一个static的private的该类变量，在类初始化时实例话，通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。</p>
<p>
<table style="border-top-style: dotted; border-right-style: dotted; border-left-style: dotted; border-bottom-style: dotted" bordercolor="#cccccc" cellspacing="0" cellpadding="3" width="500" align="center" bgcolor="#f3f3f3" border="1" heihgt="">
    <tbody>
        <tr>
            <td>public class Singleton {<br />
            　　private Singleton(){}<br />
            　　//在自己内部定义自己一个实例，是不是很奇怪？<br />
            　　//注意这是private 只供内部调用<br />
            　　private static Singleton instance = new Singleton();<br />
            　　//这里提供了一个供外部访问本class的静态方法，可以直接访问　　<br />
            　　public static Singleton getInstance() {<br />
            　　　　return instance; 　　<br />
            　　 } <br />
            }&nbsp;&nbsp;</td>
        </tr>
    </tbody>
</table>
</p>
<p><br />
第二种形式: </p>
<p>
<table style="border-top-style: dotted; border-right-style: dotted; border-left-style: dotted; border-bottom-style: dotted" bordercolor="#cccccc" cellspacing="0" cellpadding="3" width="500" align="center" bgcolor="#f3f3f3" border="1" heihgt="">
    <tbody>
        <tr>
            <td>public class Singleton { <br />
            　　private static Singleton instance = null;<br />
            　　public static synchronized Singleton getInstance() {<br />
            　　//这个方法比上面有所改进，不用每次都进行生成对象，只是第一次　　　 　<br />
            　　//使用时生成实例，提高了效率！<br />
            　　if (instance==null)<br />
            　　　　instance＝new Singleton();<br />
            return instance; 　　} <br />
            }&nbsp;</td>
        </tr>
    </tbody>
</table>
<br />
&nbsp;<br />
其他形式:<br />
定义一个类，它的构造函数为private的，所有方法为static的。<br />
一般认为第一种形式要更加安全些 <br />
</p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/166668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-12-10 14:58 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/12/10/166668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程编程（3）---转mldn</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166032.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Fri, 07 Dec 2007 06:31:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166032.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/166032.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/166032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/166032.html</trackback:ping><description><![CDATA[<font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一、run()和start()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这两个方法应该都比较熟悉，把需要并行处理的代码放在run()方法中，start()方法启动线程将自动调用 run()方法，这是由Java的内存机制规定的。并且run()方法必须是public访问权限，返回值类型为void。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、关键字Synchronized&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个关键字用于保护共享数据，当然前提是要分清哪些数据是共享数据。每个对象都有一个锁标志，当一个线程访问该对象时，被Synchronized修饰的数据将被&#8220;上锁&#8221;，阻止其他线程访问。当前线程访问完这部分数据后释放锁标志，其他线程就可以访问了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三、sleep()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使当前线程(即调用该方法的线程)暂停执行一段时间，让其他线程有机会继续执行，但它并不释放对象锁。也就是如果有Synchronized同步块，其他线程仍然不同访问共享数据。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;四、join() <br />
join()方法使调用该方法的线程在此之前执行完毕，也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;五、yield()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它与sleep()类似，只是不能由用户指定暂停多长时间，并且yield()方法只能让同优先级的线程有执行的机会。 <br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;六、wait()和notify()、notifyAll()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这三个方法用于协调多个线程对共享数据的存取，所以必须在Synchronized语句块内使用这三个方法。前面说过Synchronized这个关键字用于保护共享数据，阻止其他线程对共享数据的存取。但是这样程序的流程就很不灵活了，如何才能在当前线程还没退出Synchronized数据块时让其他线程也有机会访问共享数据呢？此时就用这三个方法来灵活控制。 </p>
<p>wait()方法使当前线程暂停执行并释放对象锁标志，让其他线程可以进入Synchronized数据块，当前线程被放入对象等待池中。当调用 notify()方法后，将从对象的等待池中移走一个任意的线程并放到锁标志等待池中，只有锁标志等待池中的线程能够获取锁标志；如果锁标志等待池中没有线程，则notify()不起作用。 </p>
<p>notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。</p>
</font>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/166032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-12-07 14:31 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程编程（2）</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166027.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Fri, 07 Dec 2007 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166027.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/166027.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/166027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/166027.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[线程的并发与并行]
<p><font face="Times New Roman">　　在单CPU系统中，系统调度在某一时刻只能让一个线程运行，虽然这种调试机制有多种形式(大多数是时间片轮巡为主)，但无论如何，要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。而在多CPU系统中，可以让两个以上的线程同时运行，这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[JAVA线程对象] </p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在JAVA中，要开始一个线程，有两种方式。一是直接调用Thread实例的start()方法，二是</font><font face="Times New Roman">将Runable实例传给一个Thread实例然后调用它的start()方法。线程对象和线程是两个完全不同的概念。这里我们再次深入一下，生成一个线程的实例，并不代表启动了线程。而启动线程是说在某个线程对象上启动了该实例对应的线程，当该线程结束后，并不会就立即消失。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在线程对象a上调用join()方法，就是让当前正在执行的线程等待线程对象a对应的线程运行完成后才继续运行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）、通过Thread实例的start()，一个Thread的实例只能产生一个线程，不同实例的多个线程<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）、Runnable的实例是可运行的，但它自己并不能直接运行，它需要被Thread对象来包装才行运行:同一实例(Runnable实例)的多个线程</font></p>
</font>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/166027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-12-07 14:21 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java动态代理实现AOP学习（1）</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166008.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Fri, 07 Dec 2007 04:34:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166008.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/166008.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166008.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/166008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/166008.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;AOP主要应用于日志记录，性能统计，安全控制,事务处理等方面。它的主要意图就要将日志记录，性能统计，安全控制等等代码从商业逻辑代码中清楚的划分出来，我们可以把这些行为一个一个单独看作系统所要解决的问题，就是所谓的面向问题的编程(不知将AOP译作面向问题的编程是否欠妥)。通过对这些行为的分离，我们希望可以将它们独立地配置到商业方法中，而要改变这些行为也不需要影响到商业方法代码。<br />
&nbsp;&nbsp;&nbsp;&nbsp;（1）、创建接口，指明要实现的功能：<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.wyq.dynamic.proxy;<br />
<img id="Codehighlighter1_66_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_119_Open_Text.style.display='none'; Codehighlighter1_66_119_Closed_Image.style.display='inline'; Codehighlighter1_66_119_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_66_119_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_66_119_Closed_Text.style.display='none'; Codehighlighter1_66_119_Open_Image.style.display='inline'; Codehighlighter1_66_119_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;BusinessInterface&nbsp;</span><span id="Codehighlighter1_66_119_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_66_119_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">定义实现类要实现的具体的方法</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&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;processBusiness();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;（2）、创建InvocationHandler的实现类，在invoke中指明被代理的具体动作<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_0_154_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_154_Open_Text.style.display='none'; Codehighlighter1_0_154_Closed_Image.style.display='inline'; Codehighlighter1_0_154_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_154_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_154_Closed_Text.style.display='none'; Codehighlighter1_0_154_Open_Image.style.display='inline'; Codehighlighter1_0_154_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_154_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_154_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;Created&nbsp;on&nbsp;2005-12-7<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;TODO&nbsp;To&nbsp;change&nbsp;the&nbsp;template&nbsp;for&nbsp;this&nbsp;generated&nbsp;file&nbsp;go&nbsp;to<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;Window&nbsp;-&nbsp;Preferences&nbsp;-&nbsp;Java&nbsp;-&nbsp;Code&nbsp;Style&nbsp;-&nbsp;Code&nbsp;Templates<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.wyq.dynamic.proxy;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.InvocationHandler;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.Method;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_266_287_Open_Image" onclick="this.style.display='none'; Codehighlighter1_266_287_Open_Text.style.display='none'; Codehighlighter1_266_287_Closed_Image.style.display='inline'; Codehighlighter1_266_287_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_266_287_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_266_287_Closed_Text.style.display='none'; Codehighlighter1_266_287_Open_Image.style.display='inline'; Codehighlighter1_266_287_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_266_287_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_266_287_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;wyq<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_289_433_Open_Image" onclick="this.style.display='none'; Codehighlighter1_289_433_Open_Text.style.display='none'; Codehighlighter1_289_433_Closed_Image.style.display='inline'; Codehighlighter1_289_433_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_289_433_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_289_433_Closed_Text.style.display='none'; Codehighlighter1_289_433_Open_Image.style.display='inline'; Codehighlighter1_289_433_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_289_433_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_289_433_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">程序员通过实现java.lang.reflect.InvocationHandler接口提供一个执行处理器，<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;然后通过java.lang.reflect.Proxy得到一个代理对象，通过这个代理对象来执行商业方法,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;在商业方法被调用的同时，执行处理器会被自动调用<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_488_872_Open_Image" onclick="this.style.display='none'; Codehighlighter1_488_872_Open_Text.style.display='none'; Codehighlighter1_488_872_Closed_Image.style.display='inline'; Codehighlighter1_488_872_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_488_872_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_488_872_Closed_Text.style.display='none'; Codehighlighter1_488_872_Open_Image.style.display='inline'; Codehighlighter1_488_872_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;LogHandler&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;&nbsp;InvocationHandler</span><span id="Codehighlighter1_488_872_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_488_872_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Object&nbsp;delegate;<br />
<img id="Codehighlighter1_551_580_Open_Image" onclick="this.style.display='none'; Codehighlighter1_551_580_Open_Text.style.display='none'; Codehighlighter1_551_580_Closed_Image.style.display='inline'; Codehighlighter1_551_580_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_551_580_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_551_580_Closed_Text.style.display='none'; Codehighlighter1_551_580_Open_Image.style.display='inline'; Codehighlighter1_551_580_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;LogHandler(Object&nbsp;delegate)</span><span id="Codehighlighter1_551_580_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_551_580_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.delegate</span><span style="color: #000000">=</span><span style="color: #000000">delegate;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;invoke(Object&nbsp;proxy,&nbsp;Method&nbsp;method,&nbsp;Object[]&nbsp;args)<br />
<img id="Codehighlighter1_668_870_Open_Image" onclick="this.style.display='none'; Codehighlighter1_668_870_Open_Text.style.display='none'; Codehighlighter1_668_870_Closed_Image.style.display='inline'; Codehighlighter1_668_870_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_668_870_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_668_870_Closed_Text.style.display='none'; Codehighlighter1_668_870_Open_Image.style.display='inline'; Codehighlighter1_668_870_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Throwable&nbsp;</span><span id="Codehighlighter1_668_870_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_668_870_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;o</span><span style="color: #000000">=</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_693_798_Open_Image" onclick="this.style.display='none'; Codehighlighter1_693_798_Open_Text.style.display='none'; Codehighlighter1_693_798_Closed_Image.style.display='inline'; Codehighlighter1_693_798_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_693_798_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_693_798_Closed_Text.style.display='none'; Codehighlighter1_693_798_Open_Image.style.display='inline'; Codehighlighter1_693_798_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_693_798_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_693_798_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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">AOP开始！</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o</span><span style="color: #000000">=</span><span style="color: #000000">method.invoke(delegate,args);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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">AOP结束！</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_827_855_Open_Image" onclick="this.style.display='none'; Codehighlighter1_827_855_Open_Text.style.display='none'; Codehighlighter1_827_855_Closed_Image.style.display='inline'; Codehighlighter1_827_855_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_827_855_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_827_855_Closed_Text.style.display='none'; Codehighlighter1_827_855_Open_Image.style.display='inline'; Codehighlighter1_827_855_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(RuntimeException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_827_855_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_827_855_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;o;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;（3）、实现第一次定义的接口<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.wyq.dynamic.proxy;<br />
<img id="Codehighlighter1_88_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_88_157_Open_Text.style.display='none'; Codehighlighter1_88_157_Closed_Image.style.display='inline'; Codehighlighter1_88_157_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_88_157_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_88_157_Closed_Text.style.display='none'; Codehighlighter1_88_157_Open_Image.style.display='inline'; Codehighlighter1_88_157_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BusinessObject&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;BusinessInterface&nbsp;</span><span id="Codehighlighter1_88_157_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_88_157_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_121_155_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_155_Open_Text.style.display='none'; Codehighlighter1_121_155_Closed_Image.style.display='inline'; Codehighlighter1_121_155_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_121_155_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_121_155_Closed_Text.style.display='none'; Codehighlighter1_121_155_Open_Image.style.display='inline'; Codehighlighter1_121_155_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;processBusiness()&nbsp;</span><span id="Codehighlighter1_121_155_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_121_155_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;（4）、调用处理器<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.wyq.dynamic.proxy;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.InvocationHandler;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.Proxy;<br />
<img id="Codehighlighter1_134_608_Open_Image" onclick="this.style.display='none'; Codehighlighter1_134_608_Open_Text.style.display='none'; Codehighlighter1_134_608_Closed_Image.style.display='inline'; Codehighlighter1_134_608_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_134_608_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_134_608_Closed_Text.style.display='none'; Codehighlighter1_134_608_Open_Image.style.display='inline'; Codehighlighter1_134_608_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BusinessMain&nbsp;</span><span id="Codehighlighter1_134_608_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_134_608_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_177_606_Open_Image" onclick="this.style.display='none'; Codehighlighter1_177_606_Open_Text.style.display='none'; Codehighlighter1_177_606_Closed_Image.style.display='inline'; Codehighlighter1_177_606_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_177_606_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_177_606_Closed_Text.style.display='none'; Codehighlighter1_177_606_Open_Image.style.display='inline'; Codehighlighter1_177_606_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_177_606_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_177_606_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">首先是实现接口BusinessInterface</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BusinessInterface&nbsp;businessImp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BusinessObject();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">向InvocationHandler中添加要代理的实现类</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InvocationHandler&nbsp;handler&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LogHandler(businessImp);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">通过proxy类将实现类与handler中的处理器绑定</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BusinessInterface&nbsp;proxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(BusinessInterface)&nbsp;Proxy.newProxyInstance(&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;businessImp.getClass().getClassLoader(),&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;businessImp.getClass().getInterfaces(),&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handler);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用处理器，触发事件</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy.processBusiness();&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/166008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-12-07 12:34 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/12/07/166008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中基本数据类型与流的操作</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/165988.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Fri, 07 Dec 2007 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/165988.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/165988.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/12/07/165988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/165988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/165988.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;Java中除了二进制文件和使用文本文件外还有基于Data的数据操作，这里的Data指的是Java的基本数据类型和String。基本数据类型包括byte、int、char、long、float、double、boolean和short。<br />
&nbsp;&nbsp;&nbsp;&nbsp;说到Java的基本数据类型必须谈到的两个类是DataInputStream和DataOutputStream。它们提供了对Java基本数据类型的操作，但是这些方法事实上是在两个重要的接口中定义的DataInput和DataOutput，它们的功能就是把二进制的字节流转换成Java的基本数据类型，同时还提供了从数据中使用UTF-8编码构建String的功能。有一个重要的类RandomAccessFile实现了DataInput和DataOutput两个接口使得他能够对文件同时进行写和读的操作。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在DataInputStream和DataOutputStream两个类中的方法都很简单，基本结构为readXXXX()和writeXXXX()其中XXXX代表基本数据类型或者String<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.j2medev.mingjava;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestDataIO<br />
<img id="Codehighlighter1_73_752_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_752_Open_Text.style.display='none'; Codehighlighter1_73_752_Closed_Image.style.display='inline'; Codehighlighter1_73_752_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_73_752_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_73_752_Closed_Text.style.display='none'; Codehighlighter1_73_752_Open_Image.style.display='inline'; Codehighlighter1_73_752_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_73_752_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_73_752_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException<br />
<img id="Codehighlighter1_135_750_Open_Image" onclick="this.style.display='none'; Codehighlighter1_135_750_Open_Text.style.display='none'; Codehighlighter1_135_750_Closed_Image.style.display='inline'; Codehighlighter1_135_750_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_135_750_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_135_750_Closed_Text.style.display='none'; Codehighlighter1_135_750_Open_Image.style.display='inline'; Codehighlighter1_135_750_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />　</span><span id="Codehighlighter1_135_750_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_135_750_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　Account&nbsp;account&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Account(</span><span style="color: #000000">"</span><span style="color: #000000">mingjava</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">eric.zhan@263.net</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">25</span><span style="color: #000000">,</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">before&nbsp;serialization<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　System.out.println(account.toString());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　ByteArrayOutputStream&nbsp;baos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ByteArrayOutputStream();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　DataOutputStream&nbsp;dos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataOutputStream(baos);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将数据通过输出流存储到字节数组中</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">　　account.serialize(dos);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　DataInputStream&nbsp;dis&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataInputStream(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ByteArrayInputStream(baos.toByteArray()));</span><span style="color: #008000">//</span><span style="color: #008000">将数据通过输入流读到字节数组中</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　Account&nbsp;sAccount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Account.deserialize(dis);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">after&nbsp;serialization<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　System.out.println(sAccount.toString());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　dos.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　dis.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.j2medev.mingjava;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Account<br />
<img id="Codehighlighter1_825_1731_Open_Image" onclick="this.style.display='none'; Codehighlighter1_825_1731_Open_Text.style.display='none'; Codehighlighter1_825_1731_Closed_Image.style.display='inline'; Codehighlighter1_825_1731_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_825_1731_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_825_1731_Closed_Text.style.display='none'; Codehighlighter1_825_1731_Open_Image.style.display='inline'; Codehighlighter1_825_1731_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_825_1731_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_825_1731_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;userName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;email&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;gender&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Account()<br />
<img id="Codehighlighter1_961_962_Open_Image" onclick="this.style.display='none'; Codehighlighter1_961_962_Open_Text.style.display='none'; Codehighlighter1_961_962_Closed_Image.style.display='inline'; Codehighlighter1_961_962_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_961_962_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_961_962_Closed_Text.style.display='none'; Codehighlighter1_961_962_Open_Image.style.display='inline'; Codehighlighter1_961_962_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />　</span><span id="Codehighlighter1_961_962_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_961_962_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Account(String&nbsp;userName,&nbsp;String&nbsp;email,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age,&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;gender)<br />
<img id="Codehighlighter1_1038_1133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1038_1133_Open_Text.style.display='none'; Codehighlighter1_1038_1133_Closed_Image.style.display='inline'; Codehighlighter1_1038_1133_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1038_1133_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1038_1133_Closed_Text.style.display='none'; Codehighlighter1_1038_1133_Open_Image.style.display='inline'; Codehighlighter1_1038_1133_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />　</span><span id="Codehighlighter1_1038_1133_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1038_1133_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　</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 />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　</span><span style="color: #0000ff">this</span><span style="color: #000000">.email&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;email;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　</span><span style="color: #0000ff">this</span><span style="color: #000000">.age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;age;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　</span><span style="color: #0000ff">this</span><span style="color: #000000">.gender&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;gender;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;serialize(DataOutputStream&nbsp;dos)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException<br />
<img id="Codehighlighter1_1201_1302_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1201_1302_Open_Text.style.display='none'; Codehighlighter1_1201_1302_Closed_Image.style.display='inline'; Codehighlighter1_1201_1302_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1201_1302_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1201_1302_Closed_Text.style.display='none'; Codehighlighter1_1201_1302_Open_Image.style.display='inline'; Codehighlighter1_1201_1302_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />　</span><span id="Codehighlighter1_1201_1302_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1201_1302_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　dos.writeUTF(userName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　dos.writeUTF(email);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　dos.writeInt(age);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　dos.writeBoolean(gender);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Account&nbsp;deserialize(DataInputStream&nbsp;dis)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException<br />
<img id="Codehighlighter1_1381_1575_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1381_1575_Open_Text.style.display='none'; Codehighlighter1_1381_1575_Closed_Image.style.display='inline'; Codehighlighter1_1381_1575_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1381_1575_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1381_1575_Closed_Text.style.display='none'; Codehighlighter1_1381_1575_Open_Image.style.display='inline'; Codehighlighter1_1381_1575_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />　</span><span id="Codehighlighter1_1381_1575_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1381_1575_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　Account&nbsp;account&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Account();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　account.userName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dis.readUTF();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　account.email&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dis.readUTF();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　account.age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dis.readInt();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　account.gender&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dis.readBoolean();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;account;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;toString()<br />
<img id="Codehighlighter1_1605_1729_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1605_1729_Open_Text.style.display='none'; Codehighlighter1_1605_1729_Closed_Image.style.display='inline'; Codehighlighter1_1605_1729_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1605_1729_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1605_1729_Closed_Text.style.display='none'; Codehighlighter1_1605_1729_Open_Image.style.display='inline'; Codehighlighter1_1605_1729_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />　</span><span id="Codehighlighter1_1605_1729_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1605_1729_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />　　</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">UserName&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;userName&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;Email&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;email&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;age&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;age&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;gender&nbsp;=&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;(gender&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">male</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">female</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />　}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/165988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-12-07 11:02 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/12/07/165988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中的pageEncoding和contentType属性(转赛迪网络)</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/30/164228.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Fri, 30 Nov 2007 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/30/164228.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/164228.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/30/164228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/164228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/164228.html</trackback:ping><description><![CDATA[<p>关于JSP页面中的pageEncoding和contentType两种属性的区别： <br />
<br />
pageEncoding是jsp文件本身的编码 <br />
<br />
contentType的charset是指服务器发送给客户端时的内容编码 <br />
<br />
JSP要经过两次的&#8220;编码&#8221;，第一阶段会用pageEncoding，第二阶段会用utf-8至utf-8，第三阶段就是由Tomcat出来的网页， 用的是contentType。 <br />
<br />
第一阶段是jsp编译成.java，它会根据pageEncoding的设定读取jsp，结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码（即.java），如果pageEncoding设定错了，或没有设定，出来的就是中文乱码。 <br />
<br />
第二阶段是由JAVAC的JAVA源码至java byteCode的编译，不论JSP编写时候用的是什么编码方案，经过这个阶段的结果全部是UTF-8的encoding的java源码。 <br />
<br />
JAVAC用UTF-8的encoding读取java源码，编译成UTF-8 encoding的二进制码（即.class），这是JVM对常数字串在二进制码（java encoding）内表达的规范。 <br />
<br />
第三阶段是Tomcat（或其的application container）载入和执行阶段二的来的JAVA二进制码，输出的结果，也就是在客户端见到的，这时隐藏在阶段一和阶段二的参数contentType就发挥了功效 <br />
</p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/164228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-30 12:46 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/30/164228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中的实现继承和面向接口编程</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/29/163981.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Thu, 29 Nov 2007 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/29/163981.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163981.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/29/163981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163981.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;继承分为2种：接口继承和实现继承。相对于接口继承，实现继承的问题要更多，他会带来更多的耦合。例子：我要实现一个A类，A类又继承于B类，现在又有了新的需求，需要实现一个线程安全的A类，我又定义了一个C类继承于A并覆盖了A中的部分代码。<br />
&nbsp;&nbsp;&nbsp;&nbsp;因为A继承于B,A不得不对外暴露出B所有的public方法，即便其中的某些方法对它可能是不需要的；甚至更糟的是，可能其中的某些方法能改变A得状态，而A对这些改变并不知情，这就会造成A得逻辑错误。<br />
&nbsp;&nbsp;&nbsp;&nbsp;如果我要在B中添加新的方法，这个方法就有可能在逻辑上破坏它的派生类A,C。因此在基类添加方法时，必须检查这些修改是否会对派生类产生影响。<br />
&nbsp;&nbsp;&nbsp;&nbsp;关于何时采用继承，一个重要的原则是确定方法是否能够共享。可以说是用接口还是抽象类的原则是，如果多个派生类的方法内容没有共同的地方，就用接口作为抽象；如果多个派生类的方法含有共同的地方，就用抽象类作为抽象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;面向接口编程，实际上是面向抽象编程，将抽象概念和具体实现相隔离。这一原则使得我们拥有了更高层次的抽象模型，在面对不断变更的需求时，只要抽象模型做得好，修改代码就要容易的多。<br />
&nbsp;&nbsp;&nbsp;&nbsp;相比于继承，OO中多态的概念要更重要。一个接口可以对应多个实现类，对于声明为接口类型的方法参数、类的字段，它们要比实现类更易于扩展、稳定，这也是多态的优点。假如我以实现类作为方法参数定义了一个方法void doSomething（ArrayList list），但如果领导哪天觉得 ArrayList不如LinkedList更好用，我将不得不将方法重构为void doSomething（LinkedList list），相应地要在所有调用此方法的地方修改参数类型（很遗憾地，我连对象创建也是采用ArrayList list = new ArrayList（）方式，这将大大增加我的修改工作量）。如果领导又觉得用list<a class="channel_keylink" href="http://stor.chinaitlab.com/" target="_blank">存储</a>数据不如set好的话，我将再一次重构方法，但这一次我变聪明了，我将方法定义为void doSomething（Set set），创建对象的方式改为Set set = new HashSet（）。但这样仍不够，如果领导又要求将set改回list怎么办？所以我应该将方法重构为void doSomething（Collection collection）， Collection的抽象程度最高，更易于替换具体的实现类。即便需要List或者Set固有的特性，我也可以做向下类型转换解决问题，尽管这样做并不安全。<br />
&nbsp;&nbsp;&nbsp;&nbsp;面向接口编程最重要的价值在于隐藏实现，将抽象的实现细节封装起来而不对外开放，封装这对于<a class="channel_keylink" href="http://java.chinaitlab.com/" target="_blank">Java</a> EE 中的分层设计和框架设计尤其重要。但即便在编程时使用了接口，我们也需要将接口和实现对应起来，这就引出如何创建对象的问题。在创建型设计模式中，单例、工厂方法（模板方法）、抽象工厂等模式都是很好的解决办法。现在流行的控制反转（也叫依赖注入）模式是以声明的方式将抽象与实现连接起来，这既减少了单调的工厂类也更易于单元测试。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-29 14:14 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/29/163981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>List,set,Map的区别</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/28/163622.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Wed, 28 Nov 2007 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/28/163622.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163622.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/28/163622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163622.html</trackback:ping><description><![CDATA[List接口对Collection进行了简单的扩充，它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中，并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储，因此它的随机访问速度极快，而LinkedList的内部实现是链表，它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历，而ListIterator则继承了Iterator的思想，并提供了对List进行双向遍历的方法。 <br />
<br />
Set接口也是Collection的一种扩展，而与List不同的时，在Set中的对象元素不能重复，也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素，但是你放到HashSet中的对象需要实现hashCode()方法，它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放，这就要求你放入其中的对象是可排序的，这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的，它就应该实现Comparable接口。有时多个类具有相同的排序算法，那就不需要在每分别重复定义相同的排序算法，只要实现Comparator接口即可。集合框架中还有两个很实用的公用类：Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法，Arrays则是对一个数组进行类似的操作。 <br />
<br />
<br />
Map是一种把键对象和值对象进行关联的容器，而一个值对象又可以是一个Map，依次类推，这样就可形成一个多级映射。对于键对象来说，像Set一样，一个Map容器中的键对象不允许重复，这是为了保持查找结果的一致性;如果有两个键对象一样，那你想得到那个键对象所对应的值对象时就有问题了，可能你得到的并不是你想的那个值对象，结果会造成混乱，所以键的唯一性很重要，也是符合集合的性质的。当然在使用过程中，某个键所对应的值对象可能会发生变化，这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上，这不会发生任何问题（不过对你的使用却可能会造成不便，你不知道你得到的到底是那一个键所对应的值对象）。Map有两种比较常用的实现：HashMap和TreeMap。HashMap也用到了哈希码的算法，以便快速查找一个键，TreeMap则是对键按序存放，因此它便有一些扩展的方法，比如firstKey(),lastKey()等，你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单，用pub(Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-28 09:55 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/28/163622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线程编成（1）</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/27/163439.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Tue, 27 Nov 2007 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/27/163439.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163439.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/27/163439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163439.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;首先，和进程不同的是，线程是共享地址空间的，在多线程程序中，线程可以从准备就绪队列中得到，并在可获得的系统CPU上运行。操作系统和JVM可以控制线程的移动。<br />
&nbsp;&nbsp;&nbsp;&nbsp;多个线程的执行是并发的，也就是在逻辑上&#8220;同时&#8221;，而不管是否是物理上的&#8220;同时&#8221;。<br />
&nbsp;&nbsp;&nbsp;&nbsp;协作式线程模型允许线程自己决定什么时候放弃处理器来等候其他的线程。要求线程共享执行时间。<br />
&nbsp;&nbsp;&nbsp;&nbsp;抢占式线程模型中，操作系统可以在任何时候打断线程。要求线程正确共享资源。<br />
&nbsp;&nbsp;&nbsp;&nbsp;大多数应用程序要求线程互相通信来同步他们的动作。在JAVA程序中最简单实现同步的方法就是上锁&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;线程的4种状态<br />
　　1. 新状态：线程已被创建但尚未执行（start() 尚未被调用）。<br />
　　<br />
　　2. 可执行状态：线程可以执行，虽然不一定正在执行。CPU 时间随时可能被分配给该线程，从而使得它执行。<br />
　　<br />
　　3. 死亡状态：正常情况下 run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果，但是不被推荐，前者会产生异常，后者是强制终止，不会释放锁。<br />
　　<br />
　　4. 阻塞状态：线程不会被分配 CPU 时间，无法执行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;
 <img src ="http://www.blogjava.net/wyxdeniro/aggbug/163439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-27 14:08 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/27/163439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java汉字编码问题</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/27/163428.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Tue, 27 Nov 2007 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/27/163428.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163428.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/27/163428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163428.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;1、&nbsp;java默认的编码方式是UNICODE，而我们中国人通常使用的文件和数据库都是基于GB2312或者BIG5等方式编码的，另外，不同的操作系统对中文字符的支持也不尽相同。标准的java编译器javac使用的字符集是系统默认的字符集，比如windows操作系统上就是GBK,而在LINUX操作系统上就是ISO-8859-1.<br />
&nbsp;&nbsp;&nbsp;&nbsp;在JAVA编程中，要对中文字符进行正确的编码转换。<br />
（1）、向网页输出中文字符串的时候：都要做UNICODE到GBK得转换。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; height: 39px; background-color: #eeeeee"><img id="Codehighlighter1_2_46_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_46_Open_Text.style.display='none'; Codehighlighter1_2_46_Closed_Image.style.display='inline'; Codehighlighter1_2_46_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_2_46_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_46_Closed_Text.style.display='none'; Codehighlighter1_2_46_Open_Image.style.display='inline'; Codehighlighter1_2_46_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_46_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_2_46_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@page&nbsp;contentType</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&#8221;text</span><span style="color: #000000; background-color: #f5f5f5">/</span><span style="color: #000000; background-color: #f5f5f5">html;charset</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">gb2312&#8221;&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span></div>
<br />
（2）、有些JSP版本中没有提供对输出字符集的支持，这就要手动编码输出了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;String s1=request.getParameter("keyword");<br />
&nbsp;&nbsp;&nbsp;&nbsp;String s2=request.getParameter(s1.getBytes("ISO-8859-1"),"GBK");<br />
getBytes 方法用于将中文字符以&#8220;ISO-8859-1&#8221;编码方式转化成字节数组，而&#8220;GBK&#8221; 是目标编码方式。 <br />
附加：<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、<font face="Times New Roman" size="3">最早的编码是iso8859-1，和ascii编码相似。但为了方便表示各种各样的语言，逐渐出现了很多标准编码，重要的有如下几个。<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;（1）、iso8859-1 ：<font face="Times New Roman" size="3">属于单字节编码，最多能表示的字符范围是0-255，应用于英文系列</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;（2）、GB2312/GBK ：<br />
<font face="Times New Roman" size="3">这就是汉子的国标码，专门用来表示汉字，是双字节编码，而英文字母和iso8859-1一致（兼容iso8859-1编码）。其中gbk编码能够用来同时表示繁体字和简体字，而gb2312只能表示简体字，gbk是兼容gb2312编码的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;（3）、UNICODE ：<font face="Times New Roman" size="3">这是最统一的编码，可以用来表示所有语言的字符，而且是定长双字节（也有四字节的）编码，包括英文字母在内。所以可以说它是不兼容iso8859-1编码的，也不兼容任何编码。不过，相对于iso8859-1编码来说，uniocode编码只是在前面增加了一个0字节，比如字母a为"00 61"。</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;（4）、UTF ：<font face="Times New Roman" size="3">考虑到unicode编码不兼容iso8859-1编码，而且容易占用更多的空间：因为对于英文字母，unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码，utf编码兼容iso8859-1编码，同时也可以用来表示所有语言的字符，不过，utf编码是不定长编码，每一个字符的长度从1-6个字节不等。另外，utf编码自带简单的校验功能。一般来讲，英文字母都是用一个字节表示，而汉字使用三个字节。<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;
<p><font face="Times New Roman" size="3">&nbsp;&nbsp;&nbsp;&nbsp;3. java对字符的处理</font></p>
<p><font face="Times New Roman" size="3">在java应用软件中，会有多处涉及到字符集编码，有些地方需要进行正确的设置，有些地方需要进行一定程度的处理。</font></p>
<p><font face="Times New Roman" size="3">3.1. getBytes(charset)</font></p>
<p><font face="Times New Roman" size="3">这是java字符串处理的一个标准函数，其作用是将字符串所表示的字符按照charset编码，并以字节方式表示。注意字符串在java内存中总是按unicode编码存储的。比如"中文"，正常情况下（即没有错误的时候）存储为"4e2d 6587"，如果charset为"gbk"，则被编码为"d6d0 cec4"，然后返回字节"d6 d0 ce c4"。如果charset为"utf8"则最后是"e4 b8 ad e6 96 87"。如果是"iso8859-1"，则由于无法编码，最后返回 "3f 3f"（两个问号）。</font></p>
<p><font face="Times New Roman" size="3">3.2. new String(charset)</font></p>
<p><font face="Times New Roman" size="3">这是java字符串处理的另一个标准函数，和上一个函数的作用相反，将字节数组按照charset编码进行组合识别，最后转换为unicode存储。参考上述getBytes的例子，"gbk" 和"utf8"都可以得出正确的结果"4e2d 6587"，但iso8859-1最后变成了"003f 003f"（两个问号）。</font></p>
<p><font face="Times New Roman" size="3">因为utf8可以用来表示/编码所有字符，所以new String( str.getBytes( "utf8" ), "utf8" ) === str，即完全可逆。</font></p>
<p><font face="Times New Roman" size="3">3.3. setCharacterEncoding()</font></p>
<p><font face="Times New Roman" size="3">该函数用来设置http请求或者相应的编码。</font></p>
<p><font face="Times New Roman" size="3">对于request，是指提交内容的编码，指定后可以通过getParameter()则直接获得正确的字符串，如果不指定，则默认使用iso8859-1编码，需要进一步处理。参见下述"表单输入"。值得注意的是在执行setCharacterEncoding()之前，不能执行任何getParameter()。java doc上说明：This method must be called prior to reading request parameters or reading input using getReader()。而且，该指定只对POST方法有效，对GET方法无效。分析原因，应该是在执行第一个getParameter()的时候，java将会按照编码分析所有的提交内容，而后续的getParameter()不再进行分析，所以setCharacterEncoding()无效。而对于GET方法提交表单是，提交的内容在URL中，一开始就已经按照编码分析所有的提交内容，setCharacterEncoding()自然就无效。</font></p>
<p><font face="Times New Roman" size="3">对于response，则是指定输出内容的编码，同时，该设置会传递给浏览器，告诉浏览器输出内容所采用的编码。</font></p>
<p><font face="Times New Roman" size="3">3.4. 处理过程</font></p>
<p><font face="Times New Roman" size="3">下面分析两个有代表性的例子，说明java对编码有关问题的处理方法。</font></p>
<p><font face="Times New Roman" size="3">3.4.1. 表单输入</font></p>
<p><font face="Times New Roman" size="3">User input *(gbk:d6d0 cec4) browser *(gbk:d6d0 cec4) web server iso8859-1(00d6 00d 000ce 00c4) class，需要在class中进行处理：getbytes("iso8859-1")为d6 d0 ce c4，new String("gbk")为d6d0 cec4，内存中以unicode编码则为4e2d 6587。</font></p>
<p><font face="Times New Roman" size="3">l 用户输入的编码方式和页面指定的编码有关，也和用户的操作系统有关，所以是不确定的，上例以gbk为例。</font></p>
<p><font face="Times New Roman" size="3">l 从browser到web server，可以在表单中指定提交内容时使用的字符集，否则会使用页面指定的编码。而如果在url中直接用?的方式输入参数，则其编码往往是操作系统本身的编码，因为这时和页面无关。上述仍旧以gbk编码为例。</font></p>
<p><font face="Times New Roman" size="3">l Web server接收到的是字节流，默认时（getParameter）会以iso8859-1编码处理之，结果是不正确的，所以需要进行处理。但如果预先设置了编码（通过request. setCharacterEncoding ()），则能够直接获取到正确的结果。</font></p>
<p><font face="Times New Roman" size="3">l 在页面中指定编码是个好习惯，否则可能失去控制，无法指定正确的编码。</font></p>
<p><font face="Times New Roman" size="3">3.4.2. 文件编译</font></p>
<p><font face="Times New Roman" size="3">假设文件是gbk编码保存的，而编译有两种编码选择：gbk或者iso8859-1，前者是中文windows的默认编码，后者是linux的默认编码，当然也可以在编译时指定编码。</font></p>
<p><font face="Times New Roman" size="3">Jsp *(gbk:d6d0 cec4) java file *(gbk:d6d0 cec4) compiler read uincode(gbk: 4e2d 6587; iso8859-1: 00d6 00d 000ce 00c4) compiler write utf(gbk: e4b8ad e69687; iso8859-1: *) compiled file unicode(gbk: 4e2d 6587; iso8859-1: 00d6 00d 000ce 00c4) class。所以用gbk编码保存，而用iso8859-1编译的结果是不正确的。</font></p>
<p><font face="Times New Roman" size="3">class unicode(4e2d 6587) system.out / jsp.out gbk(d6d0 cec4) os console / browser。</font></p>
<p><font face="Times New Roman" size="3">l 文件可以以多种编码方式保存，中文windows下，默认为ansi/gbk。</font></p>
<p><font face="Times New Roman" size="3">l 编译器读取文件时，需要得到文件的编码，如果未指定，则使用系统默认编码。一般class文件，是以系统默认编码保存的，所以编译不会出问题，但对于jsp文件，如果在中文windows下编辑保存，而部署在英文linux下运行/编译，则会出现问题。所以需要在jsp文件中用pageEncoding指定编码。</font></p>
<p><font face="Times New Roman" size="3">l Java编译的时候会转换成统一的unicode编码处理，最后保存的时候再转换为utf编码。</font></p>
<p><font face="Times New Roman" size="3">l 当系统输出字符的时候，会按指定编码输出，对于中文windows下，System.out将使用gbk编码，而对于response（浏览器），则使用jsp文件头指定的contentType，或者可以直接为response指定编码。同时，会告诉browser网页的编码。如果未指定，则会使用iso8859-1编码。对于中文，应该为browser指定输出字符串的编码。</font></p>
<p><font face="Times New Roman" size="3">l browser显示网页的时候，首先使用response中指定的编码（jsp文件头指定的contentType最终也反映在response上），如果未指定，则会使用网页中meta项指定中的contentType。</font></p>
<p><font face="Times New Roman" size="3">3.5. 几处设置</font></p>
<p><font face="Times New Roman" size="3">对于web应用程序，和编码有关的设置或者函数如下。</font></p>
<p><font face="Times New Roman" size="3">3.5.1. jsp编译</font></p>
<p><font face="Times New Roman" size="3">指定文件的存储编码，很明显，该设置应该置于文件的开头。例如：。另外，对于一般class文件，可以在编译的时候指定编码。</font></p>
<p><font face="Times New Roman" size="3">3.5.2. jsp输出</font></p>
<p><font face="Times New Roman" size="3">指定文件输出到browser是使用的编码，该设置也应该置于文件的开头。例如：。该设置和response.setCharacterEncoding("GBK")等效。</font></p>
<p><font face="Times New Roman" size="3">3.5.3. meta设置</font></p>
<p><font face="Times New Roman" size="3">指定网页使用的编码，该设置对静态网页尤其有作用。因为静态网页无法采用jsp的设置，而且也无法执行response.setCharacterEncoding()。例如：</font></p>
<p><font face="Times New Roman" size="3">如果同时采用了jsp输出和meta设置两种编码指定方式，则jsp指定的优先。因为jsp指定的直接体现在response中。</font></p>
<p><font face="Times New Roman" size="3">需要注意的是，apache有一个设置可以给无编码指定的网页指定编码，该指定等同于jsp的编码指定方式，所以会覆盖静态网页中的meta指定。所以有人建议关闭该设置。</font></p>
<p><font face="Times New Roman" size="3">3.5.4. form设置</font></p>
<p><font face="Times New Roman" size="3">当浏览器提交表单的时候，可以指定相应的编码。例如： <br />
。一般不必不使用该设置，浏览器会直接使用网页的编码。</font></p>
<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-27 13:28 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/27/163428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java语言异常处理(转载) </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163305.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163305.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163305.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163305.html</trackback:ping><description><![CDATA[结论一：既然捕获了异常，就要对它进行适当的处理。不要捕获异常之后又把它丢弃，不予理睬。<br />
结论二：在catch语句中尽可能指定具体的异常类型，必要时使用多个catch.不要试图处理所有可能出现的异常。<br />
结论三：保证所有资源都被正确释放。充分运用finally关键词。<br />
结论四：在异常处理模块中提供适量的错误原因信息，组织错误信息使其易于理解和阅读。<br />
结论五：尽量减小try块的体积。<br />
结论六：全面考虑可能出现的异常以及这些异常对执行流程的影响。<br />
<p>OutputStreamWriter out = ... <br />
java.sql.Connection conn = ... <br />
try { <br />
　Statement stat = conn.createStatement(); <br />
　ResultSet rs = stat.executeQuery( <br />
　　"select uid, name from user"); <br />
　while (rs.next()) <br />
　{ <br />
　　out.println("ID：" + rs.getString("uid") + "，姓名: "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + rs.getString("name")); <br />
　} <br />
} <br />
catch(SQLException sqlex) <br />
{ <br />
　out.println("警告：数据不完整"); <br />
　throw new ApplicationException("读取数据时出现SQL错误", sqlex); <br />
} <br />
catch(IOException ioex) <br />
{ <br />
　throw new ApplicationException("写入数据时出现IO错误", ioex); <br />
} <br />
finally <br />
{ <br />
　if (conn != null) { <br />
　　try { <br />
　　　conn.close(); <br />
　　} <br />
　　catch(SQLException sqlex2) <br />
　　{ <br />
　　　System.err(this.getClass().getName() + ".mymethod - 不能关闭数据库连接:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " + sqlex2.toString()); <br />
　　} <br />
　} </p>
<p>　if (out != null) { <br />
　　try { <br />
　　　out.close(); <br />
　　} <br />
　　catch(IOException ioex2) <br />
　　{ <br />
　　　System.err(this.getClass().getName() + ".mymethod - 不能关闭输出文件"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + ioex2.toString()); <br />
　　} <br />
　} <br />
} </p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:56 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP处理表单的一些经验分享 (转载)</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163306.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163306.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163306.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163306.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163306.html</trackback:ping><description><![CDATA[<font face="Times New Roman">1：超连接跳转 比如：url="jsp/managerAction.do?"+url;只传递参数，不传递表单<br />
<font face="Times New Roman">2：即传参又提交表单 比如：<br />
<font face="Times New Roman">function commonSubmit(url)<br />
{<br />
form1.action="/jsp/managerAction.do?"+url;<br />
form1.action.method=post;<br />
form1.submit();<br />
}</font><br />
<font face="Times New Roman">3：js和java变量互传<br />
java变量传给js好办，var a ="";注意要将引号""加上；js变量给java稍微复杂点，一般是在表单中用一个<br />
的隐藏表单元素，然后在脚本中将js变量值赋给它:
<p><font face="Times New Roman">var jsParamValue=aaaa;<br />
form1.jsParam.value=jsParamValue;</font></p>
<p><font face="Times New Roman">然后就可以request.getPrameter("jsPrama");来取得js变量值了<br />
<font face="Times New Roman">4：Action中request不会丢掉<br />
不知大家有没有注意到这个好处，Struts架构中是由一个ActionServlet来作为MVC的控制器角色，jsp页面提交后request是传到ActionServelt中的， 而ActionServlet将根据struts-config.xml中的配置调用相应的Action的方法，并将从jsp中获得的request传给Action类，这样request的生命周期是连续的，即你在jsp中提交了表单，在Action中执行了方法，再回到jsp页面，用request.getParamter()取jsp页面的表单元素值会发现它还在，这对于页面下拉列表等选择项防止复位是一个很好实现方法。</font><br />
</p>
<p><font face="Times New Roman">5：传参时参数有空格的情况<br />
如果你提交form时带参数，比如form1.action="/jsp/Action.do?param1="+value1,注意如果value1中带有空格的话，你在</font></p>
<p><font face="Times New Roman">Action中request.getParameter("param1");</font></p>
<p><font face="Times New Roman">取得的只是空格前的值，因此如果有这种带空格的参数在传递时，个人建议是将其转化为特定的字符串，value1=value1.replaceAll(" ","%NULL%");<br />
然后在Action中将其转回来：request.getParamter("param1").replaceAll("%NULL%"," "); <br />
</p>
<p><font face="Times New Roman">6：jsp中开模式对话框的方式<br />
与Swing中类似，jsp中也有模式对话框这一概念，你可以将一个jsp页面放到一个模式对话框中打开，这样在模式对话框消失前，原jsp页面将不可操作。特别适合父页面中要做一些额外的选择操作，而又没必要跳转到新的jsp页面的时候，<br />
开模式对话框的方式参考如下：</font></p>
<p><font face="Times New Roman">Function open() {<br />
If(window.showModelDialog())<br />
{<br />
Var returnValue = showModelDialog(&#8220;/jsp/模式窗口包含的jsp页面路径&#8221;;<br />
help=0;status=0;center=yes;dialogWidth=100pt;dialogHeight=100pt&#8221;);<br />
}</font></p>
<p><font face="Times New Roman">}</font></p>
</font></font></font></font></font>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:56 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bat文件说明</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163302.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163302.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163302.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163302.html</trackback:ping><description><![CDATA[<p>扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 <br />
<br />
==== 注 ======================================= <br />
.bat是dos下的批处理文件 <br />
.cmd是nt内核命令行环境的另一种批处理文件 <br />
从更广义的角度来看，unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本，都具有与批处理文件十分相似的作用，而且同样是由专用解释器以行为单位解释执行，这种文本形式更通用的称谓是脚本语言。所以从某个程度分析，batch, unix shell, awk, basic, perl 等脚本语言都是一样的，只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼，而其内容和扩展名与dos的批处理却又完全不同。 <br />
=================================== <br />
<br />
首先批处理文件是一个文本文件，这个文件的每一行都是一条DOS命令（大部分时候就好象我们在DOS提示符下执行的命令行一样），你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 <br />
<br />
==== 注 =================== <br />
批处理文件中完全可以使用非dos命令，甚至可以使用不具有可执行特性的普通数据性文件，这缘于windows系统这个新型解释平台的涉入，使得批处理的应用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中，否则很多观念和设定都需要做比较大的变动。 <br />
======================== <br />
<br />
其次，批处理文件是一种简单的程序，可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程，在批处理中也可以使用循环语句(for)来循环执行一条命令。当然，批处理文件的编程能力与C语言等编程语句比起来是十分有限的，也是十分不规范的。批处理的程序语句就是一条条的DOS命令（包括内部命令和外部命令），而批处理的能力主要取决于你所使用的命令。 <br />
<br />
==== 注 ================== <br />
批处理文件(batch file)也可以称之为批处理程序(batch program)，这一点与编译型语言有所不同，就c语言来说，扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码，但只有编译连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性，又具有程序的可执行性，这些称谓的界限是比较模糊的。 <br />
=========================== <br />
<br />
第三，每个编写好的批处理文件都相当于一个DOS的外部命令，你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录（例如C:\BATCH），然后将所有你编写的批处理文件放到该目录中，这样只要在path中设置上c:\batch，你就可以在任意位置运行所有你编写的批处理程序。 <br />
<br />
==== 注 ===== <br />
纯以dos系统而言，可执行程序大约可以细分为五类，依照执行优先级由高到低排列分别是：DOSKEY宏命令（预先驻留内存），COMMAND.COM中的内部命令（根据内存的环境随时进驻内存），以com为扩展名的可执行程序（由command.com 直接载入内存），以exe位扩展名的可执行程序（由command.com 重定位后载入内存），以bat位扩展名的批处理程序（由command.com 解释分析，根据其内容按优先级顺序调用第2，3，4，5种可执行程序，分析一行，执行一行，文件本身不载入内存） <br />
============ <br />
<br />
第四，在DOS和Win9x/Me系统下，C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件，每次系统启动时会自动运行该文件，你可以将系统每次启动时都要运行的命令放入该文件中，例如设置搜索路径，调入鼠标驱动和磁盘缓存，设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例： <br />
@ECHO OFF <br />
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;&lt;br&gt; <br />
C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH <br />
LH SMARTDRV.EXE /X <br />
LH DOSKEY.COM /insert <br />
LH CTMOUSE.EXE <br />
SET TEMP=D:\TEMP <br />
SET TMP=D:\TEMP <br />
==== 注 ===== <br />
AUTOEXEC.BAT为DOS系统的自动运行批处理文件，由COMMAND.COM启动时解释执行； <br />
而在Win9x环境中，不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件，对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。 <br />
==== willsort 编注 ============= <br />
以下关于命令的分类，有很多值得推敲的地方。常用命令中的@本不是命令，而dir、copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序三类。而内部命令和外部命令中别有一类是专用于或常用于批处理中的命令可称之为"批处理命令"。 <br />
<br />
以下摘录MS-DOS 6.22 帮助文档中关于"批处理命令"的文字，当然，其中有些概念和定义已经有些落后了。 <br />
<br />
批处理命令 <br />
<br />
批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件，扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时，MS-DOS成组执行此批处理程序中的命令。 <br />
<br />
任何在命令提示符下可使用的命令都可用在批处理程序中。此外，下面MS-DOS命令是专门在批处理程序中使用的。 <br />
========== <br />
<br />
常用命令 <br />
<br />
echo、@、call、pause、rem(小技巧：用::代替rem)是批处理文件最常用的几个命令，我们就从他们开始学起。 <br />
<br />
==== 注 =========== <br />
首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: <br />
CR(0D) 命令行结束符 <br />
Escape(1B) ANSI转义字符引导符 <br />
Space(20) 常用的参数界定符 <br />
Tab(09) ; = 不常用的参数界定符 <br />
+ COPY命令文件连接符 <br />
* ? 文件通配符 <br />
"" 字符串界定符 <br />
| 命令管道符 <br />
&lt; &gt; &gt;&gt; 文件重定向符 <br />
@ 命令行回显屏蔽符 <br />
/ 参数开关引导符 <br />
: 批处理标签引导符 <br />
% 批处理变量引导符 <br />
<br />
其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意: <br />
第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号. <br />
第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中. <br />
===================== <br />
<br />
echo 表示显示此命令后的字符 <br />
echo off 表示在此语句后所有运行的命令都不显示命令行本身 <br />
@与echo off相象，但它是加在每个命令行的最前面，表示运行时不显示这一行的命令行（只能影响当前行）。 <br />
call 调用另一个批处理文件（如果不用call而直接调用别的批处理文件，那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令）。 <br />
pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示，等待用户按任意键后继续 <br />
rem 表示此命令后的字符为解释行（注释），不执行，只是给自己今后参考用的（相当于程序中的注释）。 <br />
==== 注 ===== <br />
此处的描述较为混乱, 不如直接引用个命令的命令行帮助更为条理 <br />
<br />
------------------------- <br />
ECHO <br />
<br />
当程序运行时，显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。 <br />
<br />
在运行批处理程序时，MS-DOS一般在屏幕上显示（回显）批处理程序中的命令。 <br />
使用ECHO命令可关闭此功能。 <br />
<br />
语法 <br />
<br />
ECHO [ON|OFF] <br />
<br />
若要用echo命令显示一条命令，可用下述语法： <br />
<br />
echo [message] <br />
<br />
参数 <br />
<br />
ON|OFF <br />
指定是否允许命令的回显。若要显示当前的ECHO的设置，可使用不带参数的ECHO <br />
命令。 <br />
<br />
message <br />
指定让MS-DOS在屏幕上显示的正文。 <br />
<br />
------------------- <br />
<br />
CALL <br />
<br />
从一个批处理程序中调用另一个批处理程序，而不会引起第一个批处理的中止。 <br />
<br />
语法 <br />
<br />
CALL [drive:][path]filename [batch-parameters] <br />
<br />
参数 <br />
<br />
[drive:][path]filename <br />
指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。 <br />
<br />
<br />
batch-parameters <br />
指定批处理程序所需的命令行信息。 <br />
<br />
------------------------------- <br />
<br />
PAUSE <br />
<br />
暂停批处理程序的执行并显示一条消息，提示用户按任意键继续执行。只能在批处 <br />
理程序中使用该命令。 <br />
<br />
语法 <br />
<br />
PAUSE <br />
<br />
<br />
REM <br />
<br />
在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令（在CONFIG.SYS <br />
中也可以用分号 ; 代替REM命令，但在批处理文件中则不能替代）。 <br />
<br />
语法 <br />
<br />
REM [string] <br />
<br />
参数 <br />
<br />
string <br />
指定要屏蔽的命令或要包含的注解。 <br />
======================= <br />
<br />
例1：用edit编辑a.bat文件，输入下列内容后存盘为c:\a.bat，执行该批处理文件后可实现：将根目录中所有文件写入 a.txt中，启动UCDOS，进入WPS等功能。 <br />
<br />
　　批处理文件的内容为: 　　　　　　　 命令注释： <br />
<br />
　　　　@echo off　　　　　　　　　　　不显示后续命令行及当前命令行 <br />
　　　　dir c:\*.* &gt;a.txt　　　　　　　将c盘文件列表写入a.txt <br />
　　　　call c:\ucdos\ucdos.bat　　　　调用ucdos <br />
　　　　echo 你好 　　　　　　　　　　 显示"你好" <br />
　　　　pause 　　　　　　　　　　　　 暂停,等待按键继续 <br />
　　　　rem 准备运行wps 　　　　　　　 注释：准备运行wps <br />
　　　　cd ucdos　　　　　　　　　　　 进入ucdos目录 <br />
　　　　wps 　　　　　　　　　　　　　 运行wps　　 <br />
<br />
批处理文件的参数 <br />
<br />
批处理文件还可以像C语言的函数一样使用参数（相当于DOS命令的命令行参数），这需要用到一个参数表示符"%"。 <br />
<br />
%[1-9]表示参数，参数是指在运行批处理文件时在文件名后加的以空格（或者Tab）分隔的字符串。变量可以从%0到%9，%0表示批处理命令本身，其它参数字符串用%1到%9顺序表示。 <br />
<br />
例2：C:根目录下有一批处理文件名为f.bat，内容为： <br />
@echo off <br />
format %1 <br />
<br />
如果执行C:\&gt;f a: <br />
那么在执行f.bat时，%1就表示a:，这样format %1就相当于format a:，于是上面的命令运行时实际执行的是format a: <br />
<br />
例3：C:根目录下一批处理文件名为t.bat，内容为: <br />
@echo off <br />
type %1 <br />
type %2 <br />
<br />
那么运行C:\&gt;t a.txt b.txt <br />
%1 : 表示a.txt <br />
%2 : 表示b.txt <br />
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。 <br />
<br />
==== 注 =============== <br />
参数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或更多个参数时, 就必须移动DOS 的参数起始指针. shift 命令正充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似C 语言中的指针操作. 图示如下: <br />
<br />
初始状态, cmd 为命令名, 可以用 %0 引用 <br />
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 <br />
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ <br />
| | | | | | | | | | <br />
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 <br />
<br />
经过1次shift后, cmd 将无法被引用 <br />
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 <br />
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ <br />
| | | | | | | | | | <br />
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 <br />
<br />
经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义 <br />
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 <br />
^ ^ ^ ^ ^ ^ ^ ^ ^ <br />
| | | | | | | | | <br />
%0 %1 %2 %3 %4 %5 %6 %7 %8 <br />
<br />
遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 内核命令行环境下, shift 才支持 /n 参数, 可以以第一参数为基准返复移动起始指针. <br />
================= <br />
<br />
特殊命令 <br />
<br />
<br />
if goto choice for是批处理文件中比较高级的命令，如果这几个你用得很熟练，你就是批处理文件的专家啦。 <br />
<br />
<br />
一、if 是条件语句，用来判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式: <br />
<br />
1、if [not] "参数" == "字符串" 待执行的命令 <br />
<br />
参数如果等于(not表示不等，下同)指定的字符串，则条件成立，运行命令，否则运行下一句。 <br />
<br />
例：if "%1"=="a" format a: <br />
<br />
==== <br />
<br />
if 的命令行帮助中关于此点的描述为: <br />
IF [NOT] string1==string2 command <br />
在此有以下几点需要注意: <br />
1. 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种"防空"字符 <br />
2. string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量 <br />
3. command 不是语法所必须的, string2 后跟一个空格就可以构成一个有效的命令行 <br />
============================= <br />
<br />
2、if [not] exist [路径\]文件名 待执行的命令 <br />
如果有指定的文件，则条件成立，运行命令，否则运行下一句。 <br />
<br />
如: if exist c:\config.sys type c:\config.sys <br />
表示如果存在c:\config.sys文件，则显示它的内容。 <br />
<br />
****** 注 ******** <br />
也可以使用以下的用法: <br />
if exist command <br />
device 是指DOS系统中已加载的设备, 在win98下通常有: <br />
AUX, PRN, CON, NUL <br />
COM1, COM2, COM3, COM4 <br />
LPT1, LPT2, LPT3, LPT4 <br />
XMSXXXX0, EMMXXXX0 <br />
A: B: C: ..., <br />
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$ <br />
具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点: <br />
1. 该设备确实存在(由软件虚拟的设备除外) <br />
2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义) <br />
3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等) <br />
可通过命令 mem/d | find "device" /i 来检阅你的系统中所加载的设备 <br />
另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄. <br />
================================== <br />
<br />
3、if errorlevel &lt;数字&gt; 待执行的命令 <br />
<br />
很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态)，通过if errorlevel命令可以判断程序的返回值，根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字，则条件成立，运行命令，否则运行下一句。 <br />
<br />
如if errorlevel 2 goto x2 <br />
<br />
==== 注 =========== <br />
返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式: <br />
<br />
if errorlevel 1 set el=1 <br />
if errorlevel 2 set el=2 <br />
if errorlevel 3 set el=3 <br />
if errorlevel 4 set el=4 <br />
if errorlevel 5 set el=5 <br />
... <br />
<br />
当然, 也可以使用以下循环来替代, 原理是一致的: <br />
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e <br />
<br />
更高效简洁的用法, 可以参考我写的另一篇关于获取 errorlevel 的文章 <br />
<br />
出现此种现象的原因是, if errorlevel 比较返回码的判断条件并非等于, 而是大于等于. 由于 goto 的跳转特性, 由小到大排序会导致在较小的返回码处就跳出; 而由于 set命令的 "重复" 赋值特性, 由大到小排序会导致较小的返回码 "覆盖" 较大的返回码. <br />
<br />
另外, 虽然 if errorlevel=&lt;数字&gt; command 也是有效的命令行, 但也只是 command.com 解释命令行时将 = 作为命令行切分符而忽略掉罢了 <br />
=========================== <br />
<br />
<br />
二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label，标号用:后跟标准字符串来定义)处，goto语句一般与if配合使用，根据不同的条件来执行不同的命令组。 <br />
<br />
如: <br />
<br />
goto end <br />
<br />
:end <br />
echo this is the end <br />
<br />
标号用":字符串"来定义，标号所在行不被执行。 <br />
<br />
==== willsort 编注 <br />
<br />
label 常被译为 "标签" , 但是这并不具有广泛的约定性. <br />
<br />
goto 与 : 联用可实现执行中途的跳转, 再结合 if 可实现执行过程的条件分支, 多个 if 即可实现命令的分组, 类似 C 中 switch case 结构或者 Basic 中的 select case 结构, 大规模且结构化的命令分组即可实现高级语言中的函数功能. 以下是批处理和C/Basic在语法结构上的对照: <br />
<br />
Batch C / Basic <br />
goto&amp;: goto&amp;: <br />
goto&amp;:&amp;if if{}&amp;else{} / if&amp;elseif&amp;endif <br />
goto&amp;:&amp;if... switch&amp;case / select case <br />
goto&amp;:&amp;if&amp;set&amp;envar... function() / function(),sub() <br />
================================== <br />
三、choice 使用此命令可以让用户输入一个字符（用于选择），从而根据用户的选择返回不同的errorlevel，然后于if errorlevel配合，根据用户的选择运行不同的命令。 <br />
<br />
注意：choice命令为DOS或者Windows系统提供的外部命令，不同版本的choice命令语法会稍有不同，请用choice /?查看用法。 <br />
<br />
choice的命令语法（该语法为Windows 2003中choice命令的语法，其它版本的choice的命令语法与此大同小异）： <br />
<br />
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text] <br />
<br />
描述: <br />
该工具允许用户从选择列表选择一个项目并返回所选项目的索引。 <br />
<br />
参数列表: <br />
/C choices 指定要创建的选项列表。默认列表是 "YN"。 <br />
<br />
/N 在提示符中隐藏选项列表。提示前面的消息得到显示， <br />
选项依旧处于启用状态。 <br />
<br />
/CS 允许选择分大小写的选项。在默认情况下，这个工具 <br />
是不分大小写的。 <br />
<br />
/T timeout 做出默认选择之前，暂停的秒数。可接受的值是从 0 <br />
到 9999。如果指定了 0，就不会有暂停，默认选项 <br />
会得到选择。 <br />
<br />
/D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选 <br />
项指定的一组选择中; 同时，必须用 /T 指定 nnnn。 <br />
<br />
/M text 指定提示之前要显示的消息。如果没有指定，工具只 <br />
显示提示。 <br />
<br />
/? 显示帮助消息。 <br />
<br />
注意: <br />
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选 <br />
择返回 1，第二个选择返回 2，等等。如果用户按的键不是有效的选择， <br />
该工具会发出警告响声。如果该工具检测到错误状态，它会返回 255 的 <br />
ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键，该工具会返回 0 <br />
的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时，将参数降 <br />
序排列。 <br />
<br />
示例: <br />
CHOICE /? <br />
CHOICE /C YNC /M "确认请按 Y，否请按 N，或者取消请按 C。" <br />
CHOICE /T 10 /C ync /CS /D y <br />
CHOICE /C ab /M "选项 1 请选择 a，选项 2 请选择 b。" <br />
CHOICE /C ab /N /M "选项 1 请选择 a，选项 2 请选择 b。" <br />
<br />
==== willsort 编注 =============================== <br />
我列出win98下choice的用法帮助, 已资区分 <br />
<br />
Waits for the user to choose one of a set of choices. <br />
等待用户选择一组待选字符中的一个 <br />
<br />
CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text] <br />
<br />
/C[:]choices Specifies allowable keys. Default is YN <br />
指定允许的按键(待选字符), 默认为YN <br />
/N Do not display choices and ? at end of prompt string. <br />
不显示提示字符串中的问号和待选字符 <br />
/S Treat choice keys as case sensitive. <br />
处理待选字符时大小写敏感 <br />
/T[:]c,nn Default choice to c after nn seconds <br />
在 nn 秒后默认选择 c <br />
text Prompt string to display <br />
要显示的提示字符串 <br />
ERRORLEVEL is set to offset of key user presses in choices. <br />
ERRORLEVEL 被设置为用户键入的字符在待选字符中的偏移值 <br />
如果我运行命令：CHOICE /C YNC /M "确认请按 Y，否请按 N，或者取消请按 C。" <br />
屏幕上会显示： <br />
确认请按 Y，否请按 N，或者取消请按 C。 [Y,N,C]? <br />
<br />
<br />
例：test.bat的内容如下（注意，用if errorlevel判断返回值时，要按返回值从高到低排列）: <br />
@echo off <br />
choice /C dme /M "defrag,mem,end" <br />
if errorlevel 3 goto end <br />
if errorlevel 2 goto mem <br />
if errorlevel 1 goto defrag <br />
<br />
:defrag <br />
c:\dos\defrag <br />
goto end <br />
<br />
:mem <br />
mem <br />
goto end <br />
<br />
:end <br />
echo good bye <br />
<br />
此批处理运行后，将显示"defrag,mem,end[D,M,E]?" ，用户可选择d m e ，然后if语句根据用户的选择作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的程序段，每个程序段最后都以goto end将程序跳到end标号处，然后程序将显示good bye，批处理运行结束。 <br />
<br />
四、for 循环命令，只要条件符合，它将多次执行同一命令。 <br />
<br />
语法： <br />
对一组文件中的每一个文件执行某个特定命令。 <br />
<br />
FOR %%variable IN (set) DO command [command-parameters] <br />
<br />
%%variable 指定一个单一字母可替换的参数。 <br />
(set) 指定一个或一组文件。可以使用通配符。 <br />
command 指定对每个文件执行的命令。 <br />
command-parameters <br />
为特定命令指定参数或命令行开关。 <br />
<br />
例如一个批处理文件中有一行: <br />
for %%c in (*.bat *.txt) do type %%c <br />
<br />
则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。 <br />
<br />
==== willsort 编注 ===================================================== <br />
需要指出的是, 当()中的字符串并非单个或多个文件名时, 它将单纯被当作字符串替换, 这个特性再加上()中可以嵌入多个字符串的特性, 很明显 for 可以被看作一种遍历型循环. <br />
当然, 在 nt/2000/xp/2003 系列的命令行环境中, for 被赋予了更多的特性, 使之可以分析命令输出或者文件中的字符串, 也有很多开关被用于扩展了文件替换功能. <br />
======================================================================== <br />
<br />
批处理示例 <br />
<br />
1. IF-EXIST <br />
<br />
1) 首先用记事本在C:\建立一个test1.bat批处理文件，文件内容如下： <br />
@echo off <br />
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT <br />
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist <br />
<br />
然后运行它： <br />
C:\&gt;TEST1.BAT <br />
<br />
如果C:\存在AUTOEXEC.BAT文件，那么它的内容就会被显示出来，如果不存在，批处理就会提示你该文件不存在。 <br />
<br />
2) 接着再建立一个test2.bat文件，内容如下： <br />
@ECHO OFF <br />
IF EXIST \%1 TYPE \%1 <br />
IF NOT EXIST \%1 ECHO \%1 does not exist <br />
<br />
执行: <br />
C:\&gt;TEST2 AUTOEXEC.BAT <br />
该命令运行结果同上。 <br />
<br />
说明： <br />
(1) IF EXIST 是用来测试文件是否存在的，格式为 <br />
IF EXIST [路径+文件名] 命令 <br />
(2) test2.bat文件中的%1是参数，DOS允许传递9个批参数信息给批处理文件，分别为%1~%9(%0表示test2命令本身) ，这有点象编程中的实参和形参的关系，%1是形参，AUTOEXEC.BAT是实参。 <br />
<br />
==== willsort 编注 ===================================================== <br />
DOS没有 "允许传递9个批参数信息" 的限制, 参数的个数只会受到命令行长度和所调用命令处理能力的限制. 但是, 我们在批处理程序中, 在同一时刻只能同时引用10个参数, 因为 DOS只给出了 %0~%9这十个参数引用符. <br />
======================================================================== <br />
<br />
3) 更进一步的，建立一个名为TEST3.BAT的文件，内容如下： <br />
@echo off <br />
IF "%1" == "A" ECHO XIAO <br />
IF "%2" == "B" ECHO TIAN <br />
IF "%3" == "C" ECHO XIN <br />
<br />
如果运行： <br />
C:\&gt;TEST3 A B C <br />
屏幕上会显示: <br />
XIAO <br />
TIAN <br />
XIN <br />
<br />
如果运行： <br />
C:\&gt;TEST3 A B <br />
屏幕上会显示 <br />
XIAO <br />
TIAN <br />
<br />
在这个命令执行过程中，DOS会将一个空字符串指定给参数%3。 <br />
<br />
2、IF-ERRORLEVEL <br />
<br />
建立TEST4.BAT，内容如下： <br />
@ECHO OFF <br />
XCOPY C:\AUTOEXEC.BAT D:\ <br />
IF ERRORLEVEL 1 ECHO 文件拷贝失败 <br />
IF ERRORLEVEL 0 ECHO 成功拷贝文件 <br />
<br />
然后执行文件: <br />
C:\&gt;TEST4 <br />
<br />
如果文件拷贝成功，屏幕就会显示"成功拷贝文件"，否则就会显示"文件拷贝失败"。 <br />
<br />
IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的，注意只是上一个命令的返回值，而且返回值必须依照从大到小次序顺序判断。 <br />
因此下面的批处理文件是错误的： <br />
<br />
@ECHO OFF <br />
XCOPY C:\AUTOEXEC.BAT D:\ <br />
IF ERRORLEVEL 0 ECHO 成功拷贝文件 <br />
IF ERRORLEVEL 1 ECHO 未找到拷贝文件 <br />
IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作 <br />
IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 <br />
IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 <br />
<br />
无论拷贝是否成功，后面的： <br />
<br />
未找到拷贝文件 <br />
用户通过ctrl-c中止拷贝操作 <br />
预置错误阻止文件拷贝操作 <br />
拷贝过程中写盘错误 <br />
<br />
都将显示出来。 <br />
<br />
以下就是几个常用命令的返回值及其代表的意义： <br />
<br />
backup <br />
0 备份成功 <br />
1 未找到备份文件 <br />
2 文件共享冲突阻止备份完成 <br />
3 用户用ctrl-c中止备份 <br />
4 由于致命的错误使备份操作中止 <br />
<br />
diskcomp <br />
0 盘比较相同 <br />
1 盘比较不同 <br />
2 用户通过ctrl-c中止比较操作 <br />
3 由于致命的错误使比较操作中止 <br />
4 预置错误中止比较 <br />
<br />
diskcopy <br />
0 盘拷贝操作成功 <br />
1 非致命盘读/写错 <br />
2 用户通过ctrl-c结束拷贝操作 <br />
3 因致命的处理错误使盘拷贝中止 <br />
4 预置错误阻止拷贝操作 <br />
<br />
format <br />
0 格式化成功 <br />
3 用户通过ctrl-c中止格式化处理 <br />
4 因致命的处理错误使格式化中止 <br />
5 在提示"proceed with format（y/n）?"下用户键入n结束 <br />
<br />
xcopy <br />
0 成功拷贝文件 <br />
1 未找到拷贝文件 <br />
2 用户通过ctrl-c中止拷贝操作 <br />
4 预置错误阻止文件拷贝操作 <br />
5 拷贝过程中写盘错误 <br />
<br />
chkdsk <br />
0 未找到错误 <br />
255 找到一个或多个错误 <br />
<br />
choice <br />
0 用户按下ctrl+c/break <br />
1 用户按下第一个键 <br />
255 检测到命令行中的错误条件 <br />
其它 用户按下的有效字符在列表中的位置 <br />
<br />
defrag <br />
0 碎片压缩成功 <br />
1 出现内部错误 <br />
2 磁盘上没有空簇。要运行DEFRAG，至少要有一个空簇 <br />
3 用户用Ctrl+C退出了DEFRAG <br />
4 出现一般性错误 <br />
5 DEFRAG在读簇时遇到错误 <br />
6 DEFRAG在写簇时遇到错误 <br />
7 分配空间有错 <br />
8 内存错 <br />
9 没有足够空间来压缩磁盘碎片 <br />
<br />
deltree <br />
0 成功地删除一个目录 <br />
<br />
diskcomp <br />
0 两盘相同 <br />
1 发现不同 <br />
2 按CTRL+C 终止了比较 <br />
3 出现严重错误 <br />
4 出现初始化错误 <br />
<br />
find <br />
0 查找成功且至少找到了一个匹配的字符串 <br />
1 查找成功但没找到匹配的字符串 <br />
2 查找中出现了错误 <br />
<br />
keyb <br />
0 键盘定义文件装入成功 <br />
1 使用了非法的键盘代码，字符集或语法 <br />
2 键盘定义文件坏或未找到 <br />
4 键盘、监视器通讯时出错 <br />
5 要求的字符集未准备好 <br />
<br />
move <br />
0 成功地移动了指定的文件 <br />
1 发生了错误 <br />
<br />
msav /N <br />
86 检查到了病毒 <br />
<br />
replace <br />
0 REPLACE成功地替换或加入了文件 <br />
1 MS-DOS版本和REPLACE不兼容 <br />
2 REPLACE找不到源文件 <br />
3 REPLACE找不到源路径或目标路径 <br />
5 不能存取要替换的文件 <br />
8 内存不够无法执行REPLACE <br />
11 命令行句法错误 <br />
<br />
restore <br />
0 RESTORE成功地恢复了文件 <br />
1 RESTORE找不到要恢复的文件 <br />
3 用户按CTRL+C终止恢复过程 <br />
4 RESTORE因错误而终止 <br />
<br />
scandisk <br />
0 ScanDisk在它检查的驱动器上未检测到任何错误 <br />
1 由于命令行的语法不对，不能运行ScanDisk <br />
2 由于内存用尽或发生内部错误，ScanDisk意外终止 <br />
3 用户让ScanDisk中途退出 <br />
4 进行盘面扫描时，用户决定提前退出 <br />
254 ScanDisk找到磁盘故障并已全部校正 <br />
255 ScanDisk找到磁盘故障，但未能全部校正 <br />
<br />
setver <br />
0 SETVER成功地完成了任务 <br />
1 用户指定了一个无效的命令开关 <br />
2 用户指定了一个非法的文件名 <br />
3 没有足够的系统内存来运行命令 <br />
4 用户指定了一个非法的版本号格式 <br />
5 SETVER在版本表中未找到指定的项 <br />
6 SETVER未找到SETVER.EXE文件 <br />
7 用户指定了一个非法的驱动器 <br />
8 用户指定了太多的命令行参数 <br />
9 SETVER检测到丢失了命令行参数 <br />
10 在读SETVER.EXE文件时，SETVER检测到发生错误 <br />
11 SETVER.EXE文件损坏 <br />
12 指定的SETVER.EXE文件不支持版本表 <br />
13 版本表中没有足够的空间存放新的项 <br />
14 在写SETVER.EXE文件时SETVER检测到发生错误 <br />
======================================================================== <br />
<br />
3、IF STRING1 == STRING2 <br />
<br />
建立TEST5.BAT，文件内容如下： <br />
@echo off <br />
IF "%1" == "A" FORMAT A: <br />
<br />
执行： <br />
C:\&gt;TEST5 A <br />
屏幕上就出现是否将A:盘格式化的内容。 <br />
<br />
注意：为了防止参数为空的情况，一般会将字符串用双引号（或者其它符号，注意不能使用保留符号）括起来。 <br />
如：if [%1]==[A] 或者 if %1*==A* <br />
<br />
5、GOTO <br />
<br />
建立TEST6.BAT，文件内容如下： <br />
@ECHO OFF <br />
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY <br />
GOTO _DONE <br />
:_COPY <br />
COPY C:\AUTOEXEC.BAT D:\ <br />
:_DONE <br />
<br />
注意： <br />
(1) 标号前是ASCII字符的冒号":"，冒号与标号之间不能有空格。 <br />
(2) 标号的命名规则与文件名的命名规则相同。 <br />
(3) DOS支持最长八位字符的标号，当无法区别两个标号时，将跳转至最近的一个标号。 <br />
<br />
==== willsort 编注 ===================================================== <br />
1)标号也称作标签(label) <br />
2)标签不能以大多数的非字母数字字符开始, 而文件名中则可以使用很多 <br />
3)当无法区别两个标签时, 将跳转至位置最靠前的标签 <br />
======================================================================== <br />
<br />
6、FOR <br />
<br />
建立C:\TEST7.BAT，文件内容如下： <br />
@ECHO OFF <br />
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C <br />
<br />
运行： <br />
C:\&gt;TEST7 <br />
<br />
执行以后，屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来（不包括隐藏文件）。 <br />
</p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:54 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webService的使用(1)-----Eclipse </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163300.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163300.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163300.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163300.html</trackback:ping><description><![CDATA[<p style="color: #993300">1、首先编写服务端：<br />
第一部：先创建一个webService工程<br />
第二部：编写服务类hello.java与服务类应该实现的接口TestHello.java<br />
第三部：发布服务新建--&gt;webService--&gt;输入服务名称和上面服务类与接口<br />
2、编写客户端<br />
package com.wyq.business;</p>
<p style="color: #800080">import javax.xml.rpc.encoding.XMLType;</p>
<p style="color: #800080">import org.apache.axis.client.Call;<br />
import org.apache.axis.client.Service;</p>
<p style="color: #800080">public class TestWebservice {<br />
&nbsp;public String sendAjax(){<br />
&nbsp;&nbsp;String result="";<br />
&nbsp;&nbsp;String url="";<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;<span style="color: #339966">&nbsp;//创建一个服务<br />
</span>&nbsp;&nbsp;&nbsp;Service service=new Service();<br />
&nbsp;&nbsp;&nbsp;<span style="color: #339966">//建立服务调用实例</span><br />
&nbsp;&nbsp;&nbsp;Call call=(Call)service.createCall();<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;url="<a href="http://localhost:8000/webService/services/TestService">http://localhost:8000/webService/services/TestService</a>";<br />
&nbsp;&nbsp;&nbsp;<span style="color: #339966">//设定调用路径<br />
</span>&nbsp;&nbsp;&nbsp;call.setTargetEndpointAddress(url);<br />
&nbsp;&nbsp;&nbsp;<span style="color: #339966">//设定调用方法</span><br />
&nbsp;&nbsp;&nbsp;call.setOperation("helloWord");<br />
&nbsp;&nbsp;&nbsp;<span style="color: #339966">//设定返回类型</span><br />
&nbsp;&nbsp;&nbsp;call.setReturnType(XMLType.XSD_STRING);<br />
&nbsp;&nbsp;<span style="color: #339966">&nbsp;//开始调用</span><br />
&nbsp;&nbsp;&nbsp;result=(String)call.invoke(new Object[] {});<br />
&nbsp;&nbsp;}catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return result;<br />
&nbsp;}<br />
}</p>
 <img src ="http://www.blogjava.net/wyxdeniro/aggbug/163300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:53 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>克隆表达式-----用于任务调度 </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163298.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163298.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163298.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163298.html</trackback:ping><description><![CDATA[<p style="color: #993300">(1)、克隆表达式可以包括7个字段：秒、分、小时、月内日期、月、周内日期、年(可选字段)<br />
(2)、特殊字符：<br />
一、反斜线(/)字符表示增量。"5/15"代表从第5秒开始，每15秒一次。<br />
二、问&nbsp;&nbsp;&nbsp;号(?)字符和字母L字符只能在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值，所以，如果指定月内日期，可以在周内日期字段中插入"?"，表示周内日期值无关紧要，字母L放在月内日期字段中，表示安排在当月最后一天执行。<br />
三、在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日，把"1W"放在月内日期字段中，表示把执行安排在当月的第一个工作日内。<br />
四、井号(#)字符为给定月份指定具体的工作日实例。把"MON#2"放在周内日期字段中，表示把任务安排在当月的第二个星期一。<br />
五、星号(*)字符是通配字符，表示该字段可以接受任何可能的值。<br />
例子：<br />
<span style="color: #800080">"0 0 12 * * ?" 每天中午12点触发 <br />
"0 15 10 ? * *" 每天上午10:15触发<br />
"0 15 10 * * ?" 每天上午10:15触发 <br />
"0 15 10 * * ? *" 每天上午10:15触发 <br />
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发<br />
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发<br />
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发<br />
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 <br />
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 <br />
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发<br />
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发<br />
"0 15 10 15 * ?" 每月15日上午10:15触发 <br />
"0 15 10 L * ?" 每月最后一日的上午10:15触发<br />
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发<br />
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 <br />
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 "0 0 12 * * ?" 每天中午12点触发 <br />
"0 15 10 ? * *" 每天上午10:15触发<br />
"0 15 10 * * ?" 每天上午10:15触发 <br />
"0 15 10 * * ? *" 每天上午10:15触发 <br />
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发<br />
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发<br />
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发<br />
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 <br />
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 <br />
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发<br />
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发<br />
"0 15 10 15 * ?" 每月15日上午10:15触发 <br />
"0 15 10 L * ?" 每月最后一日的上午10:15触发<br />
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发<br />
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 <br />
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 </span></p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:52 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSPTag标签库 </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163299.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163299.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163299.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163299.html</trackback:ping><description><![CDATA[<p style="color: #993300">标签库程序应该有以下几部分组成：<br />
(1)、标签的具体实现文件(*.java):必须继承javax.servlet.jsp.tagext.TagSuport<br />
(2)、标签的描述文件(*.tld)<br />
(3)、如果需要可以在web.xml中进行设置<br />
(4)、在JSP中通过标签进行自定义标签库的调用<br />
<br />
一、在具体实现文件(*.java)中，doStartTag方法:表示标签的开始<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doStartEnd方法:表示标签的结束<br />
二、*.tld文件是标签的描述文件，此文件对标签库的运行起绝对性作用，*.tld文件也是一个xml文件，如果是使用xml,则需要DTD、SCHEMA支持。<br />
Name:表示标签的方法名称：&lt;jsp:forward&gt;&lt;jsp:include&gt;<br />
<br />
java实现类：<br />
<br />
<span style="color: #800080">package com.wyq.TagTest;</span></p>
<p style="color: #800080">import javax.servlet.jsp.JspException;<br />
import javax.servlet.jsp.JspWriter;<br />
import javax.servlet.jsp.tagext.TagSupport;</p>
<p style="color: #800080">public class Hello extends TagSupport{</p>
<p style="color: #800080">&nbsp;@Override<br />
&nbsp;public int doStartTag() throws JspException {<br />
&nbsp;&nbsp;&nbsp;//从页面获取request,得到页面的值<br />
&nbsp;&nbsp;&nbsp;ServletRequest request = pageContext.getRequest();<br />
&nbsp;&nbsp;String str="<a href="http://www.wyq.cn/">www.wyq.cn</a>";<br />
&nbsp;&nbsp;//在servlet中打印要使用printWriter<br />
&nbsp;&nbsp;//如果在标签中打印需要使用pageContext<br />
&nbsp;&nbsp;JspWriter out=pageContext.getOut();<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;&nbsp;out.print(str);<br />
&nbsp;&nbsp;}catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;//只要打印完了字符串，则后面的代码就不需要执行了<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;return TagSupport.SKIP_BODY;<br />
&nbsp;}</p>
<p style="color: #800080">}<br />
<br />
<span style="color: #993300">tld文件的配置：</span><br />
<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "web-jsptaglibrary_1_2.dtd" &gt;<br />
&lt;taglib&gt;<br />
&nbsp; &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;<br />
&nbsp; &lt;jsp-version&gt;2.0&lt;/jsp-version&gt;<br />
&nbsp; &lt;short-name&gt;hello&lt;/short-name&gt;<br />
&nbsp; &lt;tag&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;name&gt;mldn&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tag-class&gt;com.wyq.TagTest.Hello&lt;/tag-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;body-content&gt;empty&lt;/body-content&gt;<br />
&nbsp; &lt;/tag&gt;<br />
&lt;/taglib&gt;<br />
</p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:52 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java关键字final、static使用总结 </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163297.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163297.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163297.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163297.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163297.html</trackback:ping><description><![CDATA[<span style="color: #993300">一、final<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据程序上下文环境，Java关键字final有&#8220;这是无法改变的&#8221;或者&#8220;终态的&#8221;含义，它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变：设计或效率。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final类不能被继承，没有子类，final类中的方法默认是final的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final方法不能被子类的方法覆盖，但可以被继承。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final成员变量表示常量，只能被赋值一次，赋值后值不再改变。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final不能用于修饰构造方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：父类的private成员方法是不能被子类方法覆盖的，因此private类型的方法默认是final类型的。</span><br />
<span style="color: #993300">1、final类</span><font size="3"><font color="#0000ff"><br />
</font><span style="color: #993300">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final类不能被继承，因此final类的成员方法没有机会被覆盖，默认都是final的。在设计类时候，如果这个类不需要有子类，类的实现细节不允许改变，并且确信这个类不会载被扩展，那么就设计为final类。</span></font>
<div style="color: #993300"><font size="3">2、final方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果一个类不允许其子类覆盖某个方法，则可以把这个方法声明为final方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用final方法的原因有二：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一、把方法锁定，防止任何继承类修改它的意义和实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二、高效。编译器在遇到调用final方法时候会转入内嵌机制，大大提高执行效率。<br />
3、final变量(常量)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用final修饰的成员变量表示常量，值一旦给定就无法改变！<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final修饰的变量有三种：静态变量、实例变量和局部变量，分别表示三种类型的常量。<br />
二、static<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static表示全局或者静态的意思，用来修饰成员变量和成员方法，也可以形成静态static代码块，但是Java语言中没有全局变量的概念。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;被static修饰的成员变量和成员方法独立于该类的任何对象，也就是说，它不依赖类的实例，被类的所有实例共享，只要这个类被加载，Java虚拟机就能根据类名在运行时数据区的方法区内找到他们，因此，static对象可以在他的任何对象创建之前访问，无须引用任何对象。</font></div>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:51 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>properties类读取配置文件 </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163295.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:50:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163295.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163295.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163295.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163295.html</trackback:ping><description><![CDATA[<p><span style="color: #800080">package</span> com.wyq.hibernate;</p>
<p><span style="color: #800080">import</span> java.io.FileInputStream;<br />
<span style="color: #800080">import</span> java.io.InputStream;<br />
<span style="color: #800080">import</span> java.util.Properties;</p>
<p><span style="color: #800080">import</span> org.hibernate.HibernateException;<br />
<span style="color: #800080">import</span> org.hibernate.Session;<br />
<span style="color: #800080">import</span> org.hibernate.SessionFactory;<br />
<span style="color: #800080">import</span> org.hibernate.Transaction;<br />
<span style="color: #800080">import</span> org.hibernate.cfg.Configuration;</p>
<p><br />
<span style="color: #800080">public</span> <span style="color: #800080">class</span> Example {<br />
&nbsp;<span style="color: #008000">//建立一个静态的工场对象</span><br />
&nbsp;<span style="color: #800080">private</span> <span style="color: #800080">static</span> SessionFactory session_factory = null;<br />
&nbsp;<span style="color: #008000">//建立一个存储配置文件的对象--properties</span><br />
&nbsp;<span style="color: #800080">private</span> <span style="color: #800080">static</span> Properties pops=new Properties();<br />
&nbsp;<span style="color: #008000">//取得配置文件路径,配置文件存放在class路径下</span><br />
&nbsp;<span style="color: #800080">private</span> <span style="color: #800080">static</span> String path=Example.class.getClassLoader().getResource("").getPath()+"hibernate.properties";<br />
&nbsp;<span style="color: #008000">//建立一个静态方法，用来读取配置文件---hibernate.properties,在static静态方法中只能引用静态变量<br />
</span>&nbsp;<span style="color: #800080">static</span>{<br />
&nbsp;&nbsp;<span style="color: #800080">try</span>{<br />
&nbsp;&nbsp;&nbsp;String s=path.substring(1,path.length());<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">//读取配置文件</span><br />
&nbsp;&nbsp;&nbsp;InputStream stream= new FileInputStream(s);<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">//如果配置文件和类放在同一个目录下，这种情况不建议使用<br />
</span>&nbsp;&nbsp;&nbsp;InputStream streams=Example.<span style="color: #800080">class</span>.getResourceAsStream("hibernate.properties");<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">//将配置文件存储在pops中</span><br />
&nbsp;&nbsp;&nbsp;pops.load(stream);<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">//建立配置文件管理对象</span><br />
&nbsp;&nbsp;&nbsp;Configuration cfg=new Configuration();<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">//将Person添加到cfg中，类似于将xxx.hbm.xml写在hibernate.hbm.xml中<br />
</span>&nbsp;&nbsp;&nbsp;cfg.addClass(Person.class);<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">//将pops添加到cfg中，就是hiberante.hbm.xml</span><br />
&nbsp;&nbsp;&nbsp;cfg.setProperties(pops);<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">//建立对象工厂<br />
</span>&nbsp;&nbsp;&nbsp;session_factory=cfg.buildSessionFactory();<br />
&nbsp;&nbsp;}<span style="color: #800080">catch</span>(Exception e){<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;<span style="color: #800080">public</span> <span style="color: #800080">static</span> <span style="color: #800080">void</span> main(String[] args)<span style="color: #800080">throws</span> HibernateException{<br />
&nbsp;&nbsp;Person person=new Person();<br />
&nbsp;&nbsp;person.setName("wyq");<br />
&nbsp;&nbsp;person.setEmail("hibernate.com.cn");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<span style="color: #008000">//取得一个session,获得连接</span><br />
&nbsp;&nbsp;Session session=session_factory.openSession();<br />
&nbsp;&nbsp;<span style="color: #008000">//定义一个事务</span><br />
&nbsp;&nbsp;Transaction tx=null;<br />
&nbsp;&nbsp;<span style="color: #800080">try</span>{<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">//开启一个事务</span><br />
&nbsp;&nbsp;&nbsp;tx=session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">//具体业务操作</span><br />
&nbsp;&nbsp;&nbsp;session.save(person);<br />
&nbsp;&nbsp;&nbsp;tx.commit();<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;}<span style="color: #800080">catch</span>(HibernateException ex){<br />
&nbsp;&nbsp;&nbsp;if(tx!=null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;tx.rollback();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<span style="color: #800080">finally</span>{<br />
&nbsp;&nbsp;&nbsp;session.close();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}<br />
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.wyq.test;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.net.URL;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_93_730_Open_Image" onclick="this.style.display='none'; Codehighlighter1_93_730_Open_Text.style.display='none'; Codehighlighter1_93_730_Closed_Image.style.display='inline'; Codehighlighter1_93_730_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_93_730_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_93_730_Closed_Text.style.display='none'; Codehighlighter1_93_730_Open_Image.style.display='inline'; Codehighlighter1_93_730_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;PropertyReader&nbsp;</span><span id="Codehighlighter1_93_730_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_93_730_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_156_290_Open_Image" onclick="this.style.display='none'; Codehighlighter1_156_290_Open_Text.style.display='none'; Codehighlighter1_156_290_Closed_Image.style.display='inline'; Codehighlighter1_156_290_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_156_290_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_156_290_Closed_Text.style.display='none'; Codehighlighter1_156_290_Open_Image.style.display='inline'; Codehighlighter1_156_290_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;Properties&nbsp;getProperties(String&nbsp;propertyFile)&nbsp;</span><span id="Codehighlighter1_156_290_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_156_290_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_164_243_Open_Image" onclick="this.style.display='none'; Codehighlighter1_164_243_Open_Text.style.display='none'; Codehighlighter1_164_243_Closed_Image.style.display='inline'; Codehighlighter1_164_243_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_164_243_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_164_243_Closed_Text.style.display='none'; Codehighlighter1_164_243_Open_Image.style.display='inline'; Codehighlighter1_164_243_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_164_243_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_164_243_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getPropertiesURL(propertyFile);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;getProperties(url);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_267_287_Open_Image" onclick="this.style.display='none'; Codehighlighter1_267_287_Open_Text.style.display='none'; Codehighlighter1_267_287_Closed_Image.style.display='inline'; Codehighlighter1_267_287_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_267_287_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_267_287_Closed_Text.style.display='none'; Codehighlighter1_267_287_Open_Image.style.display='inline'; Codehighlighter1_267_287_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span id="Codehighlighter1_267_287_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_267_287_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_346_528_Open_Image" onclick="this.style.display='none'; Codehighlighter1_346_528_Open_Text.style.display='none'; Codehighlighter1_346_528_Closed_Image.style.display='inline'; Codehighlighter1_346_528_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_346_528_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_346_528_Closed_Text.style.display='none'; Codehighlighter1_346_528_Open_Image.style.display='inline'; Codehighlighter1_346_528_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;URL&nbsp;getPropertiesURL(String&nbsp;fileName)&nbsp;</span><span id="Codehighlighter1_346_528_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_346_528_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_354_481_Open_Image" onclick="this.style.display='none'; Codehighlighter1_354_481_Open_Text.style.display='none'; Codehighlighter1_354_481_Closed_Image.style.display='inline'; Codehighlighter1_354_481_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_354_481_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_354_481_Closed_Text.style.display='none'; Codehighlighter1_354_481_Open_Image.style.display='inline'; Codehighlighter1_354_481_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_354_481_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_354_481_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PropertyReader.</span><span style="color: #0000ff">class</span><span style="color: #000000">.getResource(</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;fileName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;url.toString();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;url;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_505_525_Open_Image" onclick="this.style.display='none'; Codehighlighter1_505_525_Open_Text.style.display='none'; Codehighlighter1_505_525_Closed_Image.style.display='inline'; Codehighlighter1_505_525_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_505_525_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_505_525_Closed_Text.style.display='none'; Codehighlighter1_505_525_Open_Image.style.display='inline'; Codehighlighter1_505_525_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span id="Codehighlighter1_505_525_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_505_525_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_579_728_Open_Image" onclick="this.style.display='none'; Codehighlighter1_579_728_Open_Text.style.display='none'; Codehighlighter1_579_728_Closed_Image.style.display='inline'; Codehighlighter1_579_728_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_579_728_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_579_728_Closed_Text.style.display='none'; Codehighlighter1_579_728_Open_Image.style.display='inline'; Codehighlighter1_579_728_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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;Properties&nbsp;getProperties(URL&nbsp;url)&nbsp;</span><span id="Codehighlighter1_579_728_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_579_728_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_587_681_Open_Image" onclick="this.style.display='none'; Codehighlighter1_587_681_Open_Text.style.display='none'; Codehighlighter1_587_681_Closed_Image.style.display='inline'; Codehighlighter1_587_681_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_587_681_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_587_681_Closed_Text.style.display='none'; Codehighlighter1_587_681_Open_Image.style.display='inline'; Codehighlighter1_587_681_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_587_681_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_587_681_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;props&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Properties();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;props.load(url.openStream());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;props;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_705_725_Open_Image" onclick="this.style.display='none'; Codehighlighter1_705_725_Open_Text.style.display='none'; Codehighlighter1_705_725_Closed_Image.style.display='inline'; Codehighlighter1_705_725_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_705_725_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_705_725_Closed_Text.style.display='none'; Codehighlighter1_705_725_Open_Image.style.display='inline'; Codehighlighter1_705_725_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span id="Codehighlighter1_705_725_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_705_725_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
</p>
<code><code>
<p></code></code><br />
</p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:50 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>StringTokenizer类的用法 </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163296.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:50:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163296.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163296.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163296.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163296.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163296.html</trackback:ping><description><![CDATA[<p><span style="color: #993300">StringTokenizer类的主要用途是将字符串以定界符为界，分析为一个个的token（可理解为单词），定界符可以自己指定。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 构造器有下面三种形式： <br />
&nbsp;&nbsp;&nbsp;&nbsp; <font class="lightNote">&#183;</font>public StringTokenizer(String str,String delim,boolean returnTokens); <br />
&nbsp;&nbsp;&nbsp;&nbsp; <font class="lightNote">&#183;</font>public StringTokenizer(String str,String delim); <br />
&nbsp;&nbsp;&nbsp;&nbsp; <font class="lightNote">&#183;</font>public StringTokenizer(String str); <br />
&nbsp;&nbsp;&nbsp;&nbsp; 其中，str为需分析的字符串，delim为定界符，Tokens描述是否将定界符作为一个token。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 常用的方法有： <br />
&nbsp;&nbsp;&nbsp;&nbsp; <font class="lightNote">&#183;</font>public boolean hasMoreTokens(); //判断字符串中是含还有token <br />
&nbsp;&nbsp;&nbsp;&nbsp; <font class="lightNote">&#183;</font>public String nextToken(); //StringTokenizer对象中的下一个token。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; <font class="lightNote">&#183;</font>public String nextToken(String delim) //delim为新的定界符 <br />
</span><br />
<span style="color: #800080">例子:<br />
import java.io.*;<br />
&nbsp;&nbsp;&nbsp;&nbsp; impoort java.util.*;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class DemoStringTokenizer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args)<br />
&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String aString ＝"word1 word2 word3";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringTokenizer parser =new StringTokenizer(aString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(parser.hasMoreTokens()) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(parser.nextToken());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
</span></p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:50 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163296.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用java实现外部调用exe文件 </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163293.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163293.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163293.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163293.html</trackback:ping><description><![CDATA[<span style="color: #993300"><font style="color: #993300" color="#000000">调用其他的可执行文件，例如：自己制作的exe，或是下载安装的软件</font><br />
<br />
public void RunBat(String filepath)throws Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str=filepath+"execute.bat";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Process p=Runtime.getRuntime().exec(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InputStream in=p.getInputStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int c;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while((c=in.read())!=-1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(c);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.waitFor();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</span> 
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:49 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java文件操作 </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163294.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163294.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163294.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163294.html</trackback:ping><description><![CDATA[<p><span style="color: #993300">(1)目录的建立/检查与删除 <br />
<span style="color: #800080">public void createDir(){<br />
&nbsp;&nbsp;&nbsp;String path=request.getRealPath("");<br />
&nbsp;&nbsp;&nbsp;path=path+"\sub";//将要建立的目录路径<br />
&nbsp;&nbsp;&nbsp;File d=new File(path);//建立代表sub目录的File对象，并得到它的一个引用<br />
&nbsp;&nbsp;&nbsp;if(d.exists()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.delete();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.mkdir();//建立sub目录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("sub目录不存在，已经建立");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span><br />
(2)文件的建立/检查与删除<br />
<span style="color: #800080">public void createFile(){<br />
&nbsp;&nbsp;&nbsp;String path=request.getRealPath("");<br />
&nbsp;&nbsp;&nbsp;File f=new File(path,"File.txt");<br />
&nbsp;&nbsp;&nbsp;if(f.exists()){//检查File.txt是否存在<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.delete();<br />
}else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.createNewFile();//在当前目录下建立一个名为File.txt的文件<br />
}<br />
}</span></span><br />
</p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:49 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java定时器的使用（Timer）</title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163292.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163292.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163292.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163292.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163292.html</trackback:ping><description><![CDATA[<div style="color: #993300">1、在应用开发中，经常需要一些周期性的操作，比如每5分钟执行某一操作等。对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
<p style="color: #993300">private java.util.Timer timer; <br />
timer = new Timer(true); <br />
timer.schedule(<br />
new java.util.TimerTask() { public void run() { //server.checkNewMail();&nbsp;要操作的方法 } }, 0, 5*60*1000);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一个参数是要操作的方法，第二个参数是要设定延迟的时间，第三个参数是周期的设定，每隔多长时间执行该操作。</p>
<p style="color: #993300">&nbsp;&nbsp;&nbsp; 使用这几行代码之后，Timer本身会每隔5分钟调用一遍server.checkNewMail()方法，不需要自己启动线程。Timer本身也是多线程同步的，多个线程可以共用一个Timer，不需要外部的同步代码。 </p>
</div>
<div style="color: #993300"></div>
<div style="color: #993300">2、<br />
(1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。<br />
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行．<br />
(3)Timer.schedule(TimerTask task,long delay)安排在指定延迟后执行指定的任务．<br />
(4)Timer.schedule(TimerTask task,long delay,long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行．<br />
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)安排指定的任务在指定的时间开始进行重复的固定速率执行．<br />
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行．</div>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:48 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java定时器的使用（Scheduler ） </title><link>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163291.html</link><dc:creator>王永庆</dc:creator><author>王永庆</author><pubDate>Mon, 26 Nov 2007 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163291.html</guid><wfw:comment>http://www.blogjava.net/wyxdeniro/comments/163291.html</wfw:comment><comments>http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163291.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyxdeniro/comments/commentRss/163291.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyxdeniro/services/trackbacks/163291.html</trackback:ping><description><![CDATA[<p><span style="color: #000080"><span style="color: #993300">首先添加所需要的类包：quartz-1.5.2.jar，quartz-all-1.5.2.jar，quartz-jboss-1.5.2.jar</span>&nbsp; <br />
<span style="color: #993300">//设置定时作业<br />
</span>&nbsp;public void startScheduler(HttpServletRequest requests)throws SchedulerException{<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;&nbsp;<span style="color: #993300">//建立作业调度器<br />
</span>&nbsp;&nbsp;&nbsp;<span style="color: #800080">Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();</span><br />
&nbsp;&nbsp;&nbsp;<span style="color: #993300">//判断作业调度内是否有作业，如果有将其删除</span><br />
&nbsp;&nbsp;&nbsp;<span style="color: #800080">if (!scheduler.isShutdown()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scheduler.deleteJob("ReceiveOnTimed", Scheduler.DEFAULT_GROUP);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</span>&nbsp;&nbsp;&nbsp;<span style="color: #993300">//删除调度器的作业后，新建一个我们现在要完成的作业，该作业所需要的类是ReceiveJobd.class,作业名字是ReceiveOnTimes,所属分组是Scheduler.DEFAULT_GROUP</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #800080">JobDetail jobDetail = new JobDetail("ReceiveOnTimed",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Scheduler.DEFAULT_GROUP,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReceiveJobd.class);</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int m = ips.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int n = tablenames.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #993300">//向作业内设置要传入的参数</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #800080">jobDetail.getJobDataMap().put("scheduler", scheduler);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jobDetail.getJobDataMap().put("ipLength", m);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jobDetail.getJobDataMap().put("tablenameLength", n);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jobDetail.getJobDataMap().put("wcx",wc);<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; m; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jobDetail.getJobDataMap().put("ip" + i, ips[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; n; j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jobDetail.getJobDataMap().put("tablename" + j, tablenames[j]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #993300">//建立触发器，判断何时触发该作业,参数为触发器的名称，触发器分组，作业名称，作业分组，时间设定<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #800080">Trigger trigger = new CronTrigger("ReceiverOnTimeTriggerd",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scheduler.DEFAULT_GROUP,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ReceiveOnTimed",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scheduler.DEFAULT_GROUP, time);<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #993300">//将作业和触发器添加到调度器<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #800080">scheduler.scheduleJob(jobDetail, trigger);<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #993300">//按照设置开始调度<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #800080">scheduler.start();</span><br />
&nbsp;&nbsp;}catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;<span style="color: #993300">具体作业类的处理：<br />
</span>&nbsp;package com.bodhiya.schsystem.business;</span></p>
<p><span style="color: #800080">import org.quartz.Job;<br />
import org.quartz.JobDataMap;<br />
import org.quartz.JobExecutionContext;<br />
import org.quartz.JobExecutionException;<br />
import org.quartz.Scheduler;<br />
import org.springframework.web.context.WebApplicationContext;</span></p>
<p><span style="color: #000080">public class ReceiveJobd <span style="color: #800080">implements Job</span>{<br />
&nbsp;public void ReceiveJobd(){<br />
&nbsp;}<br />
&nbsp;<span style="color: #993300">//作业具体实现的功能<br />
</span>&nbsp;public void <span style="color: #800080">execute(JobExecutionContext context) throws<br />
&nbsp;&nbsp;&nbsp; JobExecutionException </span>{<br />
&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #993300">//建立JobDataMap对象，用来接收传递的参数</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #800080">JobDataMap dataMap = context.getMergedJobDataMap();<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int ipLength = dataMap.getInt("ipLength");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int tablenameLength = dataMap.getInt("tablenameLength");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #800080">WebApplicationContext wc=(WebApplicationContext)dataMap.get("wcx");<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String ip = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String tablename = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; ipLength; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip = dataMap.getString("ip" + i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; tablenameLength; j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tablename = dataMap.getString("tablename" + j);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExchangeAccess ea=new ExchangeAccess(ip,tablename,wc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800080">//启动线程<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ea.start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #800080">Scheduler scheduler = (Scheduler) dataMap.get("scheduler");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scheduler.deleteJob("ReceiveOnTimed", Scheduler.DEFAULT_GROUP);<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;}<br />
}<br />
</span></p>
<img src ="http://www.blogjava.net/wyxdeniro/aggbug/163291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyxdeniro/" target="_blank">王永庆</a> 2007-11-26 17:47 <a href="http://www.blogjava.net/wyxdeniro/archive/2007/11/26/163291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>