??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品一二三区,成人精品国产亚洲欧洲,亚洲综合激情视频http://m.tkk7.com/haogj/zh-cnMon, 12 May 2025 12:33:12 GMTMon, 12 May 2025 12:33:12 GMT60在Fedora 5中安装Vmware Toolshttp://m.tkk7.com/haogj/archive/2006/09/17/70110.htmlhaogjhaogjSun, 17 Sep 2006 01:43:00 GMThttp://m.tkk7.com/haogj/archive/2006/09/17/70110.htmlhttp://m.tkk7.com/haogj/comments/70110.htmlhttp://m.tkk7.com/haogj/archive/2006/09/17/70110.html#Feedback0http://m.tkk7.com/haogj/comments/commentRss/70110.htmlhttp://m.tkk7.com/haogj/services/trackbacks/70110.htmlhttp://blog.csdn.net/freewind88/archive/2006/07/17/931666.aspx

׃FC5是比较新的一个Linux版本Q现在FC6的Test1刚发布)Q所以VmwareQ我用的版本h5.5.1 build-19175Q写q篇文章时是最新的版本Q还没有直接支持FC5的Vmware Tools安装。ؓ了正安装Fedora和Vmware ToolsQ我在里面缠了几天的旉Q有时的比较郁闗现在把几个关键Ҏȝ一下,方便后来人参照?br />1.安装FC5旉择Linux版本h选Red Hat Enterprise Linux 4Q如果选择其它版本可能会造成FC安装文g找不到硬盘,q是׃Vmware默认推荐使用虚拟SCSI盘Q而其它版本Linux配置没有为SCSI盘讄驱动。解x法非常简单,只要在安装过E提C添加设备时选择dBuslogicp了。个人感觉还是用自定义配置向导比较好,很多地方都可以自p整设|?br />2.安装Vmware Tools需要的一些必要Y件?br />安装~译工具Qyum -y install gcc gcc-c++ kernel-devel
更新kernelQyum -y update kernel
查:rpm -qa | grep kernel
更新完后重启一下,使更新生效?br />之所以要下蝲更新q么多东西是因ؓFC5有个很奇怪的现象Q在安装时我已经N了全部开发工P但是后期它还是会提示找不到匹配你内核的C头文件。提C如下。估计大多数人都是卡在这Q看见这句话肯定已经很窝火了
What is the location of the directory of C header files that match your running kernel? [/usr/src/linux/include]
The path "/usr/src/linux/include" is not an existing directory.
整个下蝲q程非常慢,可能是由于我是宽带且q到国外服务器下载,更新完大概耗去了我一个白天的旉。可以通过yum的配|文Ӟ讄镜象服务器来改进下蝲速度Q具体方法就要各位自׃|查了,偶不?
3.安装Vmware ToolsQ此时会被卡在上面所说的~少头文件的那一步,不用它QCtrl+C中断安装?br />4.?a >http://ftp.cvut.cz/vmware/下蝲更新
我下载时最新的补丁是vmware-any-any-update101.tar.gz?br />解压~然后执行:./runme.pl
接着一路照默认讄安装下去ok了?br />Vmware Tools安装完成Q终于可以看见共享文件夹了。其实安装Vmware Tools一斚w是ؓ了改善显C,但在FC5中倒好像也无所谓,因ؓ它在虚拟机里直接p调到1024的分辨率Q显C正常,不如前面的几个版本,在我机子上只要分辨率调高昄׃正常Q会自动切换回来。另一斚w主要q是Z要那个共享文件夹Q这样和Windows交换文g时就方便了?

BTWQ本文参考了|上的诸多文献,对作者们表示感谢



haogj 2006-09-17 09:43 发表评论
]]>
VMware, Fedora 5 安装问题http://m.tkk7.com/haogj/archive/2006/09/17/70109.htmlhaogjhaogjSun, 17 Sep 2006 01:34:00 GMThttp://m.tkk7.com/haogj/archive/2006/09/17/70109.htmlhttp://m.tkk7.com/haogj/comments/70109.htmlhttp://m.tkk7.com/haogj/archive/2006/09/17/70109.html#Feedback1http://m.tkk7.com/haogj/comments/commentRss/70109.htmlhttp://m.tkk7.com/haogj/services/trackbacks/70109.html
http://www.5ang1ou.com/2006/03/26/vmware-fedora-5/
11:56 pm on Sunday, March 26, 2006

早些没赶上Fedora 5的发布,今天特地下蝲下来玩玩Q整个DVD?.5GQ专门去学校׃半个时拖了下来Q再从工作那头窃取一张光刻录。回来后立马开动Vmware来安装。傻瓜界面,完全囄提示Q本想着可以利收工。结果搜索完g后突然提C盘找不刎ͼl了两个选项Q一手动安装Q一跌l箋。心想估计Vmware的驱动没装,不是什么大问题Q就选了跌l箋。结果到最后还是提C碟找不刎ͼ然后重启了。郁P再来Q这ơ选个手动安装Q进入列表后却死都找不到驱动的驱动。瞎撞了一器ؕ装了一通,最后到了安装画面又被弹了回来。心惌厮咋那变态乜Q决定上|一探究竟。去U帽的主|伏了半天Q终于发C条线索,说是Fedora 5开始就不支持Bus Logic了,改ؓ仅支持Lsi Logic。突焉茅塞开Q恍然大悟,原来如此Q回到Vmware里面Q以自定义的方式选了Lsi Logic作ؓ盘模式Q重启一试,嘿,通过了,赞啊。至于这两种logic之间有虾c不同,偶就不去q究了,q些玩意q是留给高h来探讨比较合适,偶这U底层用户只要能用就满咯。七装八凑的l于把Fedora 5装好了,是完全赤裸安装Q上面除了KDE啥都没有。设|好Yum后就开始遥遥无期的更新中,现在q在盯着那个咪表看。感觉上Fedora 5跑得?要慢写,我几乎所有的服务都屏蔽了Q还是感觉处理的旉要长写,也许是偶选了i386而不是X86_64的缘故?



vmtools 的问?br />http://www.5ang1ou.com/2006/03/27/vmware-tool/


l箋昨天的奋斗,今天装完 Fedora 5 后准备装 Vmware Tool 的时候又出现问题。Vmware Toolq个东西֐思义地就是ؓ了Vmwareq个软g才存在地Q有了它你的linux可以设定显C大,内存优化和其他鼠标键盘等优化讄。不?Vmware Tool 的话鼠标׃被锁定在Vmware E序里面Q要切换出来非常ȝQ装了以后只要移到边上就自己弹出来了Q回M一PUd边上p己弹q去了。也许是 Fedora 5 太新的缘故,Vmware Tool L都装不进厅R一开始说找不?kernel 的源文gQ安装了以后又说文g版本不对受去 Vmware 的官方讨教,发现有问题的不止偶一个,几乎所有装?Fedora 5 的都见了。随后发C达h发了一解决办法的帖子,时敬ԒhQ然后马上进去顶一个顺便留名。他用了个第三方补丁脚本Q让 Vmware Tool 的检程序通过版本侦测。这个程序在q里可以下到Q解压后需要对 runme.pl 脚本q行修改Q然后运行,q行完毕以后再来q行 Vmware Tool 的设定安装程序就可以了?/p>

一切都蛮顺利的Q可是编译到最后出?“No X Install Found?的错误,q下q显C大都没得选了。l找人求救,l于有好心h指了条\。原?Fedora 5 用了 X7版本Q而Vmware Tool 不到这个,所以认为没有X。解x法当焉了修改脚本没其他办法咯。要修改的地Ҏ多,也ؕ的很Q都?vmware-config-tools.pl 里面。好在偶很幸q,一ơ过通过~译Q成功检到 X7Q也利地更改了昄大小。今天特此留下此贴给自己以后查̎用,下面l出了需要修改的两个文g下蝲Q覆盖运行就可以了。爽?/p>

[ runme.pl ] [ vmware-config-tools.pl ]



haogj 2006-09-17 09:34 发表评论
]]>
利用JSP 2.0开发Web应用E序http://m.tkk7.com/haogj/archive/2006/07/06/57046.htmlhaogjhaogjThu, 06 Jul 2006 14:44:00 GMThttp://m.tkk7.com/haogj/archive/2006/07/06/57046.htmlhttp://m.tkk7.com/haogj/comments/57046.htmlhttp://m.tkk7.com/haogj/archive/2006/07/06/57046.html#Feedback0http://m.tkk7.com/haogj/comments/commentRss/57046.htmlhttp://m.tkk7.com/haogj/services/trackbacks/57046.htmlhttp://www.phome.net/document/java/200504/java111245789013746.html

