﻿<?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-code is not all.</title><link>http://www.blogjava.net/margiex/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 03:25:57 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 03:25:57 GMT</pubDate><ttl>60</ttl><item><title>java web service develop and axis2 to visit asp.net web service</title><link>http://www.blogjava.net/margiex/archive/2007/10/25/155950.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Thu, 25 Oct 2007 12:58:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2007/10/25/155950.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/155950.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2007/10/25/155950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/155950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/155950.html</trackback:ping><description><![CDATA[<p>1. install the following software<br />
jre 1.5 or 1.6,&nbsp; tomcat 5525, eclipse, axis2</p>
<p>and in eclipse preferences set tomcat to web server, set jre env and set axis2's runtime<br />
<br />
2. create a java project and add axis2 runtime library to its build library<br />
<br />
test ws client sample code:</p>
<p>public class TestSms<br />
{<br />
private static EndpointReference targetEPR = new EndpointReference(<br />
&nbsp;&nbsp;&nbsp;"http://cdl:8080/axis2/services/Version");<br />
<br />
&nbsp;public static OMElement getGetLeftElement(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OMFactory fac=OMAbstractFactory.getOMFactory();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OMNamespace omNs=fac.createOMNamespace("此处填写WS的命名空间","hw");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OMElement method=fac.createOMElement("WS 方法名",omNs);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OMElement value = fac.createOMElement("参数一", omNs);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value.addChild(fac.createOMText(value, "值一"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.addChild(value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value = fac.createOMElement("参数二", omNs);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value.addChild(fac.createOMText(value, "值2"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.addChild(value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return method;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options options=new Options();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; options.setTo(targetEPR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; options.setAction("命名空间/WS 方法名");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServiceClient sender=new ServiceClient();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sender.setOptions(options);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OMElement sayHello=TestSms.getGetLeftElement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //WSDLConstants.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OMElement result=sender.sendReceive(sayHello);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OMElement elem = result.getFirstElement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(elem.getText());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception axisFault){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; axisFault.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<br />
<br />
ref: <a href="http://zhangjunhd.blog.51cto.com/113473/23690">http://zhangjunhd.blog.51cto.com/113473/23690</a><br />
<img src ="http://www.blogjava.net/margiex/aggbug/155950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2007-10-25 20:58 <a href="http://www.blogjava.net/margiex/archive/2007/10/25/155950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用apache http server and tomcat 建立支持负载均衡的WEB方案 (转载)</title><link>http://www.blogjava.net/margiex/archive/2007/03/10/103007.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Sat, 10 Mar 2007 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2007/03/10/103007.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/103007.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2007/03/10/103007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/103007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/103007.html</trackback:ping><description><![CDATA[
		<h3 class="post-title">
				<a href="http://thought-bytes.blogspot.com/2007/03/how-to-load-balance-tomcat-55-with.html">How to load balance Tomcat 5.5 with Apache on Windows</a>
		</h3>
		<div class="post-header-line-1">
		</div>
		<div class="post-body">
				<p>
						<br />ref:<br /><a href="http://thought-bytes.blogspot.com/2007/03/how-to-load-balance-tomcat-55-with.html">http://thought-bytes.blogspot.com/2007/03/how-to-load-balance-tomcat-55-with.html</a></p>
		</div>
<img src ="http://www.blogjava.net/margiex/aggbug/103007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2007-03-10 17:17 <a href="http://www.blogjava.net/margiex/archive/2007/03/10/103007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个解决java 中jsessionid安全性的方法</title><link>http://www.blogjava.net/margiex/archive/2006/11/08/79819.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Wed, 08 Nov 2006 04:32:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2006/11/08/79819.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/79819.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2006/11/08/79819.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/79819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/79819.html</trackback:ping><description><![CDATA[
		<a href="http://randomcoder.com/articles/jsessionid-considered-harmful">http://randomcoder.com/articles/jsessionid-considered-harmful</a>
<img src ="http://www.blogjava.net/margiex/aggbug/79819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2006-11-08 12:32 <a href="http://www.blogjava.net/margiex/archive/2006/11/08/79819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows 2003中JAVA不能使用的解决</title><link>http://www.blogjava.net/margiex/archive/2006/04/04/39260.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Tue, 04 Apr 2006 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2006/04/04/39260.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/39260.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2006/04/04/39260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/39260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/39260.html</trackback:ping><description><![CDATA[最近总是打不开网页中的JAVA程序, 本来机器上有JAVA开发环境, 重装系统一般不安装JAVA,反正设置java_home和path中添加javac/java就可以了. 结果IE总是打不开,也不找到原因. 今天没办法了, 要参加一项考试,只好在网上搜索了一下, 原来出问题总是有原因的.<br /><br />参考官方帮助: <a href="http://www.java.com/zh_CN/download/help/win_offline.xml" href_cetemp="http://www.java.com/zh_CN/download/help/win_offline.xml">http://www.java.com/zh_CN/download/help/win_offline.xml</a><br /><br />下载jre运行环境.安装.<br /><br /><ol><li>双击该图标打开“Java 控制面板” 
</li><li>在“Java 控制面板”中选择“浏览器”选项卡 
</li><li>确保选中“Internet Explorer”、“Netscape”或“Mozilla”旁边的复选框 
</li><li>如果尚未选中，请选中对应的复选框，为您的 Web 浏览器启用 JRE 
</li><li>单击“应用”按钮 </li></ol><p><strong>Internet Explorer 4.x 及更高版本<br /></strong></p><ol><li>单击“工具”--&gt;“Internet 选项” 
</li><li>选择“高级”选项卡，并向下滚动到“Java (Sun)” 
</li><li>选中“使用 Java 2 版本”旁边的复选框 
</li><li>接下来选择“安全”选项卡，然后选择“自定义级别”按钮 
</li><li>向下滚动到“Java 小程序脚本” 
</li><li>确保选中“启用”单选按钮。 
</li><li>单击“确定”保存您的首选设置。 </li></ol><p>最后不要忘了在这里测试一下是否安装成功: <a href="http://www.java.com/zh_CN/download/help/testvm.xml">http://www.java.com/zh_CN/download/help/testvm.xml</a></p><img src ="http://www.blogjava.net/margiex/aggbug/39260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2006-04-04 22:24 <a href="http://www.blogjava.net/margiex/archive/2006/04/04/39260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>另一点JAVA的不足</title><link>http://www.blogjava.net/margiex/archive/2006/03/10/34616.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Fri, 10 Mar 2006 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2006/03/10/34616.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/34616.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2006/03/10/34616.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/34616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/34616.html</trackback:ping><description><![CDATA[久未在这里练笔了.今天突然想到为什么JAVA在国内始终对初学者而言不容易. 是因为网上的DEMO或示例感觉比.net的少,而且有示例也不是直接能在eclipse或jbuilder中打开的. 一般初学者估计IDE不是很熟悉,因此要把示例代码运行起来就不容易了, 更何况要分析别人的代码. 相比之下,.net的示例一般是整个工程,而且由于只有vs IDE,因此提供的示例一般是针对此平台的, 要学也就容易多了.<BR>听说goolge要收购sun java了,如果真是这样, 应该是一件好事, 又多了一个强有力的竞争者, JAVA的前途就光明了.<BR><BR>一点个人浅见.<img src ="http://www.blogjava.net/margiex/aggbug/34616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2006-03-10 10:29 <a href="http://www.blogjava.net/margiex/archive/2006/03/10/34616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>岁末小结</title><link>http://www.blogjava.net/margiex/archive/2005/12/30/26064.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Fri, 30 Dec 2005 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2005/12/30/26064.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/26064.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2005/12/30/26064.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/26064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/26064.html</trackback:ping><description><![CDATA[<P><BR>明天就是2005年最后一天了, 本想休一天假, 只是最近手头上的项目跟别的公司有关, 脱不了身, 烦燥呀, 准LP又在骂了, 要生存, 没办法。<BR>去年底搞了个今年十大目标，看了一下，没几个完成了，估计只有30-40%完成了。</P>
<P>整天都在忙，不管是公司的事还是自己的研究，这一年就没有几天晚上是12点之前睡的，在上一个公司经常是晚上11点回去睡觉，现在这家公司是回去之后继续搞，所有的业余爱好都没有了，买了个DC，也没怎么用，什么都没有心情，事情总是在那里等着，视力又下降了，身体感觉不如从前了。记忆力也下降了，前一阵子的事都不记得了，只知道这两天做了些啥。<BR>虽然又长了一岁，其它到是没什么长进:</P>
<P>&nbsp;</P>
<UL>
<LI>五一节前终于换了家公司，计划之内的事，也算是完成了一项计划任务；</LI>
<LI>今年开始听《余世维》的讲座了，学以致用，没地方用，听了也没多少长进；</LI>
<LI>上周终于把两年前买的MP3搞懂如何快进了，便宜货就是不好用；</LI>
<LI>MS出vs2k5，装上了，也感觉蛮好用，只是机器跑不动了；</LI>
<LI>开始使用Eclipse开发真正的JAVA项目，发现自己真的是很菜，眼高手低的毛病还是没改；</LI>
<LI>常年出差在外，跟准LP吵了无数次，已经是家常便饭了，计划明年结婚，还不知道是否会途中有变；</LI>
<LI>联系上以前的同学，可是要么不敢说话，要么就是没话说；</LI>
<LI>那个买的房子还有问题，不是我家里漏水，就是别人家漏水来淹我，唉，人倒霉了挡都挡不住；</LI>
<LI>周围的同学和以前的同事要么结婚，要么就是准备当爸妈了，想想自己还在外面打工，感觉自己真是没多少出息；</LI>
<LI>还有，想不起来了，。。。<BR><BR>每天都是新的一天，努力做好现在的事才是最重要的，把去年的计划拿来改改，争取在元旦这几天弄个2006年计划了，日子再艰难，也得过呀，毕竟这也是一种生活。</LI></UL>
<P>&nbsp;</P><img src ="http://www.blogjava.net/margiex/aggbug/26064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2005-12-30 15:25 <a href="http://www.blogjava.net/margiex/archive/2005/12/30/26064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java项目开发笔记</title><link>http://www.blogjava.net/margiex/archive/2005/12/17/24368.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Sat, 17 Dec 2005 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2005/12/17/24368.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/24368.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2005/12/17/24368.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/24368.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/24368.html</trackback:ping><description><![CDATA[<P>最近要在一个项目中使用java, 本来是用.net开发的, 可是验收时用户要求用java平台,只好进行移植工作了. 一直使用的是.net开发, JAVA只是关注, 没有深入研究, 等实际应用时才发现自己水平有限, 问题一堆.<BR>把最近碰上的问题做些整理:</P>
<P>使用JAVA平台的问题:<BR>1. 开发工具太多, 什么Eclipse, jbuilder等,各有不同, 让人熟悉就花时间了, 本为以为对JB比较熟悉,又有2006版本了, 就用它吧, 可是才两天, 就发现自己的代码文件中的中文变为乱码了, 当然网上有一堆解决方案, 只是心里不爽, 直接不用了, 改为eclipse了, 操作界面不是很熟悉, 与VS.NET IDE还是有不少区别, 只是用多了自然就熟悉了,<BR>又从网上当了一堆插件, 什么tomcat, xml编辑器, 没有用myeclipse, 虽然支持JSP,以前用过一下, 也不太好用, 其它的就没找到什么好东西了, 时间也不允许, 至少现在可以调度JAVA代码了, JSP的调试再说吧.<BR>2. 开始整的时候,发现自己在WEB开发方面熟悉的是VS的ASPX事件模型, 反而不知道如何处理JSP了, 只好使用以前ASP的模式, 使用form提交, 感觉真是太落伍了, 虽然现在有许多AJAX之类的东西, 也支持客户端事件模型, 实在没时间研究这些东西了. 先做出来再说. <BR>数据库连接类使用了以前jive中的几个类, 支持在xml中配置连接等, 再自己写了一个类, 从XML中读取SQL语句, 差不多能用.<BR>3。在网上搜索了一把，未找到在eclipse中对web service支持比较好的plugin，发现版本都比较低，似乎久未更新了，JB下到是有不错的设计和编译界面，只是JB其它太烂。</P>
<P><BR>字符集问题：<BR>使用java首先就要碰上一个中文字符的显示和处理问题, 这些问题总是很烦, 要对request进行编码才能解决.<BR>既然使用非MS平台, 数据库可能就不会用到mssql server了, 使用mysql, 发现要移植以前的数据还是比较容易, 但mysql的驱动实在不好弄, 刚开始使用纯JDBC的驱动, 结果发现在中文字符的处理上始终有问题, 只好<BR>网上查原因, 发现jdbc驱动的版本太低, 在判断中文字符上有问题, 升级驱动程序, 可以插入和显示了, 但SQL中是中文, 可是进了数据库就是乱码, 试了N遍也不行, 只好改为jdbc-odbc.<BR>但接下来在执行batch sql时又报错了, 说mysql odbc driver 的SQL语法错, 检查了半天, SQL也能在mysql中执行的, 就是不能通过JAVA提交执行. 用的是mysql 5.0.X, 支持unicode 的编码建表. 最后只能采用一个折衷的办法，自己写一个批量执行SQL的类，采用“；”分隔多个SQL，在调用时仍然一行一行的执行，郁闷。</P>
<P>最终的字符集解决办法：<BR>页面上要设置字符集的输出格式，如GBK或GB2312，另外，如果使用统一的包含文件定义输出字符集，还是不行，必须在每个页面中单独定义，也可能是我的INCLUDE方式不对;<BR>数据库连接字符串中也要设置编码;<BR>在传递数据到DB的SQL还要对中文进行编码;<BR>String key = new String(request.getParameter("txtKey").getBytes("ISO8859_1"));<BR>最后还有一个问题是，如果TOMCAT编译JSP文件生成的JAVA文件有乱码，那么在访问的时候页面上总是要报错，什么"delete tokens"之类的，此时要删除掉tomcat\work目录下的中间编译代码才行；</P>
<P><BR>控件及常用库<BR>WEB控件, 网上有一堆各种各样的lib和控件, 但这些东西太浪费时间, 光是上网找就比较花时间了, 下回来试用也有各种各样的问题,<BR>每个控件有自己的特色, 而且每个总是满足了这个,满足不了那个需求, 要都满足, 还是要收费的才行, 毕竟天下没有多少免费的午餐;<BR>主要有几个：<BR>&nbsp;1。数据显示表格控件，应该能支持排序，有缓存机制，能分页，能设置格式，支持ResultSet或ArrayList之类的，还要有导出excel等功能；最好要能简单使用。<BR>&nbsp;2。图表控件，最有名的当然是cewolf/jfreechart，只是要使用它自己定义的DatasetProducer，不能直接使用ResultSet，也是个麻烦事，不过的确是很不错的控件了。</P>
<P><BR>小结<BR>1。经过这次移植，发现JAVA还是有许多很牛的地方，采用hashmap来缓存数据，效率的确很不错，只是用得太多，缺乏管理机制，有点混乱了，下一阶段再重构一下，形成一个管理框架最好；<BR>2。eclipse开发的确很不错，与vs ide差别是比较大，只是使用习惯了之后发现其功能强大，而且可以找些plugin来扩展功能，估计我只是看到了点皮毛而已。<BR>3。在JAVA下开发，使用Javascript太多，还没找到更好解决办法，水平有限；<BR>4。与另一个人一起开发，大家的编程风格和代码不够规范，使用了一些重复的类和方法，这在后期维护是个工作，时间太紧，项目总是这样，就没得多少提高了；</P>
<P>个人水平实在有限，上面只是一面之词，项目月底才结束，有什么变更再补充。<BR></P><img src ="http://www.blogjava.net/margiex/aggbug/24368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2005-12-17 16:02 <a href="http://www.blogjava.net/margiex/archive/2005/12/17/24368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>办理户口迁移</title><link>http://www.blogjava.net/margiex/archive/2005/10/25/16700.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Tue, 25 Oct 2005 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2005/10/25/16700.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/16700.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2005/10/25/16700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/16700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/16700.html</trackback:ping><description><![CDATA[不用说，这种事情一般人如果没有经历过，或旁边没有人经历过，要想搞得很清楚，一会儿就搞定是不可能的。<BR>在N天前就到办证中心去拿了一张清单，上面有需要用到的证明文件。查看了一下家里的百宝箱，差不多都有。趁着8月份的五天请假，星期四的时候去办理。过程到不是很复杂，只拿了张一式两联的准迁证，当时根本就未在意准迁证上的内容，上面有个有效期的说法。这也只能怪自己粗心大意了。有效期是40天，到差不多过了一个月之后即9。10我还在出差，顺便让老婆看了一下，才发现是有有效期的，赶紧打电话问能否延长，这下麻烦了。17号在成都的时候，本想托人带回乐山给我老爸，可是我再仔细看了一下，发现必须在9.20之前回成都办理好，算了一下时间，已然来不及。19号，到办证中心希望能延长一下有效期，幸好，他们把有效期延长了一个月，赶快EMS给老爸，周三收到，周四到乐山办理销户并寄回成都，周六在成都收到。9。30，以请了一天假，到办证中心办理户口及身份证，按照要求需要提供：户口销户证明，准迁证第二联，身份证及照片两张。本以为办证中心旁边的照相中心说不能照非身份证照，惨，又赶快去找了一家普通相馆照相。交上各手续，终于拿到了成都市的户口薄，正准备办身份证，说是照相的联网有问题，不能照，旁边的一群人立刻炸开了锅，大骂政府办事有问题，甚至有人开始打电话投诉，没过多久，也不知道如何又搞好了，反正又排起长队开始照，我前面有20个人左右，差不多等了一个小时，造成老爸的生日午饭也没来得及赶回去吃。照完后又到柜台办理身份证，交上各手续和20元钱，说两个月之内可以拿到了。唉，真是好事多磨。不仅花了不少邮寄费，也花了不少时间和精力。政府为何就不改善一下局面，明知效率低，有问题，非得经过这些琐碎的步骤才行。对于没经历过的人而言，真的是要耽搁不少时间。<BR><img src ="http://www.blogjava.net/margiex/aggbug/16700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2005-10-25 08:49 <a href="http://www.blogjava.net/margiex/archive/2005/10/25/16700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Junit4功能 先睹为快. (译文)</title><link>http://www.blogjava.net/margiex/archive/2005/09/15/13104.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Thu, 15 Sep 2005 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2005/09/15/13104.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/13104.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2005/09/15/13104.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/13104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/13104.html</trackback:ping><description><![CDATA[<table border="0" cellpadding="0" cellspacing="0" width="100%">
			<tr valign="top">
				<td width="100%">
					<h1>An early look at JUnit 4</h1>
					<p id="subtitle"><em>Upcoming release promises evolution in testing</em></p>
				</td>
				
			</tr>
		</table>
		
		<table border="0" cellpadding="0" cellspacing="0" width="100%">
			<tr valign="top">
				
				<td width="100%">
					<p>难度级别: 中</p>
					<p><a href="#author">Elliotte Harold </a>(<a href="mailto:elharo@metalab.unc.edu?subject=An early look at JUnit 4&cc=dwxed@us.ibm.com">elharo@metalab.unc.edu</a>), 
						Adjunct Professor, Polytechnic University<br>
					</p>
					<p>
						2005-9-15 （译）</p>
					<P>原文：<A href="http://www-128.ibm.com/developerworks/java/library/j-junit4.html">http://www-128.ibm.com/developerworks/java/library/j-junit4.html</A></P>
					<blockquote> JUnit 是JAVA语言事实上的标准测试库。JUnit 
						4是三年以来最具里程碑意义的一次发布。它的新特性主要是针对JAVA5中的标记（annotation）来简化测试，而不是利用子类、反射或命名机制。本文将讲述如何使用JUnit 
						4，当前前提是你最好具有JUnit的使用经验．</blockquote>
					<p>JUnit, 由Kent Beck 和 Erich Gamma开发，几乎是JAVA开发最重要的第三方工具。正如Martin Fowler 
						所说，“在软件开发领域，从来就没有如此少的代码起到了如此重要的作用“。由于JUnit，JAVA代码变得更健壮，更可靠，BUG也比以前更少。由于JUnit 
						(由Smalltalk's的SUnit得来) 的出现，随后产生了许多xUnit的测试工具，如nUnit (.NET), pyUnit (Python), 
						CppUnit (C++), dUnit (Delphi) 和其它不同平台及语言的测试相关的工具。</p>
					<p>
						虽然JUnit也只是一个工具，但其产生的思想和技术却较其架构更意义重大。单元测试，测试先行的编程方式，测试驱动的开发方式，并非必须由JUNIT实现，也不一定要用SWing实现GUI界面。JUNIT最近的一次更新是在三年前，但它比其它大多数有BUG的框架都要健壮，更重要的是，JAVA一直在改进。现在JAVA支持泛型，枚举，可变长度参数，以及标记语言（开创了开发可重用框架的新局面）。</p>
					<P>
						JUnit's的停滞不前使得那些想要变革的开发人员换其它测试工具．挑战者有Bill Venners的Artima SuiteRunner和Cedric 
						Beust的TestNG．这些工具库虽然有值得推荐的功能，但没有任何一款的地位能与JUNIT相比，没有任何一款工具被其它业界产品如Ant, Maven, 
						Eclipse广泛支持．因此Beck 
						和Gamma双开始利用JAVA5的新特性来开发新版的JUNIT，目的是利用JAVA5中的标记特性使得单元测试开发更容易。Beck说：“JUNIT4的主要目的是通过简化JUNIT的使用鼓励更多的开发人员写更多的测试”。虽然会与以前的版本兼容，但JUNIT4与从JUNIT1.0就开始的版本相比会有一个非常大的变化．
					</P>
					<p><STRONG>注意: </STRONG>修改基本框架是一把双刃剑，虽然JUNIT4的目的是清晰的，但细节仍有许多不同，因此本文只是一个简单的介绍，并不是最终文档．
					</p>
					<p><a name="N1007F"><span class="atitle"><STRONG>测试方法</STRONG></span></a></p>
					<p>
						以前所有版本的JUNIT都使用命名机制和反射来定位测试，下面的代码测试1+1= 2：</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">import junit.framework.TestCase;

public class AdditionTest extends TestCase {

  private int x = 1;
  private int y = 1;
  
  public void testAddition() {
    int z = x + y;
    assertEquals(2, z);
  }

}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>而在JUNIT 4中，测试方法由<STRONG>@Test</STRONG> 标记说明，如下：</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">import org.junit.Test;
import junit.framework.TestCase;

public class AdditionTest extends TestCase {

  private int x = 1;
  private int y = 1;
  
  @Test public void testAddition() {
    int z = x + y;
    assertEquals(2, z);
  }

}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						使用标记的好处是你不用将所有测试方法命名为 <code>testFoo()</code>, <code>testBar()等等以"test"开头的方法，下面的方法也同样可以工作：</code></p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">import org.junit.Test;
import junit.framework.TestCase;

public class AdditionTest extends TestCase {

  private int x = 1;
  private int y = 1;
  
  @Test public void additionTest() {
    int z = x + y;
    assertEquals(2, z);
  }

}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						下面的代码也同样正确：</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">import org.junit.Test;
import junit.framework.TestCase;

public class AdditionTest extends TestCase {

  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
    int z = x + y;
    assertEquals(2, z);
  }

}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						这种命名机制最大的优点是更适合你的待测试类或方法名称，例如，你可以使用ListTEst.contains()测试 <code>List.contains()</code>;使用ListTest.addAll()测试
						<code>List.add()等等．</code>
					</p>
					<p>
						<code><STRONG>TestCase</STRONG>还可以继续使用，但你没有必须再扩展为子类，只要你声明了@Test，你可以将测试方法放在任何类中，当然如要访问assert等方法，你必须要引用junit.Assert类，如下：</code></p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">import org.junit.Assert;

public class AdditionTest {

  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
    int z = x + y;
    Assert.assertEquals(2, z);
  }

}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						你也可以使用JDK5中的新特性(static import)使得跟以前版本一样简单：
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">import static org.junit.Assert.assertEquals;

public class AdditionTest {

  private int x = 1;
  private int y = 1;
  
  @Test public void addition() {
    int z = x + y;
    assertEquals(2, z);
  }

}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						这种方法测试受保护的方法非常容易，因为你可以在测试类中继承有受保护方法的类．
					</p>
					<br>
					<table class="no-print" cellspacing="0" cellpadding="0" align="right">
						<tr align="right">
							<td><table border="0" cellpadding="0" cellspacing="0">
									<tr>
										<td valign="middle"><br>
										</td>
										<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
									</tr>
								</table>
							</td>
						</tr>
					</table>
					<br>
					<br>
					<p><a name="N100DD"><span class="atitle"> SetUp 和TearDown</span></a></p>
					<p>
						JUnit 3 中<STRONG>test runners</STRONG> 会在每个测试之前自动调用 <code>setUp()方法。此方法主要用于初始化变量，打开日志，重置环境变量等。下面是XOM's
							<CODE>XSLTransformTest中的</CODE></code> <code>setUp()方法：</code>
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">protected void setUp() {
        
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
        
    inputDir = new File("data");
    inputDir = new File(inputDir, "xslt");
    inputDir = new File(inputDir, "input");
        
}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>在JUnit 4中，你仍然可以在每个测试前初始化变量和配置环境,，然而，这些操作可以不用在Setup()中完成，你可以在初始化方法前面添加<STRONG>@Beforer</STRONG>
						来表示，如下：
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">@Before protected void initialize() {
        
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
        
    inputDir = new File("data");
    inputDir = new File(inputDir, "xslt");
    inputDir = new File(inputDir, "input");
        
}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						你也可以有多个方法标记有＠Before，所有方法都会在每个测试之前执行：
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">@Before protected void findTestDataDirectory() {
    inputDir = new File("data");
    inputDir = new File(inputDir, "xslt");
    inputDir = new File(inputDir, "input");
}
    
 @Before protected void redirectStderr() {
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						清除环境与JUNIT3 差不多，在JUNIT3中使用 <code>tearDown()方法，下面的代码是结束测试时回收内存：</code></p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">protected void tearDown() {
  doc = null;
  System.gc();   
} </code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						在JUnit 4中，你还可以使用<STRONG>@After</STRONG>标记来说明：
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">@After protected void disposeDocument() {
  doc = null;
  System.gc();   
} </code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						与 <code>@Before一样，你也可以有多个标记有</code> <code>@After的清除方法，每个都会在执行完每个测试后执行。</code></p>
					<p>最后，你不需要在父类中明确调用这些初始化或清除方法．test 
						runner会自动调用这些标记的方法．子类中的@Before方法在父类的@Before方法之后执行（这与构造函数的执行顺序一样），而@After方法刚好相反，子类中的@After方法先执行．然而，多个@Before和@After方法的执行顺序就是未知的．</p>
					<p><FONT face="宋体"><STRONG>测试集范围的初始化</STRONG></FONT></p>
					<p>
						JUnit 
						4中引入了一项JUNIT3没有的新特性，类级别的setUp()和tearDown()，即在一个类的所有测试前执行初始化，并在所有测试完成后执行清除。
					</p>
					<p>例如，一个测试类中的每个测试都要用到一个数据库连接或网络连接，或其它很耗资源初始化或释放的资源，用不着在每个测试方法前后进行操作，而只需要在测试类开始前后执行即可。下面的示例是使用第三方的库进行错误，在执行所有测试前将错误先重定向到非标准输出，然后在所有测试结束后再输出到需要的地方，这样就不会影响到测试过程中产生的其它信息。</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">// This class tests a lot of error conditions, which
// Xalan annoyingly logs to System.err. This hides System.err 
// before each test and restores it after each test.
private PrintStream systemErr;
    
@BeforeClass protected void redirectStderr() {
    systemErr = System.err; // Hold on to the original value
    System.setErr(new PrintStream(new ByteArrayOutputStream()));
}
    
@AfterClass protected void tearDown() {
    // restore the original value
    System.setErr(systemErr);
}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						上面的操作没有必须在每个测试前后执行。然而要注意的是，这种方法可能影响测试间的结果，如果一个测试改变了初始化的对象，而这个对象可能是其它测试的输入，那么测试的结果可能不正确，这种方法将依赖测试的顺序并可能引入BUG。当优化测试性能，并且当你改进了配置和基准测试后而仍然很慢时，如数据库连接或网络问题，你才需要考虑使用这种方法。只有这样，你才能每天执行多次测试。
					</p>
					<br>
					<table class="no-print" cellspacing="0" cellpadding="0" align="right">
						<tr align="right">
							<td><table border="0" cellpadding="0" cellspacing="0">
									<tr>
										<td valign="middle"><br>
										</td>
										<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
									</tr>
								</table>
							</td>
						</tr>
					</table>
					<br>
					<br>
					<p><a name="N10173"><span class="atitle"><STRONG>异常测试</STRONG></span></a></p>
					<p>异常测试是JUNIT4中的最大的改进，以前异常测试是通过try catch实现，当抛出异常时，在try的最后添加一条fail()语句实现．如下：
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">public void testDivisionByZero() {
    
    try {
        int n = 2 / 0;
        fail("Divided by zero!");
    }
    catch (ArithmeticException success) {
        assertNotNull(success.getMessage());
    }
    
}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						这种方法不仅难看，而且造成无论成功或失败，代码覆盖工具都不能执行某些代码．而在JUnit 4中，你可以在要抛出异常的代码中添加标记来声明一个异常是期望的：
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">@Test(expected=ArithmeticException.class) public void divideByZero() {
    int n = 2 / 0;
}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						如果没有异常抛出，上面的测试则会失败，如果你想知道异常的详细信息或其它情况，你还是要使用try catch才行
						<br>
						<table class="no-print" cellspacing="0" cellpadding="0" align="right">
							<tr align="right">
								<td><table border="0" cellpadding="0" cellspacing="0">
										<tr>
											<td valign="middle"><br>
											</td>
											<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
										</tr>
									</table>
								</td>
							</tr>
						</table>
						<br>
						<br>
					</p>
					<p><FONT face="宋体"><STRONG>需要忽略的测试</STRONG></FONT></p>
					<p>
						也许你有些测试需要很长时间才能执行完成，并非是这个测试应该跑得快，而是它做的很复杂和很慢的工作造成的．如访问远程网络错误，需要很久才能有反馈．如果你不想让这种测试破坏你整个测试过程，你可能想跳过这个测试．当然也有可能某个测试超出控制范围而失败．如W3C 
						XInclude测试集中自动识别一些JAVA不支持的Unicode代码．为了防止这些测试总是通不过，可以使用标记 <code><STRONG>@Ignore</STRONG>跳过这些测，如下：</code>
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">// Java doesn't yet support the UTF-32BE and UTF32LE encodings
    @Ignore public void testUTF32BE() 
      throws ParsingException, IOException, XIncludeException {
      
        File input = new File(
          "data/xinclude/input/UTF32BE.xml"
        );
        Document doc = builder.build(input);
        Document result = XIncluder.resolve(doc);
        Document expectedResult = builder.build(
          new File(outputDir, "UTF32BE.xml")
        );
        assertEquals(expectedResult, result);
                
    }</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>test runner不会执行这些测试，但会说明这些测试被跳过了。在命令行测试界面中，字母“I”会表示测试跳过，或“E”表示测试失败，而不是用点”."表示成功．</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">$ java -classpath .:junit.jar org.junit.runner.JUnitCore nu.xom.tests.XIncludeTest
JUnit version 4.0rc1
.....I..
Time: 1.149

OK (7 tests)</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						要注意的是，假设这些测试由于某种理由放在最开始，如果你以后一直忽略这些测试，那些需要被测试的代码可能有问题而不会被检测到。因此忽略测试只是一个临时解决方法，并不是一个解决任何问题的真正办法。
					</p>
					<br>
					<table class="no-print" cellspacing="0" cellpadding="0" align="right">
						<tr align="right">
							<td><table border="0" cellpadding="0" cellspacing="0">
									<tr>
										<td valign="middle"><br>
										</td>
										<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
									</tr>
								</table>
							</td>
						</tr>
					</table>
					<br>
					<br>
					<p><FONT face="宋体"><STRONG>时间测试</STRONG></FONT></p>
					<p>
						性能测试是单元测试中最头疼的问题，JUnit 4也未完全解决此问题， 
						你可以在JUNIT4的测试方法中添加一个时间参数。如果测试时间超过参数，则测试失败。如下，如果测试时间超过0.5秒，则此测试失败：</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">
@Test(timeout=500) public void retrieveAllElementsInDocument() {
    doc.query("//*");
} </code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						除基准性能测试外，时间测试在网络测试方面也很有用．如果一个远端的主机或数据当掉或太慢，你可以跳过此测试而不用阻塞在这里，好的测试集可以在作了一些改动后很快的一遍一遍的执行，可能一天数十次．设置一个超时让测试更快的执行，下面的示例中如果分析http://www.ibiblio.org/xml 
						的时间超过２秒，则测试失败．</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">
@Test(timeout=2000) 
  public void remoteBaseRelativeResolutionWithDirectory()
   throws IOException, ParsingException {
      builder.build("http://www.ibiblio.org/xml");
  } </code></pre>
							</td>
						</tr>
					</table>
					<br>
					<br>
					<table class="no-print" cellspacing="0" cellpadding="0" align="right">
						<tr align="right">
							<td><table border="0" cellpadding="0" cellspacing="0">
									<tr>
										<td valign="middle"><br>
										</td>
										<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
									</tr>
								</table>
							</td>
						</tr>
					</table>
					<br>
					<br>
					<p><a name="N101CD"><span class="atitle"><STRONG>新的断言</STRONG></span></a></p>
					<p>
						JUnit 4 增加了两上断文方法用于比较数组：</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">
public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected, 
Object[] actual)
</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>这两个方法采用最直接方法比较，如果数组长度相同，且每个对应的元素相同，则比较成功，否则不成功．参数为空的情况也作了考虑．
						<br>
						<table class="no-print" cellspacing="0" cellpadding="0" align="right">
							<tr align="right">
								<td><table border="0" cellpadding="0" cellspacing="0">
										<tr>
											<td valign="middle"><br>
											</td>
											<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
										</tr>
									</table>
								</td>
							</tr>
						</table>
						<br>
						<br>
					</p>
					<p><FONT face="宋体"><STRONG>需要补充的地方</STRONG></FONT></p>
					<p>JUnit 4是一个非常基本的框架，还不是以前版本的升级。JUNIT3的开发人员会发现有些功能没有。
					</p>
					<UL>
						<LI>
							<FONT face="宋体">最大的特点就是没有GUI测试界面，当测试正确时是绿色条，而出错时红色的，你也可以在Eclipse中集成JUNIT使用，但JUNIT4既没有AWT也没有SWING的GUI测试界面；</FONT>
						<LI>
							<FONT face="宋体">另一个让人吃惊的是失败（期望错误）和错误（未预计的异常错误）没有明显区别，在JUNIT3中开发人员可以区分这两种情况，而在JUNIT4中不行；</FONT>
						<LI>
							<FONT face="宋体">最后一个特点是JUNIT中没有用于建立一堆测试类的<CODE>suite()方法，取而代之的是，采用变长参数传递未知数量的测试给test 
									runner。</CODE></FONT></LI></UL>
					<p>
						没有GUI测试界面的确不方便，但其它改变简化了JUNIT的使用，从当前JUNIT的操作手册和FAQ的数量就知道，而JUNIT4的文档将不会需要这么多。
					</p>
					<br>
					<table class="no-print" cellspacing="0" cellpadding="0" align="right">
						<tr align="right">
							<td><table border="0" cellpadding="0" cellspacing="0">
									<tr>
										<td valign="middle"><br>
										</td>
										<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
									</tr>
								</table>
							</td>
						</tr>
					</table>
					<br>
					<br>
					<p><a name="N101FA"><span class="atitle"><STRONG>编译和运行JUnit 4</STRONG></span></a></p>
					<p>
						现在JUnit 4还没有发布编译版本，如果想体验版本的乐趣，则需要从CVS中获取源代码。分支标签是"Version4" (see <a href="#resources">
							Resources</a> ).要注意的是大部分文档是根据JUNIT3编写的，还未同步更新。需要Java 5才能编译JUnit 
						4，因为大量使用了标记，泛型其其它JDK5中的新特性。
					</p>
					<p>
						执行测试的命令行方式与JUNIT3有点区别，你现在要使用 <code>org.junit.runner.JUnitCore</code> 类进行测试，如下：
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">
$ java -classpath .:junit.jar org.junit.runner.JUnitCore 
  TestA TestB TestC...
JUnit version 4.0rc1

Time: 0.003

OK (0 tests)</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p><a name="N10212"><span class="smalltitle"><STRONG>兼容性</STRONG></span></a></p>
					<p>Beck 和Gamma在努力保持后向和前向兼容性。JUnit 4可以直接运行根据JUNIT3编写的测试类，而不用任何修改，直接将各测试类的全名传递给test 
						runner即可．test runner会根据不同的测试类调用不同的测试框架版本．
					</p>
					<p>
						后向兼容性有点麻烦，即在JUNIT3中执行根据JUNIT4写的测试类，之所以要这样是因为在一个集成环境如Ecplise中，不需要升级到JUNIT4也可以测试JUNIT4的测试类，从而避免工具IDE的升级。为了让JUNIT4的测试类在JUNI3中能执行，你需要一个适配类<CODE><STRONG>JUnit4TestAdapter</STRONG>封装JUNIT3的测试类，如下代码：</CODE>
					</p>
					<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1">
						<tr>
							<td><pre><code class="section">public static junit.framework.Test suite() {
  return new JUnit4TestAdapter(AssertionTest.class);    
}</code></pre>
							</td>
						</tr>
					</table>
					<br>
					<p>
						而JAVA方面，JUNIT4一点兼容性都没有，因为完全依赖于JDK5的新特性，因此不可能在JAVA1.4上面执行JUNIT4。</p>
					<br>
					<table class="no-print" cellspacing="0" cellpadding="0" align="right">
						<tr align="right">
							<td><table border="0" cellpadding="0" cellspacing="0">
									<tr>
										<td valign="middle"><br>
										</td>
										<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
									</tr>
								</table>
							</td>
						</tr>
					</table>
					<br>
					<br>
					<p><STRONG>还有...</STRONG></span></p>
					<p>
						JUnit 4远未结束，还有许多需要补充，如文档，现在不推荐将以前的测试类升级到JUNIT4。当然JUNIT4的开发速度很快，其计划也很快会实现，JAVA1.4的开发人员仍然可以使用JUNIT3.8，而使用JAVA5的人员可以考虑是否采用JUNIT4了，因为在特性上更适合。
					</p>
					<br>
					<table class="no-print" cellspacing="0" cellpadding="0" align="right">
						<tr align="right">
							<td><table border="0" cellpadding="0" cellspacing="0">
									<tr>
										<td valign="middle"><br>
										</td>
										<td valign="top" align="right"><a href="#main" class="fbox"><b>Back to top</b></a></td>
									</tr>
								</table>
							</td>
						</tr>
					</table>
					<br>
					<br>
					<p><a name="resources"><span class="atitle"><STRONG>资源</STRONG></span></a></p>
					<ul>
						<li>
							<a href="http://www.pragmaticprogrammer.com/starter_kit/utj/index.html"><i>Pragmatic 
									Unit Testing in Java with JUnit</i></a> (Andy Hunt and Dave Thomas, 
							Pragmatic Programmers, 2003): An excellent introduction to unit testing.<br>
							<br>
						<li>
							<a href="http://www.amazon.com/exec/obidos/ISBN=1932394230/ref=nosim/cafeaulaitA/"><i>JUnit 
									Recipes: Practical Methods for Programmer Testing</i></a> (J. B. 
							Rainsberger, Manning, 2004): One of the most widely cited and referenced books 
							on JUnit.<br>
							<br>
						<li>
							<a href="http://www.beust.com/testng/">TestNG</a>: Cedric Beust's framework 
							pioneered the annotation based testing style now used in JUnit 4.<br>
							<br>
						<li>
							"<a href="http://www.ibm.com/developerworks/java/library/j-testng/">TestNG makes 
								Java unit testing a breeze</a>" (Filippo Diotalevi, developerWorks, January 
							2005): An introduction to TestNG.<br>
							<br>
						<li>
							"<a href="http://www.ibm.com/developerworks/library/j-ant/">Incremental development 
								with Ant and JUnit</a>" (Malcolm Davis, developerWorks, November 2000): 
							Explores the benefits of unit testing, in particular using Ant and JUnit, with 
							code samples.<br>
							<br>
						<li>
							"<a href="http://www.ibm.com/developerworks/java/library/j-xp042203/index.html">Demystifying 
								Extreme Programming: Test-driven programming</a>" (Roy Miller, 
							developerWorks, April 2003): Find out how test-driven programming can 
							revolutionize your productivity and quality as a programmer, and learn the 
							mechanics of writing tests.<br>
							<br>
						<li>
							"<a href="http://www.ibm.com/developerworks/edu/i-dw-wes-junit-i.html">Keeping 
								critters out of your code</a>" (David Carew, et. al., developerWorks, June 
							2003): Learn how you can use JUnit in conjunction with WebSphere Application 
							Developer.
							<br>
							<br>
						<li>
							"<a href="http://www.ibm.com/developerworks/java/library/j-cobertura/">Measure test 
								coverage with Cobertura</a>" (Elliotte Rusty Harold, developerWorks, May 
							2005): Learn to identify untested code and locate bugs with this handy open 
							source tool.
							<br>
							<br>
						</li>
					</ul>
					<br>
					<b>下载测试版本</b><br>
					<ul>
						<li>
							<a href="http://cvs.sourceforge.net/viewcvs.py/junit/junit/?only_with_tag=Version4">
								JUnit 4</a>: Download the newest version of JUnit the SourceForge CVS 
							repository; be sure to use the branch tag "Version4."<br>
							<br>
						</li>
					</ul>
				</td>
			</tr>
		</table>
		</TD></TR></TABLE><img src ="http://www.blogjava.net/margiex/aggbug/13104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2005-09-15 18:02 <a href="http://www.blogjava.net/margiex/archive/2005/09/15/13104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat4中配置https</title><link>http://www.blogjava.net/margiex/archive/2005/04/19/3461.html</link><dc:creator>Java,研究之路</dc:creator><author>Java,研究之路</author><pubDate>Tue, 19 Apr 2005 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/margiex/archive/2005/04/19/3461.html</guid><wfw:comment>http://www.blogjava.net/margiex/comments/3461.html</wfw:comment><comments>http://www.blogjava.net/margiex/archive/2005/04/19/3461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/margiex/comments/commentRss/3461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/margiex/services/trackbacks/3461.html</trackback:ping><description><![CDATA[1. 首先要安装jsse,需要jcert.jar,jnet.jar,jsse.jar三个jar;<BR>2. 然后添加keystore:<BR>%JAVA_HOME%\bin\keytool -delete -alias tomcat -keypass changeit<BR><BR>%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keypass changeit -keyalg RSA<BR><BR>%JAVA_HOME%\bin\keytool -export -alias tomcat -keypass changeit&nbsp; -file<BR>%FILE_NAME%<BR><BR>%JAVA_HOME%\bin\keytool -import -file server.crt -keypass changeit<BR>-keystore %JAVA_HOME%/jre/lib/security/cacerts<BR><BR>%JAVA_HOME%\bin\keytool -import -file server.crt -keystore<BR>%JAVA_HOME%\jre\lib\security\cacert<BR><BR>3. 然后在%catalina_home%\conf\server.xml.中取消SSL的注释.<BR><BR>4. visit <A href="http://localhost:8443/">http://localhost:8443/</A> test it.<BR>参考&nbsp;<A href="http://jakarta.apache.org/tomcat/tomcat-4.0-doc/ssl-howto.html">http://jakarta.apache.org/tomcat/tomcat-4.0-doc/ssl-howto.html</A>.<img src ="http://www.blogjava.net/margiex/aggbug/3461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/margiex/" target="_blank">Java,研究之路</a> 2005-04-19 14:51 <a href="http://www.blogjava.net/margiex/archive/2005/04/19/3461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>