﻿<?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>IT博客-无业бю游民-随笔分类-JAVA学习~~</title><link>http://www.cnitblog.com/weiweibbs/category/7266.html</link><description>hobo</description><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 02:06:23 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 02:06:23 GMT</pubDate><ttl>60</ttl><item><title>转发和重定向的区别</title><link>http://www.cnitblog.com/weiweibbs/archive/2008/10/27/50731.html</link><dc:creator>hobo</dc:creator><author>hobo</author><pubDate>Mon, 27 Oct 2008 05:40:00 GMT</pubDate><guid>http://www.cnitblog.com/weiweibbs/archive/2008/10/27/50731.html</guid><wfw:comment>http://www.cnitblog.com/weiweibbs/comments/50731.html</wfw:comment><comments>http://www.cnitblog.com/weiweibbs/archive/2008/10/27/50731.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/weiweibbs/comments/commentRss/50731.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/weiweibbs/services/trackbacks/50731.html</trackback:ping><description><![CDATA[<p><strong>转发方式:request.getRequestDispatcher().forward(); </strong></p>
<p><strong>重定向方式:response.sendRedirect(); <br></strong></p>
下面是<span>HttpServletResponse.sendRedirect</span>方法实现的请求重定向与<span>RequestDispatcher.forward</span>方法实现的请求转发的总结比较：
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp; （<span>1</span>）<span>RequestDispatcher.forward</span>方法只能将请求转发给同一个<span>WEB</span>应用中的组件；而<span>HttpServletResponse.sendRedirect </span>方法不仅可以重定向到当前应用程序中的其他资源，还可以重定向到同一个站点上的其他应用程序中的资源，甚至是使用绝对<span>URL</span>重定向到其他站点的资源。如果传递给<span>HttpServletResponse.sendRedirect </span>方法的相对<span>URL</span>以&#8220;<span>/</span>&#8221;开头，它是相对于整个<span>WEB</span>站点的根目录；如果创建<span>RequestDispatcher</span>对象时指定的相对<span>URL</span>以&#8220;<span>/</span>&#8221;开头，它是相对于当前<span>WEB</span>应用程序的根目录。</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp; （<span>2</span>）调用<span>HttpServletResponse.sendRedirect</span>方法重定向的访问过程结束后，浏览器地址栏中显示的<span>URL</span>会发生改变，由初始的<span>URL</span>地址变成重定向的目标<span>URL</span>；而调用<span>RequestDispatcher.forward </span>方法的请求转发过程结束后，浏览器地址栏保持初始的<span>URL</span>地址不变。</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp; （<span>3</span>）<span>HttpServletResponse.sendRedirect</span>方法对浏览器的请求直接作出响应，响应的结果就是告诉浏览器去重新发出对另外一个<span>URL</span>的 访问请求，这个过程好比有个绰号叫&#8220;浏览器&#8221;的人写信找张三借钱，张三回信说没有钱，让&#8220;浏览器&#8221;去找李四借，并将李四现在的通信地址告诉给了&#8220;浏览器&#8221;。于是，&#8220;浏览器&#8221;又按张三提供通信地址给李四写信借钱，李四收到信后就把钱汇给了&#8220;浏览器&#8221;。可见，&#8220;浏览器&#8221;一共发出了两封信和收到了两次回复， &#8220;浏览器&#8221;也知道他借到的钱出自李四之手。<span>RequestDispatcher.forward</span>方 法在服务器端内部将请求转发给另外一个资源，浏览器只知道发出了请求并得到了响应结果，并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫&#8220;浏览器&#8221;的人写信找张三借钱，张三没有钱，于是张三找李四借了一些钱，甚至还可以加上自己的一些钱，然后再将这些钱汇给了&#8220;浏览器&#8221;。可见，&#8220;浏览器&#8221;只发 出了一封信和收到了一次回复，他只知道从张三那里借到了钱，并不知道有一部分钱出自李四之手。</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp;&nbsp; （<span>4</span>）<span>RequestDispatcher.forward</span>方法的调用者与被调用者之间共享相同的<span>request</span>对象和<span>response</span>对象，它们属于同一个访问请求和响应过程；而<span>HttpServletResponse.sendRedirect</span>方法调用者与被调用者使用各自的<span>request</span>对象和<span>response</span>对象，它们属于两个独立的访问请求和响应过程。对于同一个<span>WEB</span>应用程序的内部资源之间的跳转，特别是跳转之前要对请求进行一些前期预处理，并要使用<span>HttpServletRequest.setAttribute</span>方法传递预处理结果，那就应该使用<span>RequestDispatcher.forward</span>方法。不同<span>WEB</span>应用程序之间的重定向，特别是要重定向到另外一个<span>WEB</span>站点上的资源的情况，都应该使用<span>HttpServletResponse.sendRedirect</span>方法。</span></p>
<p align=left><span>&nbsp;&nbsp;&nbsp; （<span>5</span>）无论是<span>RequestDispatcher.forward</span>方法，还是<span>HttpServletResponse.sendRedirect</span>方法，在调用它们之前，都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容，这些内容将被从缓冲区中清除。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 怎么选择是重定向还是转发呢？通常情况下转发更快，而且能保持request内的对象，所以他是第一选择。但是由于在转发之后，浏览器中URL仍然指向开始页面，此时如果重载当前页面，开始页面将会被重新调用。如果你不想看到这样的情况，则选择转发。<br>不要仅仅为了把变量传到下一个页面而使用session作用域，那会无故增大变量的作用域，转发也许可以帮助你解决这个问题。 <br>重定向：以前的request中存放的变量全部失效，并进入一个新的request作用域。 <br>转发：以前的request中存放的变量不会失效，就像把两个页面拼到了一起。</span></p>
<p align=left><span><a href="http://www.diybl.com/course/3_program/java/javajs/200889/135304.html"></a></span>&nbsp;</p>
<img src ="http://www.cnitblog.com/weiweibbs/aggbug/50731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/weiweibbs/" target="_blank">hobo</a> 2008-10-27 13:40 <a href="http://www.cnitblog.com/weiweibbs/archive/2008/10/27/50731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 中的BitSet的初了解</title><link>http://www.cnitblog.com/weiweibbs/archive/2008/09/11/49009.html</link><dc:creator>hobo</dc:creator><author>hobo</author><pubDate>Thu, 11 Sep 2008 12:12:00 GMT</pubDate><guid>http://www.cnitblog.com/weiweibbs/archive/2008/09/11/49009.html</guid><wfw:comment>http://www.cnitblog.com/weiweibbs/comments/49009.html</wfw:comment><comments>http://www.cnitblog.com/weiweibbs/archive/2008/09/11/49009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/weiweibbs/comments/commentRss/49009.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/weiweibbs/services/trackbacks/49009.html</trackback:ping><description><![CDATA[BitSet实际是由&#8220;二进制位&#8221;构成的一个Vector。如果希望高效率地保存大量&#8220;开－关&#8221;信息，就应使用BitSet。它只有从尺寸的角度看才有意义；如果希望的高效率的访问，那么它的速度会比使用一些固有类型的数组慢一些。<br><span>　　此外，BitSet的最小长度是一个长整数（Long）的长度：64位。这意味着假如我们准备保存比这更小的数据，如8位数据，那么BitSet就显得浪费了。所以最好创建自己的类，用它容纳自己的标志位。</span><br><span>　　在一个普通的Vector中，随我们加入越来越多的元素，集合也会自我膨胀。在某种程度上，BitSet也不例外。也就是说，它有时会自行扩展，有时则不然。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_67_422_Open_Image onclick="this.style.display='none'; Codehighlighter1_67_422_Open_Text.style.display='none'; Codehighlighter1_67_422_Closed_Image.style.display='inline'; Codehighlighter1_67_422_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_67_422_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_422_Closed_Text.style.display='none'; Codehighlighter1_67_422_Open_Image.style.display='inline'; Codehighlighter1_67_422_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;ParseException&nbsp;<img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_67_422_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_67_422_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BitSet&nbsp;bit&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;BitSet&nbsp;(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit.set(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit.set(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BitSet&nbsp;anBit&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;BitSet();<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anBit.set(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anBit.set(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">bit.and(anBit);</span><span style="COLOR: #008000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit.or(anBit);<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bit.length();&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_353_407_Open_Image onclick="this.style.display='none'; Codehighlighter1_353_407_Open_Text.style.display='none'; Codehighlighter1_353_407_Closed_Image.style.display='inline'; Codehighlighter1_353_407_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_353_407_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_353_407_Closed_Text.style.display='none'; Codehighlighter1_353_407_Open_Image.style.display='inline'; Codehighlighter1_353_407_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_353_407_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_353_407_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(bit.get(i));<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
</span>结果如下：<br>
<p>results:</p>
<p>false<br>true<br>false<br>false<br>false<br>true<br>false<br>false<br>false<br>false<br>true<br><span style="COLOR: red">疑问：<br><font color=#000000></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_38_103_Open_Image onclick="this.style.display='none'; Codehighlighter1_38_103_Open_Text.style.display='none'; Codehighlighter1_38_103_Closed_Image.style.display='inline'; Codehighlighter1_38_103_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_38_103_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_103_Closed_Text.style.display='none'; Codehighlighter1_38_103_Open_Image.style.display='inline'; Codehighlighter1_38_103_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)</span><span id=Codehighlighter1_38_103_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_38_103_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>BitSet&nbsp;bt2</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;BitSet(</span><span style="COLOR: #000000">950</span><span style="COLOR: #000000">);&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>System.out.println(bt2.size());&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>为什么我输出的不是950.</cd></font></span></p>
new一个BitSet(950)并不等于建立一个950大小的bs <br>只是说构建出来的bs初始大小至少能容纳950个bit,大小永远是系统控制的。而且他的大小是64的倍数，就算BitSet(1),他的大小也是64。</ca><br>
<img src ="http://www.cnitblog.com/weiweibbs/aggbug/49009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/weiweibbs/" target="_blank">hobo</a> 2008-09-11 20:12 <a href="http://www.cnitblog.com/weiweibbs/archive/2008/09/11/49009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>B/S与C/S的区别</title><link>http://www.cnitblog.com/weiweibbs/archive/2008/08/25/48353.html</link><dc:creator>hobo</dc:creator><author>hobo</author><pubDate>Mon, 25 Aug 2008 10:36:00 GMT</pubDate><guid>http://www.cnitblog.com/weiweibbs/archive/2008/08/25/48353.html</guid><wfw:comment>http://www.cnitblog.com/weiweibbs/comments/48353.html</wfw:comment><comments>http://www.cnitblog.com/weiweibbs/archive/2008/08/25/48353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/weiweibbs/comments/commentRss/48353.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/weiweibbs/services/trackbacks/48353.html</trackback:ping><description><![CDATA[C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机，并采用大型数据库系统，如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。<br><br>B/Ｓ是Brower/Server的缩写，客户机上只要安装一个浏览器（Browser），如Netscape Navigator或Internet Explorer，服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下，用户界面完全通过WWW浏览器实现，一部分事务逻辑在前端实现，但是主要事务逻辑在服务器端实现。浏览器通过Ｗeb Server 同数据库进行数据交互。<br><br>C/S 与B/S 区别：<br><br>１．硬件环境不同:<br><br>　　 C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.<br>　　<br>B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行<br><br>２．对安全要求不同<br>　　<br>C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.<br>　　<br>B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。<br><br>３．对程序架构不同<br>　　<br>C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.<br>　　<br>B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.<br><br>４．软件重用不同<br>　　<br>C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.<br>　　<br>B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子<br><br>５．系统维护不同<br>　　<br>C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统<br>　　<br>B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.<br><br>６．处理问题不同<br>　　<br>C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统<br>　　<br>B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.<br><br>７．用户接口不同<br>　　<br>C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高<br>　　<br>B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.<br><br>８．信息流不同<br>　　<br>C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低<br>　　<br>B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。 
<img src ="http://www.cnitblog.com/weiweibbs/aggbug/48353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/weiweibbs/" target="_blank">hobo</a> 2008-08-25 18:36 <a href="http://www.cnitblog.com/weiweibbs/archive/2008/08/25/48353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在jtable中显示数据库信息</title><link>http://www.cnitblog.com/weiweibbs/archive/2008/08/12/47933.html</link><dc:creator>hobo</dc:creator><author>hobo</author><pubDate>Tue, 12 Aug 2008 07:08:00 GMT</pubDate><guid>http://www.cnitblog.com/weiweibbs/archive/2008/08/12/47933.html</guid><wfw:comment>http://www.cnitblog.com/weiweibbs/comments/47933.html</wfw:comment><comments>http://www.cnitblog.com/weiweibbs/archive/2008/08/12/47933.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/weiweibbs/comments/commentRss/47933.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/weiweibbs/services/trackbacks/47933.html</trackback:ping><description><![CDATA[<p>1://一.新建一表格视图(MVC的View)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTable JTableView = new JTable();<br>2://二.新建一表格模板(MVC的Model)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DefaultTableModel JTableModel = new DefaultTableModel();<br>3://三.新建createTableModel()方法<br>&nbsp;&nbsp;&nbsp; private void createTableModel() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // JTableModel.setColumnCount(0); //清空表格模板内所有的列<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // JTableModel.setRowCount(0);&nbsp;&nbsp;&nbsp; //清空表格模板内所有的行<br>&nbsp;&nbsp; //&nbsp;&nbsp; 在表格模板中加入列(加标题)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTableModel.addColumn("学号");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTableModel.addColumn("姓名");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTableModel.addColumn("性别");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTableModel.addColumn("成绩");</p>
<p><br>4: //四.在初始化组件的方法中调用createTableModel()方法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; createTableModel();<br>5: //五.在表格视图中设置要应用的表格模板<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTableView.setModel(JTableModel);<br>6:&nbsp;&nbsp; //&nbsp;&nbsp; 连接数据库第1种方法，直接写代码<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //1.加载驱动程序<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("驱动程序加载失败！");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2.建立数据库连接<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection con = DriverManager.getConnection("jdbc:odbc:Lesson12");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //3.建立Statement语句执行对象<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement st = con.createStatement();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //4.建立ResultSet结果集,执行SQL命令<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = st.executeQuery("select * from StuScore");<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector vcRows = new Vector();&nbsp; //error 每行显示的都是第一条记录<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在表格模板中加入行(将表内记录通过循环一行行添加到表格模板中去)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (rs.next())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector vcRows = new Vector();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vcRows.addElement(rs.getInt(1));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vcRows.addElement(rs.getString(2));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vcRows.addElement(rs.getString(3));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vcRows.addElement(rs.getFloat(4));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // JTableModel.addRow(rs.getInt(1)); //error<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // JTableModel.addRow(rs.getString(2)); //error<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JTableModel.addRow(vcRows); //添加一行记录到表格模板中<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //5.关闭连接<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; st.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; con.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // DBConnection.closeStmtAndCon();&nbsp; //关闭相关连接<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("数据库连接失败！");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br></p>
<img src ="http://www.cnitblog.com/weiweibbs/aggbug/47933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/weiweibbs/" target="_blank">hobo</a> 2008-08-12 15:08 <a href="http://www.cnitblog.com/weiweibbs/archive/2008/08/12/47933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>运行java时，窗体在屏幕中间显示的代码</title><link>http://www.cnitblog.com/weiweibbs/archive/2008/05/26/44347.html</link><dc:creator>hobo</dc:creator><author>hobo</author><pubDate>Mon, 26 May 2008 07:55:00 GMT</pubDate><guid>http://www.cnitblog.com/weiweibbs/archive/2008/05/26/44347.html</guid><wfw:comment>http://www.cnitblog.com/weiweibbs/comments/44347.html</wfw:comment><comments>http://www.cnitblog.com/weiweibbs/archive/2008/05/26/44347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/weiweibbs/comments/commentRss/44347.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/weiweibbs/services/trackbacks/44347.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; import java.awt.*;<br><br>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp; width=0;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp; height=0;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; width=Toolkit.getDefaultToolkit().getScreenSize().width;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; height=Toolkit.getDefaultToolkit().getScreenSize().height;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp; frame.setLocation((width &nbsp; - &nbsp; frameSize.width) &nbsp; / &nbsp; 2,&nbsp;&nbsp; (height &nbsp; - &nbsp; frameSize.height) &nbsp; / &nbsp; 2); &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; frame.setVisible(true);&nbsp;&nbsp; <br>
<img src ="http://www.cnitblog.com/weiweibbs/aggbug/44347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/weiweibbs/" target="_blank">hobo</a> 2008-05-26 15:55 <a href="http://www.cnitblog.com/weiweibbs/archive/2008/05/26/44347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>