﻿<?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-pear</title><link>http://www.blogjava.net/pear/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:01:48 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:01:48 GMT</pubDate><ttl>60</ttl><item><title>伤心太平洋，左连接和内联的区别</title><link>http://www.blogjava.net/pear/archive/2006/12/14/87812.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Thu, 14 Dec 2006 12:47:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/12/14/87812.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/87812.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/12/14/87812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/87812.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/87812.html</trackback:ping><description><![CDATA[
		<dl>
				<dt class="indent">INNER 
</dt>
				<dd class="level2">指定返回所有相匹配的行对。废弃两个表中不匹配的行。如果未指定联接类型，则这是默认设置。<br /></dd>
				<dt class="indent">LEFT [OUTER] 
</dt>
				<dd class="level2">指定除所有由内联接返回的行外，所有来自左表的不符合指定条件的行也包含在结果集内。来自左表的输出列设置为 NULL。<br /></dd>
				<dt class="indent">RIGHT [OUTER] 
</dt>
				<dd class="level2">指定除所有由内联接返回的行外，所有来自右表的不符合指定条件的行也包含在结果集内。来自右表的输出列设置为 NULL。<br /></dd>
				<dt class="indent">FULL [OUTER] 
</dt>
				<dd class="level2">如果来自左表或右表的某行与选择准则不匹配，则指定在结果集内包含该行，并且将与另一个表对应的输出列设置为 NULL。除此之外，结果集中还包含通常由内联接返回的所有行。<br /></dd>
				<dt class="indent">&lt;join_hint&gt; 
</dt>
				<dd class="level2">指定联接提示或执行算法。如果指定了 &lt;join_hint&gt;，也必须明确指定 INNER、LEFT、RIGHT 或 FULL。有关联接提示的更多信息，请参见 <a href="mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\tsqlref.chm::/ts_fa-fz_4ox9.htm">FROM</a>。<br /></dd>
				<dt class="indent">JOIN 
</dt>
				<dd class="level2">表示联接所指定的表或视图。 </dd>
		</dl>
<img src ="http://www.blogjava.net/pear/aggbug/87812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-12-14 20:47 <a href="http://www.blogjava.net/pear/archive/2006/12/14/87812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>伤心太平洋，相识恨晚的SQL</title><link>http://www.blogjava.net/pear/archive/2006/12/14/87809.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Thu, 14 Dec 2006 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/12/14/87809.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/87809.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/12/14/87809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/87809.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/87809.html</trackback:ping><description><![CDATA[A表<br />today<br />2006-1-1<br />2006-1-2<br />2006-10-1<br />2006-10-2<br />2006-5-1<br />根据A表中的数据写一条sql语句查询出如下结果:<br />today              nextday<br />2006-1-1       2006-1-2<br />2006-10-1     2006-10-2<br />简单的题目都把我难倒，痛苦。。。<br />下面是QQ朋友帮我想的办法：<br />解决办法：1。select  a.today as today ,b.today as nextdate from A a join A b on b.today -a.today =1<br />                    2。select a.today,b.today as nextdate from A a,A b where a.today=b.today-1<br /><img src ="http://www.blogjava.net/pear/aggbug/87809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-12-14 20:43 <a href="http://www.blogjava.net/pear/archive/2006/12/14/87809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>伤心太平洋，笔试栽跟头。</title><link>http://www.blogjava.net/pear/archive/2006/12/14/87795.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Thu, 14 Dec 2006 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/12/14/87795.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/87795.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/12/14/87795.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/87795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/87795.html</trackback:ping><description><![CDATA[
		<p>test表<br /> id      salary  <br />1       100   <br />2       200    <br /></p>
		<p>main表<br />id    test_id    salary        <br />1     1         Null      <br />2     1         Null       <br />3     2          Null            <br /><br />请用test表中的salary更新main表中的salary<br />看到这题目让我傻了，这么简单的题目，可我就是不会。</p>
		<p>下面是我回来后重新查帮助后才解决的。测试数据如下，<br />create table test(<br />  id int primary key identity(1,1),<br />  salary int<br />)<br />go<br />insert into test(salary) values(100)<br />insert into test(salary) values(200)<br />go<br />create table main(<br />  id int primary key identity(1,1),<br />  test_id int references test(id),<br />  salary int<br />)<br />go<br />insert into main(test_id) values(1)<br />insert into main(test_id) values(2)<br />go</p>
		<p>答案：<br />UPDATE main<br />SET main.salary = test.salary<br />FROM main INNER JOIN test ON (test.id =main.test_id)</p>
		<p>总结：update 还可以和 from 一起用，自己真的是孤陋寡闻。</p>
