﻿<?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-ShQ</title><link>http://www.blogjava.net/ShQ/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 10:34:07 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 10:34:07 GMT</pubDate><ttl>60</ttl><item><title>杂记1</title><link>http://www.blogjava.net/ShQ/archive/2006/03/08/34325.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Wed, 08 Mar 2006 10:57:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2006/03/08/34325.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/34325.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2006/03/08/34325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/34325.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/34325.html</trackback:ping><description><![CDATA[<P>Object<BR>Object有方法wait(),notify()。</P>
<P>Class<BR>Object have a method getClass(). the return of the method is Class.<BR>class Class is a important Class.<BR>通过它可以得到，关于类或接口的相关信息，如属于那个包，父类，子类等。<BR>还有一些比较实际的方法：<BR>URL getResource(String name)<BR>InputStream getResourceAsStream(String name)<BR>eg.InputStream is = getClass().getResourceAsStream("/db.properties");</P>
<P><BR>Properties<BR>一个有定格式的文件或一个xml文件，在java中的存在形式。<BR>REF:JAVADOC</P>
<P><BR>PrintWriter<BR>以print method的形式往writer(eg.FileWriter)中写</P>
<P><BR>jxl.jar<BR>操作excel文件，非常方便</P>
<P>连接池<BR>好处：<BR>数据库连接池允许应用程序重用已存在于池中的数据库连接，以避免反复的建立新的数据库连接。<BR>*1、不用每次数据库操作都去调用一次连接到数据库的操作，那个操作是很耗资源的，现在你申请的时候只是在一个数组中找一个成员而已； <BR>*2、可以很好的控制你的应用对于数据库的影响，因为如果你的程序写的不好的话，就象内存泄漏一样，会导致实际连接到数据的连接越来越多，从而导致数据库本身的崩溃，而现在确定只有10个连接的话，最差的后果就是应用程序无法操作数据库，那么应用可以检测这个异常，大不了采用释放全部连接重来一遍就好了，系统自愈比较好控制。 </P>
<P>实现方法：<BR>1.可以利用web server提供的工具配置连接池<BR>2.可以自己写连接池的管理程序。（如dbconnection工程)</P>
<P><BR>对http协议的重新认识<BR>简单的说就是超文本传输协议。<BR>可以用浏览器通过http协议浏览网页，下载到请求的文件，就展现之。<BR>也可以通过下载工具（如迅雷），下载文件（包括html文件和jsp文件，都可以下到。但对于jsp页面一般都是经过jsp container处理生成的html文件）</P>
<P><BR>JDBC<BR>通过Java向database中insert中文，往往回出现乱码，我想问题就主要出在“驱动程序（如mysql的连接驱动）将把 Java 类型映射为相应的 JDBC 类型（遵循该 JDBC Guide中§8.6.2 “映射 Java 和 JDBC 类型”表中所指定的映射）”<BR>乱码问题（有待解决和研究）<BR><BR><BR>PreparedStatement(有效的提高效率)<BR>我们绝对应该使用包含参数化的查询语句的prepared statement。这样数据库就会重用准备过的存取方案。<BR>J2EE服务器保持着连接池中每一个连接准备过的prepared statement列表。<BR>当我们在一个连接上调用preparedStatement时，应用服务器会检查这个statement是否曾经准备过。如果是，这个PreparedStatement会被返回给应用程序。如果否，调用会被转给JDBC驱动程序，然后将新生成的statement对象存入连接缓存。<BR>REF: ref/PreparedStatement(JDBC 指南入门6).htm and ref/PreparedStatement是如何大幅度提高性能的.mht</P><img src ="http://www.blogjava.net/ShQ/aggbug/34325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2006-03-08 18:57 <a href="http://www.blogjava.net/ShQ/archive/2006/03/08/34325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>加密介绍</title><link>http://www.blogjava.net/ShQ/archive/2006/02/28/32928.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Tue, 28 Feb 2006 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2006/02/28/32928.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/32928.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2006/02/28/32928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/32928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/32928.html</trackback:ping><description><![CDATA[向对java安全感兴趣的同学，推荐O'REILLY出版的 &lt;&lt;Java™ Security&gt;&gt;<BR>下面是自己关于其中第七章 加密介绍的一点理解。<BR>密钥：<BR>1. 单独出现 秘密密钥 secret key<BR>2. 成对出现 一个公开密钥 public key，一个私有密钥private key。<BR><BR>公钥私钥的作用：<BR>1. 当某人要给你发机密信息时，要用你的公钥加密，而只有作为唯一拥有对应私钥的人才可以解密该信息。<BR>2. 当用在数字签名时，该使用顺序正好反过来。<BR><BR>加密vs鉴别<BR>加密是对要传输信息的保护。<BR>鉴别是要确定该信息是来自正确的实体，并且传输的内容并没有在传输过程中被更改。（鉴别中用到加密，其中数字签名就是鉴别的一种普遍方式。）<BR><BR>数字签名<BR>相关技术 消息摘要和公钥私钥算法（参阅&lt;&lt;Java™ Security&gt;&gt;）<BR><BR>证书<BR>用于证明实体的合法性，由专门的权威的机构颁布。<BR>一个可以申请个人证书的CA， Thawte Personal。<BR><BR>java中的相关工具<BR>keytool （可以生产管理公钥密钥对，和请求证书）<BR>jarsigner （jar签名工具）<BR>具体参阅&lt;&lt;Java™ Security&gt;&gt;<BR><BR>To be continued.<BR><img src ="http://www.blogjava.net/ShQ/aggbug/32928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2006-02-28 22:52 <a href="http://www.blogjava.net/ShQ/archive/2006/02/28/32928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>create trusted applet</title><link>http://www.blogjava.net/ShQ/archive/2006/02/28/32925.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Tue, 28 Feb 2006 13:53:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2006/02/28/32925.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/32925.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2006/02/28/32925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/32925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/32925.html</trackback:ping><description><![CDATA[<P>关键字:&nbsp;trusted applet,<FONT face=Arial>数字签名</FONT><BR>需求:验证wml文件的合法性,wml文件位于客户端.<BR>方案:<BR>1.使用applet,编一个wml validator java类.<BR>2.将客户端要验证的wml文件,传到服务器,验证完,后用jsp模拟呈现.(缺点较麻烦,用jsp模拟可能会不是很好.)<BR>抉择:<BR>选择方案1.<BR>需要解决的问题:<BR>创建可信任的applet.参考<A href="http://www.developer.com">www.developer.com</A><BR>引申:<BR>java工具 keytool, jarsigner, 数字签名<BR>讨论:<BR>有人说applet过时了,我觉得向applet的最大特点,就是在客户端本地运行.这种特性,在某些场合还是需要的.<BR>经营:<BR>html中需要的applet类,它的类路径,并不与web server(以及容器如tomcat)中类位置的设定(tomcat会到几个默认的路径中去找相关的class)有关,而是与服务器中java的classpath有关.<BR>误以为applet的class也与容器有关,搞了一下午.郁闷.</P><img src ="http://www.blogjava.net/ShQ/aggbug/32925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2006-02-28 21:53 <a href="http://www.blogjava.net/ShQ/archive/2006/02/28/32925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>j2me概要（摘录）</title><link>http://www.blogjava.net/ShQ/archive/2005/08/30/11559.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Tue, 30 Aug 2005 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2005/08/30/11559.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/11559.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2005/08/30/11559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/11559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/11559.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: J2ME 为小型设备带来了 Java 语言的跨平台功能，允许移动无线设备共享应用程序.J2ME 使用配置和简表定制 Java 运行时环境 (JRE)。作为一个完整的 JRE，J2ME 由配置和简表组成，配置决定了使用的 JVM，而简表通过添加特定于域的类来定义应用程序。&nbsp;配置将基本运行时环境定义为一组核心类和一个运行在特定类型设备上的特定 JVM.简表定义应用程序；特别地，它向 J2ME...&nbsp;&nbsp;<a href='http://www.blogjava.net/ShQ/archive/2005/08/30/11559.html'>阅读全文</a><img src ="http://www.blogjava.net/ShQ/aggbug/11559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2005-08-30 14:29 <a href="http://www.blogjava.net/ShQ/archive/2005/08/30/11559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>摘录“关于运用类反射机制简化Struts应用程序的开发”</title><link>http://www.blogjava.net/ShQ/archive/2005/08/28/11396.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Sun, 28 Aug 2005 15:54:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2005/08/28/11396.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/11396.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2005/08/28/11396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/11396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/11396.html</trackback:ping><description><![CDATA[为了方便以后再次浏览，现在摘录一些东西。<BR><BR>文章来自“ibm&nbsp;developerworks”地址:<A href="http://www-128.ibm.com/developerworks/cn/java/l-struts-reflect/">http://www-128.ibm.com/developerworks/cn/java/l-struts-reflect/</A><BR><BR>ActionForm是一个很重要的概念,它的主要功能就是为Action的操作提供与客户表单相映射的数据（如果在客户指定的情况下，还包括对数据进行校验）。Action根据业务逻辑的需要，对数据状态进行修改，在改变系统状态后，ActionForm则自动的回写新的数据状态并保持。<BR><BR>正如Entity EJB对J2EE的重大贡献一样，Entity EJB使得程序员对二维关系数据库的存取对象化了，程序员可以使用Set 或者Get等面向对象的方法来操纵关系数据库的数据，而ActionForm也使得程序员对网页的数据存取奇迹般的对象化了，程序员同样也可以使用Set 或者Get等面向对象的方法存取网页上的数据，这是一个开发模式方式上的重大转变。基于此，我个人认为ActionForm与JSP即VIEW层的关系最好是一对一的关系，这样，在理解上会更清晰一些。但是，这样也会带来一个很现实的问题，在一个应用程序中，也许有非常多得JSP页面，如果每个ActionForm 都只对应一个JSP页面，那么系统的Java代码就会急剧膨胀起来，而且，每个ActionForm都是只有很简单的Set或者Get方法存取数据，那么，如何简化Struts应用程序的开发呢？ 
<P>在Struts1.1 中，Struts引入了DynaActionForm和Dyna Bean,试图解决这个问题，在我看来，DynaActionForm的引入，破坏了对网页存取对象化的概念，使开发人员重新回到了使用HashTable、Map、Collection、ArrayList等集合对象来实现对数据进行存取的老路上来。虽然应用程序的灵活性大大增加了，但是代码的可读性也大大降低了，开发人员之间的交流难度也增加了。 </P><FONT color=#ff1493>此文章看了一半不太懂，以后在看。其中提到“放射机制”，应该先看看这个东西。<BR></FONT><BR><FONT style="BACKGROUND-COLOR: #ffc0cb" color=#0000ff><FONT style="BACKGROUND-COLOR: #9acd32">关于反射机制的一遍文章，地址：<A href="http://www.66study.com/Article/web/JSP/J2EE/200506/26832.html">http://www.66study.com/Article/web/JSP/J2EE/200506/26832.html</A><BR><BR>自己的理解：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;反射正如其名，使自己得到关于自身的信息，并可以更改。（它是java的特征之一）java具有反射机制，是因为有java.lang.reflection包，更深的说是在jvm上的运行方式不一样。（<FONT color=#000000>使用反射基本上是一种解释操作，我们可以告诉JVM，我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。</FONT>）<FONT color=#000000>它允许程序创建和控制任何类的对象(根据安全性限制)，无需提前硬编码目标类。<FONT color=#ff1493>这些特性使得反射特别适用于创建以非常普通的方式与对象协作的库。例如，反射经常在持续存储对象为数据库、XML或其它外部格式的<FONT color=#000080>框架</FONT>中使用。</FONT>Java reflection 非常有用，<FONT color=#0000ff>它使类和数据结构能按名称动态检索相关信息，并允许在运行着的程序中操作这些信息。</FONT>Java 的这一特性非常强大，并且是其它一些常用语言，如 C、C++、Fortran 或者 Pascal 等都不具备的。<BR>
<DIV><BR>但反射有两个缺点。第一个是性能问题。用于字段和方法接入时反射要远慢于直接代码。性能问题的程度取决于程序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分，缓慢的性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重要。</DIV>
<DIV>许多应用中更严重的一个缺点是<FONT color=#ff1493>使用反射会模糊程序内部实际要发生的事情</FONT>。程序人员希望在源代码中看到程序的逻辑，<FONT color=#0000ff>反射等绕过了源代码的技术（）</FONT>会带来维护问题。反射代码比相应的直接代码更复杂，正如性能比较的代码实例中看到的一样。解决这些问题的最佳方案是保守（谨慎）地使用反射——仅在它可以真正增加灵活性的地方——记录其在目标类中的使用。<BR><BR>下面这个例子：既然能用直接代码实现，有何必用reflection。仔细考虑，两者有不同之处，直接代码只能访问被声明为例如public的，而reflection的功能更强。即使被声明为private也可以被访问。（当具体还是不太明白reflection是怎么用的，有何用。）<BR><BR>(还得参考些东西，一个现成的用reflection的例子，就是struts，在看struts时，可以在研究一下reflection。)<BR><BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG id=Codehighlighter1_38_258_Open_Image onclick="this.style.display='none'; Codehighlighter1_38_258_Open_Text.style.display='none'; Codehighlighter1_38_258_Closed_Image.style.display='inline'; Codehighlighter1_38_258_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_38_258_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_258_Closed_Text.style.display='none'; Codehighlighter1_38_258_Open_Image.style.display='inline'; Codehighlighter1_38_258_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;accessReference(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;loops)&nbsp;</SPAN><SPAN id=Codehighlighter1_38_258_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_38_258_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;TimingClass&nbsp;timing&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;TimingClass();<BR><IMG id=Codehighlighter1_132_229_Open_Image onclick="this.style.display='none'; Codehighlighter1_132_229_Open_Text.style.display='none'; Codehighlighter1_132_229_Closed_Image.style.display='inline'; Codehighlighter1_132_229_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_132_229_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_132_229_Closed_Text.style.display='none'; Codehighlighter1_132_229_Open_Image.style.display='inline'; Codehighlighter1_132_229_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;index&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;index&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;loops;&nbsp;index</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN id=Codehighlighter1_132_229_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_132_229_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timing.m_value&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(timing.m_value&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;ADDITIVE_VALUE)&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MULTIPLIER_VALUE;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;timing.m_value;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;<BR><IMG id=Codehighlighter1_318_799_Open_Image onclick="this.style.display='none'; Codehighlighter1_318_799_Open_Text.style.display='none'; Codehighlighter1_318_799_Closed_Image.style.display='inline'; Codehighlighter1_318_799_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_318_799_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_318_799_Closed_Text.style.display='none'; Codehighlighter1_318_799_Open_Image.style.display='inline'; Codehighlighter1_318_799_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;accessReflection(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;loops)&nbsp;throws&nbsp;Exception&nbsp;</SPAN><SPAN id=Codehighlighter1_318_799_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_318_799_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;TimingClass&nbsp;timing&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;TimingClass();<BR><IMG id=Codehighlighter1_372_696_Open_Image onclick="this.style.display='none'; Codehighlighter1_372_696_Open_Text.style.display='none'; Codehighlighter1_372_696_Closed_Image.style.display='inline'; Codehighlighter1_372_696_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_372_696_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_372_696_Closed_Text.style.display='none'; Codehighlighter1_372_696_Open_Image.style.display='inline'; Codehighlighter1_372_696_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_372_696_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_372_696_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;field&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;TimingClass.</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">.<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getDeclaredField(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">m_value</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG id=Codehighlighter1_508_659_Open_Image onclick="this.style.display='none'; Codehighlighter1_508_659_Open_Text.style.display='none'; Codehighlighter1_508_659_Closed_Image.style.display='inline'; Codehighlighter1_508_659_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_508_659_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_508_659_Closed_Text.style.display='none'; Codehighlighter1_508_659_Open_Image.style.display='inline'; Codehighlighter1_508_659_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;index&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;index&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;loops;&nbsp;index</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN id=Codehighlighter1_508_659_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_508_659_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;value&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(field.getInt(timing)&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADDITIVE_VALUE)&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;MULTIPLIER_VALUE;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field.setInt(timing,&nbsp;value);<BR><IMG src="http://www.blogjava.net/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.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;timing.m_value;<BR><IMG id=Codehighlighter1_719_797_Open_Image onclick="this.style.display='none'; Codehighlighter1_719_797_Open_Text.style.display='none'; Codehighlighter1_719_797_Closed_Image.style.display='inline'; Codehighlighter1_719_797_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_719_797_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_719_797_Closed_Text.style.display='none'; Codehighlighter1_719_797_Open_Image.style.display='inline'; Codehighlighter1_719_797_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;</SPAN><SPAN id=Codehighlighter1_719_797_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.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_719_797_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</SPAN><SPAN style="COLOR: #0000ff">out</SPAN><SPAN style="COLOR: #000000">.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Error&nbsp;using&nbsp;reflection</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;ex;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV></DIV><BR><BR>利用反射实现类的动态加载<BR><BR><BR></DIV><BR><BR><BR></FONT><BR></FONT><BR></FONT><BR><img src ="http://www.blogjava.net/ShQ/aggbug/11396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2005-08-28 23:54 <a href="http://www.blogjava.net/ShQ/archive/2005/08/28/11396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为了程序的易改性</title><link>http://www.blogjava.net/ShQ/archive/2005/08/28/11345.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Sat, 27 Aug 2005 16:05:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2005/08/28/11345.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/11345.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2005/08/28/11345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/11345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/11345.html</trackback:ping><description><![CDATA[<P>今天，做一个程序的测试，（非java，SDL）.但道理是相通的。测了几次，并从我认为可能出错的地方，查找和修改。总是找不到，结果发现，只是一个变量设置了两次。在第二次设置是用了别的值，（或者说是原来是这个值，后来修改，只改了一处。）这使我真正体会的配置文件的重要性。以及像C中这样“#define MAXBUF 1024”定义的好处。不过今天测的出错的这个部分不是我写的，真有点让人气愤。<BR><BR><BR>以后做事，还是尽量用配置文件这类东西。</P><img src ="http://www.blogjava.net/ShQ/aggbug/11345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2005-08-28 00:05 <a href="http://www.blogjava.net/ShQ/archive/2005/08/28/11345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于“struts配置文件”</title><link>http://www.blogjava.net/ShQ/archive/2005/08/26/11221.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Fri, 26 Aug 2005 08:48:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2005/08/26/11221.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/11221.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2005/08/26/11221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/11221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/11221.html</trackback:ping><description><![CDATA[<P><FONT color=#000000>struts配置文件(struts-configur.xml)是用来装入框架组件的。</FONT></P>
<P><FONT color=#000000>struts配置文件和struts ActionServerlet一起工作创建应用的控制（MVC中的V)。每个组件就是一个Java对象，ActionServerlet在开始工作之前，先读入struts配置文件，然后实例化各个组件(类)，然后由ActionServerlet来决定控制的流转。</FONT></P>
<P><FONT color=#000000>struts配置文件知道表单中有什么字段、jsp在哪里、每一个Action和Action需要的资源。<BR>(把这些信息放在一次，是应用更加容易创建和维护。)<BR>struts配置文件实际上成为管理应用变更非常有效的工具<BR>struts配置文件帮助你可以"以最小的努力对应用变更做出快速的反应".<BR>许多配置细节都涉及到表示层。使用xml文档可以使配置被页面设计员和项目管理者访问到。<BR>这样java程序员可以只负责创建和修改应用的基础对象，但配置这些对象可以委派给其他人(比如页面设计员)。<BR>这里体现了Principle of Protected Variation(受保护的变更原则)</FONT></P>
<P><BR><FONT color=#000000>Protected Variation<BR>=====================================================================================<BR>Protected Variation 受保护的变更是一个设计原则，它鼓励使用一个稳定的接口来封装变更的可以预知点。数据-驱动设计，服务查询，反射设计都是这种机制的不同实现。<BR>=====================================================================================</FONT></P>
<P><FONT color=#000000>反射与自身(不太理解，其机制是不一种在命名上的“默契”)<BR>=====================================================================================<BR>反射 告诉我们Java 类提供什么方法。自省（Introspection ）则帮助我们推断<BR>出这些方法哪些是可以在运行时用来配置JavaBean 的属性。Java 工具和框架<BR>(如Struts)使用反射和自省来自动化装入和配置JavaBean 对象。这样就消除了<BR>那些因为粗心易导致错误的编码工作，以及装入仅仅为了装入其他对象的简单<BR>对象时的任务。<BR>=====================================================================================</FONT></P><img src ="http://www.blogjava.net/ShQ/aggbug/11221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2005-08-26 16:48 <a href="http://www.blogjava.net/ShQ/archive/2005/08/26/11221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat下部署WebApplication</title><link>http://www.blogjava.net/ShQ/archive/2005/08/25/10998.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Thu, 25 Aug 2005 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2005/08/25/10998.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/10998.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2005/08/25/10998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/10998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/10998.html</trackback:ping><description><![CDATA[<P>以前学过一段jsp,记得只要安装好tomcat,调试输入<A href="http://localhost:8080/">http://localhost:8080</A>,可出现tomcat的主页面.</P>
<P>这样再部署其它WebApplication,只要将文件拷贝的tomcat的webapps下即可.今天学习struts,要</P>
<P>部署一个webApplication.但这样做,总是报error(http404).</P>
<P>经一番折腾,总结如下.遇以上问题,可参照以下内容:</P>
<P>在tomcat的主页面的左侧,点击TomcatManager,进入Tomcat Web Application Manager .在这</P>
<P>里可以通过两种方式部署WebApplication,注意以"Deploy directory or WAR file located on </P>
<P>server"这种方式部署时,注意需要填入的是URL,而不是windows格式的路径.</P>
<P>需要在前加入"<A href="file:///">file:///</A>"以及把原来的"\"改为"/".</P>
<P>这样再试试应该就可以了.<BR><BR><BR>今天,我发现我以前的记忆，好像是错的。对于一个不是war文件的WebApplication,是需要向上面说写的那样。当时对于一个war文件，只要复制到webapps下就可以了。当然用上面的TomcatManager也是可以的。这样可以从别的地方选一个war文件进行部署。</P><img src ="http://www.blogjava.net/ShQ/aggbug/10998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2005-08-25 11:15 <a href="http://www.blogjava.net/ShQ/archive/2005/08/25/10998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat5.0 + jdk1.5部署struts in action中的login</title><link>http://www.blogjava.net/ShQ/archive/2005/08/24/10924.html</link><dc:creator>ShQ</dc:creator><author>ShQ</author><pubDate>Wed, 24 Aug 2005 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/ShQ/archive/2005/08/24/10924.html</guid><wfw:comment>http://www.blogjava.net/ShQ/comments/10924.html</wfw:comment><comments>http://www.blogjava.net/ShQ/archive/2005/08/24/10924.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ShQ/comments/commentRss/10924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ShQ/services/trackbacks/10924.html</trackback:ping><description><![CDATA[刚刚学习struts，用Tomcat5.0 + jdk1.5搭建环境，部署struts in action中的login，总是报找不到javac，说JAVA_HOME没有设置对。当时我设置的肯定是对的。我大概知道是环境变量的问题，但我不知道那里设置的不对。后来我就用jdk1.4，这样就没有任何问题。login可以跑起来了。<BR>我想用jdk1.5和jdk1.4的区别就在于1.5把jdk和jre放在了两个同一层次的文件夹中。<BR>如果有哪位知道，如何使Tomcat5.0和jdk1.5配合使用，还请赐教。<BR><BR>*****************************************************************************<BR>2006年2月28<BR>自我评价,有几个月没有搞java了,回头看,怎么会有这样的问题自己。奇怪。<BR>我现在有的就是Tomcat5.0 + jdk1.5没有问题。不知道，自己当时是怎么搞的。<img src ="http://www.blogjava.net/ShQ/aggbug/10924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ShQ/" target="_blank">ShQ</a> 2005-08-24 15:41 <a href="http://www.blogjava.net/ShQ/archive/2005/08/24/10924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>