<?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-Share JAVA-随笔分类-A)   java</title><link>http://www.blogjava.net/bcims/category/7096.html</link><description>&lt;font color="red"&gt;&lt;b&gt;什么样的素质决定什么样的技术&lt;/b&gt;&lt;/font&gt; 

&lt;div style="font-size:12px;cursor:pointer"&gt; &lt;span  title="www"&gt; www.WoMenSou.com &lt;我们搜&gt;&lt;/span&gt;&lt;/div</description><language>zh-cn</language><lastBuildDate>Fri, 28 Mar 2008 19:05:25 GMT</lastBuildDate><pubDate>Fri, 28 Mar 2008 19:05:25 GMT</pubDate><ttl>60</ttl><item><title>jacob问题-大家帮我看看,先谢过！</title><link>http://www.blogjava.net/bcims/archive/2008/03/29/189395.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Fri, 28 Mar 2008 18:16:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2008/03/29/189395.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/189395.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2008/03/29/189395.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/189395.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/189395.html</trackback:ping><description><![CDATA[
		<p>首先我已经做了如下配置：<br /><b>1.</b>导入 jacob.jar 这个包。<br /><b>2.</b>把 jacob.dll 拷贝到 C:\WINDOWS\system32 目录下。<br />以上的两个文件您可以到网上<strong><font color="#ff0000"><a href="http://danadler.com/jacob/">http://danadler.com/jacob/</a> 下载的1.7的版本<br /></font></strong>jacob.jar 与 jacob.dll 版本一致。<br /><br />代码如下：<br />package one;</p>
		<p>import com.jacob.com.*;<br />import com.jacob.activeX.*;<br />import java.io.*; <br />//取得指定目录下面所有的doc文件名称<br />public class wordtohtml2 {<br /> // ------------------------------------------------------------------------------<br /> // 方法原型: change(String paths)<br /> // 功能描述: 将指定目录下面所有的doc文件转化为HTML(html文件夹必须存在)并存储在相同目录下<br /> // 输入参数: String<br /> // 输出参数: 无<br /> // 返 回 值: 无<br /> // 其它说明: 递归<br /> // ------------------------------------------------------------------------------<br /> public static void change(String paths, String savepaths) {<br />  File d = new File(paths);<br />  // 取得当前文件夹下所有文件和目录的列表<br />  File lists[] = d.listFiles();<br />  String pathss = new String("");<br />  // 对当前目录下面所有文件进行检索<br />  for (int i = 0; i &lt; lists.length; i++) {<br />   if (lists[i].isFile()) {<br />    String filename = lists[i].getName();<br />    String filetype = new String("");<br />    // 取得文件类型<br />    filetype = filename.substring((filename.length() - 3), filename.length());<br />    // 判断是否为doc文件<br />    if (filetype.equals("doc")) {<br />     System.out.println("当前正在转换......");<br />     // 打印当前目录路径<br />     System.out.println(paths);<br />     // 打印doc文件名<br />     System.out.println(filename.substring(0, (filename.length() - 4)));<br />     ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word<br />     String docpath = paths + filename;<br />     String htmlpath = savepaths + filename.substring(0, (filename.length() - 4));<br />     String inFile = docpath;<br />     // 要转换的word文件<br />     String tpFile = htmlpath;<br />     // HTML文件<br />     boolean flag = false;<br />     try {<br />      app.setProperty("Visible", new Variant(false));<br />      // 设置word不可见<br />      Dispatch docs = app.getProperty("Documents").toDispatch();<br />      Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[] {inFile, new Variant(false), new Variant(true)}, new int[1]).toDispatch();<br />      // 打开word文件<br />      Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { tpFile, new Variant(8) }, new int[1]);<br />      // 作为html格式保存到临时文件<br />      Variant f = new Variant(false);<br />      Dispatch.call(doc, "Close", f);<br />      flag = true;<br />     } catch (Exception e) {<br />      e.printStackTrace();<br />     } finally {<br />      app.invoke("Quit", new Variant[] {});<br />     }<br />     System.out.println("转化完毕！");<br />    }<br />   } else {<br />    pathss = paths;<br />    // 进入下一级目录<br />    pathss = pathss + lists[i].getName() + "\\";<br />    // 递归遍历所有目录<br />    change(pathss, savepaths);<br />   }<br />  }<br /> }<br /> public static void main(String[] args) {<br />  String paths = new String("e:\\english\\ebook\\");<br />  String savepaths = new String("e:\\english\\ebook\\");<br />  change(paths, savepaths);<br /> }<br />} <br />运行后出现的错误为：<br />com.jacob.com.ComFailException: A COM exception has been encountered:<br />At Invoke of: Documents<br />Description: An unknown COM error has occured.<br /> at com.jacob.com.Dispatch.invokev(Native Method)<br /> at com.jacob.activeX.ActiveXComponent.getProperty(ActiveXComponent.java)<br /> at one.WordtoHtml.change(WordtoHtml.java:25)<br /> at one.WordtoHtml.main(WordtoHtml.java:39)<br />Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered:<br />At Invoke of: Quit<br />Description: An unknown COM error has occured.<br /> at com.jacob.com.Dispatch.invokev(Native Method)<br /> at com.jacob.activeX.ActiveXComponent.invoke(ActiveXComponent.java)<br /> at one.WordtoHtml.change(WordtoHtml.java:35)<br /> at one.WordtoHtml.main(WordtoHtml.java:39)<br /><br /><br /><font color="#ff0000"><strong>附加：下面是总结了的错误！</strong></font><br />1、如果出现下面的错误 <br />com.jacob.com.ComFailException: A COM exception has been encountered: <br />At Invoke of: Version <br />Description: An unknown COM error has occured. <br />表示dll的版本不对，换成最新版本即可。 <br />2、如果出现下面的错误 <br />no jacob in java.library.path <br />java.lang.UnsatisfiedLinkError: no jacob in java.library.path <br />表示把dll放到path下即可，设置path或是放到window/system32下 </p>
<img src ="http://www.blogjava.net/bcims/aggbug/189395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2008-03-29 02:16 <a href="http://www.blogjava.net/bcims/archive/2008/03/29/189395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不错的Ext 2.0，推荐给各位！</title><link>http://www.blogjava.net/bcims/archive/2008/02/16/180180.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Sat, 16 Feb 2008 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2008/02/16/180180.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/180180.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2008/02/16/180180.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/180180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/180180.html</trackback:ping><description><![CDATA[前段时候朋友推荐我去下ext包看看<br />下完了看了一下文档和在网上找了些介绍的资料<br />试了一下，就是一个ajax的包，如果你用来做小项目的话，还真的不错<br />省去了你很多麻烦.....<br />具体怎么个好法的话 ，最好你还是自己试用一下<br />推荐你进<a href="http://www.cn-java.com/www1/?uid-45-action-viewspace-itemid-4263">http://www.cn-java.com/www1/?uid-45-action-viewspace-itemid-4263</a>  这个小教程<br /><br />我试了一下，效果图如下<br /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><br /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><br /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><img height="1" alt="AY~GNS81UC[2M9%U~O7XZBN.jpg" src="/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=633043282327207582" width="1" border="0" /><img height="331" alt="45.jpg" src="http://www.blogjava.net/images/blogjava_net/bcims/插图/45.jpg" width="546" border="0" /><img src ="http://www.blogjava.net/bcims/aggbug/180180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2008-02-16 12:53 <a href="http://www.blogjava.net/bcims/archive/2008/02/16/180180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>帐号激活实现思路</title><link>http://www.blogjava.net/bcims/archive/2008/01/27/177992.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Sun, 27 Jan 2008 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2008/01/27/177992.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/177992.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2008/01/27/177992.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/177992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/177992.html</trackback:ping><description><![CDATA[账号激活主要是防止用户注册时填写假的E-mail地址，藉以账号激活将激活码发送至用户邮箱以便激活账号。 <br /><br />需要数据表的设计： <br />1，用户名（Unique） <br />2，E-mail（Unique） <br />3，激活码（Unique） <br />4，状态：1：尚待激活；2：已激活 <br /><br />在用户注册时，通过用户名、E-mail及注册时间（毫秒时间）等信息采用特定的算法，一般采用不可逆的摘要算法，如：MD5、SHA等。生成一组摘要，注册后将激活码作为URL参数，比如：<a href="http://www.abc.com/user/activation?code=123456">www.abc.com/user/activation?code=123456</a>，code的值为激活码，将这一链接发送E-mail给用户，在用户点击该链接后，通过code将这个激活码的账号状态设为“已激活”即可。由于激活码是Unique的，所以不可能出现相同的，之所以采用MD5、SHA，是由于MD5出现碰撞的概率很小，SHA则更小，而且Java中也提供了现成的类库用于产生信息摘要，使用起来比较方便。 <br /><img src ="http://www.blogjava.net/bcims/aggbug/177992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2008-01-27 10:56 <a href="http://www.blogjava.net/bcims/archive/2008/01/27/177992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sun以10亿美元收购MySQL</title><link>http://www.blogjava.net/bcims/archive/2008/01/17/176043.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Thu, 17 Jan 2008 11:08:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2008/01/17/176043.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/176043.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2008/01/17/176043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/176043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/176043.html</trackback:ping><description><![CDATA[
		<p>1月16日,Sun宣布已经与MySQL AB达成协议，以大约10亿美元收购MySQL AB，其中8亿美元现金收购MySQL AB的全部股权，另外的2亿美元作为期权。 </p>
		<p>MySQL负责开发社区的副总裁 Kaj 在他的blog中分析了这单交易对于MySQL的用户、核心社区以及公司员工会带来哪些影响，还发表了他与MySQL的两位创始人Monty和David关于此事的交谈。 </p>
		<p>MySQL总部位于瑞典，在全球25个国家共有约400名员工。交易完成之后，MySQL首席执行官马顿·尼科斯(Marten Mickos)将加盟Sun管理层。Sun一直是开放源代码软件的坚定支持者，该公司希望通过这一模式从软件业务获得更多营收。在此之前，Sun一直为MySQL的竞争对手PostgreSQL销售支持服务。 </p>
		<p>对于Sun来说，收购MySQL有助于该公司更好地为开放源代码网络应用平台LAMP提供支持。LAMP是Linux操作系统、Apache网络服务器、MySQL数据库和PHP/Perl编程语言的首字母缩写。这一交易预计将于2008年第三季度或第四季度完成，如何获得足够的现金，对于Sun来说将是第一要务。Sun首席执行官乔纳森·舒瓦茨(Jonathan Schwartz)表示，在交易完成之前，该公司就将开始为MySQL客户提供支持服务。</p>
<img src ="http://www.blogjava.net/bcims/aggbug/176043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2008-01-17 19:08 <a href="http://www.blogjava.net/bcims/archive/2008/01/17/176043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat5.5.16环境下虚拟目录的设置</title><link>http://www.blogjava.net/bcims/archive/2007/12/26/170727.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Wed, 26 Dec 2007 13:57:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/12/26/170727.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/170727.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/12/26/170727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/170727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/170727.html</trackback:ping><description><![CDATA[
		<p>假如，现在要建一个名为 jsp 的虚拟目录，物理目录为D:\jsp，如果tomcat5.5安装在D:\Tomcat 5.5，则找到tomcat安装目录下的conf\Catalina\localhost文件夹，在里面新加名为 jsp.xml 的xml文件，文件内容如下：</p>
		<p>&lt;Context path="/jsp" docBase="d:/jsp" reloadable="true" crossContext="true" debug="0" &gt;&lt;/Context&gt;</p>
		<p>注意：1、xml的文件名必须和虚拟目录相同<br />          2、一个xml文件只能设置一个Context path<br /> </p>
