﻿<?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-共同学习java-文章分类-java</title><link>http://www.blogjava.net/huanghuizz/category/14530.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 19 Jul 2009 13:27:07 GMT</lastBuildDate><pubDate>Sun, 19 Jul 2009 13:27:07 GMT</pubDate><ttl>60</ttl><item><title>DOCTYPE! HTML PUBLIC 声明规范</title><link>http://www.blogjava.net/huanghuizz/articles/287340.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sun, 19 Jul 2009 08:08:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/287340.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/287340.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/287340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/287340.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/287340.html</trackback:ping><description><![CDATA[<span  style="color: #464646; font-family: Verdana; font-size: 12px; line-height: 21px; ">
<p>DOCTYPE的常用声明：按照 HTML 4.01 XHTML 1.0 XHTML 1.1 列表如下，错误的DOCTYPE HTML PUBLIC反而会导致页面解析错误。</p>
<div class="entry-more" id="more">
<h3>HTML 4.01规范分为：Strict, Transitional, Frameset</h3>
<blockquote>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"&gt;</p>
</blockquote>
<p>&nbsp;</p>
<h3>XHTML 1.0规范分为：Strict, Transitional, Frameset</h3>
<blockquote>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</p>
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;</p>
</blockquote>
<p>&nbsp;</p>
<h3>XHTML 1.1 DTD</h3>
<blockquote>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;</blockquote></div>
</span>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/287340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2009-07-19 16:08 <a href="http://www.blogjava.net/huanghuizz/articles/287340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat 调优以及jconsole监控 配置</title><link>http://www.blogjava.net/huanghuizz/articles/257060.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Fri, 27 Feb 2009 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/257060.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/257060.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/257060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/257060.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/257060.html</trackback:ping><description><![CDATA[JAVA_OPTS=-Xms800m -Xmx1200m -XX:PermSize=128M -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=256m -XX:SurvivorRatio=8 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false<br />
<br />
上面是在本地监测，如果远程监测，如下：<br />
<br />
要实现远程监控还要与IP绑定，添加参数：<br />
&nbsp;&nbsp;&nbsp;   -Djava.rmi.server.hostname=192.168.10.31<br />
<br />
&nbsp;&nbsp;&nbsp;   若要实现使用用户名登陆，修改参数-Dcom.sun.management.jmxremote.authenticate=<font color="#ff0000">true</font>；<br />
&nbsp;&nbsp;&nbsp;   添加启动参数：-Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.password ；<br />
然后进行以下配置：<br />
1. 把 <code><em>JRE_HOME</em>/lib/</code><code>management</code>/<code>jmxremote.password.template拷贝为</code><code>jmxremote.password</code><code>。<br />
</code> 2. 去掉此目录下 jmxremote.access 最后两行的注释，这个存的就是用户名和权限。<br />
3. 对应的，去掉 jmxremote.password 最后两行注释，这个是用户名和对应的密码。<br />
4. 通过添加和修改这两个文件来管理登陆用户。<br />
<br />
最后，要修改<code>jmxremote.password</code>文件的权限chkmod 600 <code>jmxremote.password</code>。<br />
&nbsp;&nbsp;  就可以在Jconsole里实现远程监控了：<br />
&nbsp;&nbsp;  远程进程 192.168.10.31:8950 <br />
&nbsp;&nbsp;  或 service:jmx:rmi:///jndi/rmi://192.168.10.31:8950/jmxrmi
<br />
<img src ="http://www.blogjava.net/huanghuizz/aggbug/257060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2009-02-27 16:26 <a href="http://www.blogjava.net/huanghuizz/articles/257060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java性能的4,5个用法</title><link>http://www.blogjava.net/huanghuizz/articles/255909.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Fri, 20 Feb 2009 15:58:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/255909.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/255909.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/255909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/255909.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/255909.html</trackback:ping><description><![CDATA[<ol class="dp-j">
    <li><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Credit&nbsp;BaseCredit&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Credit(); &nbsp;&nbsp;</span></span>
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Credit&nbsp;getNewCredit()&nbsp;{ &nbsp;&nbsp;</span>
    </li>
    <li><span class="keyword">return</span><span>&nbsp;(Credit)&nbsp;BaseCredit.clone(); &nbsp;&nbsp;</span>
    </li>
    <li><span>}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
<pre class="java" style="display: none;" name="code">private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
} </pre>
<p>&nbsp;Java语言习惯用语<br />
<strong>1.循环</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ■ 在重要的循环里，消除循环终止判断时的方法调用。。。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如：将...bt&nbsp;&nbsp; <a href="http://www.bt285.cn/">www.bt285.cn</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div class="dp-highlighter"><span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;&nbsp;i&lt;collection.size();i++){&nbsp;&nbsp;&nbsp;</span></span>
<ol class="dp-j">
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">for(int i=0; i&lt;collection.size();i++){
...
}
</pre>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 替换为&#8230;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div class="dp-highlighter">
<ol class="dp-j">
    <li><span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;&nbsp;n=collection.size();i&lt;n;i++){ &nbsp;&nbsp;</span></span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">for(int i=0; n=collection.size();i&lt;n;i++){
...
}
</pre>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ■ 通常，把与循环index不相关的移到循环的外面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li><span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;&nbsp;terminal=x.length;i&lt;terminal;i++){ &nbsp;&nbsp;</span></span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x[i]&nbsp;=&nbsp;x[i]/scaleA&nbsp;*scaleB; &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code"> for(int i=0; terminal=x.length;i&lt;terminal;i++){
x[i] = x[i]/scaleA *scaleB;
}
</pre>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 应该该成：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li><span><span>Double&nbsp;scale&nbsp;=&nbsp;&nbsp;scaleB*scaleA; &nbsp;&nbsp;</span></span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;&nbsp;terminal=x.length;i&lt;terminal;i++){ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x[i]&nbsp;=&nbsp;x[i]/scale&nbsp;; &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">Double scale =  scaleB*scaleA;
for(int i=0; terminal=x.length;i&lt;terminal;i++){
x[i] = x[i]/scale ;
}
</pre>
<p>&nbsp;</p>
<p><strong>2.字符串</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 消除字符串连接<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 创建长字符串时，总是使用StringBuffter代替String<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 预先分配StringBuffer空间&nbsp;&nbsp; StringBuffer sb = new StringBuffer(5000);</p>
<p><strong></strong></p>
<p><strong>3.基本数据类型<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 在重要的循环里使用基本数据类型（int型数据通常比long/double型数据更快）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 基本数据类型（Boolean,Integer,etc）的包装类主要用在当传递的方法参数必须是一个对象的引用时（而不是一个基本数据类型）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 对所有的常量代数表达式使用static final修饰符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 使常量更容易引用（编译器预先计算常量表达式）</p>
<p>&nbsp;</p>
<p><strong>4.异常</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 异常只用于单个真正的错误条件 如小说520网 <a href="http://www.5a520.cn/">www.5a520.cn</a> 抛出异常时<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 抛出一个异常和执行一个catch代码块花费是很高的（主要由于当创建一个异常时要获得线程栈的一个快照）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;只当条件真的异常时才抛出一个异常</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 抛出异常首先要创建一个新的对象。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Throwable接口的构造函数调用名为fillInStackTrace()的本地（Native）方法，fillInStackTrace()方法检查堆栈，收集调用跟踪信息。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;只要有异常被抛出，VM就必须调整调用堆栈，因为在处理过程中创建了一个新的对象。 </p>
<p>　　&nbsp;&nbsp;&nbsp;异常只能用于错误处理，不应该用来控制程序流程。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 使编译器和运行时最优化，将几个方法调用放在一个try/catch块中，而不是为每个方法调用实现几个try/catch块</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li><span><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span></span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Some.method1();&nbsp;&nbsp;&nbsp;</span><span class="comment">//Difficut&nbsp;for&nbsp;java1.4 </span><span>&nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(method1Exception&nbsp;e){ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle&nbsp;exception&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span><span class="comment">//&nbsp;to&nbsp;optimize&nbsp;this&nbsp;code </span><span>&nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    </li>
    <li><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Some.method2();&nbsp;&nbsp;&nbsp;</span><span class="comment">//Difficut&nbsp;for&nbsp;java1.4 </span><span>&nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(method2Exception&nbsp;e){ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle&nbsp;exception&nbsp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span><span class="comment">//&nbsp;to&nbsp;optimize&nbsp;this&nbsp;code </span><span>&nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    </li>
    <li><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Some.method3();&nbsp;&nbsp;&nbsp;</span><span class="comment">//Difficut&nbsp;for&nbsp;java1.4 </span><span>&nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(method3Exception&nbsp;e){ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle&nbsp;exception&nbsp;</span><span class="number">3</span><span>&nbsp;&nbsp;</span><span class="comment">//&nbsp;to&nbsp;optimize&nbsp;this&nbsp;code </span><span>&nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">try{
Some.method1();   //Difficut for java1.4
}catch(method1Exception e){
handle exception 1  // to optimize this code
}
try{
Some.method2();   //Difficut for java1.4
}catch(method2Exception e){
handle exception 2  // to optimize this code
}
try{
Some.method3();   //Difficut for java1.4
}catch(method3Exception e){
handle exception 3  // to optimize this code
}
</pre>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; 应该写为：</p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li><span><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span></span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Some.method1();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Some.method2();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Some.method3();&nbsp;&nbsp;&nbsp;</span><span class="comment">//Difficut&nbsp;for&nbsp;java1.4 </span><span>&nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(method1Exception&nbsp;e){ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle&nbsp;exception&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(method2Exception&nbsp;e){ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle&nbsp;exception&nbsp;</span><span class="number">2</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(method3Exception&nbsp;e){ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle&nbsp;exception&nbsp;</span><span class="number">3</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">try{
Some.method1();
Some.method2();
Some.method3();   //Difficut for java1.4
}catch(method1Exception e){
handle exception 1
}catch(method2Exception e){
handle exception 2
}catch(method3Exception e){
handle exception 3
}
</pre>
<p><strong></strong>&nbsp;</p>
<p><strong>5.基准</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 注意，所有这些技巧会因不同的平台和虚拟机而不同<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一 例如：在有些servlet容器内，通过一个OutputStream作为字节输出会更快<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一 在其它的容器内，通过一个PrintWriter输出字符会更快<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 这些技巧描述的是最可移植的建议<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;■ 你可能需要运行一些基准来判断在你的平台上怎么样是最快的</p>
<p><strong></strong>&nbsp;</p>
<p><strong>6.不用new关键词创建类的实例</strong> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; ■用new关键词创建类的实例时，构造函数链中的所有构造函数都会被自动调用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但如果一个对象实现了Cloneable接口，我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在使用设计模式（Design Pattern）的场合，如果用Factory模式创建对象，则改用clone()方法创建新的对象实例非常简单。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例如，下面是Factory模式的一个典型实现：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Credit&nbsp;getNewCredit()&nbsp;{ &nbsp;&nbsp;</span></span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Credit(); &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">public static Credit getNewCredit() {
return new Credit();
} </pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;优化后：</p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Credit&nbsp;BaseCredit&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Credit(); &nbsp;&nbsp;</span></span>
    </li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Credit&nbsp;getNewCredit()&nbsp;{ &nbsp;&nbsp;</span>
    </li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;(Credit)&nbsp;BaseCredit.clone(); &nbsp;&nbsp;</span>
    </li>
    <li><span>}&nbsp;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
} </pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的思路对于数组处理同样很有用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><strong>7.使用非阻塞I/O</strong>&nbsp;<strong> </strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>■<strong>Java</strong>版本较低的JDK不支持非阻塞I/O
API。为避免I/O阻塞，一些应用采用了创建大量线程的办法（在较好的情况下，会使用一个缓冲池）。这种技术可以在许多必须支持并发I/O流的应用中见
到，如Web服务器、报价和拍卖应用等。然而，创建Java线程需要相当可观的开销。 </p>
<p>　&nbsp;&nbsp;&nbsp;JDK 1.4引入了非阻塞的I/O库（java.nio）。如果应用要求使用版本较早的JDK，在这里有一个支持非阻塞I/O的软件包。</p>
<p>&nbsp;</p>
<p><strong>8.不要重复初始化变量</strong>&nbsp;<strong> </strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>■默认情况下，调用类的构造函数时， Java会把变量初始化成确定的值：所有的对象被设置成null，整数变量（byte、short、int、long）设置成0，float和 double变量设置成0.0，逻辑值设置成false。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当一个类从另一个类派生时，这一点尤其应该注意，因为用new关键词创建一个对象时，构造函数链中的所有构造函数都会被自动调用。</p>
<p>&nbsp;</p>
<p><strong>9.尽量指定类的final修饰符</strong>&nbsp;<strong> </strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</strong>■带有final修饰符的类是不可派生的。在Java核心API中，有许多应用final的例子，例如java.lang.String。为String类指定final防止了人们覆盖length()方法。 </p>
<p>　　 另外，如果指定一个类为final，则该类所有的方法都是final。Java编译器会寻找机会内联（inline）所有的final方法（这和具体的编译器实现有关）。此举能够使性能平均提高50%。</p>
<p>&nbsp;</p>
<p><strong>10.尽量使用局部变量</strong>&nbsp;<strong> </strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</strong>■调用方法时传递的参数以及在调用中创建的临时变量都保存在栈（Stack）中，速度较快。其他变量，如静态变量、实例变量等，都在堆（Heap）中创建，速度较慢。另外，依赖于具体的编译器/JVM，局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。</p>
<p>&nbsp;</p>
<p><strong>11.乘法和除法</strong>&nbsp;<strong> </strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</strong>■考虑下面的代码:</p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li><span><span class="keyword">for</span><span>&nbsp;(val&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;val&nbsp;&lt;&nbsp;</span><span class="number">100000</span><span>;&nbsp;val&nbsp;+=</span><span class="number">5</span><span>)&nbsp;{&nbsp;alterX&nbsp;=&nbsp;val&nbsp;*&nbsp;</span><span class="number">8</span><span>;&nbsp;myResult&nbsp;=&nbsp;val&nbsp;*&nbsp;</span><span class="number">2</span><span>;&nbsp;}&nbsp;&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">for (val = 0; val &lt; 100000; val +=5) { alterX = val * 8; myResult = val * 2; } </pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 优化后：</p>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j">
    <li><span><span class="keyword">for</span><span>&nbsp;(val&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;val&nbsp;&lt;&nbsp;</span><span class="number">100000</span><span>;&nbsp;val&nbsp;+=&nbsp;</span><span class="number">5</span><span>)&nbsp;{&nbsp;alterX&nbsp;=&nbsp;val&nbsp;&lt;&lt;&nbsp;</span><span class="number">3</span><span>;&nbsp;myResult&nbsp;=&nbsp;val&nbsp;&lt;&lt;&nbsp;</span><span class="number">1</span><span>;&nbsp;}&nbsp;&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="java" style="display: none;" name="code">for (val = 0; val &lt; 100000; val += 5) { alterX = val &lt;&lt; 3; myResult = val &lt;&lt; 1; } </pre>