haogj 2006-07-06 22:44 发表评论
]]>
使用 Java 生成 MD5 ~码http://m.tkk7.com/haogj/archive/2006/07/04/56604.htmlhaogjhaogjTue, 04 Jul 2006 14:25:00 GMThttp://m.tkk7.com/haogj/archive/2006/07/04/56604.htmlhttp://m.tkk7.com/haogj/comments/56604.htmlhttp://m.tkk7.com/haogj/archive/2006/07/04/56604.html#Feedback10http://m.tkk7.com/haogj/comments/commentRss/56604.htmlhttp://m.tkk7.com/haogj/services/trackbacks/56604.html    MD5即Message-Digest Algorithm 5Q信?摘要法5Q,是一U用于生数字签名的单项散列法Q在1991q由MIT Laboratory for Computer ScienceQIT计算机科学实验室Q和RSA Data Security IncQRSA数据安全公司Q的Ronald L. Rivest教授开发出来,l由MD2、MD3和MD4发展而来。MD5法的用不需要支付Q何版权费用。它的作用是让大定w信息在用数字{֐软g{人密匙前?压羃"成一U保密的格式Q将一个Q意长度的“字节串”通过一个不可逆的字符串变换算法变换成一?28bit的大整数Q换句话说就是,即你看到源E序和算法描qͼ也无法将一个MD5的值变换回原始的字W串Q从数学原理上说Q是因ؓ原始的字W串有无I多个,q有点象不存在反函数的数学函数。)
   
   ?Java 中,java.security.MessageDigest 中已l定义了 MD5 的计,所以我们只需要简单地调用卛_得到 MD5 ?28 位整数。然后将?128 位计 16 个字节{换成 16 q制表示卛_?br />
    代码如下Q?br />

package com.tsinghua;

/**
 * MD5的算法在RFC1321 中定?br /> * 在RFC 1321中,l出了Test suite用来验你的实现是否正:
 * MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
 * MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
 * MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
 * MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
 * MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
 *
 * @author haogj
 *
 * 传入参数Q一个字节数l?br /> * 传出参数Q字节数l的 MD5 l果字符?br /> */
public class MD5 {
 public static String getMD5(byte[] source) {
  String s = null;
  char hexDigits[] = {       // 用来字节{换成 16 q制表示的字W?br />     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',  'e', 'f'};
   try
   {
    java.security.MessageDigest md = java.security.MessageDigest.getInstance( "MD5" );
    md.update( source );
    byte tmp[] = md.digest();          // MD5 的计结果是一?128 位的长整敎ͼ
                                                // 用字节表C就?16 个字?br />    char str[] = new char[16 * 2];   // 每个字节?16 q制表示的话Q用两个字W,
                                                 // 所以表C成 16 q制需?32 个字W?br />    int k = 0;                                // 表示转换l果中对应的字符位置
    for (int i = 0; i < 16; i++) {          // 从第一个字节开始,?MD5 的每一个字?br />                                                 // 转换?16 q制字符的{?br />     byte byte0 = tmp[i];                 // 取第 i 个字?br />     str[k++] = hexDigits[byte0 >>> 4 & 0xf];  // 取字节中?4 位的数字转换, 
                                                             // >>> 为逻辑右移Q将W号位一起右U?br />     str[k++] = hexDigits[byte0 & 0xf];            // 取字节中?4 位的数字转换
    }
    s = new String(str);                                 // 换后的结果{换ؓ字符?/p>

   }catch( Exception e )
   {
    e.printStackTrace();
   }
   return s;
 }
}


    试代码如下Q?br />

import com.tsinghua.*;

public class TestMD5
{
 public static void main( String xu[] )
 { // 计算 "a" ?MD5 代码Q应该ؓQ?cc175b9c0f1b6a831c399e269772661
  System.out.println( MD5.getMD5("a".getBytes()) );
 }
}


 



haogj 2006-07-04 22:25 发表评论
]]>
d解决 Tomcat 5 下文字ؕ码问?/title><link>http://m.tkk7.com/haogj/archive/2006/06/25/55017.html</link><dc:creator>haogj</dc:creator><author>haogj</author><pubDate>Sun, 25 Jun 2006 14:04:00 GMT</pubDate><guid>http://m.tkk7.com/haogj/archive/2006/06/25/55017.html</guid><wfw:comment>http://m.tkk7.com/haogj/comments/55017.html</wfw:comment><comments>http://m.tkk7.com/haogj/archive/2006/06/25/55017.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/haogj/comments/commentRss/55017.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/haogj/services/trackbacks/55017.html</trackback:ping><description><![CDATA[<P>使用 tomcat Ӟ怿大家都回遇到中文q的问题,具体表现为通过表单取得的中文数据ؓq?BR><BR><STRONG>一、初U解x?/STRONG><BR><BR>通过一番检索后Q许多h采用了如下办法,首先对取得字W串按照 iso8859-1 q行解码转换Q然后再按照 gb2312 q行~码Q最后得到正的内容。示例代码如下:<BR><BR>String  para = new String( request.getParameter("para").getBytes("iso8859-1"), "gb2312");<BR><BR>具体的原因是因ؓ国人在?tomcat 旉认?iso8859-1 q行~码造成的?BR><BR> 然而,在我们的 servlet ?jsp 面中有大量的参数需要进行传递,q样转换的话会带来大量的转换代码Q非怸ѝ?BR><BR><STRONG>二、入门解决Ҏ<BR></STRONG><BR>后来Q大家开始写一个过滤器Q在取得客户端传q来的参C前,通过qo器首先将取得的参数编码设定ؓ gb2312 Q然后就可以直接使用 getParameter 取得正确的参C。这个过滤器?tomcat 的示例代?<BR>jsp-examples 中有详细的用示?   其中qo器在 web.xml 中的讑֮如下Q示例中使用的是日文的编码,我们只要修改?gb2312 卛_<BR><BR>    <filter><BR>        <filter-name>Set Character Encoding</filter-name><BR>        <filter-class>filters.SetCharacterEncodingFilter</filter-class><BR>        <init-param><BR>            <param-name>encoding</param-name><BR>            <param-value><FONT style="BACKGROUND-COLOR: #ff0000">EUC_JP</FONT></param-value><BR>        </init-param><BR>    </filter><BR><BR>qo器的代码如下Q?BR>public class SetCharacterEncodingFilter implements Filter {</P> <P>    // ~码的字W串<BR>    protected String encoding = null;</P> <P>   // qo器的配置<BR>    protected FilterConfig filterConfig = null;</P> <P>   // 是否忽略客户端的~码<BR>    protected boolean ignore = true;</P> <P>   // 销毁过滤器<BR>    public void destroy() {</P> <P>        this.encoding = null;<BR>        this.filterConfig = null;</P> <P>    }</P> <P>   // qoҎ<BR>    public void doFilter(ServletRequest request, ServletResponse response,<BR>                         FilterChain chain)<BR>          throws IOException, ServletException {</P> <P>        // 如果使用qo器,忽略客户端的~码Q那么用通过qo器设定编?BR>        if (ignore || (request.getCharacterEncoding() == null)) {<BR>            String encoding = selectEncoding(request);<BR>            if (encoding != null)<BR>                request.setCharacterEncoding(encoding);<BR>        }</P> <P>        // 传送给下一个过滤器<BR>        chain.doFilter(request, response);</P> <P>    }</P> <P><BR>    // 初始化过滤器<BR>    public void init(FilterConfig filterConfig) throws ServletException {</P> <P>        this.filterConfig = filterConfig;<BR>        this.encoding = filterConfig.getInitParameter("encoding");<BR>        String value = filterConfig.getInitParameter("ignore");<BR>        if (value == null)<BR>            this.ignore = true;<BR>        else if (value.equalsIgnoreCase("true"))<BR>            this.ignore = true;<BR>        else if (value.equalsIgnoreCase("yes"))<BR>            this.ignore = true;<BR>        else<BR>            this.ignore = false;</P> <P>    }</P> <P>    // q回qo器设定的~码<BR>    protected String selectEncoding(ServletRequest request) {</P> <P>        return (this.encoding);</P> <P>    }<BR>}<BR><BR>然而在 tomcat5 中,即使用qo器,仍然可能取得qQ原因何在呢Q?BR><BR><STRONG>三、高U解x?/STRONG><BR><BR>q是因ؓQ?FONT face="Courier New">?tomcat4 ?tomcat5 中对参数的处理是不一LQ在 tomcat4 ?get ?post 的编码是一LQ所以只要在qo器中通过 request.setCharacterEncoding 讑֮一ơ就可以解决 get ?post 的问题。然而,?tomcat5 中,get ?post 的处理是分开q行?/FONT><BR><BR>?tomcat 5 中,Z解决~码问题Qtomcat 的作者作了很多努力,具体表现为在 tomcat 的配|文?server.xml 中对 Connector 元素增加了如下的配置参数Q专门用来对~码q行直接的配|?BR><BR><FONT face="Courier New"><EM><FONT style="BACKGROUND-COLOR: #ffa500">URIEncoding</FONT></EM>   用来讑֮通过 URI 传递的内容使用的编码,tomcat 用这里指定的~码对客L传送的内容q行~码?BR><BR>什么是 URI 呢?<BR>java doc 的说明中如下说明QURI 是统一资源<I>标识W?/I>Q?URL 是统一资源<I>定位W?/I>。因此,W统地说Q每?URL 都是 URIQ但不一定每?URI 都是 URL。这是因?URI q包括一个子c,即统一资源<I>名称</I> (URN)Q它命名资源但不指定如何定位资源?BR><BR>也就是说Q?FONT style="BACKGROUND-COLOR: #ffff00">我们通过 get Ҏ提交的参数实际上都是通过 uri 提交的,都由q个参数理</FONT>Q如果没有设定这个参敎ͼ?tomcat 用默认的 iso8859-1 对客L的内容进行编码?BR><BR><FONT style="BACKGROUND-COLOR: #ffa500">useBodyEncodingForURI</FONT> 使用?Body 一L~码来处?URI, q个讑֮是ؓ了与 tomcat4保持兼容Q原来在 tomcat4 ?tomcat5 中队参数的处理是不一LQ在 tomcat4 ?get ?post 的编码是一LQ所以只要在qo器中通过 request.setCharacterEncoding 讑֮一ơ就可以解决 get ?post 的问题。然而,?tomcat5 中,get ?post 的处理是分开q行的,?get 的处理通过 前面?URIEncoding q行处理Q对 post 的内容依焉过 request.setCharacterEncoding 处理Qؓ了保持兼容,有了这个设定?BR><BR><FONT style="BACKGROUND-COLOR: #ffff00">?useBodyEncodingForURI 讑֮为真后,可以通过 request.setCharacterEncoding 直接解决 get ?post 中的q问题</FONT>?BR><BR>q样Q我们可以通过?server.xml 中设?URIEncoding 来解?get Ҏ中的参数问题Q用过滤器来解?post Ҏ中的问题?BR><BR>或者也可以通过?server.xml 中设?useBodyEncodingForURI ?true Q配合过滤器来解决编码的问题?BR><BR>在这里,我强烈徏议在|站的创作过E中Q全E?utf-8 ~码来彻底解决ؕ码问题?BR><BR>具体操作如下Q?BR><FONT color=#008000>1、页面内容?utf-8 格式保存Q在面中加?<mete http-equiv="contentType" content="text/html;charst=utf-8"><BR><BR>2、服务器端的 server.xml 中设?useBodyEncodingForURI = true<BR><BR>3、用过滤器Q过滤器讑֮~码?utf-8</FONT><BR><BR><BR></FONT><BR></P><img src ="http://m.tkk7.com/haogj/aggbug/55017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/haogj/" target="_blank">haogj</a> 2006-06-25 22:04 <a href="http://m.tkk7.com/haogj/archive/2006/06/25/55017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>癑ֺ之星E序设计大赛初题?/title><link>http://m.tkk7.com/haogj/archive/2006/06/05/50606.html</link><dc:creator>haogj</dc:creator><author>haogj</author><pubDate>Mon, 05 Jun 2006 15:02:00 GMT</pubDate><guid>http://m.tkk7.com/haogj/archive/2006/06/05/50606.html</guid><wfw:comment>http://m.tkk7.com/haogj/comments/50606.html</wfw:comment><comments>http://m.tkk7.com/haogj/archive/2006/06/05/50606.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/haogj/comments/commentRss/50606.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/haogj/services/trackbacks/50606.html</trackback:ping><description><![CDATA[<P>1.癑ֺ语言译?<BR>癑ֺ的工E师们是非常注重效率的,在长期的开发与试q程中,他们逐渐创造了一套独特的~略语。他们在qx的交谈、会议,甚至在各U技术文档中都会大量q用?/P> <P>Z让新员工可以更快地适应癑ֺ的文化,更好地阅d司的技术文档,人力资源部决定开发一套专用的译pȝQ把相关文档中的~略语和专有名词译成日常语a?/P> <P>输入要求Q?BR>输入数据包含三部分:<BR>1. W一行包含一个整数N(N<=10000)Q表Cd有多个~略语的词条Q?BR>2. 紧接着有N行的输入Q每行包含两个字W串Q以I格隔开。第一个字W串为羃略语Q仅包含大写英文字符Q长度不过10字节Q,W二个字W串为日常语aQ不包含I格Q长度不过255字节Q;<BR>3. 从第N+2开始到输入l束为包含羃略语的相x档(总长度不过1000000个字节)。例Q?BR>6<BR>PS 门户搜烦?BR>NLP 自然语言处理<BR>PM 产品市场?BR>HR 人力资源?BR>PMD 产品推广?BR>MD 市场发展?BR>癑ֺ的部门包括PSQPMQHRQPMDQMD{等Q其中PSq包括NLP组?BR>样例Qin.txt </P> <P>输出要求Q?BR>输出羃略语转换成日常语a后的文档。(羃略语转换成日常语aQ其他字W保留原P。例Q?BR>癑ֺ的部门包括门h索部Q品市场部Qh力资源部Q品推qKQ市场发展部{等Q其中门h索部q包括自然语a处理组?BR>样例Qout.txt </P> <P>2.饭团的烦?<BR>“午饭团”是癑ֺ内部参与人数最多的民间l织?BR>同一个部门的、同一所大学的、同一q出生的、用同一U型L脑的员工们L以各U理ql各U长期的、时的饭团?/P> <P><BR>参加饭团Q不仅可以以优惠的h格尝到更加丰富的菜式Q还可以在吃饭的时候和同事们增q感情?BR>但是Q随着癑ֺ的员工越来越多,各个饭团的管理变得繁杂v来。特别是Z照顾员工们越来越挑剔的胃Q饭团的点菜负责人的压力也越来越大。现在,q个d׃l“百度之星”了Q因为,你将要ؓ所有的癑ֺ饭团设计一个自动点菜的法?/P> <P><BR>饭团点菜的需求如下:<BR>1Q经是我们要考虑的一个因素,既要充分利用癑ֺ员工的午补助,又不能铺张浪贏V因此,我们希望最后的人均费用接q?2元越好?BR>2Q菜式丰富是我们要考虑的另一个因素。ؓ单v见,我们各U菜肴的属性归lؓ荤菜Q素菜,辛GQ清淡,q且每个菜只能点一ơ?BR>3Q请谨记Q百度饭团在各大馆享受8折优惠?/P> <P><BR>输入要求Q?BR>1Q输入数据第一行包含三个整数NQMQK(0<N<=16Q?<M<=NQ?<K<=12)Q分别表C单上菜的数目Q饭团需要点的菜的数目,餐的h敎ͼ<BR>2Q紧接着N行,每行的格式如下:<BR>菜名Q长度不过20个字W) hQ原P整数Q?是否荤菜Q?表示是,0表示否) 是否辛GQ?表示是,0表示否)Q?BR>3Q第N+2行是 a b c d 四个整数Q分别表C需要点的荤菜,素菜Q辛辣,清E菜的数目。例Q?BR>3 2 2<BR>水煮?30 1 1<BR>口水?18 1 1<BR>清炖豆腐 12 0 0<BR>1 1 1 1<BR>样例Qin.txt</P> <P><BR>输出要求Q?BR>对于每组试数据Q输出数据包含M+1行,前M行每行包含一个菜名(按菜名在原菜单的序排序Q。第M+1行是人均消费Q结果保留两位小数。例Q?BR>口水?BR>清炖豆腐<BR>12.00<BR>样例Qout.txt <BR><BR>3.变态比赛规?<BR>Z促进各部门员工的交流Q百度D办了一场全公司范围内的“拳皇”(癑ֺ内部最行的格斗游戏)友谊赛,负责l织q场比赛的是癑ֺ的超U“拳皇”迷W.Z。W.Z不想用传l的淘汰赛或者@环赛的方式,而是自己制定了一个比赛规则?/P> <P><BR>׃一些员工(比如同部门或者相邻部门员工)qx接触的机会比较多Qؓ了促q不同部门之间的交流QW.Z希望员工自由分组。不同组之间的每两个人都会进行一场友谊赛而同一l内的h之间不会打Q何比赛?/P> <P><BR>比如4个hQ编号ؓ1~4,如果分ؓ两个lƈ?Q?一个组Q?Q?一个组Q那么一共需要打四场比赛Q? vs 3Q? vs 4Q? vs 3Q? vs 4?而如果是1Q?Q?一l,4单独一l,那么一共需要打三场比赛: 1 vs 4Q? vs 4Q? vs 4?/P> <P><BR>很快W.Z意识刎ͼq样的比赛规则可能会让比赛的场数非常多。W.Z想知道如果有N个hQ通过上面q种比赛规则QL赛场数有可能为K场吗Q比?个hQ如果只分到一l则不需要比赛,如果分到两组则需?场比赛,如果分ؓ三组则需?场比赛。但是无论怎么分都不可能恰需?场比赛?/P> <P><BR>怿作ؓ~程高手的你一定知道该怎么回答q个问题了吧Q?那么现在请你帮助W.Z吧?/P> <P><BR>输入要求Q?BR>每行Zl数据,包含两个数字 N, K(0<N<=500, K>=0)。例Q?BR>2 0<BR>2 1<BR>3 1<BR>3 2<BR>样例Qin.txt</P> <P><BR>输出要求Q?BR>对输入的N,K 如果N个员工通过一定的分组方式可以使比赛场数恰好ؓKQ则输出"YES"Q否则输?NO"Q请全部使用大写字母Q,每组数据占一行。例Q?BR>YES<BR>YES<BR>NO<BR>YES<BR>样例Qout.txt</P> <P><BR>4.蝈蝈计分 <BR>蝈蝈朋友刚刚学会了0~9q十个数?也跟爸爸妈妈来参加百度每周进行的毛球活动。但是他q没有球拍高Q于是大Z叫他记录分数。聪明的蝈蝈发现只要记录q箋得分的情况就可以了,比如用? 2 4”可以表CZ方在q一局中连得三分后Q输了两分,接着又连得到四分。可是,后来大h们发现蝈蝈只会用0~9q十个数字,所以当比赛选手得分过9的时候,他会用一个X来表C?0完成记分。但问题是,当记录ؓ“X 3 5”的时候,蝈蝈自己也记不v来是一方连l得到十三分后,再输五分Q还是先赢十分输三分再赢五分?</P> <P>因ؓ癑ֺ内部p开始进行羽毛球联赛了,要先摸清大家的实力才好分l比赛呢~于是,大h们想知道以前每局的比分是怎样的,以及谁获得了胜利。要是遇CҎ比赛记录无法认比赛q程的情况,也要输出相应的提C哦?</P> <P>需要进一步说明的是,比赛是五局三胜的,每局先获得二十一分的Q但是胜方必领先对手两分或以上Q否则必ȝl比赛直C方超出对手两分ؓ止,比分多的一方获胜。Q何一方先莯三局后就获得最l胜利,比赛也相应的l束。而且蝈蝈保证是完整的无多余信息的记录了比赛?</P> <P>输入要求Q?BR>1Q文件中W一行只有一个整数MQ表C蝈记录了多少场比赛的分数Q?BR>2Q在接下来的2M行里Q每场比赛用两行记录Q第一行是一个整数N(N<=1000)表示当前q个记录中有多少个字W,W二行就是具体的N个字W表C录的分数Q相dW用I格隔开Q。例Q?BR>3<BR>23<BR>9 7 3 6 2 4 7 8 3 2 7 9 X 2 2 1 2 1 X 1 X 1 1<BR>25<BR>9 3 8 5 4 8 3 9 8 4 X X X X 2 X X X X 2 8 4 9 2 4<BR>43<BR>7 7 7 7 7 3 4 5 6 7 6 5 4 2 1 3 5 7 9 7 5 3 1 3 0 9 9 3 9 3 2 1 1 1 5 1 5 1 5 1 5 5 1<BR>样例Qin.txt</P> <P><BR>输出要求Q?BR>对应每一个分数记录,输出相应的每局分数Q每局分数都用两个整数表C,表示两个选手的得分,中间?:"分隔开Q每l分数记录间使用一个空行分隔开。如果相应的比赛l果无法预测Q以“UNKNOWN”一个单词独占一行表C(请全部用大写字母)。例Q?BR>21:17<BR>24:22<BR>21:3</P> <P>UNKNOWN</P> <P>21:14<BR>20:22<BR>21:23<BR>21:16<BR>21:9<BR>样例Qout.txt<BR><BR>5.座位调整 <BR>癑ֺ办公区里到处摆放着各种各样的零食。百度h力资源部的调研发玎ͼ员工如果可以在自己喜Ƣ的食旁边工作Q效率会大大提高。因此,癑ֺ军_q行一ơ员工位的大调整?/P> <P>调整的方法如下:<BR>1Q首先将办公区按照各U零食的摆放分成N个不同的区域Q例如:可乐区,饼干区,牛奶区等{)Q?BR>2Q每个员工对不同的零食区域有不同的喜好程度(喜好E度?~100的整敎ͼ 喜好E度大表示该员工越希望被调整到相应的零食区域)Q?BR>3Q由于每个零食区域可以容U的员工数量有限Qh力资源部希望扑ֈ一个最优的调整Ҏ使得ȝ喜好E度最大?/P> <P><BR>输入要求Q?BR>文gW一行包含两个整数NQM(N>=1QM<=300)。分别表CN个区域和M个员工;<BR>W二行是N个整数构成的数列aQ其中a[i]表示Wi个区域可以容U的员工?1<=a[i]<=MQa[1]+a[2]+...+a[N]=M)Q?BR>紧接着是一个M*N的矩阵PQP(i,j)表示Wi个员工对Wj个区域的喜好E度。例Q?BR>3 3<BR>1 1 1<BR>100 50 25<BR>100 50 25<BR>100 50 25<BR>样例Qin.txt</P> <P><BR>输出要求Q?BR>对于每个试数据Q输出可以达到的最大的喜好E度。例Q?BR>175<BR>样例Qout.txt</P> <P><BR>6.剪刀矛_?<BR>N个小孩正在和你玩一U剪刀矛_布游戏(剪刀赢布Q布赢石_矛_赢剪刀Q。N个小孩中有一个是裁判Q其余小孩分成三l(不排除某些组没有M成员的可能性)Q但是你不知道谁是裁判,也不知道孩们的分组情况。然后,孩们开始玩剪刀矛_布游戏,一qMơ,每次L选择两个孩q行一轮,你会被告知结果,即两个小孩的胜负情况Q然而你不会得知孩具体出的是剪刀、石头还是布。已知各l的孩分别只会ZU手势(因而同一l的两个孩M是和局Q,而裁判则每次都会随便选择ZU手势,因此没有Z知道裁判到底会出什么。请你在Mơ剪刀矛_布游戏结束后Q猜猜谁是裁判。如果你能猜是裁判,误明最早在W几ơ游戏结束后你就能够定谁是裁判?/P> <P>输入要求Q?BR>输入文g包含多组试数据Q每l测试数据第一行ؓ两个整数N和M(1<=N<=500Q?<M<=2000)Q分别ؓ孩的个数和剪刀矛_布游戏进行的ơ数。接下来M行,每行两个整数且中间以一个符号隔开。两个整数分别ؓq行游戏的两个小孩各自的~号Qؓ于N的非负整敎ͼ。符L可能gؓ?”、?gt;”和?lt;”,分别表示和局、第一个小孩胜和第二个孩胜三U情c例Q?BR>3 3<BR>0<1<BR>1<2<BR>2<0<BR>3 5<BR>0<1<BR>0>1<BR>1<2<BR>1>2<BR>0<2<BR>4 4<BR>0<1<BR>0>1<BR>2<3<BR>2>3<BR>1 0<BR>样例Qin.txt</P> <P><BR>输出要求Q?BR>1Q每l测试数据输Z行,若能猜出谁是裁判Q则输出裁判的编Pq输出在W几ơ游戏结束后p够确定谁是裁判,孩的编号和游戏ơ数以一个空格隔开Q?BR>2Q如果无法确定谁是裁判,输出-2Q如果发现剪刀矛_布游戏的胜负情况不合理(x是裁判都会出现矛盾)Q则输出-1。例Q?BR>-2<BR>1 4<BR>-1<BR>0 0<BR>样例Qout.txt<BR></P><img src ="http://m.tkk7.com/haogj/aggbug/50606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/haogj/" target="_blank">haogj</a> 2006-06-05 23:02 <a href="http://m.tkk7.com/haogj/archive/2006/06/05/50606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配制 eclipse 3.1 使用中文 JavaAPI http://m.tkk7.com/haogj/archive/2006/06/04/50373.htmlhaogjhaogjSun, 04 Jun 2006 15:42:00 GMThttp://m.tkk7.com/haogj/archive/2006/06/04/50373.htmlhttp://m.tkk7.com/haogj/comments/50373.htmlhttp://m.tkk7.com/haogj/archive/2006/06/04/50373.html#Feedback5http://m.tkk7.com/haogj/comments/commentRss/50373.htmlhttp://m.tkk7.com/haogj/services/trackbacks/50373.htmlSun 官方的中文版 Java API 文档发布了,地址为:http://gceclub.sun.com.cn/download/Java_Docs/html_zh_CN.zip, 下蝲后请参考如下步骤配?eclipse3.1 使用