<img src ="http://www.blogjava.net/bcims/aggbug/170727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-12-26 21:57 <a href="http://www.blogjava.net/bcims/archive/2007/12/26/170727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MYSQL-FRONT 3.2 注册码</title><link>http://www.blogjava.net/bcims/archive/2007/12/26/170436.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Tue, 25 Dec 2007 18:23:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/12/26/170436.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/170436.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/12/26/170436.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/170436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/170436.html</trackback:ping><description><![CDATA[
		<p>虽然front停止开发了，但仍然是一个不错的工具....<br /></p>
		<p>复制以下内容到mysql front 上</p>
		<div class="UBBContent">aLuo8QAslIZw/xEq9+A4LczWqdUdCq/fS<br />AgwKBpvj3uLonNP5NnixM+qDj3Od1JzPf<br />m5XpDptwF2zNsIq1PSLNmp9OLRHpT/zke<br />By4M6aBTTrNA9bnX4hb9RPpT1nIViykZb<br />iYO/dc33UNBt6MTQX+F8xIrmVrIPkCvS6<br />AaQAwOb+LgykeD7iwLDkUCvTXlP5HHHTY<br />whtg6+VKRTas04Wm8zvzQnxFNjOpF8F0e<br />Bo2wNmKtGz/o8V5lbqTq0cisaqzfb55lH<br />54i6NDGb4DhCVg== </div>
<img src ="http://www.blogjava.net/bcims/aggbug/170436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-12-26 02:23 <a href="http://www.blogjava.net/bcims/archive/2007/12/26/170436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>msn登录不了错误代码80048820扩展错误代码 80048412</title><link>http://www.blogjava.net/bcims/archive/2007/12/05/165473.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Wed, 05 Dec 2007 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/12/05/165473.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/165473.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/12/05/165473.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/165473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/165473.html</trackback:ping><description><![CDATA[
		<p>昨天来登陆MSN的时候，突然登陆不上了，出现了问题。<br />主要是时间不对的问题。<br />最有可能的原因： 系统时间错误 返回信息：80048820,总是说防火墙设置阻止MSN的连接。但在MSN的网络连接测试中都是成功。 解决方法：系统日期不对造成的！！！！，请你认真查看是否在你升级到MSN7.5以后，系统日期变成了2004年，如果是直接将系统日期改成现在的时间。 点击右下角系统时间设置为当前正确时间。OK！<br />下面是解决的方法....<br />下面引用官方关于该代码的答复： <br />How to fix error code 80048820 <br />Problem description <br />When you start MSN Messenger you cannot sign in, and you get the message: <br />Sorry, we were unable to sign you in to the MSN Messenger at this time. Please try again later. To let us try and troubleshoot the problem, click the Troubleshoot button. 80048820 <br />Fix this error / possible solution <br />This error seems to indicate a problem with MSN Messenger's encryption routines. <br />The usual cause is that the time on your computer is not correct. To correct the time on your computer, double-click the clock in the bottom right of your screen, in the window that appears you should check both the time and date. If you use Windows XP, you can automatically correct the time by clicking the "Internet Time" tab, next click the "Update Now" button. <br />If you still have problems connecting with the time adjusted, try to run this file. This will make sure MSN Messenger can find all the files it needs on your computer. <br />中文大概意思：当你的MSN 无法登录，且提示错误代码为80048820，这种问题一般是由于你的系统时间不对，先校准系统时间，如果仍然无法登录，可能是由于DLL文件注册信息丢失，下载这个批处理文件 <a href="http://www.msn-problems.com/downloads/register-messenger-dll-files.bat">http://www.msn-problems.com/downloads/register-messenger-dll-files.bat</a> 运行一下，问题应该可以解决<br /><br />然后教你怎么样。。。。<br />This register-messenger-dll.bat file will register DLL files required for Messenger.<br />To run it simply doubleclick, or click it with right mouse and select Open.</p>
		<p>For your safety, it is advised you only download the file from imzers.com<br />You can always have a look at it's content by opening it with any text editor.</p>
		<p>It will execute the following commands:<br />regsvr32 softpub.dll<br />regsvr32 Wintrust.dll<br />regsvr32 Initpki.dll<br />regsvr32 Dssenh.dll<br />regsvr32 Rsaenh.dll<br />Regsvr32 Gpkcsp.dll<br />Regsvr32 Sccbase.dll<br />Regsvr32 Slbcsp.dll<br />Regsvr32 Mssip32.dll<br />Regsvr32 Cryptdlg.dll</p>
		<p>You can also do this by hand. Click Start, and then press Run...<br />Now type: 'regsvr32 softpub.dll' and click OK or press ENTER. <br />Repeat with all other lines as shown above.</p>
		<p>Have fun using Messenger!</p>
<img src ="http://www.blogjava.net/bcims/aggbug/165473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-12-05 13:43 <a href="http://www.blogjava.net/bcims/archive/2007/12/05/165473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个很酷也很实用的RIA工具，在线visio </title><link>http://www.blogjava.net/bcims/archive/2007/11/16/160881.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Thu, 15 Nov 2007 17:55:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/11/16/160881.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/160881.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/11/16/160881.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/160881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/160881.html</trackback:ping><description><![CDATA[
		<p>在JAVAEYE上看到这个工具，感觉不错，收起来跟朋友共享，感谢JAVAEYE.........<br />有了这个工具，如果没有装visio，在线画画吧，真不错！<br /></p>
		<p>
				<a href="http://www.best4c.com/" target="blank">best4c.com 最好的web画图工具</a>
		</p>
		<p>Best4C提供的功能与微软的流程图制作工具Visio类似,这是一款新上线的来自于国内网络工具,目前提供基础图形、流程图、网络图、家居设计图、办公室布局图,UML图多个种类,每种种类都提供了相应的模版.能够让你随时,随地的方便的创建,修改,分享各种图表.Best4c图表可以使消息变得更为简练,帮助人们记住要点,同时帮助人们跨越文化和技术障碍. <br /><br />1 方便的在线画图和分享 <br />2 拖拽灵活，强大的桌面软件体验 <br />3 无需下载安装，兼容FireFox,IE,Opera,Safari <br />4 能够为您的图导出PDF和PNG格式并且能够迅速的复制到Word,Excel,Powerpoint中。 <br />5 强大的协同平台（邀请他人编辑或查看您的图，并且可以保存所有的修改版本） <br />6 灵活的模版，能够轻松画出 流程图，室内布置图，网络图，UML图等多种图形</p>
		<p>
				<a href="http://lifthand.javaeye.com/blog/140311" target="blank">大家可以点此看看在JavaEye blog的实际效果</a>
		</p>
		<p>
				<img src="http://www.cnbeta.com/upimg/070819/ugmbbc_210500.jpg" border="0" />
		</p>
		<p>
				<img src="http://www.cnbeta.com/upimg/070819/ugmbbc_210509.jpg" border="0" />
		</p>
		<p>这个产品 随着是联想中央研发机构--联想研究院网站<a href="http://www.javaeye.com/news/lenovolabs.com" target="blank">lenovolabs.com</a>一起 推出的。据悉，这是联想研究院是为了探索互联网技术而开设的网站，采取了Web2.0模式，走的是SaaS“软件就是服务”的路线。 </p>
<img src ="http://www.blogjava.net/bcims/aggbug/160881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-11-16 01:55 <a href="http://www.blogjava.net/bcims/archive/2007/11/16/160881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache目录浏览设置</title><link>http://www.blogjava.net/bcims/archive/2007/10/29/156563.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Sun, 28 Oct 2007 18:15:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/10/29/156563.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/156563.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/10/29/156563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/156563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/156563.html</trackback:ping><description><![CDATA[
		<p>用途：在目录下如果没有默认首页面（如index.html default.htm）时防止用户访问web时浏览目录<br />打开httpd.conf<br />查找Options Indexes FollowSymLinks<br />修改为：<br />Options <font color="#ff0000">-</font>Indexes FollowSymLinks</p>
		<p>修改保存退出，重新启动apache<br />访问<a href="http://127.0.0.1/">http://127.0.0.1</a>如果看到以下提示说明修改成功</p>
		<h1>Forbidden</h1>
		<p>You don't have permission to access / on this server.</p>
		<hr />
		<address>Apache/2.0.53 (Unix) Server at 192.168.0.1Port 80</address>
		<address>
				<address> </address>
				<address> </address>
				<address> </address>
				<address>开启浏览:</address>
				<address>&lt;Directory /&gt;<br />    Options FollowSymLinks<br />    AllowOverride None<br />    <font color="#ff0000">Options Indexes           #就加这句就可以了,目录按需要选择</font><br />&lt;/Directory&gt;</address>
		</address>