<p>&nbsp;</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改后的代码不再做乘以8的操作，而是改用等价的左移3位操作，每左移1位相当于乘以2。相应地，右移1位操作相当于除以2。值得一提的是，虽然移位操作速度快，但可能使代码比较难于理解，所以最好加上一些注释。&nbsp;
<img src ="http://www.blogjava.net/huanghuizz/aggbug/255909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2009-02-20 23:58 <a href="http://www.blogjava.net/huanghuizz/articles/255909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多级反向代理下获取客户端真实IP地址 </title><link>http://www.blogjava.net/huanghuizz/articles/188234.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Mon, 24 Mar 2008 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/188234.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/188234.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/188234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/188234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/188234.html</trackback:ping><description><![CDATA[在很多应用下都可能有需要将用户的真实IP记录下来，这时就要获得用户的真实IP地址，在JSP里，获取客户端的IP地址的方法是：
request.getRemoteAddr()，这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到
客户端的真实IP地址了。
<br />
<br />
这段时间在做IP统计的程序设计，由于服务器作了集群，使用了反向代理软件，将http://192.168.1.110:2046/的
URL反向代理为http://www.xxx.com/的URL时，用request.getRemoteAddr()方法获取的IP地址是：
127.0.0.1　或　192.168.1.110，而并不是客户端的真实ＩＰ。这是什么原因呢？
<br />
<br />
这是反向代理的原因。经过代理以后，由于在客户端和服务之间增加了中间层，因此服务器无法直接拿到客户端的IP，服务器端应用也无法直接通过
转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中，增加了X－FORWARDED－FOR信息。用以跟踪原有的客户端IP地址和原来客户端
请求的服务器地址。当我们访问http://www.xxx.com/index.jsp/时，其实并不是我们浏览器真正访问到了服务器上的
index.jsp文件，而是先由代理服务器去访问http://192.168.1.110:2046/index.jsp，代理服务器再将访问到的结
果返回给我们的浏览器，因为是代理服务器去访问index.jsp的，所以index.jsp中通过request.getRemoteAddr()的方
法获取的IP实际上是代理服务器的地址，并不是客户端的IP地址。
<br />
<br />
于是可得出获得客户端真实IP地址的方法一：
<br />
<br />
1 public String getIpAddr(HttpServletRequest request) {
<br />
2      String ip = request.getHeader("x-forwarded-for");
<br />
3      if(ip == null || ip.length() == 0) {
<br />
4            ip = request.getRemoteAddr();
<br />
5        }
<br />
6        return ip;
<br />
7    }
<br />
可是当我访问http://www.xxx.com/index.jsp/时，返回的IP地址始终是unknown，也并不是如上所示的
127.0.0.1　或　192.168.1.110了，而我访问http://192.168.1.110:2046/index.jsp时，则能返回
客户端的真实IP地址，写了个方法去验证。
<br />
<br />
1&lt;%@ page import="java.util.*" %&gt;
<br />
2&lt;table border=1 cellspacing=0 cellpadding=0 align=center&gt;
<br />
3&lt;tr&gt;
<br />
4&lt;th&gt;Name&lt;/th&gt;
<br />
5&lt;th&gt;Value&lt;/th&gt;
<br />
6&lt;/tr&gt;
<br />
7&lt;%
<br />
8Enumeration enumNames;
<br />
9String strName,strValue;
<br />
10
<br />
11enumNames = request.getHeaderNames();
<br />
12while(enumNames.hasMoreElements()){
<br />
13    strName = (String)enumNames.nextElement();
<br />
14    strValue = request.getHeader(strName);
<br />
15    %&gt;
<br />
16    &lt;tr&gt;
<br />
17    &lt;td&gt;&lt;%=strName%&gt;&lt;/td&gt;
<br />
18    &lt;td&gt;&lt;%=strValue%&gt;&lt;/td&gt;
<br />
19    &lt;/tr&gt;
<br />
20    &lt;%
<br />
21}
<br />
22%&gt;
<br />
23&lt;tr&gt;
<br />
24&lt;/table&gt;
<br />
25
<br />
<br />
出来的结果：X-Forwarded-For: unknown　。X-Forwarded-For确实存在，但其值却为unknown，继续找原因。上网搜了搜，原因出在了Squid上。
<br />
<br />
squid.conf 的配制文件　forwarded_for 项默认是为on，如果 forwarded_for 设成了 off 　则：
<br />
<br />
X-Forwarded-For: unknown
<br />
<br />
一查，发现forwarded_for 项设为了off，原因找到了，把forwarded_for 项设为了on，重启后，访问http://www.xxx.com/index.jsp/　获得的IP是客户端的真实IP。
<br />
<br />
于是可得出获得客户端真实IP地址的方法二：
<br />
<br />
1    public String getIpAddr(HttpServletRequest request) {
<br />
2        String ip = request.getHeader("x-forwarded-for");
<br />
3        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
<br />
4            ip = request.getHeader("Proxy-Client-IP");
<br />
5        }
<br />
6        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
<br />
7            ip = request.getHeader("WL-Proxy-Client-IP");
<br />
8        }
<br />
9        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
<br />
10            ip = request.getRemoteAddr();
<br />
11        }
<br />
12        return ip;
<br />
13    }
<br />
14
<br />
<br />
<br />
可是，如果通过了多级反向代理的话，X-Forwarded-For的值并不止一个，而是一串Ｉｐ值，究竟哪个才是真正的用户端的真实IP呢？
<br />
<br />
答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。
<br />
<br />
如：
<br />
X-Forwarded-For：192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
<br />
用户真实IP为： 192.168.1.110<br />
<br />
引用：http://zhangljerry.javaeye.com/blog/91638<br />
<img src ="http://www.blogjava.net/huanghuizz/aggbug/188234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2008-03-24 14:23 <a href="http://www.blogjava.net/huanghuizz/articles/188234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log4J 最佳实践之全能配置文件</title><link>http://www.blogjava.net/huanghuizz/articles/188147.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Mon, 24 Mar 2008 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/188147.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/188147.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/188147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/188147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/188147.html</trackback:ping><description><![CDATA[下面给出得Log4J配置文件实现了输出到控制台，文件，回滚文件，发送日志邮件，输出到数据库日志表，自定义标签等全套功能。<br />
<br />
log4j.rootLogger=DEBUG,CONSOLE,A1,im<br />
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE<br />
<br />
log4j.addivity.org.apache=true<br />
<br />
<br />
###################<br />
# Console Appender<br />
###################<br />
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender<br />
log4j.appender.Threshold=DEBUG<br />
log4j.appender.CONSOLE.Target=System.out<br />
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]
n%c[CATEGORY]%n%m[MESSAGE]%n%n<br />
<br />
<br />
#####################<br />
# File Appender<br />
#####################<br />
log4j.appender.FILE=org.apache.log4j.FileAppender<br />
log4j.appender.FILE.File=file.log<br />
log4j.appender.FILE.Append=false<br />
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
# Use this layout for LogFactor 5 analysis<br />
<br />
<br />
<br />
########################<br />
# Rolling File<br />
########################<br />
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender<br />
log4j.appender.ROLLING_FILE.Threshold=ERROR<br />
log4j.appender.ROLLING_FILE.File=rolling.log<br />
log4j.appender.ROLLING_FILE.Append=true<br />
log4j.appender.ROLLING_FILE.MaxFileSize=10KB<br />
log4j.appender.ROLLING_FILE.MaxBackupIndex=1<br />
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
<br />
<br />
####################<br />
# Socket Appender<br />
####################<br />
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender<br />
log4j.appender.SOCKET.RemoteHost=localhost<br />
log4j.appender.SOCKET.Port=5001<br />
log4j.appender.SOCKET.LocationInfo=true<br />
# Set up for Log Facter 5<br />
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n<br />
<br />
<br />
########################<br />
# Log Factor 5 Appender<br />
########################<br />
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender<br />
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000<br />
<br />
<br />
########################<br />
# SMTP Appender<br />
#######################<br />
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender<br />
log4j.appender.MAIL.Threshold=FATAL<br />
log4j.appender.MAIL.BufferSize=10<br />
log4j.appender.MAIL.From=chenyl@hollycrm.com<br />
log4j.appender.MAIL.SMTPHost=mail.hollycrm.com<br />
log4j.appender.MAIL.Subject=Log4J Message<br />
log4j.appender.MAIL.To=chenyl@hollycrm.com<br />
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
<br />
<br />
########################<br />
# JDBC Appender<br />
#######################<br />
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender<br />
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test<br />
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver<br />
log4j.appender.DATABASE.user=root<br />
log4j.appender.DATABASE.password=<br />
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')<br />
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
<br />
<br />
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender<br />
log4j.appender.A1.File=SampleMessages.log4j<br />
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'<br />
log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout<br />
<br />
###################<br />
#自定义Appender<br />
###################<br />
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender<br />
<br />
log4j.appender.im.host = mail.cybercorlin.net<br />
log4j.appender.im.username = username<br />
log4j.appender.im.password = password<br />
log4j.appender.im.recipient = corlin@cybercorlin.net<br />
<br />
log4j.appender.im.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
<br />
引用 ：http://www.dingl.com/view.shtml?xh=485<br />
<img src ="http://www.blogjava.net/huanghuizz/aggbug/188147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2008-03-24 09:52 <a href="http://www.blogjava.net/huanghuizz/articles/188147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>amcharts漂亮报表 破解</title><link>http://www.blogjava.net/huanghuizz/articles/181919.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Mon, 25 Feb 2008 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/181919.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/181919.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/181919.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/181919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/181919.html</trackback:ping><description><![CDATA[<span class="hilite1">amcharts</span>漂亮报表 <br />
http://www.<span class="hilite1">amcharts</span>.com/download <br />
<br />
<span class="hilite2">破解</span>方法： <br />
今天介绍<span class="hilite2">破解</span><span class="hilite1">amcharts</span>的方法一，从swf文件入手。 <br />
用SWF Decompiler软件加载swf文件，在Resources下找Action中的MainMoive，代码中有一段如下： <br />
function checkKey(serial) <br />
{ <br />
var _l1 = com.<span class="hilite1">amcharts</span>.Utils.stripSymbols(serial, " "); <br />
_l1 = com.<span class="hilite1">amcharts</span>.Utils.stripSymbols(_l1, "\n"); <br />
_l1 = com.<span class="hilite1">amcharts</span>.Utils.stripSymbols(_l1, "\r"); <br />
_l1 = com.<span class="hilite1">amcharts</span>.Utils.stripSymbols(_l1, "\r\n"); <br />
arr = _l1.split("-"); <br />
if (Number(arr[2]) + Number(arr[3]) != 8645 || Number(arr[2].substr(1, 1)) - Number(arr[3].substr(2, 1)) != 2) <br />
{ <br />
attachMovie("copyright_mc", "copyright_mc", 1001); <br />
} // end if <br />
} // End of the function <br />
这就是序列号的代码，再往下看 <br />
key_loader.loadVars(path + "<span class="hilite1">amcharts</span>_key.txt", this, "checkKey", false, "checkKey"); <br />
到这里，学过一点基础编程的都看明白了。 <br />
以" -"作为序列号的链接符号，第二个链接符号后的数+第三个符号后的数=8645，并且第二个链接符号后的数中的第一位数后面的一位数-第三个符号后的数中的第二位数后面的一位数=2，只要满足这三个条件的序列号就可以了，然后把这个序列号保存在swf文件相同文件夹下的<span class="hilite1">amcharts</span>_key.txt 中，看来作者的注册方式极为简单~ <br />
下载以下序列号文件，解压到swf文件的目录
<img src ="http://www.blogjava.net/huanghuizz/aggbug/181919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2008-02-25 10:48 <a href="http://www.blogjava.net/huanghuizz/articles/181919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java2  运算符</title><link>http://www.blogjava.net/huanghuizz/articles/163954.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 29 Nov 2007 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/163954.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/163954.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/163954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/163954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/163954.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">表4-7 Java 运算符优先级
<p style="text-indent: 2em">最高
<p style="text-indent: 2em">( ) [ ] .
<p style="text-indent: 2em">++ &#8211; &#8211; ~ !
<p style="text-indent: 2em">* / %
<p style="text-indent: 2em">+ &#8211;
<p style="text-indent: 2em">&gt;&gt; &gt;&gt;&gt; &lt;&lt;
<p style="text-indent: 2em">&gt; &gt;= &lt; &lt;=
<p style="text-indent: 2em">续表
<p style="text-indent: 2em">== !=
<p style="text-indent: 2em">&amp;
<p style="text-indent: 2em">^
<p style="text-indent: 2em">|
<p style="text-indent: 2em">&amp;&amp;
<p style="text-indent: 2em">||
<p style="text-indent: 2em">?:
<p style="text-indent: 2em">= op=
<p style="text-indent: 2em">最低 </p>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/163954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2007-11-29 11:35 <a href="http://www.blogjava.net/huanghuizz/articles/163954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习使用 Manifest</title><link>http://www.blogjava.net/huanghuizz/articles/163379.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Tue, 27 Nov 2007 01:30:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/163379.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/163379.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/163379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/163379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/163379.html</trackback:ping><description><![CDATA[简化Java应用程序的打包和发布 <br />
发布Java应用程序时你会感到困难？好在Java提供了一系列打包和发布工具，可以显著的简化发布过程 <br />
该文章提供了打包Java code的几种方法，我们将会探讨Java manifest 文件，给出用于管理JAR文件所依赖文件、估计跨平台发布所需的CLasspath的合适方法.我也会解释如何使用manifest包版本特性来确认包的兼容性...<br />
<br />
什么是JAR文件？ <br />
<br />
在开发过程中，我们可以直接使用Java class文件来运行程序，但这并不是一个好方式，好在Java 提供了 JAR(Java Archive)文件来提供发布和运行。 <br />
<br />
jar 文件实际上是class 文件的ZIP压缩存档，这种格式被广泛使用，因此易与使用，有很多中工具可以操作这种格式的文件。也正是因为这个原因，jar文件本身并不能表达所包含应用程序的标签信息。 <br />
<br />
Manifest 因此得以出现 <br />
<br />
为了要提供存档的标签信息，jar 文件指定了一个特定目录来存放标签信息：META-INF 目录，其中我们来关注该目录中的MANIFEST.MF文件，他就是JAR的manifest文件，他包含了JAR文件的内容描述，并在运行时向JVM提供应用程序的信息，大多数JAR文件含有一个默认生成的manifest 文件,执行JAR命令或使用zip工具，都可以产生它 <br />
<br />
如果是由jar命令产生的 manifest 文件，形如: <br />
<br />
Manifest-Version: 1.0 <br />
Created-By:1.4.0-beta <br />
(Sun Microsystems Inc.) <br />
<br />
这些信息没甚么用,仅仅告诉我们使用的是1.0的manifest文件,第一行定义manifest的格式，第二行说明使用 SUN 的JDK1.4的jar工具生成该文件，如果manifest文件是由其他 （如ant） 创建的，那将会出现 &#8220;Created-By: Ant 1.2&#8221; 之类的内容，如果你是自己创建manifest文件，你可以加入自己的一些相关信息. <br />
<br />
基础格式 <br />
<br />
manifest 文件的格式 是很简单的，每一行都是 名－值 对应的:属性名开头，接着是 ":" ，然后是属性值，每行最多72个字符，如果需要增加，你可以在下一行续行，续行以空格开头，以空格开头的行都会被视为前一行的续行。 <br />
<br />
所有在开头的属性都是全局的，你也可以定义特定class 或package的属性，稍后将介绍这种 <br />
<br />
把manifest文件插入JAR文件 <br />
<br />
使用 m 选项，把指定文件名的manifest文件 传入，例如 <br />
<br />
jar cvfm myapplication.jar myapplication.mf -C classdir <br />
<br />
如果你使用ant来创建时，在ant 的build.xml 加入如下条目 <br />
<br />
&lt;target name="jar"&gt; <br />
&lt;jar jarfile ="myapplication.jar" <br />
manifest="myapplication.mf"&gt; <br />
&lt;fileset dir="classdir" <br />
includes="**/*.class"/&gt; <br />
&lt;/jar&gt; <br />
&lt;/target&gt; <br />
<br />
运行Java程序 <br />
<br />
现在我们来体验一下manifest文件的作用，如果现在我们有一个Java 应用程序打包在myapplication.jar中， main class为 com.example.myapp.MyAppMain ，那么我们可以用以下的命令来运行 <br />
<br />
java -classpath myapplication.jar com.example.myapp.MyAppMain <br />
<br />
这显然太麻烦了，现在我们来创建自己的manifest文件，如下： <br />
<br />
Manifest-Version: 1.0 <br />
Created-By: JDJ example <br />
Main-Class: com.example.myapp.MyAppMain <br />
<br />
这样我们就可以使用如下的命令来运行程序了：（明显简单多了，也不会造成无谓的拼写错误） <br />
<br />
java -jar myapplication.jar <br />
<br />
管理JAR的依赖资源 <br />
<br />
很少Java应用会仅仅只有一个jar文件，一般还需要 其他类库。比如我的应用程序用到了Sun 的 Javamail classes ，在classpath中我需要包含activation.jar 和 mail.jar,这样在运行程序时,相比上面的例子,我们要增加一些: <br />
<br />
java -classpath mail.jar:activation.jar -jar myapplication.jar <br />
<br />
在不同的操作系统中,jar包间的分隔符也不一样，在UNIX用&#8220;：&#8221;，在window中使用 &#8220;；&#8221;，这样也不方便 <br />
<br />
同样，我们改写我们的manifest文件，如下 <br />
<br />
Manifest-Version: 1.0 <br />
Created-By: JDJ example <br />
Main-Class: com.example.myapp.MyAppMain <br />
Class-Path: mail.jar activation.jar <br />
<br />
（加入了Class-Path: mail.jar activation.jar，用空格分隔两个jar包） <br />
<br />
这样我们仍然可以使用和上例中相同的命令来执行该程序： <br />
<br />
java -jar myapplication.jar <br />
<br />
Class-Path属性中包含了用空格分隔的jar文件，在这些jar文件名中要对特定的字符使用逃逸符，比如空格，要表示成"%20"，在路径的表示中，都采用&#8220;/&#8221;来分隔目录，无论是在什么操作系统中，(即使在window中)，而且这里用的是相对路径（相对于本身的JAR文件）： <br />
<br />
Manifest-Version: 1.0 <br />
Created-By: JDJ example <br />
Main-Class: com.example.myapp.MyAppMain <br />
Class-Path: ext/mail.jar ext/activation.jar <br />
<br />
<br />
Multiple Main Classes（多主类） <br />
还有一种Multiple Main Classes情况，如果你的应用程序可能有命令行版本 和GUI版本，或者一些不同的应用却共享很多相同的代码，这时你可能有多个Main Class，我们建议你采取这样的策略：把共享的类打成lib包，然后把不同的应用打成不同的包，分别标志主类：如下 <br />
<br />
<br />
Manifest for myapplicationlib.jar: <br />
Manifest-Version: 1.0 <br />
Created-By: JDJ example <br />
Class-Path: mail.jar activation.jar <br />
<br />
Manifest for myappconsole.jar: <br />
Manifest-Version: 1.0 <br />
Created-By: JDJ example <br />
Class-Path: myapplicationlib.jar <br />
Main-Class: com.example.myapp.MyAppMain <br />
<br />
Manifest for myappadmin.jar: <br />
Manifest-Version: 1.0 <br />
Created-By: JDJ example <br />
Class-Path: myapplicationlib.jar <br />
Main-Class: com.example.myapp.MyAdminTool <br />
<br />
<br />
在myappconsole.jar 和 myappadmin.jar的manifest文件中分别注明各自的 Main Class <br />
<br />
<br />
Package Versioning <br />
<br />
完成发布后，如果使用者想了解 ，哪些代码是谁的？目前是什么版本？使用什么版本的类库？解决的方法很多 ，manifest提供了一个较好的方法，你可以在manifest文件中描述每一个包的信息。 <br />
<br />
Java 秉承了实现说明与描述分离的原则，package 的描述 定义了package 是什么，实现说明 定义了谁提供了描述的实现，描述和实现包含 名、版本号和提供者。要得到这些信息，可以查看JVM的系统属性（使用 java.lang.System.getProperty() ） <br />
<br />
<br />
在manifest文件中，我可以为每个package定义描述和实现版本，声明名字，并加入描述属性和实现属性，这些属性是 <br />
<br />
Specification-Title <br />
Specification-Version <br />
Specification-Vendor <br />
Implementation-Title <br />
Implementation-Version <br />
Implementation-Vendor <br />
<br />
当要提供一个类库或编程接口时，描述信息显得是很重要，见以下范例： <br />
<br />
Manifest-Version: 1.0 <br />
Created-By: JDJ example <br />
Class-Path: mail.jar activation.jar <br />
<br />
Name: com/example/myapp/ <br />
Specification-Title: MyApp <br />
Specification-Version: 2.4 <br />
Specification-Vendor: example.com <br />
Implementation-Title: com.example.myapp <br />
Implementation-Version: 2002-03-05-A <br />
Implementation-Vendor: example.com <br />
<br />
<br />
Package Version 查询 <br />
在manifest文件中加入package描述后，就可以使用Java提供的java.lang.Package class进行Package 的信息查询，这里列举3个最基本的获取package object的方法 <br />
<br />
1.Package.getPackages():返回系统中所有定义的package列表 <br />
2.Package.getPackage(String packagename):按名返回package <br />
3.Class.getPackage():返回给定class所在的package <br />
<br />
使用者这方法就可以动态的获取package信息. <br />
需要注意的是如果给定的package中没有class被加载,则也无法获得package 对象 <br />
<br />
Manifest 技巧 <br />
总是以Manifest-Version属性开头 <br />
<br />
每行最长72个字符，如果超过的化，采用续行 <br />
<br />
确认每行都以回车结束，否则改行将会被忽略 <br />
<br />
如果Class-Path 中的存在路径，使用"/"分隔目录，与平台无关 <br />
<br />
使用空行分隔主属性和package属性 <br />
<br />
使用"/"而不是"."来分隔package 和class ,比如 com/example/myapp/ <br />
<br />
class 要以.class结尾，package 要以 / 结尾 <br />
<br />
mag.javadigest.net 编译 英文原文 <br />
<br />
翻译 yife<br />
<br />
引用：http://www.jdon.com/jivejdon/forum/messageList.shtml?thread=15361&amp;message=6994399<br />
<img src ="http://www.blogjava.net/huanghuizz/aggbug/163379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2007-11-27 09:30 <a href="http://www.blogjava.net/huanghuizz/articles/163379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用displaytag1.1 完成大数据量分页显示的例子</title><link>http://www.blogjava.net/huanghuizz/articles/78335.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Tue, 31 Oct 2006 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/78335.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/78335.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/78335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/78335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/78335.html</trackback:ping><description><![CDATA[
		<p>应用displaytag在struts中完成大数据量分页显示，Oracle数据库</p>
		<p> </p>
		<p>JSP文件：</p>
		<p> </p>
		<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
				<div>
						<img id="_2_54_Open_Image" onclick="this.style.display='none'; document.getElementById('_2_54_Open_Text').style.display='none'; document.getElementById('_2_54_Closed_Image').style.display='inline'; document.getElementById('_2_54_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="_2_54_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2_54_Closed_Text').style.display='none'; document.getElementById('_2_54_Open_Image').style.display='inline'; document.getElementById('_2_54_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />
						<span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 0);">&lt;%</span>
						<span id="_2_54_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
						<span id="_2_54_Open_Text">
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">@ taglib uri</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">=</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">/WEB-INF/displaytag.tld</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"> prefix</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">=</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">disp</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);">"</span>
								<span style="color: rgb(0, 0, 0); background-color: rgb(245, 245, 245);"> </span>
						</span>
						<span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 0);">%&gt;</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">disp:table </span>
						<span style="color: rgb(255, 0, 0);">name</span>
						<span style="color: rgb(0, 0, 255);">="resultList"</span>
						<span style="color: rgb(255, 0, 0);"> export</span>
						<span style="color: rgb(0, 0, 255);">="true"</span>
						<span style="color: rgb(255, 0, 0);"> pagesize</span>
						<span style="color: rgb(0, 0, 255);">="100"</span>
						<span style="color: rgb(255, 0, 0);"> requestURI</span>
						<span style="color: rgb(0, 0, 255);">="logQueryAction.do"</span>
						<span style="color: rgb(255, 0, 0);"> sort</span>
						<span style="color: rgb(0, 0, 255);">="external"</span>
						<span style="color: rgb(255, 0, 0);"> id</span>
						<span style="color: rgb(0, 0, 255);">="element"</span>
						<span style="color: rgb(255, 0, 0);"> partialList</span>
						<span style="color: rgb(0, 0, 255);">="true"</span>
						<span style="color: rgb(255, 0, 0);"> size</span>
						<span style="color: rgb(0, 0, 255);">="resultSize"</span>
						<span style="color: rgb(0, 0, 255);">&gt;</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />          </span>
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">disp:column </span>
						<span style="color: rgb(255, 0, 0);">property</span>
						<span style="color: rgb(0, 0, 255);">="operdate"</span>
						<span style="color: rgb(255, 0, 0);"> title</span>
						<span style="color: rgb(0, 0, 255);">="操作时间"</span>
						<span style="color: rgb(255, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 255);">&gt;&lt;/</span>
						<span style="color: rgb(128, 0, 0);">disp:column</span>
						<span style="color: rgb(0, 0, 255);">&gt;</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />          </span>
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">disp:column </span>
						<span style="color: rgb(255, 0, 0);">property</span>
						<span style="color: rgb(0, 0, 255);">="pername"</span>
						<span style="color: rgb(255, 0, 0);"> title</span>
						<span style="color: rgb(0, 0, 255);">="操作人员"</span>
						<span style="color: rgb(255, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 255);">&gt;&lt;/</span>
						<span style="color: rgb(128, 0, 0);">disp:column</span>
						<span style="color: rgb(0, 0, 255);">&gt;</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />          </span>
						<span style="color: rgb(0, 0, 255);">&lt;</span>
						<span style="color: rgb(128, 0, 0);">disp:column </span>
						<span style="color: rgb(255, 0, 0);">property</span>
						<span style="color: rgb(0, 0, 255);">="opertype"</span>
						<span style="color: rgb(255, 0, 0);"> title</span>
						<span style="color: rgb(0, 0, 255);">="操作类型"</span>
						<span style="color: rgb(255, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 255);">&gt;&lt;/</span>
						<span style="color: rgb(128, 0, 0);">disp:column</span>
						<span style="color: rgb(0, 0, 255);">&gt;</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="color: rgb(0, 0, 255);">&lt;/</span>
						<span style="color: rgb(128, 0, 0);">disp:table</span>
						<span style="color: rgb(0, 0, 255);">&gt;</span>
						<span style="color: rgb(0, 0, 0);"> <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /></span>
				</div>
		</div>
		<p> </p>
		<p>name="resultList" 将记录集存在session或者request中的键值<br />export="true" 是否显示导出选项<br />pagesize="100" 每页显示100条数据<br />requestURI="logQueryAction.do"  struts中action的名称，如果记录少，可以直接分页<br />sort="external"  外部排序<br />id="element"   表格id值，用于程序得相关的参数<br />partialList="true"  分段从数据库中读数据<br />size="resultSize"  记录的总条数，用于计算总页数</p>
		<p> </p>
		<p>struts action:</p>
		<p> </p>
		<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
				<div>
						<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
						<span style="color: rgb(0, 0, 0);">String pageIndexName </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 255);">new</span>
						<span style="color: rgb(0, 0, 0);"> org.displaytag.util.ParamEncoder(</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">element</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">).encodeParameterName(org.displaytag.tags.TableTagParameters.PARAMETER_PAGE);   // 页数的参数名<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">int</span>
						<span style="color: rgb(0, 0, 0);"> pageSize </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">100</span>
						<span style="color: rgb(0, 0, 0);">;   //每页显示的条数<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">int</span>
						<span style="color: rgb(0, 0, 0);"> pageIndex </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> GenericValidator.isBlankOrNull(request.getParameter(pageIndexName))</span>
						<span style="color: rgb(0, 0, 0);">?</span>
						<span style="color: rgb(0, 0, 0);">0</span>
						<span style="color: rgb(0, 0, 0);">:(Integer.parseInt(request.getParameter(pageIndexName)) </span>
						<span style="color: rgb(0, 0, 0);">-</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">1</span>
						<span style="color: rgb(0, 0, 0);">);  //当前页数<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />String sqlCount </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">select count(*)  from user_log a </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">;  //用于统计总记录数的sql语句<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        String sql </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> select * from (select rownum as rid, t1.* from (select b.pername as pername,to_char(a.operdate,'yyyy-mm-dd hh24:mi:ss') as operdate,</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> decode(a.opertype,'D','删除','M','修改','其他') as opertype, a.hphm as hphm from user_log a, </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> (select asuser.userid as userid,nvl(asempmsg.pername,asuser.loginname) as pername from asuser,ASEMPMSG where asuser.perid=ASEMPMSG.perid(+)) b</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> where a.userid=b.userid </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">;   //查询语句</span>
				</div>
				<div>
						<span style="color: rgb(0, 0, 0);">            //构造查询条件<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        StringBuffer sb </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 255);">new</span>
						<span style="color: rgb(0, 0, 0);"> StringBuffer();<br /><img id="_930_1025_Open_Image" onclick="this.style.display='none'; document.getElementById('_930_1025_Open_Text').style.display='none'; document.getElementById('_930_1025_Closed_Image').style.display='inline'; document.getElementById('_930_1025_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_930_1025_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_930_1025_Closed_Text').style.display='none'; document.getElementById('_930_1025_Open_Image').style.display='inline'; document.getElementById('_930_1025_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">if</span>
						<span style="color: rgb(0, 0, 0);">(logQueryForm.getCzrqStart()</span>
						<span style="color: rgb(0, 0, 0);">!=</span>
						<span style="color: rgb(0, 0, 255);">null</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">&amp;&amp;</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">!</span>
						<span style="color: rgb(0, 0, 0);">""</span>
						<span style="color: rgb(0, 0, 0);">.equals(logQueryForm.getCzrqStart()))</span>
						<span id="_930_1025_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
						<span id="_930_1025_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            sb.append(</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> and a.operdate &gt; to_date('</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">logQueryForm.getCzrqStart()</span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">','yyyy-mm-dd')</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img id="_1105_1199_Open_Image" onclick="this.style.display='none'; document.getElementById('_1105_1199_Open_Text').style.display='none'; document.getElementById('_1105_1199_Closed_Image').style.display='inline'; document.getElementById('_1105_1199_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="_1105_1199_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1105_1199_Closed_Text').style.display='none'; document.getElementById('_1105_1199_Open_Image').style.display='inline'; document.getElementById('_1105_1199_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">if</span>
						<span style="color: rgb(0, 0, 0);">(logQueryForm.getCzrqEnd()</span>
						<span style="color: rgb(0, 0, 0);">!=</span>
						<span style="color: rgb(0, 0, 255);">null</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">&amp;&amp;</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">!</span>
						<span style="color: rgb(0, 0, 0);">""</span>
						<span style="color: rgb(0, 0, 0);">.equals(logQueryForm.getCzrqEnd()))</span>
						<span id="_1105_1199_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
						<span id="_1105_1199_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            sb.append(</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> and a.operdate &lt;= to_date('</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">logQueryForm.getCzrqEnd()</span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">','yyyy-mm-dd')</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img id="_1273_1341_Open_Image" onclick="this.style.display='none'; document.getElementById('_1273_1341_Open_Text').style.display='none'; document.getElementById('_1273_1341_Closed_Image').style.display='inline'; document.getElementById('_1273_1341_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="_1273_1341_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1273_1341_Closed_Text').style.display='none'; document.getElementById('_1273_1341_Open_Image').style.display='inline'; document.getElementById('_1273_1341_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">if</span>
						<span style="color: rgb(0, 0, 0);">(logQueryForm.getCzlx()</span>
						<span style="color: rgb(0, 0, 0);">!=</span>
						<span style="color: rgb(0, 0, 255);">null</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">&amp;&amp;</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">!</span>
						<span style="color: rgb(0, 0, 0);">""</span>
						<span style="color: rgb(0, 0, 0);">.equals(logQueryForm.getCzlx()))</span>
						<span id="_1273_1341_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
						<span id="_1273_1341_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            sb.append(</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> and a.opertype = '</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">logQueryForm.getCzlx()</span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">'</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img id="_1415_1481_Open_Image" onclick="this.style.display='none'; document.getElementById('_1415_1481_Open_Text').style.display='none'; document.getElementById('_1415_1481_Closed_Image').style.display='inline'; document.getElementById('_1415_1481_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="_1415_1481_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1415_1481_Closed_Text').style.display='none'; document.getElementById('_1415_1481_Open_Image').style.display='inline'; document.getElementById('_1415_1481_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">if</span>
						<span style="color: rgb(0, 0, 0);">(logQueryForm.getCzry()</span>
						<span style="color: rgb(0, 0, 0);">!=</span>
						<span style="color: rgb(0, 0, 255);">null</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">&amp;&amp;</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">!</span>
						<span style="color: rgb(0, 0, 0);">""</span>
						<span style="color: rgb(0, 0, 0);">.equals(logQueryForm.getCzry()))</span>
						<span id="_1415_1481_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
						<span id="_1415_1481_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            sb.append(</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);"> and a.userid = '</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">logQueryForm.getCzry()</span>
								<span style="color: rgb(0, 0, 0);">+</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">'</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">);<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img id="_1555_1624_Open_Image" onclick="this.style.display='none'; document.getElementById('_1555_1624_Open_Text').style.display='none'; document.getElementById('_1555_1624_Closed_Image').style.display='inline'; document.getElementById('_1555_1624_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="_1555_1624_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1555_1624_Closed_Text').style.display='none'; document.getElementById('_1555_1624_Open_Image').style.display='inline'; document.getElementById('_1555_1624_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />     </span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        sqlCount </span>
						<span style="color: rgb(0, 0, 0);">+=</span>
						<span style="color: rgb(0, 0, 0);"> sb.toString();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        sql </span>
						<span style="color: rgb(0, 0, 0);">+=</span>
						<span style="color: rgb(0, 0, 0);"> sb.toString()</span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> order by a.operdate desc) t1 where rownum&lt;=</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />                        </span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);"> (pageIndex </span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">1</span>
						<span style="color: rgb(0, 0, 0);">) </span>
						<span style="color: rgb(0, 0, 0);">*</span>
						<span style="color: rgb(0, 0, 0);"> pageSize </span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);"> ) t2 where t2.rid&gt;</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">+</span>
						<span style="color: rgb(0, 0, 0);"> pageIndex </span>
						<span style="color: rgb(0, 0, 0);">*</span>
						<span style="color: rgb(0, 0, 0);"> pageSize;  //分页读取语句<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        </span>
						<span style="color: rgb(0, 128, 0);">//</span>
						<span style="color: rgb(0, 128, 0);">System.out.println(sb.toString());</span>
						<span style="color: rgb(0, 128, 0);">
								<br />
								<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="color: rgb(0, 0, 0);">        DBBean db </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 255);">new</span>
						<span style="color: rgb(0, 0, 0);"> DBBean();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        ResultSet rs </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 255);">null</span>
						<span style="color: rgb(0, 0, 0);">;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />        PreparedStatement prep </span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);"> </span>
						<span style="color: rgb(0, 0, 255);">null</span>
						<span style="color: rgb(0, 0, 0);">;<br /><img id="_1938_2211_Open_Image" onclick="this.style.display='none'; document.getElementById('_1938_2211_Open_Text').style.display='none'; document.getElementById('_1938_2211_Closed_Image').style.display='inline'; document.getElementById('_1938_2211_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_1938_2211_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_1938_2211_Closed_Text').style.display='none'; document.getElementById('_1938_2211_Open_Image').style.display='inline'; document.getElementById('_1938_2211_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">try</span>
						<span id="_1938_2211_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
						<span id="_1938_2211_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            List resultList </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> db.getResultList(sql);   //将ResultSet保存在List里返回<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            request.setAttribute(</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">resultList</span>
								<span style="color: rgb(0, 0, 0);">"</span>
								<span style="color: rgb(0, 0, 0);">,resultList);  //把结果存入request<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            prep </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> db.getConnection().prepareStatement(sqlCount);    <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            rs </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> prep.executeQuery();<br /><img id="_2136_2207_Open_Image" onclick="this.style.display='none'; document.getElementById('_2136_2207_Open_Text').style.display='none'; document.getElementById('_2136_2207_Closed_Image').style.display='inline'; document.getElementById('_2136_2207_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_2136_2207_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2136_2207_Closed_Text').style.display='none'; document.getElementById('_2136_2207_Open_Image').style.display='inline'; document.getElementById('_2136_2207_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
								<span style="color: rgb(0, 0, 255);">if</span>
								<span style="color: rgb(0, 0, 0);">(rs.next())</span>
								<span id="_2136_2207_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
								<span id="_2136_2207_Open_Text">
										<span style="color: rgb(0, 0, 0);">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />                request.setAttribute(</span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">resultSize</span>
										<span style="color: rgb(0, 0, 0);">"</span>
										<span style="color: rgb(0, 0, 0);">,</span>
										<span style="color: rgb(0, 0, 255);">new</span>
										<span style="color: rgb(0, 0, 0);"> Integer(rs.getInt(</span>
										<span style="color: rgb(0, 0, 0);">1</span>
										<span style="color: rgb(0, 0, 0);">)));     //将总记录数保存成Intger实例保存在request中<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
								</span>
								<span style="color: rgb(0, 0, 0);">
										<br />
										<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img id="_2234_2263_Open_Image" onclick="this.style.display='none'; document.getElementById('_2234_2263_Open_Text').style.display='none'; document.getElementById('_2234_2263_Closed_Image').style.display='inline'; document.getElementById('_2234_2263_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="_2234_2263_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2234_2263_Closed_Text').style.display='none'; document.getElementById('_2234_2263_Open_Image').style.display='inline'; document.getElementById('_2234_2263_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">catch</span>
						<span style="color: rgb(0, 0, 0);">(Exception ex)</span>
						<span id="_2234_2263_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
						<span id="_2234_2263_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />            ex.printStackTrace();<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
						</span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img id="_2274_2327_Open_Image" onclick="this.style.display='none'; document.getElementById('_2274_2327_Open_Text').style.display='none'; document.getElementById('_2274_2327_Closed_Image').style.display='inline'; document.getElementById('_2274_2327_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="_2274_2327_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2274_2327_Closed_Text').style.display='none'; document.getElementById('_2274_2327_Open_Image').style.display='inline'; document.getElementById('_2274_2327_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
						<span style="color: rgb(0, 0, 255);">finally</span>
						<span id="_2274_2327_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
						<span id="_2274_2327_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img id="_2291_2322_Open_Image" onclick="this.style.display='none'; document.getElementById('_2291_2322_Open_Text').style.display='none'; document.getElementById('_2291_2322_Closed_Image').style.display='inline'; document.getElementById('_2291_2322_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_2291_2322_Closed_Image" style="display: none;" onclick="this.style.display='none'; document.getElementById('_2291_2322_Closed_Text').style.display='none'; document.getElementById('_2291_2322_Open_Image').style.display='inline'; document.getElementById('_2291_2322_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
								<span style="color: rgb(0, 0, 255);">if</span>
								<span style="color: rgb(0, 0, 0);">(db</span>
								<span style="color: rgb(0, 0, 0);">!=</span>
								<span style="color: rgb(0, 0, 255);">null</span>
								<span style="color: rgb(0, 0, 0);">)</span>
								<span id="_2291_2322_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">...</span>
								<span id="_2291_2322_Open_Text">
										<span style="color: rgb(0, 0, 0);">{<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />                db.closeConnection();    //关闭连接<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
								</span>
								<span style="color: rgb(0, 0, 0);"> <br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
						</span>
				</div>
		</div>
		<p> </p>
		<p>其中的页面导航是英文的，只要修改org.displaytag.properties.TableTag.properties配置文件就可以把英文改成中文。同时还可以指定导出文件的类型以及文件名。</p>
		<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
				<div>
						<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />
						<span style="color: rgb(0, 0, 0);">export.excel</span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);">true<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />export.excel.label</span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);">&lt;span class</span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">export excel</span>
						<span style="color: rgb(0, 0, 0);">"</span>
						<span style="color: rgb(0, 0, 0);">&gt;Excel &lt;/span&gt;<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />export.excel.include_header</span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);">true<br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />export.excel.filename</span>
						<span style="color: rgb(0, 0, 0);">=</span>
						<span style="color: rgb(0, 0, 0);">export.xls</span>
				</div>
		</div>
		<p>如果不指定文件名，在点击导出excel的时候，就会在ie窗口中打开excel文件。很烦人！<br />指定文件名后就可以选择保存和打开了。</p>
		<div align="center">
				<script type="text/javascript">
						<!--google_ad_client = "pub-9648238652058580";google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as_rimg";google_cpa_choice = "CAAQiYaYhAIaCJ2wcuQYTrQ_KOm293M";google_ad_channel = "";//-->
				</script>
				<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
				</script>
				<iframe name="google_ads_frame" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-9648238652058580&amp;dt=1162260842406&amp;lmt=1162260832&amp;prev_fmts=125x125_as&amp;format=180x60&amp;output=html&amp;url=http%3A%2F%2Fblog.csdn.net%2Flveyo%2Farchive%2F2006%2F08%2F16%2F1076047.aspx&amp;ref=http%3A%2F%2Ftag.csdn.net%2FArticle%2Fabe762e2-9bc7-4287-8938-f3828bd1af68.html&amp;cc=22&amp;u_h=768&amp;u_w=1024&amp;u_ah=690&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=1&amp;u_java=true&amp;u_nplug=17&amp;u_nmime=52" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" frameborder="0" height="60" scrolling="no" width="180">
				</iframe>
		</div>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1076047</p>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/78335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-10-31 17:53 <a href="http://www.blogjava.net/huanghuizz/articles/78335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在JSP中应用FCKeditor</title><link>http://www.blogjava.net/huanghuizz/articles/77947.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sun, 29 Oct 2006 16:16:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/77947.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/77947.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/77947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/77947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/77947.html</trackback:ping><description><![CDATA[
		<p>1. 将FCKeditor2.1.1解压缩到项目的根目录下，目录结构为：\项目名\FCKeditor\ ，然后将FCKeditor-2.3.zip（java）压缩包中\web\WEB-INF\lib\目录下的两个jar文件拷到项目的\WEB-INF\lib\目录下。</p>
		<p>2. 将FCKeditor-2.3.zip压缩包中\web\WEB-INF\目录下的web.xml文件合并到项目的\WEB-INF\目录下的web.xml文件中。</p>
		<p>3. 修改合并后的web.xml文件，将名为SimpleUploader的Servlet的enabled参数值改为true，以允许上传功能，Connector Servlet的baseDir参数值用于设置上传文件存放的位置。</p>
		<p>4. 上面两个servlet的映射分别为：/editor/filemanager/browser/default/connectors/jsp/connector和/editor/filemanager/upload/simpleuploader，因为我的FCKeditor是放到\项目名\FCKeditor\目录下，所以需要在两个映射前面加上/FCKeditor，即改为/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector和/FCKeditor/editor/filemanager/upload/simpleuploader。</p>
		<p>5. 采用Taglib在jsp中添加如下代码创建在线编辑器：</p>
		<p>    在页面的顶部加入〈%@ taglib uri="http://fckeditor.net/tags-fckeditor" prefix="FCK" %〉</p>
		<p>    在适当的位置加入下面代码</p>
		<p>  〈FCK:editor <?XML:NAMESPACE PREFIX = FCK /?><fck:editor><strong><strong>id</strong></strong>="infoContent" <strong>basePath</strong>="/CM/FCKeditor/"<br />              <strong>width</strong>="522"<br />              <strong>height</strong>="300"<br />              <strong>skinPath</strong>="/CM/FCKeditor/editor/skins/silver/"<br />              <strong>defaultLanguage</strong>="zh-cn"<br />              <strong>tabSpaces</strong>="8"<br />              <strong>toolbarSet</strong>="CM"<br />              <strong>imageBrowserURL</strong>="/CM/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&amp;Connector=connectors/jsp/connector"<br />              <strong>linkBrowserURL</strong>="/CM/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"<br />              <strong>flashBrowserURL</strong>="/CM/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&amp;Connector=connectors/jsp/connector"<br />              <strong>imageUploadURL</strong>="/CM/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image"<br />              <strong>linkUploadURL</strong>="/CM/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File"<br />              <strong>flashUploadURL</strong>="/CM/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash"〉<br />              请输入内容<br />  〈/FCK:editor〉</fck:editor></p>
		<p>    注意/CM/，为项目名，不用修改web.xml文件。</p>
		<p>6. 经过上面步骤就可以在jsp中使用FCKeditor了。</p>
		<p>===================================================================</p>
		<p>另外，如果使用WebLogic，需要将FCKeditor-2.3.zip压缩包中src目录下的FCKeditor.tld文件提取出来，比如将其放到WEB-INF/tlds/目录下，然后将jsp页中的taglib语句修改为如下所示，就可以正常使用了：</p>
		<p>&lt;%@ taglib uri="/WEB-INF/tlds/FCKeditor.tld" prefix="FCK" %&gt;<br /><br /></p>
		<div>
				<b>三、配置</b>
		</div>
		<div>
				<br />　　FCKeditor 2.0的配置文件为FCKeditor\fckconfig.js，其中几个重要的配置项目如下：<br /><br /></div>
		<div>
				<strong>1、工具栏的设置<br /><br /></strong>
		</div>
		<div>　　默认情况下，FCKeditor会调用如下的工具栏按钮，大家可以根据自己的需要进行增减。需要注意的是，2.0版与1.6版的按钮并不完全相同，有些按钮以及删除或者改名了。<br /><br /></div>
		<div>//##</div>
		<div>//## Toolbar Buttons Sets</div>
		<div>//##</div>
		<div>FCKConfig.ToolbarSets["Default"] = [</div>
		<div>       ['Source','-','Save','NewPage','Preview'],</div>
		<div>       ['Cut','Copy','Paste','PasteText','PasteWord','-','Print'],</div>
		<div>       ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],</div>
		<div>       ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],</div>
		<div>       ['OrderedList','UnorderedList','-','Outdent','Indent'],</div>
		<div>       ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],</div>
		<div>       ['Link','Unlink'],</div>
		<div>       ['Image','Table','Rule','SpecialChar','Smiley'],</div>
		<div>       ['Style','FontFormat','FontName','FontSize'],</div>
		<div>       ['TextColor','BGColor'],</div>
		<div>       ['About']</div>
		<div>] ;<br /><br /><strong>2、简体中文设置<br /><br /></strong>编辑edit/lang/fcklanguagemanager.js<br /><br />将下面语句<br /><br />FCKLanguageManager.AvailableLanguages = <br />{<br /> 'ar'  : 'Arabic',<br /> 'bs'  : 'Bosnian',<br /> 'ca'  : 'Catalan',<br /> 'en'  : 'English',<br /> 'es'  : 'Spanish',<br /> 'et'  : 'Estonian',<br /> 'fi'  : 'Finnish',<br /> 'fr'  : 'French',<br /> 'gr'  : 'Greek',<br /> 'he'  : 'Hebrew',<br /> 'hr'  : 'Croatian',<br /> 'it'  : 'Italian',<br /> 'ko'  : 'Korean',<br /> 'lt'  : 'Lithuanian',<br /> 'no'  : 'Norwegian',<br /> 'pl'  : 'Polish',<br /> 'sr'  : 'Serbian (Cyrillic)',<br /> 'sr-latn' : 'Serbian (Latin)',<br /> 'sv'  : 'Swedish'<br />}<br /><br />添加一行 'zh-cn'    : 'Chinese' 从而变成<br /><br />FCKLanguageManager.AvailableLanguages = <br />{<br /> 'ar'  : 'Arabic',<br /> 'bs'  : 'Bosnian',<br /> 'ca'  : 'Catalan',<br /> 'en'  : 'English',<br /> 'es'  : 'Spanish',<br /> 'et'  : 'Estonian',<br /> 'fi'  : 'Finnish',<br /> 'fr'  : 'French',<br /> 'gr'  : 'Greek',<br /> 'he'  : 'Hebrew',<br /> 'hr'  : 'Croatian',<br /> 'it'  : 'Italian',<br /> 'ko'  : 'Korean',<br /> 'lt'  : 'Lithuanian',<br /> 'no'  : 'Norwegian',<br /> 'pl'  : 'Polish',<br /> 'sr'  : 'Serbian (Cyrillic)',<br /> 'sr-latn' : 'Serbian (Latin)',<br /> 'sv'  : 'Swedish',<br /> 'zh-cn'     : 'Chinese'<br />}<br /><br />　　然后到这里<a href="http://www.shaof.com/download/zh-cn.js">http://www.shaof.com/download/zh-cn.js</a>下载汉化好的zh-cn.js保存到editor/lang目录下即可。</div>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/77947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-10-30 00:16 <a href="http://www.blogjava.net/huanghuizz/articles/77947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j 学习</title><link>http://www.blogjava.net/huanghuizz/articles/72590.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 28 Sep 2006 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/72590.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/72590.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/72590.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/72590.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/72590.html</trackback:ping><description><![CDATA[输出格式:log4j.appender.fileout.layout.ConversionPattern=%d{yyy MMM dd HH:mm:ss,SSS}[%24F\:%-3L\:%-5p]%x %m%n       如:2002年10月18日 22：10：28，921........<img src ="http://www.blogjava.net/huanghuizz/aggbug/72590.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-28 15:31 <a href="http://www.blogjava.net/huanghuizz/articles/72590.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命名规则</title><link>http://www.blogjava.net/huanghuizz/articles/71498.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Sat, 23 Sep 2006 15:18:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/71498.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/71498.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/71498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/71498.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/71498.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 9pt">
				<font face="宋体">比较著名的命名规则当推Microsoft公司的“匈牙利”法，该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。例如所有的字符变量均以ch为前缀，若是指针变量则追加前缀p。如果一个变量由ppch开头，则表明它是指向字符指针的指针。<br /><br />“匈牙利”法最大的缺点是烦琐，例如<br /><br />int i, j, k; <br /><br />float x, y, z;<br /><br />倘若采用“匈牙利”命名规则，则应当写成<br /><br />int iI, iJ, ik; // 前缀 i表示int类型<br /><br />float fX, fY, fZ; // 前缀 f表示float类型<br /><br />如此烦琐的程序会让绝大多数程序员无法忍受。<br /><br />据考察，没有一种命名规则可以让所有的程序员赞同，程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是“成败悠关”的事，我们不要化太多精力试图发明世界上最好的命名规则，而应当制定一种令大多数项目成员满意的命名规则，并在项目中贯彻实施。<br /><br />3.1 共性规则<br />本节论述的共性规则是被大多数程序员采纳的，我们应当在遵循这些共性规则的前提下，再扩充特定的规则，如3.2节。<br /><br /><br />l 【规则3-1-1】标识符应当直观且可以拼读，可望文知意，不必进行“解码”。<br /><br />标识符最好采用英文单词或其组合，便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂，用词应当准确。例如不要把CurrentValue写成NowValue。<br /><br /><br />l 【规则3-1-2】标识符的长度应当符合“min-length &amp;&amp; max-information”原则。<br /><br />几十年前老ANSI C规定名字不准超过6个字符，现今的C++/C不再有此限制。一般来说，长名字能更好地表达含义，所以函数名、变量名、类名长达十几个字符不足为怪。那么名字是否越长约好？不见得! 例如变量名maxval就比maxValueUntilOverflow好用。单字符的名字也是有用的，常见的如i,j,k,m,n,x,y,z等，它们通常可用作函数内的局部变量。<br /><br /><br />l 【规则3-1-3】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。<br /><br />例如Windows应用程序的标识符通常采用“大小写”混排的方式，如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式，如add_child。别把这两类风格混在一起用。<br /><br /><br />l 【规则3-1-4】程序中不要出现仅靠大小写区分的相似的标识符。<br /><br />例如：<br /><br />int x, X; // 变量x 与 X 容易混淆<br /><br />void foo(int x); // 函数foo 与FOO容易混淆<br /><br />void FOO(float x);<br /><br /><br />l 【规则3-1-5】程序中不要出现标识符完全相同的局部变量和全局变量，尽管两者的作用域不同而不会发生语法错误，但会使人误解。<br /><br /><br />l 【规则3-1-6】变量的名字应当使用“名词”或者“形容词＋名词”。<br /><br />例如：<br /><br />float value;<br /><br />float oldValue;<br /><br />float newValue;<br /><br /><br />l 【规则3-1-7】全局函数的名字应当使用“动词”或者“动词＋名词”（动宾词组）。类的成员函数应当只使用“动词”，被省略掉的名词就是对象本身。<br /><br />例如：<br /><br />DrawBox(); // 全局函数<br /><br />box-&gt;Draw(); // 类的成员函数<br /><br /><br />l 【规则3-1-8】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。<br /><br />例如：<br /><br />int minValue;<br /><br />int maxValue;<br /><br /><br />int SetValue(…);<br /><br />int GetValue(…);<br /><br /><br />2 【建议3-1-1】尽量避免名字中出现数字编号，如Value1,Value2等，除非逻辑上的确需要编号。这是为了防止程序员偷懒，不肯为命名动脑筋而导致产生无意义的名字（因为用数字编号最省事）。<br /><br />3.2 简单的Windows应用程序命名规则<br />作者对“匈牙利”命名规则做了合理的简化，下述的命名规则简单易用，比较适合于Windows应用软件的开发。<br /><br /><br />l 【规则3-2-1】类名和函数名用大写字母开头的单词组合而成。<br /><br />例如：<br /><br />class Node; // 类名<br /><br />class LeafNode; // 类名<br /><br />void Draw(void); // 函数名<br /><br />void SetValue(int value); // 函数名<br /><br /><br />l 【规则3-2-2】变量和参数用小写字母开头的单词组合而成。<br /><br />例如：<br /><br />BOOL flag;<br /><br />int drawMode;<br /><br /><br />l 【规则3-2-3】常量全用大写的字母，用下划线分割单词。<br /><br />例如：<br /><br />const int MAX = 100;<br /><br />const int MAX_LENGTH = 100;<br /><br /><br />l 【规则3-2-4】静态变量加前缀s_（表示static）。<br /><br />例如：<br /><br />void Init(…)<br /><br />{<br /><br />static int s_initValue; // 静态变量<br /><br />…<br /><br />}<br /><br /><br />l 【规则3-2-5】如果不得已需要全局变量，则使全局变量加前缀g_（表示global）。<br /><br />例如：<br /><br />int g_howManyPeople; // 全局变量<br /><br />int g_howMuchMoney; // 全局变量<br /><br /><br />l 【规则3-2-6】类的数据成员加前缀m_（表示member），这样可以避免数据成员与成员函数的参数同名。<br /><br />例如：<br /><br />void Object::SetValue(int width, int height)<br /><br />{<br /><br />m_width = width;<br /><br />m_height = height;<br /><br />}<br /><br /><br />l 【规则3-2-7】为了防止某一软件库中的一些标识符和其它软件库中的冲突，可以为各种标识符加上能反映软件性质的前缀。例如三维图形标准OpenGL的所有库函数均以gl开头，所有常量（或宏定义）均以GL开头。<br /></font>
				<br />
		</span>