1. 点击菜单 <H口> - > <讑֮>
2. 点击左边目列表中的 <Java> ->  <已安装的 JRE>
3. 选中你已l安装好?JRE5.0 Q单d边的~辑
4. 点击对话框下边的库列表中?font color="#ff0000"> rt.jar 左边的加??”,展开 rt.jar 的配|?/font>
5. 选中W二,JavaDoc Location Q?font color="#ff0000">单击双的编?/font>Q如果右边的~辑是灰色的Q将库列表上边的“用默认的pȝ库?(use default system libraries) 的复选框取消选择?br />6. 在弹出的对象框中Q上Ҏ使用解压后的文g来进行帮助,下面使用未解压的压羃包帮助?br />7. 我们使用未解压的压羃包,选择下面?javaDoc in Archive.
8. 需要输入两个内容,一个是压羃包所在的位置 (Archive Path ), 可以选择双的浏览选择Q第二个?font color="#ff0000">压羃包里面的路径 ( Paht within Archive)Q?/font>也可以用右边的览q行选择Q一直到 api 文g?/font>为止。完成后Q在览的下面有一?font color="#ff0000">验的按钮 (validate) 可以q行查?br />9. 完成后,定关闭?br />
现在Q在 Java ~辑器中选中一个系l的ҎQ按 F1 卛_在帮助窗口中看到对应?JavaDoc 的帮助入口,点击后,可以直接看到对应的 JavaAPI ?Doc 了?br />