<img src ="http://www.blogjava.net/bcims/aggbug/156563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-10-29 02:15 <a href="http://www.blogjava.net/bcims/archive/2007/10/29/156563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很形象的接口的使用——针对初学者 </title><link>http://www.blogjava.net/bcims/archive/2007/09/15/145322.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Sat, 15 Sep 2007 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/09/15/145322.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/145322.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/09/15/145322.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/145322.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/145322.html</trackback:ping><description><![CDATA[里氏代换原则是什么？听起来很高深，不过我们也不是什么学院派，就不讲大道理了，直接拿个例子来说一下。<br />我们拿人和程序员举个例子。人是一个大类，程序员是继承自人的子类。看看这句话：人需要吃饭。这句话我们把“人”换成“程序员”，就是：程序员需要吃饭，这样换不会有什么问题。现在我们反过来，把“程序员可以用计算机写程序”里边的程序员换成“人”，就是：人可以用计算机写程序。这样就不一定正确了，否则问题可就大了，我们这些程序员只怕没得饭吃了。<br />这个就是里氏代换原则：使用父类的地方肯定可以用它的一个子类来替换掉，但是使用一个子类的时候用它的父类来替换就不一定正确了。<br />好，现在我们回到程序设计里边来。<br />看看下面的程序：<br />一个学校里边，有两种人：学生、老师。他们都要吃饭和睡觉。
<div><br />public interface 人{<br />    void 吃饭();<br />    void 睡觉();<br />}</div><div> </div><div>public class 学生 implements 人{<br />    public void 吃饭(){<br />        //去食堂吃饭<br />    }<br />    public void 睡觉(){<br />        //回寝室睡觉<br />    }<br />    ...//其他特有方法，比如泡妞、打游戏<br />}</div><div> </div><div>public class 老师 implements 人{<br />    public void 吃饭(){<br />        //回家吃饭<br />    }<br />    public void 睡觉(){<br />        //回家睡觉<br />    }<br />    ...//其它特有方法，比如为生儿育女传宗接代的历史使命努力等不足为外人道的事情<br />}</div><div> </div><div>public class 学校{<br />    public void 开饭(人 ren){<br />        ren.吃饭();<br />    }</div><div>    public void 放学(人 ren){<br />        ren.睡觉();<br />    }<br />}</div><div> </div><div>这里就用到了里氏代换原则，"开饭()"和"放学()"的参数都是人，那么这个地方如果换成学生和老师肯定也可以。</div><div> </div><div>人 a = new 学生();<br />学校.开饭(a);<br />学校.放学(a);</div><div> </div><div>这样执行的结果就是学生回寝室吃饭。</div><div> </div><div>人 b = new 老师();<br />学校.开饭(b);<br />学校.放学(b);</div><div> </div><div>这样执行的结果就是老师回家吃饭。</div><div> </div><div>为什么要这样写呢？这样写有什么好处呢？<br />我在开饭的时候完全可以直接调用"学生.吃饭();"、"老师.吃饭();"啊。<br />接着看。<br />有一天，学校里来了第三种人，家长。<br />家长既不是去寝室睡觉也不是回家睡觉，而是旅馆睡觉，既不是去食堂吃饭也不是回家吃饭，而是去下馆子。<br />这个时候学校这个系统该怎么处理呢？<br />如果原来没有定义"人"这个接口那就麻烦啦，所有用到人的地方代码都要改。<br />现在不一样了，我可以直接定义一个类：家长，这个类实现人这个接口就可以了。<br />好，看代码：</div><div> </div><div>public class 家长 implements 人{<br />    public void 吃饭(){<br />        //下馆子<br />    }<br />    public void 睡觉(){<br />        //去旅馆睡觉<br />    }<br />    ...//其它特有方法，比如会见老师，晓之以钱，动之以利等等，不一而足<br />}</div><div> </div><div>在调用的时候不需要修改任何代码，还和原来一样：</div><div> </div><div>人 c=new 家长();<br />学校.开饭(c);<br />学校.放学(c);</div><div> </div><div>轻松搞定家长的食宿问题！</div><div> </div><div>这样一来学校来再多的客人都没关系啊，绝对可以应付自如，这也就是传说中的可扩展性！</div><div>不知道初学者看到这里是不是能够明白接口的作用。如果你还不明白，那么你把人这个接口去掉，自己写一个学校开饭和放学的类，然后再加一个家长这个新新人类进去，看看你的代码是什么样子的，再想一下在人口这么多的中国，万一哪天你的学校里来了成千上万个新新人类你该怎么办！</div><img src ="http://www.blogjava.net/bcims/aggbug/145322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-09-15 11:05 <a href="http://www.blogjava.net/bcims/archive/2007/09/15/145322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>时刻关注RFID的发展</title><link>http://www.blogjava.net/bcims/archive/2007/08/08/135319.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Wed, 08 Aug 2007 11:10:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/08/08/135319.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/135319.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/08/08/135319.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/135319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/135319.html</trackback:ping><description><![CDATA[　这几年来，科学技术的飞速发展的同时也正改变着人们的生活。我还记得小时候买东西，商品上基本上是没有什么识别码的，现在基本有了条型码，给商品的销售，识别，存储等各方面带来了方便，RFID技术 的诞生将再一次给人们带来极大的便利，RFID正在向日常生活和工作的各个方面快速渗透。国内对RFID技术和应用的研究在经历了概念认知，技术储备，产品研发，业务摸索等阶段之后，对RFID的认识越趋理性化，而随着国内RFID标准的制订和明确，中国RFID将得到更快速的发展。 
<p>　　谈到RFID，不能不提沃尔玛。作为供货强制令的始作俑者，沃尔玛在2005年的应用整体情况看好。来自沃尔玛的报告表明，截至到2005年6月，在美国的沃尔玛104家超市、36家山姆会员店和36个配送中心已经使用了RFID技术，同时参与这个项目的已有130个供应商，55000个托盘，并已收到贴有标签的货箱189万个，这一应用状况已大大超过了沃尔玛的预期。而根据阿肯色大学最近一项长达7个月的研究发现，在使用RFID标签的沃尔玛商场里面的货品脱销现象减少16%，RFID技术在货品补充上要比传统条形码技术快3倍。<br /><br />      之所以国外一些公司提出这样的要求是因为普遍使用的条形码标签其致命缺陷是其低存储容量和不能重新编程的特点。 <br />技术上讲更好的方案是在硅芯片之上存储数据。我们日常生活中在用的最常见的电子数据设备是接触式IC卡(电话卡，银行卡等)。然是机械接触的IC卡却限制了其适用性。在数据承载设备和阅读器之间的非接触式数据传输可以带来更大的灵活性。在理想情况下，用于操作数据承载设备所需的电力也可以通过非接触方式从阅读器进行传输。因为用于传输数据和电力的方式，非接触ID 系统也称为是<em>RFID </em><em>系统</em>(射频识别)。 活跃在RFID系统领域中进行开发和销售的公司的数量说明了这是一个应该认真对待的市场。<em>RFID </em><em>市场因此成为射频技术领域</em> （还包括移动电话和无绳电话）增长最快的领域。 <br /><img height="351" alt="clip_image002_0001.jpg" src="http://www.blogjava.net/images/blogjava_net/steelhand/rfid/clip_image002_0001.jpg" width="576" border="0" /><br />               <font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">   </font><a id="_Toc120083992" name="_Toc120083992"><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">图</font></a><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff"> 1 RFID的应用市场增长</font><br />并且，近年来，非接触识别已经发展成一本独立的交叉学科，它整合了多种完全不同的领域：高频技术和EMC，半导体技术，数据保护和加密，通信，制造科学和其他相关领域的技术。 </p><h2><a id="_Toc120084060" name="_Toc120084060">自动识别系统Automatic Identification Systems</a>）</h2><p><img height="320" alt="clip_image004_0001.jpg" src="http://www.blogjava.net/images/blogjava_net/steelhand/rfid/clip_image004_0001.jpg" width="448" border="0" /><br />               <a id="_Toc120083993" name="_Toc120083993"><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">图</font></a><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">2 主要的自动识别技术</font></p><h3><a id="_Toc120084061" name="_Toc120084061">条形码系统</a></h3><p>条形码系统（Bar Code System）在过去20年历牢牢的统治着识别系统领域。 据专家估计，在上世界90年代早期，条形码系统在西欧的总容量曾达到30亿德国马克。 <br />条形码是由平行排列的线条和间隔所组成的二进制编码。它们根据预定的模式进行排列并且表达相应记号系统的数据项。宽窄不同的线条和间隔的排列次序可以解释成数字或者字母。它可以进行光学扫描阅读，即根据黑色线条和白色间隔对激光的不同反射来识别。但是尽管其物理原理相似，目前在用的大约有10数种不同的编码和布局方案。 <br />最流行的条形码方案是<em>EAN </em><em>编码</em> (欧洲物体编码)，它在1976年设计，本来针对杂货店。EAN 编码是美国UPC (通用产品编码)的发展。今天， UPC表达为EAN 编码的子集，并且可以兼容之。 <br />EAN 编码由13位数字组成：国家标识符，公司标识符，制造商的物品标识符和校验位。如图3： <br /><img height="183" alt="clip_image005.jpg" src="http://www.blogjava.net/images/blogjava_net/steelhand/rfid/clip_image005.jpg" width="451" border="0" /><br />                    <a id="_Toc120083994" name="_Toc120083994"><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">图表</font></a><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff"> 3  EAN编码的条形码实例</font><br />除了EAN 之外，下列条形码在各种领域也很流行：</p><ul><li>Code Codabar: 医学和临床应用，以及高安全需求的领域 
</li><li>Code 2/5 interleaved: 自动化工业， 货物存储，货盘， 装船容器和重工业。 
</li><li>Code 39: 流程工业，物流， 大学和图书馆。 </li></ul><p align="center"><img height="142" alt="clip_image007.jpg" src="http://www.blogjava.net/images/blogjava_net/steelhand/rfid/clip_image007.jpg" width="168" border="0" /><br /><a id="_Toc120083995" name="_Toc120083995"><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">图</font></a><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">4  ISBN统一书号代码</font><br />由于一维条码的信息容量很小，如商品上的条码仅能容纳几位或者几十位阿拉伯数字或字母，商品的详细描述只能依赖数据库提供，离开了预先建立的数据库，一维条码的使用就受到了局限。基于这个原因，人们迫切希望发明一种新的码制，除具备一维条码的优点外，同时还有信息容量大、可靠性高、保密防伪性强等优点。为了满足人们的这种需求，美国Symbol公司经过几年的努力，于1991年正式推出名为PDF417的二维条码，简称为PDF417条码（见下图），即 “便携式数据文件”。 <br /><img height="107" alt="clip_image008_0001.jpg" src="http://www.blogjava.net/images/blogjava_net/steelhand/rfid/clip_image008_0001.jpg" width="295" border="0" /><br /><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">图表5 二维条码PDF417</font><br />PDF417条码是一种高密度、高信息含量的便携式数据文件，是实现证件及卡片等大容量、高可靠性信息自动存储、携带并可用机器自动识读的理想手段。PDF417条码具有如下特点： </p><ul><li><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">信息容量大</font></li></ul><p>根据不同的条空比例每平方英寸可以容纳<strong>250</strong><strong>到</strong><strong>1100</strong>个字符。在国际标准的证卡有效面积上(相当于信用卡面积的2/3，约为76mm＊25mm), PDF417条码可以容纳1848个字母字符或2729个数字字符，约500个汉字信息。这种二维条码比普通条码信息容量高几十倍。 </p><ul><li><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">编码范围广</font></li></ul><p>PDF417条码可以将照片、指纹、掌纹、签字、声音、文字等凡可数字化的信息进行编码。 </p><ul><li><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">保密、防伪性能较好</font></li></ul><p>PDF417条码具有多重防伪特性，它可以采用密码防伪、软件加密及利用所包含的信息如指纹、照片等进行防伪，因此具有极强的保密防伪性能。 </p><ul><li><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">译码可靠性高</font></li></ul><p>普通条码的译码错误率约为百万分之二左右，而PDF417条码的误码率不超过千万分之一，译码可靠性极高。 </p><ul><li><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">修正错误能力强</font></li></ul><p>PDF417条码采用了世界上最先进的数学纠错理论，如果破损面积不超过50％，条码由于沾污、破损等所丢失的信息，可以照常破译出丢失的信息。 </p><ul><li><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">容易制作且成本低</font></li></ul><p>利用现有的点阵、激光、喷墨、热敏/热转印、制卡机等打印技术，即可在纸张、卡片、PVC、甚至金属表面上印出PDF417二维条码。由此所增加的费用仅是油墨的成本，因此人们又称PDF417是“零成本”技术。 </p><ul><li><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">条码符号的形状可变</font></li></ul><p>同样的信息量，PDF417条码的形状可以根据载体面积及美工设计等进行自我调整。 <br />在我国，中国物品编码中心介绍了二维条码国家标准《四一七条码》，即GB／T17172－1997。</p><p>　　来自业界的信息表明：几家主要的国际零售商的RFID执行计划已经进入第二轮，而沃尔玛的实施时间表比预计的提前了；另外，中国的许多制造业供应商去年已经收到要求在产品贴标签的正式通知，不过每个厂商反应的方式不相同，那些在企业内部供应链上也能见到效应的更积极一些；另外，就公司参与的RFID项目也显示美国的许多沃尔玛供应商已经开始了内部供应链的应用；而在标签技术上，EPC Gen2在今年的成熟将加速其在世界范围的应用，并将推动中国的RFID应用快速发展。<br /><br />7月30日，中国RFID产业联盟副理事长、科技部张智文教授在国家金卡工程协调领导小组办公室联合信息产业部无线电管理局召开的“《800/900MHz频段射频识别(RFID)技术应用规定(试行)》宣贯会”上针对RFID的技术和标准问题讲了下面几个方面。<br /> <br /><strong>RFID在中国的应用还刚刚开始<br />中国政府各相关部委已经重视RFID发展<br />中国一定将有自己的标准体系 <br />我们仍然缺少具有自主知识产权的RFID核心技术，鼓励企业进入<br />RFID是一个庞大的系统，希望各部门，企业，社会互相配合 <br /><br /></strong>在java方面，系统RFID软件3.0与SAP NetWeaver平台Auto-ID架构组件的集成，将实现Sun与SAP RFID技术之间RFID数据网络通讯，实现从任何RFID驱动的设备到mySAP商用套件之间的无缝数据流传输。这个新软件使用了Jini基于技术的动态联网能力，即使是在苛刻的生产环境下，RFID数据也可以持续向SAP应用传输。Sun的RFID软件本质上可以与任何企业级应用相集成，包括带有SAP的Auto-ID架构的可用连接。 Java嵌入的读取器也可以利用Sun的Jini网络技术增加其它服务。Jini可以用在RFID环境中帮助读取器自我恢复和制订更高级别决策软件的自动配置。</p><p><font style="BACKGROUND-COLOR: #ff0000" color="#ffffff">在国内RFID技术也已经应用，像杭州的少部分公交和上海的液化气管理采用了RFID后，都得到了良好的效果。<br /><br />当然RFID在国内还刚开始起步，发展的空间也很大，我希望大家和我一起关注，和喜欢RFID技术的朋友一起讨论共同进步。<br /></font><br /></p><img src ="http://www.blogjava.net/bcims/aggbug/135319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-08-08 19:10 <a href="http://www.blogjava.net/bcims/archive/2007/08/08/135319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>随手整理Java与C的不同点及心得</title><link>http://www.blogjava.net/bcims/archive/2007/07/29/133117.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Sun, 29 Jul 2007 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/07/29/133117.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/133117.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/07/29/133117.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/133117.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/133117.html</trackback:ping><description><![CDATA[不知道从什么时候起喜欢JAVA的，从JDK1.4到现在1.6，从最基本的main()开始到现在从事J2EE的开发，从ASP做WEB程序到现在用JAVA独立开发软件，回头看一下，光阴已走，路还是这条路。<br />朋友偶尔问我C语言方面的东西，自己从来没有系统学过，有些问题一知半解，到最近几天拿着高中买的数据结构&lt;C语言版&gt;看，似乎爱上了C，程序贵在相通，万变不离其宗，上手很快。趁现在坐在客厅里吹风，有本本在，随手在网上找些资料整理一下JAVA和C的区别，但又很矛盾，如果单从语言来比较是没有什么太多意义的，一个类似寄生虫一样的东西，一个是生下来就可以跑的家伙，但我今天的BLOG还是要写，以此充数吧！至少也是我的心得。<img height="19" src="http://www.blogjava.net/Emoticons/emsmilep.gif" width="19" border="0" /><br /><br />    1． Java没有预处理指令。（如C中的#define , #include , #ifdef等）。C中的常量定义在Java中用static final来取代。<br />    2． Java中没有C中的全局变量。<br />    3． Java中的主类型的size是确定的，而C中主类型的size跟平台相关。<br />    4． Java中没有了指针，它使用了类似的句柄来取代指针，但是Java中不允许对句柄进行加减，没有取地址操作符之类的东东。<br />    5． Java有垃圾收集机制，不需要自己释放空间。<br />    6． Java没有goto语句。Java在C提供的控制语句基础上增加了异常处理和标签break和continue语句。这些可以替代goto的作用。<br />    7． C要求一个方法或块中使用的所有局部变量的定义在该方法或块的最开始处定义，而Java允许这些定义在方法或块的任意地方出现。<br />    8． Java不要求在调用一个函数以前已经定义了该函数，可以在调用点后面定义。而C有这个要求。<br />    9． Java不支持C中的strut 和 union类型。Java支持方法重载。<br />    10． Java已经支持C中的enum关键字（SE5.0就支持了）。<br />    11． Java不支持C中的bitfields能力。<br />    12． Java不支持C的typedef。<br />    13． Java不支持C的方法指针。<br />    14． Java支持可变参数表。 <br />    15，java有 Reflection ，c 没有<br />   16，java有Annotations，c没有<br />   17，java有generics，c没有<br />   16，java有interface，c没有<img src ="http://www.blogjava.net/bcims/aggbug/133117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-07-29 13:58 <a href="http://www.blogjava.net/bcims/archive/2007/07/29/133117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的软件《好易随中药管理系统》即将开源</title><link>http://www.blogjava.net/bcims/archive/2007/07/25/132302.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Wed, 25 Jul 2007 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/07/25/132302.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/132302.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/07/25/132302.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/132302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/132302.html</trackback:ping><description><![CDATA[由于自己家里做中药的原因，已经做了两个中药管理软件了。<br />功能包含了一般药店所需的小票打印，数据分析，进销存,等功能。<br />一个是C/S版本，采用vb.net  ms-sql 2000  开发<br />另一个是B/S版本，采用struts+hibernate+spring+mysql5.2+tomcat,在性能中优化struts中action的灵活调用<br />在权限方面，采用的spring aop来进行管理，在eclipse 3.2上进行开发。<br />下面把这两个软件的界面发上面看下，因为有很多朋友要我把源代码发给他们进行参考或学习，所以我决定<br />把两个软件整理一下，过些日子在我的下一个项目（<a href="http://www.javaOs.cn">www.javaOs.cn</a>中国JAVA开源社区）中进行发布，有这方面<br />需要的朋友可以进行关注。<br />----------------------------------------------------------------------------------------------------------------------------------<br />这是C/S版本<br /><img height="767" alt="f.bmp" src="http://www.blogjava.net/images/blogjava_net/bcims/king/f.bmp" width="819" border="0" /><br /><br />------------------------------------------------------------------------------------------------------------------------------------------<br />下面这里是B/S版本<br />此图是用户登陆界面，用户登录后可以自动进行识别用户等级再进行分配权限。<br /><br /><img height="382" alt="a.bmp" src="http://www.blogjava.net/images/blogjava_net/bcims/king/a.bmp" width="583" border="0" /><br /><br /><br />这是进货管理的页面<br /><img height="627" alt="b.bmp" src="http://www.blogjava.net/images/blogjava_net/bcims/king/b.bmp" width="1260" border="0" /><br /><br />此图是从数据库查寻出来后，动态的生成饼图<br /><img height="643" alt="c.bmp" src="http://www.blogjava.net/images/blogjava_net/bcims/king/c.bmp" width="829" border="0" /><br /><br /><br />用户管理，还可以上传相片<br /><br /><br /><br /><br /><br /><img height="638" alt="d.bmp" src="http://www.blogjava.net/images/blogjava_net/bcims/king/d.bmp" width="1138" border="0" /><br /><br />添加客户<br /><br /><img height="641" alt="e.bmp" src="http://www.blogjava.net/images/blogjava_net/bcims/king/e.bmp" width="1271" border="0" /><br /><br /><br />这是对客户资料进行打印<img height="421" alt="g.bmp" src="http://www.blogjava.net/images/blogjava_net/bcims/king/g.bmp" width="1039" border="0" /><br /><br /><img src ="http://www.blogjava.net/bcims/aggbug/132302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-07-25 14:25 <a href="http://www.blogjava.net/bcims/archive/2007/07/25/132302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate更新数据出现乱码的问题</title><link>http://www.blogjava.net/bcims/archive/2007/05/11/116885.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Fri, 11 May 2007 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/05/11/116885.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/116885.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/05/11/116885.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/116885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/116885.html</trackback:ping><description><![CDATA[
		<p>hibernate插入数据时没有一点问题，但更新数据的时候出现乱码的问题，<br />找了好久，后来发现是这个问题。<br /><br />hibernate3使用了新的hsql解释器，使用了antlr。如果在hsql正文中直接使用中<br />文的话，会出现乱码，例如：</p>
		<p>String s = "张三";<br />String hsql = "from User where username='"+s+"'";<br />List list = session.createQuery(hsql).list;<br />这种查询不会出结果。因为整个语句在被antlr解释后会有乱码。</p>
		<p>好的写法是：<br />String s = "张三";<br />String hsql = "from User where username=?"<br />List list = session.createQuery(hsql).setString(0,s).list;<br />这就不会有问题。</p>
		<p>原因：第二种方式，是hibernate在antlr解释完了以后，再把参数传入，这个时候<br />就不会有乱码了。</p>
		<p>
				<br />即使没有这个问题，也最好不要在sql语句中带上很多的变量参数。hibernate这种<br />思想是对的：sql和变量分离开来，不要把两者混在一起。</p>
		<p>
				<br />另外，如果使用hibernate2则不会有上面的问题，因为hibernate2使用的是旧版的<br />hsql解释器。但hibernate2的语法不如hibernate3丰富。</p>
<img src ="http://www.blogjava.net/bcims/aggbug/116885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-05-11 21:44 <a href="http://www.blogjava.net/bcims/archive/2007/05/11/116885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>j2ee架构师</title><link>http://www.blogjava.net/bcims/archive/2007/04/28/114432.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Sat, 28 Apr 2007 13:56:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/28/114432.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/114432.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/28/114432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/114432.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/114432.html</trackback:ping><description><![CDATA[
		<font color="#000000">软件架构师是软件行业中一种新兴职业，工作职责是在一个软件项目开发过程中，将客户的需求转换为规范的开发计划及文本，并制定这个项目的总体架构，指导整个开发团队完成这个计划。架构师的主要任务不是从事具体的软件程序的编写，而是从事更高层次的开发构架工作。他必须对开发技术非常了解，并且需要有良好的组织管理能力。可以这样说，一个架构师工作的好坏决定了整个软件开发项目的成败。<br /><br />软件架构师实际上就是软件的总体设计师。首席设计师就是总设计师，打个通俗的比方：邓小平是中国改革开放的总设计师，我们用现在的说法可以讲，邓小平是中国改革开放的首席架构师。架构师的形成一定是在实践中积累起来的，而并非上了几次培训班，读了几本书就可以成功的，架构师是在工程实践中培养出来的！ <br /><br />架构师也并非是万能的。架构师是客户需求和开发者之间的桥梁。在软件行业中，一般提到的架构师是技术架构师，而忽略了领域架构师或者讲是领域工程师的概念。一个好的领域专家一定是业务领域的架构师，他能够给出某一个业务领域的架构，我们可以称为业务架构，只有技术架构和业务架构紧密结合才有可能真正创造出一个好的系统！<br /><br />架构师，首先让我想起的是高楼大厦的设计人员，通常一座大厦在建之前,都先由设计师将蓝图描绘出来，包括其形状、结构、尺寸、材料等等，然后建筑工程师带领工人们按照蓝图将大厦一层一层地建起来。<br /><br />近年来，软件领域也渐渐地流行起架构师的角色，特别是对一些大型软件产品或项目的开发，这一角色显得很关键，因为缺乏好的软件架构师而导致项目失败的例子不胜枚举，一个没有经验和能力的架构师也会使项目失败的速度加快。<br /><br />软件架构师的重要作用<br /><br />软件架构师在整个软件开发过程中都起着重要的作用，并随着开发进程的推进而其职责或关注点不断地变化，在需求阶段，软件架构师主要负责理解和管理非功能性系统需求，比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等等，此外，架构师还要经常审查和客户及市场人员所提出的需求，确认开发团队所提出的设计；在需求越来越明确后，架构师的关注点开始转移到组织开发团队成员和开发过程定义上；在软件设计阶段，架构师负责对整个软件体系结构、关键构件、接口和开发政策的设计；在编码阶段，架构师则成为详细设计者和代码编写者的顾问，并且经常性地要举行一些技术研讨会、技术培训班等；随着软件开始测试、集成和交付，集成和测试支持将成为软件架构师的工作重点；在软件维护开始时，软件架构师就开始为下一版本的产品是否应该增加新的功能模块进行决策。<br /><br />如何成为优秀的软件架构师<br /><br />显而易见，在软件开发过程中，一个优秀软件架构师的重要性是不应低估的。那么如何成为优秀的软件架构师呢？<br /><br />首先必须具有丰富的软件设计与开发经验，这有助于理解并解释所进行的设计是如何映射到实现中去。<br /><br />其次要具有领导能力与团队协作技能，软件架构师必须是一个得到承认的技术领导，能在关键时候对技术的选择作出及时、有效的决定。<br /><br />第三是具有很强的沟通能力，呵呵，其时这一点好象什么鬼角色都最好具备，软件架构师需要与各路人马经常打交道，客户、市场人员、开发人员、测试人员、项目经理、网络管理员、数据库工程师等等，而且在很多角色之间还要起沟通者的作用。在技术能力方面，软件架构师最重要也是最需求掌握的知识是构件通信机制方面的知识，比如远程过程调用、JAVARMI、CORBA、COM/DCOM、各种标准的通信协议、网络服务、面对对象数据库、关系数据库等等，另外，架构师应时刻注意新软件设计和开发方面的发展情况，并不断探索更有效的新方法。开发语言、设计模式和开发平台不断很快地升级，软件架构师需要吸收这些新技术新知识，并将它们用于软件系统开发工作中。当然，行业的业务知识对软件架构师也是很重要的，有助于设计<br /><br />出一个满足客户需求的体系结构，优秀的软件架构师常常因为要尽快获得对行业业务的理解而必须快速学习并且进行敏锐的观察。<br /><br />上面的描述是枯燥乏味的，但作为一个软件架构师，在整个软件系统的开发过程中是乐趣无穷的，因为这个角色很具有挑战性，有时需要左右逢源八面玲珑，有时又需要果断坚定不留情面。在国内，较少软件企业拥有独立的架构师，通常一个软件高手身兼数职，既是项目经理，又是软件架构师，还是软件开发者，有时还要客串一个测试人员，这对软件的开发周期和产品质量是不利的，有时一个人的观点立场是很片面的，而且繁重的工作、沉重的压力会影响一个人的情绪，情绪会影响决策，决策影响结果，所以值得我们三思而后行。<br /><br />构架师自我培养过程<br /><br />构架师不是通过理论学习可以搞出来的，不过不学习相关知识那肯定是不行的。总结构架师自我培养过程大致如下，仅供参考。<br /><br />1、构架师胚胎（程序员）<br />学习的知识是语言基础、设计基础、通信基础等，应该在大学完成，内容包括java、c、c++、uml、RUP、XML、socket通信（通信协议）——学习搭建应用系统所必须的原材料。 <br /><br />2、构架师萌芽（高级程序员）<br />学习分布式系统、组建等内容，可以在大学或第一年工作时间接触，包括分布式系统原理、ejb、corba、com/com+、webservice（研究生可以研究网络计算机、高性能并发处理等内容） <br /><br />3、构架师幼苗（设计师）<br />应该在掌握上述基础之上，结合实际项目经验，透彻领会应用设计模式，内容包括设计模式（c++版本、java版本）、ejb设计模式、J2EE构架、UDDI、软件设计模式等。在此期间，最好能够了解软件工程在实际项目中的应用以及小组开发、团队管理。 <br /><br />4、软件构架师的正是成型在于机遇、个人努力和天赋软件构架师其实是一种职位，但一个程序员在充分掌握软构架师所需的基本技能后，如何得到这样的机会、如何利用所掌握的技能进行应用的合理构架、如何不断的抽象和归纳自己的构架模式、如何深入行业成为能够胜任分析、构架为一体的精英人才这可不是每个人都能够遇上的馅饼……<br /><br />软件构架师职场概况<br /><br />如果您今天有幸同全球首富比尔·盖茨交换名片，您会注意到他的头衔是微软公司首席软件架构师。同样假如您得到中国首富丁磊的名片，您也会看到他的头衔是网易公司首席架构师。悄然间，架构师已经成为职场上最让人羡慕的职位。<br /><br />在我国，随着软件业规模的不断扩大，软件人才结构性矛盾将更加突出。国家人事部门预计到2005年我国软件产业的规模将达到2500亿元，全国计算机应用专业人才的需求每年将增加百万人左右。其中，架构师这样的专业高级人才每年培养人数全国不过数百名，缺口非常之大，而其中尤其以Java架构师缺口最为明显。<br /><br />众所周知，Java是当前最热门的软件开发语言，它具有跨平台、面向对象、强大的网络功能等特性。你不仅能在电脑上使用Java程序，还能在手机、PDA、家用电器上使用Java程序，甚至举世瞩目的火星车也全部采用Java技术。Java在不到10年时间内已经变成最流行的软件开发平台，最新的企业级Java 2.0版本（简称：J2EE）也成为企业应用系统上最受欢迎的开发标准。<br /><br />事实上，全世界范围内的J2EE架构师都是紧缺的人才，只是中国更加明显而已。在英国，有经验的J2EE架构师，目前平均年薪已经飙涨到七万至十万英镑。全球著名的电子商务平台提供商SilverStream软件公司的技术服务总监Mark Ashton对J2EE人才的短缺深有感受，他表示许多求职者的履历表上都有把J2EE列进去，但是仔细查看或是面试之后就会发现大多数人只是听过J2EE，并没有真正用过这些技术。信息产业部电子信息产品管理司副司长丁文武近期也表示，目前我国Java人才还远远不够，至少短缺20万。特别是随着大量软件外包业务进入中国，许多外资或中资软件企业也开始面临着高级Java人才奇缺的问题，尤其是熟悉J2EE又能掌握一门相应外语的人才成为了众多大公司争抢的对象。<br /><br />作为Java的发明者和Java开发标准的主要制定者——美国Sun公司对从事Java开发的技术人员提供了三级认证体系，即初级的程序员认证（SCJP）、中级的开发员认证（SCJD和SCWD）和高级的架构师认证（SCEA）。这也是软件行业中最权威的国际认证之一。目前国内已经有针对美国Sun公司认证体系的培训，但绝大多数主要针对初级的程序员认证，只有极少数专业培训机构能够提供三层完整培训。</font>
<img src ="http://www.blogjava.net/bcims/aggbug/114432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-28 21:56 <a href="http://www.blogjava.net/bcims/archive/2007/04/28/114432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毕业设计问题之：使用JSP生成验证码 </title><link>http://www.blogjava.net/bcims/archive/2007/04/18/111784.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Wed, 18 Apr 2007 15:38:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/18/111784.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/111784.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/18/111784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/111784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/111784.html</trackback:ping><description><![CDATA[
		<div class="code_title">在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式。</div>
		<div class="code_title">此演示程序包括三个文件：</div>
		<div class="code_title">
				<font color="#0000ff">1.index.jsp:登录页面</font>
		</div>
		<div class="code_title">
				<font color="#0000ff">2.image.jsp:生成验证码图片页面</font>
		</div>
		<div class="code_title">
				<font color="#0000ff">3.result.jsp:结果页面<br /><font color="#000000"><font color="#0000ff">【页面显示】<br /></font><img height="377" alt="哦哦D74ED2}0.jpg" src="http://www.blogjava.net/images/blogjava_net/bcims/哦哦D74ED2}0.jpg" width="540" border="0" /><br /></font><br /><div class="code_title">【页面代码】</div><div class="code_title"><font color="#0000ff">1.index.jsp</font></div><div class="code_title"><font color="#0000ff"></font></div><div class="code_title"><font color="#ff0000"><div class="code_title">html代码</div><div class="dp-highlighter"><div class="bar"></div><ol class="dp-xml"><li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>      </span></span></li><li><span></span><span class="tag">&lt;</span><span class="tag-name">form</span><span></span><span class="attribute">method</span><span>=</span><span class="attribute-value">post</span><span></span><span class="attribute">action</span><span>=</span><span class="attribute-value">"result.jsp"</span><span class="tag">&gt;</span><span>      </span></li><li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">input</span><span></span><span class="attribute">type</span><span>=</span><span class="attribute-value">text</span><span></span><span class="attribute">name</span><span>=</span><span class="attribute-value">input</span><span></span><span class="attribute">maxlength</span><span>=</span><span class="attribute-value">4</span><span class="tag">&gt;</span><span>      </span></li><li><span></span><span class="tag">&lt;</span><span class="tag-name">img</span><span></span><span class="attribute">border</span><span>=</span><span class="attribute-value">0</span><span></span><span class="attribute">src</span><span>=</span><span class="attribute-value">"image.jsp"</span><span class="tag">&gt;</span><span>      </span></li><li class="alt"><span></span><span class="tag">&lt;</span><span class="tag-name">input</span><span></span><span class="attribute">type</span><span>=</span><span class="attribute-value">"submit"</span><span></span><span class="attribute">value</span><span>=</span><span class="attribute-value">"submit"</span><span class="tag">&gt;</span><span>      </span></li><li><span></span><span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>  </span></li></ol></div>[注意]:</font></div><div class="code_title">(1)使用<font face="Arial"><font color="#ff6600">maxlength</font>属性来限制输入字符;</font></div><div class="code_title">(2)使用&lt;<font color="#ff6600">img&gt;</font>标签来显示生成的验证码图片.</div><div class="code_title"><font color="#0000ff"></font></div><div class="code_title"><font color="#0000ff">2.image.jsp</font></div><font color="#0000ff"><div class="code_title"><div class="bar"></div><div><ol class="dp-xml"><span><span class="tag"><ol class="dp-j"><li class="alt"><span><span>&lt;%@ page contentType=</span><span class="string">"image/JPEG"</span><span>      </span></span></li><li><span>    </span><span class="keyword">import</span><span>=</span><span class="string">"java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"</span><span>      </span></li><li class="alt"><span>      pageEncoding=</span><span class="string">"GBK"</span><span>%&gt;&lt;%!Color getRandColor(</span><span class="keyword">int</span><span> fc, </span><span class="keyword">int</span><span> bc) {</span><span class="comment">//给定范围获得随机颜色     </span><span>  </span></li><li><span>          Random random = </span><span class="keyword">new</span><span> Random();       </span></li><li class="alt"><span>        </span><span class="keyword">if</span><span> (fc &gt; </span><span class="number">255</span><span>)       </span></li><li><span>              fc = </span><span class="number">255</span><span>;       </span></li><li class="alt"><span>        </span><span class="keyword">if</span><span> (bc &gt; </span><span class="number">255</span><span>)       </span></li><li><span>              bc = </span><span class="number">255</span><span>;       </span></li><li class="alt"><span>        </span><span class="keyword">int</span><span> r = fc + random.nextInt(bc - fc);       </span></li><li><span>        </span><span class="keyword">int</span><span> g = fc + random.nextInt(bc - fc);       </span></li><li class="alt"><span>        </span><span class="keyword">int</span><span> b = fc + random.nextInt(bc - fc);       </span></li><li><span>        </span><span class="keyword">return</span><span></span><span class="keyword">new</span><span> Color(r, g, b);       </span></li><li class="alt"><span>      }%&gt;&lt;%       </span></li><li><span>    </span><span class="comment">//设置页面不缓存     </span><span>  </span></li><li class="alt"><span>      response.setHeader(</span><span class="string">"Pragma"</span><span>, </span><span class="string">"No-cache"</span><span>);       </span></li><li><span>      response.setHeader(</span><span class="string">"Cache-Control"</span><span>, </span><span class="string">"no-cache"</span><span>);       </span></li><li class="alt"><span>      response.setDateHeader(</span><span class="string">"Expires"</span><span>, </span><span class="number">0</span><span>);       </span></li><li><span>      </span></li><li class="alt"><span>    </span><span class="comment">// 在内存中创建图象     </span><span>  </span></li><li><span>    </span><span class="keyword">int</span><span> width = </span><span class="number">60</span><span>, height = </span><span class="number">20</span><span>;       </span></li><li class="alt"><span>      BufferedImage image = </span><span class="keyword">new</span><span> BufferedImage(width, height,       </span></li><li><span>              BufferedImage.TYPE_INT_RGB);       </span></li><li class="alt"><span>      </span></li><li><span>    </span><span class="comment">// 获取图形上下文     </span><span>  </span></li><li class="alt"><span>      Graphics g = image.getGraphics();       </span></li><li><span>      </span></li><li class="alt"><span>    </span><span class="comment">//生成随机类     </span><span>  </span></li><li><span>      Random random = </span><span class="keyword">new</span><span> Random();       </span></li><li class="alt"><span>      </span></li><li><span>    </span><span class="comment">// 设定背景色     </span><span>  </span></li><li class="alt"><span>      g.setColor(getRandColor(</span><span class="number">200</span><span>, </span><span class="number">250</span><span>));       </span></li><li><span>      g.fillRect(</span><span class="number">0</span><span>, </span><span class="number">0</span><span>, width, height);       </span></li><li class="alt"><span>      </span></li><li><span>    </span><span class="comment">//设定字体     </span><span>  </span></li><li class="alt"><span>      g.setFont(</span><span class="keyword">new</span><span> Font(</span><span class="string">"Times New Roman"</span><span>, Font.PLAIN, </span><span class="number">18</span><span>));       </span></li><li><span>      </span></li><li class="alt"><span>    </span><span class="comment">//画边框     </span><span>  </span></li><li><span>    </span><span class="comment">//g.setColor(new Color());     </span><span>  </span></li><li class="alt"><span>    </span><span class="comment">//g.drawRect(0,0,width-1,height-1);     </span><span>  </span></li><li><span>      </span></li><li class="alt"><span>    </span><span class="comment">// 随机产生155条干扰线，使图象中的认证码不易被其它程序探测到     </span><span>  </span></li><li><span>      g.setColor(getRandColor(</span><span class="number">160</span><span>, </span><span class="number">200</span><span>));       </span></li><li class="alt"><span>    </span><span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i &lt; </span><span class="number">100</span><span>; i++) {       </span></li><li><span>        </span><span class="keyword">int</span><span> x = random.nextInt(width);       </span></li><li class="alt"><span>        </span><span class="keyword">int</span><span> y = random.nextInt(height);       </span></li><li><span>        </span><span class="keyword">int</span><span> xl = random.nextInt(</span><span class="number">12</span><span>);       </span></li><li class="alt"><span>        </span><span class="keyword">int</span><span> yl = random.nextInt(</span><span class="number">12</span><span>);       </span></li><li><span>          g.drawLine(x, y, x + xl, y + yl);       </span></li><li class="alt"><span>      }       </span></li><li><span>      </span></li><li class="alt"><span>    </span><span class="comment">// 取随机产生的认证码(4位数字)     </span><span>  </span></li><li><span>      String sRand = </span><span class="string">""</span><span>;       </span></li><li class="alt"><span>    </span><span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i &lt; </span><span class="number">4</span><span>; i++) {       </span></li><li><span>          String rand = String.valueOf(random.nextInt(</span><span class="number">10</span><span>));       </span></li><li class="alt"><span>          sRand += rand;       </span></li><li><span>        </span><span class="comment">// 将认证码显示到图象中     </span><span>  </span></li><li class="alt"><span>          g.setColor(</span><span class="keyword">new</span><span> Color(</span><span class="number">20</span><span> + random.nextInt(</span><span class="number">110</span><span>), </span><span class="number">20</span><span> + random       </span></li><li><span>          .nextInt(</span><span class="number">110</span><span>), </span><span class="number">20</span><span> + random.nextInt(</span><span class="number">110</span><span>)));</span><span class="comment">//调用函数出来的颜色相同，可能是因为种子太接近，所以只能直接生成     </span><span>  </span></li><li class="alt"><span>          g.drawString(rand, </span><span class="number">13</span><span> * i + </span><span class="number">6</span><span>, </span><span class="number">16</span><span>);       </span></li><li><span>      }       </span></li><li class="alt"><span>      </span></li><li><span>    </span><span class="comment">// 将认证码存入SESSION     </span><span>  </span></li><li class="alt"><span>      session.setAttribute(</span><span class="string">"code"</span><span>, sRand);       </span></li><li><span>      </span></li><li class="alt"><span>    </span><span class="comment">// 图象生效     </span><span>  </span></li><li><span>      g.dispose();       </span></li><li class="alt"><span>      </span></li><li><span>    </span><span class="comment">// 输出图象到页面     </span><span>  </span></li><li class="alt"><span>      ImageIO.write(image, </span><span class="string">"JPEG"</span><span>, response.getOutputStream());       </span></li><li><span>%&gt;  </span></li></ol></span></span><span>  </span></ol></div></div><div class="code_title"></div><div class="code_title"><font color="#000000"><font color="#ff0000">[注意]:</font></font></div><div class="code_title"><font color="#000000">(1)<font face="Arial"><font color="#ff6600">contentType</font>值设置为<font color="#ff6600">"image/JPEG"</font></font></font></div><div class="code_title"></div><div class="code_title"><font color="#0000ff"><font color="#000000"></font></font></div><div class="code_title"><font color="#0000ff"><font color="#000000"><font color="#0000ff">3.result.jsp</font></font></font><font color="#0000ff"></font><div class="code_title"><font color="#0000ff"></font></div><div class="code_title"></div><div class="code_title"><font color="#0000ff"></font></div><div class="code_title"><font color="#0000ff"></font></div><div class="code_title"><font color="#0000ff"></font><font color="#0000ff"><div class="code_title"></div></font></div><div class="code_title"></div></div><div class="code_title"><div class="bar"></div><div><ol class="dp-xml"><li class="alt"><span><span class="tag">&lt;</span><span>%@ page </span><span class="attribute">language</span><span>=</span><span class="attribute-value">"java"</span><span></span><span class="attribute">import</span><span>=</span><span class="attribute-value">"java.util.*"</span><span></span><span class="attribute">pageEncoding</span><span>=</span><span class="attribute-value">"GBK"</span><span>%</span><span class="tag">&gt;</span><span>  </span></span></li><li><span></span><span class="tag">&lt;</span><span class="tag-name">html</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>  </span></li><li class="alt"><span></span><span class="tag">&lt;</span><span>%   </span></li><li><span>      String </span><span class="attribute">input</span><span>=</span><span class="attribute-value">request</span><span>.getParameter("input");   </span></li><li class="alt"><span>      String </span><span class="attribute">code</span><span>=(String)session.getAttribute("code");       </span></li><li><span>      if(input.equals(code)){   </span></li><li class="alt"><span>          out.println("验证成功!");   </span></li><li><span>      }else{   </span></li><li class="alt"><span>          out.println("验证失败!");   </span></li><li><span>      }   </span></li><li class="alt"><span>%</span><span class="tag">&gt;</span><span>  </span></li><li><span></span><span class="tag"><span class="tag-name">&lt;/body</span><span class="tag">&gt;&lt;/</span><span class="tag"><span class="tag-name">html</span><span class="tag">&gt;</span><span>  </span></span></span></li></ol></div></div></font></font>
		</div>
<img src ="http://www.blogjava.net/bcims/aggbug/111784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-18 23:38 <a href="http://www.blogjava.net/bcims/archive/2007/04/18/111784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java API中文版下载 </title><link>http://www.blogjava.net/bcims/archive/2007/04/16/111061.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Mon, 16 Apr 2007 11:54:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/16/111061.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/111061.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/16/111061.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/111061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/111061.html</trackback:ping><description><![CDATA[Java API中文版下载<br />2006-12-20 21:27<br />Java API中文版下载<br /><br />Java API Docs是学习和使用Java语言中最经常使用的参考资料之一，完整的Java API文档中文版文档共包括32个类库。但是长期以来此文档只有英文版和日文版，对于中国地区的Java开发者来说相当的不便。通过Sun公司的翻译团队10个月的不懈努力以及广大网友的热心支持， Java API中文文档的翻译工作如期完成，呈现到中国广大的Java用户和学习者面前。<br /><br />Sun 官方下载地址:（推荐）<br />http://gceclub.sun.com.cn/Java_Docs/html_zh_CN.zip<br /><br /> p.s:文件的生成日期都是2006-06-22，比我原来下的新。好像多了些东东，自己看啦<br /><br />中文API在线阅读（有更新）：<br />http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/index.html<br /><br />API 文档中文版技术论坛<br />http://gceclub.sun.com.cn/NASApp/sme/jive/forum.jsp?forum=35<br /><br /><br />JDK 1.5.0中文版CHM：（推荐）<br />http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/JDK_API_1_5_zh_CN.CHM <br /><br />API资源：<br />https://jdk-api-zh-cn.dev.java.net/<br /><br />英文版CHM<br />http://java.sun.com/docs/windows_format.html <br /><br /> <br /><br /> sun中文站点：<br />http://cn.sun.com/<br /><br />中文技术社区：（可找到很多资源，推荐！）<br />http://gceclub.sun.com.cn/ <br /><br />文档：<br />http://docs.sun.com/app/docs<br /><br />英文在线文档：<br />http://java.sun.com/j2se/1.5.0/docs/api/index.html<br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1509986</p><img src ="http://www.blogjava.net/bcims/aggbug/111061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-16 19:54 <a href="http://www.blogjava.net/bcims/archive/2007/04/16/111061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于java的权限控制系统设计</title><link>http://www.blogjava.net/bcims/archive/2007/04/16/110882.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Mon, 16 Apr 2007 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/16/110882.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/110882.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/16/110882.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/110882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/110882.html</trackback:ping><description><![CDATA[
		<p>一、概要 </p>
		<p>
				<br />通常，需要单独的权限系统是解决授权的管理和维护，再分配等难题，不针对开发而言。 </p>
		<p>
				<br />系统架构目标：在易于理解和管理，开发的前提下，满足绝大部分粗粒度和细粒度权限控制的功能需要。 </p>
		<p>
				<br />除了粗粒度权限，系统中必然还会包括无数对具体Instance的细粒度权限。这些问题，被留给对框架的扩展方法来解决，这样的考虑基于以下两点：<br />  1、细粒度的权限判断必须要在资源上获取权限分配的支持的上下文信息才可能得以实现。 </p>
		<p>
				<br />2、细粒度的权限常常具有相当大的业务逻辑相关性。对不同的业务逻辑，常常意味着完全不同的权限判定原则和策略。相比之下，粗粒度的权限更具通用性，将其实现为一个架构，更有重用价值；而将细粒度的权限判断实现为一个架构级别的东西就显得繁琐，增加架构的复杂性。而且不是那么的有必要，用定制的代码来实现就更简洁，更灵活。否则会变成各种逻辑代码的堆砌。 </p>
		<p>
				<br />比如，product post数量的控制，这种一般要知道用户个性化的信息，付钱数量到数据库中查找最高数量，还要知道此用户已经有多少产品等，规则不具备通用性和重用性， </p>
		<p>
				<br />   所以细粒度控制不应该放在权限架构层来解决。实例级的细粒度权限的解决方案就是将它转化为粗粒度权限，这样我们权限客户端就变得很简单了。 </p>
		<p>
				<br />名词解释： </p>
		<p>
				<br />    粗粒度权限 ：一般可以通过配置文件来授权，授权只有真假，没有多少之分，不需要上下文的支持。 </p>
		<p>
				<br />    不消耗资源的。 </p>
		<p>
				<br />    逻辑表达式：判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。 </p>
		<p>
				<br />    别名：静态授权、类级授权 </p>
		<p>
				<br /> 细粒度权限：不能通过配置文件等表达，需要特定上下文的支持. </p>
		<p>
				<br />    逻辑表达式：判断“When(Where)的时候，Who对What(Which)进行How的操作”的逻辑表达式是否为真。 </p>
		<p>
				<br />    别名：动态授权、实例级授权 </p>
		<p>
				<br />设计原则 ： </p>
		<p>
				<br />框架只提供粗粒度的权限。 </p>
		<p>
				<br />细粒度的权限也需要集中管理和维护 </p>
		<p>
				<br />细粒度的权限通过定制的扩展代码将细粒度转化为粗粒度授权。 </p>
		<p>
				<br />二、权限系统的设计 </p>
		<p>
				<br />权限往往是一个极其复杂的问题， 设计权限系统第一个要解决的问题就是什么样的行为是需要权限控制，什么样的是业务方法。他们之间本来是没有明确的区分，任何权限从某种角度上说可以是一种业务方法。为了以后管理和开发方面我们从概念上需要将权限和业务明确划分清楚，指导开发。</p>
		<p>
				<br /> 权限控制行为：  对What(Which)进行How的操作需要区分Who，具有Who身份差异性和可替换性。  我们将此类操作作为权限。 </p>
		<p>
				<br />     特点： 可以收回也可以分配的，具有一定的抽象级别。       消耗资源，行为结果具备一些持久性的影响。 </p>
		<p>
				<br /> 业务逻辑行为：  对What(Which)进行How的操作的时候与Who的身份无关或者具有Who身份差异性但             是不具有可替换性。</p>
		<p>
				<br />    特点： 不能抽象和共享，很难回收和分配。不消耗资源，不产生持久性。现实中也存在某一时期行为是业务逻辑，最后演变成权限控制，或者相反的过程。 </p>
		<p>
				<br />1、粗粒度权限设计</p>
		<p>
				<br />       采用自主型访问控制方法，操作给予访问控制列表。每一个用户通过角色获得一组权限集合，权限系统的功能是验证用户申请的权限（集合）是否在这个集合当中，即申请的权限（集合）是否投影在用户拥有的权限集合,换句话说：只要某用户直接或者间接的属于某个Role那么它就具备这个Role的所有权限许可。</p>
		<p>
				<br />一个自主型访问控制方法的权限系统包括以下几个部分：角色、权限、访问控制表、 </p>
		<p>
				<br />l         权限 </p>
		<p>
				<br />描述一个权限可以通过以下几个要素说明： </p>
		<p>
				<br />类型（class）: </p>
		<p>
				<br />名称（name）：</p>
		<p>
				<br />动作(actions)：</p>
		<p>
				<br />掩码（mask）：</p>
		<p>
				<br />属性： </p>
		<p>
				<br />具体权限Example:</p>
		<p>
				<br />1、Test</p>
		<p>
				<br />类型（class）:com.yangjs.secutiry. permissions. TestPermission </p>
		<p>
				<br />名称（name）：如：test.* ，test.sub.* ,test.sub1.sub2</p>
		<p>
				<br />动作(actions)： brower_detail ,post,repost,…… </p>
		<p>
				<br />掩码（mask）：0x1,0x2,0x4…..</p>
		<p>
				<br />属性： 无 </p>
		<p>
				<br />.………….. </p>
		<p>
				<br />l         存取控制器（my--acl.xml）配置 </p>
		<p>
				<br />存取控制项（ACE）：角色到权限的映射集合，表示某个角色可以在某些资源上执行某些动作，它们之间通过role关联（继承），ACE之间产生包含关系。</p>
		<p>
				<br />存取控制列表（ACL）：ACE的集合。 </p>
		<p>
				<br /> 我们的存取控制器（ACL）是通过一个xml的配置文件说明，存取控制列表由多个存取控制项（ACE）来描述。使用方法(略）</p>
		<p>
				<br /> 2、细粒度权限设计 </p>
		<p>
				<br />    细粒度授权需要上下文的支持，而且每个权限控制的上下问题都不一样，这由相关的业务逻辑决定，而且此类授权一般变化较快，应此需要将强的可维护性和扩展性，支持变化，但又不能够太复杂，否则缺乏可执行性。虽然此类权限个性化较强，我们仍然可以总结出很多共性： </p>
		<p>
				<br />1.       几乎所有的授权需要用户的角色和ID. </p>
		<p>
				<br />2.       特定的上下文几乎都同用户资源使用情况相关.</p>
		<p>
				<br />   我们将此类信息称为UserState 即：User角色以及资源使用情况和当前状态。大部分信息我们在用户登陆的时候已经。获得。授权贯穿Web层和Biz层，因此我们的登陆要独立于Web端。因此上下文我们可以用UserState结合其他来抽象。 </p>
		<p>
				<br />   关于上下文的维护问题，我们不可能将UserState此类参数在Web层和Biz层来回传递，更加不能在需要授权的地方都加上一个这样的方法参数，这样不太现实。其次如果在授权的地方再从数据库中取一次这样虽然能够解决部分问题（不能解决userId的传递），这样效率太低，不能接受。 </p>
		<p>
				<br />       解决方法就是将此类信息cache起来，用的时候再去取，由于此类信息具有非常高的并发性，对线程安全较高，因此我们决定将此类信息放入一个线程上下文的内存cache中。此外我们由于引入cache，就需要解决所有cache共有的维护性问题。</p>
		<p>
				<br />       Cache的生命周期：用户的一次请求，属于线程级，用户请求线程结束，Cache结束。</p>
		<p>
				<br />       Cache的更新：当上下文信息发生变化是需要及时更新Cache，这是一个不可避免的步骤。</p>
		<p>
				<br />        Cache丢失：发生在如系统down机，线程崩溃，内存溢出等等，对用户来说就是当前请求突然中断。</p>
		<p>
				<br />       当用户重新发送请求，我们的系统就需要重新验证用户，此时我们可以更新Cache解</p>
		<p>
				<br />       决丢失问题。</p>
		<p>
				<br />       Cache的清理：这个实现就是当用户请求结束，返回应答的时候清理，可以通过Filter实现，比较简单。</p>
		<p>
				<br />以上是相关的原理部分，我们看看系统地实现：</p>
		<p>
				<br />实现：线程上下文的cache</p>
		<p>
				<br />实现类：com.yangjs.cache.ThreadContextCache: </p>
		<p>
				<br />public class ThreadContextCache { </p>
		<p>
				<br />    public static Map asMap()； </p>
		<p>
				<br />    public static boolean containsKey(Object key)； </p>
		<p>
				<br />    public static boolean containsValue(Object key)； </p>
		<p>
				<br />    public static Object get(Object key)； </p>
		<p>
				<br />    public static void put(Object key, Object value)； </p>
		<p>
				<br />    public static Object remove(Object key)； </p>
		<p>
				<br />    public static void clean()； </p>
		<p>
				<br />public static int size() ； </p>
		<p>
				<br />public static void destroy()</p>
<img src ="http://www.blogjava.net/bcims/aggbug/110882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-16 09:17 <a href="http://www.blogjava.net/bcims/archive/2007/04/16/110882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不可多得的Javascript(AJAX)开发工具 － Aptana</title><link>http://www.blogjava.net/bcims/archive/2007/04/15/110833.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Sun, 15 Apr 2007 15:07:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/15/110833.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/110833.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/15/110833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/110833.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/110833.html</trackback:ping><description><![CDATA[
		<p>自从开始做Web开发起，一直都没有找到一个很让人满意的Javascript开发工具。从Editplus、Dreamweaver到FrontPage、Visual Studio，没有一样是很称手的。你是不是还在为Visual Studio中的那一点点智能提示感到兴奋不已？的确VS比其他的好那么一点点，但是相对于VS中的C#、VB等来说对javascript的支持实在是太少了。</p>
		<p>下面我要向你介绍一款非常优秀的Javascript(AJAX) 开发工具：<a href="http://www.aptana.com/"><font color="#1a8bc8">Aptana</font></a>。应为它实在太棒了，所以我忍不住想向你推荐它。</p>
		<p>Aptana中的智能提示称为 <strong>Code Assist</strong>，相当于VS中的Intellisense。<br /><a href="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/code_assist%5B2%5D.png" atomicselection="true"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="193" src="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/code_assist_thumb.png" width="428" border="0" /></a><br />看到后面的浏览器图标了吗？那是<strong>浏览器兼容性</strong>的提示。如果你是一个JS老鸟你应该知道那对开发者来说有多重要。</p>
		<p>不仅仅是javascript，智能提示的范围还包括DOM 1,2 for HTML：<a href="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/screenshot_html_code_assist%5B2%5D.png" atomicselection="true"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="213" src="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/screenshot_html_code_assist_thumb.png" width="570" border="0" /></a><br />CSS：<br /><a href="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/screenshot_css_code_assist%5B1%5D.jpg" atomicselection="true"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="273" src="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/screenshot_css_code_assist_thumb%5B1%5D.jpg" width="557" border="0" /></a><br />看到后面的黄框框了吗？那是VS里称为Quick Info的东西。</p>
		<p>错误提示 －－ 一个都不能少：<br /><a href="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/screenshot_problems_view_integrated%5B1%5D.jpg" atomicselection="true"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="575" src="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/screenshot_problems_view_integrated_thumb%5B1%5D.jpg" width="494" border="0" /></a></p>
		<p>Doument outline（文档结构）CSS、HTML、JS统一显示：<br /><a href="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/screenshot_outline_integrated%5B6%5D.png" atomicselection="true"><img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="535" src="http://www.cnblogs.com/images/cnblogs_com/jackielin/WindowsLiveWriter/JavascriptAJAXAptana_121F/screenshot_outline_integrated_thumb%5B6%5D.png" width="490" border="0" /></a></p>
		<p>代码折叠、项目管理这些小菜不用讲了，都支持。Aptana还有很丰富的在线文档，是以wiki形式不断更新的，当然在连线的情况下你可以在Aptana中直接访问这些文档。</p>
		<p>最新版的Aptana（0.2.6）已经开始支持Debug了，不过要通过Firefox插件的形式。</p>
		<p>Aptana是一个java开源项目（.NET程序员应该扪心自问了吧），现在还在beta阶段（从版本号你就可以看出来了）。所以它是跨平台的。你在windows上运行它可能会觉得有一点点慢（比VS快多了）。其实Aptana的内存占用很少，才2M多，不过JVM...我就不想说什么了。</p>
		<p>幸运的是你可以通过javascript扩展它，这里是它的<a href="http://www.aptana.com/dev/api/ide/aptana_ide_0.2.6/"><font color="#1a8bc8">API</font></a>。</p>
		<p>Aptana还有太多让人惊艳的地方，你一定要自己用过了才知道。</p>
<img src ="http://www.blogjava.net/bcims/aggbug/110833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-15 23:07 <a href="http://www.blogjava.net/bcims/archive/2007/04/15/110833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基础问题：JAVA中用接口实现多继承和多态的方法</title><link>http://www.blogjava.net/bcims/archive/2007/04/13/110546.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Fri, 13 Apr 2007 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/13/110546.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/110546.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/13/110546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/110546.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/110546.html</trackback:ping><description><![CDATA[
		<p>1.JAVA里没有多继承，一个类之能有一个父类。而继承的表现就是多态。一个父类可以有多个子类，而在子类里可以重写父类的方法（例如方法print()），这样每个子类里重写的代码不一样，自然表现形式就不一样。这样用父类的变量去引用不同的子类，在调用这个相同的方法print()的时候得到的结果和表现形式就不一样了，这就是多态，相同的消息（也就是调用相同的方法）会有不同的结果。举例说明： </p>
		<p>//父类<br />public class Father{<br />   //父类有一个打孩子方法<br />   public void hitChild(){<br />   }<br />}<br />//子类1<br />public class Son1 extends Father{<br />   //重写父类打孩子方法<br />   public void hitChild(){<br />      System.out.println("为什么打我？我做错什么了！");<br />   }<br />}<br />//子类2<br />public class Son2 extends Father{<br />   //重写父类打孩子方法<br />   public void hitChild(){<br />      System.out.println("我知道错了，别打了！");<br />   }<br />}<br />//子类3<br />public class Son3 extends Father{<br />   //重写父类打孩子方法<br />   public void hitChild(){<br />      System.out.println("我跑，你打不着！");<br />   }<br />}</p>
		<p>//测试类<br />public class Test{<br />   public static void main(String args[]){<br />      Father father;</p>
		<p>      father = new Son1();<br />      father.hitChild();</p>
		<p>      father = new Son2();<br />      father.hitChild();</p>
		<p>      father = new Son3();<br />      father.hitChild();<br />   }<br />}</p>
		<p>
				<br />都调用了相同的方法，出现了不同的结果！这就是多态的表现！ </p>
		<p> </p>
		<p>2.JAVA中没有多继承，而用接口实现了多继承！一个类或是可以同时实现多个接口！（就相当于C++里一个类同时继承了多个类！）例如： </p>
		<p>public class Son implements Father1,Father2,Father3{ </p>
		<p>
				<br />} </p>
		<p>
				<br />接口有利于代码功能的扩展（增加新的功能）！而继承则有利于代码功能的修改（把旧的功能改成新的功能）！这里旧功能的修改和新功能的增加前提是不修改旧的功能，旧的功能仍然可以使用！旧类的代码也不做修改！ </p>
		<p>
				<br />接着上面的继承举例：上面例子中的子类我们统称为一代子类 </p>
		<p>
				<br />1.用继承修改旧的功能。 </p>
		<p>现在如果一代Son1的功能打孩子，也就是方法hitChild()里边的功能实现有问题，我们要把具体实现修改掉，那么我们可以重新写一个新的二代子类Son11继承自一代子类Son1，并重写其hitChild()方法。 </p>
		<p>
				<br />//二代子类<br />public class Son11 extends Son1{<br />   //重写父类打孩子方法<br />   public void hitChild(){<br />      System.out.println("我是二代子类对此方法的新实现");<br />   }<br />}</p>
		<p> </p>
		<p>2.用接口实现增加新的功能。 </p>
		<p>现在类Son1已经有了‘打孩子’功能（也就是方法），而我们有了新的需求，我们需要它还要有一个新的功能‘宠孩子’（新方法pet();）。而旧的代码不能动！那么我们可以定义一个新的接口（PetInterFace），接口里定义这个方法pet()的声明。再重新写一个二代子类Son11，让它先继承类Son1，同时实现接口 PetInterFace！并实现接口里的 pet()方法！ </p>
		<p>//新接口<br />public interface PetInterFace{<br />   //新功能方法<br />   public void pet();<br />}</p>
		<p>//二代子类<br />public class Son11 extends Son1 implements PetInterFace{<br />   //实现接口方法<br />   public void pet(){<br />      System.out.println("父亲很爱我！");<br />   }<br />}</p>
		<p> </p>
		<p>这样这个二代子类即有了老的方法，又有新的功能！</p>
<img src ="http://www.blogjava.net/bcims/aggbug/110546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-13 22:54 <a href="http://www.blogjava.net/bcims/archive/2007/04/13/110546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>权限控制算法</title><link>http://www.blogjava.net/bcims/archive/2007/04/13/110537.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Fri, 13 Apr 2007 14:05:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/13/110537.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/110537.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/13/110537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/110537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/110537.html</trackback:ping><description><![CDATA[
		<p>向大家介绍一种很不错，也是Linux中的权限管理算法。</p>
		<p>　　定义a^b为：a的b次方<br />　　假如，我们为每一个操作设定一个唯一的整数值，比如：</p>
		<p>删除Ａ－－－0<br />修改Ａ－－－1<br />添加Ａ－－－2</p>
		<p>删除Ｂ－－－3<br />修改Ｂ－－－4<br />添加Ｂ－－－5<br />。。。</p>
		<p>　　理论上可以有Ｎ个操作，这取决于你用于储存用户权限值的数据类型了。</p>
		<p>　　这样，如果用户有权限：添加Ａ－－－2；删除Ｂ－－－3；修改Ｂ－－－4<br />那用户的权限值 purview =2^2+2^3+2^4＝28，也就是2的权的和了<br />化成二进制可以表示为11100<br />　　如果要验证用户是否有删除Ｂ的权限，就可以通过位与运算来实现。<br />　　在Ｊａｖａ里，位与运算运算符号为＆<br />　　即是：int value = purview &amp;((int)Math.pow(2,3));<br />　　你会发现，当用户有操作权限时，运算出来的结果都会等于这个操作需要的权限值！</p>
		<p>原理：<br />位与运算，顾名思义就是对位进行与运算：<br />以上面的式子为例：purview &amp; 2^3 也就是　28&amp;8<br />将它们化成二进制有<br />　11100<br />＆ 01000<br />-------------------<br />　 01000 == 8(十进制)　＝＝　2^3<br />同理，如果要验证是否有删除Ａ－－－0的权限<br />可以用：purview &amp;((int)Math.pow(2,0));<br />即：<br />　11100<br />＆ 00001<br />------------------------<br />　 00000 == 0(十进制)　　！＝　2^0 </p>
		<p>　　这种算法的一个优点是速度快。可以同时处理Ｎ个权限，设置Ｎ种角色．<br />　　如果想验证是否同时有删除Ａ－－－0和删除Ｂ－－－3的权限<br />　　可以用purview&amp;(2^0+2^3)==(2^0+2^3)?true:false;<br />　　设置多角色用户。根据权限值判断用户的角色。。。</p>
		<p>　　下面提供一个java的单操作权限判断的代码：</p>
		<p>
				<br />//userPurview是用户具有的总权限<br />//optPurview是一个操作要求的权限为一个整数（没有经过权的！）<br />public static boolean checkPower(int userPurview, int optPurview){<br />　　int purviewValue = (int)Math.pow(2, optPurview);<br />　　return (userPurview &amp; purviewValue) == purviewValue;<br />}<br />　　当然，多权限的验证只要扩展一下就可以了。<br />　　几点注意事项：首先，一个系统可能有很多的操作，因此，请建立数据字典，以便查阅，修改时使用。其次，如果用数据库储存用户权限，请注意数值的有效范围。操作权限值请用唯一的整数！Java的int类型最多可以储存11个权限和．如果超过，可以选择其它数据类型，而且建议不同模块，使用多个权限变量．</p>
<img src ="http://www.blogjava.net/bcims/aggbug/110537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-13 22:05 <a href="http://www.blogjava.net/bcims/archive/2007/04/13/110537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>是谁在说SWING开发的界面不漂亮？</title><link>http://www.blogjava.net/bcims/archive/2007/04/05/108622.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Thu, 05 Apr 2007 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/05/108622.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/108622.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/05/108622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/108622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/108622.html</trackback:ping><description><![CDATA[如果看过之后还有人说swing很丑，那就不知道说他什么好了。<br /><br /><a href="https://substance.dev.java.net/webstart/test.jnlp"><u><font color="#800080">https://substance.dev.java.net/webstart/test.jnlp</font></u></a><br /><a class="txt_4" href="http://www.jidesoft.com/products/1.4/jide_demo.jnlp"><u><font color="#800080">http://www.jidesoft.com/products/1.4/jide_demo.jnlp</font></u></a><font class="txt_3"><br /><br />可惜jide是收费的，不然制作swing商用软件界面太爽了，简直就是爽歪歪。 <br /><br />上一张图片，先爽歪歪一下。。。。。。<br /><img height="496" alt="222.JPG" src="http://www.blogjava.net/images/blogjava_net/bcims/king/222.JPG" width="574" border="0" /><br /></font><img src ="http://www.blogjava.net/bcims/aggbug/108622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-05 10:14 <a href="http://www.blogjava.net/bcims/archive/2007/04/05/108622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毕业设计问题之：DispatchAction的运用和其中的exccute+各种方法的运用</title><link>http://www.blogjava.net/bcims/archive/2007/04/04/108426.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Wed, 04 Apr 2007 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/04/108426.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/108426.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/04/108426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/108426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/108426.html</trackback:ping><description><![CDATA[  DispatchAction 必须不写execute(... ...)方法, <br />否则反而有问题, 使用中我发现如果你写了exceute 方法 struts仍然首先调用改excute()方法, <br />这是即使你配置了 method 参数如 action="abcAction.do?method=load" 也无效,<br /> struts 仍然首先执行execute, 故DispatchAction中不要写execute( ... ...) 方法. <br /><br />----------------------------方法都要象下面一样写------------------------------------------------------------<br /> public ActionForward  delete(ActionMapping mapping, ActionForm form,<br />   HttpServletRequest request, HttpServletResponse response){<br />  System.out.println("this is delete! ");<br />  return mapping.findForward("pageInfo");<br /> }<br />--------------------------struts-config.xml里的写法(我没有写form)--------------------------------------------------------<br />    &lt;action<br />      path="/displayAll"<br />      input="/resultDb/pageInfo.jsp"<br />      type="ctm.struts.action.DisplayAllAction"<br />      <font color="#ff3300">parameter="method"  //要注意<br /></font>      scope="request"<br />      validate="false" &gt;<br />      &lt;/action&gt;<br />--------------------------------------------------------------------------------------------------------<img src ="http://www.blogjava.net/bcims/aggbug/108426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-04 14:36 <a href="http://www.blogjava.net/bcims/archive/2007/04/04/108426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何解决Eclipse中ISO8859-1 字符集?</title><link>http://www.blogjava.net/bcims/archive/2007/04/04/108305.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Tue, 03 Apr 2007 17:01:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/04/04/108305.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/108305.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/04/04/108305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/108305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/108305.html</trackback:ping><description><![CDATA[
		<p>
				<a href="http://www.cnblogs.com/jackielin/archive/2006/11/05/550422.html">
				</a> </p>
		<p>第一种问题：<br /><br />在写JSP时,里面面有涉及到数据库操作,当保存时就会弹出<br />save could not be completed<br />原因是some characters could not be mapped using iso8859-1</p>
		<p>&lt;%@ page language="java" pageEncoding="GBK"%&gt;<br />设成GBK或UTF－8就可以了，只要他里面的支持中文就KO了</p>
		<p>第二种问题：<br />用eclipse编写jsp页面或JAVA类的时候,直接在页面里输入汉字，保存的时候出现"字符不能匹配ISO-8859-1"的错误提示，因为ISO-8859-1是英文编码，不能识别汉字，我就想把它改为utf-8,可是我找不到能改变编码的地方，首先我打开工程的属性，在"info"里看到"Text file encoding"就世界把它改为utf-8，可是还是出现错误提示，搞了好半天还是搞不定它，就在网上找找看有没人遇到过这样的问题。对这个问题解答比较多的是在"edit"---"set encoding"(好像这个是为单独的文件临时设置编码),可是我在eclipse里没找到(我用的是3.2，不知道是不是这个原因)，后来又找到一个解释：设置默认编码：<br />window--&gt;preferences--&gt;general--&gt;editor--&gt;text file encoding，<br />我打开perferences还是没有找到，狂晕~~~~~~~~~，<br />接着看看别的地方有没有设置编码的地方，<br />还是没有找到..........<br /> 又回到perferences，觉得还是在这里可以解决，呵呵，问题还是出在这里，<br />我找到"General"--"Content Types"，<br />右边有个树形的text，<br />展开找到"JSP",开始没发现，<br />那家伙躲在最低下...........，<br />大家不要像我粗心，<br />最低下有个"Default encoding"，<br />里面默认的是"ISO-8859-1",<br />终于找到了，<br />删掉"ISO-8859-1"填上"UTF-8"，<br />在点一下"update"，<br />OK。再保存，<br />就没有错误了..............<br /><img height="513" alt="{8C6FE5A0-E3ED-46BC-810E-566EB08B4234}.JPG" src="http://www.blogjava.net/images/blogjava_net/bcims/king/{8C6FE5A0-E3ED-46BC-810E-566EB08B4234}.JPG" width="570" border="0" /></p>
<img src ="http://www.blogjava.net/bcims/aggbug/108305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcims/" target="_blank">EricWong</a> 2007-04-04 01:01 <a href="http://www.blogjava.net/bcims/archive/2007/04/04/108305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毕业设计问题之：Hibernate  VS  iBATIS</title><link>http://www.blogjava.net/bcims/archive/2007/03/23/105988.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Fri, 23 Mar 2007 15:17:00 GMT</pubDate><guid>http://www.blogjava.net/bcims/archive/2007/03/23/105988.html</guid><wfw:comment>http://www.blogjava.net/bcims/comments/105988.html</wfw:comment><comments>http://www.blogjava.net/bcims/archive/2007/03/23/105988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcims/comments/commentRss/105988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcims/services/trackbacks/105988.html</trackback:ping><description><![CDATA[
		<p style="MARGIN: 13pt 0cm">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="3">首先这个题目有点哗众取宠,呵呵,故意的.</font>
				</span>
		</p>
		<p style="MARGIN: 13pt 0cm">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="3">参考了网上许多前辈的见解,然后加了自己一点点的理解.如果有什么板砖,欢迎来拍 .<br /><br /></font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="5">简介</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="3">
						<span lang="EN-US">
								<font face="Times New Roman">Hibernate </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是当前最流行的</span>
						<span lang="EN-US">
								<font face="Times New Roman">O/R mapping</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架，当前版本是</span>
						<span lang="EN-US">
								<font face="Times New Roman">3.05</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。它出身于</span>
						<span lang="EN-US">
								<font face="Times New Roman">sf.net</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，现在已经成为</span>
						<span lang="EN-US">
								<font face="Times New Roman">Jboss</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一部分了</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">
								<font size="3">
										<p>
										</p>
								</font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="3">
						<span lang="EN-US">
								<font face="Times New Roman">iBATIS </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是另外一种优秀的</span>
						<span lang="EN-US">
								<font face="Times New Roman">O/R mapping</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架，当前版本是</span>
						<span lang="EN-US">
								<font face="Times New Roman">2.0</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。目前属于</span>
						<span lang="EN-US">
								<font face="Times New Roman">apache</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一个子项目了。</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">
								<font size="3">
										<p>
										</p>
								</font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="3">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相对</span>
						<span lang="EN-US">
								<font face="Times New Roman">Hibernate</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">“</span>
						<span lang="EN-US">
								<font face="Times New Roman">O/R</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”而言，</span>
						<span lang="EN-US">
								<font face="Times New Roman">iBATIS </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一种“</span>
						<span lang="EN-US">
								<font face="Times New Roman">Sql Mapping</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”的</span>
						<span lang="EN-US">
								<font face="Times New Roman">ORM</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现。</span>
						<span lang="EN-US">
								<font face="Times New Roman">
								</font>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">
								<font size="3">
										<p>
										</p>
								</font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="3">
						<span lang="EN-US">
								<font face="Times New Roman">Hibernate</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对数据库结构提供了较为完整的封装，</span>
						<span lang="EN-US">
								<font face="Times New Roman">Hibernate</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
						<span lang="EN-US">
								<font face="Times New Roman">O/R Mapping</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现了</span>
						<span lang="EN-US">
								<font face="Times New Roman">POJO </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和数据库表之间的映射，以及</span>
						<span lang="EN-US">
								<font face="Times New Roman">SQL </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的自动生成和执行。程序员往往只需定义好了</span>
						<span lang="EN-US">
								<font face="Times New Roman">POJO </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到数据库表的映射关系，即可通过</span>
						<span lang="EN-US">
								<font face="Times New Roman">Hibernate </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供的方法完成持久层操作。程序员甚至不需要对</span>
						<span lang="EN-US">
								<font face="Times New Roman">SQL </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的熟练掌握，</span>
						<span lang="EN-US">
								<font face="Times New Roman">Hibernate/OJB </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会根据制定的存储逻辑，自动生成对应的</span>
						<span lang="EN-US">
								<font face="Times New Roman">SQL </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并调用</span>
						<span lang="EN-US">
								<font face="Times New Roman">JDBC </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口加以执行。</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<font face="Times New Roman">
								<font size="3">
										<p>
										</p>
								</font>
						</font>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="3">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而</span>
						<span lang="EN-US">
								<font face="Times New Roman">iBATIS </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的着力点，则在于</span>
						<span lang="EN-US">
								<font face="Times New Roman">POJO </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span>
						<span lang="EN-US">
								<font face="Times New Roman">SQL</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之间的映射关系。也就是说，</span>
						<span lang="EN-US">
								<font face="Times New Roman">iBATIS</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并不会为程序员在运行期自动生成</span>
						<span lang="EN-US">
								<font face="Times New Roman">SQL </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行。具体的</span>
						<span lang="EN-US">
								<font face="Times New Roman">SQL </font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要程序员编写，然后通过映射配置文件，将</span>
						<span lang="EN-US">
								<font face="Times New Roman">SQL</font>
						</span>
						<span style="FONT-FAMILY: 