<img src ="http://www.blogjava.net/huanghuizz/aggbug/71498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-23 23:18 <a href="http://www.blogjava.net/huanghuizz/articles/71498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获得客户端的ip</title><link>http://www.blogjava.net/huanghuizz/articles/70813.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Wed, 20 Sep 2006 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/70813.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/70813.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/70813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/70813.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/70813.html</trackback:ping><description><![CDATA[
		<p class="content">在IIS+Weblogic整合系统中，像移动网关一样，iisforward这个ISAPI过滤器也会对request对象进行再包装，附加一些WLS要用的头信息。这种情况下，直接用<code>request.getRemoteAddr()</code>是无法取到真正的客户IP的。<br /><br />实际的iisforward附加头如下： </p>
		<pre>WL-Proxy-Client-IP=211.161.1.239
Proxy-Client-IP=211.161.1.239
X-Forwarded-For=211.161.1.239
WL-Proxy-Client-Keysize=
WL-Proxy-Client-Secretkeysize=
X-WebLogic-Request-ClusterInfo=true
X-WebLogic-KeepAliveSecs=30
X-WebLogic-Force-JVMID=-327089098
WL-Proxy-SSL=false
</pre>综上，正确作法如下： <pre>public String getIpAddr(HttpServletRequest request) {
    String ip=request.getHeader("X-Forwarded-For");
    if(ip == null || ip.length() == 0) {
        ip=request.getHeader("Proxy-Client-IP");
    }
    if(ip == null || ip.length() == 0) {
        ip=request.getHeader("WL-Proxy-Client-IP");
    }
    if(ip == null || ip.length() == 0) {
        ip=request.getRemoteAddr();
    }
    return ip;
}
</pre>如此一来，就可适应各种情况，包括通过移动网关访问（会附加X-Forwarded-For）。通过这个简单例子可以看出封装和抽象的重要性。 <img src ="http://www.blogjava.net/huanghuizz/aggbug/70813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-20 15:27 <a href="http://www.blogjava.net/huanghuizz/articles/70813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate程序性能优化的考虑要点</title><link>http://www.blogjava.net/huanghuizz/articles/70214.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Mon, 18 Sep 2006 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/70214.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/70214.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/70214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/70214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/70214.html</trackback:ping><description><![CDATA[本文依照HIBERNATE帮助文档，一些网络书籍及项目经验整理而成，只提供要点和思路，具体做法可以留言探讨，或是找一些更详细更有针对性的资料。
<p>　　初用HIBERNATE的人也许都遇到过性能问题，实现同一功能，用HIBERNATE与用JDBC性能相差十几倍很正常，如果不及早调整，很可能影响整个项目的进度。</p><p>　　大体上，对于HIBERNATE性能调优的主要考虑点如下:</p><p>　　Ø 数据库设计调整</p><p>　　Ø HQL优化</p><p>　　Ø API的正确使用(如根据不同的业务类型选用不同的集合及查询API)</p><p>　　Ø 主配置参数(日志，查询缓存，fetch_size, batch_size等)</p><p>　　Ø 映射文件优化(ID生成策略，二级缓存，延迟加载，关联优化)</p><p>　　Ø 一级缓存的管理</p><p>　　Ø 针对二级缓存，还有许多特有的策略</p><p>　　Ø 事务控制策略。</p><p>　　1、 数据库设计</p><p>　　a) 降低关联的复杂性</p><p>　　b) 尽量不使用联合主键</p><p>　　c) ID的生成机制，不同的数据库所提供的机制并不完全一样</p><p>　　d) 适当的冗余数据，不过分追求高范式</p><p>　　2、 HQL优化</p><p>　　HQL如果抛开它同HIBERNATE本身一些缓存机制的关联，HQL的优化技巧同普通的SQL优化技巧一样，可以很容易在网上找到一些经验之谈。</p><p>　　3、 主配置</p><p>　　a) 查询缓存，同下面讲的缓存不太一样，它是针对HQL语句的缓存，即完全一样的语句再次执行时可以利用缓存数据。但是，查询缓存在一个交易系统(数据变更频繁，查询条件相同的机率并不大)中可能会起反作用:它会白白耗费大量的系统资源但却难以派上用场。</p><p>　　b) fetch_size，同JDBC的相关参数作用类似，参数并不是越大越好，而应根据业务特征去设置</p><p>　　c) batch_size同上。</p><p>　　d) 生产系统中，切记要关掉SQL语句打印。</p><p>　　4、 缓存</p><p>　　a) 数据库级缓存:这级缓存是最高效和安全的，但不同的数据库可管理的层次并不一样，比如，在ORACLE中，可以在建表时指定将整个表置于缓存当中。</p><p>　　b) SESSION缓存:在一个HIBERNATE SESSION有效，这级缓存的可干预性不强，大多于HIBERNATE自动管理，但它提供清除缓存的方法，这在大批量增加/更新操作是有效的。比如，同时增加十万条记录，按常规方式进行，很可能会发现OutofMemeroy的异常，这时可能需要手动清除这一级缓存:Session.evict以及Session.clear</p><p>　　c) 应用缓存:在一个SESSIONFACTORY中有效，因此也是优化的重中之重，因此，各类策略也考虑的较多，在将数据放入这一级缓存之前，需要考虑一些前提条件:</p><p>　　i. 数据不会被第三方修改(比如，是否有另一个应用也在修改这些数据?)</p><p>　　ii. 数据不会太大</p><p>　　iii. 数据不会频繁更新(否则使用CACHE可能适得其反)</p><p>　　iv. 数据会被频繁查询</p><p>　　v. 数据不是关键数据(如涉及钱，安全等方面的问题)。</p><p>　　缓存有几种形式，可以在映射文件中配置:read-only(只读，适用于很少变更的静态数据/历史数据)，nonstrict-read-write，read-write(比较普遍的形式，效率一般)，transactional(JTA中，且支持的缓存产品较少)</p><p>　　d) 分布式缓存:同c)的配置一样，只是缓存产品的选用不同，在目前的HIBERNATE中可供选择的不多，oscache, jboss cache，目前的大多数项目，对它们的用于集群的使用(特别是关键交易系统)都持保守态度。在集群环境中，只利用数据库级的缓存是最安全的。</p><p>　　5、 延迟加载</p><p>　　a) 实体延迟加载:通过使用动态代理实现</p><p>　　b) 集合延迟加载:通过实现自有的SET/LIST，HIBERNATE提供了这方面的支持</p><p>　　c) 属性延迟加载:</p><p>　　6、 方法选用</p><p>　　a) 完成同样一件事，HIBERNATE提供了可供选择的一些方式，但具体使用什么方式，可能用性能/代码都会有影响。显示，一次返回十万条记录(List/Set/Bag/Map等)进行处理，很可能导致内存不够的问题，而如果用基于游标(ScrollableResults)或Iterator的结果集，则不存在这样的问题。</p><p>　　b) Session的load/get方法，前者会使用二级缓存，而后者则不使用。</p><p>　　c) Query和list/iterator，如果去仔细研究一下它们，你可能会发现很多有意思的情况，二者主要区别(如果使用了Spring，在HibernateTemplate中对应find,iterator方法):</p><p>　　i. list只能利用查询缓存(但在交易系统中查询缓存作用不大)，无法利用二级缓存中的单个实体，但list查出的对象会写入二级缓存，但它一般只生成较少的执行SQL语句，很多情况就是一条(无关联)。</p><p>　　ii. iterator则可以利用二级缓存，对于一条查询语句，它会先从数据库中找出所有符合条件的记录的ID，再通过ID去缓存找，对于缓存中没有的记录，再构造语句从数据库中查出，因此很容易知道，如果缓存中没有任何符合条件的记录，使用iterator会产生N+1条SQL语句(N为符合条件的记录数)</p><p>　　iii. 通过iterator，配合缓存管理API，在海量数据查询中可以很好的解决内存问题，如:</p><p>　　while(it.hasNext()){</p><p>　　YouObject object = (YouObject)it.next();</p><p>　　session.evict(youObject);</p><p>　　sessionFactory.evice(YouObject.class, youObject.getId());</p><p>　　}</p><p>　　如果用list方法，很可能就出OutofMemory错误了。</p><p>　　iv. 通过上面的说明，我想你应该知道如何去使用这两个方法了。</p><p>　　7、 集合的选用</p><p>　　在HIBERNATE 3.1文档的“19.5. Understanding Collection performance”中有详细的说明。</p><p>　　8、 事务控制</p><p>　　事务方面对性能有影响的主要包括:事务方式的选用，事务隔离级别以及锁的选用</p><p>　　a) 事务方式选用:如果不涉及多个事务管理器事务的话，不需要使用JTA，只有JDBC的事务控制就可以。</p><p>　　b) 事务隔离级别:参见标准的SQL事务隔离级别</p><p>　　c) 锁的选用:悲观锁(一般由具体的事务管理器实现)，对于长事务效率低，但安全。乐观锁(一般在应用级别实现)，如在HIBERNATE中可以定义VERSION字段，显然，如果有多个应用操作数据，且这些应用不是用同一种乐观锁机制，则乐观锁会失效。因此，针对不同的数据应有不同的策略，同前面许多情况一样，很多时候我们是在效率与安全/准确性上找一个平衡点，无论如何，优化都不是一个纯技术的问题，你应该对你的应用和业务特征有足够的了解。</p><p>　　9、 批量操作</p><p>　　即使是使用JDBC，在进行大批数据更新时，BATCH与不使用BATCH有效率上也有很大的差别。我们可以通过设置batch_size来让其支持批量操作。</p><p>　　举个例子，要批量删除某表中的对象，如“delete Account”，打出来的语句，会发现HIBERNATE找出了所有ACCOUNT的ID，再进行删除，这主要是为了维护二级缓存，这样效率肯定高不了，在后续的版本中增加了bulk delete/update，但这也无法解决缓存的维护问题。也就是说，由于有了二级缓存的维护问题，HIBERNATE的批量操作效率并不尽如人意!</p><p>　　从前面许多要点可以看出，很多时候我们是在效率与安全/准确性上找一个平衡点，无论如何，优化都不是一个纯技术的问题，你应该对你的应用和业务特征有足够的了解，一般的，优化方案应在架构设计期就基本确定，否则可能导致没必要的返工，致使项目延期，而作为架构师和项目经理，还要面对开发人员可能的抱怨，必竟，我们对用户需求更改的控制力不大，但技术/架构风险是应该在初期意识到并制定好相关的对策。</p><p>　　还有一点要注意，应用层的缓存只是锦上添花，永远不要把它当救命稻草，应用的根基(数据库设计，算法，高效的操作语句，恰当API的选择等)才是最重要的。</p><img src ="http://www.blogjava.net/huanghuizz/aggbug/70214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-09-18 09:32 <a href="http://www.blogjava.net/huanghuizz/articles/70214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅谈cms</title><link>http://www.blogjava.net/huanghuizz/articles/66838.html</link><dc:creator>七匹狼</dc:creator><author>七匹狼</author><pubDate>Thu, 31 Aug 2006 04:31:00 GMT</pubDate><guid>http://www.blogjava.net/huanghuizz/articles/66838.html</guid><wfw:comment>http://www.blogjava.net/huanghuizz/comments/66838.html</wfw:comment><comments>http://www.blogjava.net/huanghuizz/articles/66838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huanghuizz/comments/commentRss/66838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huanghuizz/services/trackbacks/66838.html</trackback:ping><description><![CDATA[cms对于网站的首页来说是很好的，不用一打开网页就和数据库连接，去跑什么最新的最hot的。用其他的技术让cms可以定时的去和数据库连接更新静态页面的内容。<br /><br />cms的大概的流程如下：<br />      页面的制作（自定义规则，方便解析）－－－－－》保存到数据库－－－－－－》定时的发布（发布时的解析，生成静态的页面，发布到哪个目录）。〕<br /><br />   流程大概如下，但因为这和需求的不同数据库也不同的解析的方式也不同。本人才知道流程，具体还不清。请各位大虾指点好的书籍和好的方法。<img src ="http://www.blogjava.net/huanghuizz/aggbug/66838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huanghuizz/" target="_blank">七匹狼</a> 2006-08-31 12:31 <a href="http://www.blogjava.net/huanghuizz/articles/66838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>