haogj 2006-06-04 23:42 发表评论
]]>
详细介绍在tomcat中配|数据源以及数据源的原理 http://m.tkk7.com/haogj/archive/2006/04/24/42893.htmlhaogjhaogjMon, 24 Apr 2006 13:21:00 GMThttp://m.tkk7.com/haogj/archive/2006/04/24/42893.htmlhttp://m.tkk7.com/haogj/comments/42893.htmlhttp://m.tkk7.com/haogj/archive/2006/04/24/42893.html#Feedback3http://m.tkk7.com/haogj/comments/commentRss/42893.htmlhttp://m.tkk7.com/haogj/services/trackbacks/42893.html
作?baggio785
日期Q?006-4-24
关键词:DataSource(数据?,Tomcat ,q接?/font>

前言


本文Ҏ实例详细介绍了如何在tomcat中配|数据源。网上此cL章很多,但是基本都是雷同的,而且对一些特D问题以及原理ƈ未详l阐qͼ所以想Ҏ自己的实际经验,q结合例子写一详l的文章?/font>
本文是偶的一些拙见,有不正确的地方请大家多多评论指正 ?/font>

开发环?/strong>

本文的环境:JDK1.4.2QTOMCAT5.0.28QOracle9i

JDBC?/font>

提到数据源,那就不能不说JDBC?span style="FONT-SIZE: 12pt">JDBC?/span>Java Database Connectivity的羃写。在java.sql包中提供?/span>JDBC APIQ定义了讉K数据库的接口和类。但?/span>JDBC API不能直接讉K数据库,必须依赖于数据库厂商提供?/span>JDBC驱动E序Q即JDBC DRIVER?/span>
Java.sql 中常用的接口和类如下Q?/span>
       Driver 接口?/span> DriverManager c?/span>
       Connection
       Statement
       PreparedSataement

       ResultSet

 

1     Driver 接口?/span> DriverManager c?/span>
       DriverManager
cȝ来徏立和数据库的q接以及理 JDBC 驱动E序Q常用方法如下:
Ҏ 描述
registerDriver(Driver driver) ?/span> DriverManager 中注?/span> JDBC 驱动E序
getConnection(String url,String user,String pwd) 建立和数据库的连接,q回 Connection 对象
setLoginTimeOut(int seconds) 讑֮{待数据库连接的最长时?/span>
setLogWriter(PrintWriter out) 讑֮输入数据库日至的 PrintWriter 对象
2     Connection
       Connection
代表和数据库的连接,其常用方法如下:
Ҏ 描述
getMetaData() q回数据库的 MetaData 数据?/span> MetaData 数据包含了数据库的相关信息,例如当前数据库连接的用户名、用的 JDBC 驱动E序、数据库允许的最大连接数、数据库的版本等{?/span>
createStatement() 创徏q返?/span> Statement 对象
PrepareStatement(String sql) 创徏q返?/span> prepareStatement 对象
3      Statement
       Statement
用来执行静?/span> sql 语句。例如,对于 insert ?/span> update ?/span> delete 语句Q调?/span> executeUpdate(String sql) ҎQ?/span> select 语句可以调用 executeQuery(String sql) ҎQ?/span> executeQuery(String sql) Ҏq回 ResultSet 对象?/span>
4      PrepareStatement
   PrepareStatement
用于执行动态的 sql 语句Q即允许 sql 语句中包含参数。用方法ؓQ?/span>
   String sql = “select col1 from tablename where col2=? And col3=??
   PrepareStatement perpStmt = conn.preparestatement(sql);
   perpStmt.setstring(1,col2Value);
      perpStmt.setFloat(2,col3Value);
      ResultSet rs = perpStmt.executeQuery();
5      ResultSet
ResultSet
用来表示 select 语句查询得到的记录集Q一?/span> StateMent 对象在同一时刻只能打开一?/span> ResultSet 对象。通过 ResultSet ?/span> getXXX() Ҏ来得到字D倹{?/span> ResultSet 提供?/span> getString() ?/span> getFloat() ?/span> getInt() {方法。可以通过字段的序h者字D늚名字来制定获取某个字D늚倹{例如:在上例中 getString(0),getString(col1) 都可以获得字D?/span> col1 的倹{?/span>
 
事务处理

在实际应用中Q我们会遇到同时提交多个
sql 语句Q这?/span> sql 语句要么全部成功Q要么全部失败,如果其中一条提交失败,则必L销整个事务。ؓ此, Connection cL供了 3 个控制事务的ҎQ?/span>
 
Ҏ 描述
setAutoCommit(boolen autoCommit) 讄是否自动提交事务Q默认ؓ自动提交 ?/span>
commit() 提交事务
rollback() 撤销事务
参考例子:
try{
conn.SetautoCommit(false);
stmt = conn.createstatement();
stmt.executeUpdate(“delete form table1 where col1=1?;
stmt.eecuteUpdate(“delete from table2 where col2=1?;
conn.comm.it();
}catch(Exception e){
       e.printStackTrace;
try{
              conn.rollback();
} catch(Exception e1){
       e1.printStackTrace;
}
}
通过一?/span> JSP 例子来访?/span> oracle 数据库:
<%@ page import=”java.util.*?gt;
<%@ page import=”java.sql.*?gt;
<%
try{
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
// 加蝲 oracle 驱动E序
Class.forName(“oracle.jdbc.driver.OracleDriver.?;
// 注册 oracle 驱动E序
DriverManager.regidterDriver(new oracle.jdbc.driver.OracleDriver());
// 建立数据库连?/span>
conn=DriverManager.getConnection(“jdbc:oracle:thin:@your db ip:your db port:sid?dbuser,dbpassword);
stmt = conn.createStatement();
rs = stmt.executeQuery(“select * from tablename?;
while(rs.next){
       out.print(rs.getstring(“colname?);
}
}catch(Exception e){
}
finally{
rs.close();
stmt.close();
conn.close();
}
%>

 
数据源简?/font>

JDBC2.0
提供?/span> javax.sql.DataSource 的接口,负责与数据库建立q接Q实际应用时不需要编写连接数据库代码Q直接从数据源获得数据库的连接?/span> Dataource 中事先徏立了多个数据库连接,q些数据库连接保持在数据库连接池中,当程序访问数据库Ӟ只需要从q接池从取出I闲的连接,讉K数据库结束,在将q些q接归还l连接池?/span>
DataSource 对象由容器( Tomcat Q提供,不能使用创徏实例的方法来生成 DataSource 对象Q要采用 JAVA ?/span> JNDI Q?/span> Java Nameing and Directory Interface Q?/span> java 命名和目录接口)来获?/span> DataSource 对象的引用。(另有一U说法:“其实从技术上来说Q数据源q接方式是不需要目录服务的Q我们同样可以通过序列化数据源对象直接讉K文gpȝ。这Ҏ需要明的。”感兴趣的朋友可以试试。) JNDI 是一U将对象和名字绑定的技术,对象工厂负责生出对象,q些对象都和唯一的名字相l定。程序中可以通过q个名字来获得对象的引用?/span> Tomcat ?/span> DataSource 作ؓ一U可配置?/span> JNDI 资源来处理,生成 DataSource 对象的工厂ؓ org.apache.comm.ons.dbcp.BasicDataSourceFactory ?/span>  

配置数据?/font>

配置数据源其实相当简单:
首先?/span> server.xml 中加?/span> <Resource> 元素Q打开 server.xml Q在 <Context> 中加入以下代码(?/span> oracle ZQ:
 
<Resource name="jdbc/ JNDI 名字 "
               auth="Container"
               type="javax.sql.DataSource"/>
 <ResourceParams name="jdbc/JNDI 名字 ">
    <parameter>
     <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>
 
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>
 
    <parameter>
     <name>username</name>
     <value> 用户?/span> </value>
    </parameter>
    <parameter>
     <name>password</name>
     <value> 密码 </value>
    </parameter>
 
    <parameter>
       <name>driverClassName</name>
       <value>oracle.jdbc.driver.OracleDriver</value>
    </parameter>
 
    <parameter>
      <name>url</name>
      <value>jdbc:oracle:thin:@ip: 端口 :sid </value>
    </parameter>
 </ResourceParams>
<Resource> 元素的属性如下:
属?/span> 描述
name 指定 Resource ?/span> JNDI 的名?/span>
auth 指定理 Resource ?/span> Manager Q由两个可选| Container ?/span> Application ?/span> Container 表示由容器来创徏和管?/span> Resource Q?/span> Application 表示?/span> WEB 应用来创建和理 Resource 。如果在 web application deployment descriptor 中?/span> <resource-ref> Q这个属性是必需的,如果使用 <resource-env-ref> Q这个属性是可选的?/span>
type 指定 Resource 所属的 java cd
<ResourceParams> 元素的属性如下:
属?/span> 描述
name 指定 ResourceParams ?/span> JNDI 的名字,必须?/span> Resource ?/span> name 保持一?/span>
factory 指定生成 DataSource 对象?/span> factory 的类?/span>
maxActive 指定数据库连接池中处于活动状态的数据库连接最大数目, 0 表示不受限制
maxIdle 指定数据库连接池?/span> 处于 I闲状态的数据库连接的最大数目, 0 表示不受限制
maxWait 指定数据库连接池中的数据库连接处于空闲状态的最长时_单位为毫U)Q超q这一事gQ将会抛出异常?/span> -1 表示可以无限期等待?/span>
username 指定q接数据库的用户?/span>
password 指定q接数据库的密码
driverClassName 指定q接数据库的 JDBC 驱动E序
url 指定q接数据库的 URL

其他文章说以上配|就OK了,对于web.xml的配|可有可无,其实不是q样子的?span style="FONT-SIZE: 12pt">如果?/span>web应用中访问了?/span>Servlet容器理的某?/span>JNDI ResourceQ则必须?/span>web.xml中声明对q个JNDI Resource的引用。表C源引用的元素?/span><resource-ref>,该元素加?/span><wepapp></ wepapp >中?br />

<resource-ref>
     <descryiption>DB Connection</descryiption>
<res-ref-name>jdbc/JNDI 名字 </ res-ref-name>
<res-type>javax.sql.DataSource </ res- type>
<res-auth>Container </ res- auth>
</resource-ref>

<resource-ref>
元素的属性如下:

属?/span> 描述
description Ҏ引用的资源的说明
res-ref-name 指定所引用资源?/span> JNDI 名字Q与 <Resource> 元素中的 name 属性保持一?/span>
res-type 指定所引用资源的类名字Q与 <Resource> 元素中的 type 属性保持一?/span>
res-auth 指定所引用资源?/span> Manager Q与 <Resource> 元素中的 auth 属性保持一?/span>

到这里,数据源就已经配置成功了。但是我在测试的时候除了一点小ȝQ主要原因是对DataSource的概忉|搞清楚。我是这么测试的Q写一个测试类Q然后在eclipse中进行junit试Q?/span> 捕获的异ؓQ?/span>
javax.naming.NoInitialContextException : Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initia l ?/span>
同样的代码在JSP文g中正常运行,后来M一些资料,l于扑ֈ了问题的所在了。原来DataSource是由容器QTOMCATQ提供的Q所以我的测试会抛出异常。ؓ了再ơ验证想法是否正,在jsp文g中import刚才抛出异常的类Q在q行q接数据库,l果一切正常?/span>
下面的例子是实际应用中?/span> DataSource Q在 jsp 文g中连?/span> oracle ?/span>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 </head>
<body>
<%
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource db = (DataSource)envContext.lookup("jdbc/javablogorl");
// javablogorl ?/span> <Resource> 元素?/span> name 属性的?/span>
Connection conn = db.getConnection( ); 
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM blog_systemadmin");
while(rs.next()){
       out.print(rs.getString("admin_name")+" ");
       out.print(rs.getString("admin_password")+"<br>");
}
rs.close();
stmt.close();
conn.close();
%> 
 </body>
</html>
 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=674822



haogj 2006-04-24 21:21 发表评论
]]>
ANT十五大最佛_?http://m.tkk7.com/haogj/archive/2006/04/24/42892.htmlhaogjhaogjMon, 24 Apr 2006 13:19:00 GMThttp://m.tkk7.com/haogj/archive/2006/04/24/42892.htmlhttp://m.tkk7.com/haogj/comments/42892.htmlhttp://m.tkk7.com/haogj/archive/2006/04/24/42892.html#Feedback1http://m.tkk7.com/haogj/comments/commentRss/42892.htmlhttp://m.tkk7.com/haogj/services/trackbacks/42892.html  

在Ant出现之前Q构建和部vJava应用需要用包括特定^台的脚本、Make文g、各U版本的IDE甚至手工操作的“大杂烩”。现在,几乎所有的开源Java目都在使用AntQ大多数公司的内部项目也在用Ant。Ant在这些项目中的广泛用自然导致了读者对一整套Ant最佛_늚q切需求?/p>

本文ȝ了我喜爱的Ant技巧或最佛_践,多数是从我亲w经历的目错误或我听说的其他hl历?“恐怖”故事中得到灉|的。比如,有h告诉我有个项目把XDoclet 生成的代码放入带有锁定文件功能的版本控制工具中。当开发者修Ҏ代码Ӟ他必记住手工检出(Check outQƈ锁定所有将要重新生成的文g。然后,手工q行代码生成器,只到q时他才能够让Ant~译代码Q这一Ҏq存在如下一些问题:

当我开始一个新目Ӟ我首先编写Ant构徏文g。Ant文g明确地定义构建的q程Qƈ被团队中的每个程序员使用。本文所列的技巧基于这L假定QAnt构徏文g是一个必Ml编写的重要文gQ它应在版本控制pȝ中得到维护,q被定期q行重构。下面是我的十五大Ant最佛_c?/p>

1. 采用一致的~码规范

Ant用户有的喜欢有的痛恨其构建文件的XML语法。与其蟩q这一令hqh的争ZQ不如让我们先看一些能保持XML构徏文gz的Ҏ?/p>

首先也是最重要的,p旉格式化你的XML让它看上d清晰。不论XML是否观QAnt都可以工作。但是丑陋的XML很难令hL。倘若你在d之间留出IQ有规则的羃q,每行文字不超q?0列左叻I那么XML令h惊讶地易诅R再加上使用能够高亮XML语法的优U~辑器或IDE工具Q你׃会有阅读的麻烦?/p>

同样Q精选含意明、容易读懂的词汇来命名Q务和属性。比如,dir.reportsrpts?em>?/em>特定的编码规范ƈ不重要,只要拿出一套规范ƈ坚持使用p?/p>

2. ?em>build.xml攑֜目根目录中

Ant构徏文gbuild.xml可以攑֜M位置Q但是放在项目顶U目录中可以保持目z。这是最常用的规范,开发者能够在目录中找到预期的build.xml。把构徏文g攑֜根目录中Q也能够使hҎ了解目目录树中不同目录之间的逻辑关系。以下是一个典型的目目录层次Q?/p>

[root dir]
  | build.xml 
  +--src 
  +--lib (包含W三?JAR? 
  +--build (?buildd生成) 
  +--dist (?buildd生成)

?em>build.xml在顶U目录时Q假设你处于目某个子目录中Q只要输入:ant -find compile 命oQ不需要改变工作目录就能够以命令行方式~译代码。参?find告诉AntL存在于上U目录中?em>build.xmlq执行?/p>

3. 使用单一的构建文?/h3>

有h喜欢一个大目分解成几个小的构建文Ӟ每个构徏文g分担整个构徏q程的一部分工作。这实是看法不同的问题Q但是应该认识到Q将构徏文g分割会增加对整体构徏q程的理解难度。要注意在单一构徏文g能够清楚表现构徏层次的情况下不要q工E化(over-engineer)?/p>

即你把目划分为多个构建文Ӟ也应使程序员能够在项目根目录下找到核?em>build.xml。尽该文g只是实际构建工作委z下构徏文gQ也应保证该文g可用?/p>

4. 提供良好的帮助说?/h3>

应尽量构徏文g自文档化。增加Q务描q是最单的Ҏ。当你输入ant -projecthelpӞ你就可以看到带有描述的Q务清单。比如,你可以这样定义Q务:

<target name="compile"  
   description="Compiles code, output goes to the build dir.">

最单的规则是把所有你惌E序员通过命o行就可以调用的Q务都加上描述。对于一般用来执行中间处理过E的内部dQ比如生成代码或建立输出目录{,无法用描q属性?/p>

q时Q可以通过在构建文件中加入XML注释来处理。或者专门定义一个helpdQ当E序员输入ant help时来昄详细的用说明?/p><target name="help" description="Display detailed usage information">
  <echo>Detailed help...</echo></target>

5. 提供清除d

每个构徏文g都应包含一个清除Q务,用来删除所有生成的文g和目录,使系l回到构建文件执行前的初始状态。执行清IZQ务后q存在的文g都应处在版本控制pȝ的管理之下。比如:

<target name="clean"
    description="Destroys all generated files and dirs.">
  <delete dir="${dir.build}"/>
  <delete dir="${dir.dist}"/>
</target>

除非是在产生整个pȝ版本的特DQ务中Q否则不要自动调用cleand。当E序员仅仅执行编译Q务或其他dӞ他们不需要构建文件事先执行既令h讨厌又没有必要的清空d。要怿E序员能够确定何旉要清I所有文件?/p>

6. 使用ANT理d从属关系

假设你的应用由Swing GUIlg、Web界面、EJB层和公共应用代码l成。在大型pȝ中,你需要清晰地定义每个Java包属于系l的哪一层。否则Q何一点修攚w要被q重新编译成百上千个文g。糟p的d从属关系理会导致过度复杂而脆qpȝ。改变GUI面板的设计不应造成Servlet和EJB的重~译?/p>

当系l变得庞大后Q稍不注意就可能依赖于客户端的代码引入到服务端。这是因为典型的IDE目文g~译M文g都用单一的classpath。而Ant能让你更有效地控制构建活动?/p>

设计你的Ant构徏文g~译大型目的步骤:首先Q编译公共应用代码,编译结果打成JAR包文件。然后,~译上一层的目代码Q编译时依靠W一步生的JAR文g。不断重复这一q程Q直到最高层的代码编译完成?/p>

分步构徏强化了Q务从属关pȝ理。如果你工作在底层Java框架上,偶然引用到高层的GUI模板lgQ这时代码不需要编译。这是由于构建文件在~译底层框架时在源\径中没有包含高层GUI面板lg的代码?/p>

7. 定义q用文件\?/h3>

如果文g路径在一个地方一ơ性集中定义,q在整个构徏文g中得到重用,那么构徏文g更易于理解。以下是q样做的一个例子:

<project name="sample" default="compile" basedir=".">
  <path id="classpath.common">
    <pathelement location="${jdom.jar.withpath}"/>
    ...etc  </path>
  <path id="classpath.client">
    <pathelement location="${guistuff.jar.withpath}"/>
    <pathelement location="${another.jar.withpath}"/>
    <!-- reuse the common classpath -->
    <path refid="classpath.common"/>
  </path>
  <target name="compile.common" depends="prepare">
    <javac destdir="${dir.build}" srcdir="${dir.src}">
          <classpath refid="classpath.common"/>
          <include name="com/oreilly/common/**"/>
    </javac>
  </target>
</project>

当项目不断增长构建日益复杂时Q这一技术越发体现出其h倹{你可能需要ؓ~译不同层次的应用定义各自的文g路径Q比如运行单元测试的、运行应用程序的、运行Xdoclet的、生成JavaDocs的等{不同\径。这U组件化路径定义的方法比为每个Q务单独定义\径要优越得多。否则,很容易丢׃Q务从属关pȝ轨迹?/p>

8. 定义恰当的Q务从属关p?/h3>

假设distd从属于jardQ那么哪个Q务从属于compiled哪个d从属于prepared呢?Ant构徏文g最l定义了d的从属关pdQ它必须被仔l地定义和维护?/p>

应该定期查Q务的从属关系以保证构建工作得到正执行。大的构建文仉着旉推移向于增加更多的dQ所以到最后可能由于不必要的从属关pd致构建工作非常困难。比如,你可能发现在E序员只需~译一些没有用EJB的GUI代码时又重新生成了EJB代码?/p>

以“优化”的名义忽略d的从属关pL另一U常见的错误。这U错误迫使程序员Z得到恰当的结果必记住ƈ按照特定的顺序调用一串Q务。更好的做法是:提供描述清晰的公׃Q务,q些d包含正确的Q务从属关p;另外提供一套“专家”Q务让你能够手工执行个别的构徏步骤Q这些Q务不提供完整的构E,但是让那些专家用户在快速而恼人的~码期间能够跌某些步骤?/p>

9.使用属?/h3>

M需要配|或可能发生变化的信息都应作为Ant属性定义下来。对于在构徏文g中多ơ出现的g同样处理。属性既可以在构建文件头部定义,也可以ؓ了更好的灉|性而在单独的属性文件中定义。以下是在构建文件中定义属性的样式Q?/p><project name="sample" default="compile" basedir=".">
  <property name="dir.build" value="build"/>
  <property name="dir.src" value="src"/>
  <property name="jdom.home" value="../java-tools/jdom-b8"/>
  <property name="jdom.jar" value="jdom.jar"/>
  <property name="jdom.jar.withpath"
                    value="${jdom.home}/build/${jdom.jar}"/>
    etc...
</project>

或者你可以使用属性文Ӟ

<project name="sample" default="compile" basedir=".">
  <property file="sample.properties"/>
   etc...
</project>

在属性文?sample.properties?

dir.build=build
dir.src=src
jdom.home=../java-tools/jdom-b8
jdom.jar=jdom.jarjdom.jar.withpath=${jdom.home}/build/${jdom.jar}

用一个独立的文g定义属性是有好处的Q它可以清晰地定义构Z的可配置部分。另外,在开发者工作在不同操作pȝ的情况下Q你可以在不同的q_上提供该文g的不同版本?/p>

10. 保持构徏q程独立

Z最大限度的扩展性,不要应用外部路径和库文g。最重要的是不要依赖于程序员的CLASSPATH讄。取而代之的是,在构建文件中使用相对路径q定义自q路径。如果你引用了绝对\径如C:\java\toolsQ其他开发者未必用与你相同的目录l构Q所以就无法使用你的构徏文g?/p>

如果你部|开放源码项目,应该提供包含~译代码所需的所有JAR文g的发行版本。当Ӟq是在遵守许可协议的基础上。对于内部项目,相关的JAR文g都应在版本控制系l的理中,q捡出(check outQ到大家都知道的位置?/p>

当你必须引用外部路径Ӟ应将路径定义为属性。ɽE序员能够用适合他们自己的机器环境的参数重蝲q些属性。你也可以用以下语法引用环境变量:

<property environment="env"/>
<property name="dir.jboss" value="${env.JBOSS_HOME}"/>

11. 使用版本控制pȝ

构徏文g是一个重要的制品Q应该像代码一栯行版本控制。当你标C的代码时Q也应用同样的标{标记构建文件。这样当你需要回溯到旧版本ƈq行构徏Ӟ能够使用相应版本的构建文件?/p>

除构建文件之外,你还应在版本控制中维护第三方JAR文g。同Pq你能够重新构建旧版本的Y件。这也能够更Ҏ保证所有开发者拥有一致的JAR文gQ因Z们都是同构徏文g一起从版本控制pȝ中捡出的?/p>

通常应避免在版本控制pȝ中存放构建成果。倘若你的源代码很好地得到了版本控Ӟ那么通过构徏q程你能够重新生成Q何版本的产品?/p>

12. 把Ant作ؓ“最公分母?/h3>

假设你的开发团队用IDE工具Q当E序员通过点击图标p够构建整个应用时Z么还要ؓAnt而烦恼呢Q?/p>

IDE的问题是一个关于团队一致性和重现性的问题。几乎所有的IDE设计初衷都是Z提高E序员的个h生率,而不是开发团队的持箋构徏。典型的IDE要求每个E序员定义自q目文g。程序员可能拥有不同的目录结构,可能使用不同版本的库文gQ还可能工作在不同的q_上。这导致出现这U情况:在Bob那里q行良好的代码,到Sally那里无法运行?/p>

不管你的开发团队用何UIDEQ一定要建立所有程序员都能够用的Ant构徏文g。要建立一个程序员在将C码提交版本控制系l前必须执行Ant构徏文g的规则。这确保代码是l过同一个Ant构徏文g构徏的。当出现问题Ӟ要用项目标准的Ant构徏文gQ而不是通过某个IDE来执行一个干净的构建?/p>

E序员可以自由选择M他们习惯使用的IDE工具或编辑器。但是Ant应作为公共基U以保证代码永远是可构徏的?/p>

13. 使用zipfileset属?/h3>

Zl常使用Ant产生WAR、JAR、ZIP?EAR文g。这些文仉常都要求有一个特定的内部目录l构Q但其往往与你的源代码和编译环境的目录l构不匹配?/p>

一个最常用的方法是写一个AntdQ按照期望的目录l构把一大堆文g拯C时目录中Q然后生成压~文件。这不是最有效的方法。用zipfileset属性是更好的解x案。它让你从Q何位|选择文gQ然后把它们按照不同目录l构放进压羃文g中。以下是一个例子:

<ear earfile="${dir.dist.server}/payroll.ear"
    appxml="${dir.resources}/application.xml">
  <fileset dir="${dir.build}" includes="commonServer.jar"/>
  <fileset dir="${dir.build}">
    <include name="payroll-ejb.jar"/>
  </fileset>
  <zipfileset dir="${dir.build}" prefix="lib">
    <include name="hr.jar"/>
    <include name="billing.jar"/>
  </zipfileset>
  <fileset dir=".">
    <include name="lib/jdom.jar"/>
    <include name="lib/log4j.jar"/>
    <include name="lib/ojdbc14.jar"/>
  </fileset>
  <zipfileset dir="${dir.generated.src}" prefix="META-INF">
    <include name="jboss-app.xml"/>
  </zipfileset>
</ear>

在这个例子中Q所有JAR文g都放在EAR文g包的lib目录中。hr.jar和billing.jar是从构徏目录拯q来的。因此我们用zipfileset属性把它们Ud到EAR文g包内部的lib目录。prefix属性指定了其在EAR文g中的目标路径?/p>

14. 试Cleand

假设你的构徏文g中有clean和compile的Q务,执行以下的测试。第一步,执行ant cleanQ第二步Q执行ant compileQ第三步Q再执行ant compile。第三步应该不作M事情。如果文件再ơ被~译Q说明你的构建文件有问题?/p>

构徏文g应该只在与输出文件相兌的输入文件发生变化时执行d。一个构建文件在不必执行诸如~译、拷贝或其他工作d的时候执行这些Q务是低效的。当目规模增长Ӟ即是小的低效工作也会成为大的问题?/p>

15. 避免特定q_的Ant装

不管什么原因,有h喜欢用简单的、名U叫?em>compile之类的批文g或脚本装载他们的产品。当你去看脚本的内容你会发现以下内容Q?/p>

ant compile

其实开发h员都很熟悉AntQƈ且完全能够自己键入ant compile。请不要仅仅Z调用Ant而用特定^台的脚本。这只会使其他h在首ơ用你的脚本时增加学习和理解的烦扰。除此之外,你不可能提供适用于每个操作系l的脚本Q这是真正烦扰其他用L地方?/p>

ȝ

太多的公怾靠手工方法和特别E序来编译代码和生成软g发布版本。那些不使用Ant或类似工具定义构E的开发团队,p了太多的旉来捕捉代码编译过E中出现的问题:在某些开发者那里编译成功的代码Q到另一些开发者那里却p|了?/p>

生成q维护构本不是一富有魅力的工作Q但却是一必需的工作。一个好的Ant构徏文g你能够集中到更喜Ƣ的工作——写代码中去Q?/p>

参?/h3>

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=675230



haogj 2006-04-24 21:19 发表评论
]]>
奇怪的 Java 日期http://m.tkk7.com/haogj/archive/2006/04/18/41746.htmlhaogjhaogjTue, 18 Apr 2006 13:04:00 GMThttp://m.tkk7.com/haogj/archive/2006/04/18/41746.htmlhttp://m.tkk7.com/haogj/comments/41746.htmlhttp://m.tkk7.com/haogj/archive/2006/04/18/41746.html#Feedback0http://m.tkk7.com/haogj/comments/commentRss/41746.htmlhttp://m.tkk7.com/haogj/services/trackbacks/41746.html  Calendar cal = Calendar.getInstance();
  cal.set(1999, 12, 31);
  System.out.println( cal.get(Calendar.YEAR) +"");

q三行代码的执行l果是什么?

?1999 吗?

但是它没有,l果?2000。是千年虫问题吗Q?br />
        事情比我们想象的q要p糕Q这是致命的 Date/Calendar 问题。在 Java 1.0 发布的时候,Q它唯一支持的日历计类是 Date cR由于这个类有许多的问题Q因此,?1.1 版的时候,Calendar c被d?Java 中,以纠?Date 的缺点,不幸的是Q问题更多了?br /> 
        我们习惯上将W一个月当作 1Q因?12  可以用来表示 12 月,不幸的是QDate 的月份表CZ 0 开始,因此 12 月将?11 来表C,而且 Calendar l箋延箋了这个错误。因此上面的代码月份设|ؓ?13 月,但是实际的月份只?12 个月Q代码应该抛Z个异常,通知我们发生了什么,他应该这么做Q可是,它没有,它直接认应该是下一个月Q也是 2000 q的 1 月。因此我们上面的代码输出l果?2000?br />
Date d = cal.getTime();
System.out.println( d.getDay());

再看q两行代码的l果是什么?

?31 ?

l果?1

        我们在前面将日期设ؓ?31 日,?cal.getTime() 中返回了一?Date cd的日期,q个日期也应该是 31 Qؓ什么是 1 呢?

        q是查一?JavaDoc 吧, Date.getDay q回的实际上是日期的星期敎ͼ也就是返回的l果是星期几Q而不是月份中的日期。这个g星期天开始计,从? 开始,因此Q打?1  表示 2000q?2?1日是星期一。注意一下吧Q?Calendar 的方?get( Calendar.DAY_OF_WEEK) 不知道ؓ什么返回的是基?1 开始的星期日期Q而不是基?0 开始的星期日期?br />
    以上内容取自 《Java 解惑?P144
       




haogj 2006-04-18 21:04 发表评论
]]>
վ֩ģ壺 ŮܳƵ| ߿Ƶ| ۺϾƷþ| ѹۿëƬ| ޹˾Ʒþ | 99re6߾Ʒѹۿ| ˳ͼƬС˵վ| 2021ƷƵѲ| պþëƬ| ޾Ʒר߲| www.999ƷƵۿ| ۲ӰԺѹۿ| ŷպ| ޹Ʒ13p| jyzzjyzz鶹| **ɫëƬѹۿ| þۺɫһ| ձһ| þwww˳| avһۿ | 㽶aavۺ| 椸ѹۿƵ| aëƬþѹۿ| 츾һ| ҹӰձŷ޾Ʒһ| Ʒһ | Ƶ| 99߾Ʒѹۿ| þþѹ۳ӰԺ| ޾Ʒҹvaþ| avh˶ڵ| žžƵ| 99ƵȫѾƷȫĻ| Ʒ| ƷAV| ޾ƷŮþþþ| պ޴߶ȸ| jjzzŮ| պƵ| һɫþһ| 57paoƵ|