﻿<?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-翠湖月色-随笔分类-JavaEE</title><link>http://www.blogjava.net/matthew2006/category/13325.html</link><description>No Buddha tree at all,And bright mirror nor.Now nothing at all,How dusts any more ? </description><language>zh-cn</language><lastBuildDate>Tue, 29 Nov 2011 22:52:20 GMT</lastBuildDate><pubDate>Tue, 29 Nov 2011 22:52:20 GMT</pubDate><ttl>60</ttl><item><title>Struts2 select标签值从数据库读取，再提交给action</title><link>http://www.blogjava.net/matthew2006/archive/2011/11/29/365152.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Tue, 29 Nov 2011 15:07:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2011/11/29/365152.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/365152.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2011/11/29/365152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/365152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/365152.html</trackback:ping><description><![CDATA[<div>&nbsp;问题描述： addpost.jsp页面有post的相关信息，如post.id,post.name,和post.cid（所属栏目信息column.id）。所属栏目id通过select标签来选择，其list值来自columnAction获得的栏目list。然后post所有信息提交到PostAction的insert方法来处理，完成添加post工作。<br />解决方法：<br />1.在columnAction中添加方法findAllColumns(),返回一个column的list。 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_30_177_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_177_Open_Text.style.display='none'; Codehighlighter1_30_177_Closed_Image.style.display='inline'; Codehighlighter1_30_177_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_30_177_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_30_177_Closed_Text.style.display='none'; Codehighlighter1_30_177_Open_Image.style.display='inline'; Codehighlighter1_30_177_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;findAllColumns()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_30_177_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_30_177_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_38_87_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_87_Open_Text.style.display='none'; Codehighlighter1_38_87_Closed_Image.style.display='inline'; Codehighlighter1_38_87_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_38_87_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_38_87_Closed_Text.style.display='none'; Codehighlighter1_38_87_Open_Image.style.display='inline'; Codehighlighter1_38_87_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_38_87_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_38_87_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnList</span><span style="color: #000000">=</span><span style="color: #000000">columnService.findAllColumn();<br /><img id="Codehighlighter1_112_159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_112_159_Open_Text.style.display='none'; Codehighlighter1_112_159_Closed_Image.style.display='inline'; Codehighlighter1_112_159_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_112_159_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_112_159_Closed_Text.style.display='none'; Codehighlighter1_112_159_Open_Image.style.display='inline'; Codehighlighter1_112_159_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&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;(SQLException&nbsp;e)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_112_159_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_112_159_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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: #000000">"</span><span style="color: #000000">error</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&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 align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><br />2.配置struts.xml<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="findAllColumns" class="cms.action.ColumnAction" method="findAllColumns"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />3.&nbsp; addpost.jsp页面<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="findAllColumns"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="findAllColumns"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">s:select&nbsp;</span><span style="color: #ff0000">label</span><span style="color: #0000ff">="选择栏目"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="posts.cid"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="cid"</span><span style="color: #ff0000">&nbsp;listKey</span><span style="color: #0000ff">="cid"</span><span style="color: #ff0000">&nbsp;listValue</span><span style="color: #0000ff">="cname"</span><span style="color: #ff0000">&nbsp;headerKey</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;headerValue</span><span style="color: #0000ff">="--&nbsp;请选择&nbsp;&nbsp;--"</span><span style="color: #ff0000">&nbsp;list</span><span style="color: #0000ff">="#findAllColumns.columnList"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">s:select</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div></div>4.&nbsp; PostAction的insert方法<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_27_600_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_600_Open_Text.style.display='none'; Codehighlighter1_27_600_Closed_Image.style.display='inline'; Codehighlighter1_27_600_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_27_600_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_27_600_Closed_Text.style.display='none'; Codehighlighter1_27_600_Open_Image.style.display='inline'; Codehighlighter1_27_600_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;insertPost()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_27_600_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_27_600_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_40_501_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_501_Open_Text.style.display='none'; Codehighlighter1_40_501_Closed_Image.style.display='inline'; Codehighlighter1_40_501_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_40_501_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_40_501_Closed_Text.style.display='none'; Codehighlighter1_40_501_Open_Image.style.display='inline'; Codehighlighter1_40_501_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_40_501_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_40_501_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;date&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Calendar.getInstance().getTime();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;formatter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy-MM-dd&nbsp;HH:mm:ss</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;dateString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;formatter.format(date);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ServletActionContext.getRequest().getSession();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Users&nbsp;user</span><span style="color: #000000">=</span><span style="color: #000000">(Users)&nbsp;session.getAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">user</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;posts.setUid(user.getId());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;posts.setPdate(dateString)&nbsp;;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;postService.safePosts(posts);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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: #000000">"</span><span style="color: #000000">addPost</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img id="Codehighlighter1_521_588_Open_Image" onclick="this.style.display='none'; Codehighlighter1_521_588_Open_Text.style.display='none'; Codehighlighter1_521_588_Closed_Image.style.display='inline'; Codehighlighter1_521_588_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_521_588_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_521_588_Closed_Text.style.display='none'; Codehighlighter1_521_588_Open_Image.style.display='inline'; Codehighlighter1_521_588_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_521_588_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_521_588_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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: #000000">"</span><span style="color: #000000">Error</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><img src ="http://www.blogjava.net/matthew2006/aggbug/365152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2011-11-29 23:07 <a href="http://www.blogjava.net/matthew2006/archive/2011/11/29/365152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm3插件的中文乱码问题</title><link>http://www.blogjava.net/matthew2006/archive/2010/04/20/318828.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Tue, 20 Apr 2010 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2010/04/20/318828.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/318828.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2010/04/20/318828.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/318828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/318828.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我的开发环境如下：MyEclipse8.0,jbpm-jpdl-3.2.2。每次做流程图时，遇到有中文的情况，流程文件gpd.xml就会显示乱码。乱码并不是不能把流程发布到数据库，而是在生成流程监控的时候会出现问题。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在网上找了很多方法都不适用，最终在一个网友介绍的方法中得到了解决。该方法大致是修改ui.jar里面的某个类的源码，在代码中进行编码的转换。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/matthew2006/aggbug/318828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2010-04-20 11:19 <a href="http://www.blogjava.net/matthew2006/archive/2010/04/20/318828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FckEditor编辑器添加对话框的内容</title><link>http://www.blogjava.net/matthew2006/archive/2008/09/24/230883.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Wed, 24 Sep 2008 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2008/09/24/230883.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/230883.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2008/09/24/230883.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/230883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/230883.html</trackback:ping><description><![CDATA[问题描述：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在添加图片或者音频视频的时候，如果需要一个资源title字段来表示该资源的标题内容，并需要控制这个必填项，如果该项输入为空就不能完成整个内容的添加。<br />
<br />
首先，需要在图片或资源输入对话框里添加一个字段resourceTitle输入框，（我们以音频视频为例）在editor\dialog下的fck_flash.html添加以下内容：<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">&lt;</span><span style="color: #800000">TR</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TD&nbsp;</span><span style="color: #ff0000">nowrap</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">fckLang</span><span style="color: #0000ff">="DlgResourceTitle"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">resourcetitle</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="resourceTitle"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;size</span><span style="color: #0000ff">="33"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">TD</span><span style="color: #0000ff">&gt;</span><span style="color: #ff0000">&amp;nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TD</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">TR</span><span style="color: #0000ff">&gt;</span></div>
其中，DlgResouceTitle在\editor\lang下的zh-cn.js文件中定义，如：DlgResourceTitle&nbsp;: "资源标题"。<br />
<br />
<br />
这样对话框中就可以多出一条&#8220;资源标题&#8221;的输入框，要对其进行判断和控制需要修改editor\dialog\fck_flash下的fck_flash.js文件，如：1）在
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;LoadSelection()<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />{<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;!&nbsp;oEmbed&nbsp;)&nbsp;return&nbsp;;<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">txtUrl').value&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;GetAttribute(&nbsp;oEmbed,&nbsp;'src',&nbsp;''&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">txtWidth').value&nbsp;&nbsp;=&nbsp;GetAttribute(&nbsp;oEmbed,&nbsp;'width',&nbsp;''&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">7</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">txtHeight').value&nbsp;=&nbsp;GetAttribute(&nbsp;oEmbed,&nbsp;'height',&nbsp;''&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">8</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">resourceTitle').value&nbsp;=&nbsp;GetAttribute(&nbsp;oEmbed,&nbsp;'resourcetitle',&nbsp;''&nbsp;)&nbsp;;</span></div>
中添加8行那段代码；2）然后在function Ok()方法中，添加：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">resourceTitle').value.length&nbsp;==&nbsp;0&nbsp;)</span><span style="color: #008000"><br />
</span><span style="color: #008080">2</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dialog.SetSelectedTab(&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">Info'&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">4</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">resourceTitle').focus()&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">5</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&nbsp;oEditor.FCKLang.DlgAlertFlashTitle&nbsp;)&nbsp;;<br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">&nbsp;;<br />
</span><span style="color: #008080">9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
这个方法中的DlgAlerFlashTitle同样是在\editor\lang下的zh-cn.js文件中定义，文字内容就是弹出的警告信息的内容。<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: #000000">DlgAlertFlashTitle&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">请输入资源标题</span><span style="color: #000000">"</span><span style="color: #000000">,</span></div>
<br />
3）为了在修改参数时能显示&#8220;资源标题&#8221;的内容，需要在UpdateEmbed( e )方法中：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">(FlashPlayer(GetE(</span><span style="color: #008000">'</span><span style="color: #008000">txtUrl').value)!=null){</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />SetAttribute(&nbsp;e,&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">type'&nbsp;,&nbsp;'application/x-shockwave-flash'&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />SetAttribute(&nbsp;e,&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">pluginspage'&nbsp;,&nbsp;'http://www.macromedia.com/go/getflashplayer'&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />}<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;SetAttribute(&nbsp;e,&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">src',&nbsp;GetE('txtUrl').value&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SetAttribute(&nbsp;e,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">resourcetitle</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;,&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">resourceTitle').value&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SetAttribute(&nbsp;e,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">width</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;,&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">txtWidth').value&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">13</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SetAttribute(&nbsp;e,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">height</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;GetE(</span><span style="color: #008000">'</span><span style="color: #008000">txtHeight').value&nbsp;)&nbsp;;</span><span style="color: #008000"><br />
</span><span style="color: #008080">14</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">//</span><span style="color: #000000">&nbsp;Advances&nbsp;Attributes</span></div>
<br />
添加11行代码。<br />
<br />
图片输入对话框的方法大致一样，就不做多解释。<br />
<img src ="http://www.blogjava.net/matthew2006/aggbug/230883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2008-09-24 14:56 <a href="http://www.blogjava.net/matthew2006/archive/2008/09/24/230883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态载入jsp页面到指定页面的区域</title><link>http://www.blogjava.net/matthew2006/archive/2008/07/11/214344.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Fri, 11 Jul 2008 14:29:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2008/07/11/214344.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/214344.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2008/07/11/214344.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/214344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/214344.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天碰到这样一个问题：在jsp页面中想点击一个按钮，然后载入另外一个页面内容到按钮下的空白区域。这样的情况可以通过html嵌入框架来实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先，在第一个页面中，<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">width</span><span style="color: #0000ff">="50%"</span><span style="color: #ff0000">&nbsp;CellSpacing</span><span style="color: #0000ff">=0&nbsp;</span><span style="color: #ff0000">CellPadding</span><span style="color: #0000ff">=1<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #0000ff"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="border-collapse:&nbsp;collapse;"</span><span style="color: #ff0000">&nbsp;border</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;align</span><span style="color: #0000ff">="center"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">align</span><span style="color: #0000ff">="center"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="addpoint.jsp"</span><span style="color: #ff0000">&nbsp;target</span><span style="color: #0000ff">="main"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">添加调查基地</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="main"</span><span style="color: #ff0000">&nbsp;height</span><span style="color: #0000ff">="150&nbsp;"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">iframe&nbsp;</span><span style="color: #ff0000">width</span><span style="color: #0000ff">=450&nbsp;</span><span style="color: #ff0000">height</span><span style="color: #0000ff">=150&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=main&nbsp;</span><span style="color: #ff0000">frameborder</span><span style="color: #0000ff">=0<br />
</span><span style="color: #008080">14</span><span style="color: #0000ff"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">scrolling</span><span style="color: #0000ff">="auto&nbsp;"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">iframe</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外一个页面为：addpoint.jsp，这个页面的内容会动态载入到&lt;td id="main"&gt;区域中，其中id属性很关键，它和第一个页面中的target的属性值相对应。
<img src ="http://www.blogjava.net/matthew2006/aggbug/214344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2008-07-11 22:29 <a href="http://www.blogjava.net/matthew2006/archive/2008/07/11/214344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在线编辑器FCKeditor2.6中文乱码-解决过程</title><link>http://www.blogjava.net/matthew2006/archive/2008/07/11/214265.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Fri, 11 Jul 2008 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2008/07/11/214265.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/214265.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2008/07/11/214265.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/214265.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/214265.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FCKeditor是款优秀的编辑器开源产品，总的来说功能强大，基本能满足大部分的需求，只是缺少权限控制。不过在使用过程中，中文乱码问题是个经常出错的问题。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装后简单设置一下就能够正确运行，能够上传图片，不过传中文文件名的图片时会出现问题。解决办法（我的安装版本：FCKeditor_2.6+FCKeditor-2.3 for java）：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 修改FCKeditor-2.3 for java中src文件夹下的ConnectorServlet.java和SimpleUploaderServlet.java。分别在这两个文件中的DiskFileUpload upload = new DiskFileUpload();后面加入：upload.setHeaderEncoding("utf-8");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 分别保存后，使用ant进行编译，命令为：ant dist，生成新的FCKeditor-2.3.jar，然后把这个文件加入工程中的lib文件夹下，把以前的替换掉。在编译过程中，根据不同的tomcat版本和安装路径，需要对build.xml文件进行设置。如果报deploy之类的错误，说明需要tomcat-ant包中的类支持，进行相关的设置。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到此，基本能上传中文的图片了，但是发现在jsp页面读取图片的链接时候出现乱码，从而导致不能在jsp页面中显示。这个问题需要修改tomcat目录下conf中的server.xml文件，<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8080"</span><span style="color: #ff0000">&nbsp;protocol</span><span style="color: #0000ff">="HTTP/1.1"</span><span style="color: #ff0000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionTimeout</span><span style="color: #0000ff">="20000"</span><span style="color: #ff0000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #0000ff">/&gt;</span></div>
和<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">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8009"</span><span style="color: #ff0000">&nbsp;protocol</span><span style="color: #0000ff">="AJP/1.3"</span><span style="color: #ff0000">&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>
分别加入一句：URIEncoding="utf-8" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样基本解决了FCKeditor的乱码问题，能上传中文的图片，能创建中文的文件夹，只是在控制台中依然会有乱码。这个可以不考虑。<br />
<img src ="http://www.blogjava.net/matthew2006/aggbug/214265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2008-07-11 15:12 <a href="http://www.blogjava.net/matthew2006/archive/2008/07/11/214265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts的标签使用(1)</title><link>http://www.blogjava.net/matthew2006/archive/2008/03/26/188891.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Wed, 26 Mar 2008 15:23:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2008/03/26/188891.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/188891.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2008/03/26/188891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/188891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/188891.html</trackback:ping><description><![CDATA[1.使用&lt;bean:write&gt;标记读取form表单的值。<br />
需要注意的是：action配置中的attribute属性的值要和&lt;bean:write&gt;标签中name的值一致。如，<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">="registerForm"</span><span style="color: #ff0000">&nbsp;input</span><span style="color: #0000ff">="/register.jsp"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">2</span><span style="color: #ff0000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff">="registerForm"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/register"</span><span style="color: #ff0000">&nbsp;scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">3</span><span style="color: #ff0000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="org.springframework.web.struts.DelegatingActionProxy"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="failed"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/failed.jsp"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/success.jsp"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span></div>
读取页面：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean:write&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="registerForm"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="username"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span></div>
&lt;bean:write&gt;标签中的property属性就是form表单中的应该一致。<br />
<br />
2.&lt;logic:iterate&gt;标签实现迭代操作。<br />
&lt;logic:iterate&gt;标记的name属性指定了要进行迭代的集合对象，id属性定义了这个集合对象中的一个实例名称。<br />
如，在action中获得一个查询结果集合。通过setAttribute（）保存在request里。<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: #000000">java.util.List&nbsp;list</span><span style="color: #000000">=</span><span style="color: #000000">dao.findAll();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">users</span><span style="color: #000000">"</span><span style="color: #000000">,list&nbsp;);</span></div>
在显示页面中，<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">border</span><span style="color: #0000ff">="1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tbody</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;姓名<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;年龄<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;邮箱<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密码<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">logic:iterate&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="user"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="users"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean:write&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="user"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="username"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean:write&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="user"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="age"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean:write&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="user"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="email"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean:write&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="user"</span><span style="color: #ff0000">&nbsp;property</span><span style="color: #0000ff">="password"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">logic:iterate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tbody</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span></div>
<br />
其中，name：users就是传递过来的对象集合，id：user是定义了对象集合中的一个实例而已。<br />
<img src ="http://www.blogjava.net/matthew2006/aggbug/188891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2008-03-26 23:23 <a href="http://www.blogjava.net/matthew2006/archive/2008/03/26/188891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中文汉字GB2312和UTF-8的编码转换程序（转）</title><link>http://www.blogjava.net/matthew2006/archive/2007/11/20/161750.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Mon, 19 Nov 2007 16:53:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2007/11/20/161750.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/161750.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2007/11/20/161750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/161750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/161750.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 在使用<a target="_blank" href="http://www.williamlong.info/?tags=Google">Google</a>或者<a target="_blank" href="http://www.williamlong.info/?tags=Baidu">百度</a>进行中文搜索的时候，我们会发现搜索过程中URL地址栏会变成一串格式字符串编码，我们编写程序经常也需要进行中文汉字到这类URL编码的转换，这里介绍两段相关的转换函数。
<p>&nbsp;&nbsp;&nbsp; 对于使用UTF-8的Google搜索引擎来说，使用Google搜索&#8220;汉字&#8221;会变成http://www.google.com/search?q=
%E6%B1%89%E5%AD%97 ，而对于使用GB2312的百度搜索引擎来说，使用百度搜索&#8220;汉字&#8221;会变成另外的
http://www.baidu.com/s?wd=%BA%BA%D7%D6
。下面的两段VB代码分别针对UTF-8（UTF8EncodeURI）和GB2312（GBKEncodeURI）进行了编码的转换。</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">Private&nbsp;Sub&nbsp;command1_click()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Print&nbsp;(UTF8EncodeURI(</span><span style="color: #000000;">"</span><span style="color: #000000;">汉字</span><span style="color: #000000;">"</span><span style="color: #000000;">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debug.Print&nbsp;(GBKEncodeURI(</span><span style="color: #000000;">"</span><span style="color: #000000;">汉字</span><span style="color: #000000;">"</span><span style="color: #000000;">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Function&nbsp;UTF8EncodeURI(szInput)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;wch,&nbsp;uch,&nbsp;szRet<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;x<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;nAsc,&nbsp;nAsc2,&nbsp;nAsc3<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;szInput&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">&nbsp;Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF8EncodeURI&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;szInput<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;To&nbsp;Len(szInput)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wch&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Mid(szInput,&nbsp;x,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nAsc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AscW(wch)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;nAsc&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;Then&nbsp;nAsc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nAsc&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">65536</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(nAsc&nbsp;And&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">HFF80)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;szRet&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;wch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(nAsc&nbsp;And&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">HF000)&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uch&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</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;">&amp;</span><span style="color: #000000;">&nbsp;Hex(((nAsc&nbsp;\&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">^</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">))&nbsp;Or&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">HC0)&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;Hex(nAsc&nbsp;And&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">H3F&nbsp;Or&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">H80)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;szRet&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;uch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uch&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</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;">&amp;</span><span style="color: #000000;">&nbsp;Hex((nAsc&nbsp;\&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">^</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">12</span><span style="color: #000000;">)&nbsp;Or&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">HE0)&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</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;">&amp;</span><span style="color: #000000;">&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hex((nAsc&nbsp;\&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">^</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">)&nbsp;And&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">H3F&nbsp;Or&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">H80)&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</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;">&amp;</span><span style="color: #000000;">&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hex(nAsc&nbsp;And&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">H3F&nbsp;Or&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">H80)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;szRet&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;uch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF8EncodeURI&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;szRet<br />
&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Function&nbsp;GBKEncodeURI(szInput)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;i&nbsp;As&nbsp;Long<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;x()&nbsp;As&nbsp;Byte<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;szRet&nbsp;As&nbsp;String<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;StrConv(szInput,&nbsp;vbFromUnicode)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LBound(x)&nbsp;To&nbsp;UBound(x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szRet&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;szRet&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</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;">&amp;</span><span style="color: #000000;">&nbsp;Hex(x(i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GBKEncodeURI&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;szRet<br />
&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br />
<br />
</span></div>
<br />
转载自月光博客 [ http://www.williamlong.info/ ]
<img src ="http://www.blogjava.net/matthew2006/aggbug/161750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2007-11-20 00:53 <a href="http://www.blogjava.net/matthew2006/archive/2007/11/20/161750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载：js技巧收集(200多个) 3</title><link>http://www.blogjava.net/matthew2006/archive/2007/07/22/131706.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Sun, 22 Jul 2007 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2007/07/22/131706.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/131706.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2007/07/22/131706.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/131706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/131706.html</trackback:ping><description><![CDATA[<p>&nbsp;<br>121.集中为按钮改变颜色<br>&lt;style&gt;<br>button{benc:expression(this.onfocus = function(){this.style.backgroundColor='#E5F0FF';})}<br>&lt;/style&gt;<br>&lt;button&gt;New&lt;/button&gt;//</p>
<p><br>122.判断是左键还是右键被按下<br>&lt;body onmousedown=if(event.button==1)alert("左键");if(event.button==2)alert("右键")&gt;//</p>
<p>123.获得<a href="http://www.knowsky.com/system.asp"><u><font color=#3468a4>操作系统</font></u></a>的名称和浏览器的名称<br>document.write(navigator.userAgent)//</p>
<p>&nbsp;<br>124.alt/ctrl/shift键按下<br>event.altKey //按下alt键<br>event.ctrlKey //按下ctrl键<br>event.shiftKey //按下shift键</p>
<p>&nbsp;</p>
<p>125.将当前位置定位为C盘。<br>{window.location="c:"}//</p>
<p>126.返回输入框的类型<br>&lt;script&gt;<br>alert(event.srcElement.type);//<br>&lt;/script&gt;</p>
<p>127.模拟控件的单击事件<br>&lt;INPUT TYPE="hidden" name="guoguo" onclick="haha()"&gt;<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--</p>
<p>function haha()<br>{<br>&nbsp;alert();<br>}<br>guoguo.click();<br>//--&gt;<br>&lt;/SCRIPT&gt;//</p>
<p>&nbsp;<br>128.取出记录集的列名<br>java.sql.ResultSet rset = com.bsitc.util.DBAssist.getIT().executeQuery(queryStatement, conn);<br>java.sql.ResultSetMetaData metaData = rset.getMetaData();<br>int count = metaData.getColumnCount();<br>String name = metaData.getColumnName(i);<br>String value = rset.getString(i);//</p>
<p>129.格式化数字<br>function format_number(str,digit)<br>{<br>&nbsp;if(isNaN(str))<br>&nbsp;{<br>&nbsp; alert("您传入的值不是数字！");<br>&nbsp; return 0;<br>&nbsp;}<br>&nbsp;else if(Math.round(digit)!=digit)<br>&nbsp;{<br>&nbsp; alert("您输入的小数位数不是整数！");<br>&nbsp; return 0;<br>&nbsp;}<br>&nbsp;else <br>&nbsp; return Math.round(parseFloat(str)*Math.pow(10,digit))/Math.pow(10,digit);<br>}</p>
<p>130.回车按钮转化为tab按钮<br>if(event.keyCode==13) event.keyCode=9; //将</p>
<p>&nbsp;<br>131.滚动条滚动<br>&lt;button onclick="text1.scrollTop=text1.scrollHeight"&gt;Scroll&lt;/button&gt;&lt;br&gt;<br>&lt;textarea id="text1" cols=50 rows=10&gt;<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>&lt;/textarea&gt;//</p>
<p>&nbsp;<br>132.判断是什么对象<br>if(typeof(unknown)=="function")return true;<br>if(typeof(unknown)!="object")return false;//</p>
<p>&nbsp;<br>133.取消文本框自动完成功能<br>&lt;input type="text" autocomplete="off"&gt; //</p>
<p>134.让下拉框自动下拉<br>&lt;select onmouseover="javascript:this.size=this.length" onmouseout="javascript:this.size=1"&gt;<br>&lt;option value=""&gt;1&lt;/option&gt;<br>&lt;option value=""&gt;2&lt;/option&gt;<br>&lt;option value=""&gt;3&lt;/option&gt;<br>&lt;/select&gt; //</p>
<p>&nbsp;<br>135.读取XML文件<br>var childrenobj=myselect//document.all.myselect;<br>&nbsp;&nbsp;&nbsp; var oXMLDoc = new ActiveXObject('MSXML');<br>&nbsp;&nbsp;&nbsp; oXMLDoc.url = "mymsg.xml";<br>&nbsp;&nbsp;&nbsp; var oRoot=oXMLDoc.root;<br>&nbsp;&nbsp;&nbsp; if(oRoot.children != null) <br>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;oRoot.children.item(0).children.length;++i)<br>&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oItem = oRoot.children.item(0).children.item(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oOption = new Option(oItem.text,oItem.value);<br>&nbsp;&nbsp; childrenobj.add(oOption);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>//mymsg.xml文件<br>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<br>&lt;childrenlist&gt;<br>&lt;aa&gt;<br>&lt;child value='3301'&gt;杭州地区&lt;/child&gt;</p>
<p>&lt;child value='3303'&gt;温州地区&lt;/child&gt;</p>
<p>&lt;/aa&gt;<br>&lt;aa&gt;<br>&lt;child value='3310'&gt;台州地区&lt;/child&gt;</p>
<p>&lt;child value='3311'&gt;丽水地区&lt;/child&gt;<br>&lt;/aa&gt;<br>&lt;/childrenlist&gt;//</p>
<p>&nbsp;<br>136.点击图片，图片停止<br>&lt;a href="javascript:"&gt;&lt;img src="<a href="http://www.51js.com/images/51js/red_forum.gif"><u><font color=#3468a4>http://www.51js.com/images/51js/red_forum.gif</font></u></a>" border="0"&gt;&lt;/a&gt;//</p>
<p>137.显示本地计算机信息<br>var WshNetwork = new ActiveXObject("WScript.Network");<br>alert("Domain = " + WshNetwork.UserDomain);<br>alert("Computer Name = " + WshNetwork.ComputerName);<br>alert("User Name = " + WshNetwork.UserName);//</p>
<p>&nbsp;<br>138.比较时间<br>&nbsp; tDate = new Date(2004,01,08,14,35); //年,月，日，时，分<br>&nbsp; dDate = new Date();<br>&nbsp; tDate&lt;dDate?alert("早于"):alert("晚于");//</p>
<p>139.弹出鼠标所在处的链结地址<br>&nbsp; &lt;body onmouseover="if (event.srcElement.tagName=='A')alert(event.srcElement.href)"&gt;&lt;a </p>
<p>href="<a href="http://51js.com/viewthread.php?tid=13589"><u><font color=#3468a4>http://51js.com/viewthread.php?tid=13589</font></u></a>" &gt;dddd&lt;/a&gt;&lt;input&gt;//</p>
<p>140.注意不能通过与 undefined 做比较来测试一个变量是否存在，虽然可以检查它的类型是否为&#8220;undefined&#8221;。在以</p>
<p>下的代码范例中，假设程序员想测试是否已经声明变量 x ：<br>// 这种方法不起作用<br>if (x == undefined)<br>&nbsp;&nbsp;&nbsp; // 作某些操作<br>// 这个方法同样不起作用- 必须检查</p>
<p><br>// 字符串 "undefined"<br>if (typeof(x) == undefined)<br>&nbsp;&nbsp;&nbsp; // 作某些操作<br>// 这个方法有效<br>if (typeof(x) == "undefined")<br>&nbsp;&nbsp;&nbsp; // 作某些操作</p>
<p>141.创建具有某些属性的对象<br>var myObject = new Object();<br>myObject.name = "James";<br>myObject.age = "22";<br>myObject.phone = "555 1234";// </p>
<p>142.枚举（循环）对象的所有属性<br>for (var a in myObject)<br>{<br>&nbsp;&nbsp;&nbsp; // 显示 "The property 'name' is James"，等等。<br>&nbsp;&nbsp;&nbsp; window.alert("The property '" + a + "' is " + myObject[a]);<br>}//</p>
<p>143.判断一个数字是否是整数<br>var a=23.2;<br>alert(a%1==1)//</p>
<p><br>144.新建日期型变量<br>var a = new Date(2000, 1, 1);<br>alert(a.toLocaleDateString());</p>
<p><br>145.给类定义新的方法<br>function trim_1()<br>{<br>&nbsp; return this.replace(/(^\s*)|(\s*$)/g, "");<br>}<br>String.prototype.trim=trim_1;<br>alert('cindy'.trim());</p>
<p>&nbsp;<br>146.定义一个将日期类型转化为字符串的方法<br>function guoguo_date()<br>{<br>&nbsp;var tmp1,tmp2;<br>&nbsp;tmp1 =this.getMonth()+1+"";<br>&nbsp;if(tmp1.length&lt;2)<br>&nbsp; tmp1="0"+tmp1;<br>&nbsp;tmp2 =this.getDate()+"";<br>&nbsp;if(tmp2.length&lt;2)<br>&nbsp; tmp2="0"+tmp2;<br>&nbsp;<br>&nbsp;return this.getYear()+"-"+tmp1+"-"+tmp2;<br>}<br>Date.prototype.toLiteString=guoguo_date;<br>alert(new Date().toLiteString())</p>
<p>&nbsp;</p>
<p>147. pasta 是有四个参数的构造器,定义对象。<br>function pasta(grain, width, shape, hasEgg)<br>{<br>&nbsp;&nbsp;&nbsp; // 是用什么粮食做的？<br>&nbsp;&nbsp;&nbsp; this.grain = grain;</p>
<p>&nbsp;&nbsp;&nbsp; // 多宽？（数值）<br>&nbsp;&nbsp;&nbsp; this.width = width;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; // 横截面形状？（字符串）<br>&nbsp;&nbsp;&nbsp; this.shape = shape;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; // 是否加蛋黄？（boolean）<br>&nbsp;&nbsp;&nbsp; this.hasEgg = hasEgg;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; //定义方法<br>&nbsp;&nbsp;&nbsp; this.toString=aa;<br>}<br>function aa()<br>{<br>&nbsp;;<br>}<br>//定义了对象构造器后，用 new 运算符创建对象实例。<br>var spaghetti = new pasta("wheat", 0.2, "circle", true);<br>var linguine = new pasta("wheat", 0.3, "oval", true);<br>//补充定义属性，spaghetti和linguine都将自动获得新的属性<br>pasta.prototype.foodgroup = "carbohydrates";</p>
<p>&nbsp;<br>148.打印出错误原因<br>try<br>{<br>&nbsp;x = y&nbsp;&nbsp; // 产生错误。<br>}<br>catch(e)<br>{<br>&nbsp;&nbsp; document.write(e.description)&nbsp;&nbsp; //打印 "'y' is undefined".<br>}//</p>
<p>149.生成<a href="http://www.knowsky.com/article.asp?typeid=118"><u><font color=#3468a4>Excel</font></u></a>文件并保存<br>var ExcelSheet;<br>ExcelApp = new ActiveXObject("Excel.Application");<br>ExcelSheet = new ActiveXObject("Excel.Sheet");<br>//本代码启动创建对象的应用程序（在这种情况下，Microsoft Excel 工作表）。一旦对象被创建，就可以用定义的对</p>
<p>象变量在代码中引用它。 在下面的例子中，通过对象变量 ExcelSheet 访问新对象的属性和方法和其他 Excel 对象，</p>
<p>包括 Application 对象和 ActiveSheet.Cells 集合。 <br>// 使 Excel 通过 Application 对象可见。<br>ExcelSheet.Application.Visible = true;<br>// 将一些文本放置到表格的第一格中。<br>ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1";<br>// 保存表格。<br>ExcelSheet.SaveAs("C:\\TEST.XLS");<br>// 用 Application 对象用 Quit 方法关闭 Excel。<br>ExcelSheet.Application.Quit();//</p>
<p>150.根据标签获得一组对象<br>var coll = document.all.tags("DIV");<br>if (coll!=null)<br>{<br>for (i=0; i&lt;coll.length; i++) <br>...<br>}//<br>&nbsp;&nbsp;&nbsp; <br>151.实现打印预览及打印<br>&lt;OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" height=0 id=wb name=wb width=0&gt;&lt;/OBJECT&gt; <br>&lt;input type=button value=打印预览 onclick="wb.execwb(7,1)"&gt;<br>&lt;input type=button onClick=document.all.wb.ExecWB(6,1) value="打印"&gt;//</p>
<p>152.不通过form，直接通过名字引用对象<br>&lt;INPUT TYPE="text" NAME="gg" value=aaaaa&gt;<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>alert(document.all.gg.value)<br>//--&gt;<br>&lt;/SCRIPT&gt;//</p>
<p>153.使鼠标滚轮失效<br>function document.onmousewheel()<br>{<br>&nbsp;return false;<br>}//<br>&nbsp;<br>154.创建弹出窗口<br>&lt;SCRIPT LANGUAGE="JScript"&gt;<br>&nbsp; var oPopup = window.createPopup();<br>&nbsp; var oPopupBody = oPopup.document.body;<br>&nbsp; oPopupBody.innerHTML = "Display some &lt;B&gt;HTML&lt;/B&gt; here.";<br>&nbsp; oPopup.show(100, 100, 200, 50, document.body);<br>&lt;/SCRIPT&gt;//</p>
<p>155.取得鼠标所在处的对象<br>var obj = document.elementFromPoint(event.x,event.y);//</p>
<p>156.获得左边的对象<br>&lt;INPUT TYPE="text" NAME="gg"&gt;&lt;INPUT TYPE="text" NAME="bb" </p>
<p>onclick="this.previousSibling.value='guoguo'"&gt;//</p>
<p>157.定位鼠标<br>document.all.hint_layer.style.left&nbsp; = event.x+document.body.scrollLeft+10;<br>document.all.hint_layer.style.top&nbsp; = event.y+document.body.scrollTop+10;//</p>
<p>158.向下拉框指定位置添加项目<br>var op&nbsp; = document.createElement("OPTION");<br>document.all.selected_items.children(index).insertAdjacentElement("BeforeBegin",op);<br>op.text&nbsp; = document.all.all_items[i].text;<br>op.value = document.all.all_items[i].value;//</p>
<p>&nbsp;<br>159.判断一个窗口是否已经打开，如果已经打开，则关闭之<br>var a;<br>if(a) <br>&nbsp;a.close();<br>else<br>&nbsp;a=window.open('','','');//</p>
<p>160.动态创建一个标签<br>newElem&nbsp; = document.createElement("DIV");<br>newElem.id = "hint_layer";<br>document.body.appendChild(newElem);<br>document.all.hint_layer.innerText="guoguo";//</p>
<p>161.标题栏<br>document.title//</p>
<p>162.背景图片<br>&lt;body style="BACKGROUND-ATTACHMENT: fixed" background="img/bgfix.gif" &gt;&lt;/body&gt;//背景图片不动</p>
<p>&lt;STYLE TYPE="text/css"&gt;<br>&lt;!--<br>BODY {background-image:img/bgchild.jpg;<br>background-position: center;<br>background-repeat: no-repeat;<br>background-attachment: fixed;}<br>--&gt;<br>&lt;/STYLE&gt;//背景图片居中</p>
<p>163.设置透明效果<br>document.form.xxx.filters.alpha.opacity=0～100//</p>
<p>164.定义方法<br>var dragapproved=false;<br>document.onmouseup=new Function("dragapproved = false");//<br>&nbsp;<br>165.将数字转化为人民币大写形式<br>function convertCurrency(currencyDigits) {<br>// Constants:<br>&nbsp;var MAXIMUM_NUMBER = 99999999999.99;<br>&nbsp;// Predefine the radix characters and currency symbols for output:<br>&nbsp;var CN_ZERO = "零";<br>&nbsp;var CN_ONE = "壹";<br>&nbsp;var CN_TWO = "贰";<br>&nbsp;var CN_THREE = "叁";<br>&nbsp;var CN_FOUR = "肆";<br>&nbsp;var CN_FIVE = "伍";<br>&nbsp;var CN_SIX = "陆";<br>&nbsp;var CN_SEVEN = "柒";<br>&nbsp;var CN_EIGHT = "捌";<br>&nbsp;var CN_NINE = "玖";<br>&nbsp;var CN_TEN = "拾";<br>&nbsp;var CN_HUNDRED = "佰";<br>&nbsp;var CN_THOUSAND = "仟";<br>&nbsp;var CN_TEN_THOUSAND = "万";<br>&nbsp;var CN_HUNDRED_MILLION = "亿";<br>&nbsp;var CN_SYMBOL = "人民币";<br>&nbsp;var CN_DOLLAR = "元";<br>&nbsp;var CN_TEN_CENT = "角";<br>&nbsp;var CN_CENT = "分";<br>&nbsp;var CN_INTEGER = "整";<br>&nbsp;<br>// Variables:<br>&nbsp;var integral; // Represent integral part of digit number.<br>&nbsp;var decimal; // Represent decimal part of digit number.<br>&nbsp;var outputCharacters; // The output result.<br>&nbsp;var parts;<br>&nbsp;var digits, radices, bigRadices, decimals;<br>&nbsp;var zeroCount;<br>&nbsp;var i, p, d;<br>&nbsp;var quotient, modulus;<br>&nbsp;<br>// Validate input string:<br>&nbsp;currencyDigits = currencyDigits.toString();<br>&nbsp;if (currencyDigits == "") {<br>&nbsp; alert("Empty input!");<br>&nbsp; return "";<br>&nbsp;}<br>&nbsp;if (currencyDigits.match(/[^,.\d]/) != null) {<br>&nbsp; alert("Invalid characters in the input string!");<br>&nbsp; return "";<br>&nbsp;}<br>&nbsp;if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) {<br>&nbsp; alert("Illegal format of digit number!");<br>&nbsp; return "";<br>&nbsp;}<br>&nbsp;<br>// Normalize the format of input digits:<br>&nbsp;currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters.<br>&nbsp;currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning.<br>&nbsp;// Assert the number is not greater than the maximum number.<br>&nbsp;if (Number(currencyDigits) &gt; MAXIMUM_NUMBER) {<br>&nbsp; alert("Too large a number to convert!");<br>&nbsp; return "";<br>&nbsp;}<br>&nbsp;<br>// <a href="http://www.knowsky.com/"><u><font color=#3468a4>http://www.knowsky.com/</font></u></a> Process the coversion from currency digits to characters:<br>&nbsp;// Separate integral and decimal parts before processing coversion:<br>&nbsp;parts = currencyDigits.split(".");<br>&nbsp;if (parts.length &gt; 1) {<br>&nbsp; integral = parts[0];<br>&nbsp; decimal = parts[1];<br>&nbsp; // Cut down redundant decimal digits that are after the second.<br>&nbsp; decimal = decimal.substr(0, 2);<br>&nbsp;}<br>&nbsp;else {<br>&nbsp; integral = parts[0];<br>&nbsp; decimal = "";<br>&nbsp;}<br>&nbsp;// Prepare the characters corresponding to the digits:<br>&nbsp;digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, </p>
<p>CN_NINE);<br>&nbsp;radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);<br>&nbsp;bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);<br>&nbsp;decimals = new Array(CN_TEN_CENT, CN_CENT);<br>&nbsp;// Start processing:<br>&nbsp;outputCharacters = "";<br>&nbsp;// Process integral part if it is larger than 0:<br>&nbsp;if (Number(integral) &gt; 0) {<br>&nbsp; zeroCount = 0;<br>&nbsp; for (i = 0; i &lt; integral.length; i++) {<br>&nbsp;&nbsp; p = integral.length - i - 1;<br>&nbsp;&nbsp; d = integral.substr(i, 1);<br>&nbsp;&nbsp; quotient = p / 4;<br>&nbsp;&nbsp; modulus = p % 4;<br>&nbsp;&nbsp; if (d == "0") {<br>&nbsp;&nbsp;&nbsp; zeroCount++;<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; else {<br>&nbsp;&nbsp;&nbsp; if (zeroCount &gt; 0)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; outputCharacters += digits[0];<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; zeroCount = 0;<br>&nbsp;&nbsp;&nbsp; outputCharacters += digits[Number(d)] + radices[modulus];<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; if (modulus == 0 &amp;&amp; zeroCount &lt; 4) {<br>&nbsp;&nbsp;&nbsp; outputCharacters += bigRadices[quotient];<br>&nbsp;&nbsp; }<br>&nbsp; }<br>&nbsp; outputCharacters += CN_DOLLAR;<br>&nbsp;}<br>&nbsp;// Process decimal part if there is:<br>&nbsp;if (decimal != "") {<br>&nbsp; for (i = 0; i &lt; decimal.length; i++) {<br>&nbsp;&nbsp; d = decimal.substr(i, 1);<br>&nbsp;&nbsp; if (d != "0") {<br>&nbsp;&nbsp;&nbsp; outputCharacters += digits[Number(d)] + decimals[i];<br>&nbsp;&nbsp; }<br>&nbsp; }<br>&nbsp;}<br>&nbsp;// Confirm and return the final output string:<br>&nbsp;if (outputCharacters == "") {<br>&nbsp; outputCharacters = CN_ZERO + CN_DOLLAR;<br>&nbsp;}<br>&nbsp;if (decimal == "") {<br>&nbsp; outputCharacters += CN_INTEGER;<br>&nbsp;}<br>&nbsp;outputCharacters = CN_SYMBOL + outputCharacters;<br>&nbsp;return outputCharacters;<br>}//</p>
<p>&nbsp;<br>166.xml数据岛绑定表格<br>&lt;html&gt;<br>&lt;body&gt;<br>&lt;xml id="abc" src="test.xml"&gt;&lt;/xml&gt;<br>&lt;table border='1' datasrc='#abc'&gt;<br>&lt;thead&gt;<br>&lt;td&gt;接收人&lt;/td&gt;<br>&lt;td&gt;发送人&lt;/td&gt;<br>&lt;td&gt;主题&lt;/td&gt;<br>&lt;td&gt;内容&lt;/td&gt;<br>&lt;/thead&gt;<br>&lt;tfoot&gt;<br>&lt;tr&gt;&lt;th&gt;表格的结束&lt;/th&gt;&lt;/tr&gt;<br>&lt;/tfoot&gt;<br>&lt;tr&gt;<br>&lt;td&gt;&lt;div datafld="to"&gt;&lt;/div&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;div datafld="from"&gt;&lt;/div&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;div datafld="subject"&gt;&lt;/div&gt;&lt;/td&gt;<br>&lt;td&gt;&lt;div datafld="content"&gt;&lt;/div&gt;&lt;/td&gt;<br>&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;</p>
<p>//cd_catalog.xml<br>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt; <br>&nbsp;&lt;!--&nbsp; Edited with XML Spy v4.2 <br>&nbsp; --&gt; <br>&nbsp;&lt;CATALOG&gt;<br>&nbsp;&lt;CD&gt;<br>&nbsp; &lt;TITLE&gt;Empire Burlesque&lt;/TITLE&gt; <br>&nbsp; &lt;ARTIST&gt;Bob Dylan&lt;/ARTIST&gt; <br>&nbsp; &lt;COUNTRY&gt;USA&lt;/COUNTRY&gt; <br>&nbsp; &lt;COMPANY&gt;Columbia&lt;/COMPANY&gt; <br>&nbsp; &lt;PRICE&gt;10.90&lt;/PRICE&gt; <br>&nbsp; &lt;YEAR&gt;1985&lt;/YEAR&gt; <br>&nbsp; &lt;/CD&gt;<br>&nbsp;&lt;CD&gt;<br>&nbsp; &lt;TITLE&gt;Hide your heart&lt;/TITLE&gt; <br>&nbsp; &lt;ARTIST&gt;Bonnie Tyler&lt;/ARTIST&gt; <br>&nbsp; &lt;COUNTRY&gt;UK&lt;/COUNTRY&gt; <br>&nbsp; &lt;COMPANY&gt;CBS Records&lt;/COMPANY&gt; <br>&nbsp; &lt;PRICE&gt;9.90&lt;/PRICE&gt; <br>&nbsp; &lt;YEAR&gt;1988&lt;/YEAR&gt; <br>&nbsp; &lt;/CD&gt;<br>&nbsp;&lt;CD&gt;<br>&nbsp; &lt;TITLE&gt;Greatest Hits&lt;/TITLE&gt; <br>&nbsp; &lt;ARTIST&gt;Dolly Parton&lt;/ARTIST&gt; <br>&nbsp; &lt;COUNTRY&gt;USA&lt;/COUNTRY&gt; <br>&nbsp; &lt;COMPANY&gt;RCA&lt;/COMPANY&gt; <br>&nbsp; &lt;PRICE&gt;9.90&lt;/PRICE&gt; <br>&nbsp; &lt;YEAR&gt;1982&lt;/YEAR&gt; <br>&nbsp; &lt;/CD&gt;<br>&nbsp;&lt;CD&gt;<br>&nbsp; &lt;TITLE&gt;Still got the blues&lt;/TITLE&gt; <br>&nbsp; &lt;ARTIST&gt;Gary Moore&lt;/ARTIST&gt; <br>&nbsp; &lt;COUNTRY&gt;UK&lt;/COUNTRY&gt; <br>&nbsp; &lt;COMPANY&gt;Virgin records&lt;/COMPANY&gt; <br>&nbsp; &lt;PRICE&gt;10.20&lt;/PRICE&gt; <br>&nbsp; &lt;YEAR&gt;1990&lt;/YEAR&gt; <br>&nbsp; &lt;/CD&gt;<br>&lt;/CATALOG&gt;<br>//</p>
<p><br>167.以下组合可以正确显示汉字<br>================================<br>xml保存编码 xml页面指定编码<br>ANSI&nbsp; gbk/GBK、gb2312<br>Unicode&nbsp; unicode/Unicode<br>UTF-8&nbsp; UTF-8<br>================================</p>
<p>&nbsp;<br>168.XML操作<br>&lt;xml id="xmldata" src="/data/books.xml"&gt;<br>&lt;div id="guoguo"&gt;&lt;/div&gt;<br>&lt;script&gt;<br>var x=xmldata.recordset //取得数据岛中的记录集<br>if(x.absoluteposition &lt; x.recordcount) //如果当前的绝对位置在最后一条记录之前<br>{<br>&nbsp;x.movenext();&nbsp;&nbsp;&nbsp;&nbsp; //向后移动<br>&nbsp;x.moveprevious();&nbsp;&nbsp;&nbsp; //向前移动<br>&nbsp;x.absoluteposition=1;&nbsp;&nbsp; //移动到第一条记录<br>&nbsp;x.absoluteposition=x.recordcount;//移动到最后一条记录，注意记录集x.absoluteposition是从1到记录集记录的个</p>
<p>数的<br>&nbsp;guoguo.innerText=xmldso.recordset("field_name"); //从中取出某条记录<br>}<br>&lt;/script&gt;</p>
<p>&nbsp;<br>169.动态修改CSS的另一种方式<br>this.runtimeStyle.cssText = "color:#990000;border:1px solid #cccccc";//</p>
<p>170.正则表达式<br>匹配中文字符的正则表达式： [\u4e00-\u9fa5]</p>
<p>匹配双字节字符(包括汉字在内)：[^\x00-\xff]</p>
<p>应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</p>
<p>String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}</p>
<p>匹配空行的正则表达式：\n[\s| ]*\r</p>
<p>匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/ </p>
<p>匹配首尾空格的正则表达式：(^\s*)|(\s*$)</p>
<p>应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现，如下：</p>
<p>String.prototype.trim = function()<br>{<br>&nbsp;&nbsp;&nbsp; return this.replace(/(^\s*)|(\s*$)/g, "");<br>}</p>
<p>////////利用正则表达式分解和转换IP地址：</p>
<p>下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的Javascript程序：</p>
<p>function IP2V(ip)<br>{<br>&nbsp;re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g&nbsp; //匹配IP地址的正则表达式<br>if(re.test(ip))<br>{<br>return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br>}<br>else<br>{<br>&nbsp;throw new Error("Not a valid IP address!")<br>}<br>}</p>
<p>不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：</p>
<p>var ip="10.100.20.168"<br>ip=ip.split(".")<br>alert("IP值是："+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))</p>
<p>匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*</p>
<p>匹配网址URL的正则表达式：<a href="http://([/w-]+/.)+[/w-]+(/[/w"><u><font color=#3468a4>http://([\w-]+\.)+[\w-]+(/[\w</font></u></a>- ./?%&amp;=]*)?</p>
<p>//////////利用正则表达式去除字串中重复的字符的算法程序：</p>
<p>var s="abacabefgeeii"<br>var s1=s.replace(/(.).*\1/g,"$1")<br>var re=new RegExp("["+s1+"]","g")<br>var s2=s.replace(re,"") <br>alert(s1+s2)&nbsp; //结果为：abcefgi</p>
<p>思路是使用后向引用取出包括重复的字符，再以重复的字符建立第二个表达式，取到不重复的字符，两者串连。这个方</p>
<p>法对于字符顺序有要求的字符串可能不适用。</p>
<p>//////////得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1</p>
<p>s="<a href="http://www.9499.net/page1.htm"><u><font color=#3468a4>http://www.9499.net/page1.htm</font></u></a>"<br>s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")<br>alert(s)</p>
<p>/////////利用正则表达式限制网页表单里的文本框输入内容：</p>
<p>用正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" </p>
<p>onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,'')</p>
<p>)"</p>
<p>用正则表达式限制只能输入全角字符： onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" </p>
<p>onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,'')</p>
<p>)"</p>
<p>用正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^\d]/g,'') </p>
<p>"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"</p>
<p>用正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/[\W]/g,'') </p>
<p>"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"</p>
<p>&nbsp;<br>171.设置和使用cookie<br>&lt;HTML&gt;<br>&lt;BODY&gt;<br>设置与读取 cookies...&lt;BR&gt;<br>写入cookie的值&lt;input type=text name=gg&gt;<br>&lt;INPUT TYPE = BUTTON Value = "设置cookie" onClick = "Set()"&gt;<br>&lt;INPUT TYPE = BUTTON Value = "读取cookie" onClick = "Get()"&gt;&lt;BR&gt;<br>&lt;INPUT TYPE = TEXT NAME = Textbox&gt;<br>&lt;/BODY&gt;<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>function Set()<br>{<br>var Then = new Date() <br>Then.setTime(Then.getTime() + 60*1000 ) //60秒<br>document.cookie = "Cookie1="+gg.value+";expires="+ Then.toGMTString() <br>}</p>
<p>function Get()<br>{ <br>&nbsp;var cookieString = new String(document.cookie)<br>&nbsp;var cookieHeader = "Cookie1="<br>&nbsp;var beginPosition = cookieString.indexOf(cookieHeader)<br>&nbsp;if (beginPosition != -1)<br>&nbsp;{<br>&nbsp; document.all.Textbox.value = cookieString.substring(beginPosition&nbsp; + cookieHeader.length) <br>&nbsp;}<br>&nbsp;else<br>&nbsp; document.all.Textbox.value = "Cookie 未找到!" <br>}<br>&lt;/SCRIPT&gt; <br>&lt;/HTML&gt;//</p>
<p>&nbsp;<br>172.取月的最后一天<br>function getLastDay(year,month)<br>{<br>&nbsp;//取年<br>&nbsp;var new_year = year;<br>&nbsp;//取到下一个月的第一天,注意这里传入的month是从1～12 <br>&nbsp;var new_month = month++;<br>&nbsp;//如果当前是12月，则转至下一年<br>&nbsp;if(month&gt;12)<br>&nbsp;{<br>&nbsp; new_month -=12;<br>&nbsp; new_year++;<br>&nbsp;}<br>&nbsp;var new_date = new Date(new_year,new_month,1);<br>&nbsp;return (new Date(new_date.getTime()-1000*60*60*24)).getDate();<br>}//</p>
<p>173.判断当前的焦点是组中的哪一个<br>for(var i=0;i&lt;3;i++)<br>&nbsp;if(event.srcElement==bb[i])<br>&nbsp; break;//</p>
<p>&nbsp;</p>
<p>174.实现类<br>package com.baosight.view.utils;<br>import javax.servlet.jsp.tagext.TagSupport;<br>import javax.servlet.http.HttpSession;<br>public class Mytag extends TagSupport <br>{<br>&nbsp; public int doStartTag() throws javax.servlet.jsp.JspException <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; boolean canAccess = false;<br>&nbsp;&nbsp;&nbsp; HttpSession session= pageContext.getSession();<br>&nbsp;&nbsp;&nbsp; if (canAccess) <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EVAL_BODY_INCLUDE;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.SKIP_BODY;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>}</p>
<p>175.在web.xml中添加定义<br>&nbsp; &lt;taglib&gt;<br>&nbsp;&nbsp;&nbsp; &lt;taglib-uri&gt;guoguo&lt;/taglib-uri&gt;<br>&nbsp;&nbsp;&nbsp; &lt;taglib-location&gt;/WEB-INF/abc.tld&lt;/taglib-location&gt;<br>&nbsp; &lt;/taglib&gt;</p>
<p><br>176.标签库中定义abc.tld<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" <br>"<a href="http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"><u><font color=#3468a4>http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd</font></u></a>"&gt;<br>&lt;taglib&gt;<br>&nbsp;&lt;tlibversion&gt;1.0&lt;/tlibversion&gt;<br>&nbsp;&lt;jspversion&gt;1.1&lt;/jspversion&gt;<br>&nbsp;&lt;shortname&gt;hr&lt;/shortname&gt;<br>&nbsp;&lt;uri&gt;guoguo&lt;/uri&gt;<br>&nbsp;&lt;info&gt;Extra 3 Tag Library&lt;/info&gt;<br>&nbsp;&lt;tag&gt;<br>&nbsp; &lt;name&gt;mytag&lt;/name&gt;<br>&nbsp; &lt;tagclass&gt;com.baosight.view.utils.Mytag&lt;/tagclass&gt;<br>&nbsp; &lt;attribute&gt;<br>&nbsp;&nbsp; &lt;name&gt;id2&lt;/name&gt;<br>&nbsp;&nbsp; &lt;required&gt;true&lt;/required&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br>&nbsp; &lt;/attribute&gt;<br>&nbsp;&lt;/tag&gt;<br>&lt;/taglib&gt;</p>
<p><br>177.在使用自定义标签的页面中加入自己定义的标签，<br>&lt;%@ taglib uri="guoguo" prefix="guoguo" %&gt;<br>//自己定义标签</p>
<p>&nbsp;<br>178.显示带边框的集<br>&lt;fieldset style="border:1px gray solid;width:100px"&gt;<br>&nbsp; &lt;legend&gt;查询条件&lt;/legend&gt;<br>dfdfdf<br>&lt;/fieldset&gt;//</p>
<p><br>179.【文件(F)】菜单中的命令的实现</p>
<p>1、〖打开〗命令的实现<br>[格式]:document.execCommand("open")<br>[说明]这跟VB等编程设计中的webbrowser控件中的命令有些相似，大家也可依此琢磨琢磨。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=document.execCommand("open")&gt;打开&lt;/a&gt;</p>
<p>2、〖使用 记事本 编辑〗命令的实现<br>[格式]:location.replace("view-source:"+location)<br>[说明]打开记事本，在记事本中显示该网页的源代码。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=location.replace("view-source:"+location)&gt;使用 记事本编辑&lt;/a&gt;</p>
<p>3、〖另存为〗命令的实现<br>[格式]:document.execCommand("saveAs")<br>[说明]将该网页保存到本地盘的其它目录！<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=document.execCommand("saveAs")&gt;另存为&lt;/a&gt;</p>
<p>4、〖打印〗命令的实现<br>[格式]:document.execCommand("print")<br>[说明]当然，你必须装了打印机！<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=document.execCommand("print")&gt;打印&lt;/a&gt;</p>
<p>5、〖关闭〗命令的实现<br>[格式]:window.close();return false<br>[说明]将关闭本窗口。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=window.close();return false)&gt;关闭本窗口&lt;/a&gt;</p>
<p>180.【编辑(E)】菜单中的命令的实现</p>
<p>〖全选〗命令的实现<br>[格式]:document.execCommand("selectAll")<br>[说明]将选种网页中的全部内容！<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=document.execCommand("selectAll")&gt;全选&lt;/a&gt;</p>
<p>181.【查看(V)】菜单中的命令的实现</p>
<p>1、〖刷新〗命令的实现<br>[格式]:location.reload() 或 history.go(0)<br>[说明]浏览器重新打开本页。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=location.reload()&gt;刷新&lt;/a&gt;<br>或加入:<br>&lt;a href="###" onclick=history.go(0)&gt;刷新&lt;/a&gt;</p>
<p>2、〖源文件〗命令的实现<br>[格式]:location.replace("view-source:"+location)<br>[说明]查看该网页的源代码。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=location.replace("view-source:"+location)&gt;查看源文件&lt;/a&gt;</p>
<p>3、〖全屏显示〗命令的实现<br>[格式]:window.open(document.location, "url", "fullscreen")<br>[说明]全屏显示本页。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=window.open(document.location,"url","fullscreen")&gt;全屏显示&lt;/a&gt;</p>
<p>182.【收藏(A)】菜单中的命令的实现</p>
<p>1、〖添加到收藏夹〗命令的实现<br>[格式]:window.external.AddFavorite('url', '&#8220;网站名&#8221;)<br>[说明]将本页添加到收藏夹。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="javascript:window.external.AddFavorite('http://oh.jilinfarm.com', '胡明新的个人主页')"&gt;添加到收</p>
<p>藏夹&lt;/a&gt;</p>
<p>2、〖整理收藏夹〗命令的实现<br>[格式]:window.external.showBrowserUI("OrganizeFavorites",null)<br>[说明]打开整理收藏夹对话框。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=window.external.showBrowserUI("OrganizeFavorites",null)&gt;整理收藏夹&lt;/a&gt;</p>
<p>183.【工具(T)】菜单中的命令的实现</p>
<p>〖internet选项〗命令的实现<br>[格式]:window.external.showBrowserUI("PrivacySettings",null)<br>[说明]打开internet选项对话框。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=window.external.showBrowserUI("PrivacySettings",null)&gt;internet选项&lt;/a&gt;</p>
<p>184.【工具栏】中的命令的实现</p>
<p>1、〖前进〗命令的实现<br>[格式]history.go(1) 或 history.forward()<br>[说明]浏览器打开后一个页面。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=history.go(1)&gt;前进&lt;/a&gt;<br>或加入:<br>&lt;a href="###" onclick=history.forward()&gt;前进&lt;/a&gt;</p>
<p>2、〖后退〗命令的实现<br>[格式]:history.go(-1) 或 history.back()<br>[说明]浏览器返回上一个已浏览的页面。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=history.go(-1)&gt;后退&lt;/a&gt;<br>或加入:<br>&lt;a href="###" onclick=history.back()&gt;后退&lt;/a&gt;</p>
<p>3、〖刷新〗命令的实现<br>[格式]:document.reload() 或 history.go(0)<br>[说明]浏览器重新打开本页。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=location.reload()&gt;刷新&lt;/a&gt;<br>或加入:<br>&lt;a href="###" onclick=history.go(0)&gt;刷新&lt;/a&gt;</p>
<p>185.其它命令的实现<br>〖定时关闭本窗口〗命令的实现<br>[格式]:settimeout(window.close(),关闭的时间)<br>[说明]将关闭本窗口。<br>[举例]在&lt;body&gt;&lt;/body&gt;之间加入：<br>&lt;a href="###" onclick=settimeout(window.close(),3000)&gt;3秒关闭本窗口&lt;/a&gt;</p>
<p><br>【附】为了方便读者，下面将列出所有实例代码，你可以把它们放到一个html文件中，然后预览效果。<br>&lt;a href="###" onclick=document.execCommand("open")&gt;打开&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=location.replace("view-source:"+location)&gt;使用 记事本编辑&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=document.execCommand("saveAs")&gt;另存为&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=document.execCommand("print")&gt;打印&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=window.close();return false)&gt;关闭本窗口&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=document.execCommand("selectAll")&gt;全选&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=location.reload()&gt;刷新&lt;/a&gt; &lt;a href="###" onclick=history.go(0)&gt;刷新&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=location.replace("view-source:"+location)&gt;查看源文件&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=window.open(document.location,"url","fullscreen")&gt;全屏显示&lt;/a&gt;&lt;br&gt;<br>&lt;a href="javascript:window.external.AddFavorite('http://homepage.yesky.com', '天极网页陶吧')"&gt;添加到收藏</p>
<p>夹&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=window.external.showBrowserUI("OrganizeFavorites",null)&gt;整理收藏夹&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=window.external.showBrowserUI("PrivacySettings",null)&gt;internet选项&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=history.go(1)&gt;前进1&lt;/a&gt;　&lt;a href="###" onclick=history.forward()&gt;前进2&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=history.go(-1)&gt;后退1&lt;/a&gt;　&lt;a href="###" onclick=history.back()&gt;后退2&lt;/a&gt;&lt;br&gt;<br>&lt;a href="###" onclick=settimeout(window.close(),3000)&gt;3秒关闭本窗口&lt;/a&gt;&lt;br&gt;</p>
<p>&nbsp;<br>186.给DHTML中的标签添加一个新的属性，可以随意加<br>&lt;BODY onload="alert(a1.epass)"&gt;<br>&lt;input type=text name="a1" epass="zhongguo"&gt;<br>&lt;/BODY&gt;//</p>
<p>&nbsp;<br>187.xmlhttp技术<br>&lt;BODY&gt; 此方法是通过XMLHTTP对象从服务器获取XML文档，示例如下。 <br>&nbsp;&lt;input type=button value="加载XML文档" onclick="getData('data.xml')" &gt; <br>&nbsp;&lt;script language="JavaScript" &gt; <br>&nbsp;function getDatal(url){ <br>&nbsp;var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");//创建XMLHTTPRequest对象 <br>&nbsp;xmlhttp.open("GET",url,false,"","");//使用HTTP GET初始化HTTP请求 <br>&nbsp;xmlhttp.send("");//发送HTTP请求并获取HTTP响应 <br>&nbsp;return xmlhttp.responseXML;//获取XML文档 <br>&nbsp;} <br>&nbsp;&lt;/script &gt; <br>&lt;/BODY&gt;//</p>
<p>188.服务器端通过request.getReader()获得传入的字符串</p>
<p>189.在java中使用正则表达式<br>java.util.regex.Pattern p = </p>
<p>java.util.regex.Pattern.compile("<a href="file://d+%7C.//d+%7C//d+.//d*%7C(E%7C//d+E%7C.//d+E%7C//d+.//d*E)((//+%7C-)//d%7C//d)//d"><u><font color=#3468a4>\\d+|.\\d+|\\d+.\\d*|(E|\\d+E|.\\d+E|\\d+.\\d*E)((\\+|-)\\d|\\d)\\d</font></u></a>*");<br>java.util.regex.Matcher m = p.matcher("12.E+3");<br>boolean result = m.matches();//</p>
<p>&nbsp;<br>190.给下拉框分组<br>&lt;SELECT&gt;<br>&lt;OPTGROUP LABEL="碱性金属"&gt;<br>&lt;OPTION&gt;锂 (Li)&lt;/OPTION&gt;<br>&lt;OPTION&gt;纳 (Na)&lt;/OPTION&gt;<br>&lt;OPTION&gt;钾 (K)&lt;/OPTION&gt;<br>&lt;/OPTGROUP&gt;<br>&lt;OPTGROUP LABEL="卤素"&gt;<br>&lt;OPTION&gt;氟 (F)&lt;/OPTION&gt;<br>&lt;OPTION&gt;氯 (Cl)&lt;/OPTION&gt;<br>&lt;OPTION&gt;溴 (Br)&lt;/OPTION&gt;<br>&lt;/OPTGROUP&gt;<br>&lt;/SELECT&gt;//</p>
<p>191.加注音<br>&lt;RUBY&gt;<br>基准文本<br>&lt;RT&gt;注音文本<br>&lt;/RUBY&gt;//</p>
<p>&nbsp;<br>192.加删除线<br>&lt;S&gt;此文本将带删除线显示。&lt;/S&gt;//</p>
<p>193.取frame中的event事件<br>document.frames("workspace").event.keyCode//</p>
<p>194.是弹出方法的定义<br>String.prototype.trim=function()<br>{<br>&nbsp;return this.replace(/(^\s*)|(\s*$)/g, "");<br>}<br>alert("&nbsp; ".trim)//<br>&nbsp;</p>
<p>195.防止网页被包含<br>if (window != window.top)<br>top.location.href = location.href;//</p>
<p>&nbsp;<br>196.让网页一直在frame里面<br>if(window==window.top)<br>{<br>&nbsp;document.body.innerHTML="&lt;center&gt;&lt;h1&gt;请通过正常方式访问本页面！&lt;/h1&gt;&lt;/center&gt;";<br>&nbsp;//window.close();<br>}//</p>
<p>&nbsp;<br>197.加为首页<br>&lt;SCRIPT&gt;<br>function fnSet(){<br>oHomePage.setHomePage(location.href);<br>event.returnValue = false;<br>}<br>&lt;/SCRIPT&gt;<br>&lt;IE:HOMEPAGE ID="oHomePage" style="behavior:url(#default#homepage)"/&gt;//</p>
<p>&nbsp;<br>198.xml数据岛操作<br>&lt;HTML&gt;<br>&nbsp; &lt;HEAD&gt;&lt;Title&gt;HTML中的数据岛中的记录集&lt;/Title&gt;&lt;/HEAD&gt;<br>&nbsp; &lt;body bkcolor=#EEEEEE text=blue bgcolor="#00FFFF"&gt;<br>&nbsp; &lt;Table align=center width="100%"&gt;&lt;TR&gt;&lt;TD align="center"&gt;<br>&nbsp; &lt;h5&gt;&lt;b&gt;&lt;font size="4" color="#FF0000"&gt;HTML中的XML数据岛记录编辑与添加&nbsp;&nbsp;&nbsp; &lt;/font&gt;&lt;/b&gt;&lt;/h5&gt;<br>&nbsp; &lt;/TD&gt;&lt;/TR&gt;&lt;/Table&gt;<br>&nbsp; &lt;HR&gt;<br>&nbsp; 酒店名称：&lt;input type=text datasrc=#theXMLisland DataFLD=NAME size="76"&gt;&lt;BR&gt;<br>&nbsp; 地址：&lt;input type=text datasrc=#theXMLisland DataFLD=Address size="76"&gt;&lt;BR&gt;<br>&nbsp; 主页：&lt;input type=text datasrc=#theXMLisland DataFLD=HomePage size="76"&gt;&lt;BR&gt;<br>&nbsp; 电子邮件：&lt;input type=text datasrc=#theXMLisland DataFLD=E-Mail size="76"&gt;&lt;BR&gt;<br>&nbsp; 电话：&lt;input type=text datasrc=#theXMLisland DataFLD=TelePhone size="76"&gt;&lt;BR&gt;<br>&nbsp; 级别：&lt;input type=text datasrc=#theXMLisland DataFLD=Grade size="76"&gt;&lt;HR&gt;<br>&nbsp; &lt;input id="first" TYPE=button value="&lt;&lt;　第一条记录"&nbsp;&nbsp;&nbsp;&nbsp; onclick="theXMLisland.recordset.moveFirst()"&gt;<br>&nbsp; &lt;input id="prev" TYPE=button value="&lt;上一条记录"&nbsp;&nbsp; onclick="theXMLisland.recordset.movePrevious()"&gt;&nbsp; <br>&nbsp; &lt;input id="next" TYPE=button value="下一条记录&gt;" onclick="theXMLisland.recordset.moveNext()"&gt;&nbsp; <br>&nbsp; &lt;input id="last" TYPE=button value="最后一条记录&gt;&gt;" onclick="theXMLisland.recordset.moveLast()"&gt;&amp;nbsp;&nbsp; <br>&nbsp; &lt;input id="Add" TYPE=button value="添加新记录" onclick="theXMLisland.recordset.addNew()"&gt;&nbsp; </p>
<p>&nbsp; &lt;XML ID="theXMLisland"&gt;<br>&nbsp; &lt;HotelList&gt;<br>&nbsp; &lt;Hotel&gt;<br>&nbsp; &lt;Name&gt;四海大酒店&lt;/Name&gt;<br>&nbsp; &lt;Address&gt;海魂路1号&lt;/Address&gt;<br>&nbsp; &lt;HomePage&gt;www.sihaohotel.com.cn&lt;/HomePage&gt; <br>&nbsp; &lt;E-Mail&gt;master@sihaohotel.com.cn&lt;/E-Mail&gt;<br>&nbsp; &lt;TelePhone&gt;(0989)8888888&lt;/TelePhone&gt; <br>&nbsp; &lt;Grade&gt;五星级&lt;/Grade&gt;<br>&nbsp; &lt;/Hotel&gt;<br>&nbsp; &lt;Hotel&gt;<br>&nbsp; &lt;Name&gt;五湖宾馆&lt;/Name&gt;<br>&nbsp; &lt;Address&gt;东平路99号&lt;/Address&gt;<br>&nbsp; &lt;HomePage&gt;www.wuhu.com.cn&lt;/HomePage&gt; <br>&nbsp; &lt;E-Mail&gt;web@wuhu.com.cn&lt;/E-Mail&gt;<br>&nbsp; &lt;TelePhone&gt;(0979)1111666&lt;/TelePhone&gt; <br>&nbsp; &lt;Grade&gt;四星级&lt;/Grade&gt;<br>&nbsp; &lt;/Hotel&gt;<br>&nbsp; &lt;Hotel&gt;<br>&nbsp; &lt;Name&gt;&#8220;大沙漠&#8221;宾馆&lt;/Name&gt;<br>&nbsp; &lt;Address&gt;留香路168号&lt;/Address&gt;<br>&nbsp; &lt;HomePage&gt;www.dashamohotel.com.cn&lt;/HomePage&gt; <br>&nbsp; &lt;E-Mail&gt;master@dashamohotel.com.cn&lt;/E-Mail&gt;<br>&nbsp; &lt;TelePhone&gt;(0989)87878788&lt;/TelePhone&gt; <br>&nbsp; &lt;Grade&gt;五星级&lt;/Grade&gt;<br>&nbsp; &lt;/Hotel&gt;<br>&nbsp; &lt;Hotel&gt;<br>&nbsp; &lt;Name&gt;&#8220;画眉鸟&#8221;大酒店&lt;/Name&gt;<br>&nbsp; &lt;Address&gt;血海飘香路2号&lt;/Address&gt;<br>&nbsp; &lt;HomePage&gt;www.throstlehotel.com.cn&lt;/HomePage&gt; <br>&nbsp; &lt;E-Mail&gt;chuliuxiang@throstlehotel.com.cn&lt;/E-Mail&gt;<br>&nbsp; &lt;TelePhone&gt;(099)9886666&lt;/TelePhone&gt; <br>&nbsp; &lt;Grade&gt;五星级&lt;/Grade&gt;<br>&nbsp; &lt;/Hotel&gt;<br>&nbsp; &lt;/HotelList&gt; <br>&nbsp; &lt;/XML&gt;</p>
<p>&nbsp; &lt;/body&gt;&nbsp; <br>&nbsp; &lt;/HTML&gt; //xml数据岛中添加记录</p>
<p><br>-------------------------------<br>&nbsp; The following list is a sample of the properties and methods that you use to access nodes in an XML </p>
<p>document.</p>
<p>Property/&nbsp;&nbsp;&nbsp; Method Description <br>XMLDocument Returns a reference to the XML Document Object Model (DOM) exposed by the object.&nbsp; </p>
<p>documentElement&nbsp; Returns the document root of the XML document. <br>childNodes&nbsp;&nbsp;&nbsp; Returns a node list containing the children of a node (if any). <br>item&nbsp;&nbsp;&nbsp;&nbsp; Accesses individual nodes within the list through an index. Index values are zero-based, so </p>
<p>item(0) returns the first child node. <br>text&nbsp;&nbsp;&nbsp;&nbsp; Returns the text content of the node. </p>
<p>The following code shows an HTML page containing an XML data island. The data island is contained within </p>
<p>the &lt;XML&gt; element.</p>
<p>&lt;HTML&gt;<br>&nbsp; &lt;HEAD&gt;<br>&nbsp;&nbsp;&nbsp; &lt;TITLE&gt;HTML with XML Data Island&lt;/TITLE&gt;<br>&nbsp; &lt;/HEAD&gt;<br>&nbsp; &lt;BODY&gt;<br>&nbsp;&nbsp;&nbsp; &lt;P&gt;Within this document is an XML data island.&lt;/P&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;XML ID="resortXML"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resorts&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resort code='1'&gt;Adventure Works&lt;/resort&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resort&gt;Alpine Ski House&lt;/resort&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/resorts&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/XML&gt;</p>
<p>&nbsp; &lt;/BODY&gt;<br>&lt;/HTML&gt;<br>For an example, you can cut and paste this sample line of code: </p>
<p>resortXML.XMLDocument.documentElement.childNodes.item(1).text//读取页面上的XML数据岛中的数据<br>resortXML.documentElement.childNodes.item(0).getAttribute("code")//读取页面上的XML数据岛中的数据<br>resortXML.documentElement.childNodes[0].getAttribute("code")//读取页面上的XML数据岛中的数据</p>
<p>199.模式窗口<br>父窗口<br>var url="aaa.jsp";<br>var </p>
<p>data=showModalDialog(url,null,"dialogHeight:400px;dialogHeight:600px;center:yes;help:No;status:no;resizab</p>
<p>le:Yes;edge:sunken");<br>if(data)<br>&nbsp;alert(data.value);<br>&nbsp;<br>子窗口<br>var data=new Object();<br>data.value1="china";<br>window.returnValue=data;<br>window.close();</p>
<p>&nbsp;<br>200.动态设置事件，带参数<br>&lt;INPUT TYPE="text" NAME="a1"&gt;<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>function hah(para)<br>{<br>&nbsp;alert(para)<br>}<br>a1.onclick=function()<br>{<br>&nbsp;hah('canshu ')<br>}<br>//a1.attachEvent("onclick",function(){hah('参数')});<br>//--&gt;<br>&lt;/SCRIPT&gt;//</p>
<p>&nbsp;<br>201.将url转化为16进制形式<br>&nbsp;var ret = '';</p>
<p>&nbsp;for(var i=0; i &lt; str.length; i++)<br>&nbsp;{<br>&nbsp; var ch = str.charAt(i);<br>&nbsp; var code = str.charCodeAt(i);</p>
<p>&nbsp; if(code &lt; 128 &amp;&amp; ch != '[' &amp;&amp; ch != '\'' &amp;&amp; ch != '=')<br>&nbsp; {<br>&nbsp;&nbsp; ret += ch;<br>&nbsp; }<br>&nbsp; else <br>&nbsp; {<br>&nbsp;&nbsp; ret += "[" + code.toString(16) + "]";<br>&nbsp; }<br>&nbsp;}<br>&nbsp;return ret;//<br>&nbsp;</p>
<p>202.打开新的窗口并将新打开的窗口设置为活动窗口<br>var newWin=window.open("xxxx");<br>newWin.focus();//</p>
<p>&nbsp;<br>203.容错脚本<br>JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; <br>指定错误句柄的语法为:window.onerror = handleError<br>function handleError(message, URI, line)<br>{// 提示用户，该页可能不能正确回应<br>return true; // 这将终止默认信息<br>}//在页面出错时进行操作</p>
<p>204.JS中的窗口重定向:<br>window.navigate("<a href='http://www.sina.com.cn");//'><u><font color=#3468a4>http://www.sina.com.cn");//</font></u></a></p>
<p>205.防止链接文字折行<br>document.body.noWrap=true;//</p>
<p>206.判断字符是否匹配.<br>string.match(regExpression)//</p>
<p>207.<br>href="javascript:document.Form.Name.value='test';void(0);"//不能用onClick="javacript:document.Form.Name.v</p>
<p>alue='test';return false;"</p>
<p>当使用inline方式添加事件处理脚本事，有一个被包装成匿名函数的过程，也就是说<br>onClick="javacript:document.Form.Name.value='test';return false;"被包装成了：<br>functoin anonymous()<br>{<br>&nbsp;&nbsp;&nbsp; document.Form.Name.value='test';return false;<br>}<br>做为A的成员函数onclick。<br>而href="javascript:document.Form.Name.value='test';void(0);"相当于执行全局语句，这时如果使用return语句会</p>
<p>报告在函数外使用return语句的错误。</p>
<p><br>208.进行页面放大<br>&lt;P onmouseover="this.style.zoom='200%'" onmouseout="this.style.zoom='normal'"&gt;<br>sdsdsdsdsdsdsdsds<br>&lt;/p&gt;//</p>
<p>209.放置在页面的最右边<br>&lt;input type="text" value='bu2'&nbsp; style="float:right"&gt;//</p>
<p>210.通过style来控制隔行显示不同颜色<br>&lt;style&gt;<br>tr{<br>bgcolor:expression(this.bgColor=((this.rowIndex)%2==0 )? 'white' : 'yellow');<br>}<br>&lt;/style&gt;<br>&lt;table id="oTable" width="100" border="1" style="border-collapse:collapse;"&gt;<br>&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;<br>&lt;/table&gt;//</p>
<p>211.全屏最大化<br>newwindow=window.open("","","scrollbars")<br>if (document.all)<br>{<br>&nbsp;newwindow.moveTo(0,0)<br>&nbsp;newwindow.resizeTo(screen.width,screen.height)<br>}//</p>
<p>212.根据名字解析xml中的节点值<br>var XMLDoc=new ActiveXObject("MSXML");<br>XMLDoc.url="d:/abc.xml";<br>aRoot=XMLDoc.root;<br>a1.innerText=aRoot.children.item("name").text;//</p>
<p>&nbsp;<br>213.在页面上解析xml的值<br><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/5996c682-3472-4b03-9fb0-1e08"><u><font color=#3468a4>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/5996c682-3472-4b03-9fb0-1e08</font></u></a></p>
<p>fcccdf35.asp<br>//</p>
<p>214.看一个字符串里面有多少个回车符，返回值是一个数组<br>var s=value.match(/\n/g);if(s)if(s.length==9){alert('10行了');return false;}//</p>
<p>215.获得asc码<br>var s='aa';<br>alert(s.charCodeAt(1))//<br>&nbsp;<br>216.文字居右对齐<br>&lt;input type="text" value="123" style="text-align:right"&gt;//</p>
<p>217.判断一个方法是否存在<br>function pageCallback(response){<br>&nbsp;alert(response);<br>}<br>if(pageCallback)<br>&nbsp;alert(1)//</p>
<p>&nbsp;<br>218.判断一个变量是否定义<br>if(typeof(a)=="undefined")<br>{<br>&nbsp;alert()<br>}//</p>
<p>&nbsp;<br>219.javascript执行本机的可执行程序,需设置为可信或者降低IE安全级别<br>&lt;script&gt;<br>function exec (command) {<br>&nbsp;&nbsp;&nbsp; window.oldOnError = window.onerror;<br>&nbsp;&nbsp;&nbsp; window._command = command;<br>&nbsp;&nbsp;&nbsp; window.onerror = function (err) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err.indexOf('utomation') != -1) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert('命令已经被用户禁止！'); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else return false;<br>&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp; var wsh = new ActiveXObject('WScript.Shell');<br>&nbsp;&nbsp;&nbsp; if (wsh)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wsh.Run(command);<br>&nbsp;&nbsp;&nbsp; window.onerror = window.oldOnError;<br>&nbsp; }<br>&lt;/script&gt;<br>调用方式<br>&lt;a href="javascript:" onclick="exec('D:/test.bat')"&gt;测试&lt;/a&gt;//<br>&nbsp;<br>220.弹出新页面，关闭旧页面，不弹出提示框<br>&nbsp;var w=screen.availWidth-10;<br>&nbsp;&nbsp; var h=screen.availHeight-10;<br>&nbsp;&nbsp; var swin=window.open("/mc/mc/message_management.jsp", </p>
<p>"BGSMbest","scrollbars=yes,status,location=0,menubar=0,toolbar=0,resizable=no,top=0,left=0,height="+h+",w</p>
<p>idth="+w);<br>&nbsp;&nbsp; window.opener=null;<br>&nbsp;&nbsp; window.close();//</p>
<p>221.能输入的下拉框<br>&lt;span&gt;<br>&lt;input name="Department1" id="Department1" style=" border-right:0;width:130" autocomplete="off"&gt;<br>&lt;span style="width:150;overflow:hidden"&gt;<br>&lt;select&nbsp; style="width:150;margin-left:-130" onChange="Department1.value=value"&gt; <br>&lt;option value=""&gt;&lt;/option&gt;<br>&lt;option value="asdfasfadf"&gt;asdfasfadf&lt;/option&gt;<br>&lt;option value="546546"&gt;546546&lt;/option&gt;&lt;/select&gt; //</p>
<p>&nbsp;<br>222.在方法中定义全局变量<br>function globalVar (script) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval(script);//all navigators<br>&nbsp; //window.execScript(script); //for ie only <br>}<br>globalVar('window.haha = "../system";');<br>alert(haha);//在方法中定义全局变量，其中的haha就是全局变量了</p>
<p>223.显示一个对象的全部的属性和属性的值<br>var a=new Object();<br>a.name='a1';<br>a.***='mail'<br>for(var p in a)<br>{<br>&nbsp;alert(p+"="+a[p])<br>}//</p>
<p>&nbsp;<br>224.16进制转换成10进制<br>var n = parseInt("2AE",16);//这里将16进制的 2AE 转成 10 进制数，得到 n 的值是 686</p>
<p><br>225.复制粘贴<br>&lt;BODY&gt;<br>&lt;input type="file" name='a1'&gt;&lt;input type="button" value='复制粘贴' onclick="haha()"&gt;&lt;div id="aa"&gt;&lt;/div&gt;<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>function haha()<br>{<br>&nbsp;clipboardData.setData("Text",a1.value);<br>&nbsp;aa.innerText=clipboardData.getData("Text");<br>}<br>//--&gt;<br>&lt;/SCRIPT&gt;<br>&lt;/BODY&gt;//</p>
<p>226.获得对象类型<br>switch (object.constructor){<br>&nbsp;&nbsp; case Date:<br>&nbsp;&nbsp; ...<br>&nbsp;&nbsp; case Number:<br>&nbsp;&nbsp; ...<br>&nbsp;&nbsp; case String:<br>&nbsp;&nbsp; ...<br>&nbsp;&nbsp; case MyObject:<br>&nbsp;&nbsp; ...<br>&nbsp;&nbsp; default: <br>&nbsp;&nbsp; ...<br>}//</p>
<p>&nbsp;<br>227.图片加载失败时重新加载图片<br>&lt;img src="aa.gif" onerror="this.src='aa.gif'"&gt;//<br>&nbsp;<br>228.<br>//font_effect.htc<br>&lt;PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="glowit()" /&gt; <br>&lt;PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="noglow()" /&gt; <br>&lt;SCRIPT LANGUAGE="JScript"&gt; <br>//定义一个保存字体颜色的变量 <br>var color;<br>function glowit() <br>{ <br>&nbsp;color=element.style.backgroundColor;<br>&nbsp;element.style.backgroundColor='white'<br>} <br>function noglow() <br>{ <br>&nbsp; element.style.backgroundColor=color<br>} <br>&lt;/SCRIPT&gt; </p>
<p>//abc.css<br>tr{behavior:url(font_effect.htc);}</p>
<p>229.可以通过css和htc改变表格的颜色,仅IE支持<br>//xxx.html<br>&lt;link rel="stylesheet" type="text/css" href="abc.css"&gt;<br>&lt;TABLE border='1'&nbsp; id="a1"&gt;<br>&lt;TR style="background-color:red"&gt;<br>&nbsp;&lt;TD&gt;1&lt;/TD&gt;<br>&nbsp;&lt;TD&gt;2&lt;/TD&gt;<br>&nbsp;&lt;TD&gt;3&lt;/TD&gt;<br>&lt;/TR&gt;<br>&lt;TR style="background-color:yellow"&gt;<br>&nbsp;&lt;TD&gt;4&lt;/TD&gt;<br>&nbsp;&lt;TD&gt;5&lt;/TD&gt;<br>&nbsp;&lt;TD&gt;6&lt;/TD&gt;<br>&lt;/TR&gt;<br>&lt;/TABLE&gt;//</p>
<p>230.在页面上画点<br>function a(x,y,color)<br>{<br>&nbsp;document.write("&lt;img border='0' style='position: absolute; left: "+(x+20)+"; top: </p>
<p>"+(y+20)+";background-color: "+color+"' width=1 height=1&gt;")<br>}// </p>
<p>&nbsp;231.自动关闭网页<br>&lt;script LANGUAGE="javascript"&gt;<br>&lt;!--<br>setTimeout('window.close();', 10000); //60秒后关闭<br>// --&gt;<br>&lt;/script&gt;<br>&lt;p align="center"&gt;本页10秒后自动关闭,请注意刷新页面&lt;/p&gt;<br></p>
<img src ="http://www.blogjava.net/matthew2006/aggbug/131706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2007-07-22 10:36 <a href="http://www.blogjava.net/matthew2006/archive/2007/07/22/131706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载：js技巧收集(200多个) 2</title><link>http://www.blogjava.net/matthew2006/archive/2007/07/22/131705.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Sun, 22 Jul 2007 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2007/07/22/131705.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/131705.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2007/07/22/131705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/131705.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/131705.html</trackback:ping><description><![CDATA[<p><br>50.新建frame<br>&lt;a </p>
<p>href="javascript:newframe('http://www.163.net/help/a_little/index.html','http://www.163.net/help/a_little</p>
<p>/a_13.html')"&gt;&lt;img alt=帮助 border=0 src="<a href='http://bjpic.163.net/images/mail/button-help.gif"></a'><u><font color=#3468a4>http://bjpic.163.net/images/mail/button-help.gif"&gt;&lt;/a</font></u></a>&gt;</p>
<p>51.向文件中写内容<br>&lt;%@ page import="java.io.*" %&gt;<br>&lt;%<br>&nbsp;String str = "print me";<br>&nbsp;//always give the path from root. This way it almost always works.<br>&nbsp;String nameOfTextFile = "/usr/anil/imp.txt";<br>&nbsp;try<br>&nbsp;{ <br>&nbsp; PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfTextFile));<br>&nbsp; pw.println(str);<br>&nbsp; //clean up<br>&nbsp; pw.close();<br>&nbsp;}<br>&nbsp;catch(IOException e)<br>&nbsp;{<br>&nbsp; out.println(e.getMessage());<br>&nbsp;}<br>%&gt;</p>
<p>52.先读文件再写文件<br>&lt;%@ page language = "java" %&gt;<br>&lt;%@ page contentType = "text/html; charSet=gb2312" %&gt;<br>&lt;%@ page import ="java.util.*" %&gt;<br>&lt;%@ page import ="java.lang.*" %&gt;<br>&lt;%@ page import ="javax.servlet.*" %&gt;<br>&lt;%@ page import ="javax.servlet.jsp.*" %&gt;<br>&lt;%@ page import ="javax.servlet.http.*" %&gt;<br>&lt;%@ page import="java.io.*" %&gt;<br>eryrytry<br>&lt;%<br>&nbsp;int count=0;<br>&nbsp;FileInputStream fi =new FileInputStream ("count.txt");<br>&nbsp;ObjectInputStream si= new ObjectInputStream (fi);<br>&nbsp;count =si.readInt();<br>&nbsp;count++;<br>&nbsp;out.print(count);<br>&nbsp;si.close();</p>
<p>&nbsp;FileOutputStream fo =new FileOutputStream ("count.txt");<br>&nbsp;ObjectOutputStream so= new ObjectOutputStream (fo);<br>&nbsp;so.writeInt(count);<br>&nbsp;so.close();<br>%&gt;</p>
<p>53.直线型输入框<br>&lt;INPUT name=Password size=10 type=password style="border-left-width: 0; border-right-width: 0; </p>
<p>border-top-width: 0; border-bottom-style: solid; border-bottom-width: 1; background-color: #9CEB9C"&gt;</p>
<p>54.可以将背景改为按钮性状，通过改变css改变属性<br>&lt;td width="65" align="center" bgcolor="#E0E0E0" onmouseover=this.className='mouseoverbt'; </p>
<p>onmouseout=this.className='mouseout';&gt;&lt;a href="tm.asp?classid=76"&gt;&lt;font </p>
<p>color="#000000"&gt;录音笔&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br>&lt;style&gt;<br>.mouseoverbt <br>{<br>&nbsp;background-image: url(<a href="http://www.yongle.com.cn/img/btbgw64h20y.gif"><u><font color=#3468a4>http://www.yongle.com.cn/img/btbgw64h20y.gif</font></u></a>);<br>&nbsp;background-repeat: no-repeat;<br>}<br>.mouseout <br>{<br>&nbsp;background-color: #E0E0E0;<br>}<br>&lt;/style&gt;</p>
<p>55.同时按下CTRL和Q键<br>document.onkeydown=function()<br>{<br>if(event.ctrlKey&amp;&amp;event.keyCode==81)<br>{alert(1)}<br>}//</p>
<p>56.以下是一个完整的显示hint的代码，其思想是当鼠标停留是将div中的内容显示在鼠标出，当鼠标移出后在将该div隐</p>
<p>藏掉<br>---------------------------------------------------------------------------------------------------------</p>
<p>------------<br>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br>&lt;HTML&gt;<br>&lt;style&gt;<br>#hint{<br>&nbsp;width:198px;<br>&nbsp;border:1px solid #000000;<br>&nbsp;background:#99ff33;<br>&nbsp;position:absolute;<br>&nbsp;z-index:9;<br>&nbsp;padding:6px;<br>&nbsp;line-height:17px;<br>&nbsp;text-align:left;<br>&nbsp;top: 1520px;<br>}<br>&lt;/style&gt;<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>&lt;!--<br>function showme()<br>{<br>&nbsp;var oSon=window.document.getElementById("hint");<br>&nbsp;if (oSon==null) return;<br>&nbsp;with (oSon) <br>&nbsp;{<br>&nbsp; innerText=guoguo.value;<br>&nbsp; style.display="block";<br>&nbsp; style.pixelLeft=window.event.clientX+window.document.body.scrollLeft+6;<br>&nbsp; style.pixelTop=window.event.clientY+window.document.body.scrollTop+9;<br>&nbsp;}<br>}<br>function hidme()<br>{<br>&nbsp;var oSon=window.document.getElementById("hint");<br>&nbsp;if (oSon==null) return;<br>&nbsp;oSon.style.display="none";<br>}<br>//--&gt;<br>&lt;/SCRIPT&gt;<br>&lt;BODY&gt;<br>&lt;text id=guoguo value=ga&gt;<br>&lt;a href=# onmouseover=showme() onmouseout=hidme() onmousemove=showme() son=hint&gt;dfdfd&lt;/a&gt;<br>&lt;div id=hint style="display:none"&gt;&lt;/div&gt;<br>&lt;/BODY&gt;<br>&lt;/HTML&gt;<br>---------------------------------------------------------------------------------------------------------</p>
<p>------------</p>
<p>57.弹出窗口<br>方法一：&lt;body onload="openwen()"&gt; 浏览器读页面时弹出窗口； <br>方法二：&lt;body onunload="openwen()"&gt; 浏览器离开页面时弹出窗口； <br>方法三：用一个连接调用：&lt;a href="#" onclick="openwin()"&gt;打开一个窗口&lt;/a&gt; <br>注意：使用的"#"是虚连接。 <br>方法四：用一个按钮调用：&lt;input type="button" onclick="openwin()" value="打开窗口"&gt; 何时装载script</p>
<p><br>58.动态改变<a href="http://font.knowsky.com/"><u><font color=#3468a4>字体</font></u></a>的大小<br>function doZoom(size)<br>{<br>&nbsp;&nbsp; document.getElementById('zoom').style.fontSize=size+'px'<br>}</p>
<p>function aa()<br>{<br>&nbsp;&nbsp; var newWin=window.open(url);<br>&nbsp;&nbsp; newWin.document.form1.text1.value=value1;<br>}改变弹出窗口上域的属性<br>opener.document.form2.text2.value=value2;改变父窗口的域的值</p>
<p>59.判断是何种浏览器<br>var name = navigator.appName;<br>if (name == "Microsoft Internet Explorer")<br>&nbsp;alert("IE");<br>else if (name == "Netscape")<br>&nbsp;alert("NS");//</p>
<p>60.vbsscript确定框<br>&lt;script language="VBScript"&gt;<br>&lt;!--<br>MsgBox "确定删除吗？", 4 <br>//--&gt;<br>&lt;/script&gt;//</p>
<p>61.复制内容到剪切板<br>function JM_cc(bb)<br>{<br>&nbsp;&nbsp;&nbsp; var ob=eval("document.form1."+bb);<br>&nbsp;&nbsp;&nbsp; ob.select();<br>&nbsp;&nbsp;&nbsp; js=ob.createTextRange();<br>&nbsp;&nbsp;&nbsp; js.execCommand("Copy");<br>}//</p>
<p>62.java中建立数据库连接取数据<br>public void init()<br>{<br>&nbsp;String url="jdbc:odbc:javadata";<br>&nbsp;try<br>&nbsp;{<br>&nbsp; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<br>&nbsp; Connection con=DriverManager.getConnection(url,"sa","");//mssql database user SA and password<br>&nbsp; DatabaseMetaData dma=con.getMetaData();<br>&nbsp; System.out.println("Connect to"+dma.getURL());<br>&nbsp; System.out.println(";Driver "+dma.getDriverName());<br>&nbsp; System.out.println(";Version "+dma.getDriverVersion());<br>&nbsp; System.out.println("");<br>&nbsp; Statement stmt=con.createStatement();<br>&nbsp; ResultSet rs=stmt.executeQuery("select * from company.dbo.TB_NAME where number=1");//Sql <br>&nbsp; rs.next();<br>&nbsp; String dispresult=rs.getString("name");<br>&nbsp; System.out.println(dispresult);// Instead,you can display it in Paint() or use AWT etc.<br>&nbsp; rs.close();<br>&nbsp; stmt.close();<br>&nbsp; con.close();<br>&nbsp;}<br>&nbsp;catch(SQLException ex)<br>&nbsp;{<br>&nbsp; System.out.println("!!!SQL Exception !!!");<br>&nbsp; while(ex!=null)<br>&nbsp; {<br>&nbsp;&nbsp; System.out.println("SQLState:"+ex.getSQLState());<br>&nbsp;&nbsp; System.out.println("Message:"+ex.getMessage());<br>&nbsp;&nbsp; System.out.println("Vendor:"+ex.getErrorCode());<br>&nbsp;&nbsp; ex=ex.getNextException();<br>&nbsp;&nbsp; System.out.println("");<br>&nbsp; }</p>
<p>&nbsp;}<br>&nbsp;catch(java.lang.Exception ex)<br>&nbsp;{<br>&nbsp; ex.printStackTrace();<br>&nbsp;}<br>}//</p>
<p><br>63.最小化窗口<br>window.blur()//</p>
<p><br>64.文档的路径<br>document.URL//</p>
<p>65.定时执行某段程序<br>setTimeout("change_color()",600);</p>
<p>66.设置为主页<br>function makeHome(){<br>&nbsp; netscape.security.PrivilegeManager.enablePrivilege("UniversalPreferencesWrite");<br>&nbsp; navigator.preference("browser.startup.homepage", location.href);<br>}//</p>
<p>67.设置为收藏<br>function addFav(){<br>&nbsp; if(ie)<br>&nbsp;&nbsp;&nbsp; window.external.AddFavorite(location.href,'WWW.OGRISH.COM : GROTESQUE MOVIES AND PICTURES');<br>&nbsp; if(ns)<br>&nbsp;&nbsp;&nbsp; alert("Thanks for the bookmark!\n\nNetscape users click OK then press CTRL-D");<br>}//</p>
<p>68.判断cookie是否可用<br>navigator.cookieEnabled;//</p>
<p>69.显示有模式的有页面的弹出窗口<br>function setbgcolor_onclick()<br>{<br>&nbsp;var color = showModalDialog("/mailpage/compose/colorsel.html",0,"help=0");<br>&nbsp;if (color != null)<br>&nbsp;{<br>&nbsp; document.compose.bgcolor.value = color;<br>&nbsp;}<br>}//</p>
<p><br>70.截取小数点后两位<br>var a=3454545.4454545;<br>alert(a.toFixed(2));//</p>
<p><br>71.禁止选择页面上的文字来拷贝<br>&lt;script&gt;<br>function noEffect() {<br>&nbsp; with (event) {<br>&nbsp;&nbsp;&nbsp; returnValue = false;<br>&nbsp;&nbsp;&nbsp; cancelBubble = true;<br>&nbsp; }<br>&nbsp; return;<br>}<br>&lt;/script&gt;<br>&lt;body onselectstart="noEffect()" oncontextmenu="noEffect()"&gt;//</p>
<p>72.屏蔽右键菜单<br>oncontextmenu="event.returnValue = false"//</p>
<p>73.事件禁止起泡<br>event.cancelBubble = true//</p>
<p>74.禁止在输入框打开输入法<br>&lt;input style="ime-mode: disabled"&gt;//</p>
<p>75.屏蔽汉字和空格<br>&lt;input name="txt"&gt;&lt;input type="submit" onClick="alert(!/[^ -}]|\s/.test(txt.value))"&gt;//</p>
<p>76.用javascript判断文件是否存在<br>function Exists(filespec)<br>{<br>&nbsp;if (filespec)<br>&nbsp;{<br>&nbsp; var fso;<br>&nbsp; fso = new ActiveXObject("Scripting.FileSystemObject");<br>&nbsp; alert(fso.FileExists(filespec));<br>&nbsp;}<br>}<br>选择图片 &lt;input type=file name=f1&gt;&lt;p&gt;<br>&lt;input type="submit" onClick="Exists(f1.value)"&gt;//</p>
<p>77.获得当前的文本框选中的文字<br>&lt;input onmouseup="alert(document.selection.createRange().text)" value=123&gt;//</p>
<p>78.跳转至目标页面，同时不可返回<br>&lt;a href="javascript:location.replace('http://www.sohu.com/')"&gt;sohu.com&lt;/a&gt;//</p>
<p>&nbsp;<br>79.获得当前的行是表格的第几行<br>&lt;script&gt;<br>function getrow(obj)<br>{<br>&nbsp;&nbsp; if(event.srcElement.tagName=="TD"){<br>&nbsp;&nbsp; curRow=event.srcElement.parentElement;<br>&nbsp;&nbsp; alert("这是第"+(curRow.rowIndex+1)+"行");</p>
<p>&nbsp;&nbsp; }<br>}<br>&lt;/script&gt;</p>
<p>&lt;table border="1" width="100%" onclick=getrow(this)&gt;<br>&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp;&nbsp;&nbsp; &lt;td width="20%"&gt;　&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&lt;/table&gt;//</p>
<p>80.删除表格某行，xx表示某行，下标从0开始计算<br>document.all.myTable.deleteRow(xx)//</p>
<p>81.动态的向表格中添加行<br>&lt;table id="t1" border="1"&gt;<br>&lt;/table&gt;<br>&lt;script language="JavaScript"&gt;<br>function add()<br>{<br>&nbsp;&nbsp; t1.insertRow().insertCell().innerHTML = '&lt;input name="test'+t1.rows.length+'"&gt;';<br>}//</p>
<p>&nbsp;</p>
<p>82.event.x,event.clientX,event.offsetX区别：<br>x:设置或者是得到鼠标相对于目标事件的父元素的外边界在x坐标上的位置。 clientX:相对于客户区域的x坐标位置，不</p>
<p>包括滚动条，就是正文区域。 offsetx：设置或者是得到鼠标相对于目标事件的父元素的内边界在x坐标上的位置。 <br>screenX:相对于用户屏幕。 </p>
<p>&nbsp;<br>83.显示是鼠标按钮的哪个<br>&lt;body onMouseDown="alert(event.button)"&gt;点Mouse看看//</p>
<p>84.打开C盘<br>&lt;form action="<a href='file:///c|/"><input'><u><font color=#3468a4>file:///c|/"&gt;&lt;input</font></u></a> type="submit" value="c:\ drive"&gt;&lt;/form&gt;//<br>&nbsp;<br>85.当前屏幕的分辨率<br>screen.width、screen.height//</p>
<p>86.设置表格中的内容<br>tbl.rows[0].cells[1].innerText=document.form.text1.value;//</p>
<p>&nbsp;<br>87.本地快捷键<br>&lt;p&gt;&lt;a href="<a href="file:///::{208D2C60-3AEA-1069-A2D7-08002B30309D"><u><font color=#3468a4>file:///::{208D2C60-3AEA-1069-A2D7-08002B30309D</font></u></a>}" target="_blank"&gt;网上邻居&lt;/a&gt;&lt;/p&gt;<br>&lt;p&gt;&lt;a href="<a href="file:///::{20D04FE0-3AEA-1069-A2D8-08002B30309D}/d:/web"><u><font color=#3468a4>file:///::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\d:\web</font></u></a>" target="_blank"&gt;我的电脑&lt;/a&gt;&lt;/p&gt;<br>&lt;p&gt;&lt;a href="<a href="file:///::{450D8FBA-AD25-11D0-98A8-0800361B1103"><u><font color=#3468a4>file:///::{450D8FBA-AD25-11D0-98A8-0800361B1103</font></u></a>}" target="_blank"&gt;我的文档&lt;/a&gt;&lt;/p&gt;<br>&lt;p&gt;&lt;a href="<a href="file:///::{645FF040-5081-101B-9F08-00AA002F954E"><u><font color=#3468a4>file:///::{645FF040-5081-101B-9F08-00AA002F954E</font></u></a>}" target="_blank"&gt;回收站&lt;/a&gt;&lt;/p&gt;<br>&lt;p&gt;&lt;a href="<a href="file:///::{20D04FE0-3AEA-1069-A2D8-08002B30309D}/::{21EC2020-3AEA-1069-A2DD-08002B30309D"><u><font color=#3468a4>file:///::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D</font></u></a>}" </p>
<p>target="_blank"&gt;控制面板&lt;/a&gt;&lt;/p&gt;<br>&lt;p&gt;&lt;a href="<a href="file:///::{7007ACC7-3202-11D1-AAD2-00805FC1270E"><u><font color=#3468a4>file:///::{7007ACC7-3202-11D1-AAD2-00805FC1270E</font></u></a>}"&gt;拨号网络&lt;/a&gt;(<a href="http://www.knowsky.com/article.asp?typeid=59"><u><font color=#3468a4>Windows 2000</font></u></a>)&lt;/p&gt;</p>
<p>&nbsp; <br>88.IE菜单<br>&lt;button onclick="min.Click()"&gt;&lt;font face="webdings"&gt;0&lt;/font&gt;&lt;/button&gt;//改变按钮上的图片<br>&lt;input type=button&nbsp; onclick="document.execCommand('CreateLink','true','true')"&gt; //创建新连接<br>&lt;input type=button&nbsp; onclick="document.execCommand('print','true','true')"&gt; //打印<br>&lt;input type=button&nbsp; onclick="document.execCommand('saveas','true','网站制作.htm')"&gt;//另存为htm<br>&lt;input type=button&nbsp; onclick="document.execCommand('saveas','true','网站制作.txt')"&gt;//另存为txt<br>document.execCommand("SaveAs")//保存为<br>document.execCommand('undo')//撤销上一次操作</p>
<p>89.web对话框<br>&lt;SCRIPT&gt;<br>var contents='&lt;style&gt;body,td{font:menu}img{cursor:hand}&lt;/style&gt;';<br>contents+='&lt;title&gt;你要关闭我吗&lt;/title&gt;';<br>contents+='&lt;body bgcolor=menu&gt;';<br>contents+='&lt;table width=100% height=100% border=0&gt;';<br>contents+='&lt;tr&gt;&lt;td align=center&gt;';<br>contents+='你要关闭我吗？&lt;br&gt;';<br>contents+='&lt;img src=dark.gif onclick=self.close() alt="...关闭"&gt;';<br>contents+='&lt;img src=jet.gif onclick=self.close() alt="全是关闭"&gt;';<br>contents+='&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;';<br>showModalDialog("about:"+contents+"","","dialogHeight:50px;dialogWidth:250px;help:no;status:no")<br>document.write(contents);<br>&lt;/SCRIPT&gt;//</p>
<p>90.取第x,y的值<br>&lt;button onclick="t1.rows[x].cells[y].innerText='guoguo'"&gt;&lt;/button&gt;//</p>
<p>91.向新打开的网页上写内容<br>newwin=window.open('about:blank','','top=10');<br>newwin.document.write('');//</p>
<p>93.返回<br>javascript:history.go(-2);//</p>
<p>94.将页面上选中的内容复制到剪贴板<br>abcdefg<br>&lt;input type='button' </p>
<p>onclick="window.clipboardData.setData('text',document.selection.createRange().text);" value='复制页面选中</p>
<p>的字符'&gt;//<br>95.将页面上选中的内容复制到剪贴板<br>&lt;INPUT TYPE="text" NAME=""&gt;kjhkjhkhkj&lt;INPUT TYPE="button" onclick="document.execCommand('Copy', 'false', </p>
<p>null);"&gt;////</p>
<p>96.鼠标移到下拉框时自动全部打开<br>&lt;select onmouseover="javascript:this.size=this.length" onmouseout="javascript:this.size=1"&gt;&lt;/select&gt;//</p>
<p>97.获得本机的文件<br>var fso = new ActiveXObject("Scripting.FileSystemObject"); <br>var f1 = fso.GetFile("C:\\bsitcdata\\ejbhome.xml"); <br>alert("File last modified: " + f1.DateLastModified); //</p>
<p>98.判断客户端是否是IE浏览器<br>因为 document.all 是 IE 的特有属性，所以通常用这个方法来判断客户端是否是IE浏览器 ,document.all?1:0;</p>
<p>99.创建新的下拉框选项<br>new Option(text,value)这样的函数//</p>
<p>100.在页面上画柱状图<br>&lt;STYLE&gt;<br>td{font-size:12px}<br>body{font-size:12px}<br>v\:*{behavior:url(#default#VML);} //这里声明了v作为VML公用变量<br>&lt;/STYLE&gt;<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>mathstr=12;<br>document.write ("&lt;v:rect fillcolor='red' </p>
<p>style='width:20;color:navy;height:"+5000/(1000/mathstr)+"'&gt;&lt;br&gt;&amp;nbsp;%"+mathstr+"&lt;br&gt;4人&lt;v:Extrusion </p>
<p>backdepth='15pt' on='true'/&gt;&lt;/v:rect&gt;")<br>&lt;/SCRIPT&gt;<br>&lt;v:rect fillcolor='red' style='width:20;color:navy;height:200'&gt;&lt;br&gt;%12&lt;br&gt;4人&lt;v:Extrusion </p>
<p>backdepth='15pt' on='true'/&gt;&lt;/v:rect&gt;<br>&lt;v:rect fillcolor='yellow' style='width:20;color:navy;height:100'&gt;&lt;br&gt;%12&lt;br&gt;4人&lt;v:Extrusion </p>
<p>backdepth='15pt' on='true'/&gt;&lt;/v:rect&gt;//</p>
<p>&nbsp;</p>
<p>101.饼图<br>&lt;style&gt;<br>v\:*&nbsp;&nbsp;&nbsp;&nbsp; { behavior: url(#default#VML) }<br>o\:*&nbsp;&nbsp;&nbsp;&nbsp; { behavior: url(#default#VML) }<br>.shape&nbsp;&nbsp;&nbsp; { behavior: url(#default#VML) }<br>&lt;/style&gt;<br>&lt;script language="javascript"&gt;<br>function show(pie)<br>{<br>pie.strokecolor=pie.fillcolor;<br>pie.strokeweight=10;<br>div1.innerHTML="&lt;font size=2 color=red&gt; " + pie.id +"&lt;/font&gt; &lt;font size=2&gt;" + pie.title + "&lt;/font&gt;";<br>}<br>function hide(pie)<br>{<br>pie.strokecolor="white";<br>pie.strokeweight=1;<br>div1.innerHTML="";<br>}<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;v:group style='width: 5cm; height: 5cm' coordorigin='0,0' coordsize='250,250'&gt;<br>&lt;v:shape id='asp技术' style='width:10;height:10;top:10;left:0' title='得票数:6 比例:40.00%' </p>
<p>onmouseover='javascript:show(this);' onmouseout='javascript:hide(this);' href='http://www.cnADO.com' </p>
<p>CoordSize='10,10' strokecolor='white' fillcolor='#ffff33'&gt;&lt;v:path v='m 300,200 ae </p>
<p>300,200,200,150,0,9437184 xe'/&gt;&lt;/v:shape&gt;<br>&lt;v:shape id='php' style='width:10;height:10;top:10;left:0' title='得票数:1 比例:6.67%' </p>
<p>onmouseover='javascript:show(this);' onmouseout='javascript:hide(this);' href='http://www.cnADO.com' </p>
<p>CoordSize='10,10' strokecolor='white' fillcolor='#ff9933'&gt;&lt;v:path v='m 300,200 ae </p>
<p>300,200,200,150,9437184,1572864 xe'/&gt;&lt;/v:shape&gt;<br>&lt;v:shape id='jsp' style='width:10;height:10;top:10;left:0' title='得票数:2 比例:13.33%' </p>
<p>onmouseover='javascript:show(this);' onmouseout='javascript:hide(this);' href='http://www.cnADO.com' </p>
<p>CoordSize='10,10' strokecolor='white' fillcolor='#3399ff'&gt;&lt;v:path v='m 300,200 ae </p>
<p>300,200,200,150,11010048,3145728 xe'/&gt;&lt;/v:shape&gt;<br>&lt;v:shape id='c#写的.netWEB程序' style='width:10;height:10;top:10;left:0' title='得票数:3 比例:20.00%' </p>
<p>onmouseover='javascript:show(this);' onmouseout='javascript:hide(this);' href='http://www.cnADO.com' </p>
<p>CoordSize='10,10' strokecolor='white' fillcolor='#99ff33'&gt;&lt;v:path v='m 300,200 ae </p>
<p>300,200,200,150,14155776,4718592 xe'/&gt;&lt;/v:shape&gt;<br>&lt;v:shape id='vb.net写的.netWEB程序' style='width:10;height:10;top:10;left:0' title='得票数:2 比例:13.33%' </p>
<p>onmouseover='javascript:show(this);' onmouseout='javascript:hide(this);' href='http://www.cnADO.com' </p>
<p>CoordSize='10,10' strokecolor='white' fillcolor='#ff6600'&gt;&lt;v:path v='m 300,200 ae </p>
<p>300,200,200,150,18874368,3145728 xe'/&gt;&lt;/v:shape&gt;<br>&lt;v:shape id='xml技术' style='width:10;height:10;top:10;left:0' title='得票数:1 比例:6.67%' </p>
<p>onmouseover='javascript:show(this);' onmouseout='javascript:hide(this);' href='http://www.cnADO.com' </p>
<p>CoordSize='10,10' strokecolor='white' fillcolor='#ff99ff'&gt;&lt;v:path v='m 300,200 ae </p>
<p>300,200,200,150,22020096,1572864 xe'/&gt;&lt;/v:shape&gt;<br>&lt;/v:group&gt;</p>
<p>&lt;v:group style='width: 6cm; height: 6cm' coordorigin='0,0' coordsize='250,250'&gt;<br>&lt;v:rect style='height:10;width:15;top:0;left:10' fillcolor='#ffff33'/&gt;<br>&lt;v:rect style='height:28;width:100;top:0;left:30' stroked='false'&gt;&lt;v:textbox </p>
<p>style='fontsize:2'&gt;asp技术&lt;/v:textbox/&gt;&lt;/v:rect&gt;<br>&lt;v:rect style='height:10;width:15;top:30;left:10' fillcolor='#ff9933'/&gt;<br>&lt;v:rect style='height:28;width:100;top:30;left:30' stroked='false'&gt;&lt;v:textbox </p>
<p>style='fontsize:2'&gt;php&lt;/v:textbox/&gt;&lt;/v:rect&gt;<br>&lt;v:rect style='height:10;width:15;top:60;left:10' fillcolor='#3399ff'/&gt;<br>&lt;v:rect style='height:28;width:100;top:60;left:30' stroked='false'&gt;&lt;v:textbox </p>
<p>style='fontsize:2'&gt;jsp&lt;/v:textbox/&gt;&lt;/v:rect&gt;<br>&lt;v:rect style='height:10;width:15;top:90;left:10' fillcolor='#99ff33'/&gt;<br>&lt;v:rect style='height:28;width:100;top:90;left:30' stroked='false'&gt;&lt;v:textbox </p>
<p>style='fontsize:2'&gt;c#写的.netWEB程序&lt;/v:textbox/&gt;&lt;/v:rect&gt;<br>&lt;v:rect style='height:10;width:15;top:120;left:10' fillcolor='#ff6600'/&gt;<br>&lt;v:rect style='height:28;width:100;top:120;left:30' stroked='false'&gt;&lt;v:textbox style='fontsize:2'&gt;vb.net</p>
<p>写的.netWEB程序&lt;/v:textbox/&gt;&lt;/v:rect&gt;<br>&lt;v:rect style='height:10;width:15;top:150;left:10' fillcolor='#ff99ff'/&gt;<br>&lt;v:rect style='height:28;width:100;top:150;left:30' stroked='false'&gt;&lt;v:textbox style='fontsize:2'&gt;xml技术</p>
<p>&lt;/v:textbox/&gt;&lt;/v:rect&gt;<br>&lt;/v:group&gt;</p>
<p>&lt;div style="position: absolute; left: 10; top: 10; width: 760; height:16"&gt;<br>&nbsp;&lt;table border="1" cellpadding="2" cellspacing="2" cellpadding="0" cellspacing="0" </p>
<p>style="border-collapse: collapse" bordercolor="#CCCCCC" width="100%" ID="Table1"&gt;<br>&nbsp; &lt;tr&gt;<br>&nbsp;&nbsp; &lt;td width="100%" id=div1&gt;　&lt;/td&gt;<br>&nbsp; &lt;/tr&gt;<br>&nbsp;&lt;/table&gt;<br>&lt;/div&gt;//</p>
<p>102.是一个特殊的容器，想装个网页都行<br>&lt;button&gt;&lt;iframe src="<a href='http://www.google.com/"></iframe></button>//button'><u><font color=#3468a4>http://www.google.com/"&gt;&lt;/iframe&gt;&lt;/button&gt;//button</font></u></a> </p>
<p>103.外部的html代码<br>event.srcElement.outerHTML//</p>
<p>104.标识当前的IE事件的触发器<br>event.srcElement和event.keyCode//</p>
<p>105.事件类型<br>event.type//</p>
<p>106.动态改变类型<br>&lt;style&gt;<br>.Overnone { border-width:0;background-color:darkblue;cursor:default;color:gold;width:115}<br>.Outnone&nbsp;&nbsp; {border-width:0;background-color:white;cursor:default;width:115}<br>&lt;/style&gt;<br>&lt;input class=Outnone onmouseover=this.className='Overnone' &gt;//</p>
<p>107.页面翻转<br>&lt;html dir=rtl&gt;&lt;/html&gt;//</p>
<p>108.滚屏<br>parent.scroll(x,y);//<br>&lt;body onload="s=0" onDblClick="s=setInterval('scrollBy(0, 1)',10)" onClick="clearInterval(s)"&gt;//</p>
<p>109.改变状态栏<br>self.status ="";//</p>
<p>110.改变窗口大小<br>window.resizeTo(200,300);//</p>
<p>111.改变鼠标样式<br>style<br>BODY{CURSOR: url('mouse.ani');<br>SCROLLBAR-BASE-COLOR: #506AA8; <br>SCROLLBAR-ARROW-COLOR: #14213F;<br>}//</p>
<p>112.背景透明<br>&lt;input type="button" value="Button" style="background-color: transparent; border: 0;"&gt;//</p>
<p>113.鼠标为等待形状<br>&lt;input type=button onclick="this.style.cursor='wait'"&gt;//</p>
<p>114.调用父窗口的函数<br>opener.fucntion1();//</p>
<p>115.body的内部html代码<br>&lt;input type="button" onclick="alert(code.document.body.innerHTML)" value="查看"&gt;//</p>
<p>116.框架中调用父窗口的函数<br>&lt;INPUT TYPE='button' onclick='parent.test();' value='调用parent窗口的函数'&gt;//</p>
<p>117.交换节点<br>&lt;table&nbsp; width=200&nbsp; height=200&nbsp; border&gt;<br>&lt;tr&gt;&lt;td&nbsp; id=c1&gt;CELL_1&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;td&nbsp; id=c2&gt;CELL_2&lt;/td&gt;&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;br&gt;<br>&lt;input&nbsp; type="button"&nbsp; value="swap&nbsp; row"&nbsp; onclick="c1.swapNode(c2)"&gt;//</p>
<p>118.删除节点<br>&lt;table&nbsp; width=200&nbsp; height=200&nbsp; border&gt;<br>&lt;tr id=trall&gt;&lt;td&nbsp; id=c1&gt;CELL_1&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;td&nbsp; id=c2&gt;CELL_2&lt;/td&gt;&lt;/tr&gt;<br>&lt;/table&gt;<br>&lt;br&gt;<br>&lt;input&nbsp; type="button"&nbsp; value="swap&nbsp; row"&nbsp; onclick="trall.removeNode(c2)"&gt;//</p>
<p>119.添加节点<br>addNode()//</p>
<p>120.获得事件的父与子标签<br>event.srcElement.children[0]和event.srcElement.parentElement //</p>
<img src ="http://www.blogjava.net/matthew2006/aggbug/131705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2007-07-22 10:34 <a href="http://www.blogjava.net/matthew2006/archive/2007/07/22/131705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载：js技巧收集(200多个) 1</title><link>http://www.blogjava.net/matthew2006/archive/2007/07/22/131704.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Sun, 22 Jul 2007 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2007/07/22/131704.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/131704.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2007/07/22/131704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/131704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/131704.html</trackback:ping><description><![CDATA[<p>1.文本框焦点问题<br>onBlur:当失去输入焦点后产生该事件<br>onFocus:当输入获得焦点后，产生该文件<br>Onchange:当文字值改变时，产生该事件<br>Onselect:当文字加亮后，产生该文件</p>
<p>&lt;input type="text" value="郭强" onfocus="if(value=='郭强') {value=''}" onblur="if <br>(value=='') {value='郭强'}"&gt;点击时文字消失，失去焦点时文字再出现</p>
<p><br>2.网页按钮的特殊颜色<br>&lt;input type=button name="Submit1" value="郭强" size=10 class=s02 </p>
<p>style="background-color:rgb(235,207,22)"&gt;</p>
<p>3.鼠标移入移出时颜色变化<br>&lt;input type="submit" value="找吧" name="B1" onMouseOut=this.style.color="blue" </p>
<p>onMouseOver=this.style.color="red"&nbsp; class="button"&gt;</p>
<p>4.平面按钮<br>&lt;input type=submit value=订阅 style="border:1px solid :#666666; height:17px; width:25pt; font-size:9pt; </p>
<p>BACKGROUND-COLOR: #E8E8FF; color:#666666" name="submit"&gt;</p>
<p>5.按钮颜色变化<br>&lt;input type=text name="nick"&nbsp; style="border:1px solid #666666;&nbsp; font-size:9pt;&nbsp; height:17px; </p>
<p>BACKGROUND-COLOR: #F4F4FF; color:#ff6600" size="15" maxlength="16"&gt;</p>
<p>6.平面输入框<br>&lt;input type="text" name="T1" size="20" style="border-style: solid; border-width: 1"&gt;</p>
<p>7.使窗口变成指定的大小<br>&lt;script&gt;<br>window.resizeTo(300,283);<br>&lt;/script&gt;</p>
<p>8.使文字上下滚动<br>&lt;marquee direction=up scrollamount=1 scrolldelay=100 onmouseover='this.stop()' onmouseout='this.start()' </p>
<p>height=60&gt;<br>&lt;!-- head_scrolltext --&gt;<br>&lt;tr&gt;<br>&lt;td&gt;<br>共和国<br>&lt;/table&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- end head_scrolltext --&gt;<br>&lt;/marquee&gt;</p>
<p>9.状态栏显示该页状态<br>&lt;base onmouseover="window.status='网站建设 <a href="http://www.webmake.cn/'"><u><font color=#0000ff>http://www.webmake.cn/'</font></u></a> ;return true"&gt;</p>
<p>10.可以点击文字实现radio选项的选定<br>&lt;br&gt;<br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;input type="radio" name="regtype" value="A03" id="A03"&gt;<br>&lt;label for="A03"&gt; 情侣 : 一次注册两个帐户&lt;/label&gt; &lt;br&gt;</p>
<p>11.可以在文字域的font写onclick事件</p>
<p>12.打印&lt;/a&gt;打印网页<br>&lt;a href='<a href="http://www.knowsky.com/article.asp?typeid=36"><u><font color=#0000ff>javascript</font></u></a>:window.print ()'&gt;</p>
<p>13.线型输入框<br>&lt;input type="text" name="key"&nbsp; size="12" value="关键字" onFocus=this.select() onMouseOver=this.focus() </p>
<p>class="line"&gt;</p>
<p>14.显示文档最后修改日期<br>&lt;script language=javascript&gt;<br>function hi(str)<br>{<br>&nbsp;document.write(document.lastModified)</p>
<p>&nbsp;alert("hi"+str+"!")<br>}<br>&lt;/script&gt;</p>
<p>15.可以在鼠标移到文字上时就触发事件<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;script language="LiveScript"&gt;<br>&lt;!-- Hiding<br>&nbsp;&nbsp;&nbsp;&nbsp; function hello() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("哈罗!");<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;a href="" onMouseOver="hello()"&gt;link&lt;/a&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;</p>
<p>16.可以根据网页上的选项来确定页面颜色<br>&lt;HTML&gt;<br>&lt;HEAD&gt;<br>&nbsp;&lt;TITLE&gt;background.html&lt;/TITLE&gt;<br>&lt;/HEAD&gt;<br>&lt;SCRIPT&gt;<br>&lt;!--</p>
<p>function bgChange(selObj) {<br>&nbsp;newColor = selObj.options[selObj.selectedIndex].text;<br>&nbsp;document.bgColor = newColor;<br>&nbsp;selObj.selectedIndex = -1;<br>&nbsp;}</p>
<p>//--&gt;<br>&lt;/SCRIPT&gt;<br>&lt;BODY STYLE="font-family:Arial"&gt;<br>&lt;B&gt;Changing Background Colors&lt;/B&gt;<br>&lt;BR&gt;<br>&nbsp;&lt;FORM&gt;<br>&nbsp; &lt;SELECT SIZE="8" onChange="bgChange(this);"&gt;<br>&nbsp; &lt;OPTION&gt;Red<br>&nbsp; &lt;OPTION&gt;Orange<br>&nbsp; &lt;OPTION&gt;Yellow<br>&nbsp; &lt;OPTION&gt;Green<br>&nbsp; &lt;OPTION&gt;Blue<br>&nbsp; &lt;OPTION&gt;Indigo<br>&nbsp; &lt;OPTION&gt;Violet<br>&nbsp; &lt;OPTION&gt;White<br>&nbsp;&lt;OPTION&gt;pink<br>&nbsp; &lt;/SELECT&gt;<br>&nbsp;&lt;/FORM&gt;<br>&lt;/BODY&gt;<br>&lt;/HTML&gt;</p>
<p>17.将按钮的特征改变<br>&lt;style type="text/<a href="http://www.knowsky.com/article.asp?typeid=38"><u><font color=#0000ff>CSS</font></u></a>"&gt;<br>&lt;!--<br>.style1 { font-size: 12px; background: #CCCCFF; border-width: thin thin thin thin; border-color: #CCCCFF </p>
<p>#CCCCCC #CCCCCC #CCCCFF}<br>.style2 { font-size: 12px; font-weight: bold; background: #CCFFCC; border-width: thin medium medium thin; </p>
<p>border-color: #CCFF99 #999999 #999999 #CCFF99}<br>--&gt;<br>&lt;/style&gt; <br>　　本例按钮的代码如下：<br>&lt;input type="submit" name="Submit" value="提 交" onmouseover="this.className='style2'" </p>
<p>onmouseout="this.className='style1'" class="style1"&gt; </p>
<p>18.改变按钮的图片.<br>&lt;style type="text/css"&gt;<br>&lt;!--<br>.style3 { font-size: 12px; background: url(image/buttonbg1.gif); border: 0px; width: 60px; height: 22px}<br>.style4 { font-size: 12px; font-weight: bold; background: url(image/buttonbg2.gif); border: 0px 0; width: </p>
<p>60px; height: 22px}<br>--&gt;<br>&lt;/style&gt; <br>　　本例的按钮代码如下： <br>&lt;input type="submit" name="Submit2" value="提 交" onmouseover="this.className='style4'" </p>
<p>onmouseout="this.className='style3'" class="style3"&gt;</p>
<p>19.打印页面<br>&lt;div align="center"&gt;&lt;a class=content href="javascript:doPrint();"&gt;打印本稿&lt;/a&gt;&lt;/div&gt;</p>
<p>20.可以直接写html语言<br>document.write("");</p>
<p>21.改变下拉框的颜色<br>&lt;select name="classid" </p>
<p>onChange="changelocation(document.myform.classid.options[document.myform.classid.selectedIndex].value)" </p>
<p>size="1" style="color:#008080;font-size: 9pt"&gt; </p>
<p>22.转至目标URL<br>window.location="<a href="http://guoguo/"><u><font color=#0000ff>http://guoguo</font></u></a>"</p>
<p>23.传递该object的form<br>UpdateSN('guoqiang99267',this.form) <br>function UpdateSN(strValue,strForm)<br>{<br>&nbsp; strForm.SignInName.value = strValue;<br>&nbsp; return false;<br>}</p>
<p>24.文字标签<br>&lt;label for="AltName4"&gt;&lt;input name="AltName" type="RADIO" tabindex="931"&nbsp; id="AltName4" </p>
<p>&gt;guoqiang99859&lt;/label&gt;</p>
<p>25.layer2为组件的ID，可以控制组件是否可见<br>document.all.item('Layer2').style.display = "block";<br>document.all.item('Layer2').style.display = "none";//</p>
<p>26.将页面加入favorite中<br>&lt;script language=javascript&gt; <br>&lt;!-- <br>function Addme(){ <br>url = "<a href="http://your.site.address/"><u><font color=#0000ff>http://your.site.address</font></u></a>"; //你自己的主页地址 <br>title = "Your Site Name"; //你自己的主页名称 <br>window.external.AddFavorite(url,title); <br>--&gt; <br>&lt;/script&gt;// </p>
<p>27.过10秒自动关闭页面<br>&lt; script language="JavaScript" &gt;<br>function closeit() {<br>setTimeout("self.close()"，10000)<br>}<br>&lt; /script &gt;</p>
<p>28.可以比较字符的大小<br>char=post.charAt(i);<br>if(!('0'&lt;=char&amp;&amp;char&lt;='9'))</p>
<p>29.将字符转化为数字<br>month = parseInt(char)</p>
<p>30.点击value非空的选项时转向指定连接<br>&nbsp;&lt;select onchange='if(this.value!="")window.open(this.value)' class="textinput"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;option selected&gt;主办单位&lt;/option&gt;<br>&nbsp;&nbsp;&nbsp; &lt;option&gt;-----------------&lt;/option&gt;<br>&nbsp;&nbsp;&nbsp; &lt;option value="<a href="http://www.bjd.com.cn/"><u><font color=#0000ff>http://www.bjd.com.cn/</font></u></a>"&gt;北京日报&lt;/option&gt;<br>&nbsp;&nbsp;&nbsp; &lt;option value="<a href="http://www.ben.com.cn/"><u><font color=#0000ff>http://www.ben.com.cn/</font></u></a>"&gt;北京晚报&lt;/option&gt;<br>&lt;/select&gt;</p>
<p>31.改变背景颜色<br>&lt;td width=* class=dp bgColor=#FAFBFC onmouseover="this.bgColor='#FFFFFF';" </p>
<p>onmouseout="this.bgColor='#FAFBFC';"&gt;</p>
<p>32.改变文字输入框的背景颜色<br>&lt;style&gt;<br>.input2 {background-image: url('../images/inputbg.gif');&nbsp;&nbsp; font-size: 12px; background-color: </p>
<p>#D0DABB;border-top-width:1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px}<br>&lt;/style&gt;<br>&lt;input name=content type=text size="47" class="input2" maxlength="50"&gt;</p>
<p>33.改变水平线的特征<br>&lt;hr size="0" noshade color="#C0C0C0"&gt;</p>
<p>34.传递参数的方式<br>&lt;a href="vote.asp?CurPage=8&amp;id=3488"&gt;8&lt;/a&gt;</p>
<p>35.页内跳转<br>&lt;a href="#1"&gt;1&lt;/a&gt;<br>&lt;a href="#2"&gt;2&lt;/a&gt;<br>&lt;a href="#3"&gt;3&lt;/a&gt;<br>&lt;a href="#4"&gt;4&lt;/a&gt;<br>&lt;a href="#5"&gt;5&lt;/a&gt;<br>&lt;a href="#6"&gt;6&lt;/a&gt;<br>&lt;a href="#7"&gt;7&lt;/a&gt;<br>&lt;a name="1"&gt;dfdf&lt;/a&gt;<br>&lt;a name="2"&gt;dfdf&lt;/a&gt;//</p>
<p>36.两个按键一起按下<br>if(event.ctrlKey &amp;&amp; window.event.keyCode==13)//</p>
<p>37.刷新页面<br>javascript:this.location.reload()//</p>
<p>38.将网页的按钮使能<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>function haha()<br>{<br>&nbsp;for(var i=0;i&lt;document.form1.elements.length;i++)<br>&nbsp;{<br>&nbsp; if(document.form1.elements[i].name.indexOf("bb")!=-1)<br>&nbsp;&nbsp; document.form1.elements[i].disabled=!document.form1.elements[i].disabled;<br>&nbsp;}<br>}<br>&lt;/SCRIPT&gt;<br>&lt;BODY&gt;&lt;form name=form1&gt;<br>&lt;INPUT TYPE="button" NAME="aa "&nbsp; value=cindy onclick=haha()&gt;<br>&lt;INPUT TYPE="button" NAME="bb " value=guoguo&gt;<br>&lt;INPUT TYPE="button" NAME="bb " value=guoguo&gt;</p>
<p>39.文字移动<br>&lt;marquee scrollamount=3 onmouseover=this.stop(); onmouseout=this.start();&gt;</p>
<p>40.双击网页自动跑<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>var currentpos,timer; <br>function initialize() <br>{ <br>&nbsp;timer=setInterval("scrollwindow()",1);<br>} <br>function sc()<br>{<br>&nbsp;clearInterval(timer);<br>}<br>function scrollwindow() <br>{<br>&nbsp;currentpos=document.body.scrollTop;<br>&nbsp;window.scroll(0,++currentpos);<br>&nbsp;if (currentpos != document.body.scrollTop) <br>&nbsp; sc();<br>} <br>document.onmousedown=sc<br>document.ondblclick=initialize<br>&lt;/SCRIPT&gt;//</p>
<p>41.后退<br>&lt;INPUT TYPE="button" onclick=window.history.back() value=back&gt;</p>
<p>42.前进<br>&lt;INPUT TYPE="button" onclick=window.history.forward() value=forward&gt;</p>
<p>43.刷新<br>&lt;INPUT TYPE="button" onclick=document.location.reload() value=reload&gt;</p>
<p>44.转向指定网页<br>document.location="<a href="http://ww/"><u><font color=#0000ff>http://ww</font></u></a>"或者document.location.assign("<a href="http://guoguo.com/"><u><font color=#0000ff>http://guoguo.com</font></u></a>")</p>
<p>45.在网页上显示实时时间<br>&lt;SCRIPT LANGUAGE="JavaScript"&gt;<br>var clock_id;<br>window.onload=function()<br>{<br>&nbsp;clock_id=setInterval("document.form1.txtclock.value=(new Date);",1000)<br>}<br>&lt;/SCRIPT&gt;//</p>
<p>46.可以下载文件 <br>document.location.href="目标文件"//</p>
<p>47.连接<a href="http://www.knowsky.com/sql.asp"><u><font color=#0000ff>数据库</font></u></a><br>import java.sql.*;<br>String myDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";<br>Class.forName(myDBDriver);<br>Connection conn=DriverManager.getConnection("jdbc:odbc:firm","username","password");<br>Statement stmt=conn.createStatement();<br>ResultSet rs=stmt.executeQuery(sql);<br>rs.getString("column1");//</p>
<p>48.可以直接在页面&#8220;div&#8221;内写下所需内容<br>&lt;INPUT TYPE="button" onclick="a1.innerHTML='&lt;font color=red&gt;*&lt;/font&gt;'"&gt;<br>&lt;div id=a1&gt;&lt;/div&gt;//</p>
<p>49.可以改变页面上的连接的格式，使其为双线<br>&lt;style&gt;<br>A:link {text-decoration: none; color:#0000FF; font-family: 宋体}<br>A:visited {text-decoration: none; color: #0000FF; font-family: 宋体}<br>A:hover {text-decoration: underline overline; color: FF0000}<br>&lt;/style&gt;</p>
<p>&lt;style&gt;<br>A:link {text-decoration: none; color:#0000FF; font-family: 宋体}<br>A:visited {text-decoration: none; color: #0000FF; font-family: 宋体}<br>A:hover {text-decoration: underline overline line-through; color: FF0000}<br>TH{FONT-SIZE: 9pt}<br>TD{FONT-SIZE: 9pt}<br>body {SCROLLBAR-FACE-COLOR: #A9D46D; SCROLLBAR-HIGHLIGHT-COLOR: #e7e7e7;SCROLLBAR-SHADOW-COLOR:#e7e7e7; </p>
<p>SCROLLBAR-3DLIGHT-COLOR: #000000; LINE-HEIGHT: 15pt; SCROLLBAR-ARROW-COLOR: #ffffff; </p>
<p>SCROLLBAR-TRACK-COLOR: #e7e7e7;}</p>
<p>INPUT{BORDER-TOP-WIDTH: 1px; PADDING-RIGHT: 1px; PADDING-LEFT: 1px; BORDER-LEFT-WIDTH: 1px; FONT-SIZE: </p>
<p>9pt; BORDER-LEFT-COLOR: #cccccc; <br>BORDER-BOTTOM-WIDTH: 1px; BORDER-BOTTOM-COLOR: #cccccc; PADDING-BOTTOM: 1px; BORDER-TOP-COLOR: #cccccc; </p>
<p>PADDING-TOP: 1px; HEIGHT: 18px; BORDER-RIGHT-WIDTH: 1px; BORDER-RIGHT-COLOR: #cccccc}<br>DIV,form ,OPTION,P,TD,BR{FONT-FAMILY: 宋体; FONT-SIZE: 9pt} <br>textarea, select {border-width: 1; border-color: #000000; background-color: #efefef; font-family: 宋体; </p>
<p>font-size: 9pt; font-style: bold;}<br>.text { font-family: "宋体"; font-size: 9pt; color: #003300; border: #006600 solid; border-width: 1px 1px </p>
<p>1px 1px}<br>&lt;/style&gt;完整的css</p>
<p><br></p>
<img src ="http://www.blogjava.net/matthew2006/aggbug/131704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2007-07-22 10:32 <a href="http://www.blogjava.net/matthew2006/archive/2007/07/22/131704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL的数据类型和建库策略－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2007/01/11/93154.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Thu, 11 Jan 2007 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2007/01/11/93154.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/93154.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2007/01/11/93154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/93154.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/93154.html</trackback:ping><description><![CDATA[
		<div class="NewsContent" id="NewsContentLabel">无论是在小得可怜的免费数据库空间或是大型电子商务网站，合理的设计表结构、充分利用空间是十分必要的。这就要求我们对数据库系统的常用数据类型有充分的认识。下面我就将我的一点心得写出来跟大家分享。 <br /><br />  一、数字类型。数字类型按照我的分类方法分为三类：整数类、小数类和数字类。 <br />  我所谓的“数字类”，就是指DECIMAL和NUMERIC，它们是同一种类型。它严格的说不是一种数字类型，因为他们实际上是将数字以字符串形式保存的；他的值的每一位（包括小数点）占一个字节的存储空间，因此这种类型耗费空间比较大。但是它的一个突出的优点是小数的位数固定，在运算中不会“失真”，所以比较适合用于“价格”、“金额”这样对精度要求不高但准确度要求非常高的字段。 <br />  小数类，即浮点数类型，根据精度的不同，有FLOAT（单精度）和DOUBLE（双精度）两种。它们的优势是精确度，FLOAT可以表示绝对值非常小、小到约 1.17E-38 （0.000...0117， 小数点后面有37个零）的小数，而DOUBLE更是可以表示绝对值小到约 2.22E-308 （0.000...0222， 小数点后面有307个零）的小数。FLOAT类型和DOUBLE类型占用存储空间分别是4字节和8字节。如果需要用到小数的字段，精度要求不高的，当然用FLOAT了！可是说句实在话，我们“民用”的数据，哪有要求精度那么高的呢？这两种类型至今我没有用过——我还没有遇到适合于使用它们的事例。 <br />  用的最多的，最值得精打细算的，是整数类型。从只占一个字节存储空间的TINYINT到占8个字节的BIGINT，挑选一个“够用”并且占用存储空间最小的类型是设计数据库时应该考虑的。TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT占用存储空间分别为1字节、2字节、3字节、4字节和8字节，就无符号的整数而言，这些类型能表示的最大整数分别为255、65535、16777215、4294967295和18446744073709551615。如果用来保存用户的年龄（举例来说，数据库中保存年龄是不可取的），用TINYINT就够了；九城的《纵横》里，各项技能值，用SMALLINT也够了；如果要用作一个肯定不会超过16000000行的表的AUTO_INCREMENT的IDENTIFY字段，当然用 MEDIUMINT 不用 INT ，试想，每行节约一个字节，16000000行可以节约10兆多呢！ <br /><br />  二、日期时间类型。 <br />  日期和时间类型比较简单，无非是 DATE、TIME、DATETIME、TIMESTAMP和YEAR等几个类型。只对日期敏感，而对时间没有要求的字段，就用DATE而不用DATETIME是不用说的了；单独使用时间的情况也时有发生——使用TIME；但最多用到的还是用DATETIME。在日期时间类型上没有什么文章可做，这里就不再详述。 <br /><br />  三、字符（串）类型。 <br />  不要以为字符类型就是 CHAR ！CHAR和VARCHAR的区别在于CHAR是固定长度，只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节，它都要占去10个字节的空间；而VARVHAR则是可变长度的，如果一个字段可能的值是不固定长度的，我们只知道它不可能超过10个字符，把它定义为 VARCHAR(10)是最合算的，VARCHAR 类型的实际长度是它的值的(实际长度+1)。为什么“+1”呢？这一个字节用于保存实际使用了多大的长度呀！从这个“+1”中也应该看到，如果一个字段，它的可能值最长是10个字符，而多数情况下也就是用到了10个字符时，用VARCHAR就不合算了：因为在多数情况下，实际占用空间是11个字节，比用CHAR(10)还多占用一个字节！ <br />  举个例子，就是一个存储股票名称和代码的表，股票名称绝大部分是四个字的，即8个字节；股票代码，上海的是六位数字，深圳的是四位数字。这些都是固定长度的，股票名称当然要用 CHAR(8) ；股票代码虽然是不固定长度，但如果使用VARVHAR(6)，一个深圳的股票代码实际占用空间是5个字节，而一个上海的股票代码要占用7个字节！考虑到上海的股票数目比深圳的多，那么用VARCHAR(6)就不如CHAR(6)合算了。 <br />  虽然一个CHAR或VARVHAR的最大长度可以到255，我认为大于20的CHAR是几乎用不到的——很少有大于20个字节长度的固定长度的东东吧？不是固定长度的就用VARCHAR！大于100的VARCHAR也是几乎用不到的——比这更大的用TEXT就好了。TINYTEXT，最大长度为255，占用空间也是(实际长度+1)；TEXT，最大长度65535，占用空间是(实际长度+2)；MEDIUMTEXT，最大长度16777215，占用空间是(实际长度+3)；LONGTEXT，最大长度4294967295，占用空间是(实际长度+4)。为什么“+1”？“+2”？“+3”？“+4”？你要是还不知道就该打PP了。这些可以用在论坛啊、新闻啊，什么的，用来保存文章的正文。根据实际情况的不同，选择从小到大的不同类型。 <br /><br />  四、枚举和集合类型。 <br />  枚举（ENUM）类型，最多可以定义65535种不同的字符串从中做出选择，只能并且必须选择其中一种，占用存储空间是一个或两个字节，由枚举值的数目决定；集合（SET）类型，最多可以有64个成员，可以选择其中的零个到不限定的多个，占用存储空间是一个到八个字节，由集合可能的成员数目决定。 <br />  举个例子来说，在SQLServer中，你可以节约到用一个Bit类型来表示性别（男/女），但MySQL没有Bit，用TINTINT？不，可以用ENUM('帅哥','美眉')！只有两种选择，所以只需一个字节——跟TINYINT一样大，但却可以直接用字符串'帅哥'和'美眉'来存取。真是太方便啦！ <br /><br />  好了，MySQL的数据类型介绍得差不多，我的建库策略也随着介绍数据类型介绍给大家一些。但这只是其中一部分，篇幅有限，不能再细说；其他的，就靠各人在对数据类型理解的基础上，多多实践、多多讨论。</div>
<img src ="http://www.blogjava.net/matthew2006/aggbug/93154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2007-01-11 14:29 <a href="http://www.blogjava.net/matthew2006/archive/2007/01/11/93154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate和Jive缓存策略的比较－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2007/01/05/91901.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Fri, 05 Jan 2007 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2007/01/05/91901.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/91901.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2007/01/05/91901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/91901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/91901.html</trackback:ping><description><![CDATA[
		<font face="Arial">一．基本概念 <br /><br />PO是持久化对象，它只是对物理数据实体的一种对象表示。 <br /><br />VO是值对象，准确地讲，它是业务对象。 <br /><br />FormBean只是HTML表单的封装，起到在控制层弱化的request中存储数据的作用，将request的get方法转 <br /><br />变为对象的存取值。 <br /><br /><br /><br />二．缓存策略比较 <br /><br />Jive <br /><br />1．Jive的缓存策略的过程描述： <br /><br />(1)条件查询的时候，Jive用 select id from table_name where …. （只选择ID字段）这样的SQL语句查询数据库，来获得一个ID列表。 <br /><br /><br />(2) Jive根据ID列表中的每个ID，首先查看缓存中是否存在对应ID的数据对象：如果存在，那么直接取出，加入到 结果列表中；如果不存在，那么通过一条select * from table_name where id = {ID value} 这样的SQL查询数据库，取出对应的数据对象，放入到结果列表，并把这个数据对象按照ID放入到缓存中。 <br /><br /><br />(3) ID查询的时候，Jive执行类似第(2)步的过程，先从缓存中查找该ID，查不到，再查询数据库，然后把结果放入到缓存。 <br /><br /><br />(4) 删除、更新、增加数据的时候，同时更新缓存。 <br /><br /><br />2．Jive缓存策略的优点： <br /><br />(1) ID查询的时候，如果该ID已经存在于缓存中，那么可以直接取出。节省了一条数据库查询。 <br /><br /><br />(2) 当多次条件查询的结果集相交的情况下，交集里面的数据对象不用重复从数据库整个获取，直接从缓存中获取即可。比如，第一次查询的ID列表为{1, 2}，然后根据ID列表的ID从数据库中一个一个取出数据对象，结果集为{a(id = 1), b(id = 2)}。下一次查询的ID列表为{2, 3}，由于ID = 2的数据对象已经存在于缓存中，那么只要从数据库中取出ID = 3的数据对象即可。 <br /><br /><br />3．Jive缓存策略的缺点： <br /><br />(1) 在根据条件查找数据对象列表的过程中，DAO的第(1)步用来获得ID列表的那一次数据库查询，是必不可少的。 <br /><br /><br />(2) 如果第(1)步返回的ID列表中有n个ID，在最坏的命中率（缓存中一个对应ID都没有）情况下，Jive还要再查询n次数据库。最坏情况下，共需要n + 1数据库查询。 <br /><br />Hibernate <br /><br />Hibernate用Session类包装了数据库连接从打开到关闭的过程。Session内部维护一个数据对象集合，包括了本Session内选取的、操作的数据对象。这称为Session内部缓存，是Hibernate的第一级最快缓存，属于Hibernate的既定行为，不需要进行配置。 <br /><br />Session的生命期很短，存在于Session内部的第一级最快缓存的生命期当然也很短，命中率自然也很低。当然，这个Session内部缓存的主要作用是保持Session内部数据状态同步。如果需要跨Session的命中率较高的全局缓存，那么必须对Hibernate进行二级缓存配置。一般来说，同样数据类型（Class）的数据对象，共用一个二级缓存（或其中的同一块）。 <br /><br /><br />1．Hibernate二级缓存策略的过程描述： <br /><br />(1)条件查询的时候，总是发出一条select * from table_name where …. （选择所有字段）这样的SQL语句查询数据库，一次获得所有的数据对象。 <br /><br /><br />(2) 把获得的所有数据对象根据ID放入到第二级缓存中。 <br /><br /><br />(3) 当Hibernate根据ID访问数据对象的时候，首先从Session一级缓存中查；查不到，如果配置了二级缓存，那么从二级缓存中查；查不到，再查询数据库，把结果按照ID放入到缓存。 <br /><br /><br />(4) 删除、更新、增加数据的时候，同时更新缓存。 <br /><br /><br />2．Hibernate二级缓存策略的优点： <br /><br />(1) 具有Jive缓存策略同样的第(1)条优点：ID查询的时候，如果该ID已经存在于缓存中，那么可以直接取出。节省了一条数据库查询。 <br /><br /><br />(2) 不具有Jive缓存策略的第(2)条缺点，即hibernate不会有最坏情况下的 n + 1次数据库查询。 <br /><br /><br />3．Hibernate二级缓存策略的缺点： <br /><br />(1) 同Jive缓存策略的第(1)条缺点一样，条件查询的时候，第(1)步的数据库查询语句是不可少的。而且Hibernate选择所有的字段，比只选择ID字段花费的时间和空间都多。 <br /><br /><br />(2) 不具备Jive缓存策略的第(2)条优点。条件查询的时候，必须把数据库对象从数据库中整个取出，即使该数据库的ID已经存在于缓存中。 <br /><br /><br />Hibernate的Query缓存策略 <br /><br />可以看到，Jive缓存和Hibernate的二级缓存策略，都只是针对于ID查询的缓存策略，对于条件查询则毫无作用。（尽管Jive缓存的第(2)个优点，能够避免重复从数据库获取同一个ID对应的数据对象，但select id from …这条数据库查询是每次条件查询都必不可少的）。 <br /><br /><br />为此，Hibernate提供了针对条件查询的Query缓存。 <br /><br /><br />1．Hibernate的Query缓存策略的过程描述： <br /><br />(1) 条件查询的请求一般都包括如下信息：SQL, SQL需要的参数，记录范围（起始位置rowStart，最大记录个数maxRows)，等。 <br /><br /><br />(2) Hibernate首先根据这些信息组成一个Query Key，根据这个Query Key到Query缓存中查找对应的结果列表。如果存在，那么返回这个结果列表；如果不存在，查询数据库，获取结果列表，把整个结果列表根据Query Key放入到Query缓存中。 <br /><br /><br />(3) Query Key中的SQL涉及到一些表名，如果这些表的任何数据发生修改、删除、增加等操作，这些相关的Query Key都要从缓存中清空。 <br /><br /><br />2．Hibernate的Query缓存策略的优点 <br /><br />(1) 条件查询的时候，如果Query Key已经存在于缓存，那么不需要再查询数据库。命中的情况下，一次数据库查询也不需要。 <br /><br /><br />3．Hibernate的Query缓存策略的缺点 <br /><br />(1) 条件查询涉及到的表中，如果有任何一条记录增加、删除、或改变，那么缓存中所有和该表相关的Query Key都会失效。 <br /><br />比如，有这样几组Query Key，它们的SQL里面都包括table1。 <br /><br /><br />SQL = select * from table1 where c1 = ? …., parameter = 1, rowStart = 11, maxRows = 20. <br /><br />SQL = select * from table1 where c1 = ? …., parameter = 1, rowStart = 21, maxRows = 20. <br /><br />SQL = select * from table1 where c1 = ? ….., parameter = 2, rowStart = 11, maxRows = 20. <br /><br />SQL = select * from table1 where c1 = ? ….., parameter = 2, rowStart = 11, maxRows = 20. <br /><br />SQL = select * from table1 where c2 = ? …., parameter = ‘abc’, rowStart = 11, maxRows = 20. <br /><br /><br />当table1的任何数据对象（任何字段）改变、增加、删除的时候，这些Query Key对应的结果集都不能保证没有发生变化。很难做到根据数据对象的改动精确判断哪些Query Key对应的结果集受到影响。最简单的实现方法，就是清空所有SQL包含table1的Query Key。 <br /><br /><br />(2) Query缓存中，Query Key对应的是数据对象列表，假如不同的Query Key对应的数据对象列表有交集，那么，交集部分的数据对象就是重复存储的。 <br /><br /><br />比如，Query Key 1对应的数据对象列表为{a(id = 1), b(id = 2)}，Query Key 2对应的数据对象列表为{a(id = 1), c(id = 3)}，这个a就在两个List同时存在了两份。 <br /><br /><br />4．二级缓存和Query缓存同步的困惑 <br /><br />假如，Query缓存中，一个Query Key对应的结果列表为{a (id = 1) , b (id = 2), c (id = 3)}; 二级缓存里面有也id = 1对应的数据对象a。 <br /><br /><br />这两个数据对象a之间是什么关系？能够保持状态同步吗？我阅读Hibernate的相关源码，没有发现两个缓存之间的这种同步关系。或者两者之间毫无关系。就像我上面所说的，只要表数据发生变化，相关的Query Key都要被清空。所以不用考虑同步问题？</font>
<img src ="http://www.blogjava.net/matthew2006/aggbug/91901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2007-01-05 09:58 <a href="http://www.blogjava.net/matthew2006/archive/2007/01/05/91901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring IoC容器－编码方式比较</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/26/90084.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Tue, 26 Dec 2006 05:25:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/26/90084.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/90084.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/26/90084.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/90084.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/90084.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 下面会通过一个获得数据源的例子来比较下传统编码模式和IoC编码模式的不同。首先，在传统编码方式下，我们可能这样获得数据源并显示结果：package com.lnic.ioc;import javax.sql.DataSource;import java.sql.Connection;import java.sql.Statement;import java.sql.ResultSet;import...&nbsp;&nbsp;<a href='http://www.blogjava.net/matthew2006/archive/2006/12/26/90084.html'>阅读全文</a><img src ="http://www.blogjava.net/matthew2006/aggbug/90084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-26 13:25 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/26/90084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts+Spring+Hibernate in action之：简单例子开发</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/25/89881.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Mon, 25 Dec 2006 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/25/89881.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/89881.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/25/89881.html#Feedback</comments><slash:comments>218</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/89881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/89881.html</trackback:ping><description><![CDATA[<span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">近段时间学习spring，网上找了些资料发现写的不够详细。所以整理了下我的实验过程，附图加以说明。算是对初学者和Myeclipse生手一个帮助。<br />
<strong>功能介绍：</strong>由用户输入用户的</span> <span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">ID</span> <span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">，输出用户的相关信息，包括用户名和毕业学校。前台包括两个</span> <span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">jsp</span> <span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">页面，</span> <span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">index.jsp</span> <span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">用来接受用户输入查询条件；</span> <span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">result.jsp</span> <span style="font-size: 10.5pt; font-family: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">用来显示查询结果。数据库采用</span> <span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">MySQL。<br />
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境</span><span lang="EN-US">:</span></strong><span lang="EN-US">Eclipse<st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">3.1.2</st1:chsdate>+MyEclipse4.1.1GA+MySql4.1.10</span></p>
<br />
由于图片较多，需要的留个E_Mail，我会发给你。</span> <br />
<br />
<img src ="http://www.blogjava.net/matthew2006/aggbug/89881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-25 13:27 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/25/89881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hiernate的锁机制－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/22/89442.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Fri, 22 Dec 2006 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/22/89442.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/89442.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/22/89442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/89442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/89442.html</trackback:ping><description><![CDATA[hibernate锁机制包括悲观锁和乐观锁<br />1.悲观锁：<br />   它指的是对数据被外界修改持保守态度。假定任何时刻存取数据时，都可能有另一个客户也正在存取同一笔数据，为了保持数据被操作的一致性，于是对数据采取了数据库层次的锁定状态，依靠数据库提供的锁机制来实现。<br /> 基于jdbc实现的数据库加锁如下：<br />   select * from account where name="Erica" for update.在更新的过程中，数据库处于加锁状态，任何其他的针对本条数据的操作都将被延迟。本次事务提交后解锁。  而hibernate悲观锁的具体实现如下：<br />   String sql="查询语句";<br />   Query query=session.createQuery(sql);<br />   query.setLockMode("对象"，LockModel.UPGRADE);<br /><br />   说到这里，就提到了hiernate的加锁模式：<br />   LockMode.NONE ： 无锁机制。<br />   LockMode.WRITE ：Hibernate在Insert和Update记录的时候会自动获取。<br />   LockMode.READ ： Hibernate在读取记录的时候会自动获取。<br />   这三种加锁模式是供hibernate内部使用的，与数据库加锁无关<br />   LockMode.UPGRADE：利用数据库的for update字句加锁。<br />   在这里我们要注意的是：只有在查询开始之前（也就是hiernate生成sql语句之前）加锁，才会真正通过数据库的锁机制加锁处理。否则，数据已经通过不包含for updata子句的sql语句加载进来，所谓的数据库加锁也就无从谈起。 但是，从系统的性能上来考虑，对于单机或小系统而言，这并不成问题，然而如果是在网络上的系统，同时间会有许多联机，假设有数以百计或上千甚至更多的并发访问出现，我们该怎么办？如果等到数据库解锁我们再进行下面的操作，我们浪费的资源是多少？--这也就导致了乐观锁的产生。<br />  2.乐观锁：<br />　乐观锁定（optimistic locking）则乐观的认为资料的存取很少发生同时存取的问题，因而不作数据库层次上的锁定，为了维护正确的数据，乐观锁定采用应用程序上的逻辑实现版本控制的方法。　例如若有两个客户端，A客户先读取了账户余额100元，之后B客户也读取了账户余额100元的数据，A客户提取了50元，对数据库作了变更，此时数据库中的余额为50元，B客户也要提取30元，根据其所取得的资料，100-30将为70余额，若此时再对数据库进行变更，最后的余额就会不正确。在不实行悲观锁定策略的情况下，数据不一致的情况一但发生，有几个解决的方法，一种是先更新为主，一种是后更新的为主，比较复杂的就是检查发生变动的数据来实现，或是检查所有属性来实现乐观锁定。<br />　Hibernate 中透过版本号检查来实现后更新为主，这也是Hibernate所推荐的方式，在数据库中加入一个VERSON栏记录，在读取数据时连同版本号一同读取，并在更新数据时递增版本号，然后比对版本号与数据库中的版本号，如果大于数据库中的版本号则予以更新，否则就回报错误。以刚才的例子，A客户读取账户余额1000元，并连带读取版本号为5的话，B客户此时也读取账号余额1000元，版本号也为5，A客户在领款后账户余额为500，此时将版本号加1，版本号目前为6，而数据库中版本号为5，所以予以更新，更新数据库后，数据库此时余额为500，版本号为6，B客户领款后要变更数据库，其版本号为5，但是数据库的版本号为6，此时不予更新，B客户数据重新读取数据库中新的数据并重新进行业务流程才变更数据库。<br />　以Hibernate实现版本号控制锁定的话，我们的对象中增加一个version属性，例如：<br /><br />public class Account {<br /><br />    private int version;<br /><br />    ....<br /><br /> <br /><br />    public void setVersion(int version) {<br /><br />        this.version = version;<br /><br />    }<br /><br /> <br /><br />    public int getVersion() {<br /><br />        return version;<br /><br />    }<br /><br />    ....<br /><br />}<br /><br /><br />而在映像文件中，我们使用optimistic-lock属性设定version控制，&lt;id&gt;属性栏之后增加一个<br /><br />&lt;version&gt;标签，如下：<br /><br />&lt;hibernate-mapping&gt;<br /><br />    &lt;class name="onlyfun.caterpillar.Account" talble="ACCOUNT"<br /><br />           optimistic-lock="version"&gt;<br /><br />        &lt;id...../&gt;<br /><br />        &lt;version name="version" column="VERSION"/&gt;<br /><br /> <br /><br />         ....<br /><br /> <br /><br />    &lt;/class&gt;<br /><br />&lt;/hibernate-mapping&gt;<br /><br /><br />　设定好版本控制之后，在上例中如果B 客户试图更新数据，将会引发StableObjectStateException例外，我们可以捕捉这个例外，在处理中重新读取数据库中的数据，同时将 B客户目前的数据与数据库中的数据秀出来，让B客户有机会比对不一致的数据，以决定要变更的部份，或者您可以设计程式自动读取新的资料，并重复扣款业务流程，直到数据可以更新为止，这一切可以在背景执行，而不用让您的客户知道。<br />   但是乐观锁也有不能解决的问题存在：上面已经提到过乐观锁机制的实现往往基于系统中的数据存储逻辑，在我们的系统中实现，来自外部系统的用户余额更新不受我们系统的控制，有可能造成非法数据被更新至数据库。因此我们在做电子商务的时候，一定要小心的注意这项存在的问题，采用比较合理的逻辑验证，避免数据执行错误。也可以在使用Session的load()或是lock()时指定锁定模式以进行锁定。如果数据库不支持所指定的锁定模式，Hibernate会选择一个合适的锁定替换，而不是丢出一个例外 <br /><img src ="http://www.blogjava.net/matthew2006/aggbug/89442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-22 09:58 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/22/89442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts+Spring+Hibernate练习(完整)－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/18/88464.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Mon, 18 Dec 2006 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/18/88464.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/88464.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/18/88464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/88464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/88464.html</trackback:ping><description><![CDATA[
		<span id="ctl00_ContentRight_labNewsContent"> 
<div>工具：</div><div>    Eclipse3.1、MyEclipse4.03、Tomcat5.5.9、Properties Editor插件、MySql4.1.13</div><div> </div><div>新建工程：名称为 login</div><div> </div><div>创建Struts框架</div><div> </div><div>创建 index.jsp，增加一链接指向 login.jsp</div><div> </div><div>按下Ctrl + N，创建 login.jsp、LoginAction，使用MyEclipse的向导就可以了，<strong>记得选对正确的版本</strong></div><div> </div><div>在ActionForm配置页中选择类型为动态Form，并继承于DynaValidatorForm，新增两个属性：username、password，在创建jsp文件打上钩，将路径改为/login.jsp，然后下一步，改LoginAction的Input source改为/login.jsp，点击完成</div><div> </div><div>按下Ctrl + N 创建一个forwards，<strong>记得选对正确的版本</strong></div><div>name 输入 indexGo</div><div>路径选择 /index.jsp</div><div> </div><div><strong>配置validator</strong></div><div>先添加Struts插件，使用向导</div><div>Plugin class : org.apache.struts.validator.ValidatorPlugIn</div><div>Property : pathnames</div><div>Value : <font color="#008000">/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml</font></div><div>这里需要两个xml文件</div><div><font color="#000000">现在创建“</font><font color="#000000">validation.xml</font><font color="#000000">”</font> 文件</div><div> </div><div><div>在这里说明一点，我使用MyEclipse创建的Struts框架中缺少了validator-rules.xml文件，需要动拷贝到WEB-INF目录中</div><div>此文件可以到<a href="http://struts.apache.org/"><font color="#8d8c8c">http://struts.apache.org/</font></a>下载</div><div> </div></div><div>文件内容如下：</div><div><font color="#0000ff">&lt;form-validation&gt;<br /> &lt;formset&gt;<br />  &lt;form name="loginForm"&gt;<br />   &lt;field property="username" depends="required"&gt;<br />    &lt;arg0 key="prompt.username" /&gt;<br />   &lt;/field&gt;<br />   &lt;field property="password" depends="required"&gt;<br />    &lt;arg0 key="prompt.password" /&gt;<br />   &lt;/field&gt;<br />  &lt;/form&gt;<br /> &lt;/formset&gt;<br />&lt;/form-validation&gt;</font></div><div><font color="#0000ff"></font> </div><div><font color="#000000"><strong>编辑资源文件</strong>“ApplicationResources.properties”</font></div><div>增加以下内容</div><div> </div><div><font color="#0000ff">prompt.username=User Name<br />prompt.password=User Password</font></div><div><font color="#0000ff">errors.required={0} is required.</font></div><div><font color="#0000ff"></font> </div><div><font color="#000000">再创建中文件资源文件“ApplicationResources_zh_CN.properties”</font></div><p>增加以下内容 </p><div><font color="#0000ff">prompt.username=用户名称<br />prompt.password=登录密码</font></div><div><font color="#0000ff">errors.required={0} 必需填写！</font></div><div><font color="#0000ff"></font> </div><div><font color="#000000">修改struts-config.xml文件</font></div><div>在以下位置增加绿色字体部份</div><div>&lt;action-mappings &gt;<br />    &lt;action<br />      attribute="loginForm"<br />      input="/login.jsp"<br />      name="loginForm"<br />      path="/login"<br />      scope="request"<br />      <font color="#008000">validate="true"<br /></font>      type="com.test.struts.action.LoginAction" /&gt;</div><div>  &lt;/action-mappings&gt;</div><div> </div><div>这里说明提交的数据必需经过验证，而验证则是通过validator框架进行的。</div><div> </div><div>修改LoginAction.java文件的execute方法，内容如下</div><div><font color="#0000ff">public ActionForward execute(<br />  ActionMapping mapping,<br />  ActionForm form,<br />  HttpServletRequest request,<br />  HttpServletResponse response) {<br />  DynaValidatorForm loginForm = (DynaValidatorForm) form;<br />  <font color="#008000">String username=loginForm.getString("username");<br />  String password=loginForm.getString("password");<br />  if(username.equals("test")||password.equals("test")){<br />   return mapping.findForward("indexGo");<br />  }else{<br />   return mapping.getInputForward();<br />  }<br /></font> }</font></div><div> </div><div>现在再修改一下login.jsp</div><div>增加以下绿色字体部份</div><div>&lt;%@ page language="java" <font color="#008000">contentType="text/html; charset=UTF-8"</font> %&gt;</div><div> </div><div>其中<font color="#008000">charset=UTF-8 </font><font color="#000000">是使用UTF-8的字符编码，这也是为了支持国际化而使用的。</font></div><div> </div><div>好了，现在可以启动Tomcat进行测试了</div><div><a href="http://localhost/login/"><font color="#8d8c8c">http://localhost/login/</font></a> 这里说明一下，我的Tomcat已经装端口号改为80了，所以就不必使用<a href="http://localhost:8080/login/"><font color="#8d8c8c">http://localhost:8080/login/</font></a>这样的方法了。</div><div> </div><div>如果不输入任何数据而直接提交表单的话就可以看到效果了。</div><div> </div><div><font color="#ff0000">好了，如果没有什么问题的话就继续往下看吧，如果有问题的话就得往上看了^_^</font></div><div> </div><div>现在创建Spring框架了，在这里我将Spring所有的包全部加载进去，因为我还不知道具体用到哪些类，全部加进去方便点</div><div> </div><div>单选框选第二个，这样的话所有的类库和标签等都将拷贝到项目中去，这样方便以后的布署</div><div>下一步后是创建配置文件，将文件放到“WebRoot/WEB-INF”目录下，文件名称为“applicationContext.xml”</div><div> </div><div> </div><div><div>配置struts-config.xml文件，添加（spring）的插件</div><div> </div><div><font color="#0000ff">&lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;<br />    &lt;set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" /&gt;<br />  &lt;/plug-in&gt;</font></div><div><font color="#0000ff"></font> </div><div><font color="#0000ff"></font>  
<div><font color="#000000">修改LoginAction配置</font></div><div><font color="#0000ff"></font> </div><div><strong><font color="#000000">原：</font></strong></div><div><font color="#0000ff">&lt;action<br />      attribute="loginForm"<br />      input="/login.jsp"<br />      name="loginForm"<br />      path="/login"<br />      scope="request"<br />      validate="true"<br />      type="com.test.struts.action.LoginAction" /&gt;</font></div><div><font color="#0000ff"></font> </div><div><font color="#0000ff">  &lt;/action-mappings&gt;</font></div><div><font color="#0000ff"></font> </div><div><font color="#000000">改为：</font></div><div><div><font color="#0000ff">&lt;action<br />      attribute="loginForm"<br />      input="/login.jsp"<br />      name="loginForm"<br />      path="/login"<br />      scope="request"<br />      validate="true"<br />      type="<font color="#008000">org.springframework.web.struts.DelegatingActionProxy</font>" /&gt;</font></div><div><font color="#0000ff">  &lt;/action-mappings&gt;</font></div></div></div></div><div> </div><div>  
<div><font color="#000000">绿色字体部份为修改内容</font></div><div><font color="#000000">这里将使用spring的代理器来对Action进行控制</font></div><div> </div><div>当提交到/login.do是将控制权交给了spring，然后由spring来决定是否转回到struts的Action</div><div> </div><div>现在来配置spring</div><div> </div><div><font color="#0000ff">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "</font><a href="http://www.springframework.org/dtd/spring-beans.dtd"><font color="#0000ff">http://www.springframework.org/dtd/spring-beans.dtd</font></a><font color="#0000ff">"&gt;</font></div><div><font color="#0000ff"></font> </div><div><font color="#0000ff">&lt;beans&gt;<br /> <font color="#008000">&lt;bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"&gt;&lt;/bean&gt;</font></font></div><div><font color="#0000ff">&lt;/beans&gt;</font></div><div><font color="#0000ff"></font> </div><div><font color="#000000">绿色字体是关于转交控制权的配置内容</font></div><div> </div><div>属性singleton="false"，指明了Action 的实例获取方式为每次重新创建。解决了Struts中令人诟病的线程安全问题（Struts中，由一个Action实例处理所有的请求，这就导致了类公用资源在并发请求中的线程同步问题。）（摘自spring开发指南）</div><div> </div><div><font color="#800080">这时如果你要进行测试也是可以的，不过为了省点时间就不进行测试了。</font></div><div>  
<div><strong>建立数据库在 </strong><font size="2">这里我使用的是mysql4.1.13</font></div><div><font size="2"></font> </div><div>CREATE TABLE `user` (<br />  `ID` int(11) NOT NULL auto_increment,<br />  `USERNAME` varchar(50) NOT NULL default '',<br />  `PASSWORD` varchar(50) NOT NULL default '',<br />  PRIMARY KEY  (`ID`)<br />) ENGINE=MyISAM DEFAULT CHARSET=latin1; </div><div> </div><div>添加记录 insert into user (USERNAME,PASSWORD) values ('test','test')</div><div> </div><div><strong>创建Hibernate框架</strong></div><div>在配置界面中配置数据库的连接部份，重要的是点击链接将jdbc拷贝到lib目录中</div><div>使用MyEclipse的数据Database Explorer工具创建User.hmb.xml、AbstractUser.java、User.java映射文件</div><div>创建完成后可以将自动生成的hibernate.cfg.xml删除</div><div> </div><div><strong>创建UserDAO.java、UserDAOImp.java</strong></div><div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">UserDAO.java<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">public interface UserDAO {<o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 1">   </span>public abstract boolean isValidUser(String username, String password);<o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">}<o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><o:p> </o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><b><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">UserDAOImp.java<o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import java.util.List;<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import org.springframework.orm.hibernate3.support.HibernateDaoSupport;<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">import com.test.Hibernate.SessionFactory;<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">public class UserDAOImp extends HibernateDaoSupport implements UserDAO {<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 1">    </span>private SessionFactory sessionFactory;<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 1">    </span>private static String hql = "from User u where u.username=? ";<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 1">    </span>public boolean isValidUser(String username, String password) {<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 2">       </span>List userList = this.getHibernateTemplate().find(hql, username);</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 2">       </span>if (userList.size() &gt; 0) {<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 3">           </span>return true;<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 2">       </span>}<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 2">       </span>return false;<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><span style="mso-tab-count: 1">    </span>}<o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">}<o:p></o:p></span></p></div><div> </div><div><strong>修改LoginAction.java文件</strong>，使用userDao的方法来进行用户验证</div><div>package com.test.struts.action;</div><div> </div><div>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</div><div> </div><div>import org.apache.struts.action.Action;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.validator.DynaValidatorForm;</div><div> </div><div><font color="#008000">import com.test.UserDAO;</font></div><div><br />public class LoginAction extends Action {</div><div><br /> <font color="#008000">private UserDAO userDAO</font>;</div><div> </div><div><font color="#008000"> public UserDAO getUserDAO() {<br />  return userDAO;<br /> }</font></div><div><font color="#008000"></font> </div><div><font color="#008000"> public void setUserDAO(UserDAO userDAO) {<br />  this.userDAO = userDAO;<br /> }</font></div><div> </div><div> public ActionForward execute(ActionMapping mapping, ActionForm form,<br />   HttpServletRequest request, HttpServletResponse response) {<br />  DynaValidatorForm loginForm = (DynaValidatorForm) form;<br />  // TODO Auto-generated method stub<br />  String username = (String) loginForm.get("username");<br />  String password = (String) loginForm.get("password");<br />  loginForm.set("password", null);<br />  <font color="#008000">if (userDAO.isValidUser(username,password)) {<br />   return mapping.findForward("indexGo");<br />  } else {<br />   return mapping.getInputForward();<br />  }<br /></font> }</div><div>}<br />绿色字体为修改部份</div><div> </div><div>现在剩下最后的spring配置了</div><div>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd"><font color="#8d8c8c">http://www.springframework.org/dtd/spring-beans.dtd</font></a>"&gt;</div><div> </div><div>&lt;beans&gt;<br /> &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;<br />  &lt;property name="driverClassName"&gt;<br />   &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="url"&gt;<br />   &lt;value&gt;jdbc:mysql://localhost/test&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="username"&gt;<br />   &lt;value&gt;root&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="password"&gt;<br />   &lt;value&gt;root&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</div><div> </div><div> &lt;!-- 配置sessionFactory, 注意这里引入的包的不同  --&gt;<br /> &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br />  &lt;property name="dataSource"&gt;<br />   &lt;ref local="dataSource" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="mappingResources"&gt;<br />   &lt;list&gt;<br />    &lt;value&gt;com/test/Hibernate/User.hbm.xml&lt;/value&gt;<br />   &lt;/list&gt;<br />  &lt;/property&gt;<br />  &lt;property name="hibernateProperties"&gt;<br />   &lt;props&gt;<br />    &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/prop&gt;<br />    &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;<br />   &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</div><div> </div><div> &lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref local="sessionFactory" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</div><div> </div><div> &lt;bean id="userDAO" class="com.test.UserDAOImp"&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref local="sessionFactory" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</div><div> </div><div> &lt;bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />  &lt;property name="transactionManager"&gt;<br />   &lt;ref bean="transactionManager" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="target"&gt;<br />   &lt;ref local="userDAO" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="transactionAttributes"&gt;<br />   &lt;props&gt;<br />    &lt;prop key="insert*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />    &lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />    &lt;prop key="is*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />   &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</div><div> </div><div> &lt;bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"&gt;<br />  &lt;property name="userDAO"&gt;<br />   &lt;ref bean="userDAOProxy" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br />&lt;/beans&gt;</div><div> </div><div>现在可以进行测试了！</div><div> </div><div>在编写代码有配置内容时一定要注意 hibernate 和 hibernate3 ，这两个包的名字就只差一个字，千万不要有错，否则找错误可是很难的。</div></div></div></span>
<img src ="http://www.blogjava.net/matthew2006/aggbug/88464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-18 11:18 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/18/88464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts+Spring+Hibernate in action之：搭建Eclipse + MyEclipse 开发环境（转贴）</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/18/88452.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Mon, 18 Dec 2006 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/18/88452.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/88452.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/18/88452.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/88452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/88452.html</trackback:ping><description><![CDATA[<span id="ctl00_ContentRight_labNewsContent"><strong><em>本文转自网络，具体原文地址已无从知晓（由于本人的疏忽），现有网友Aqing 指出此作系他之原创，故补上：</em><a href="http://esoft.bokee.com/5081515.html" target="_new" rel="nofollow"><em>http://esoft.bokee.com/5081515.html</em></a><em>&nbsp;。</em><br />
<br />
一、安装JDK<br />
<br />
</strong>　　首先下载JDK 5.0（JDK 5.0的下载页面为：<a href="http://java.sun.com/j2se/1.5.0/download.jsp"><u><font color="#000000">http://java.sun.com/j2se/1.5.0/download.jsp</font></u></a><a href="https://sdlc3a.sun.com/ECom/EComActionServlet;jsessionid=DEE87FD4DE317FFDAB7B07E037FFCE16"></a>）； 然后运行JDK 5.0安装程序jdk-1_5_0_06-windows-i586-p.exe，安装过程中所有选项保持默认；最后配置JDK的环境变量：在&#8220;我的电脑&#8221;上点右键—&gt;&#8220;属性&#8221;—&gt;&#8220;高级&#8221;—&gt; &#8220;环境变量(N)&#8221;。<br />
新建系统变量JAVA_HOME：C:\Program Files\Java\jdk1.5.0_06；<br />
<br />
　　新建系统变量CLASSPATH：.;%JAVA_HOME%\lib;（注意：点号表示当前目录，不能省略）<br />
<br />
　　在系统变量Path的值的<strong>前面</strong>加入以下内容：%JAVA_HOME%\bin;(注意:这里的分号不能省略)<br />
<br />
　　到这里，JDK安装完毕。<br />
<br />
　　下面我们测试一下JDK是否安装成功：<br />
<br />
　　将以下内容复制到记事本中：<br />
<br />
public class HelloJAVA<br />
{<br />
public static void main(String srg[])<br />
{<br />
System.out.println("Hello JAVA!");<br />
}<br />
}<br />
<br />
　　另存为&#8220;HelloJAVA.java&#8221;（不含引号，下同），并保存到D盘根目录下。<br />
<br />
进入命令行，编译这个java类。如果正常输出，说明以上安装完成。<br />
<br />
注意:如果以后要安装诸如Eclipse、Borland JBuilder、JCreator、IntelliJ IDEA等集成开发环境(IDE,Integrated Development Environment),应该在IDE中编译运行一个简单的HelloWorld程序，以保证IDE可以识别出JDK的位置。<br />
<br />
<strong>二、安装Tomcat<br />
<br />
</strong>　　首先下载jakarta-tomcat-5.0.30.zip，之所以下载免安装版的好处是可以使用多个Tomcat（jakarta-tomcat-5.0.30.zip的下载页面为：<br />
<a href="http://apache.linuxforum.net/tomcat/tomcat-5/v5.0.30/bin/"><br />
<u><font color="#000000">http://apache.linuxforum.net/tomcat/tomcat-5/v5.0.30/bin/</font></u></a>）；<br />
<br />
　　然后将jakarta-tomcat-5.0.30.zip直接解压到D盘根目录：<br />
<br />
　最后配置Tomcat的环境变量：在&#8220;我的电脑&#8221;上点右键—&gt;&#8220;属性&#8221;—&gt;&#8220;高级&#8221;—&gt; &#8220;环境变量(N)&#8221;。<br />
<br />
　　新建系统变量CATALINA_HOME：D:\jakarta-tomcat-5.0.30<br />
<br />
　　在系统变量CLASSPATH的值的<strong>后面</strong>加入：%CATALINA_HOME%\common\lib;<br />
<br />
　　在系统变量Path的值中"%JAVA_HOME%\bin;"的<strong>后面</strong>加入以下内容：%CATALINA_HOME%\bin;<br />
<br />
　　到这里，Tomcat安装完毕。<br />
<br />
　　进行完一、二两步的设置以后，各系统变量的值如下：<br />
<br />
JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06<br />
CATALINA_HOME:D:\jakarta-tomcat-5.0.30<br />
CLASSPATH:.;%JAVA_HOME%\lib;%CATALINA_HOME%\common\lib;<br />
Path:%JAVA_HOME%\bin;%CATALINA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
<p>　　<strong>三、安装Eclipse<br />
</strong><br />
　　首先下载eclipse-SDK-3.1.2-win32.zip（eclipse-SDK-3.1.2-win32.zip下载地址为：<br />
<br />
<a href="http://www.eclipse.org/downloads/"><u><font color="#000000">http://www.eclipse.org/downloads/</font></u></a>）；<br />
<br />
　　然后将eclipse-SDK-3.1.2-win32.zip直接解压到D盘根目录：<br />
到这里， Eclipse安装完毕。<br />
<br />
　　<strong>四、安装MyEclipse</strong><br />
<br />
　　首先下载EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe（EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe 的下载地址为：<br />
<a href="http://www.myeclipseide.com/ContentExpress-display-ceid-10.html"><span style="text-decoration: underline" twffan="done"><font color="#000000">http://www.myeclipseide.com/ContentExpress-display-ceid-10.html</font></span></a>）；<br />
<br />
　　然后安装EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe。注意：当安装到下图所示的步骤的时候要选择Eclipse的安装路径，其他选项保持默认。<br />
　安装完毕之后，将MyEclipse安装目录下的features和plugins这2个目录覆盖到Eclipse的安装目录下。<br />
<br />
　　最后将刚才安装的 MyEclipse 卸载。<br />
<br />
　　解释一下上面这样做的原因： 因为MyEclipse是Eclipse的插件，所以只要把features和plugins这2个目录覆盖到Eclipse的安装目录，Eclipse就会自动认出这些插件。 <br />
<br />
　　到这里，MyEclipse安装完毕。<br />
<br />
　　<strong>五、破解MyEclipse</strong><br />
<br />
　　运行MyEclipse4.1.1注册机MyEclipseKeyGen.exe，选择MyEclipse的版本号，输入注册名，生成序列号。（MyEclipse4.x注册机的下载地址为：<br />
<br />
<a href="http://esoft.g8.com.cn/UploadFiles/2006-5/520753587.rar"><u><font color="#000000">http://esoft.g8.com.cn/UploadFiles/2006-5/520753587.rar</font></u></a>）<br />
<br />
　　运行eclipse.exe（首次运行要求指定Workspace），依次点击Window ----&gt; Preferences ----&gt;MyEclipse----&gt;Subscription ----&gt; Enter Subscription，输入注册名以及注册机生成的注册码。<br />
<br />
　　到这里，MyEclipse破解完毕。</p>
<p>　　<strong>六、指定Eclipse+MyEclipse的JRE 和Tomcat 服务器</strong><br />
<br />
　　1.设定Eclipse+MyEclipse的JRE<br />
<br />
　　一般情况下，Eclipse可以自动找到JRE，我们不用进行过多的设置。<br />
<br />
　　2.设定Eclipse+MyEclipse的Tomcat 服务器<br />
<br />
到这里，我们的Eclipse+MyEclipse开发环境就搭建完毕了！<br />
<br />
<strong>七、建一个Web工程检验下<br />
</strong>1&nbsp; 新建个工程：new》Project》MyEclipse》J2EEProjects》WebProject》输入工程名称，如，test其他默认<br />
2&nbsp; 进入刚才建的工程里面，如test》右点test工程下的WebRoot新建两个JSP文件。如：hello.jsp和hello_rusult.jsp<br />
3&nbsp; hello.jsp和hello_rusult.jsp代码如下：<br />
&nbsp;<strong>hello.jsp</strong></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;page&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java.util.*</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;pageEncoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">GBK</span><span style="color: #000000">"</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;%</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String&nbsp;path&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getContextPath();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String&nbsp;basePath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getScheme()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">://</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">request.getServerName()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">request.getServerPort()</span><span style="color: #000000">+</span><span style="color: #000000">path</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">%&gt;</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: #000000">&lt;!</span><span style="color: #000000">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">base&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">&lt;%=basePath%&gt;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">First&nbsp;Project</span><span style="color: #000000">&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">pragma</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">no-cache</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">cache-control</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">no-cache</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">expires</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">keywords</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">keyword1,keyword2,keyword3</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">description</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">This&nbsp;is&nbsp;my&nbsp;page</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">link&nbsp;rel</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">stylesheet</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/css</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">styles.css</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">FORM&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">form1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;action</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hello_result.jsp</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;method</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">post</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">INPUT&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hello</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">INPUT&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">submit</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">Submit</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">提交</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">FORM</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</span><strong>hello_rusult.jsp<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;page&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">import</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java.util.*</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;pageEncoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">GBK</span><span style="color: #000000">"</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;%</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String&nbsp;path&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getContextPath();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String&nbsp;basePath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getScheme()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">://</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">request.getServerName()</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">request.getServerPort()</span><span style="color: #000000">+</span><span style="color: #000000">path</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">%&gt;</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: #000000">&lt;!</span><span style="color: #000000">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">base&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">&lt;%=basePath%&gt;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">Faint,First&nbsp;Project&nbsp;Again</span><span style="color: #000000">!&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">pragma</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">no-cache</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">cache-control</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">no-cache</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">expires</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">0</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">keywords</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">keyword1,keyword2,keyword3</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">description</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">This&nbsp;is&nbsp;my&nbsp;page</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">link&nbsp;rel</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">stylesheet</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/css</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">styles.css</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;%</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(</span><span style="color: #000000">"</span><span style="color: #000000">GBK</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;temp</span><span style="color: #000000">=</span><span style="color: #000000">request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">hello</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(temp);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</strong>4&nbsp; 点击Deploy MyEclipse J2EE Project，部署整个工程。然后，点击Run MyEclipse 应用服务器tomcat。启动成功后输入：<br />
<a href="http://localhost:8080/test/hello.jsp">http://localhost:8080/test/hello.jsp</a>访问刚才发布的Web应用。<br />
<img src ="http://www.blogjava.net/matthew2006/aggbug/88452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-18 10:38 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/18/88452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FCKeditor中使用JSP版本上传图片、flash以及文件－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/16/88219.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Sat, 16 Dec 2006 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/16/88219.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/88219.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/16/88219.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/88219.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/88219.html</trackback:ping><description><![CDATA[ 由于网站的图片上传出点小问题，决定试用在线编辑的利器FCKeditor，查了些资料，大都讲述php\asp环境下的应用，所以决定自己测试一下，没想到2小时就搞定咯。当然相信看了文档的你，将更加轻松完成。本文仅仅描述如何修改配置，不涉及相关服务器配置等等。如有疑问请与我联系。<br /><br />（一） 准备工作<br /><br />1、下载FCKeditor2.1.1最新版本；<br /><br />2、下载FCKeditor2.3，java版本；<br /><br />3、Tomcat或者weblogic作为服务器（都测试过）<br /><br />（二）新建web工程??FCKeditor<br /><br />1、解压上述FCKeditor2.3 for java，并copy src和web两个文件夹到web工程??FCKeditor下，覆盖<br /><br />src和web；并将_samples下的jsp 文件copy到web目录下<br /><br />2、解压FCKeditor2.1.1 ，并copy到web工程的web文件夹中，将一些不需要的文件夹，比如_samples和_testcases以及editor\_source 删除，节约空间，另外如果仅仅使用JSP环境的话，也可以将其他环境下的配置信息或者测试用例删除。<br /><br />3、在你的工程的web目录下创建UserFile目录，以及Image、Flash、File三个子目录。<br /><br />您的工程目录如下所示：<br /><br /><img src="http://www.javaresearch.org/members/zhipingch/fck.bmp" /> <br /><br />（三）、修改相关配置<br /><br />现在开始修改代码咯，从\FCKeditor\fckconfig.js以及\FCKeditor\fckeditor.js开始。<br /><br />fckconfig.js<br /><br />FCKConfig.LinkBrowser = true ;<br />FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/jsp/connector' ;<br />FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70%<br />FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ;// 70%<br /><br />FCKConfig.ImageBrowser = true ;<br />FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&amp;Connector=connectors/jsp/connector' ;<br />FCKConfig.ImageBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ; // 70% ;<br />FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% ;<br /><br />FCKConfig.FlashBrowser = true ;<br />FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&amp;Connector=connectors/jsp/connector' ;<br />FCKConfig.FlashBrowserWindowWidth  = FCKConfig.ScreenWidth * 0.7 ; //70% ;<br />FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; //70% ;<br /><br />FCKConfig.LinkUpload = true ;<br />FCKConfig.LinkUploadURL = FCKConfig.BasePath + '/editor/filemanager/upload/simpleuploader?Type=File';<br />FCKConfig.LinkUploadAllowedExtensions = "" ;   // empty for all<br />FCKConfig.LinkUploadDeniedExtensions = ".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$" ; // empty for no one<br /><br />FCKConfig.ImageUpload = true ;<br />FCKConfig.ImageUploadURL = FCKConfig.BasePath + '/editor/filemanager/upload/simpleuploader?Type=Image';<br />FCKConfig.ImageUploadAllowedExtensions = ".(jpg|gif|jpeg|png)$" ;  // empty for all<br />FCKConfig.ImageUploadDeniedExtensions = "" ;       // empty for no one<br /><br />FCKConfig.FlashUpload = true ;<br />FCKConfig.FlashUploadURL = FCKConfig.BasePath + '/editor/filemanager/upload/simpleuploader?Type=Flash';<br />FCKConfig.FlashUploadAllowedExtensions = ".(swf|fla)$" ;  // empty for all<br />FCKConfig.FlashUploadDeniedExtensions = "" ;     // empty for no one<br /><br /><br />主要是上述URL配置。另外修改fckeditor.js：<br /><br />var FCKeditor = function( instanceName, width, height, toolbarSet, value )<br />{<br /> // Properties<br /> this.InstanceName = instanceName ;<br /> this.Width   = width   || '100%' ;<br /> this.Height   = height  || '400' ;<br /> this.ToolbarSet  = toolbarSet || 'Custom' ;//Custom是自定义的工具栏，根据需要自由更改<br /> this.Value   = value   || '   ' ;<br /> this.BasePath  = '/FCKeditor/editor/' ;//取自己工程的相对路径<br /> this.CheckBrowser = true ;<br /> this.DisplayErrors = true ;<br /> this.EnableSafari = false ;  // This is a temporary property, while Safari support is under development.<br /><br /> this.Config   = new Object() ;<br /><br /> // Events<br /> this.OnError  = null ; // function( source, errorNumber, errorDescription )错误处理函数<br />}<br /><br />3、找到\FCKeditor\editor\dialog\fck_image\fck_image.js和\FCKeditor\editor\dialog\fck_flash\fck_flash.js中下述片断<br /><br />if ( oEditor.FCKBrowserInfo.IsIE ){<br />    // The following change has been made otherwise IE will open the file <br />    // browser on a different server session (on some cases):<br />    // http://support.microsoft.com/default.aspx?scid=kb;en-us;831678<br />    // by Simone Chiaretta.<br />    var oWindow = oEditor.window.open( url, "FCKBrowseWindow", sOptions ) ;<br />    oWindow.opener = window ;<br />}else{<br /><br />         window.open( url, "FCKBrowseWindow", sOptions ) ;<br /><br />}<br /><br />修改为：<br /><br />if ( oEditor.FCKBrowserInfo.IsIE ){<br />    // The following change has been made otherwise IE will open the file <br />    // browser on a different server session (on some cases):<br />    // http://support.microsoft.com/default.aspx?scid=kb;en-us;831678<br />    // by Simone Chiaretta.<br /><br />             window.open( url, "FCKBrowseWindow", sOptions ) ;<br />   }else{<br /><br />          var oWindow = oEditor.window.open( url, "FCKBrowseWindow", sOptions ) ;<br />        oWindow.opener = window ;<br />}<br />  <br /><br />这样在IE在浏览服务器的文件，才可以选择，否则逻辑相反的话，打开的服务器文件浏览页面在对话框下面，无法选择文件或图片等。<br /><br />4、配置JSP所需的标签库<br /><br />将FCKeditor.tld  copy到/WEB-INF/下，并修改web.xml文件，结果如下所示：<br /> &lt;servlet&gt;<br />        &lt;servlet-name&gt;Connector&lt;/servlet-name&gt;<br />        &lt;servlet-class&gt;com.fredck.FCKeditor.connector.ConnectorServlet&lt;/servlet-class&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;baseDir&lt;/param-name&gt;<br />            &lt;param-value&gt;/UserFiles/&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;debug&lt;/param-name&gt;<br />            &lt;param-value&gt;false&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />    &lt;/servlet&gt;<br /><br />    &lt;servlet&gt;<br />        &lt;servlet-name&gt;SimpleUploader&lt;/servlet-name&gt;<br />        &lt;servlet-class&gt;com.fredck.FCKeditor.uploader.SimpleUploaderServlet&lt;/servlet-class&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;baseDir&lt;/param-name&gt;<br />            &lt;param-value&gt;/UserFiles/&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;debug&lt;/param-name&gt;<br />            &lt;param-value&gt;false&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;enabled&lt;/param-name&gt;<br />            &lt;param-value&gt;true&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;AllowedExtensionsFile&lt;/param-name&gt;<br />            &lt;param-value/&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;DeniedExtensionsFile&lt;/param-name&gt;<br />            &lt;param-value&gt;php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi|htm|html&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;AllowedExtensionsImage&lt;/param-name&gt;<br />            &lt;param-value&gt;jpg|gif|jpeg|png|bmp&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;DeniedExtensionsImage&lt;/param-name&gt;<br />            &lt;param-value/&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;AllowedExtensionsFlash&lt;/param-name&gt;<br />            &lt;param-value&gt;swf|fla&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;DeniedExtensionsFlash&lt;/param-name&gt;<br />            &lt;param-value/&gt;<br />        &lt;/init-param&gt;<br />        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />    &lt;/servlet&gt;<br /><br />此外可以根据需要修改\src\com\fredck\FCKeditor\tags\FCKeditorTag.java以及\src\com\fredck\FCKeditor\FCKeditor.java文件<br /><br />自定义默认的配置信息。<br /><br />public class FCKeditor {<br /> <br /> private FCKeditorConfigurations oConfig;<br /> private String instanceName;<br /> private String value = "  ";//这样标签体可以置空<br /> private String basePath;<br /> private String toolbarSet = "Custom";//默认为自定义<br /> private String width = "100%";<br /> private String height = "300";//默认为300px<br /> <br /> HttpServletRequest request;<br /><br />……<br /><br /> public FCKeditor(HttpServletRequest req, String parInstanceName){<br />  request=req;<br /><br />/**<br /><br />  *这里 /FCKeditor/ 必须和工程web目录下的FCKeditor目录同名，大小写敏感<br /><br /> */ <br />  basePath = request.getContextPath() + "/FCKeditor/";<br />  instanceName=parInstanceName;<br />  oConfig = new FCKeditorConfigurations() ;<br /> }<br /><br />此时，可以在JSP中使用如下标签咯（参见sample2.jsp）<br />imageBrowserURL="/web/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&amp;Connector=connectors/jsp/connector"<br />    linkBrowserURL="/web/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"<br />    flashBrowserURL="/web/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&amp;Connector=connectors/jsp/connector"<br />    imageUploadURL="/web/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image"<br />    linkUploadURL="/web/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File"<br />    flashUploadURL="/web/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash"&gt;<br /><br />并且可以上传图片、flash、文件等等。<br /><br />将工程部署到tomcat或者weblogic下，可以直接指向工程路径，散布。关于如何配置tomcat、weblogic请<br /><br />参考相关网站。<br /><br />打开 http://localhost:8080/web/index.jsp（tomcat）  或者 http://localhost:7001/web/index.jsp（weblogic）后可以试用咯！<br /><br />祝您成功，如果有描述不清楚的地方，请与我联系。<br /><br />以上已经测试成功。<br /><br /><img src ="http://www.blogjava.net/matthew2006/aggbug/88219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-16 18:48 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/16/88219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Learn Spring in spring(四)－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/14/87666.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Thu, 14 Dec 2006 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/14/87666.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/87666.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/14/87666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/87666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/87666.html</trackback:ping><description><![CDATA[四、Spring中的事务控制<br /><br />Bromon原创　请尊重版权<br /><br />　　Spring和EJB一样，提供了两种事务管理方式：编程式和声明式。在考试系统中我们将使用声明式的事务管理，这是spring推荐的做法。使用这种方式可以体验到spring的强大便捷，而且我们无须在Dao类中编写任何特殊的代码，只需要通过配置文件就可以让普通的java类加载到事务管理中，这个意义是很重大的。<br /><br />　　Spring中进行事务管理的通常方式是利用AOP（面向切片编程）的方式，为普通java类封装事务控制，它是通过动态代理实现的，由于接口是延迟实例化的，spring在这段时间内通过拦截器，加载事务切片。原理就是这样，具体细节请参考jdk中有关动态代理的文档。本文主要讲解如何在spring中进行事务控制。<br /><br />　　动态代理的一个重要特征是，它是针对接口的，所以我们的dao要通过动态代理来让spring接管事务，就必须在dao前面抽象出一个接口，当然如果没有这样的接口，那么spring会使用CGLIB来解决问题，但这不是spring推荐的方式，我们也不做讨论。<br /><br />　　参照前面的例子，我们为StudentManager.java定义一个接口，它的内容如下：<br /><br /><div class="codeStyle"><ol><li><i><font color="#339900">/*</font></i></li><li><i><font color="#339900"> * 创建日期 2005-3-25</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">package</font></b> org.bromon.spring.examer.student; 
</li><li></li><li><b><font color="#0000ff">import</font></b> java.util.<b><a href="http://www.javaresearch.org/source/jdk142/java/util/List.java.html" target="_blank"><font class="classLink"><u>List</u></font></a></b>; 
</li><li></li><li><b><font color="#0000ff">import</font></b> org.bromon.spring.examer.pojo.Student; 
</li><li></li><li><i><font color="#339900">/**</font></i></li><li><i><font color="#339900"> * @author Bromon</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">interface</font></b> StudentManagerInterface 
</li><li>{ 
</li><li>    <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">void</font></b> add(Student s); 
</li><li>    <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">void</font></b> del(Student s); 
</li><li>    <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">void</font></b> update(Student s); 
</li><li>     
</li><li>    <b><font color="#0000ff">public</font></b> <b><a href="http://www.javaresearch.org/source/jdk142/java/util/List.java.html" target="_blank"><font class="classLink"><u>List</u></font></a></b> loadAll(); 
</li><li>    <b><font color="#0000ff">public</font></b> Student loadById(<b><font color="#0000ff">int</font></b> id); 
</li><li>} </li></ol></div><br /><br />　　StudentManager也应该做出修改，实现该接口：<br /><br /><div class="codeStyle"><ol><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> StudentManager <b><font color="#0000ff">extends</font></b> HibernateDaoSupport <b><font color="#0000ff">implements</font></b> StudentManagerInterface </li></ol></div><br />　　现在需要修改配置文件，用于定义Hibrenate适用的事务管理器，并且把sessionFactory注入进去，同时还需要通过注册一个DefaultTransactionAttribute对象，来指出事务策略。其中sessionFactory的定义已经在本文的第三章中说明。<br /><br />　　首先定义一个Hibernate的事务管理器，让它来管理sessionFactory：<br /><div class="codeStyle"><ol><li>&lt;bean id=<font color="#ff33ff">"transactionManager"</font> <b><font color="#0000ff">class</font></b>=<font color="#ff33ff">"org.springframework.orm.hibernate.HibernateTransactionManager"</font>&gt; 
</li><li>　&lt;property name=<font color="#ff33ff">"sessionFactory"</font>&gt; 
</li><li>　　&lt;ref bean=<font color="#ff33ff">"sessionFactory"</font>/&gt; 
</li><li>　&lt;/property&gt; 
</li><li>&lt;/bean&gt; </li></ol></div><br /><br />　　下面定义事务管理策略，我们希望把策略定义在方法这个级别上，提供最大的灵活性，本例中将add方法定义为：PROPAGATION_REQUIRES_NEW，这可以保证它将始终运行在一个事务中。<br /><br /><div class="codeStyle"><ol><li>&lt;bean id=<font color="#ff33ff">"transactionAttributeSource"</font> <b><font color="#0000ff">class</font></b>=<font color="#ff33ff">"org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource"</font>&gt; 
</li><li>　&lt;property name=<font color="#ff33ff">"properties"</font>&gt; 
</li><li>　　&lt;props&gt; 
</li><li>　　　&lt;prop key=<font color="#ff33ff">"add"</font>&gt; 
</li><li>　　　　PROPAGATION_REQUIRES_NEW 
</li><li>　　　&lt;/prop&gt; 
</li><li>　　&lt;/props&gt; 
</li><li>　&lt;/property&gt; 
</li><li>&lt;/bean&gt; </li></ol></div><br /><br />　　我们不仅可以为add方法定义事务策略,还可以定义事务隔离程度和回滚策略,他们以逗号隔开,比如我们的add事务可以定义为:<br /><br /><div class="codeStyle"><ol><li>&lt;prop key=<font color="#ff33ff">"add"</font>&gt; 
</li><li>    PROPAGATION_REQUIRES_NEW,-ExamerException 
</li><li>&lt;/prop&gt; </li></ol></div><br /><br />　　这个事务策略表示add方法将会独占一个事务，当事务过程中产生ExamerException异常，事务会回滚。<br /><br />　　Add/update/del都是写入方法，对于select（读取）方法，我们可以指定较为复杂的事务策略，比如对于loadAll()方法：<br /><br />　 
<div class="codeStyle"><ol><li>&lt;prop key=”loadAll”&gt; 
</li><li>　　PROPAGATION_SUPPORTS,ISOLATION_READ_COMMITED,readOnly 
</li><li>　&lt;/prop&gt; </li></ol></div><br /><br />　　该事务的含义为，loadAll方法支持事务，不会读取未提交的数据，它的数据为只读（可提高执行速度）。<br /><br />　　如你所见，我们的StudentManagerInterface接口中还有一个loadById(int id)方法，也许我们将来还会有很多的loadByXXXX的方法，难道要一一为他们指定事务策略？太烦人了，他们应该和loadAll()一样，所以我们可以使用通配符，定义所有的loadXXXX方法：<br /><br />     
<div class="codeStyle"><ol><li>&lt;prop key=”load*”&gt; 
</li><li>        PROPAGATION_SUPPORTS,ISOLATION_READ_COMMITED,readOnly 
</li><li>    &lt;/prop&gt; </li></ol></div><br /><br />　现在可以定义事务管理器：<br /><div class="codeStyle"><ol><li>&lt;bean id=<font color="#ff33ff">"studentManager"</font> <b><font color="#0000ff">class</font></b>=<font color="#ff33ff">"org.springframework.transaction.interceptor.TransactionProxyFactoryBean"</font>&gt; 
</li><li>　&lt;property name=<font color="#ff33ff">"target"</font>&gt; 
</li><li>　　&lt;ref bean=<font color="#ff33ff">"studentManager"</font>/&gt; 
</li><li>　&lt;/property&gt; 
</li><li>　&lt;property name=<font color="#ff33ff">"transactionManager"</font>&gt; 
</li><li>　　&lt;ref bean=<font color="#ff33ff">"transactionManager"</font>/&gt; 
</li><li>　&lt;/property&gt; 
</li><li>　&lt;property name=<font color="#ff33ff">"transactionAttributeSource"</font>&gt; 
</li><li>　　&lt;ref bean=<font color="#ff33ff">"transactionAttributeSource"</font>/&gt; 
</li><li>　&lt;/property&gt; 
</li><li>&lt;/bean&gt; </li></ol></div><br />　　这个bean的外观是一个接口(StudentManagerInterface)，我们指出了它的具体实现(studentManager)，而且为它绑定了事务策略。在客户端使用的时候，获得对象是StudentManagerInterface，所有的操作都是针对这个接口的。测试代码并没有改变，我们虽然修改了很多地方，加入了事务控制，但是客户端并没有受到影响，这也体现了spring的一些优势。测试代码如下：<br /><br />　　 
<div class="codeStyle"><ol><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">void</font></b> testAdd()  
</li><li>    { 
</li><li>        ApplicationContext ctx=<b><font color="#0000ff">new</font></b> ClassPathXmlApplicationContext(<font color="#ff33ff">"springConfig.xml"</font>); 
</li><li>        StudentManager sm=(StudentManager)ctx.getBean(<font color="#ff33ff">"studentManager"</font>); 
</li><li>         
</li><li>        Student s=<b><font color="#0000ff">new</font></b> Student(); 
</li><li>        s.setId(1); 
</li><li>        s.setName(<font color="#ff33ff">"bromon"</font>); 
</li><li>        s.setPassword(<font color="#ff33ff">"123"</font>); 
</li><li>        s.setGrade(1); 
</li><li>        s.setSex(0); 
</li><li>         
</li><li>        sm.add(s); 
</li><li>} </li></ol></div><br />  通过以上的代码可以看出，spring可以简单的把普通的java class纳入事务管理，声明性的事务操作起来也很容易。有了spring之后，声明性事务不再是EJB独有，我们不必为了获得声明性事务的功能而去忍受EJB带来的种种不便。<br /><br />  我所使用的mysql是不支持事务的，你可以更换使用PostgreSQL，有了spring+hibernate，更换db并不像以前那样恐怖了，步骤很简单：<br /><br />1、    添加PostgreSQL的jdbc驱动<br />2、    修改dataSource配置，包括驱动名称、url、帐号、密码<br />3、    修改sessionFactory的数据库dailet为net.sf.hibernate.dialect.PostgreSQLDialect<br />4、    修改hbm.xml中的主键生成策略为increment<br /><br />所有的修改都在配置文件中完成，业务代码不需要任何修改，我很满意，How about u?<br /><br />附A　　pring中的所有事务策略<br /><br />　　　　PROPAGATION_MANDATORY<br />　　　　PROPAGATION_NESTED            <br />　　　　PROPAGATION_NEVER            <br />　　　　PROPAGATION_NOT_SUPPORTED<br />　　　　PROPAGATION_REQUIRED<br />　　　　PROPAGATION_REQUIRED_NEW<br />　　　　PROPAGATION_SUPPORTS<br /><br />附B　　Spring中所有的隔离策略：<br /><br />　　　　ISOLATION_DEFAULT<br />　　　　ISOLATION_READ_UNCOMMITED<br />　　　　ISOLATION_COMMITED<br />　　　　ISOLATION_REPEATABLE_READ<br />　　　　ISOLATION_SERIALIZABLE<br /><br /><img src ="http://www.blogjava.net/matthew2006/aggbug/87666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-14 11:32 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/14/87666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Learn Spring in spring(三)－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/14/87665.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Thu, 14 Dec 2006 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/14/87665.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/87665.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/14/87665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/87665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/87665.html</trackback:ping><description><![CDATA[三、spring中的hibernate开发<br /><br />Bromon原创 请尊重版权<br /><br />　　spring中对hibernate的支持是非常强大的，从一个简单的例子就看得出来，从这个例子中我们还将对所谓的轻量级容器做一些讨论。<br /><br />　　首先需要配置数据源，通常我们有两种方式获得Connection，一是自己编写代码获得连接，二是从JNDI环境中得到DataSource，然后产生一个Connection。无论怎样，既然是spring下面的对象，就应该注册到配置文件中。假设我们需要一个连接mysql下面一个叫做examer的数据库，手动方式的配置是：<br /><br /><div class="codeStyle"><ol><li>&lt;bean id=<font color="#ff33ff">"dataSource"</font> <b><font color="#0000ff">class</font></b>=<font color="#ff33ff">"org.apache.commons.dbcp.BasicDataSource"</font> destroy-method=<font color="#ff33ff">"close"</font>&gt; 
</li><li>　　&lt;property name=<font color="#ff33ff">"driverClassName"</font>&gt; 
</li><li>　　　　&lt;value&gt;com.mysql.jdbc.<font color="#ff0000">Driver</font>&lt;/value&gt; 
</li><li>　　&lt;/property&gt; 
</li><li>　　&lt;property name=<font color="#ff33ff">"url"</font>&gt; 
</li><li>　　　　&lt;value&gt;jdbc:mysql:<i><font color="#339900">//localhost/examer&lt;/value&gt;</font></i></li><li>　　&lt;/property&gt; 
</li><li>　　&lt;property name=<font color="#ff33ff">"username"</font>&gt; 
</li><li>　　　　&lt;value&gt;root&lt;/value&gt; 
</li><li>　　&lt;/property&gt; 
</li><li>　　&lt;property name=<font color="#ff33ff">"password"</font>&gt; 
</li><li>　　　　&lt;value&gt;&lt;/value&gt; 
</li><li>　　&lt;/property&gt; 
</li><li>&lt;/bean&gt; </li></ol></div><br /><br />　　很好读是不是？假如我们使用JNDI数据源，那么dataSource的声明就应该是：<br /><br /><div class="codeStyle"><ol><li>&lt;bean id=<font color="#ff33ff">"dataSource"</font> <b><font color="#0000ff">class</font></b>=<font color="#ff33ff">"org.springframework.jndi.JndiObjectFactoryBean"</font>&gt; 
</li><li>　　&lt;property name=<font color="#ff33ff">"jndiName"</font>&gt; 
</li><li>　　　　&lt;value&gt;java:compenvjdbcspringExamer&lt;/value&gt; 
</li><li>　　&lt;/property&gt; 
</li><li>&lt;/bean&gt; </li></ol></div><br />　　你需要在JNDI环境中绑定一个名为jdbc/springExamer的东西，这段代码才有实际意义。另外需要提醒的是，所有的bean声明，它的id必须是唯一的。<br /><br />　　在本系统中，数据库操作是被hibernate封装起来的，所以dataSource是不需要注入到具体的逻辑类中，它只会被注给hibernate的sessionFactory。<br /><br />　　按照常规思路，我们需要在spring中注册hibernate的sessionFactory，它应该是我们自己编写的一个类，获得dataSource，返回sessionFactory，其他的逻辑类通过这个sessionFactory获得session进行数据库操作。<br /><br />　　但是我们有另外一种选择，spring直接提供了对sessionFactory的封装，你只需要注册一个spring自己的类，给它提供必须的属性，它会返回一个org.springframework.orm.hibernate.HibernateTemplate，这个类封装了add、del等操作，它的封装程度相当高，通过它来编写hibernate应用非常简单。但是问题出来了，我们该如何选择？<br /><br />　　表面上看，使用spring自己的库无疑更加简单，但是请注意，spring是一个轻量级的框架，所谓轻量级，一个重要特征就是无侵入性，也就是你使用这套框架，不会被它绑定，被spring管理的类，应该不需要使用它的接口和抽象类，这样你的系统不会对spring产生依赖。但是如果你使用了spring封装的方式去操作hibernate，就必须继承org.springframework.orm.hibernate.support.HibernateDaoSupport类，这导致了绑定。所以做这样的选择是有点痛苦的，如果有一天spring框架不存在了，你的代码怎么升级维护？具体问题只能具体分析，在我们的应用中，完全使用了spring封装的HibernateTemplate，它太好用了，所以容易上瘾。<br /><br />　　假设我们有一张student表，结构很简单：<br /><br />　　 
<div class="codeStyle"><ol><li>id　　　　　　自动增长 
</li><li>　　name　　　　　varchar(40) 
</li><li>　　password　　　varchar(32) 
</li><li>　　grade    　　　　<b><font color="#0000ff">int</font></b>(4)　　　　　　年级 
</li><li>　　sex　　　　　<b><a href="http://www.javaresearch.org/source/jdk142/java/lang/Boolean.java.html" target="_blank"><font class="classLink"><u>Boolean</u></font></a></b>　　　　　　性别(true为男，false为女) </li></ol></div><br />　　设计一个Student类来映射这张表：<br /><br /><div class="codeStyle"><ol><li><i><font color="#339900">/*</font></i></li><li><i><font color="#339900"> * 创建日期 2005-3-17</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">package</font></b> net.bromon.spring.examer.pojo; 
</li><li></li><li><i><font color="#339900">/**</font></i></li><li><i><font color="#339900"> * @author Bromon</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> Student  
</li><li>{ 
</li><li>    <b><font color="#0000ff">private</font></b> <b><font color="#0000ff">int</font></b> id; 
</li><li>    <b><font color="#0000ff">private</font></b> <b><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank"><font class="classLink"><u>String</u></font></a></b> name; 
</li><li>    <b><font color="#0000ff">private</font></b> <b><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank"><font class="classLink"><u>String</u></font></a></b> password; 
</li><li>    <b><font color="#0000ff">private</font></b> <b><font color="#0000ff">int</font></b> grade;<i><font color="#339900">//年级</font></i></li><li>    <b><font color="#0000ff">private</font></b> <b><font color="#0000ff">boolean</font></b> sex; 
</li><li>     
</li><li>    getset方法………. 
</li><li>} </li></ol></div><br />　　编写Student.hbm.xml，让hibernate知道如何去关联student表和Student类，该文件和Student.java在同一目录：<br /><br /><div class="codeStyle"><ol><li>&lt;hibernate-mapping&gt; 
</li><li>　　&lt;<b><font color="#0000ff">class</font></b> name=<font color="#ff33ff">"net.bromon.spring.examer.pojo.Student"</font> table=<font color="#ff33ff">"student"</font>&gt; 
</li><li>　　　　&lt;id name=<font color="#ff33ff">"id"</font> column=<font color="#ff33ff">"id"</font>&gt; 
</li><li>　　　　　　&lt;generator <b><font color="#0000ff">class</font></b>=<font color="#ff33ff">"identity"</font>/&gt; 
</li><li>　　　　&lt;/id&gt; 
</li><li>         
</li><li>　　　　&lt;property name=<font color="#ff33ff">"name"</font> column=<font color="#ff33ff">"name"</font> /&gt; 
</li><li>　　　　&lt;property name=<font color="#ff33ff">"password"</font> column=<font color="#ff33ff">"password"</font> /&gt; 
</li><li>　　　　&lt;property name=<font color="#ff33ff">"grade"</font> column=<font color="#ff33ff">"grade"</font> /&gt; 
</li><li>　　　　&lt;property name=<font color="#ff33ff">"sex"</font> column=<font color="#ff33ff">"sex"</font> /&gt; 
</li><li>　　&lt;/<b><font color="#0000ff">class</font></b>&gt; 
</li><li>&lt;/hibernate-mapping&gt; </li></ol></div><br />　　然后我们可以在spring中配置sessionFactory：<br /><br /><div class="codeStyle"><ol><li>&lt;bean id=<font color="#ff33ff">"sessionFactory"</font>　<b><font color="#0000ff">class</font></b>=<font color="#ff33ff">"org.springframework.orm.hibernate.LocalSessionFactoryBean"</font>&gt; 
</li><li>　　&lt;property name=<font color="#ff33ff">"dataSource"</font>&gt; 
</li><li>　　　　&lt;ref bean=<font color="#ff33ff">"dataSource"</font>/&gt; 
</li><li>　　&lt;/property&gt; 
</li><li>         
</li><li>　　&lt;property name=<font color="#ff33ff">"hibernateProperties"</font>&gt; 
</li><li>　　　　&lt;props&gt; 
</li><li>　　　　　　&lt;prop key=<font color="#ff33ff">"hibernate.dialect"</font>&gt;net.sf.hibernate.dialect.MySQLDialect&lt;/prop&gt; 
</li><li>　　　　&lt;/props&gt; 
</li><li>　　&lt;/property&gt; 
</li><li>         
</li><li>　　&lt;property name=<font color="#ff33ff">"mappingDirectoryLocations"</font>&gt; 
</li><li>　　　　&lt;list&gt; 
</li><li>　　　　　　&lt;value&gt;classpath:/netbromonspringexamerpojo&lt;/value&gt; 
</li><li>　　　　&lt;/list&gt; 
</li><li>　　&lt;/property&gt; 
</li><li>&lt;/bean&gt; </li></ol></div><br />　　其中引用了我们之前注册过的dataSource，mappingDirectoryLocations属性指明了.hbm.xml文件在哪里路径，该文件夹下面的.hbm.xml文件会被全部加载。<br /><br />　　一切都准备就绪，现在我们要加入一个StudentManager类，来进行增删查改的操作：<br /><div class="codeStyle"><ol><li><i><font color="#339900">/*</font></i></li><li><i><font color="#339900"> * 创建日期 2005-3-17</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">package</font></b> net.bromon.spring.examer.student; 
</li><li></li><li><b><font color="#0000ff">import</font></b> net.bromon.spring.examer.pojo.Student; 
</li><li></li><li><b><font color="#0000ff">import</font></b> org.springframework.orm.hibernate.HibernateTemplate; 
</li><li><b><font color="#0000ff">import</font></b> org.springframework.orm.hibernate.LocalSessionFactoryBean; 
</li><li><b><font color="#0000ff">import</font></b> org.springframework.orm.hibernate.support.HibernateDaoSupport; 
</li><li></li><li><i><font color="#339900">/**</font></i></li><li><i><font color="#339900"> * @author Bromon</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> StudentManager <b><font color="#0000ff">extends</font></b> HibernateDaoSupport 
</li><li>{ 
</li><li>    <b><font color="#0000ff">private</font></b> LocalSessionFactoryBean sessionFactory; 
</li><li>    <b><font color="#0000ff">private</font></b> HibernateTemplate ht; 
</li><li>    <b><font color="#0000ff">public</font></b> StudentManager() 
</li><li>    { 
</li><li>        <b><font color="#0000ff">this</font></b>.ht=<b><font color="#0000ff">super</font></b>.getHibernateTemplate(); 
</li><li>    } 
</li><li>     
</li><li>    <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">void</font></b> add(Student s) 
</li><li>    {    
</li><li>        ht.save(s);<i><font color="#339900">//插入一条数据只需要这一行代码</font></i></li><li>    } 
</li><li>} </li></ol></div><br />　　该类只演示了如何增加一个Student，HibernateTemplate还封装了很多有用的方法，请查阅spring文档。StudentManager中的sessionFactory是由spring注入的，但是StudentManager并没有对sessionFactory做任何的处理，这是因为所有的处理都被HibernateDaoSupport.getHibernateTemplate()封装。整个StudentManager中也看不到任何的异常处理，他们也都被基类封装了。<br /><br />　　最后一个步骤就是在spring中注册StudentManger，然后向它注入sessionFactory：<br /><br /><div class="codeStyle"><ol><li>&lt;bean id=<font color="#ff33ff">"studentManager"</font> <b><font color="#0000ff">class</font></b>=<font color="#ff33ff">"net.bromon.spring.examer.student.StudentManager"</font>&gt; 
</li><li>　　&lt;property name=<font color="#ff33ff">"sessionFactory"</font>&gt; 
</li><li>　　　　&lt;ref bean=<font color="#ff33ff">"sessionFactory"</font>/&gt; 
</li><li>　　&lt;/property&gt; 
</li><li>&lt;/bean&gt; </li></ol></div><br /><br />　　所有的配置都完成了，下面做单元测试：<br /><br /><div class="codeStyle"><ol><li><i><font color="#339900">/*</font></i></li><li><i><font color="#339900"> * 创建日期 2005-3-17</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">package</font></b> net.bromon.spring.examer.student.test; 
</li><li></li><li><b><font color="#0000ff">import</font></b> java.io.<b><a href="http://www.javaresearch.org/source/jdk142/java/io/FileInputStream.java.html" target="_blank"><font class="classLink"><u>FileInputStream</u></font></a></b>; 
</li><li></li><li><b><font color="#0000ff">import</font></b> org.springframework.beans.factory.xml.XmlBeanFactory; 
</li><li><b><font color="#0000ff">import</font></b> org.springframework.context.ApplicationContext; 
</li><li><b><font color="#0000ff">import</font></b> org.springframework.context.support.ClassPathXmlApplicationContext; 
</li><li></li><li><b><font color="#0000ff">import</font></b> net.bromon.spring.examer.pojo.Student; 
</li><li><b><font color="#0000ff">import</font></b> net.bromon.spring.examer.student.StudentManager; 
</li><li><b><font color="#0000ff">import</font></b> junit.framework.<a href="http://www.javaresearch.org/source/junit3.8.1/junit/framework/TestCase.java.html" target="_blank"><font class="classLink"><u>TestCase</u></font></a>; 
</li><li></li><li><i><font color="#339900">/**</font></i></li><li><i><font color="#339900"> * @author Bromon</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> TestStudentManager <b><font color="#0000ff">extends</font></b> <a href="http://www.javaresearch.org/source/junit3.8.1/junit/framework/TestCase.java.html" target="_blank"><font class="classLink"><u>TestCase</u></font></a> { 
</li><li></li><li>    <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">void</font></b> testAdd()  
</li><li>    { 
</li><li>        <b><font color="#0000ff">try</font></b></li><li>        { 
</li><li>            ApplicationContext context =<b><font color="#0000ff">new</font></b> ClassPathXmlApplicationContext(<font color="#ff33ff">"springConfig.xml"</font>); 
</li><li>             
</li><li>            Student s=<b><font color="#0000ff">new</font></b> Student(); 
</li><li>            s.setName(<font color="#ff33ff">"bromon"</font>); 
</li><li>            s.setPassword(<font color="#ff33ff">"123"</font>); 
</li><li>            s.setGrade(3); 
</li><li>            s.setSex(<b><font color="#0000ff">true</font></b>); 
</li><li>             
</li><li>            ((StudentManager)context.getBean(<font color="#ff33ff">"studentManager"</font>)).add(s); 
</li><li>        }<b><font color="#0000ff">catch</font></b>(<b><a href="http://www.javaresearch.org/source/jdk142/java/lang/Exception.java.html" target="_blank"><font class="classLink"><u>Exception</u></font></a></b> e) 
</li><li>        { 
</li><li>            e.printStackTrace(); 
</li><li>        } 
</li><li>    } 
</li><li></li><li>} </li></ol></div><br />　　Spring已经将hibernate的操作简化到了非常高的程度，最关键的是整个开发可以由设计来驱动，如果一个团队对spring有足够的熟悉，那么完全可以由设计师规划所有的类，整理清楚类之间的关系，写成配置文件，然后编写hibernate映射文件，将数据表与pojo关联，成员就可以完全在设计方案内工作，利用spring封装好的hibernate模版，开发起来速度非常快，调试也很容易。它能够解决如何在团队内贯彻设计方案的问题。<br /><br />　　由于本文不讲解hibernate的使用，所以相关内容请查阅hibernate文档。<br /><br /><img src ="http://www.blogjava.net/matthew2006/aggbug/87665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-14 11:31 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/14/87665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Learn Spring in spring(二)－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/10/86652.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Sun, 10 Dec 2006 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/10/86652.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/86652.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/10/86652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/86652.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/86652.html</trackback:ping><description><![CDATA[二、spring管理对象的简单例子<br /><br />Bromon原创　请尊重版权<br /><br />　　任何需要交给spring管理的对象，都必须在配置文件中注册，这个过程被称为wiring，下面做一个最简单的Hello world演示，我们将要注册的类如下：<br /><br /><div class="codeStyle"><ol><li><i><font color="#339900">/*</font></i></li><li><i><font color="#339900"> * 创建日期 2005-3-22</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">package</font></b> org.bromon.spring.test; 
</li><li></li><li><i><font color="#339900">/**</font></i></li><li><i><font color="#339900"> * @author Bromon</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> HelloTalker  
</li><li>{ 
</li><li>    <b><font color="#0000ff">public</font></b> <b><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank"><font class="classLink"><u>String</u></font></a></b> greeting() 
</li><li>    { 
</li><li>        <b><font color="#0000ff">return</font></b> <font color="#ff33ff">"hello world"</font>; 
</li><li>    } 
</li><li>} </li></ol></div><br />　　然后我们来编写一个spring配置文件，文件名任意，在我这里它是springConfig.xml，需要注意的是这个文件应该存放在classpath所包含的路径中：<br /><br /><div class="codeStyle"><ol><li>&lt;?xml version=<font color="#ff33ff">"1.0"</font> encoding=<font color="#ff33ff">"UTF-8"</font>?&gt; 
</li><li>&lt;!DOCTYPE beans PUBLIC <font color="#ff33ff">"-//SPRING//DTD BEAN//EN"</font> <font color="#ff33ff">"http://www.springframework.org/dtd/spring-beans.dtd"</font>&gt; 
</li><li>&lt;beans&gt; 
</li><li>　&lt;bean id=”helloTalker” <b><font color="#0000ff">class</font></b>=” org.bromon.spring.test.HelloTalker”&gt; 
</li><li>　&lt;/bean&gt; 
</li><li>&lt;/beans&gt; </li></ol></div><br />　　通过使用bean标签，注册了一个HelloTalker对象，它的名字叫做helloTalker。然后我们编写一个测试类，它的工作是利用spring框架提供的接口，加载配置文件，通过指定对象的id，获得一个对象。它的代码如下：<br /><div class="codeStyle"><ol><li><i><font color="#339900">/*</font></i></li><li><i><font color="#339900"> * 创建日期 2005-3-17</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">package</font></b> org.bromon.spring.test.junit; 
</li><li></li><li><b><font color="#0000ff">import</font></b> java.io.<b><a href="http://www.javaresearch.org/source/jdk142/java/io/FileInputStream.java.html" target="_blank"><font class="classLink"><u>FileInputStream</u></font></a></b>; 
</li><li></li><li><b><font color="#0000ff">import</font></b> org.springframework.beans.factory.xml.XmlBeanFactory; 
</li><li><b><font color="#0000ff">import</font></b> org.springframework.context.ApplicationContext; 
</li><li><b><font color="#0000ff">import</font></b> org.springframework.context.support.ClassPathXmlApplicationContext; 
</li><li></li><li><b><font color="#0000ff">import</font></b> org.bromon.spring.test; 
</li><li></li><li><i><font color="#339900">/**</font></i></li><li><i><font color="#339900"> * @author Bromon</font></i></li><li><i><font color="#339900"> */</font></i></li><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> TestStudentManager <b><font color="#0000ff">extends</font></b> TestCase { 
</li><li></li><li>    <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">void</font></b> testHelloTalker()  
</li><li>    { 
</li><li>        <b><font color="#0000ff">try</font></b></li><li>        { 
</li><li>            ApplicationContext context =<b><font color="#0000ff">new</font></b> ClassPathXmlApplicationContext(<font color="#ff33ff">"springConfig.xml"</font>); 
</li><li>             
</li><li>HelloTalker ht=(HelloTalker)context.getBean(“helloTalker”); 
</li><li><b><a href="http://www.javaresearch.org/source/jdk142/java/lang/System.java.html" target="_blank"><font class="classLink"><u>System</u></font></a></b>.out.println(ht.greeting()); 
</li><li>        }<b><font color="#0000ff">catch</font></b>(<b><a href="http://www.javaresearch.org/source/jdk142/java/lang/Exception.java.html" target="_blank"><font class="classLink"><u>Exception</u></font></a></b> e) 
</li><li>        { 
</li><li>            e.printStackTrace(); 
</li><li>        } 
</li><li>    } 
</li><li></li><li>} </li></ol></div><br />　　这个程序就完成了，因为只有一个对象HelloTalker被注册到了spring中，所以不存在对象间的依赖，当然也就不涉及依赖注入。下面演示一个简单的依赖注入：<br /><br />　　第一步是修改HelloTalker，增加一个String name属性：<br /><div class="codeStyle"><ol><li><b><font color="#0000ff">public</font></b> <b><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank"><font class="classLink"><u>String</u></font></a></b> name; </li></ol></div><br /><br />　　为该属性编写set方法，该方法必须严格遵守javabean的命名规则：<br /><div class="codeStyle"><ol><li><b><font color="#0000ff">public</font></b> <b><font color="#0000ff">void</font></b> setName(<b><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank"><font class="classLink"><u>String</u></font></a></b> name) 
</li><li>{ 
</li><li>　　<b><font color="#0000ff">this</font></b>.name=name; 
</li><li>} </li></ol></div><br />　　修改greeting方法：<br /><br /><div class="codeStyle"><ol><li><b><font color="#0000ff">public</font></b> <b><a href="http://www.javaresearch.org/source/jdk142/java/lang/String.java.html" target="_blank"><font class="classLink"><u>String</u></font></a></b> greeting() 
</li><li>{ 
</li><li>　　<b><font color="#0000ff">return</font></b> <font color="#ff33ff">"hello "</font>+name; 
</li><li>} </li></ol></div><br />　　如你所见，name属性没有初试化，因为它的值将在运行过程中被spring动态注射入。<br /><br />　　第二步，修改springConfig.xml中唯一的这个bean配置：<br /><br /><div class="codeStyle"><ol><li>&lt;bean id=”helloTalker” <b><font color="#0000ff">class</font></b>=” org.bromon.spring.test.HelloTalker”&gt; 
</li><li>　&lt;property name=”name”&gt; 
</li><li>　　&lt;value&gt;bromon&lt;/value&gt; 
</li><li>　&lt;/property&gt; 
</li><li>&lt;/bean&gt; </li></ol></div><br /><br />　　修改完成。我们将一个名字”bromon”写死在springConfig.xml中，它会被动态的注入到HelloTalker的name属性中，greeting方法将会把它打印出来。重新运行刚才的junit类，可以看到结果。<br /><br />　　我们只演示了如何注入一个最简单的String，实际上我们可以注入任何值类型，也可以注入任何类的实例，也可以注入List、Map、Properties。配置文件管理了所有的对象和对象间的关系，而对象则只负责执行自己的功能，他们的职责越少，藕合度越低，系统就越容易测试，管理维护也更容易。<br /><br />　　&lt;bean&gt;标签还有很多属性，用于指定对象如何被实例化，它也有很多子标签用于配置对象的属性，请大家参考相关的DTD和文档，能够很快的掌握。本系列文章不是spring手册，spring的基础知识请参考spring in action，足够详细准确。后面的章节更多的讨论系统设计、开发的一些细节和高级特性。<br /><img src ="http://www.blogjava.net/matthew2006/aggbug/86652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-10 11:28 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/10/86652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Learn Spring in spring(一)－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/10/86651.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Sun, 10 Dec 2006 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/10/86651.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/86651.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/10/86651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/86651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/86651.html</trackback:ping><description><![CDATA[Bromon原创 请尊重版权<br /><br />　　当前的形势是，非常多的Java程序员言必称Spring，如此大面积的程序员集体叫”春”，体现了Spring框架的威力。春天正是叫春的好时候，你我一起来叫春吧。^_^<br /><br />　　Spring的设计目的是简化J2EE开发，所以如果我们学习、使用它的时候还需要抓破头皮口吐白沫的话，岂不是个笑话？就我的经验来说，Spring在这方面做得很好，的确是一个很牛叉易用的框架。<br /><br />　　之前我曾经设计过一个J2EE的考试系统，大量使用了EJB（详见<a href="http://blog.csdn.net/bromon/archive/2004/08/27/86291.aspx">http://blog.csdn.net/bromon/archive/2004/08/27/86291.aspx</a>），我打算同样使用一个考试系统做例子，便于比较。两个系统的大致结构都差不多，不过新的版本采用了轻量级的方案，使用Hibernate作为ORM框架，所有的对象都交给spring来管理。<br /><br />一、IoC与DI<br /><br />　　首先想说说IoC（Inversion of Control，控制倒转）。这是spring的核心，贯穿始终。所谓IoC，对于spring框架来说，就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢，举个简单的例子，我们是如何找女朋友的？常见的情况是，我们到处去看哪里有长得漂亮身材又好的mm，然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………，想办法认识她们，投其所好送其所要，然后嘿嘿……这个过程是复杂深奥的，我们必须自己设计和面对每个环节。传统的程序开发也是如此，在一个对象中，如果要使用另外的对象，就必须得到它（自己new一个，或者从JNDI中查询一个），使用完之后还要将对象销毁（比如Connection等），对象始终会和其他的接口或类藕合起来。<br /><br />　　那么IoC是如何做的呢？有点像通过婚介找女朋友，在我和女朋友之间引入了一个第三者：婚姻介绍所。婚介管理了很多男男女女的资料，我可以向婚介提出一个列表，告诉它我想找个什么样的女朋友，比如长得像李嘉欣，身材像林熙雷，唱歌像周杰伦，速度像卡洛斯，技术像齐达内之类的，然后婚介就会按照我们的要求，提供一个mm，我们只需要去和她谈恋爱、结婚就行了。简单明了，如果婚介给我们的人选不符合要求，我们就会抛出异常。整个过程不再由我自己控制，而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此，所有的类都会在spring容器中登记，告诉spring你是个什么东西，你需要什么东西，然后spring会在系统运行到适当的时候，把你要的东西主动给你，同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制，也就是说控制对象生存周期的不再是引用它的对象，而是spring。对于某个具体的对象而言，以前是它控制其他对象，现在是所有对象都被spring控制，所以这叫控制反转。如果你还不明白的话，我决定放弃。<br /><br />　　IoC的一个重点是在系统运行中，动态的向某个对象提供它所需要的其他对象。这一点是通过DI（Dependency Injection，依赖注入）来实现的。比如对象A需要操作数据库，以前我们总是要在A中自己编写代码来获得一个Connection对象，有了spring我们就只需要告诉spring，A中需要一个Connection，至于这个Connection怎么构造，何时构造，A不需要知道。在系统运行时，spring会在适当的时候制造一个Connection，然后像打针一样，注射到A当中，这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常运行，而这个Connection是由spring注入到A中的，依赖注入的名字就这么来的。那么DI是如何实现的呢？Java 1.3之后一个重要特征是反射（reflection），它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性，spring就是通过反射来实现注入的。关于反射的相关资料请查阅java doc。<br /><br />　　理解了IoC和DI的概念后，一切都将变得简单明了，剩下的工作只是在spring的框架中堆积木而已。<br /><img src ="http://www.blogjava.net/matthew2006/aggbug/86651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-10 11:27 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/10/86651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet容器工作原理讲解(4)－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/06/85802.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Wed, 06 Dec 2006 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/06/85802.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/85802.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/06/85802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/85802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/85802.html</trackback:ping><description><![CDATA[Application 2 <br /><br />第一个应用程序里存在一个值得注意的问题。 在ServletProcessor1 类的 process 方法里,上溯 (upcast)ex02.pyrmont.Request 实例到 javax.servlet.ServletRequest，将其作为第一个参数传递给 servlet 的 service 方法。另上溯(upcast) ex02.pyrmont.Response 实例到 javax.servlet.ServletResponse ，并将其作为第二个参数传递给 servlet 的 service 方法。 <br /><br /><b>try {<br />   servlet = (Servlet) myClass.newInstance();<br />   servlet.service((ServletRequest) request, (ServletResponse) response);<br />}</b><br /><br />这样会使安全性能大打折扣。 知道 servlet 容器工作原理的程序员可以将 ServletRequest 和 ServletResponse 实例向下转型 (downcast) 到Request 和 Response ，并调用它们的 public 方法。 Request 实例能调用它的 parse 方法； Request 实例能调用它的 sendStaticResource 方法。 <br /><br />可以将 parse 和 sendStaticResource 方法设为 private，因为在 ex02.pyrmont 里将会从其他类里调用它们。 然而，这两个方法在 servlet 内应该是不可用的。 一个解决方法是：给 Request 和 Response 类一个默认的访问修饰符，以致他们在 ex02.pyrmont 外不能被使用。 但还有一个更好的解决方法： 使用 facade 类。 <br /><br />在第二个应用程序内，添加两个 facade 类：RequestFacade 和 ResponseFacade。 RequestFacade 类实现 ServletRequest 接口，并通过传递 Request 实例来实例化， Request 实例将在 ServletRequest 对象的构建器里被引用 。 ServletRequest 对象本身是 private 类型的，不能在类之外访问。就构建 RequestFacade 对象，并将其传递给 service 方法，而不上溯 (upcast) Request 对象给 ServletRequest，并将其传递给 service 方法。 servlet 程序员仍旧可以向下转型 (downcast) ServletRequest 到 RequestFacade,但是，只要访问 ServletRequest 接口的可用方法就可以了。现在，parseUri 就安全了。 <br /><br />Listing 2.5 显示 RequestFacade 类部分代码： <br /><br />Listing 2.5. RequestFacade 类 <br /><br /><b>package ex02.pyrmont;<br />public class RequestFacade implements ServletRequest {<br />    private ServletRequest request = null;<br />    public RequestFacade(Request request) {<br />        this.request = request;<br />    }    /* implementation of the ServletRequest*/<br />    public Object getAttribute(String attribute) {<br />        return request.getAttribute(attribute);<br />    }<br />    public Enumeration getAttributeNames() {<br />        return request.getAttributeNames();<br />    }<br />    ...<br />}</b><br /><br />注意 RequestFacade 构造函数。 它会接受一个 Request 对象，即刻分配给私有的 servletRequest 对象引用。 还要注意，RequestFacade 内的每个方法调用 ServletRequest 对象内相应的方法。 <br /><br />ResponseFacade 类也是如此。 <br /><br />以下是 application 2 所包含的类 <br /><br />HttpServer2<b><br />Request <br />Response <br />StaticResourceProcessor <br />ServletProcessor2 <br />Constants HttpServer2 类类似于 HttpServer1，<br />只是它在 await 方法内使用了 ServletProcessor2 而不是ServletProcessor1。<br />if (request.getUri().startsWith("/servlet/")) {<br />   ServletProcessor2 processor = new ServletProcessor2();<br />   processor.process(request, response);<br />}else {<br />    ...<br />      }<br />ServletProcessor2 类也类似于 ServletProcessor1，<br />只是在以下 process 方法的部分代码有点不同：<br />Servlet servlet = null;<br />RequestFacade requestFacade   = new RequestFacade(request);<br />ResponseFacade responseFacade = new ResponseFacade(response);<br />try {<br />    servlet = (Servlet) myClass.newInstance();<br />    servlet.service((ServletRequest) requestFacade,(ServletResponse) responseFacade);<br />}</b><br /><br />编译并运行该应用程序 <br /><br />如果要编译该应用程序，在工作目录下键入以下命令： <br /><br /><b>javac -d . -classpath ./lib/servlet.jar src/ex02/pyrmont/*.java </b><br /><br />如果要在 windows 下运行该应用程序，在工作目录下键入以下命令： <br /><br /><b>java-classpath ./lib/servlet.jar;./ ex02.pyrmont.HttpServer2 </b><br /><br />在linux环境下，使用分号来隔开类库： <br /><br /><b>java -classpath ./lib/servlet.jar:./ ex02.pyrmont.HttpServer2 </b><br /><br />您可以使用和 application 1 相同的 URL 以收到同样的结果。 <br /><br />总结 <br /><br />本文讨论了简单的能够用于服务静态资源，以及处理如 PrimitiveServlet 一样简单的 servlet 的 servlet 容器。 同时也提供 javax.servlet.Servlet 的背景信息。  <br /><img src ="http://www.blogjava.net/matthew2006/aggbug/85802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-06 12:40 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/06/85802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet容器工作原理讲解(3)－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/06/85801.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Wed, 06 Dec 2006 04:39:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/06/85801.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/85801.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/06/85801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/85801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/85801.html</trackback:ping><description><![CDATA[ServletProcessor1 类 <br /><br />ServletProcessor1 类用来处理对 servlet 的 HTTP 请求。 它非常简单，只包含了一个 process 方法。 而这个方法接受两个参数： 一个javax.servlet.ServletRequest 实例和一个 avax.servlet.ServletResponse实例。 process 方法也构建了一个 java.net.URLClassLoader 对象并使用它装载 servlet 类文件。 在从类装载器获得的 Class 对象上，process 方法创建一个 servlet 实例并调用它的 service 方法。 <br /><br />process 方法 <br /><br />Listing 2.4. ServletProcessor1 类中 process 方法 <br /><br /><b>public void process(Request request, Response response) {<br />    String uri            = request.getUri();<br />    String servletName    = uri.substring(uri.lastIndexOf("/") + 1);    URLClassLoader loader = null;<br />    try {        <br />// create a URLClassLoader<br />        URLStreamHandler streamHandler = null;<br />        URL[] urls        = new URL[1];<br />        File classPath    = new File(Constants.WEB_ROOT);<br />        String repository = (new URL("file", null,             classPath.getCanonicalPath() + File.separator)).toString();<br />        urls[0]           = new URL(null, repository, streamHandler);<br />        loader            = new URLClassLoader(urls);<br />    }    catch (IOException e) {<br />        System.out.println(e.toString());<br />    }    Class myClass = null;<br />    try {<br />        myClass = loader.loadClass(servletName);<br />    }    catch (Exception e) {<br />        System.out.println(e.toString());<br />    }    Servlet servlet = null;<br />    try {<br />        servlet = (Servlet) myClass.newInstance();<br />        servlet.service((ServletRequest) request, (ServletResponse) response);<br />    }    catch (Exception e) {<br />        System.out.println(e.toString());<br />    }    catch (Throwable e) {<br />        System.out.println(e.toString());<br />    }<br />}</b><br /><br />process方法接受两个参数:一个 ServletRequest实例和一个 ServletResponse 实例。process方法通过调用 getRequestUri 方法从 ServletRequest获取 URI。 <br />String uri = request.getUri();切记 URI 的格式： <br /><br /><b>/servlet/servletName </b><br /><br />servletName是servlet类的名称。 <br /><br />如果要装载 servlet 类，则需要使用以下代码从 URI 获知 servlet 名称：String servletName = uri.substring(uri.lastIndexOf("/") + 1);然后 process 方法装载 servlet。要做到这些，需要创建一个类装载器，并告诉装载器该类的位置， 该 servlet 容器可以指引类装载器在 Constants.WEB_ROOT 指向的目录中查找。 在工作目录下，WEB_ROOT 指向 webroot/ 目录。 <br /><br />如果要装载一个 servlet，则要使用 java.net.URLClassLoader 类，它是java.lang.ClassLoader 的间接子类。 一旦有了 URLClassLoader 类的实例，就可以使用 loadClass 方法来装载一个 servlet 类。 实例化 URLClassLoader 是很简单的。 该类有三个构建器，最简单的是： <br /><br /><b>public URLClassLoader(URL[] urls); </b><br /><br />urls 是一组指向其位置 java.net.URL 对象， 当装载一个类时它会自动搜索其位置。任一以 / 结尾的 URL 都被假定为一目录， 否则，就假定其为 .jar 文件，在需要时可以下载并打开。 <br /><br />在一个 servlet 容器内，类装载器查找 servlet 类的位置称为储存库 (repository)。在所举的应用程序中，类装载器只可在当前工作目录下的 webroot/ 目录查找，所以，首先得创建一组简单的 URL。 URL 类提供了多个构建器，因此有许多的方法来构建一个URL 对象。 在这个应用程序内，使用了和 TOMCAT 内另外一个类所使用的相同的构建器。 该构建器头部 (signature) 如下： <br /><br />public URL(URL context, String spec, URLStreamHandler hander) <br /><br />throws MalformedURLException <br /><br />可以通过传递给第二个参数一个规范，传递给第一个和第三个参数 null 值来使用这个构建器， 但在些有另外一种可接受三个参数的构建器： <br /><br />public URL(String protocol, String host, String file) <br /><br />throws MalformedURLException <br /><br />因此，如果只写了以下代码，编译器将不知道是使用的哪个构建器： <br /><br />new URL(null, aString, null); <br /><br />当然也可以能过告诉编译器第三个参数的类型来避开这个问题，如： <br /><br />URLStreamHandler streamHandler = null; <br /><br />new URL(null, aString, streamHandler); <br /><br />对于第二个参数，可以传递包含储存库 (repository) 的 String 。 以下代码可创建： <br /><br />String repository = (new URL("file", null, <br /><br />classPath.getCanonicalPath() + File.separator)).toString(); <br /><br />结合起来，以下是构建正确 URLClassLoader 实例的 process 方法的部分代码 <br /><br /><b>// create a URLClassLoader<br />URLStreamHandler streamHandler = null;<br />URL[] urls        = new URL[1];<br />File classPath    = new File(Constants.WEB_ROOT);<br />String repository = (new URL("file", null,     classPath.getCanonicalPath() + File.separator)).toString() <br />urls[0]           = new URL(null, repository, streamHandler);<br />loader            = new URLClassLoader(urls);</b><br /><br />创建储存库 (repository)的代码摘自org.apache.catalina.startup.ClassLoaderFactory内的 createClassLoader 方法，而创建 URL 的代码摘自org.apache.catalina.loader.StandardClassLoader 类内的 addRepository 方法。 但在此阶段您还没有必要去关心这些类。 <br /><br />有了类装载器，您可以使用loadClass方法装载servlet类： <br /><br /><b>Class myClass = null;<br />try {<br />    myClass = loader.loadClass(servletName);<br />    }catch (ClassNotFoundException e) {<br />    System.out.println(e.toString());<br />}</b><br />然后，process方法创建已装载的 servlet类的实例，传递给 javax.servlet.Servlet ，并激活 servlet 的 service 方法： <br /><br /><b>Servlet servlet = null;<br />try {<br />    servlet = (Servlet) myClass.newInstance();<br />    servlet.service((ServletRequest) request, (ServletResponse) response);<br />}catch (Exception e) {<br />    System.out.println(e.toString());<br />}catch (Throwable e) {<br />    System.out.println(e.toString());<br />}</b><br /><br />编译并运行该应用程序 <br />如果要编译该应用程序，在工作目录下键入以下命令： <br /><b>javac -d . -classpath ./lib/servlet.jar src/ex02/pyrmont/*.java </b><br />如果要在 windows 下运行该应用程序，在工作目录下键入以下命令： <br /><b>java -classpath ./lib/servlet.jar;./ ex02.pyrmont.HttpServer1 </b><br />在 linux 环境下，使用冒号来隔开类库： <br /><b>java -classpath ./lib/servlet.jar:./ ex02.pyrmont.HttpServer1 </b><br />如果要测试该应用程序，请在 URL 或浏览器地址栏键入以下命令： <br /><b><a href="http://localhost:8080/index.html">http://localhost:8080/index.html</a> </b><br />或者是： <br /><b><a href="http://localhost:8080/servlet/PrimitiveServlet">http://localhost:8080/servlet/PrimitiveServlet</a> </b><br />您将会在浏览器中看到以下文本： <br /><b>Hello. Roses are red.</b> <br />注意：您不能看到第二行字符 (Violets are blue),因为只有第一行字符送入到浏览器。 Tomcat 运行工作原理 随后的章节会告诉您怎样来解决这个问题。 <br /><br /><script type="text/javascript"><!--
google_ad_client = "pub-7390275636631344";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="5095444487";
google_color_border = "336699";
google_color_bg = "FFFFFF";
google_color_link = "0000FF";
google_color_url = "008000";
google_color_text = "000000";
//--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script><img src ="http://www.blogjava.net/matthew2006/aggbug/85801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-06 12:39 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/06/85801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet容器工作原理讲解(1)－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/12/06/85798.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Wed, 06 Dec 2006 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/12/06/85798.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/85798.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/12/06/85798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/85798.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/85798.html</trackback:ping><description><![CDATA[本文介绍一个简单 servlet 容器的基本原理。<br />Servlet容器工作原理讲解本文介绍一个简单 servlet 容器的基本原理。现有两个servlet容器，第一个很简单，第二个则是根据第一个写出。为了使第一个容器尽量简单，所以没有做得很完整。复杂一些的 servlet容器（包括TOMCAT4和5）在TOMCAT运行内幕的其他章节有介绍。 <br /><br />两个servlet容器都处理简单的 servlet及staticResource。您可以使用 webroot/ 目录下的 PrimitiveServlet 来测试它。复杂一些的 servlet会超出这些容器的容量，您可以从 TOMCAT 运行内幕 一书学习创建复杂的 servlet 容器。 <br /><br />两个应用程序的类都封装在ex02.pyrmont 包下。在理解应用程序如何运作之前，您必须熟悉 javax.servlet.Servlet 接口。首先就来介绍这个接口。随后，就介绍servlet容器服务servlet的具体内容。 <br /><br />javax.servlet.Servlet 接口 <br /><br />servlet 编程，需要引用以下两个类和接口：javax.servlet 和 javax.servlet.http，在这些类和接口中，javax.servlet.Servlet接口尤为重要。所有的 servlet 必须实现这个接口或继承已实现这个接口的类。 <br /><br />Servlet 接口有五个方法，如下 <br /><br /><b>public void init(ServletConfig config) throws ServletException<br />public void service(ServletRequest request, ServletResponse response)throws ServletException, java.io.IOException  <br />public void destroy()  <br />public ServletConfig getServletConfig()  <br />public java.lang.String getServletInfo()</b><br /><br />init、 service和 destroy 方法是 Servlet 生命周期的方法。当 Servlet 类实例化后，容器加载 init，以通知 servlet 它已进入服务行列。init 方法必须被加载，Servelt 才能接收和请求。如果要载入数据库驱动程序、初始化一些值等等，程序员可以重写这个方法。在其他情况下，这个方法一般为空。 <br /><br />service 方法由 Servlet 容器调用，以允许 Servlet 响应一个请求。Servlet 容器传递 javax.servlet.ServletRequest 对象和 javax.servlet.ServletResponse 对象。ServletRequest 对象包含客户端 HTTP 请求信息，ServletResponse 则封装servlet 响应。这两个对象，您可以写一些需要 servlet 怎样服务和客户怎样请求的代码。 <br /><br />从service中删除Servlet实例之前，容器调用destroy方法。在servlet容器关闭或servlet容器需要更多的内存时，就调用它。这个方法只有在servlet的 service方法内的所有线程都退出的时候，或在超时的时候才会被调用。在 servlet 容器调用 destroy方法之后，它将不再调用servlet的service方法。destroy 方法给了 servlet 机会，来清除所有候住的资源（比如：内存，文件处理和线程），以确保在内存中所有的持续状态和 servlet的当前状态是同步的。Listing 2.1 包含了PrimitiveServlet 的代码，此servlet非常简单，您 可以用它来测试本文中的servlet容器应用程序。 <br /><br />PrimitiveServlet 类实现了javax.servlet.Servlet 并提供了五个servlet方法的接口 。它做的事情也很简单：每次调用 init,service 或 destroy方法的时候，servlet就向控制口写入方法名。service 方法也从ServletResponsec对象中获得java.io.PrintWriter 对象，并发送字符串到浏览器。 <br /><br /><b>Listing 2.1.PrimitiveServlet.java<br />import javax.servlet.*;<br />import java.io.IOException;<br />import java.io.PrintWriter;<br />public class PrimitiveServlet implements Servlet { <br />public void init(ServletConfig config) throws ServletException {<br />   System.out.println("init");<br />    } <br />public void service(ServletRequest request, ServletResponse  response) throws ServletException, IOException {<br />      System.out.println("from service");<br />      PrintWriter out = response.getWriter();<br />      out.println("Hello.Roses are red.");<br />      out.print("Violets are blue.");<br />    } <br />public void destroy() {<br />    System.out.println("destroy");<br />    }<br />public String getServletInfo() {<br />   return null;    <br />    } <br />public ServletConfig getServletConfig() {<br />    return null;<br />    }<br />}</b><br /> <br />Application 1 <br /><br />现在，我们从 servlet容器的角度来看看 servlet 编程。一个功能健全的 servlet容器对于每个 servlet 的HTTP请求会完成以下事情： <br />当servlet 第一次被调用的时候，加载了 servlet类并调用它的init方法（仅调用一次） <br />响应每次请求的时候 ，构建一个javax.servlet.ServletRequest 和 javax.servlet.ServletResponse实例。 <br />激活servlet的service方法，传递 ServletRequest 和 ServletResponse 对象。 <br />当servlet类关闭的时候，调用servlet的destroy方法，并卸载servlet类。 <br />发生在 servlet 容器内部的事就复杂多了。只是这个简单的servlet容器的功能不很健全，所以，这它只能运行非常简单的servelt ，并不能调用servlet的init和destroy方法。然而，它也执行了以下动作： <br />等待HTTP请求。 <br />构建ServletRequest和ServletResponse对象 <br />如果请求的是一个staticResource，就会激活StaticResourceProcessor实例的 process方法，传递ServletRequest 和 ServletResponse 对象。 <br /><br />如果请求的是一个servlet ,载入该类，并激活它的service方法，传递ServletRequest和ServletResponse 对象。注意：在这个servlet 容器，每当 servlet被请求的时候该类就被载入。 <br /><br />在第一个应用程序中，servlet容器由六个类组成 。 <br /><br /><b>HttpServer1 <br />Request <br />Response <br />StaticResourceProcessor <br />ServletProcessor1 <br />Constants </b><br /><br />证如前文中的应用程序一样，这个程序的进入口（静态 main 方法）是HttpServer 类。这个方法创建了HttpServer实例，并调用它的await方法。这个方法等待 HTTP 请示，然后创建一个 request 对象和 response对象，根据请求是否是staticResource还是 servlet 来分派它们到 StaticResourceProcessor实例或ServletProcessor实例。 <br /><br />Constants 类包含 static find WEB_ROOT，它是从其他类引用的。 WEB_ROOT 指明 PrimitiveServlet 位置 和容器服务的staticResource。 <br />HttpServer1 实例等待 HTTP 请求，直到它收到一个 shutdown 命令。发布 shutdown命令和前文是一样的。<img src ="http://www.blogjava.net/matthew2006/aggbug/85798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-12-06 12:36 <a href="http://www.blogjava.net/matthew2006/archive/2006/12/06/85798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat下中文的彻底解决－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/11/21/82597.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Tue, 21 Nov 2006 12:01:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/11/21/82597.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/82597.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/11/21/82597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/82597.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/82597.html</trackback:ping><description><![CDATA[这些天开发一个项目，服务器是tomcat,操作系统是xp,采用的是MVC架构，模式是采用Facade模式，总是出现乱码，自己也解决了好多天，同事也帮忙解决，也参考了网上众多网友的文章和意见，总算是搞定。但是好记性不如烂笔杆，所以特意记下，以防止自己遗忘，同时也给那些遇到同样问题的人提供一个好的参考途径：<br />(一)    JSP页面上是中文，但是看的是后是乱码：<br />解决的办法就是在JSP页面的编码的地方&lt;%@ page language="java" contentType="text/html;charset=GBK" %&gt;，因为Jsp转成Java文件时的编码问题，默认的话有的服务器是ISO-8859-1，如果一个JSP中直接输入了中文，Jsp把它当作ISO8859-1来处理是肯定有问题的，这一点，我们可以通过查看Jasper所生成的Java中间文件来确认<br />(二)    当用Request对象获取客户提交的汉字代码的时候，会出现乱码：<br />解决的办法是：要配置一个filter,也就是一个Servelet的过滤器，代码如下：<br />import java.io.IOException;<br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletException;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br />import javax.servlet.UnavailableException;<br /><br />/**<br /> * Example filter that sets the character encoding to be used in parsing the<br /> * incoming request<br /> */<br />public class SetCharacterEncodingFilter implements Filter {<br /><br />    /**<br />     * Take this filter out of service.<br />     */<br />    public void destroy() {<br />    }<br />    /**<br />     * Select and set (if specified) the character encoding to be used to<br />     * interpret request parameters for this request.<br />     */<br />    public void doFilter(ServletRequest request, ServletResponse response,<br />    FilterChain chain)throws IOException, ServletException {<br /><br />    request.setCharacterEncoding("GBK");<br /><br />    // 传递控制到下一个过滤器<br />    chain.doFilter(request, response);<br />    }<br /><br />    public void init(FilterConfig filterConfig) throws ServletException {<br />    }<br />}<br />配置web.xml<br />&lt;filter&gt;<br />&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />&lt;filter-class&gt;SetCharacterEncodingFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况，你的Form提交的数据是不是用get提交的，一般来说用post提交的话是没有问题的，如果是的话，你就看看第四中解决的办法。<br />还有就是对含有汉字字符的信息进行处理，处理的代码是：<br />package dbJavaBean;<br /><br />public class CodingConvert<br />{   <br /> public CodingConvert()<br /> {<br />  //<br /> }<br /> public String toGb(String uniStr){<br />     String gbStr = "";<br />     if(uniStr == null){<br />   uniStr = "";<br />     }<br />     try{<br />   byte[] tempByte = uniStr.getBytes("ISO8859_1");<br />   gbStr = new String(tempByte,"GB2312");<br />     }<br />  catch(Exception ex){<br />    }<br />     return gbStr;<br /> }<br />   <br /> public String toUni(String gbStr){<br />     String uniStr = "";<br />     if(gbStr == null){<br />   gbStr = "";<br />     }<br />     try{<br />   byte[] tempByte = gbStr.getBytes("GB2312");<br />   uniStr = new String(tempByte,"ISO8859_1");<br />     }catch(Exception ex){<br />    }<br />    return uniStr;<br /> }<br />}<br />你也可以在直接的转换，首先你将获取的字符串用ISO-8859-1进行编码，然后将这个编码存放到一个字节数组中，然后将这个数组转化成字符串对象就可以了，例如：<br />String str=request.getParameter(“girl”);<br />Byte B[]=str.getBytes(“ISO-8859-1”);<br />Str=new String(B);<br />通过上述转换的话，提交的任何信息都能正确的显示。<br />(三)    在Formget请求在服务端用request. getParameter(“name”)时返回的是乱码；按tomcat的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用问题是出在处理参数传递的方法上：如果在servlet中用doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了：<br />request.setCharacterEncoding("GBK");<br />response.setContentType("text/html;charset=GBK");<br />也是不起作用的，返回的中文还是乱码！！！如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。<br />同样，在用两个JSP页面处理表单输入之所以能显示中文是因为用的是post方法传递的，改成get方法依旧不行。<br />由此可见在servlet中用doGet()方法或是在JSP中用get方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息，很有可能引起常用字符集的冲突或是不匹配。<br />解决的办法是：<br />1) 打开tomcat的server.xml文件，找到区块，加入如下一行： <br />URIEncoding=”GBK” <br />完整的应如下： <br />&lt;Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/&gt; <br /><br />2)重启tomcat,一切OK。<br />需要加入的原因大家可以去研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html下的这个文件就可以知道原因了。需要注意的是：这个地方如果你要是用UTF-8的时候在传递的过程中在Tomcat中也是要出现乱码的情况，如果不行的话就换别的字符集。<br /><br />(四)    JSP页面上有中文，按钮上面也有中文，但是通过服务器查看页面的时候出现乱码：<br />     解决的办法是：首先在JSP文件中不应该直接包含本地化的消息文本，而是应该通过&lt;bean:message&gt;标签从Resource Bundle中获得文本。应该把你的中文文本放到Application.properties文件中，这个文件放在WEB-INF/classes/*下，例如我在页面里有姓名，年龄两个label,我首先就是要建一个Application.properties，里面的内容应该是name=”姓名” age=”年龄”,然后我把这个文件放到WEB-INF/classes/properties/下，接下来根据Application.properties文件，对他进行编码转化，创建一个中文资源文件，假定名字是Application_cn.properties。在JDK中提供了native2ascii命令，他能够实现字符编码的转换。在DOS环境中找到你放置Application.properties的这个文件的目录，在DOS环境中执行一下命令，将生成按GBK编码的中文资源文件Application_cn.properties：native2ascii ?encoding gbk Application.properties Application_cn.properties执行以上命令以后将生成如下内容的Application_cn.properties文件：name=\u59d3\u540d age=\u5e74\u9f84,在Struts-config.xml中配置：&lt;message-resources parameter="properties.Application_cn"/&gt;。到这一步，基本上完成了一大半，接着你就要在JSP页面上写&lt;%@ page language="java" contentType="text/html;charset=GBK" %&gt;,到名字的那个label是要写&lt;bean:message key=”name”&gt;,这样的化在页面上出现的时候就会出现中文的姓名，年龄这个也是一样，按钮上汉字的处理也是同样的。<br />(五)    写入到数据库是乱码：<br />解决的方法：要配置一个filter,也就是一个Servelet的过滤器，代码如同第二种时候一样。<br />如果你是通过JDBC直接链接数据库的时候，配置的代码如下：jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&amp;characterEncoding=GBK，这样保证到数据库中的代码是不是乱码。<br />如果你是通过数据源链接的化你不能按照这样的写法了，首先你就要写在配置文件中，在tomcat 5.0.19中配置数据源的地方是在C:\Tomcat 5.0\conf\Catalina\localhost这个下面，我建立的工程是workshop，放置的目录是webapp下面,workshop.xml的配置文件如下：<br />&lt;!-- insert this Context element into server.xml --&gt;<br /><br />&lt;Context path="/workshop" docBase="workshop" debug="0"<br />reloadable="true" &gt;<br /><br />  &lt;Resource name="jdbc/WorkshopDB"<br />               auth="Container"<br />               type="javax.sql.DataSource" /&gt;<br /><br />  &lt;ResourceParams name="jdbc/WorkshopDB"&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;factory&lt;/name&gt;<br />      &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;maxActive&lt;/name&gt;<br />      &lt;value&gt;100&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;parameter&gt;<br />      &lt;name&gt;maxIdle&lt;/name&gt;<br />      &lt;value&gt;30&lt;/value&gt;<br />    &lt;/parameter&gt;<br /><br />    <br />    &lt;parameter&gt;<br />      &lt;name&gt;maxWait&lt;/name&gt;<br />      &lt;value&gt;10000&lt;/value&gt;<br />    &lt;/parameter&gt;<br /><br />      &lt;parameter&gt;<br />     &lt;name&gt;username&lt;/name&gt;<br />     &lt;value&gt;root&lt;/value&gt;<br />    &lt;/parameter&gt;<br />    &lt;parameter&gt;<br />     &lt;name&gt;password&lt;/name&gt;<br />     &lt;value&gt;&lt;/value&gt;<br />    &lt;/parameter&gt;<br /><br />    &lt;!-- Class name for mm.mysql JDBC driver --&gt;<br />    &lt;parameter&gt;<br />       &lt;name&gt;driverClassName&lt;/name&gt;<br />       &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />&lt;/parameter&gt;<br />   &lt;parameter&gt;<br />      &lt;name&gt;url&lt;/name&gt;<br /> &lt;value&gt;&lt;![CDATA[jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&amp;characterEncoding=GBK]]&gt;&lt;/value&gt;<br />    &lt;/parameter&gt;<br />  &lt;/ResourceParams&gt;<br /><br />&lt;/Context&gt;<br />粗体的地方要特别的注意，和JDBC直接链接的时候是有区别的，如果你是配置正确的化，当你输入中文的时候到数据库中就是中文了，有一点要注意的是你在显示数据的页面也是要用&lt;%@ page language="java" contentType="text/html;charset=GBK" %&gt;这行代码的。需要注意的是有的前台的人员在写代码的是后用Dreamver写的，写了一个Form的时候把他改成了一个jsp，这样有一个地方要注意了，那就是在Dreamver中Action的提交方式是request的，你需要把他该过来，因为在jsp的提交的过程中紧紧就是POST和GET两种方式，但是这两种方式提交的代码在编码方面还是有很大不同的，这个在后面的地方进行说明。3<br /><br />以上就是我在开发系统中解决中文的问题，不知道能不能解决大家的问题，时间匆忙，没有及时完善，文笔也不是很好，有些地方估计是词不达意。大家可以给我意见，希望能共同进步。<br /><br />查看原文：<a href="http://www.javaresearch.org/article/19240.htm">http://www.javaresearch.org/article/19240.htm</a><img src ="http://www.blogjava.net/matthew2006/aggbug/82597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-11-21 20:01 <a href="http://www.blogjava.net/matthew2006/archive/2006/11/21/82597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用struts+spring+hibernate 组装web应用－转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/11/20/82266.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Mon, 20 Nov 2006 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/11/20/82266.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/82266.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/11/20/82266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/82266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/82266.html</trackback:ping><description><![CDATA[　　再译：使用struts+spring+hibernate 组装web应用<br />　　原作者： Mark Eagle　04/07/2004（<a href="http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html">http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html</a> ）<br />　　译者：孟大兴　来自学习日记（ <a href="http://www.learndiary.com/">http://www.learndiary.com</a> ）　联系方式：mdx-xx@tom.com<br />　　［译者前言：这篇文章由totodo在2004-09-16已经翻译过（ <a href="http://www.matrix.org.cn/resource/article/1034.html">http://www.matrix.org.cn/resource/article/1034.html</a> ），本译文借鉴了不少他的成果。希望各位朋友指出我译文中的不足，并能根据上面的联系方式及时反馈给我，我将第一时间内在Matrix我的blog中更新译文（ <a href="http://blog.matrix.org.cn/page/littlebat?entry=%E5%86%8D%E8%AF%91_%E4%BD%BF%E7%94%A8struts_spring_hibernate_%E7%BB%84%E8%A3%85web%E5%BA%94%E7%94%A8">http://blog.matrix.org.cn/page/littlebat?entry=%E5%86%8D%E8%AF%91_%E4%BD%BF%E7%94%A8struts_spring_hibernate_%E7%BB%84%E8%A3%85web%E5%BA%94%E7%94%A8</a> ），争取为广大不熟悉英文的朋友提供尽可能准确的译文。另外，如果你在运行本文章的例程时碰到问题：请参考：１、原作者的网站上的答疑（ <a href="http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html?page=3">http://www.onjava.com/pub/a/onjava/2004/04/07/wiringwebapps.html?page=3</a> ）；２、我的试验文中的例程的日记（ <a href="http://www.learndiary.com/disDiaryContentAction.do?goalID=1468">http://www.learndiary.com/disDiaryContentAction.do?goalID=1468</a> 和 <a href="http://www.learndiary.com/disDiaryContentAction.do?goalID=1470">http://www.learndiary.com/disDiaryContentAction.do?goalID=1470</a> ）］ <br /><br />　　其实，就算用Java建造一个不是很烦琐的web应用程序，也不是件轻松的事情。当为一个应用程序建造一个构架时有许多事情需要考虑。从高层来说，开发者需要考虑：怎样建立用户接口（ user interfaces ）？在哪里处理业务逻辑？和怎样持久化应用数据。这三层每一层都有它们各自的问题需要回答。 各个层次应该使用什么技术？怎样才能把应用程序设计得松耦合和能灵活改变？构架允许层的替换不会影响到其它层吗？应用程序怎样处理容器级的服务（ container level services ），比如事务处理（ transactions ）？ <br /><br />　　当为你的web应用程序创建一个构架时，需要涉及到相当多的问题。幸运的是，已经有不少开发者已经遇到过这类重复发生的问题，并且建立了处理这类问题的框架。一个好框架具备以下几点：减轻开发者处理复杂的问题的负担（ “不重复发明轮子” ）；内部定义为可扩展的；有一个强大的用户群支持。框架通常能够很好的解决一方面的问题。然而，你的应用程序有几个层可能都需要它们各自的框架。就如解决你的用户接口（ UI ）问题时你就不应该把事务逻辑和持久化逻辑掺杂进来。例如，你不应该在控制器（ controller ）里面写jdbc代码，使它包含有业务逻辑，这不是控制器应该提供的功能。它应该是轻量级的，代理来自用户接口（ UI ）外的调用请求给其它服务于这些请求的应用层。好的框架自然的形成代码如何分布的指导。更重要的是，框架减轻开发者从头开始写像持久层这样的代码的痛苦，使他们专注于对客户来说很重要的应用逻辑。 <br /><br />　　这篇文章将讨论怎样组合几个著名的框架去做到松耦合的目的，怎样建立你的构架，怎样让你的各个应用层保持一致。富于挑战的是：组合这些框架使得每一层都以一种松耦合的方式彼此沟通，而与底层的技术无关。这篇文章将使用３种流行的开源框架来讨论组合框架的策略。表现层我们将使用Struts（ <a href="http://jakarta.apache.org/struts">http://jakarta.apache.org/struts</a> ）;业务层我们将使用Spring（ <a href="http://www.springframework.org/">http://www.springframework.org/</a> ）;持久层使用Hibrenate（ <a href="http://www.hibernate.org/">http://www.hibernate.org/</a> ）.你也可以在你的应用程序中替换这些框架中的任何一种而得到同样的效果。图１展示了当这些框架组合在一起时从高层看是什么样子。 <br /><br />图１用Struts, Spring, 和 Hibernate框架构建的概览 （ <a href="http://www.onjava.com/onjava/2004/04/07/graphics/wiring.gif">http://www.onjava.com/onjava/2004/04/07/graphics/wiring.gif</a> ）<br /><br /><br />应用程序的分层 （ Application Layering ）<br />大多数不复杂的web应用都能被分成至少４个各负其责的层次。这些层次是：表现层（ presentation ）、持久层（ persistence ）、业务层（ business ）、领域模型层（ domain model ）。每层在应用程序中都有明确的责任，不应该和其它层混淆功能。每一应用层应该彼此独立但要给他们之间放一个通讯接口。让我们从审视各个层开始，讨论这些层应该提供什么和不应该提供什么。 <br /><br />表现层 (The Presentation Layer) <br /><br />　　在一个典型的web应用的一端是表现层。很多Java开发者也理解Struts所提供的。然而，太常见的是，他们把像业务逻辑之类的耦合的代码放进了一个org.apache.struts.Action。所以，让我们在像Struts这样一个框架应该提供什么上取得一致意见。这儿是Struts负责的： <br /><br />为用户管理请求和响应； <br />提供一个控制器（ controller ）代理调用业务逻辑和其它上层处理； <br />处理从其它层掷出给一个Struts Action的异常； <br />为显示提供一个模型； <br />执行用户接口（ UI ）验证。 <br /><br />这儿是一些经常用Struts编写的但是却不应该和Struts表现层相伴的项目： <br />直接和数据库通讯，比如JDBC调用； <br />业务逻辑和与你的应用程序相关的验证； <br />事务管理；<br />在表现层中引入这种代码将导致典型耦合（ type coupling ）和讨厌的维护。 <br /><br />持久层 （ The Persistence Layer ）<br />在典型web应用的另一端是持久层。这通常是使事情迅速失控的地方。开发者低估了构建他们自己的持久层框架的挑战性。一般来说，机构内部自己写的持久层不仅需要大量的开发时间，而且还经常缺少功能和变得难以控制。有几个开源的“对象－关系映射”（ ORM ）框架非常解决问题。尤其是，Hibernate框架为java提供了＂对象－关系持久化＂（ object-to-relational persistence ）机制和查询服务。Hibernate对那些已经熟悉了SQL和JDBC API的Java开发者有一个适中的学习曲线。Hibernate持久对象是基于简单旧式Java对象（ POJO ）和Java集合（ Java collections ）。此外，使用Hibernate并不妨碍你正在使用的IDE。下面的列表包含了你该写在一个持久层框架里的代码类型： <br /><br />查询相关的信息成为对象。Hibernate通过一种叫作HQL的面向对象（ OO ）的查询语言或者使用条件表达式API（ expressive criteria API ）来做这个事情。 HQL非常类似于SQL-- 只是把SQL里的table和columns用Object和它的fields代替。有一些新的专用的HQL语言成分要学；不过，它们容易理解而且文档做得好。HQL是一种使用来查询对象的自然语言，花很小的代价就能学习它。 <br /><br />保存、更新、删除储存在数据库中的信息。 <br /><br />像Hibernate这样的高级“对象－关系”映射（ object-to-relational mapping ）框架提供对大多数主流SQL数据库的支持，它们支持“父/子”（ parent/child ）关系、事务处理、继承和多态。 <br /><br />这儿是一些应该在持久层里被避免的项目： <br /><br />业务逻辑应该在你的应用的一个高一些的层次里。持久层里仅仅允许数据存取操作。 <br /><br />你不应该把持久层逻辑（ persistence logic ）和你的表现层逻辑（ presentation logic ）搅在一起。避免像JSPs或基于servlet的类这些表现层组件里的逻辑和数据存取直接通讯。通过把持久层逻辑隔离进它自己的层，应用程序变得易于修改而不会影响在其它层的代码。例如：Hebernate能够被其它持久层框架或者API代替而不会修改在其它任何层的代码。 <br /><br />业务层（ The Business Layer ） <br /><br />在一个典型的web应用程序的中间的组件是业务层或服务层。从编码的视角来看，这个服务层是最容易被忽视的一层。不难在用户接口（ UI ）层或者持久层里找到散布在其中的这种类型的代码。这不是正确的地方，因为这导致了应用程序的紧耦合，这样一来，随着时间推移代码将很难维护。幸好，针对这一问题有好几种Frameworks存在。在这个领域两个最流行的框架是Spring和PicoContainer，它们叫作微容器（ microcontainers ），你可以不费力不费神的把你的对象连在一起。所有这些框架都工作在一个简单的叫作“依赖注入”（ dependency injection ）（ 也通称“控制反转”（ inversion of control ） ）的概念上。这篇文章将着眼于Spring的为指定的配置参数通过bean属性的setter注入（ setter injection ）的使用。Spring也提供了一个构建器注入（ constructor injection ）的复杂形式作为setter注入的一个替代。对象们被一个简单的XML文件连在一起，这个XML文件含有到像事务管理器（ transaction management handler ）、对象工厂（ object factories ）、包含业务逻辑的服务对象（ service objects ）、和数据存取对象（ DAO ）这些对象的引用（ references ）。 <br /><br />这篇文章的后面将用例子来把Spring使用这些概念的方法说得更清楚一些。业务层应该负责下面这些事情： <br />处理应用程序的业务逻辑和业务验证； <br />管理事务； <br />预留和其它层交互的接口； <br />管理业务层对象之间的依赖； <br />增加在表现层和持久层之间的灵活性，使它们互不直接通讯； <br />从表现层中提供一个上下文（ context ）给业务层获得业务服务（ business services ）； <br />管理从业务逻辑到持久层的实现。<br /><br />领域模型层 （ The Domain Model Layer ） <br />最后，因为我们讨论的是一个不是很复杂的、基于web的应用程序，我们需要一组能在不同的层之间移动的对象。领域对象层由那些代表现实世界中的业务对象的对象们组成，比如：一份订单（ Order ）、订单项（ OrderLineItem ）、产品（ Product ）等等。这个层让开发者停止建立和维护不必要的数据传输对象（ 或者叫作DTOs ）,来匹配他们的领域对象。例如，Hibernate允许你把数据库信息读进领域对象（ domain objects ）的一个对象图，这样你可以在连接断开的情况下把这些数据显示到UI层。那些对象也能被更新和送回到持久层并在数据库里更新。而且，你不必把对象转化成DTOs，因为DTOs在不同的应用层间移动，可能在转换中丢失。这个模型使得Java开发者自然地以一种面向对象的风格和对象打交道，没有附加的编码。 <br /><br />结合一个简单的例子<br />　　既然我们已经从一个高的层次上理解了这些组件， 现在就让我们开始实践吧。在这个例子中，我们还是将合并Struts、Spring、Hibernate框架。每一个这些框架在一篇文章中都有太多的细节覆盖到。这篇文章将用一个简单的例子代码展示怎样把它们结合在一起，而不是进入每个框架的许多细节。示例应用程序将示范一个请求怎样跨越每一层被服务的。这个示例应用程序的一个用户能保存一个订单到数据库中和查看一个在数据库中存在的订单。进一步的增强可以使用户更新或删除一个存在的订单。　　<br /><br />你可以下载这个应用的源码（ <a href="http://www.onjava.com/onjava/2004/04/07/examples/wiring.zip">http://www.onjava.com/onjava/2004/04/07/examples/wiring.zip</a> ）。<br /><br />　　因为领域对象（ domain objects ）将和每一层交互，我们将首先创建它们。这些对象将使我们定义什么应该被持久化，什么业务逻辑应该被提供，和哪种表现接口应该被设计。然后，我们将配置持久层和用Hibernate为我们的领域对象（ domain objects ）定义“对象-关系”映射（ object-to-relational mappings ）。然后，我们将定义和配置我们的业务对象（ business objects ）。在有了这些组件后，我们就能讨论用Spring把这些层连在一起。最后，我们将提供一个表现层（ presentation layer ），它知道怎样和业务服务层（ business service layer ）交流和知道怎样处理从其它层产生的异常（ exceptions ）。<br /><br />领域对象层（ Domain Object Layer ） <br />因为这些对象将和所有层交互，这也许是一个开始编码的好地方。这个简单的领域模型将包括一个代表一份订单（ order ）的对象和一个代表一个订单项（ line item for an order ）的对象。订单（ order ）对象将和一组订单项（ a collection of line item ）对象有一对多（ one-to-many ）的关系。例子代码在领域层有两个简单的对象：<br />com.meagle.bo.Order.java: 包括一份订单（ oder ）的概要信息；<br />com.meagle.bo.OrderLineItem.java: 包括一份订单（ order ）的详细信息；<br />考虑一下为你的对象选择包名，它将反映你的应用程序是怎样分层的。例如：简单应用的领域对象（ domain objects ）可以放进com.meagle.bo包［译者注：bo-business object？］。更多专门的领域对象将放入在com.meagle.bo下面的子包里。业务逻辑在com.meagle.service包里开始打包，DAO对象放进com.meagle.service.dao.hibernate包。对于forms和actions的表现类（ presentation classes ）分别放入com.meagle.action 和 com.meagle.forms包。准确的包命名为你的类提供的功能提供一个清楚的区分，使当故障维护时更易于维护，和当给应用程序增加新的类或包时提供一致性。<br /><br />持久层配置（ Persistence Layer Configuration ） <br />用Hibernate设置持久层涉及到几个步骤。第一步是进行配置持久化我们的领域业务对象（ domain business objects ）。因为我们用于领域对象（ domain objects ）持久化的Hibernate和POJOs一起工作（ 此句原文：Since Hibernate works with POJOs we will use our domain objects for persistence. ），因此，订单和订单项对象包括的所有的字段的都需要提供getter和setter方法。订单对象将包括像ID、用户名、合计、和订单项这样一些字段的标准的JavaBean格式的setter和getter方法。订单项对象将同样的用JavaBean的格式为它的字段设置setter和getter方法。<br />　　Hibernate在XML文件里映射领域对象到关系数据库。订单和订单项对象将有两个映射文件来表达这种映射。有像XDoclet（ <a href="http://xdoclet.sourceforge.net/">http://xdoclet.sourceforge.net/</a> ）这样的工具来帮助这种映射。Hibernate将映射领域对象到这些文件：<br />Order.hbm.xml <br />OrderLineItem.hbm.xml <br />你可以在WebContent/WEB-INF/classes/com/meagle/bo目录里找到这些生成的文件。配置Hibernate SessionFactory（ <a href="http://www.hibernate.org/hib_docs/api/net/sf/hibernate/SessionFactory.html">http://www.hibernate.org/hib_docs/api/net/sf/hibernate/SessionFactory.html</a> ）使它知道是在和哪个数据库通信，使用哪个数据源或连接池，加载哪些持久对象。SessionFactory提供的Session（ <a href="http://www.hibernate.org/hib_docs/api/net/sf/hibernate/Session.html">http://www.hibernate.org/hib_docs/api/net/sf/hibernate/Session.html</a> ）对象是Java对象和像选取、保存、更新、删除对象这样一些持久化功能间的翻译接口。我们将在后面的部分讨论Hibernate操作Session对象需要的SessionFactory配置。 <br />业务层配置（ Business Layer Configuration ）<br />　　既然我们已经有了领域对象（ domain objects ），我们需要有业务服务对象来执行应用逻辑、执行向持久层的调用、获得从用户接口层（ UI layer ）的请求、处理事务、处理异常。为了将所有这些连接起来并且易于管理，我们将使用Spring框架的bean管理方面（ bean management aspect ）。Spring使用“控制反转”（ IoC ）,或者“setter依赖注入”来把这些对象连好，这些对象在一个外部的XML文件中被引用。“控制反转”是一个简单的概念，它允许对象接受其它的在一个高一些的层次被创建的对象。使用这种方法，你的对象从必须创建其它对象中解放出来并降低对象耦合。<br /><br />　　这儿是个不使用IoC的对象创建它的从属对象（ object creating its dependencies without IoC ）的例子，这导致紧的对象耦合：<br />　　图２：没有使用IoC的对象组织。对象Ａ创建对象Ｂ和Ｃ（ <a href="http://www.onjava.com/onjava/2004/04/07/graphics/nonioc.gif">http://www.onjava.com/onjava/2004/04/07/graphics/nonioc.gif</a> ）。<br />　　这儿是一个使用IoC的例子，它允许对象在一个高一些层次被创建和传进另外的对象，所以另外的对象能直接使用现成的对象?［译者注：另外的对象不必再亲自创建这些要使用的对象］（ allows objects to be created at higher levels and passed into objects so that they can use the implementations directly ）：<br />　　图３：对象使用IoC组织。对象Ａ包含setter方法，它们接受到对象Ｂ和Ｃ的接口。这也可以用对象Ａ里的接受对象Ｂ和Ｃ的构建器完成（ <a href="http://www.onjava.com/onjava/2004/04/07/graphics/ioc.gif">http://www.onjava.com/onjava/2004/04/07/graphics/ioc.gif</a> ）。<br /><br />建立我们的业务服务对象（ Building Our Business Service Objects ） <br />　　我们将在我们的业务对象中使用的setter方法接受的是接口，这些接口允许对象的松散定义的实现，这些对象将被设置或者注入。在我们这个例子里我们将使我们的业务服务对象接受一个DAO去控制我们的领域对象的持久化。当我们在这篇文章的例子中使用Hibernate（ While the examples in this article use Hibernate ），我们可以容易的转换到一个不同的持久框架的实现，通知Spring使用新的实现的DAO对象。你能明白编程到接口和使用“依赖注入”模式是怎样宽松耦合你的业务逻辑和你的持久化机制的。<br />　　这儿是业务服务对象的接口，它是一个DAO对象依赖的桩。（ Here is the interface for the business service object that is stubbed for a DAO object dependency: ）<br /><br />public interface IOrderService { <br />public abstract Order saveNewOrder(Order order) <br />throws OrderException, <br />OrderMinimumAmountException; <br /><br />public abstract List findOrderByUser( <br />String user) <br />throws OrderException; <br /><br />public abstract Order findOrderById(int id) <br />throws OrderException; <br /><br />public abstract void setOrderDAO( <br />IOrderDAO orderDAO); <br />} <br /><br />　　注意上面的代码有一个为DAO对象准备的setter方法。这儿没有一个getOrderDAO方法因为它不是必要的，因为不太有从外面访问连着的OrderDAO对象的需要。DAO对象将被用来和我们的持久层沟通。我们将用Spring把业务服务对象和DAO对象连在一起。因为我们编码到接口，我们不会紧耦合实现。<br /><br />下一步是写我们的DAO实现对象。因为Spring有内建的对Hibernate的支持，这个例子DAO将继承HibernateDaoSupport（ <a href="http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/HibernateDaoSupport.html">http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/HibernateDaoSupport.html</a> ）类，这使得我们容易取得一个到HibernateTemplate（ <a href="http://www.springframework.org/docs/api/org/springframework/orm/hibernate/HibernateTemplate.html">http://www.springframework.org/docs/api/org/springframework/orm/hibernate/HibernateTemplate.html</a> ）类的引用，HibernateTemplate是一个帮助类，它能简化Hibernate Session的编码和处理HibernateExceptions。这儿是DAO的接口：<br /><br />public interface IOrderDAO { <br /><br />public abstract Order findOrderById( <br />final int id); <br /><br />public abstract List findOrdersPlaceByUser( <br />final String placedBy); <br /><br />public abstract Order saveOrder( <br />final Order order); <br />} <br /><br />　　我们还有两个对象要和我们的业务层连在一起。这包括HibernateSessionFactory和一个TransactionManager对象。这在Spring配置文件里直接完成。Spring提供一个HibernateTransactionManager（ <a href="http://www.springframework.org/docs/api/org/springframework/orm/hibernate/HibernateTransactionManager.html">http://www.springframework.org/docs/api/org/springframework/orm/hibernate/HibernateTransactionManager.html</a> ），它将从工厂绑定一个Hibernate Session到一个线程来支持事务（ 见ThreadLocal（ <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ThreadLocal.html">http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ThreadLocal.html</a> ）获取更多的信息 ）。这儿是HibernateSessionFactory和HibernateTransactionManager的Spring配置。<br />class="org.springframework.orm.hibernate.LocalSessionFactoryBean"&gt; <br /><br />com/meagle/bo/Order.hbm.xml <br /><br />com/meagle/bo/OrderLineItem.hbm.xml <br /><br />net.sf.hibernate.dialect.MySQLDialect <br /><br />false <br /><br />C:/MyWebApps/.../WEB-INF/proxool.xml <br /><br />spring <br /><br />class="org.springframework.orm.hibernate.HibernateTransactionManager"&gt; <br /><br />　　每一个对象能被Spring配置里的一个标记引用。在这个例子里，bean “mySessionFactory”代表一个HibernateSessionFactory，bean “myTransactionManager”代表一个Hibernate transaction manager。注意transactionManger bean有一个叫作sessionFactory的属性元素。HibernateTransactionManager有一个为sessionFactory准备的setter和getter方法，它们是用来当Spring容器启动时的依赖注入。sessionFactory属性引用mySessionFactory bean。这两个对象现在当Spring容器初始化时将被连在一起。这种连接把你从为引用和创建这些对象而创建singleton对象和工厂中解放出来，这减少了你应用程序中的代码维护。mySessionFactory bean有两个属性元素,它们翻译成为mappingResources 和 hibernatePropertes准备的setter方法。通常，如果你在Spring之外使用Hibernate,这个配置将被保存在hibernate.cfg.xml文件中。不管怎样,Spring提供了一个便捷的方式--在Spring配置文件中合并Hibernate的配置。获得更多的信息查阅Spring API（ <a href="http://www.springframework.org/docs/api/index.html">http://www.springframework.org/docs/api/index.html</a> ）。<br /><br />既然我们已经配置了我们的容器服务beans和把它们连在了一起，我们需要把我们的业务服务对象和我们的DAO对象连在一起。然后，我们需要把这些对象连接到事务管理器。<br /><br />这是在Spring配置文件里的样子:<br /><br />class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br /><br />PROPAGATION_REQUIRED,readOnly,-OrderException<br /><br />PROPAGATION_REQUIRED,-OrderException <br /><br />class="com.meagle.service.spring.OrderServiceSpringImpl"&gt; <br /><br />class="com.meagle.service.dao.hibernate.OrderHibernateDAO"&gt; <br /><br />图４是我们已经连在一起的东西的一个概览。它展示了每个对象是怎样相关联的和怎样被Spring设置进其它对象中。把这幅图和示例应用中的Spring配置文件对比查看它们之间的关系。<br /><br />图４：这是Spring怎样将在这个配置的基础上装配beans（ <a href="http://www.onjava.com/onjava/2004/04/07/graphics/spring_wiring.gif">http://www.onjava.com/onjava/2004/04/07/graphics/spring_wiring.gif</a> ）。<br /><br />　　这个例子使用一个TransactionProxyFactoryBean，它有一个为我们已经定义了的事务管理者准备的setter方法。这是一个有用的对象，它知道怎样处理声明的事务操作和你的服务对象。你可以通过transactionAttributes属性定义事务怎样被处理，transactionAttributes属性为方法名定义模式和它们怎样参与进一个事务。获得更多的关于在一个事务上配置隔离层和提交或回滚查阅TransactionAttributeEditor（ <a href="http://www.springframework.org/docs/api/org/springframework/transaction/interceptor/TransactionAttributeEditor.html">http://www.springframework.org/docs/api/org/springframework/transaction/interceptor/TransactionAttributeEditor.html</a> ）。<br /><br />　　TransactionProxyFactoryBean（ <a href="http://www.springframework.org/docs/api/org/springframework/transaction/interceptor/TransactionProxyFactoryBean.html">http://www.springframework.org/docs/api/org/springframework/transaction/interceptor/TransactionProxyFactoryBean.html</a> ）类也有一个为一个target准备的setter,target将是一个到我们的叫作orderTarget的业务服务对象的引用（ a reference ）。 orderTarget bean定义使用哪个业务服务对象并有一个指向setOrderDAO()的属性。orderDAO bean将居于这个属性中，orderDAO bean是我们的和持久层交流的DAO对象。<br /><br />　　还有一个关于Spring和bean要注意的是bean能以两种模式工作。这两种模式被定义为singleton和prototype。一个bean默认的模式是singleton，意味着一个共享的bean的实例将被管理。这是用于无状态操作--像一个无状态会话bean将提供的那样。当bean由Spring提供时，prototype模式允许创建bean的新实例。你应当只有在每一个用户都需要他们自己的bean的拷贝时才使用prototype模式。<br /><br />提供一个服务定位器（ Providing a Service Locator ）<br />　　既然我们已经把我们的服务和我们的DAO连起来了，我们需要把我们的服务暴露给其它层。通常是一个像使用Struts或Swing这样的用户接口层里的代码来使用这个服务。一个简单的处理方法是使用一个服务定位器模式的类从一个Spring上下文中返回资源。这也可以靠引用bean ID通过Spring来直接完成。<br />　　这儿是一个在Struts Action中怎样配置一个服务定位器的例子：<br /><br />public abstract class BaseAction extends Action { <br /><br />private IOrderService orderService; <br /><br />public void setServlet(ActionServlet <br />actionServlet) { <br />super.setServlet(actionServlet); <br />ServletContext servletContext = <br />actionServlet.getServletContext(); <br /><br />WebApplicationContext wac = <br />WebApplicationContextUtils. <br />getRequiredWebApplicationContext( <br />servletContext); <br /><br />this.orderService = (IOrderService) <br />wac.getBean("orderService"); <br />} <br /><br />protected IOrderService getOrderService() { <br />return orderService; <br />} <br />} <br /><br />用户接口层配置 （ UI Layer Configuration ） <br />　　示例应用的用户接口层使用Struts框架。这儿我们将讨论当为一个应用分层时和Struts相关的部分。让我们从在struts-config.xml文件里检查一个Action配置开始。<br />　　<br /><br />type="com.meagle.action.SaveOrderAction" <br />name="OrderForm" <br />scope="request" <br />validate="true" <br />input="/NewOrder.jsp"&gt; <br />Save New Order <br /><br />path="/NewOrder.jsp" <br />scope="request" <br />type="com.meagle.exception.OrderException"/&gt; <br /><br />path="/NewOrder.jsp" <br />scope="request" <br />type="com.meagle.exception.OrderMinimumAmountException"/&gt;<br /><br />　　SaveNewOrder Action被用来持久化一个用户从用户接口层提交的订单。这是一个典型的Struts Action；然而，注意这个action的异常配置。这些Exceptions为我们的业务服务对象也在Spring 配置文件(applicationContext-hibernate.xml)中配置了（ 在transactionAttributes属性里 ）。当这些异常被从业务层掷出我们能在我们的用户接口里恰当的处理它们。第一个异常，OrderException，当在持久层里保存订单对象失败时将被这个action使用。这将引起事务回滚和通过业务对象传递把异常传回给Struts层。OrderMinimumAmountException，在业务对象逻辑里的一个事务因为提交的订单达不到最小订单数量而失败也将被处理。然后，事务将回滚和这个异常能被用户接口层恰当的处理。<br /><br />　　最后一个连接步骤是使我们的表现层和我们的业务层交互。这已经通过使用前面讨论的服务定位器来完成了。服务层充当一个到我们的业务逻辑和持久层的接口。这儿是 Struts中的SaveNewOrder Action可能怎样使用一个服务定位器调用一个业务方法：<br /><br />public ActionForward execute( <br />ActionMapping mapping, <br />ActionForm form, <br />javax.servlet.http.HttpServletRequest request, <br />javax.servlet.http.HttpServletResponse response) <br />throws java.lang.Exception { <br /><br />OrderForm oForm = (OrderForm) form; <br /><br />// Use the form to build an Order object that <br />// can be saved in the persistence layer. <br />// See the full source code in the sample app. <br /><br />// Obtain the wired business service object <br />// from the service locator configuration <br />// in BaseAction. <br />// Delegate the save to the service layer and <br />// further upstream to save the Order object. <br />getOrderService().saveNewOrder(order); <br /><br />oForm.setOrder(order); <br /><br />ActionMessages messages = new ActionMessages(); <br />messages.add( <br />ActionMessages.GLOBAL_MESSAGE, <br />new ActionMessage( <br />"message.order.saved.successfully")); <br /><br />saveMessages(request, messages); <br /><br />return mapping.findForward("success"); <br />} <br /><br />结论<br />　　这篇文章按照技术和架构覆盖了许多话题。从中而取出的主要思想是怎样更好的给你的应用程序分层：用户接口层、持久逻辑层、和其它任何你需要的应用层。这样可以解耦你的代码，允许添加新的代码组件，使你的应用在将来更易维护。这里覆盖的技术能很好的解决这类的问题。不管怎样，使用这样的构架可以让你用其他技术代替现在的层。例如，你也许不想使用Hibernate持久化。因为你在你的DAO对象中编码到接口，你能怎样使用其它的技术或框架，比如 iBATIS（ <a href="http://www.ibatis.com/">http://www.ibatis.com/</a> ），作为一个替代是显而易见的。或者你可能用不同于Struts的框架替代你的UI层。改变UI层的实现不会直接影响你的业务逻辑层或者你的持久层。替换你的持久层不会影响你的UI逻辑或业务服务层。集成一个web应用其实也不是一件烦琐的工作，靠解耦你的各应用层和用适当的框架组成它，它能变得更容易处理。<br /><br />Mark Eagle 是一位在MATRIX智囊团的高级软件工程师， Inc. in Atlanta, GA。<br /><br /><br /><img src ="http://www.blogjava.net/matthew2006/aggbug/82266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-11-20 15:10 <a href="http://www.blogjava.net/matthew2006/archive/2006/11/20/82266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unsupported major.minor version 49.0异常</title><link>http://www.blogjava.net/matthew2006/archive/2006/09/21/71025.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Thu, 21 Sep 2006 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/09/21/71025.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/71025.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/09/21/71025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/71025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/71025.html</trackback:ping><description><![CDATA[
		<p>原因是开发环境下jdk的tools.jar的版本和tomcat下的版本不同引起的，具体察看方法如下：<br />1、找到tomcat安装目录下的common\lib\tools.jar，用压缩软件打开，察看META-INF\MANIFEST.MF，内容如下：<br />Manifest-Version: 1.0<br />Created-By: 1.5.0_06 (Sun Microsystems Inc.)</p>
		<p>可知其版本为1.5.0</p>
		<p>2、找到开发环境，即jdk的目录下的lib\tools.jar，同样用压缩软件打开，察看META-INF\MANIFEST.MF，内容如下：<br />Manifest-Version: 1.0<br />Created-By: 1.4.2 (Sun Microsystems Inc.)<br />可知其版本为1.4.2</p>
		<p>如果两个版本不同，则抛出如上异常</p>
		<p>解决方法：<br />将开发环境下的tools.jar覆盖到tomcat\common\lib下的tools.jar就可以了！<br /></p>
<img src ="http://www.blogjava.net/matthew2006/aggbug/71025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-09-21 10:52 <a href="http://www.blogjava.net/matthew2006/archive/2006/09/21/71025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>兩種方法解決jbuilder2005不能啟動的問題-转贴</title><link>http://www.blogjava.net/matthew2006/archive/2006/09/03/67392.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Sun, 03 Sep 2006 05:03:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/09/03/67392.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/67392.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/09/03/67392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/67392.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/67392.html</trackback:ping><description><![CDATA[
		<p>方法一：</p>
		<p>打開JBuilder2005binjbuilder.config</p>
		<p>將<br />vmmemmax 75%<br />改為<br />vmmemmax 512m<br />重新啟動ok，問題解決。</p>
		<p>512m是根據妳個人的機器進行配置</p>
		<p>
		</p>
		<p>方法二：</p>
		<p>在啟動快捷方式後加上java</p>
		<p>c:JBuilder2005binJBuilderw.exe java</p>
		<br />
		<img height="439" alt="jbuilder2005.bmp" src="http://www.blogjava.net/images/blogjava_net/matthew2006/blogpic/jbuilder2005.bmp" width="367" border="0" />
<img src ="http://www.blogjava.net/matthew2006/aggbug/67392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-09-03 13:03 <a href="http://www.blogjava.net/matthew2006/archive/2006/09/03/67392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web测试好文章（转贴自csdn） </title><link>http://www.blogjava.net/matthew2006/archive/2006/08/14/63409.html</link><dc:creator>matthew</dc:creator><author>matthew</author><pubDate>Mon, 14 Aug 2006 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/matthew2006/archive/2006/08/14/63409.html</guid><wfw:comment>http://www.blogjava.net/matthew2006/comments/63409.html</wfw:comment><comments>http://www.blogjava.net/matthew2006/archive/2006/08/14/63409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/matthew2006/comments/commentRss/63409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/matthew2006/services/trackbacks/63409.html</trackback:ping><description><![CDATA[一般软件的发布周期以月或以年计算，而Web应用的发布周期以天计算甚至以小时计算。Web测试人员必须处理更短的发布周期，测试人员和测试管理人员面临着从测试传统的C/S结构和框架环境到测试快速改变的Web应用系统的转变。 （本文提供了web测试需要测试各个要点和简单方法描述）<br /><p><strong><font size="4">一、功能测试</font></strong></p><p><font size="3"><strong>　　</strong>1、链接测试</font><br />　　链接是Web应用系统的一个主要特征，它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先，测试所有链接是否按指示的那样确实链接到了该链接的页面；其次，测试所链接的页面是否存在；最后，保证Web应用系统上没有孤立的页面，所谓孤立页面是指没有链接指向该页面，只有知道正确的URL地址才能访问。</p><p>　　链接测试可以自动进行，现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成，也就是说，在整个Web应用系统的所有页面开发完成之后进行链接测试。 </p><p><font size="4">　　</font><font size="3">2、表单测试</font></p><p>　　当用户给Web应用系统管理员提交信息时，就需要使用表单操作，例如用户注册、登陆、信息提交等。在这种情况下，我们必须测试提交操作的完整性，以校验提交给服务器的信息的正确性。例如：用户填写的出生日期与职业是否恰当，填写的所属省份与所在城市是否匹配等。如果使用了默认值，还要检验默认值的正确性。如果表单只能接受指定的某些值，则也要进行测试。例如：只能接受某些字符，测试时可以跳过这些字符，看系统是否会报错。</p><p>　　<font size="3">3、Cookies测试</font><br />　　Cookies通常用来存储用户信息和用户在某应用系统的操作，当一个用户使用Cookies访问了某一个应用系统时，Web服务器将发送关于用户的信息，把该信息以Cookies的形式存储在客户端计算机上，这可用来创建动态和自定义页面或者存储登陆等信息。</p><p>　　如果Web应用系统使用了Cookies，就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用，是否按预定的时间进行保存，刷新对Cookies有什么影响等。</p><p>　<font size="3">　4、设计语言测试</font></p><p>　　Web设计语言版本的差异可以引起客户端或服务器端严重的问题，例如使用哪种版本的HTML等。当在分布式环境中开发时，开发人员都不在一起，这个问题就显得尤为重要。除了HTML的版本问题外，不同的脚本语言，例如Java、JavaScript、 ActiveX、VBScript或Perl等也要进行验证。</p><p></p><p>　<font size="3">　5、数据库测试</font></p><p></p><p>　　在Web应用技术中，数据库起着重要的作用，数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中，最常用的数据库类型是关系型数据库，可以使用SQL对信息进行处理。</p><p></p><p>　　在使用了数据库的Web应用系统中，一般情况下，可能发生两种错误，分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的，而输出错误主要是由于网络速度或程序设计问题等引起的，针对这两种情况，可分别进行测试。</p><p></p><p><br />广告秀: 第四次深圳软件测试交流会在风景如画的深圳大学顺利举行，第五次交流会：如何做好单元测试接受报名，由深圳软件测试论坛板主“落叶夏日”主讲<br />向版主反映这个帖子 | IP: 已记录<br /> <br /> <br /><font size="4"><strong>二、性能测试</strong></font></p><p></p><p>　<font size="3">　1、连接速度测试</font></p><p></p><p>　　用户连接到Web应用系统的速度根据上网方式的变化而变化，他们或许是电话拨号，或是宽带上网。当下载一个程序时，用户可以等较长的时间，但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长（例如超过5秒钟），用户就会因没有耐心等待而离开。</p><p></p><p>　　另外，有些页面有超时的限制，如果响应速度太慢，用户可能还没来得及浏览内容，就需要重新登陆了。而且，连接速度太慢，还可能引起数据丢失，使用户得不到真实的页面。</p><p></p><p>　<font size="3">　2、负载测试</font></p><p></p><p>　　负载测试是为了测量Web系统在某一负载级别上的性能，以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量，也可以是在线数据处理的数量。例如：Web应用系统能允许多少个用户同时在线？如果超过了这个数量，会出现什么现象？Web应用系统能否处理大量用户对同一个页面的请求？ </p><p></p><p><font size="3">　　3、压力测试</font></p><p></p><p>　　负载测试应该安排在Web系统发布以后，在实际的网络环境中进行测试。因为一个企业内部员工，特别是项目组人员总是有限的，而一个Web系统能同时处理的请求数量将远远超出这个限度，所以，只有放在Internet上，接受负载测试，其结果才是正确可信的。</p><p></p><p>　　进行压力测试是指实际破坏一个Web应用系统，测试系统的反映。压力测试是测试系统的限制和故障恢复能力，也就是测试Web应用系统会不会崩溃，在什么情况下会崩溃。黑客常常提供错误的数据负载，直到Web应用系统崩溃，接着当系统重新启动时获得存取权。</p><p></p><p>　　压力测试的区域包括表单、登陆和其他信息传输页面等。 </p><p></p><p><br /> <br /><font size="4"><strong>三、可用性测试</strong></font></p><p></p><p><font size="3">　　1、导航测试</font></p><p></p><p>　　导航描述了用户在一个页面内操作的方式，在不同的用户接口控制之间，例如按钮、对话框、列表和窗口等；或在不同的连接页面之间。通过考虑下列问题，可以决定一个Web应用系统是否易于导航：导航是否直观？Web系统的主要部分是否可通过主页存取？Web系统是否需要站点地图、搜索引擎或其他的导航帮助？</p><p></p><p>　　在一个页面上放太多的信息往往起到与预期相反的效果。Web应用系统的用户趋向于目的驱动，很快地扫描一个Web应用系统，看是否有满足自己需要的信息，如果没有，就会很快地离开。很少有用户愿意花时间去熟悉Web应用系统的结构，因此，Web应用系统导航帮助要尽可能地准确。</p><p></p><p>　　导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容，内容在什么地方。</p><p></p><p>　　Web应用系统的层次一旦决定，就要着手测试用户导航功能，让最终用户参与这种测试，效果将更加明显。 </p><p></p><p>　<font size="3">　2、图形测试</font></p><p></p><p>　　在Web应用系统中，适当的图片和动画既能起到广告宣传的作用，又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有：</p><p></p><p>　　（1）要确保图形有明确的用途，图片或动画不要胡乱地堆在一起，以免浪费传输时间。Web应用系统的图片尺寸要尽量地小，并且要能清楚地说明某件事情，一般都链接到某个具体的页面。</p><p></p><p>　　（2）验证所有页面字体的风格是否一致。</p><p></p><p>　　（3）背景颜色应该与字体颜色和前景颜色相搭配。</p><p></p><p>　　（4）图片的大小和质量也是一个很重要的因素，一般采用JPG或GIF压缩。</p><p></p><p><font size="3">　　3、内容测试</font></p><p></p><p>　　内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。</p><p></p><p>　　信息的正确性是指信息是可靠的还是误传的。例如，在商品价格列表中，错误的价格可能引起财政问题甚至导致法律纠纷；信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行，例如使用Microsoft Word的"拼音与语法检查"功能；信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口，也就是一般Web站点中的所谓"相关文章列表"。</p><p></p><p><font size="3">　　4、整体界面测试</font></p><p></p><p>　　整体界面是指整个Web应用系统的页面结构设计，是给用户的一个整体感。例如：当用户浏览Web应用系统时是否感到舒适，是否凭直觉就知道要找的信息在什么地方？整个Web应用系统的设计风格是否一致？</p><p>对整体界面的测试过程，其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式，来得到最终用户的反馈信息。</p><p></p><p>　　对所有的可用性测试来说，都需要有外部人员（与Web应用系统开发没有联系或联系很少的人员）的参与，最好是最终用户的参与。</p><p><font size="4"><strong>四、客户端兼容性测试</strong></font></p><p><font size="3">　　1、平台测试</font></p><p>　　市场上有很多不同的操作系统类型，最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统，取决于用户系统的配置。这样，就可能会发生兼容性问题，同一个应用可能在某些操作系统下能正常运行，但在另外的操作系统下可能会运行失败。 </p><p>　　因此，在Web系统发布之前，需要在各种操作系统下对Web系统进行兼容性测试。</p><p><font size="3">　　2、浏览器测试</font></p><p>　　浏览器是Web客户端最核心的构件，来自不同厂商的浏览器对Java，、JavaScript、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如，ActiveX是Microsoft的产品，是为Internet Explorer而设计的，JavaScript是Netscape的产品，Java是Sun的产品等等。另外，框架和层次结构风格在不同的浏览器中也有不同的显示，甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。</p><p>　　测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中，测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。</p><p><font size="4"><strong>　　五、安全性测试</strong></font></p><p>　　Web应用系统的安全性测试区域主要有：</p><p>　　（1）现在的Web应用系统基本采用先注册，后登陆的方式。因此，必须测试有效和无效的用户名和密码，要注意到是否大小写敏感，可以试多少次的限制，是否可以不登陆而直接浏览某个页面等。</p><p>　　（2）Web应用系统是否有超时的限制，也就是说，用户登陆后在一定时间内（例如15分钟）没有点击任何页面，是否需要重新登陆才能正常使用。 </p><p>　　（3）为了保证Web应用系统的安全性，日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。</p><p>　　（4）当使用了安全套接字时，还要测试加密是否正确，检查信息的完整性。</p><p>　　（5）服务器端的脚本常常构成安全漏洞，这些漏洞又常常被黑客利用。所以，还要测试没有经过授权，就不能在服务器端放置和编辑脚本的问题。 </p><p><font size="4">　<strong>　六、总结</strong></font></p><p>　　本文从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于Web的系统测试方法。</p><p>　　基于Web的系统测试与传统的软件测试既有相同之处，也有不同的地方，对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行，而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是，还要从最终用户的角度进行安全性和可用性测试。</p><p><br /> </p><img src ="http://www.blogjava.net/matthew2006/aggbug/63409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/matthew2006/" target="_blank">matthew</a> 2006-08-14 10:36 <a href="http://www.blogjava.net/matthew2006/archive/2006/08/14/63409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>