<img src ="http://www.blogjava.net/pear/aggbug/87795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-12-14 19:25 <a href="http://www.blogjava.net/pear/archive/2006/12/14/87795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我做的相册系统（超级女生）</title><link>http://www.blogjava.net/pear/archive/2006/11/11/80561.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Sat, 11 Nov 2006 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/11/11/80561.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/80561.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/11/11/80561.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/80561.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/80561.html</trackback:ping><description><![CDATA[最近没什么事情好玩的，所以就弄了个相册系统<br />（下载：<a href="mailto:share_supergirl@126.com">share_supergirl@126.com</a>  密码：goodluck）现在还在继续开发<br /><br />架构是jstl+struts+spring+hibernate. 但经验不足，设计还有很多问题。<br /><br />希望跟大家交流学习。<br /><br />希望哪位朋友能 “批斗”一下 我的系统。<img src ="http://www.blogjava.net/pear/aggbug/80561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-11-11 12:19 <a href="http://www.blogjava.net/pear/archive/2006/11/11/80561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重新学习 Hibernate fetch lazy cascade inverse 关键字 </title><link>http://www.blogjava.net/pear/archive/2006/11/05/79251.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Sun, 05 Nov 2006 12:04:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/11/05/79251.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/79251.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/11/05/79251.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/79251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/79251.html</trackback:ping><description><![CDATA[
		<p>Hibernate最让人头大的就是对集合的加载形式。<br />书看了N次了，还是没有真正理解Hibernate。所以下午专门做了下测试，对配置文件的意思加深了认识。<br /><br />假设有两个表，Photos(一）  ---  picture(多）Photo包含picture集合<br /><br />结论1： HQL代码 &gt; fetch（配置） &gt; lazy （配置）<br />结论2： 默认 lazy="true"<br />结论3： fetch 和 lazy 主要是用来级联查询的，   而 cascade 和 inverse 主要是用来级联插入和修改的<br />结论4： 如果你是用spring来帮你管理你的session, 并且是自动提交，延迟加载就等于没加载~_~(当然<br />                除非你手动重新打开session然后手动Hibernate.initialize(set);然后关闭session.<br />结论5:     cascade主要是简化了在代码中的级联更新和删除。<br />j结论6：老爸可以有多个孩子，一个孩子不能有多个老爸，而且老爸说的算, 孩子围着老爸转。<br />               所以Photos老爸要有权力所以 cascade 这个关键子都是送给老爸的， 也就是级联更新，<br />               老爸改姓了，儿子也得跟着改，呵呵。“不然，就没有零花钱咯”。<br />                而Picture儿子整体挨骂，但是还是要维护父子之间良好的关系，对老爸百依百顺，所<br />               以老爸就说，儿子，“关系，由你来维护（inverse="true") ，不然就不给零花钱。呵。”。<br />               &lt;set name="pictures" inverse="true" cascade="all"&gt;<br />                    &lt;key&gt;<br />                       &lt;column name="photosid" not-null="true" /&gt;<br />                    &lt;/key&gt;<br />                 &lt;one-to-many class="girl.domain.Picture" /&gt;<br />             &lt;/set&gt;<br />               <br />测试代码：<br /><br />   Photos p = ps.getById(1);<br />  Set&lt;Picture&gt; set = p.getPictures();<br />  for(Picture pic : set){<br />     System.out.println(pic.getId());<br />  }<br /><br />  配置文件的一部分：<br />       &lt;set name="pictures" inverse="true" cascade="all" &gt;<br />            &lt;key&gt;<br />                &lt;column name="photosid" not-null="true" /&gt;<br />            &lt;/key&gt;<br />            &lt;one-to-many class="girl.domain.Picture" /&gt;<br />        &lt;/set&gt;<br /><br />测试过程会对配置文件不断修改：并且从来不曾手动重新打开session<br /><br />测试结构：<br /><br />当配置条件为 lazy=true 一句查询 测试代码中没有调用getPicture()  正常 <br />Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?</p>
		<p>lazy=true 一句查询 有getPicture()<br />Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?</p>
		<p>
				<br />lazy=true 一句查询  有getPicture() 并且访问了里面的元数Picture 且有异常抛出<br />Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?</p>
		<p>
				<br />lazy="false" 两句查询  肯定没问题，因为全部数据都个查了出来 所以怎么调用都正常<br />Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?<br />Hibernate: select pictures0_.photosid as photosid1_, pictures0_.id as id1_, pictures0_.id as id2_0_, pictures0_.photosid as photosid2_0_, pictures0_.name as name2_0_, pictures0_.clicked as clicked2_0_, pictures0_.uploaddate as uploaddate2_0_, pictures0_.size as size2_0_, pictures0_.description as descript7_2_0_, pictures0_.uri as uri2_0_ from super.picture pictures0_ where pictures0_.photosid=?</p>
		<p>
				<br />fetch="join"  一句查询  效果 ＝＝ lazy="false" 呵呵，哪个效率高，我就不知道了。。。。。。。。。。。<br />Hibernate: select photos0_.id as id0_1_, photos0_.userid as userid0_1_, photos0_.typeid as typeid0_1_, photos0_.name as name0_1_, photos0_.createtime as createtime0_1_, photos0_.description as descript6_0_1_, photos0_.faceid as faceid0_1_, photos0_.uri as uri0_1_, pictures1_.photosid as photosid3_, pictures1_.id as id3_, pictures1_.id as id2_0_, pictures1_.photosid as photosid2_0_, pictures1_.name as name2_0_, pictures1_.clicked as clicked2_0_, pictures1_.uploaddate as uploaddate2_0_, pictures1_.size as size2_0_, pictures1_.description as descript7_2_0_, pictures1_.uri as uri2_0_ from super.photos photos0_ left outer join super.picture pictures1_ on photos0_.id=pictures1_.photosid where photos0_.id=?</p>
		<p>不加fetch＝"join" 一句查询  没有getPicture() 正常<br />Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?</p>
		<p>不加fetch＝"join" 一句查询  有getPicture() 正常<br />Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?</p>
		<p>不加fetch＝"join" 一句查询 有getPicture() 并且访问里面的元素Picture的ID 有异常抛出<br />Hibernate: select photos0_.id as id0_0_, photos0_.userid as userid0_0_, photos0_.typeid as typeid0_0_, photos0_.name as name0_0_, photos0_.createtime as createtime0_0_, photos0_.description as descript6_0_0_, photos0_.faceid as faceid0_0_, photos0_.uri as uri0_0_ from super.photos photos0_ where photos0_.id=?</p>
		<p>来个两兵交战 fetch="join" lazy="true"  呵呵 结果，一句查询， 结构正常 所以就当lazy不存在好了。 看来fetch 是老大。、、、、、、、、、、、、、<br />Hibernate: select photos0_.id as id0_1_, photos0_.userid as userid0_1_, photos0_.typeid as typeid0_1_, photos0_.name as name0_1_, photos0_.createtime as createtime0_1_, photos0_.description as descript6_0_1_, photos0_.faceid as faceid0_1_, photos0_.uri as uri0_1_, pictures1_.photosid as photosid3_, pictures1_.id as id3_, pictures1_.id as id2_0_, pictures1_.photosid as photosid2_0_, pictures1_.name as name2_0_, pictures1_.clicked as clicked2_0_, pictures1_.uploaddate as uploaddate2_0_, pictures1_.size as size2_0_, pictures1_.description as descript7_2_0_, pictures1_.uri as uri2_0_ from super.photos photos0_ left outer join super.picture pictures1_ on photos0_.id=pictures1_.photosid where photos0_.id=?</p>
<img src ="http://www.blogjava.net/pear/aggbug/79251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-11-05 20:04 <a href="http://www.blogjava.net/pear/archive/2006/11/05/79251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js 天气预报，蒙了我好久。</title><link>http://www.blogjava.net/pear/archive/2006/11/03/78939.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Fri, 03 Nov 2006 08:07:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/11/03/78939.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/78939.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/11/03/78939.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/78939.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/78939.html</trackback:ping><description><![CDATA[
		<p>1。代码<br />&lt;IFRAME ID='ifm2' WIDTH='189' HEIGHT='190' ALIGN='CENTER' MARGINWIDTH='0' MARGINHEIGHT='0' HSPACE='0' VSPACE='0' FRAMEBORDER='0' SCROLLING='NO' SRC='http://weather.qq.com/inc/ss258.htm'&gt;&lt;/IFRAME&gt;<br />&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</p>
		<p>&lt;iframe width="145" height="130" border="0" align="center" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" src="<a href="http://minisite.qq.com/Weather/news_new.html">http://minisite.qq.com/Weather/news_new.html</a>" allowTransparency="true"&gt;&lt;/iframe&gt;<br />&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</p>
		<p>&lt;iframe ALIGN='center' src="<a href="http://weather.265.com/weather.htm">http://weather.265.com/weather.htm</a>" width="168" height="54" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt;<br />&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</p>
		<p>&lt;IFRAME ID='ifm1' WIDTH='405' HEIGHT='332' ALIGN='center' MARGINWIDTH='0' MARGINHEIGHT='0' HSPACE='0' VSPACE='0' FRAMEBORDER='0' SCROLLING='NO' SRC="<a href="http://weather.qq.com/24.htm&quot;&gt;&lt;/IFRAME">http://weather.qq.com/24.htm"&gt;&lt;/IFRAME</a>&gt; <br />&lt;br&gt;&lt;br&gt;&lt;br&gt;</p>
		<p>&lt;iframe width=160 height=230 frameborder=0 ALIGN='center' scrolling=NO src=http://appnews.qq.com/cgi-bin/news_qq_search?city=广州&gt;&lt;/iframe&gt; <br />&lt;br&gt;&lt;br&gt;&lt;br&gt;</p>
		<p>&lt;iframe width="469" height="218" border="0" align="center" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" src="<a href="http://appnews.qq.com/cgi-bin/news_weather_search?city">http://appnews.qq.com/cgi-bin/news_weather_search?city</a>=广州" allowTransparency="true"&gt;&lt;/iframe&gt;<br />&lt;br&gt;&lt;br&gt;<br />&lt;IFRAME ID='ifm1' WIDTH='260' HEIGHT='70' ALIGN='CENTER' MARGINWIDTH='0' MARGINHEIGHT='0' HSPACE='0' VSPACE='0' FRAMEBORDER='0' SCROLLING='NO' src="<a href="http://news.sina.com.cn/iframe/weather/440101.html&quot;&gt;&lt;/iframe">http://news.sina.com.cn/iframe/weather/440101.html"&gt;&lt;/iframe</a>&gt;</p>
		<p>效果如下：<br /><br /><br /><iframe id="ifm20" align="center" marginwidth="0" marginheight="0" src="http://weather.qq.com/inc/ss258.htm" frameborder="0" width="189" scrolling="no" height="190"></iframe><br /><br /><br /><br /><iframe border="0" align="center" marginwidth="0" marginheight="0" src="http://minisite.qq.com/Weather/news_new.html" frameborder="0" width="145" scrolling="no" height="130" allowtransparency=""></iframe><br /><br /><br /><br /><iframe border="0" align="center" marginwidth="0" marginheight="0" src="http://weather.265.com/weather.htm" frameborder="no" width="168" scrolling="no" height="54"></iframe><br /><br /><br /><br /><iframe id="ifm1" align="center" marginwidth="0" marginheight="0" src="http://weather.qq.com/24.htm" frameborder="0" width="405" scrolling="no" height="332"></iframe><br /><br /><br /><iframe align="center" src="http://appnews.qq.com/cgi-bin/news_qq_search?city=广州" frameborder="0" width="160" scrolling="no" height="230"></iframe><br /><br /><br /><iframe border="0" align="center" marginwidth="0" marginheight="0" src="http://appnews.qq.com/cgi-bin/news_weather_search?city=广州" frameborder="0" width="469" scrolling="no" height="218" allowtransparency=""></iframe><br /><br /><iframe id="ifm10" align="center" marginwidth="0" marginheight="0" src="http://news.sina.com.cn/iframe/weather/440101.html" frameborder="0" width="260" scrolling="no" height="70"></iframe></p>
<img src ="http://www.blogjava.net/pear/aggbug/78939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-11-03 16:07 <a href="http://www.blogjava.net/pear/archive/2006/11/03/78939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Reports made easy with JasperReports（转）</title><link>http://www.blogjava.net/pear/archive/2006/11/01/78398.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Wed, 01 Nov 2006 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/11/01/78398.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/78398.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/11/01/78398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/78398.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/78398.html</trackback:ping><description><![CDATA[
		<h1 align="center">Reports made easy with JasperReports</h1>
		<h3 align="center">The open source JasperReports uses XML templates for your reporting needs</h3>
		<p> </p>
		<!--<blockquote><strong>Summary</strong><br>-->
		<blockquote>
				<strong>Summary</strong>
				<br />JasperReports, a popular, full-featured open source report-generating library, uses XML report templates to generate reports you can display on the screen, send to a printer, or save as a PDF document. In this inaugural <strong>Open Source Profile</strong> column, Erik Swenson introduces the JasperReports library and explains how to integrate JasperReports into your applications. (<em>900 words;</em><strong>September 20, 2002</strong>) </blockquote>
		<p align="center">
				<!--</blockquote>-->
				<a href="http://www.javaworld.com/feedback" target="Feedback">
						<strong>By Erik Swenson</strong>
				</a>
				<!-- START BIG AD (336x280) jw-articles-336x280.txt -->
				<!-- END BIG AD (336x280) -->
		</p>
		<p>
				<span id="intelliTXT">
						<img height="29" alt="G" src="http://www.javaworld.com/javaworld/abcs/G.gif" width="21" onload="var image=new Image();image.src=this.src;if(image.width&gt;0 &amp;&amp; image.height&gt;0){if(image.width&gt;=510){this.width=510;this.height=image.height*510/image.width;}}" align="left" />enerating reports is a common, if not always glamorous, task for programmers. In the past, report generation has largely been the domain of large commercial products such as Crystal Reports. Today, the <a class="iAs" style="COLOR: darkgreen; BORDER-BOTTOM: darkgreen 1px solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html#" target="_blank">open source</a> JasperReports report generating library gives <a class="iAs" style="COLOR: darkgreen; BORDER-BOTTOM: darkgreen 1px solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html#" target="_blank">Java</a> developers a viable alternative to commercial software. 
<p>JasperReports provides the necessary features to generate dynamic reports, including data retrieval using JDBC (Java Database <a class="iAs" style="COLOR: darkgreen; BORDER-BOTTOM: darkgreen 1px solid; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" href="http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html#" target="_blank">Connectivity</a>), as well as support for parameters, expressions, variables, and groups. JasperReports also includes advanced features, such as custom data sources, scriptlets, and subreports. All in all, JasperReports combines good features, maturity, community participation, and, best of all, it's free. 
</p><p>This article kicks off <em>JavaWorld'</em>s new <strong>Open Source Profile</strong> column dedicated to Java-based open source tools and components. Look for upcoming articles spotlighting the Echo Web application framework and ObJectRelationalBridge, an object/relational mapping tool. Feel free to send me your suggestions for future articles. 
</p><p><strong>Note:</strong> The documentation and code featured in this article are based on JasperReports version 0.3.3. 
</p><p><font size="+1"><strong>Report design</strong></font><br />In JasperReports, you design reports using XML report templates. For example, the following XML file is a template for a report with a title, two columns of data, and page numbers: 
</p><p><code><p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" <br />"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"&gt;<br />&lt;jasperReport name="BasicReport" &gt;<br />  &lt;parameter name="Title" class="java.lang.String"/&gt;<br />  &lt;queryString&gt;&lt;![CDATA[select name, cost from product]]&gt;&lt;/queryString&gt;<br />  &lt;field name="NAME" class="java.lang.String"/&gt;<br />  &lt;field name="COST" class="java.lang.Double"/&gt;<br />  &lt;title&gt;<br />    &lt;band height="50"&gt;<br />      &lt;textField&gt;<br />        &lt;reportElement x="0" y="0" width="200" height="50" /&gt;       <br />        &lt;textFieldExpression class="java.lang.String"&gt;$P{Title}&lt;/textFieldExpression&gt;<br />      &lt;/textField&gt;<br />    &lt;/band&gt;<br />  &lt;/title&gt;<br />  &lt;pageHeader&gt;<br />    &lt;band&gt;<br />    &lt;/band&gt;<br />  &lt;/pageHeader&gt;<br />  &lt;columnHeader&gt;<br />    &lt;band height="20"&gt;<br />      &lt;staticText&gt;<br />        &lt;reportElement x="180" y="0" width="180" height="20"/&gt;<br />        &lt;textElement&gt;<br />          &lt;font isUnderline="true"/&gt;<br />        &lt;/textElement&gt;<br />        &lt;text&gt;&lt;![CDATA[NAME]]&gt;&lt;/text&gt;<br />      &lt;/staticText&gt;<br />      &lt;staticText&gt;<br />        &lt;reportElement x="360" y="0" width="180" height="20"/&gt;<br />        &lt;textElement&gt;<br />          &lt;font isUnderline="true"/&gt;<br />        &lt;/textElement&gt;<br />        &lt;text&gt;&lt;![CDATA[COST]]&gt;&lt;/text&gt;<br />      &lt;/staticText&gt;<br />    &lt;/band&gt;<br />  &lt;/columnHeader&gt;<br />  &lt;detail&gt;<br />    &lt;band height="20"&gt;<br />      &lt;textField&gt;<br />        &lt;reportElement x="180" y="0" width="180" height="20"/&gt; 
</p><p>  <br />        &lt;textFieldExpression class="java.lang.String"&gt;&lt;![CDATA[$F{NAME}]]&gt;&lt;/textFieldExpression&gt;<br />      &lt;/textField&gt;<br />      &lt;textField pattern="0.00"&gt;<br />        &lt;reportElement x="360" y="0" width="180" height="20"/&gt; 
</p><p>  <br />        &lt;textFieldExpression class="java.lang.Double"&gt;&lt;![CDATA[$F{COST}]]&gt;&lt;/textFieldExpression&gt;<br />      &lt;/textField&gt;<br />    &lt;/band&gt;<br />  &lt;/detail&gt;<br />  &lt;columnFooter&gt;<br />    &lt;band&gt;<br />    &lt;/band&gt;<br />  &lt;/columnFooter&gt;<br />  &lt;pageFooter&gt;<br />    &lt;band height="15"&gt;<br />      &lt;staticText&gt;<br />        &lt;reportElement x="0" y="0" width="40" height="15"/&gt;<br />        &lt;textElement/&gt;<br />        &lt;text&gt;&lt;![CDATA[Page:]]&gt;&lt;/text&gt;<br />      &lt;/staticText&gt;<br />      &lt;textField&gt;<br />        &lt;reportElement x="40" y="0" width="100" height="15"/&gt;<br />        &lt;textElement/&gt;<br />        &lt;textFieldExpression class="java.lang.Integer"&gt;&lt;![CDATA[$V{PAGE_NUMBER}]]&gt;&lt;/textFieldExpression&gt;<br />      &lt;/textField&gt;<br />    &lt;/band&gt;<br />  &lt;/pageFooter&gt;<br />  &lt;summary&gt;<br />    &lt;band&gt;<br />    &lt;/band&gt;<br />  &lt;/summary&gt;<br />&lt;/jasperReport&gt;<br /></p></code></p><p>The template's beginning includes any parameters passed into the report, the query that retrieves the data for the report, and the fields displayed in the report. The template's remainder divides into six report sections: 
</p><p></p><ul><p></p><li><code><font face="新宋体">title</font></code></li><li><code><font face="新宋体">pageHeader</font></code></li><li><code><font face="新宋体">columnHeader</font></code></li><li><code><font face="新宋体">detail</font></code></li><li><code><font face="新宋体">columnFooter</font></code></li><li><code><font face="新宋体">pageFooter</font></code></li><li><code><font face="新宋体">summary</font></code><p> </p></li></ul><p>Each report section, called a <em>band</em>, is given a <code><font face="新宋体">height</font></code>. Each band can include multiple <code><font face="新宋体">staticText</font></code> and <code><font face="新宋体">textField</font></code> elements, which are given a position, size, and value. Report parameters, fields, and variables are referenced using <code><font face="新宋体">P${name}</font></code>, <code><font face="新宋体">F${name}</font></code>, and <code><font face="新宋体">V${name}</font></code>, respectively. 
</p><p>For example, the following lines in the page footer section create a <code><font face="新宋体">textField</font></code> containing the current page number. The page number's value is set to the variable <code><font face="新宋体">PAGE_NUMBER</font></code>, defined internally by JasperReports and available to all reports: 
</p><p><code><p>&lt;textField&gt;<br />  &lt;reportElement x="40" y="0" width="100" height="15"/&gt;<br />  &lt;textElement/&gt;<br />  &lt;textFieldExpression class="java.lang.Integer"&gt;&lt;![CDATA[$V{PAGE_NUMBER}]]&gt;&lt;/textFieldExpression&gt;<br />&lt;/textField&gt;<br /></p></code></p><p>The above template represents a basic, yet functional, report. A thorough JasperReports XML-template description is beyond the scope of this article, but I've included numerous links in <a href="http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html#resources">Resources</a> to tools that will help you edit and create your own report templates. Next, let's see how to use JasperReports in your Java applications. 
</p><p><font size="+1"><strong>Use JasperReports</strong></font><br />To begin using JasperReports, you first must understand what objects JasperReports uses to represent the reporting process as it progresses from report design to report generation: 
</p><p></p><ul><p></p><li><code><strong><font face="新宋体">JasperDesign</font></strong></code>: Represents a report's definition. In most cases, you create a <code><font face="新宋体">JasperDesign</font></code> from an XML report template, though you can also create it programmatically. 
<p> </p></li><li><code><strong><font face="新宋体">JasperReport</font></strong></code>: Represents a compiled <code><font face="新宋体">JasperDesign</font></code>. The compilation process verifies the report design and compiles the design into a <code><font face="新宋体">JasperReport</font></code> object. 
<p> </p></li><li><code><strong><font face="新宋体">JasperPrint</font></strong></code>: Represents a generated report. You create a <code><font face="新宋体">JasperPrint</font></code> from a <code><font face="新宋体">JasperReport</font></code> through the fill process in which a report is populated with data from a data source. 
<p> </p></li></ul><p>The JasperReports API's flexibility lets you load <code><font face="新宋体">JasperDesign</font></code>, <code><font face="新宋体">JasperReport</font></code>, and <code><font face="新宋体">JasperPrint</font></code> objects from a file or a stream, and also lets you create these objects programmatically. You can print reports to a printer, an image, or a PDF file. The JasperReports library includes a facade class, <code><font face="新宋体">dori.jasper.engine.JasperManager</font></code>, with methods that facilitate loading, compiling, filling, and printing reports. The following code illustrates a <code><font face="新宋体">JasperManager</font></code>: 
</p><p><code><p>// First, load JasperDesign from XML and compile it into JasperReport<br />JasperDesign jasperDesign = JasperManager.loadXmlDesign("BasicReport.xml");<br />JasperReport jasperReport = JasperManager.compileReport(jasperDesign);<br /><br />// Second, create a map of parameters to pass to the report.<br />Map parameters = new HashMap();<br />parameters.put("ReportTitle", "Basic JasperReport");<br />parameters.put("MaxSalary", new Double(25000.00));<br /><br />// Third, get a database connection<br />Connection conn = Database.getConnection(); <br /><br />// Fourth, create JasperPrint using fillReport() method<br />JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, <br />   parameters, conn);<br /><br />// You can use JasperPrint to create PDF<br />JasperManager.printReportToPdfFile(jasperPrint, "BasicReport.pdf");<br /><br />// Or to view report in the JasperViewer<br />JasperViewer.viewReport(jasperPrint);<br /></p></code></p><p>The code example above shows how to perform some common tasks using JasperReports. In a real-world application, you'd find it impractical to load and compile the <code><font face="新宋体">JasperDesign</font></code> every time you wanted to generate a report. Since report designs are largely static, in most cases, you'd precompile your <code><font face="新宋体">JasperDesign</font></code> files to increase speed. You can also increase a large report's speed by generating and saving <code><font face="新宋体">JasperPrint</font></code> objects as part of a nightly batch process. 
</p><p>That's all you need to get started; download JasperReports and you'll be up and running in no time. 
</p><p><font size="+1"><strong>Reports the easy way</strong></font><br />In this article, you learned how the open source JasperReports can aid your Java reporting needs. If you are building a reporting application or looking to add reporting capability to an existing application, look at JasperReports. Visit the JasperReports <a href="http://www.javaworld.com/javaworld/jw-09-2002/jw-0920-opensourceprofile.html#resources">homepage</a> for more information and download the latest version. <img height="12" src="http://www.devworld.com/microsites/javaworld/javaworld/icons/jw-dingbat.gif" width="22" onload="var image=new Image();image.src=this.src;if(image.width&gt;0 &amp;&amp; image.height&gt;0){if(image.width&gt;=510){this.width=510;this.height=image.height*510/image.width;}}" /></p></span>
		</p>
<img src ="http://www.blogjava.net/pear/aggbug/78398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-11-01 08:49 <a href="http://www.blogjava.net/pear/archive/2006/11/01/78398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>org.xml.sax.SAXNotRecognizedException:(转载）</title><link>http://www.blogjava.net/pear/archive/2006/10/23/76800.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Mon, 23 Oct 2006 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/10/23/76800.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/76800.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/10/23/76800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/76800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/76800.html</trackback:ping><description><![CDATA[发布我的webapp的时候遇到了下面的错误信息。<br />org.xml.sax.SAXNotRecognizedException: http://xml.org/sax/features/validation<br />查找资料http://www.google.com/search?hl=zh-CN&amp;inlang=zh-CN&amp;newwindow=1&amp;q=resin+org.xml.sax.SAXNotRecognizedException&amp;lr=，（参考：http://www.slamb.org/svn/repos/projects/axamol/sax-pipeline/README）<br />需要新建一个 jaxp.properties， 内容如下：<br />javax.xml.parsers.SAXParserFactory: org.apache.xerces.jaxp.SAXParserFactoryImpl<br />保存文件到$JAVA_HOME/jre/lib/下面<br />接下来可能会出现下面的错误信息：<br />javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAX<br />ParserFactoryImpl could not be instantiated: java.lang.NullPointerException<br />因此还需要把xercesImpl.jar复制到D:\jdk1.5.0_01\jre\lib\endorsed下面（没有这个目录就创建这个目录）<br />重新启动resin,我的webapp启动成功了。<br />访问 http://lizongbo.myresintest.com/mywebapp/，页面正常出现。<br />b.另外一种更简单的解决方法，不需要修改jdk的配置<br />((此方法没有测试过，请参考http://www-900.ibm.com/developerWorks/cn/webservices/ws-axisfaq/index.shtml和http://www.caucho.com/quercus/faq/question.xtp?question_id=295))：<br />    &lt;host id="lizongbo.myresintest.com" root-directory="."&gt;<br />      &lt;web-app id='/' document-directory="webapps/ROOT"/&gt;<br />      &lt;web-app id='/lizongbo' document-directory="E:/jb/oscachedemo/test"&gt;<br />      &lt;system-property javax.xml.transform.TransformerFactory="org.apache.xalan.processor.TransformerFactoryImpl"/&gt;<br />&lt;system-property javax.xml.parsers.DocumentBuilderFactory="org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/&gt;<br />&lt;system-property javax.xml.parsers.SAXParserFactory="org.apache.xerces.jaxp.SAXParserFactoryImpl"/&gt;<br />&lt;system-property org.xml.sax.driver="org.apache.xerces.parsers.SAXParser"/&gt;<br />&lt;/web-app&gt;<br />    &lt;/host&gt;<br /><br /><br />希望对你有所启发<br />详细地址:<br />http://dev.csdn.net/article/62/62171.shtm <img src ="http://www.blogjava.net/pear/aggbug/76800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-10-23 17:40 <a href="http://www.blogjava.net/pear/archive/2006/10/23/76800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天开始真正的用 Linux呵呵 ，虚拟机的 时代 已经成为 历史，哈哈</title><link>http://www.blogjava.net/pear/archive/2006/10/16/75428.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Mon, 16 Oct 2006 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/10/16/75428.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/75428.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/10/16/75428.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/75428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/75428.html</trackback:ping><description><![CDATA[没有深究的学命令，哈哈，反正先图个感性认识. 让自己的Linux满足日常生活所需。。<br />1. 安装iso文件 ：mount -t iso9660 /home/xxxx.iso /mnt/cdrom -o loop<br />2. 文件（目录）改名：  mv 旧名 新名<br />3. rpm安装命令：   rpm -ivh *.rpm<br />4.  让下载的jdk可以安装：   chmod u+x *.bin  <br />5. 让自己可以上网 ： <br />   安装 rp-pppoe ：<br />   tar xvfz rp-pppoe-3.8.8.tar.gz<br />   cd rp-pppoe-3.8.8<br />   ./go<br />   帐号：<br />   DNS： 209.128.252.238    202.96.128.86  (winxp:  ipconfig /all 命令可以查看）<br />    pppoe-start <br />    route add default gw ip ( ip 通过ifconfig -a查看到 pppoe附近那个ip就是）<br />    pppoe-stop<br />6. tar解压命令： tar -xvfz *tar.gz   /   tar jxvf *.bz2<br /><br />.//单机时代和网络时代是这样划分的： ／／下面是抄袭的（非原创）<br />FC5 装 RP-PPPOE上网：<br />步骤：<br />1、在WINDOWS里用IPCONFIG／ALL，查看DNS，并记录在纸上（有些人讲这一步不用做，我为了求稳，还是做了）<br />2、在WINDOWS里上网，进入http://www.roaringpenguin.com/pppoe/，下载名为rp-pppoe的软件rp-pppoe-3.2.tar.gz<br />3、重启，进入linux fc5,将rp-pppoe复制到LINUX分区下（关于如果从WINDOWS分区下将文件复制到LINUX分区下，请参见mount命令）<br />4、解压缩  <br />　　　　#tar xvfz rp-pppoe-3.2.tar.gz  <br />　　　　#cd rp-pppoe-3.2  <br />5、进行编译和安装  <br />　　　　运行脚本  <br />　　　　#./go <br />      此时会进入配置<br />6、配置<br />　　&gt;&gt;&gt; Enter your PPPoE user name :  <br />　　输入ADSL帐号的用户名(不是你给他取名) ，我的是888888＠glcrc <br />当出现  <br />　　&gt;&gt;&gt; Enter the Ethernet interface connected to the ADSL modem  <br />　　For Solaris, this is likely to be something like /dev/hme0.  <br />　　For Linux, it will be ethn, where 'n' is a number.  <br />　　(default eth0):  <br />　　输入 eth0 ,这是ADSL相连的网卡的名字。  <br />当出现  <br />　　&gt;&gt;&gt; Enter the demand value (default no):  <br />　　输入 no  <br />当出现  <br />　　&gt;&gt;&gt; Enter the DNS information here:  <br />        输入之前抄在纸上的那两个DNS。<br />　　或输入 server ,这表示使用ADSL拨号自动获得的DNS服务器IP地址  （我还没试过）<br /><br />　　&gt;&gt;&gt; Please enter your PPPoE password:  <br />　　输入ADSL帐号的密码  <br />当出现  <br />　　&gt;&gt;&gt; Choose a type of firewall (0-2):  <br />　　输入 0 ，不使用防火墙  <br />当出现  <br />　　&gt;&gt;&gt; Accept these settings and adjust configuration files (y/n)?  <br />　　如果输入的信息正确，输入 y ,完成配置，否则，输入 n 重新输入。  <br /><br />7、＃ pppoe-start<br /><br />原来到这一步，出现CONNECTED！的提示，我就以为可以上网了，切换到GNOME，就打开FIREFOX，之后发现还不能上网，后来发现，这是少了下面这几步。<br /><br />8、先运行pppoe-stop，停掉连接。<br />9、当连接成功后，使用命令：  <br />　　　　#ifconfig -a  <br />　　在输出中应该含有关于 ppp0 的一堆信息，其中还绑定了 IP 地址,说明已经从拨号中获得了IP地址。  <br />　　使用命令  <br />　　　　#netstat -nr  <br />　　查看路由表信息，这时的默认路由应该是上面获得的IP地址。如果没有默认路由，我们可以手动增加：  <br />　　　　#route add default gw xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx是上面ifconfig -a命令获得的IP地址) <br />　　使用命令  <br />　　　　#nslookup www.sina.com.cn  <br /> <br />　　如果解析出新浪的IP，说明已经从拨号中正确获得了DNS服务器。  <br />　　最后，使用命令ping某个域名或IP，如果有响应，表示你已经大功告成了。 <br /><br />以后每次运行完pppoe-start命令之后，都还要进行第9步的操作。<br /><br /><img src ="http://www.blogjava.net/pear/aggbug/75428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-10-16 15:49 <a href="http://www.blogjava.net/pear/archive/2006/10/16/75428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>偷来的代码.</title><link>http://www.blogjava.net/pear/archive/2006/10/05/73465.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Thu, 05 Oct 2006 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/10/05/73465.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/73465.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/10/05/73465.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/73465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/73465.html</trackback:ping><description><![CDATA[1. <a id="viewpost1_TitleUrl" href="/envoydada/archive/2006/05/11/45645.html"><font color="#000080">Java调用windows程序</font></a> <br />      Runtime ru = Runtime.getRuntime();<br />        try {<br />            //调用播放器文件播放指定MP3<br />            Process p1 = ru.exec("C:\\Program Files\\Windows Media Player\\wmplayer d:\\DADA\\mp3\\0197.mp3");<br />           //调用批处理文件 <br />            Process p2 = ru.exec("d:\\a.bat");<br /><br />            //显示执行结果<br />            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));<br />            String line;<br />            while((line=br.readLine())!=null){<br />                System.out.println(line);<br />            }<br />        } catch (IOException ex) {ex.printStackTrace();} <img src ="http://www.blogjava.net/pear/aggbug/73465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-10-05 14:39 <a href="http://www.blogjava.net/pear/archive/2006/10/05/73465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网页中打印表格数据备份</title><link>http://www.blogjava.net/pear/archive/2006/10/02/73226.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Mon, 02 Oct 2006 13:33:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/10/02/73226.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/73226.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/10/02/73226.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/73226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/73226.html</trackback:ping><description><![CDATA[
		<font size="2">网页中打印表格数据备份<br />&lt;style   media="print"&gt;<br />.noprint   {   display:   none   }<br />&lt;/style&gt;<br />上面的代码写在&lt;head&gt;中···<br />&lt;INPUT   onclick="document.execCommand('print','true','true')"   class="noprint"   type="button"   value="打印"&gt;<br /><br />然后在你不要打印的地方加一个   class="noprint"属性···</font>
<img src ="http://www.blogjava.net/pear/aggbug/73226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-10-02 21:33 <a href="http://www.blogjava.net/pear/archive/2006/10/02/73226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Sun creator创建的 jsf 项目部署到其他服务器的问题： </title><link>http://www.blogjava.net/pear/archive/2006/10/02/73182.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Mon, 02 Oct 2006 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/10/02/73182.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/73182.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/10/02/73182.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/73182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/73182.html</trackback:ping><description><![CDATA[
		<p>用Sun creator创建的 jsf 项目部署到其他服务器的问题： </p>
		<p>对jsf项目的支持，sun creator 无疑给人一种 耳目一新的感觉：<br />他对可视化开发的支持真的开始可以和.Net较劲了。</p>
		<p>但是 creator 有个问题就是可以把项目部署到 sun app server的项目部署到其他服务器老是出同样的问题：<br /> <br />下面总结一下：</p>
		<p>步骤一:  把项目导出成 *.war文件<br />步骤二:  把*.war拷贝到其他服务器的部署目录<br />         比如 tomcat/resin 的 webapp下<br />步骤三:  运行服务器(tomcat/resin) 问题来了,出现异常<br />[10:41:34.828] java.lang.NullPointerException<br />[10:41:34.828]  at javax.faces.webapp.FacesServlet.init(FacesServlet.java:144)<br />[10:41:34.828]  at com.caucho.server.dispatch.ServletConfigImpl.createServletImpl(ServletConfigImpl.java:646)<br />[10:41:34.828]  at com.caucho.server.dispatch.ServletConfigImpl.createServlet(ServletConfigImpl.java:587)</p>
		<p>看到这个"FacesServlet.java:144" 开始我怀疑是sun 的包的问题, 网上google和baidu了一下,没搜到相关问题的解决办法. <br />    最后在一个朋友的帮助下在web.xml文件里加了个Listener:<br />      &lt;listener&gt;<br />        &lt;listener-class&gt;com.sun.faces.config.ConfigureListener&lt;/listener-class&gt;<br />     &lt;/listener&gt;<br />嘿,还真行.</p>
		<p>心得如下:<br />     在用workshop或者myeclipse用myfaces包建jsf项目时,我们不会碰到类似的问题.<br />因为工具已经在web.xml里面加了listener:<br /> &lt;listener&gt;<br />  &lt;!-- Listener, that does all the startup work (configuration, init). --&gt;<br />  &lt;listener-class&gt;org.apache.myfaces.webapp.StartupServletContextListener    &lt;/listener-class&gt;<br /> &lt;/listener&gt;<br />但是如果用这些工具用 sun jsf 包时就要手动listerner.(如:步骤三)<br /></p>
		<p>给大家个连接: sun creator的教程,从这里开始学jsf感觉比较全面:<br /><a href="http://gceclub.sun.com.cn/prodtech/javatools/jscreator/learning/tutorials/index.html">http://gceclub.sun.com.cn/prodtech/javatools/jscreator/learning/tutorials/index.html</a></p>
<img src ="http://www.blogjava.net/pear/aggbug/73182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-10-02 10:59 <a href="http://www.blogjava.net/pear/archive/2006/10/02/73182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BBS中的一个查询问题（原创） </title><link>http://www.blogjava.net/pear/archive/2006/09/28/72654.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Thu, 28 Sep 2006 10:49:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/09/28/72654.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/72654.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/09/28/72654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/72654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/72654.html</trackback:ping><description><![CDATA[
		<p>问题：<br />在BBS中，content 和  review 两张表，其中content 记录的是 帖子信息（topic_id,topic_title,topic_content等字段），review 表中记录的是回帖的信息，(review_id,topic_id等字段)在 求一SQL语句，其中topic_id和review_id都是自动增加，现在要求查询出有最新回复的帖子的信息，同时要求有多个回复的一个帖子的主题只能显示一次，能用一个SQL语句搞定吗？数据库是MYSQL 求高手指点下 <br /><br />回答：<br />select t.id,t.title,t.content,r.newposttime from topic as t inner join (select max(posttime) as newposttime, topicid from review group by topicid) as r on t.id=r.topicid<br /> <br />//测试<br />create table topic(<br />  id int primary key identity(1,1),<br />  title varchar(128),<br />  content text<br />)</p>
		<p>insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')<br />insert into topic(title,content) values('title1','content1')</p>
		<p>
				<br />create table review(<br />  id int primary key identity(1,1),<br />  topicid int references topic(id),<br />  content text,<br />  posttime datetime default getdate()<br />)</p>
		<p>insert into review(topicid,content) values(1,'reice1')<br />insert into review(topicid,content) values(1,'reice1')<br />insert into review(topicid,content) values(2,'reice1')<br />insert into review(topicid,content) values(2,'reice1')<br />insert into review(topicid,content) values(2,'reice1')<br />insert into review(topicid,content) values(3,'reice1')<br />insert into review(topicid,content) values(3,'reice1')<br />insert into review(topicid,content) values(3,'reice1')<br />insert into review(topicid,content) values(3,'reice1')<br />insert into review(topicid,content) values(4,'reice1')</p>
		<p>select t.id,t.title,t.content,r.newposttime from topic as t inner join (select max(posttime) as newposttime, topicid from review group by topicid) as r on t.id=r.topicid</p>
		<p>这些是测试数据,sqlserver2000测试通过 </p>
<img src ="http://www.blogjava.net/pear/aggbug/72654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-09-28 18:49 <a href="http://www.blogjava.net/pear/archive/2006/09/28/72654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实用的java问题</title><link>http://www.blogjava.net/pear/archive/2006/09/14/69738.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Thu, 14 Sep 2006 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/09/14/69738.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/69738.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/09/14/69738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/69738.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/69738.html</trackback:ping><description><![CDATA[
		<a href="http://www.matrix.org.cn/thread.shtml?topicId=46027&amp;forumId=14">http://www.matrix.org.cn/thread.shtml?topicId=46027&amp;forumId=14</a>
		<br />
		<br />1. 问：在JAVA与JSP中要调用一个LINUX上的脚本程序,或WINDOWS上的脚本程序,该怎么写？<br />答：System.getRuntime().exec("bash &lt; aaa.sh");<br /><br />2. 问：java中用什么表示双引号<br />答："""<br /><br />3. 问：如何在JSP程序里另起一个线程？<br />答：<br />JSP本身就是独立线程运行而不象CGI都是独立进程.<br />一般:<br />Thread t = new Thread("你的对象");<br />t.start();就可以了.<br />要求你这个对象要实现runnable接口或继承thread.<br /><br />4. 问：jsp如何获得客户端的IP地址？<br />答：<br />request.getRemoteAddr()<br />看看各个webserver的API文档说明，一般都有自带的，resin和tomcat都有<br /><br />5. 问：程序终止与输出终止<br />答：<br />程序中止:return;<br />输出中止out.close();这一句相当于ASP的response.end<br /><br />6. 问：jsp中如何得到上页的URL？<br />答：request.getHeader("referer");<br /><br />7. 问：提交网页的网页过期功能是怎么做的？<br />答：response.setHader("Expires","0");<br /><br />8. 问：在JSP网页中如何知道自已打开的页面的名称<br />答：<br />request.getRequestURI() ;//文件名<br />request.getRequestURL() ;//全部ＵＲＬ<br /><br />9. 问：提交表单后验证没有通过，返回提交页面，如何使原提交页面中的数据保留？<br />答：javascript的go(-1)可以把上页的表单内容重新显示出来,但password域没有<br /><br />10. 问：如何取得http的头信息？<br />答：request.getHader(headerName);<br /><br />11. 问：&amp;&amp;和&amp;的区别？<br />答：<br />&amp;&amp;是短路的与操作，也就是当地一个条件是false的时候，第二个条件不用执行<br />&amp;相反，两个条件总是执行。<br /><br />12. 问：将*以正弦曲线的一个周期显示出来<br />答：<br />public void paint(Graphics g)<br />{<br />for(int i=0;i&lt;200;i++)<br />g.drawString("*",i,(int)(Math.sin(i)*20)+50);<br />}<br />}<br /><br />13. 问：浮点数相乘后结果不精确如100.0 * 0.6 结果等于 60.0004<br />答：<br />这不叫错误,float和double是这样实现的.如果要精确计算，java提供了一个strictfp,它的计算遵循IEEE 754标准.而普通的float和double是<br /><br />由地平台浮点格式或硬件提供的额外精度或表示范围。<br /><br />14. 问：如何获得当前用的cursors的位置？<br />答：<br />int row = rs.getRow()就是当前指针行数,还有isFrist();isBeforeFist();isLast();isAfterLast();可以测试是不是在方法名所说的位置<br /><br />15. 问：表单成功提交了，点后退显示网页过期<br />答：<br />在&lt;head&gt;&lt;/head&gt;里面加以下代码<br />&lt;META HTTP-EQUIV="Pragma" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; <br />&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt; <br />或者在表单页中加上<br />&lt;% <br />response.setHeader("Pragma","no-cache"); <br />response.setHeader("Cache-Control","no-cache"); <br />response.setDateHeader("Expires",0); <br />%&gt;<br /><br />16. 问：接口的简单理解<br />答：接口为了规范,比如我在接口中定义了一个方法:<br />getData()<br />这是用来从不同的数据库中取数据的,就是JDBC的实现对于用户,我不要知道每种数据库是如何做的,但我知道如何它们要实现这个接口就一定有<br /><br />这个方法可以供我调用.这样SUN就把这个接口给各个数据库开发商,让他们自己实现. 但为什么不用继承而用接口哩,因为继承只能从一个你类<br /><br />继承,而接口可以实现多个,就是说我实现的子类有多个规定好的接口中的功能. 这只是简单的理解,等你深入理解抽象的时候就知道抽象到抽象<br /><br />类时为什么还要再抽象到接口.<br /><br />17. 问：怎样编写一个取消按钮（怎样返回上一个页面，象工具栏的后退按钮）？<br />答：<br />javascript把每次浏览过的location都压到了一个栈中,这个栈就是history,然后你如果要回到第几个页面它就做几次POP操作,把最后POP出来<br /><br />的那个LOCATION给你. 这就是JAVASCRIPT在实现history.go(-x)的原理.<br /><br />18. 问：什么是回调？<br />答：<br />简单说,回调用不是让你去监听谁做完了什么事,而是谁做完了什么事就报告给你. 这就是回调用的思想.例子太多了,AWT的事件,SWING事件模型<br /><br />都是这样有. 还有多线程中,如果要控制线程数,不能总是查询每个线程是否结束,要在每个线程结束时让线程自己告诉主线程我结束了,你可以<br /><br />开新的线程了.<br /><br />19. 问：简要介绍一下compareTo方法<br />答：<br />compareTo方法是Comparable 接口必需实现的方法,只要实现Comparable <br /><br />就可以用Arrays.srot()排序就象实现Runnable接口的run就能Thread()一样.<br /><br />20. 问：如何可以从别的Web服务器检索页, 然后把检索到的网页的HTML代码储存在一个变量中返回过来<br />答：这是一个简单的WEB ROBOT实现,用URL类实现从网页中抓内容,然后自己写一个分析程序从中找出新的URL,不断递归下去就行了.<br /><br />21. 问：applet中如何获得键盘的输入<br />答：application的System.in是当前系统的标准输入,applet因为安全的原因不可能读取当前系统(客户端)的标准输入,只能从它的ROOT组件的<br /><br />事件中,比如键盘事件中取得键值.<br /><br />22. 问：怎样计算代码执行所花费的时间？<br />答：<br />代码开始取时间，结束后取时间，相减<br />long t1 = System.currentTimeMillis();<br />///////////////// your code<br />long t2 = System.currentTimeMillis() ;<br />long time = t2-t1;<br /><br />23. 问：如何获在程序中获得一个文件的ContentType？<br />答：<br />URL u = new URL("file:///aaa.txt");<br />URLConnection uc = u.openConnection();<br />String s = uc.getContentType();<br /><br />24. 问：连接池的使用是建立很多连接池，还是一个连接池里用多个连接？<br />答：<br />只有在对象源不同的情况下才会发生多个池化,如果你只连一结一个数据源,永远不要用多个连结池. 所以连结池的初始化一定要做成静态的,而<br /><br />且应该在构造对象之前,也就是只有在类LOAD的时候,别的时候不应该有任何生成新的连结池的时候。<br /><br />25. 问：JavaMail要怎么安装？<br />答：下载两个包，一个是javamail包，另一个是jaf包。下载完直接把这两个包不解压加到CLASSPATH。<br /><br />26. 问：怎样把地址栏里的地址锁定？<br />答：把你的服务器的可访问目录索引选项关闭就行了,任何服务器都有一个conf文件,里面都有这个选项。<br /><br />27. 问：在JAVA中怎么取得环境变量啊。比如： TEMP = C：TEMP ？<br />答：String sss = System.getProperty(key)<br /><br />28. 问：怎样实现四舍五入，保留小数点后两位小数？<br />答：<br />import java.text.*;<br />...<br />NumberFormat nf=NumberFormat.getNumberInstance();<br />nf.setMaximumFractionDigits(2);<br />nf.setMinimumFractionDigits(2);<br />nf.format(numb);<br /><br />29. 问：Applet和form如何通信？<br />答：<br />取得的参数传到param里面<br />&lt;% <br />String xxx = request.getParameter("xxx"); <br />%&gt; <br />&lt;applet&gt; <br />&lt;param value="&lt;%=xxx%&gt;"&gt; <br />&lt;/applet&gt;<br /><br /><br />30. 问：java-plug-in是什么？<br />答：Java Runtime Environment的插件。用来运行java程序。不需要什么特别的设置。等于你的机器里面有了jvm。<br /><br />31. 问：WEB上面怎么样连接上一个EXCEL表格？<br />答：<br />定义页面得contentType="application/vnd.ms-excel"，让页面以excel得形式打开。同样也可以以word得形式打开：application/msword。<br /><br />32. 问：怎样才能避免textarea字数限制？<br />答：是使用了FORM的默认方法的缘故,如果什么也不写默认是GET改用Post即可，在Form中定义mothod="post"。<br /><br />33. 问：为什么加了&lt;%@page contentType="text/html;charset=gb2312" %&gt;插入数据库的中文，依然是乱码？<br />答：<br />这要从环境看,能显示说明你的JSP引擎没有问题,但写入数据库时你的JDBC能不能处理中文,同一公司不同版本的JDBC都有支持中文和不支持中<br /><br />文的情况,RESIN自带的MYSQL JDBC就不支持,MM的就支持,还有你的数据库类型是否支持中文?CHAR的一般支持,但是否用binary存储双字节码<br /><br />34. 问：对于JFrame，hide()，show()与setVisibel()有什么区别吗？<br />答：<br />setVisible()从Component继承过来，而hide(),show()从Window里面继承过来。<br />Makes the Window visible. If the Window and/or its owner are not yet displa yable, both are made displayable. The Window will <br /><br />be validated prior to being made visible. If t he Window is already visible, this will bring the Window to the front. 区别在<br /><br />这。<br />36. 问：sendRedirect为什么不可以转到mms协议的地址的？response.sendRedirect("mms://missiah.adsldns.org:9394");<br />答：java平台目前实现的protocol中并没有mms,你可以取系统属性java.protocol.handler.pkgs看看它的值中有没有mms,所以如果要想重定向<br /><br />到mms://host这样和URL,只有生成客户端的JAVASCRIPT让它来重定向<br /><br />37. 问：JTable中怎样定义各个Columns和Width和怎样设置表格的内容靠做靠右或居中？<br />答：<br />TableColumn tc = table.getColumn("Name");//取得列名为"Name"的列Handle<br />int currentWidth = tc.getPreferredWidth(); //取得该列当前的宽度<br />tc.setPreferredWidth(200); //设置当前列宽<br />tc.setMaxWidth(200); //设置该列最大宽度<br />tc.setMinWidth(50); //设置该列最小宽度<br /><br />38. 问：批操作是否可用于select语句？<br />答：批操作其实是指成批理更新的操作,绝对不可能用于select操作。<br /><br />39. 问：为什么jsp路径太深文件名太长就无法读取文件？<br />答：path不能超过255长度,不然就找不到了.这是作业系统的事。<br /><br />40. 问：如何让页面不保留缓存？<br />答：<br />&lt;% <br />response.setHeader("Pragma","No-cache"); <br />response.setHeader("Cache-Control","no-cache"); <br />response.setDateHeader("Expires", 0); <br />%&gt;<br /><br />41. 问：我的applet code 中用到jbutton 时就出错是否由于ie不支持swing package 请问应怎么办？<br />答：JBUTTON是SWING基本包啊,只要把jdk/jre/lib/rt.jar放在classpath就行了.不要加载任何别的库。<br /><br />42. 问：不知道java是否支持midi格式，如果支持，应该怎么把wave格式转换成midi格式？<br />答：目前还不行,可以看一下JMF三个版中对MIDI的格式支持是read only,而WAVE是read/write,MIDI只能播放,不能生成。<br /><br />43. 问：在jsp里面防止用户直接输入url进去页面，应该怎么做呢？<br />答：<br />一是从web服务器控制,对某一目录的所有访问要通过验证.<br />二是在要访问的页面中加入控制.这个一般用session,也可以用请求状态码实现<br /><br />44. 问：<br />例如后台有一计算应用程序（此程序运算起来很慢，可持续几分钟到几小时，这不管，主要是能激活它），客户机讲任务提交后，服务器对任<br /><br />务进行检测无误后将向服务器后台程序发送信息，并将其激活。要求如下：<br />1）首先将后台程序激活，让它执行此任务（比如，前台将计算的C代码提交上后，后台程序程序能马上调用，并将其运行）<br />2）要在前台JSP页面中显示运行过程信息（由于运行时间长，希望让客户看到运行过程中产生的信息）如何完成？<br /><br />答：<br />活是可以的,运行一个shell让它去运行后台就行,但不可能取出运行信息,因为HTTP的超时限制不可能永远等你后台运行的,而且信息如果要动态<br /><br />实时推出来就得用SERVER PUSH技术。<br /><br />45. 问：数据库是datetime 型 ，插入当前时间到数据库？<br />答：<br />java.sql.Date sqlDate = new java.sql.Date();<br />PreparedStatement pstmt = conn.prepareStatement("insert into foo(time) values(?)");<br />pstmt.setDate(1,sqlDate);<br />pstmt.executeUpdate();<br /><br />46. 问：怎样去掉字符串前后的空格。<br />答：String.trim()<br /><br />47. 问：session怎样存取int类型的变量？<br />答：<br />session.setAttribute("int", i+"");<br />int i = Integer.parseInt(session.getAttribute("int"));<br /><br />48. 问：在javascript中如何使输出的float类型的数据保留两位小数。<br />答：Math.round(aaaaa*100)/100。<br /><br />49. 问：在bean种如何调用session<br />答：<br />你可把session对象作为一个参数传给bean<br />在BEAN中定义HttpServletRequest request;HttpSession session;<br />然后<br />session = request.getSession(false);<br />false为如果session为空,不建立新的session<br />将session作为参数传入.其实只要将request传入就可以<br /><br />50. 问：如何把txt或word文件按原格式显示在jsp页面或servlet上？<br />答：<br />其实一个非常简单的解决方法就是在服务器的MIME中指点定TEXT和WORD的解释方式,然后用JSP或SERVLET生成它就行了,客户端就会自动调用相<br /><br />应程序打开你的文档。<br />如果是希望按原格式的显示在页面上，而不是调用其他程序打开那么你可以试试用WEBDEV协议,可以说这是MS的一个亮点.它是在WEB方式下打开<br /><br />文档,和共享一样.完全符合的要求。<br /><br />51. 问：object的clone方法为什么不能直接调用？<br />答：<br />这个方法在object中是protected<br />为什么要把这个方法定义为protected,这是一个折中,它的目的是想知道你这个方法在Object里只是一个标记,而不是一个实现,比如<br /><br />public class Object<br />{<br />.............<br />protected Object clone()<br />{}<br />}<br /><br />所以直接继承的clone()方法并不能做任何时,你要使用这个方法就要重载这个方法并放宽访问权限为public,或实现cloneable接口. 但它没法<br /><br />这样告诉你它没有真的实现,只好用protected 方法加以警示<br /><br />52. 问：一个页面中如何刷新另外一个页面？<br />答：<br />要求是这些面页必须有关联,一是它们都有一个共同的顶层帧,也就是说是一个帧内的分级页面,当然可以是任意级,帧内再分帧也可以,另一个可<br /><br />能是当前窗口弹出的窗口,如果没有联系,那就不可能用一个页面刷新另一个页面. 帧内只要一级一级引用就行了. <br /><br />比如在左帧中一个页面中写top.right.location.reload();那么名为right的右帧中的页面就会刷新. 弹出的一样,用open时的名称刷新子窗口,<br /><br />子窗口用opener刷新主窗口<br /><br />53. 问：如何在jsp中怎么样向客户端写cookies？<br />答：<br />Cookie coo = new Cookie(name, value);<br />HttpServletResponse.addCookie(name);<br /><br />54. 问：为什么jTextField1.setText("aaabbb");jTextField2.setText("AAABBB"); 得到的字体宽度不一样？<br />答：就是说如果不是指定为等宽字体,每个字体的宽度都是不一样的.因此JAVA中用FontMetrics 类来取字符宽度。<br /><br />55. 问：String kk=application/octet-stream; name="G:/SMBCrack.exe";如何得到SMBCrack.exe？<br />答：<br />这应该是解析上传时候的二进制流得到的这一行里面格式是固定的，取到name="后面的字符串，然后把";去掉。然后取最后一个/后面的所有字<br /><br />符组成一个新字符串就行了。<br /><br />56. 问：如何传值并不刷新页面？<br />答：<br />弹出一个页面进行值的选择或者输入，ok后使用将值传给原窗口，使用javascript关闭打开的窗口即可：<br />window.close();opener.focus();<br /><br />57. 问：有一个字符串："EF0C114EA4"，如何变为a[0] = 0xEF a[1] = 0x0C a[2] = 0x11 a[3] = 0x4E a[4] = 0xA4？<br />答：<br />String str="EF0C114EA4F";<br />out.print(str+"&lt;br&gt;");<br />int l=str.length()/2+str.length()%2,j=0,k=0;<br />String[] a=new String[l];<br />for(int i=0;i&lt;l;i++){<br />if(str.length()-j==1)<br />k=str.length();<br />else<br />k=j+2;<br />a="0x"+str.substring(j,k);<br />out.print("a["+Integer.toString(i)+"]="+a+"&lt;br&gt;");<br />j+=2;<br />}<br /><br />58. 问：怎样将一个int转换成一个四字节的byte数组？<br />答：<br />int x = 1234567;<br />byte[] b = new byte[4];<br />for(int i=0;i&lt;b.length;i++)<br />{<br />b = (x &gt;&gt;( i*8)) &amp; 0xFF;<br />}<br /><br />59. 问：indexOf()的使用需要注意什么？<br />答：参数是指从第几位（1，2，3，...）开始搜索，而返回值是指搜索到的位置（0，1，2，3.......）注意是从零算起的。<br /><br />60. 问：在Java应用程序中如何动态的添加一个按钮？<br />答：<br />这里涉及一个组件重绘的问题,组件要先于panel被显示之处存在,如果一panel已经显示了,那么加在上面你能看到吗?但如果在同一个panel上, <br /><br />先有button A,假如按下它加了butt on B,这时你如果使整个panel重给,那么A本身要重绘,它的事件监听就没有了,当然也就加不成B了,所以如<br /><br />果要先有另一个panel,当按A时把B加在这个panel上并重绘这个paenl,其实更好的方法是先把B加在panel中,同一个也行.把它setVisiable(flas<br /><br />e),按A时设为 true。<br /><br />61. 问：book mybook=new book(bookid);book是servlet,出错。<br />答：<br />book是servlet,能book mybook=new book(bookid);<br />说明自己实现了servlet容器?不然,servlet能让你自己去调用? servlet如果调用其实和EJB连1%的区别都没有,它们都是自己继承或实现一些接<br /><br />口,在这些父类或接口中实现了如果和容器"打交道"的方法,然后容器调用这些方法来管理它,让它生成实例,池化,钝化,销毁,再生等.所以这样<br /><br />写是错误的。<br /><br />62. 问：给定一个字符串5*(5+9)/7怎样计算出结果？<br />答：<br />可有两种方法<br />1。用堆栈完成<br />2。最简单的方法，不用编程，如果有任何一个数据库的化，用select (5*(5+9)/7) from oneTable<br /><br />63. 问：如何实现递交表单内容的加密解密？<br />答：<br />如果你用IE目前只能用SSL协议,这一层不要你考虑,否则只你用你自己的工具加密传输,接收后再解密友,至于如何加解,如果要和公认的系统结<br /><br />合,就用通用的MD5,RAS等公开算法,如果你只是自己传自己解,你随便按你的想法把数据加上一些东西,取回来按规则减掉这些东西,我敢保证除<br /><br />你自己没有任何人能知道解密方法.<br /><br />64. 问：为什么Integer.parseInt("+1");会抛出NumberFormatException的异常？<br />答：因为"+"运行算在JAVA中被重载.系统无法确定你用的是算术加还是字符+。<br />这一点可以在JAVASCRIPT中更好地理解:<br />&lt;form name="t"&gt;&lt;input name=s value=1234&gt;&lt;/form&gt;<br />var a = document.t.s.value+1;<br />这时a = 12345,因为document.t.s.value作为字符串.但var a = document.t.s.value-1;<br />a 就是1233,因为系统知道-运算肯定是算术运行.所以把document.t.s.value转换成数字.<br /><br /><br />65. 问：hashCode() 有什么用为什么有时候需要覆盖Object里的hashcode()方法？<br />答：这就是这个对象的身份证啊,要不如何区分哪个对象。<br /><br />66. 问：怎样在tomcat中实现一个定时执行的东东？<br />答：<br />在应用程序启动时自动运行。servlet2.3中定义了ServletListener,监听Servlet Con text的启动或则关闭（可在配置文件中配置），启动时<br /><br />触发一个守护程序的运行(可以实现java.util.Timer或则 javax.swing.Timer).<br /><br />67. 问：程序可以输出自己吗？<br />答：孔德悖论这个非常有名的法则.就是说任何程序都不可能输出自己.<br /><br />68. 问：能够把字符转化成ASCII码？比如将 A 转化成 65？<br />答：<br />int a='A';<br />out.println(a);<br /><br />69. 问：如何区分输入的文字中的全角与半角？<br />答：由于不能分辨出全角和半角字符的值有什么规律,只好把全角符号牧举出来了.<br /><br />70. 问：用户注册后的自动发信程序该怎么做？<br />答：<br />这种发信程序不考虑性能,因为不可能1秒就有一个人注册,我们说的考虑性能的发信程序是指上百万封信在队列里要不停发送的那种,象你这个<br /><br />随便怎么写一个程序都行,没有必要用JAVAMAIL.只要指定一个发信的服务器然后用cocket连它的25口就行了.自己用SOCKET连SMTP的25口发一封<br /><br />信就好象两个邻居之间送一样东西,直接递过去得了,用JAVAMAIL,消息机制就是你把这个东西从邮局寄给你<img src ="http://www.blogjava.net/pear/aggbug/69738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-09-14 19:25 <a href="http://www.blogjava.net/pear/archive/2006/09/14/69738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Server Push详解(转载)</title><link>http://www.blogjava.net/pear/archive/2006/09/14/69737.html</link><dc:creator>pear</dc:creator><author>pear</author><pubDate>Thu, 14 Sep 2006 11:16:00 GMT</pubDate><guid>http://www.blogjava.net/pear/archive/2006/09/14/69737.html</guid><wfw:comment>http://www.blogjava.net/pear/comments/69737.html</wfw:comment><comments>http://www.blogjava.net/pear/archive/2006/09/14/69737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pear/comments/commentRss/69737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pear/services/trackbacks/69737.html</trackback:ping><description><![CDATA[
		<p>
				<font class="news">
						<font size="2">服务器推送(Server Push) <br /><br />推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据，浏览器显示这些数据，同时保证与服务器的连接。当服务器需要再次发送一批数据时，浏览器显示数据并保持连接。以后，服务器仍然可以发送批量数据，浏览器继续显示数据，依次类推。 <br /><br />客户端拉曳(Client Pull) <br /><br />在客户端拖曳技术中，服务器发送一批数据，在HTTP响应或文档头标记中插入指令，让浏览器“在5秒内再次装入这些数据”或“10秒内前往某URL装入数据”。当指定的时间达到时，客户端就按照服务器的指示去做，或者刷新当前数据，或者调入新的数据。 <br /><br />其实push 和 pull 这两种技术手段非常不同，但目的几乎一致，都是为了给最终用户方便的提供最新信息。 <br /><br />在服务器推送技术中，HTTP 连接一直保持着，直到服务器知道自己已结束发送数据并发送一个结束信号，或者客户端中断连接。而在客户端拖曳技术中，并不保持HTTP连接，相反，客户端被告知合时建立新连接，以及建立连接是获取什么数据。 <br /><br />在服务器推送中，奇妙之处在于“multipart/mixed”格式的MIME，它能够使一个报文（或HTTP响应）包含许多数据项、在客户端拖曳中，奇妙之处在于HTTP响应头标（或等效的HTML元素），它能告知客户端在指定的延时时间后执行何种动作。 <br /><br />服务器推送通常效率要比客户端拖曳效率高，因为它不必为后续数据建立新的连接。由于始终保持连接，即使没有数据传输时也是这样，因此服务器必须愿意分配这些TCP/IP端口，对于TCP/IP端口数有限的服务器这将是一个严重的问题。 <br /><br />客户端拖曳效率低，因为这必须每次为传送数据建立新的连接。但是它不必始终保持连接。 <br /><br />在实际情况中，建立HTTP连接通常需要花费相当多的时间，多达一秒甚至更多。因此从性能上考虑，服务器推送对于最终用户更有吸引力，特别是对于需要经常更新信息的情况下。 <br /><br />服务器推送相对客户端拖曳的另一点优势是，服务器推送相对比较容易控制。例如，服务器每一次推送时都保持一个连接，但它又随时可以关闭其中的任何连接，而不需要在服务器上设置特殊的算法。而客户端拖曳在同样的情况下要麻烦许多，它每次要与服务器建立连接，服务器为了处理将客户端拖曳请求与特定的最终用户匹配等情况，需要使用相当麻烦的算法。 <br /><br />如果实现服务器推送的CGI程序是使用Shell脚本语言编写的，有时会存在一些问题。例如，客户端最终用户中断连接，Shell程序通常不能注意到，这将使资源毫无用处的浪费掉，解决这一问题的办法是用Perl或者C来编写这类CGI程序，以使用户中断连接时能够结束运行。 <br /><br /><br />如上所述，在服务器推送中，多个响应中连接始终保持，使服务器可在任何时间发送更多的数据。一个明显的好处是服务器完全能够控制更新数据的时间和频率。另外，这种方法效率高，因为始终保持连接。缺点是保持连接状态会浪费服务器端的资源。服务器推送还比较容易中断。 <br /><br />接下来就大概说说服务器推送技术 <br />服务器在响应请求时，HTTP使用MIME报文格式来封装数据。通常一个HTTP响应只能包含一个数据块。但MIME有一种机制可用一个报文（或HTTP响应）表示将多个数据块，这种机制就是成为“multipart/mixed”的标准MIME类型。multipart/mixed报文大体格式如下： <br />Content-type:multipart/mixed;boundary=ThisRandomString <br />--ThisRandomString <br />Content-type:text/plain <br />第一个对象的数据。 <br />--ThisRandomString <br />Content-type:text/plain <br />第二个对象的数据。 <br />--ThisRandomString-- <br /><br />上述报文包括两上数据块，二者的类型都是“text/plain”。最后一个“ThisRandomString”后的两条短线（--）表示报文结束，后面没有数据。 <br /><br />对于服务器推送，使用一个“multipart/mixed”类型的变种--multipart/x-mixed-replace。这里，“x-”表示属于实验类型。“replace”表示每一个新数据块都会代替前一个数据块。也就是说，新数据不是附加到旧数据之后，而是替代它。 <br /><br />下面是实际使用的“multipart/x-mixed-replace”类型： <br />Content-type:multipart/x-mixed-replace;boundary=ThisRandomString <br />--ThisRandomString <br />Content-type:text/plain <br />第一个对象的数据 <br />--ThisRandomString <br />Content-type:text/plain <br />第二个（最后一个）对象的数据。 <br />--ThisRandomString-- <br />使用这一技术的关键是，服务器并不是推送整个“multipart/x-mixed-replace”报文，而是每次发送后数据块。 <br />HTTP连接始终保持，因而服务器可以按自己需要的速度和频率推送新数据，两个数据块之间浏览器仅需在当前窗口等候，用户甚至可以到其他窗口做别的事情，当服务器需要发送新数据时，它只是源（ABC输入法没那个字*&amp;^$#）传输管道发送数据块，客户端相应的窗口进行自我更新。 <br /><br />在服务器推送技术中，“multipart/x-mixed-replace”类型的报文由唯一的边界线组成，这些边界线分割每个数据块。每个数据块都有自己的头标，因而能够指定对象相关的内容类型和其他信息。由于“multipart/x-mixed-replace”的特性是每一新数据块取代前一数据对象，因而浏览器中总是显示最新的数据对象。 <br />“multipart/x-mixed-replace”报文没有结尾。也就是说，服务器可以永远保持连接，并发送所需的数据。如果用户不再在浏览器窗口中显示数据流，或者浏览器到服务器间的连接中间（例如用户按“STOP”按钮），服务器的推送才会中断。这是人们使用服务器推送的典型方式。 <br /><br />当浏览器发现“Content-type”头标或到达头标结束处时，浏览器窗口中的前一个文档被清除，并开始显示下一个文档。发现下一个报文边界时，就认为当前数据块（文档）已经结束。 <br />总之，服务器推送的数据由一组头标（通常包括“Content-type”）、数据本身和分割符（报文边界）三部分组成。浏览器看到分割符时，它保持状态不变，直到下一个数据块到达。 <br /><br />将以上概念进行用编程方法实现，就可以得到实际的服务器推送程序。例如，下面的Unix shell程序将使浏览器每5秒显示一次服务器上的进程列表： <br />#!/bin/sh <br />echo "HTTP/1.1 200" <br />echo "Content-type: multipart/x-mixed-replace;boundary=--ThisRandomString--" <br />echo "" <br />echo "--ThisRandomString--" <br />while true <br />do <br />echo "Content-type: text/html" <br />echo "" <br />echo "h2Processes on this machine updated every 5 seconds/h2" <br />echo "time:" <br />date <br />echo "p" <br />echo "plaintext" <br />ps -el <br />echo "--ThisRandomString--" <br />sleep 5 <br />done <br />注意到，边界设置在sleep语句之前发送，这能够确保浏览器清除其缓冲区，并显示所接收到的最新数据。 <br />NCSA HTTPD用户在内容类型中不能使用空格，包括边界参数。NCSA HTTPD只能将不带空格字符的字符串作为内容类型。如果在内容类型行中存在空格（冒号后面的空格除外），空格后的任何文本都会被删除。 <br />下面的示例是正确的： <br />Content-type: multipart/x-mixed-replace;boundary=ThisRandomString <br />而下例则不能正常工作，因为它在中间有空格： <br />Content-type: multipart/x-mixed-replace; boundary=ThisRandomString <br />服务器推送的另一个优点是它可以针对单个内联图象进行。包括图象的文档可以由服务器定时或定周期进行更新。而实现这一点非常简单：只需使IMG元素的SRC属性指向推送一系列图象的URL即可。 <br /><br />如果服务器推送用于单个内联图象，文档中的图象就会一次次被新推送来的图象所代替，而文档本身不需变化（假设文档没有进行服务器推送）。这样，WEB页面中有限的动画就可以为静态画面所代替。 <br /><br />客户端拖曳 <br /><br />客户端拖曳的一个简单用法是使文档按固定周期自动重载。例如，考虑下面的HTML文档： <br />&lt;META HTTP-EQUIV="Refresh" CONTENT=1&gt; <br />&lt;TITLE&gt;Document ONE&lt;/TITLE&gt; <br />&lt;H1&gt;This is Document ONE!&lt;/H1&gt; <br />Here's some text.&lt;P&gt; <br />如果将它载入支持动态文档的浏览器（Netscape 1.1以上，Internet Explorer和Mosaic也支持客户端拖曳），它将每隔一秒将自己重载一次。 <br />由于META元素实际是在HTML文档中模拟HTTP响应头标，所以它能够告知浏览器将自身信息当作HTTP响应使用。上例中的META标记相当于： <br />Refresh:1 <br />这样，实际上就是HTTP头标告知浏览器每一秒更新一次文档。如果需要延时是12秒，那么就是这样的指令： <br />&lt;META HTTP-RQUIV="Refresh" CONTENT=12&gt; <br />那么它等效于： <br />Refresh:12 <br /><br />关于客户端的拖曳我也懒的继续写下去，关于怎么使客户端自动申请其他URL的数据话，请使用如下： <br />&lt;META HTTP-EQUIV="Refresh" CONTENT="12;URL=http://icools.yeah.net/"&gt; <br />注意的是，此处的URL不能使用相对路径，必须全部指定。 <br /><br />其中时间间隔可以设置为0，这样浏览器在当前文档显示完毕后，以最快的速度载入新的数据！</font>
				</font>  </p>
		<p align="right">
				<a href="http://www.it315.org/articles/web.htm">
						<font size="4">返回</font>
				</a>
				<font size="2">
						<br />
				</font>  <font size="2"></font></p>
		<table cellspacing="0" cellpadding="0" width="90%" align="center" border="0">
				<tbody>
						<tr>
						</tr>
				</tbody>
		</table>
		<table cellspacing="0" cellpadding="0" width="90%" align="center" border="0">
				<tbody>
						<tr>
								<td>    <font size="2">IT315发表的文档，均来自于相关网站公开发表的内容，如果您认为本站发表的文章侵犯了您的著作权，请及时与本站取得联系，本站将在第一时间内删除。如果您有好的文章也可以通过Email提供给我们，如果有问题可以在留言板提出。</font></td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/pear/aggbug/69737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pear/" target="_blank">pear</a> 2006-09-14 19:16 <a href="http://www.blogjava.net/pear/archive/2006/09/14/69737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>