﻿<?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-stargazers-随笔分类-个人学习日记</title><link>http://www.blogjava.net/lzj520/category/15687.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 20 Nov 2009 05:44:49 GMT</lastBuildDate><pubDate>Fri, 20 Nov 2009 05:44:49 GMT</pubDate><ttl>60</ttl><item><title>091118求杨辉三角中的项</title><link>http://www.blogjava.net/lzj520/archive/2009/11/18/302812.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Wed, 18 Nov 2009 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/11/18/302812.html</guid><description><![CDATA[public static int recursion(int l,int n){<br />
&nbsp;&nbsp;int r=0;<br />
&nbsp;&nbsp;if(l==1|n==1|l==n){<br />
&nbsp;&nbsp;&nbsp;return 1;<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;return recursion(l-1,n-1)+recursion(l-1,n);<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
<br />
public static void main(String[] args){<br />
System.out.println(recursion(7,4));<br />
}
<img src ="http://www.blogjava.net/lzj520/aggbug/302812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-11-18 16:11 <a href="http://www.blogjava.net/lzj520/archive/2009/11/18/302812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090505 james邮件自动跑去spam box下面的问题</title><link>http://www.blogjava.net/lzj520/archive/2009/05/05/269027.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 05 May 2009 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/05/05/269027.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/269027.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/05/05/269027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/269027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/269027.html</trackback:ping><description><![CDATA[<p>解决用james收邮件时邮件自己跑去了spam box下面的问题，把下面这段注释掉就可以了。</p>
<p>&lt;mailet match="InSpammerBlacklist=dnsbl.njabl.org."<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="ToProcessor"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;processor&gt; spam &lt;/processor&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;notice&gt;550 Requested action not taken: rejected - see http://njabl.org/ &lt;/notice&gt;<br />
&lt;/mailet&gt;<br />
</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/269027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-05-05 17:18 <a href="http://www.blogjava.net/lzj520/archive/2009/05/05/269027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090310 Exercise 1.12 Pascal's triangle</title><link>http://www.blogjava.net/lzj520/archive/2009/03/10/258890.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 10 Mar 2009 11:21:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/10/258890.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258890.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/10/258890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258890.html</trackback:ping><description><![CDATA[(define (Pascal x y)<br />
&nbsp; (cond ((&gt; y x) (display "error input"))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= x 1) 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= x 2) 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= y 1) 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= x y) 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (+ (Pascal(- x 1) y) (Pascal (- x 1) (- y 1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))))
<img src ="http://www.blogjava.net/lzj520/aggbug/258890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-10 19:21 <a href="http://www.blogjava.net/lzj520/archive/2009/03/10/258890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090310 RHEL 下安装带mod_prox模块的apache</title><link>http://www.blogjava.net/lzj520/archive/2009/03/10/258885.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 10 Mar 2009 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/10/258885.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258885.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/10/258885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258885.html</trackback:ping><description><![CDATA[./configure --enable-modes-shared=proxy<br />
make<br />
make install<br />
<br />
或是不重新安装的情况下：<br />
make WITH_PROXY_MODULE=yes
 <img src ="http://www.blogjava.net/lzj520/aggbug/258885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-10 19:06 <a href="http://www.blogjava.net/lzj520/archive/2009/03/10/258885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090310 RHEL 下挂载windows文件目录</title><link>http://www.blogjava.net/lzj520/archive/2009/03/10/258883.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 10 Mar 2009 11:04:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/10/258883.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258883.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/10/258883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258883.html</trackback:ping><description><![CDATA[访问：<br />
smbclient -L 192.168.0.11 -U administrator <br />
挂载：<br />
mount -t smbfs -o username=administrator,password=pwdabc,iocharset=cpq36 //192.168.0.11/share /mnt/11share
 <img src ="http://www.blogjava.net/lzj520/aggbug/258883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-10 19:04 <a href="http://www.blogjava.net/lzj520/archive/2009/03/10/258883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090310 Exercise 1.11. recursive process and iterative</title><link>http://www.blogjava.net/lzj520/archive/2009/03/10/258516.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 10 Mar 2009 00:51:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/10/258516.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258516.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/10/258516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258516.html</trackback:ping><description><![CDATA[<p><strong>Exercise 1.11.</strong>&nbsp;&nbsp;A function <em>f</em> is defined by the rule that <em>f</em>(<em>n</em>) = <em>n</em> if <em>n</em>&lt;3 and <em>f</em>(<em>n</em>) = <em>f</em>(<em>n</em> - 1) + 2<em>f</em>(<em>n</em> - 2) + 3<em>f</em>(<em>n</em> - 3) if <em>n</em><u>&gt;</u> 3. Write a procedure that computes <em>f</em> by means of a recursive process. Write a procedure that computes <em>f</em> by means of an iterative process. <br />
<br />
recursive:<br />
<br />
(define (fn n)<br />
&nbsp; (cond ((&gt;= n 3) (+ (+ (fn (- n 1)) (* 2 (fn (- n 2)))) (* 3 (fn (- n 3)))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&lt; n 3) n)<br />
&nbsp;&nbsp; ))</p>
<p><br />
&nbsp;iterative:<br />
<br />
(define (re n)<br />
&nbsp; (if (&lt; n 3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter 2 1 0 n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )) <br />
(define (iter a b c n)<br />
(if(= n 3)<br />
&nbsp;&nbsp; (ca a b c)<br />
&nbsp;&nbsp; (iter (ca a b c) a b (- n 1))<br />
&nbsp;&nbsp; ) <br />
)<br />
(define (ca a b c)<br />
&nbsp; (+ a (* 2 b) (* 3 c) )<br />
)</p>
 <img src ="http://www.blogjava.net/lzj520/aggbug/258516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-10 08:51 <a href="http://www.blogjava.net/lzj520/archive/2009/03/10/258516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090306 Exercise 1.8 cube-root procedures</title><link>http://www.blogjava.net/lzj520/archive/2009/03/06/258241.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 06 Mar 2009 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/06/258241.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258241.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/06/258241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258241.html</trackback:ping><description><![CDATA[Exercise 1.8.&nbsp; Newton's method for cube roots is based on the fact that if y is an approximation to<br />
the cube root of x, then a better approximation is given by the value <br />
(x/y2+2y)/3<br />
Use this formula to implement a cube-root procedure analogous to the square-root procedure. (In<br />
section 1.3.4 we will see how to implement Newton's method in general as an abstraction of these<br />
square-root and cube-root procedures.) <br />
<br />
(define (cube x)<br />
&nbsp; (* x x x))<br />
(define (square x)<br />
&nbsp; (* x x ))<br />
(define (result x y)<br />
&nbsp;(/ (+ (/ x (square y)) (* 2 y)) 3))<br />
(define (improve&nbsp; x guess)<br />
&nbsp; (result&nbsp;&nbsp; x guess))<br />
(define (good-enough?&nbsp; x guess)<br />
&nbsp; (&lt; (abs (- (* guess guess guess ) x))0.001))<br />
(define (sqrt-iter x&nbsp; guess)<br />
&nbsp; (if (good-enough?&nbsp; x guess)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guess<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sqrt-iter x (improve&nbsp; x guess)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )))
 <img src ="http://www.blogjava.net/lzj520/aggbug/258241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-06 16:22 <a href="http://www.blogjava.net/lzj520/archive/2009/03/06/258241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090306 Exercise 1.6 Square Roots by Newton's Method</title><link>http://www.blogjava.net/lzj520/archive/2009/03/06/258214.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 06 Mar 2009 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/06/258214.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258214.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/06/258214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258214.html</trackback:ping><description><![CDATA[Exercise 1.6.&nbsp; Alyssa P. Hacker doesn't see why if needs to be provided as a special form. ``Why<br />
can't I just define it as an ordinary procedure in terms of cond?'' she asks. Alyssa's friend Eva Lu<br />
Ator claims this can indeed be done, and she defines a new version of if: <br />
(define (new-if predicate then-clause else-clause)<br />
&nbsp; (cond (predicate then-clause)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else else-clause)))<br />
Eva demonstrates the program for Alyssa: <br />
(new-if (= 2 3) 0 5)<br />
5<br />
(new-if (= 1 1) 0 5)<br />
0<br />
Delighted, Alyssa uses new-if to rewrite the square-root program: <br />
32(define (sqrt-iter guess x)<br />
&nbsp; (new-if (good-enough? guess x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guess<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sqrt-iter (improve guess x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x)))<br />
What happens when Alyssa attempts to use this to compute square roots? Explain. <br />
<br />
<br />
<p>(define (new-if predicate then-clause else-clause)<br />
(cond (predicate then-clause)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else-clause)))<br />
(define (average x y)<br />
&nbsp; (/ (+ x y) 2))<br />
(define (improve guess x)<br />
&nbsp; (average guess (/ x guess)))<br />
(define (good-enough? guess x)<br />
&nbsp; (&lt; (abs (- (square guess) x))0.001))<br />
(define (square x)<br />
&nbsp; (* x x))<br />
(define (sqrt-iter guess x)<br />
&nbsp; (new-if (good-enough? guess x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guess<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sqrt-iter (improve guess x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x)))<br />
<br />
sqrt-iter (improve guess x)作为参数来传递给new-if，在执行new-if的时候，就总是会执行sqrt-iter (improve guess x)，造成了死循环。<br />
</p>
  <img src ="http://www.blogjava.net/lzj520/aggbug/258214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-06 15:19 <a href="http://www.blogjava.net/lzj520/archive/2009/03/06/258214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090305 Exercise 1.3 returns the sum of the squares of the two larger numbers</title><link>http://www.blogjava.net/lzj520/archive/2009/03/05/258058.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 05 Mar 2009 11:56:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/05/258058.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258058.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/05/258058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258058.html</trackback:ping><description><![CDATA[Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers. <br />
<br />
(define (compare x y) (- x y))<br />
(define (sumsquares x y)(+(* x x)(* y y)))<br />
(define (returnlarge a b c)<br />
&nbsp; (cond ((and (&gt;= (compare a b) 0) (&gt;= (compare c b) 0)) (sumsquares a c)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((and (&gt;= (compare a c) 0) (&gt;= (compare b c) 0)) (sumsquares a b)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((and (&gt;= (compare c a) 0) (&gt;= (compare b a) 0)) (sumsquares b c)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
&nbsp; )<br />
(returnlarge 3 3 2)<br />
<br />
&gt;18
   <img src ="http://www.blogjava.net/lzj520/aggbug/258058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-05 19:56 <a href="http://www.blogjava.net/lzj520/archive/2009/03/05/258058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090213 集群内用jsessionid共享session</title><link>http://www.blogjava.net/lzj520/archive/2009/02/13/254575.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 13 Feb 2009 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/02/13/254575.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/254575.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/02/13/254575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/254575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/254575.html</trackback:ping><description><![CDATA[可以采用cookies和sessionid的做法，这里是使用sessionid的做法。<br />
使用HttpSessionListener来监听session的创建和销毁，集群内部的tomcat开启session复制。2个应用都试用HttpSessionListener来监听<br />
<br />
web.xml：<br />
<br />
&nbsp; &lt;listener&gt;<br />
&nbsp; &lt;listener-class&gt;com.com.ActiveUserListener2&lt;/listener-class&gt;<br />
&nbsp;&lt;/listener&gt;<br />
<br />
&lt;distributable/&gt; <br />
<br />
ActiveUserListener2.java<br />
<br />
<p>package com.com;</p>
<p>import java.util.HashMap;<br />
import java.util.Map;<br />
import javax.servlet.http.HttpSession;<br />
import javax.servlet.http.HttpSessionEvent;<br />
import javax.servlet.http.HttpSessionListener;</p>
<p>public class ActiveUserListener2 implements HttpSessionListener {<br />
&nbsp;&nbsp;&nbsp; private static int sessionCount2 = 0;<br />
&nbsp;&nbsp;&nbsp; private static Map sessionMaps2 = new HashMap(); //存放session的集合类</p>
<p>&nbsp; public void sessionCreated(HttpSessionEvent arg0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpSession session = arg0.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sessionId = session.getId();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Create a session:" + sessionId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionMaps2.put(sessionId, session);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionCount2++;<br />
&nbsp;}</p>
<p>&nbsp; public void sessionDestroyed(HttpSessionEvent arg0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionCount2--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sessionId = arg0.getSession().getId();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionMaps2.remove(sessionId);//利用会话ID标示特定会话<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Destroy a session:" + sessionId);<br />
&nbsp;}<br />
&nbsp;public static int getSessionCount() {<br />
&nbsp; return sessionCount2;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public static Map getSessionMaps() {<br />
&nbsp;&nbsp;&nbsp;&nbsp; return sessionMaps2;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
传递sessionid，?jsessionid=&lt;%=session.getId()%&gt;<br />
<br />
测试效果：<br />
&lt;% <br />
Map activeSessions = ActiveUserListener2.getSessionMaps();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(activeSessions.get("CB55ABC39DD5B917D65F456C28FC25E6.tomcat1"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(activeSessions);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
%&gt;</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/254575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-02-13 16:46 <a href="http://www.blogjava.net/lzj520/archive/2009/02/13/254575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090211 使用imagemagick批量改变图片尺寸</title><link>http://www.blogjava.net/lzj520/archive/2009/02/11/254239.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Wed, 11 Feb 2009 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/02/11/254239.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/254239.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/02/11/254239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/254239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/254239.html</trackback:ping><description><![CDATA[for %I in (*.jpg) do convert %I -resize 130x130 -quality 85%&nbsp; +profile "*" %~nI.jpg
<img src ="http://www.blogjava.net/lzj520/aggbug/254239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-02-11 13:58 <a href="http://www.blogjava.net/lzj520/archive/2009/02/11/254239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090209 apache 防盗链</title><link>http://www.blogjava.net/lzj520/archive/2009/02/09/253877.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Mon, 09 Feb 2009 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/02/09/253877.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/253877.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/02/09/253877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/253877.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/253877.html</trackback:ping><description><![CDATA[&lt;Directory "D:/java/xx/picphoto/"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Options SymLinksIfOwnerMatch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RewriteEngine&nbsp; on<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RewriteCond %{HTTP_REFERER} !^http://localhost.*$ [NC]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RewriteRule .*\.(gif|jpg|jpeg|JPG)$&nbsp;&nbsp; <a href="http://www.xx.cn/images/xx.gif">http://www.xx.cn/images/<font color="#000000">xx</font>.gif</a> [R,NC]<br />
&lt;/Directory&gt;
<img src ="http://www.blogjava.net/lzj520/aggbug/253877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-02-09 11:44 <a href="http://www.blogjava.net/lzj520/archive/2009/02/09/253877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090208 ubuntu 安装tomcat 6</title><link>http://www.blogjava.net/lzj520/archive/2009/02/08/253819.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sun, 08 Feb 2009 13:31:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/02/08/253819.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/253819.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/02/08/253819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/253819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/253819.html</trackback:ping><description><![CDATA[$wget http://labs.xiaonei.com/apache-mirror/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz<br />
$sudo tar zxvf apache-tomcat-6.0.18.tar.gz -C /opt<br />
在/etc目录下<br />
$gedit environment<br />
加入<br />
classpath=/lzj/桌面/jdk.1.6.0_10/lib<br />
JAVA_HOME=/lzj/桌面/jdk.1.6.0_10/<br />
在/opt/apache-tomcat-6.0.18/bin目录下<br />
$sudo ./startup.sh<br />
在firefox中访问：<br />
<a href="http://localhost:8080">http://localhost:8080</a>，见到tomcat访问页面<br />
停止tomcat<br />
$sudo /opt/apache-tomcat-6.0.18/bin/shutdown.sh<br />
<img src ="http://www.blogjava.net/lzj520/aggbug/253819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-02-08 21:31 <a href="http://www.blogjava.net/lzj520/archive/2009/02/08/253819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090119 升级到swfupload 2.2.0</title><link>http://www.blogjava.net/lzj520/archive/2009/01/19/251905.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Mon, 19 Jan 2009 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/01/19/251905.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/251905.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/01/19/251905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/251905.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/251905.html</trackback:ping><description><![CDATA[之前一直正常使用的swfupload突然用不了，这是由于flash play10的缘故。所以需要升级到对应的swfupload 2.2.0<br />
<br />
升级必须要做的：<br />
<br />
更换swfupload.swf、swfupload.js、default.css<br />
<br />
将原来的onClick="swfu.selectFiles();的按钮修改为：&lt;span id="spanButtonPlaceholder" &gt;&lt;/span&gt;<br />
<br />
在setting里加多：<br />
&nbsp;&nbsp;&nbsp;button_image_url : "images/XPButtonNoText_160x22.png",&nbsp;// Relative to the SWF file<br />
&nbsp;&nbsp;&nbsp;&nbsp;button_placeholder_id : "spanButtonPlaceholder",<br />
&nbsp;&nbsp;&nbsp;&nbsp;button_width: 160,<br />
&nbsp;&nbsp;&nbsp;&nbsp;button_height: 22,<br />
&nbsp;&nbsp;&nbsp;&nbsp;button_text : '&lt;span class="button"&gt;请选择图片&lt;span class="buttonSmall"&gt;(10MB Max)&lt;/span&gt;&lt;/span&gt;',<br />
&nbsp;&nbsp;&nbsp;&nbsp;button_text_style : '.button { font-family: Helvetica, Arial, sans-serif; font-size: 14pt; } .buttonSmall { font-size: 10pt; }',<br />
&nbsp;&nbsp;&nbsp;&nbsp;button_text_top_padding: 1,<br />
&nbsp;&nbsp;&nbsp;&nbsp;button_text_left_padding: 5,<br />
<br />
就这么多了。
<img src ="http://www.blogjava.net/lzj520/aggbug/251905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-01-19 15:42 <a href="http://www.blogjava.net/lzj520/archive/2009/01/19/251905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>081123 ubuntu安装jdk6</title><link>http://www.blogjava.net/lzj520/archive/2008/11/23/242093.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sun, 23 Nov 2008 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/11/23/242093.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/242093.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/11/23/242093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/242093.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/242093.html</trackback:ping><description><![CDATA[<p>$sudo apt-get install sun-java6-jdk</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/242093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-11-23 12:53 <a href="http://www.blogjava.net/lzj520/archive/2008/11/23/242093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>081122 ubuntu安装scim</title><link>http://www.blogjava.net/lzj520/archive/2008/11/22/242031.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sat, 22 Nov 2008 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/11/22/242031.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/242031.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/11/22/242031.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/242031.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/242031.html</trackback:ping><description><![CDATA[ubuntu8.10 ：<br />
<br />
$sudo apt-get update<br />
$sudo aptitude install scim-pinyin<br />
$sudo apt-get apt-get install scim<br />
$sudo apt-get apt-get install scim-pinyin<br />
$sudo apt-get apt-get install scim-chinese
<img src ="http://www.blogjava.net/lzj520/aggbug/242031.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-11-22 21:41 <a href="http://www.blogjava.net/lzj520/archive/2008/11/22/242031.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>081117 使用POI将查询记录输入到excel</title><link>http://www.blogjava.net/lzj520/archive/2008/11/17/240925.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Mon, 17 Nov 2008 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/11/17/240925.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/240925.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/11/17/240925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/240925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/240925.html</trackback:ping><description><![CDATA[<strong>先写入一行作为表格头部，然后查询取得一个list，然后循环并调用createCell方法放入excel表中：<br />
</strong><br />
public void CreateExcel(String filename){<br />
&nbsp;&nbsp;HSSFWorkbook wb = new HSSFWorkbook();<br />
&nbsp;&nbsp;HSSFSheet sheet = wb.createSheet("new sheet");<br />
&nbsp;&nbsp;HSSFRow row = sheet.createRow((short) 0);<br />
&nbsp;&nbsp;createCell(wb, row, (short) 0, HSSFCellStyle.ALIGN_CENTER,"Login Name");<br />
&nbsp;&nbsp;createCell(wb, row, (short) 1, HSSFCellStyle.ALIGN_CENTER_SELECTION,"Login Name");<br />
&nbsp;&nbsp;createCell(wb, row, (short) 2, HSSFCellStyle.ALIGN_FILL,"Password");<br />
&nbsp;&nbsp;createCell(wb, row, (short) 3, HSSFCellStyle.ALIGN_GENERAL,"Name");<br />
&nbsp;&nbsp;createCell(wb, row, (short) 4, HSSFCellStyle.ALIGN_JUSTIFY,"Create Time");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;List ls = manager.getAllUserExcel();<br />
&nbsp; <br />
&nbsp;&nbsp;int i = 1;<br />
&nbsp;&nbsp;for (Iterator it = ls.iterator();it.hasNext();i++){<br />
&nbsp;&nbsp;row = sheet.createRow((short) i);<br />
&nbsp;&nbsp;Object[] o = (Object[])it.next();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;String a="";<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;a = o[0].toString();<br />
&nbsp;&nbsp;}catch(Exception e){};<br />
&nbsp;&nbsp;String b="";<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;b = o[1].toString();<br />
&nbsp;&nbsp;}catch(Exception e){};<br />
&nbsp;&nbsp;String c="";<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;c = o[2].toString();<br />
&nbsp;&nbsp;}catch(Exception e){};<br />
&nbsp;&nbsp;String d="";<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;d = o[3].toString();<br />
&nbsp;&nbsp;}catch(Exception e){};<br />
&nbsp;&nbsp;String e="";<br />
&nbsp;&nbsp;try{<br />
&nbsp;&nbsp;e = o[4].toString();<br />
&nbsp;&nbsp;}catch(Exception z){};&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;createCell(wb, row, (short) 0, HSSFCellStyle.ALIGN_CENTER,a);<br />
&nbsp;&nbsp;createCell(wb, row, (short) 1, HSSFCellStyle.ALIGN_CENTER_SELECTION,b);<br />
&nbsp;&nbsp;createCell(wb, row, (short) 2, HSSFCellStyle.ALIGN_FILL,c);<br />
&nbsp;&nbsp;createCell(wb, row, (short) 3, HSSFCellStyle.ALIGN_GENERAL,d);<br />
&nbsp;&nbsp;createCell(wb, row, (short) 4, HSSFCellStyle.ALIGN_JUSTIFY,e);&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;}&nbsp; <br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;// Write the output to a file<br />
&nbsp;&nbsp;FileOutputStream fileOut = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;fileOut = new FileOutputStream(filename);<br />
&nbsp;&nbsp;} catch (FileNotFoundException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;wb.write(fileOut);<br />
&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;fileOut.close();<br />
&nbsp;&nbsp;} catch (IOException e) {<br />
&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
<br />
<strong>createCell方法：</strong><br />
private static void createCell(HSSFWorkbook wb, HSSFRow row, short column, short align,String value)<br />
&nbsp;{<br />
&nbsp;&nbsp;HSSFCell cell = row.createCell(column);<br />
&nbsp;&nbsp;cell.setCellValue(value);<br />
&nbsp;&nbsp;HSSFCellStyle cellStyle = wb.createCellStyle();<br />
&nbsp;&nbsp;cellStyle.setAlignment(align);<br />
&nbsp;&nbsp;cell.setCellStyle(cellStyle);<br />
&nbsp;}<br />
<br />
<strong>用到的包：</strong><br />
<br />
import org.apache.poi.hssf.usermodel.HSSFCell;<br />
import org.apache.poi.hssf.usermodel.HSSFCellStyle;<br />
import org.apache.poi.hssf.usermodel.HSSFRichTextString;<br />
import org.apache.poi.hssf.usermodel.HSSFRow;<br />
import org.apache.poi.hssf.usermodel.HSSFSheet;<br />
import org.apache.poi.hssf.usermodel.HSSFWorkbook;<br />
import org.apache.poi.hssf.util.HSSFColor;
<img src ="http://www.blogjava.net/lzj520/aggbug/240925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-11-17 11:32 <a href="http://www.blogjava.net/lzj520/archive/2008/11/17/240925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>081114 分页显示json数据</title><link>http://www.blogjava.net/lzj520/archive/2008/11/14/240488.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 14 Nov 2008 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/11/14/240488.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/240488.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/11/14/240488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/240488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/240488.html</trackback:ping><description><![CDATA[<strong>客户端使用jquery，设置了上一页和下一页作为分页并显示总页数和当前页数，并把返回的json用div+span显示：</strong><br />
<br />
$.ajaxSetup({<br />
beforeSend: function() {<br />
$("#back").html('&lt;img src="loading.gif"&gt;');<br />
},<br />
complete: function() {},<br />
error:function(){$("#back").html('&lt;font color="red"&gt;read data error..&lt;/font&gt;');},<br />
method: "post",<br />
timeout:50000,<br />
cache:false<br />
});<br />
<br />
function loaddatapage(page){<br />
$("#detail").html('');<br />
$.ajax({<br />
dataType:'json',<br />
<A href='http://www.blogjava.net/lzj520/admin/"<%=request.getContextPath()%>/jiner/creditdetail.action'>url:"&lt;%=request.getContextPath()%&gt;/<font color="#000000">jiner</font>/<font color="#000000">jiner</font>.action</a>",<br />
data:"pagenum=" + page,<br />
success:function(data){<br />
$("#detail").append('&lt;p style="color:white;background-color:blue;font:bold;"&gt;&lt;span style="color:white;"&gt;金额&lt;/span&gt;&lt;span style="color:white;"&gt;时间&lt;/span&gt;&lt;span style="color:white;"&gt;操作员&lt;/span&gt;&lt;span style="color:white;"&gt;所在IP&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;');<br />
$.each(data.list,function(i,n){<br />
$("#detail").append('&lt;p&gt;&lt;span&gt;'+ data.list[i][0] + '&lt;/span&gt;&lt;span&gt;' + data.list[i][2] + '&lt;/span&gt;&lt;span&gt;' + data.list[i][1] + '&lt;/span&gt;&lt;span&gt;' + data.list[i][3] + '&lt;/span&gt;&lt;/p&gt;');<br />
})<br />
var prepage=page-1;<br />
var nextpage=page+1;<br />
if(prepage&lt;=0){prepage=1;}<br />
if(nextpage&gt;data.amountPage){nextpage=data.amountPage;}<br />
$("#detail").append('&lt;p style="background-color:#CAD7F7;"&gt;&lt;span style="font:blod;margin-top:20px;"&gt;当前页：'+ page + '/'+ data.amountPage + '&lt;/span&gt;&lt;span&gt;&lt;button&nbsp;&nbsp; style="font:12px; width:60px; height:19px;&nbsp; FONT-SIZE: 12px; " onclick="loaddatapage('+ prepage +')"&gt;上一页&lt;/button&gt;&lt;button style="font:12px; width:60px; height:19px;&nbsp; FONT-SIZE: 12px; " onclick="loaddatapage('+ nextpage +')"&gt;下一页&lt;/button&gt;&lt;/span&gt;&lt;/p&gt;');<br />
$("#back").html('')<br />
}<br />
});<br />
}<br />
<br />
<strong>服务器端使用比较普遍的分页方式，使用hibernate+struts2：</strong><br />
<br />
ACTION中部分代码：<br />
<br />
&nbsp;private List list;<br />
&nbsp;private int PageSize=10,amountPage;<br />
&nbsp;private String pagenum;&nbsp;<br />
<br />
&nbsp;public String list() throws Exception {<br />
&nbsp;&nbsp;int s = JinerManager.CountCreditDetail();<br />
&nbsp;&nbsp;int a = s%PageSize;<br />
&nbsp;&nbsp;if(a!=0){<br />
&nbsp;&nbsp;&nbsp;amountPage = s/PageSize+1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;amountPage = s/PageSize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;this.setAmountPage(amountPage);<br />
&nbsp;&nbsp;this.setPagenum(pagenum);<br />
&nbsp;&nbsp;this.setList(JinerManager.Find(pagenum,PageSize));<br />
&nbsp;&nbsp;return SUCCESS;<br />
&nbsp;}<br />
<br />
<strong>JinerManager.Find(pagenum,PageSize)调用了service，使用hibernate的数据库分页查找数据：</strong><br />
<br />
&nbsp;public List FindCreditDetail(String pagenum,int pagesize){<br />
&nbsp;&nbsp;Query queryObject = getSession().createSQLQuery("select i_add_money ,s_user_id,to_char(d_date,'yyyy-mm-dd hh24:mi:ss' ),s_ip from jiner t order by i_id desc");<br />
&nbsp;&nbsp;if (pagenum == null|pagenum == ""){<br />
&nbsp;&nbsp;&nbsp;queryObject.setFirstResult(0);<br />
&nbsp;&nbsp;&nbsp;queryObject.setMaxResults(pagesize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer p = (Integer.valueOf(pagenum)-1) * pagesize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queryObject.setFirstResult(p);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queryObject.setMaxResults(pagesize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }catch (Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; queryObject.setFirstResult(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; queryObject.setMaxResults(pagesize);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;List result = queryObject.list();<br />
&nbsp;&nbsp;return result;<br />
&nbsp;}<br />
<br />
<strong>struts2配置，使用了jsonplugin：</strong><br />
<br />
&nbsp;&lt;package name="<font color="#000000">jiner</font>"&nbsp; extends="json-default"&nbsp; namespace="/<font color="#000000">jiner</font>"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;action name="<font color="#000000">jiner</font>" class="com.pixel.websino.admin.web.action.CreditdetailAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;result type="json"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/action&gt;<br />
&nbsp;&nbsp;&lt;/package&gt;
 <img src ="http://www.blogjava.net/lzj520/aggbug/240488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-11-14 11:49 <a href="http://www.blogjava.net/lzj520/archive/2008/11/14/240488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>081108 GWT分页显示数据</title><link>http://www.blogjava.net/lzj520/archive/2008/11/08/239413.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sat, 08 Nov 2008 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/11/08/239413.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/239413.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/11/08/239413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/239413.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/239413.html</trackback:ping><description><![CDATA[基于上一篇日志的实例的基础上修改：<br />
<br />
<strong>CRUDService.java：<br />
</strong><br />
<p>package client;</p>
<p>import com.google.gwt.user.client.rpc.ServiceDefTarget;<br />
import com.google.gwt.user.client.rpc.RemoteService;<br />
import com.google.gwt.core.client.GWT;</p>
<p>public interface CRUDService extends RemoteService {<br />
&nbsp;&nbsp;&nbsp;&nbsp; Student[] getStudent(String PageNum)&nbsp;&nbsp;&nbsp;&nbsp; ;</p>
<p>&nbsp;&nbsp;&nbsp; String getPagenum();</p>
<p>&nbsp;&nbsp;&nbsp; public static class App {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static CRUDServiceAsync ourInstance = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static synchronized CRUDServiceAsync getInstance() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ourInstance == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ourInstance = (CRUDServiceAsync) GWT.create(CRUDService.class);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((ServiceDefTarget) ourInstance).setServiceEntryPoint(GWT.getModuleBaseURL() + "CRUD/CRUDService");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ourInstance;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</p>
<br />
<strong>CRUDServiceImpl.java：<br />
</strong><br />
<p>package server;</p>
<p>import com.google.gwt.user.server.rpc.RemoteServiceServlet;<br />
import client.CRUDService;<br />
import client.Student;<br />
import org.hibernate.Session;<br />
import org.hibernate.SessionFactory;<br />
import org.hibernate.Hibernate;<br />
import org.hibernate.Query;<br />
import org.hibernate.cfg.Configuration;<br />
import java.util.List;<br />
import java.util.Iterator;</p>
<p>public class CRUDServiceImpl extends RemoteServiceServlet&nbsp; implements CRUDService {<br />
&nbsp;&nbsp;&nbsp; private static final SessionFactory sessionFactory;<br />
&nbsp;&nbsp;&nbsp; String Pagenum = "1";<br />
&nbsp;&nbsp;&nbsp; static {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create the SessionFactory from hibernate.cfg.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionFactory = new Configuration().configure().buildSessionFactory();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Throwable ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Make sure you log the exception, as it might be swallowed<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Initial SessionFactory creation failed." + ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new ExceptionInInitializerError(ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static SessionFactory getSessionFactory() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sessionFactory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public List ListStudent(String PageNum){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session =&nbsp; getSessionFactory().getCurrentSession() ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query query = session.createSQLQuery("select * from t_student")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .addScalar("id", Hibernate.LONG)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .addScalar("name", Hibernate.STRING)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .addScalar("email", Hibernate.STRING);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int PageSize = 10;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Integer.parseInt(PageNum)!=0 | PageNum!=null ){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setFirstResult((Integer.parseInt(PageNum)-1) * PageSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setMaxResults(PageSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setFirstResult(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setMaxResults(PageSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setFirstResult(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setMaxResults(PageSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List ls = query.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.getTransaction().commit();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ls;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public int CountStudent(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session =&nbsp; getSessionFactory().getCurrentSession() ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List ls = session.createSQLQuery("select count(*) from t_student").list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.getTransaction().commit();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Integer.parseInt(ls.iterator().next().toString());<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Student[] getStudent(String PageNum){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setPagenum(PageNum);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Student[] student = new Student[this.CountStudent()];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(Iterator it = this.ListStudent(PageNum).iterator();it.hasNext();i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object[] ob = (Object[] )it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; student[i]=new Student(ob[0].toString(),ob[1].toString(),ob[2].toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return student;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; public void setPagenum(String pagenum){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Pagenum = pagenum;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getPagenum() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Pagenum;&nbsp; //To change body of implemented methods use File | Settings | File Templates.<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<br />
<strong>CRUDServiceAsync.java :<br />
</strong><br />
<p>package client;</p>
<p>import com.google.gwt.user.client.rpc.AsyncCallback;</p>
<p>public interface CRUDServiceAsync {</p>
<p>&nbsp;&nbsp;&nbsp; void getStudent(String PageNum, AsyncCallback async);</p>
<p>&nbsp;&nbsp;&nbsp; void getPagenum(AsyncCallback async);<br />
}<br />
<br />
</p>
<strong>CRUD.java :<br />
<br />
</strong>
<p>package client;</p>
<p>import com.google.gwt.core.client.EntryPoint;<br />
import com.google.gwt.user.client.ui.*;<br />
import com.google.gwt.user.client.rpc.AsyncCallback;</p>
<p>public class CRUD implements EntryPoint {<br />
&nbsp;&nbsp;&nbsp; private CRUDServiceAsync&nbsp; crudServiceAsync ;<br />
&nbsp;&nbsp;&nbsp; VerticalPanel main = new VerticalPanel();<br />
&nbsp;&nbsp;&nbsp; FlexTable lb = new FlexTable();<br />
&nbsp;&nbsp;&nbsp; HorizontalPanel hp = new HorizontalPanel();<br />
&nbsp;&nbsp;&nbsp; Button nextpage = new Button("nextpage");<br />
&nbsp;&nbsp;&nbsp; Button prepage = new Button("prepage");<br />
&nbsp;&nbsp;&nbsp; private String pagenum = "1";</p>
<p>&nbsp;&nbsp;&nbsp; public void setPagenum(String pagenum){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pagenum=pagenum;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public String getPagenum(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.pagenum;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; int&nbsp; prepagenum = 1;<br />
&nbsp;&nbsp;&nbsp; int&nbsp; nextpagenum =1;</p>
<p>&nbsp;&nbsp;&nbsp; public void onModuleLoad() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main.add(lb);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main.add(hp);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hp.add(prepage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hp.add(nextpage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RootPanel.get().add(main);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showstudentlist("1");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prepage.addClickListener(new ClickListener(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onClick (Widget sender){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prepagenum = Integer.parseInt(getPagenum())-1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showstudentlist(String.valueOf(prepagenum));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; nextpage.addClickListener(new ClickListener(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onClick (Widget sender){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nextpagenum = Integer.parseInt(getPagenum())+1 ;<br />
&nbsp;&nbsp;&nbsp;&nbsp; showstudentlist(String.valueOf(nextpagenum));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; private void&nbsp; showstudentlist(String pagenum) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRUDService.App.getInstance().getStudent(pagenum,new AsyncCallback(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onFailure(Throwable caught) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onSuccess(Object result) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Student s[] = ( Student[])result ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0;i&lt;=s.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lb.setText(i,0,s[i].id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lb.setText(i,1,s[i].name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lb.setText(i,2,s[i].email);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRUDService.App.getInstance().getPagenum(new AsyncCallback(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onFailure(Throwable caught) {}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onSuccess(Object result) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setPagenum((String)result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}<br />
</p>
<br />
  <img src ="http://www.blogjava.net/lzj520/aggbug/239413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-11-08 15:25 <a href="http://www.blogjava.net/lzj520/archive/2008/11/08/239413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>081106 用IEDA创建GWT+HIBERNATE的查询</title><link>http://www.blogjava.net/lzj520/archive/2008/11/06/238940.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Wed, 05 Nov 2008 23:28:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/11/06/238940.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/238940.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/11/06/238940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/238940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/238940.html</trackback:ping><description><![CDATA[<p><strong>CRUD.gwt.xml：</strong></p>
<p>&lt;module&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;inherits name='com.google.gwt.user.User'/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;entry-point class='client.CRUD'/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;servlet path="/CRUD/CRUDService" class="server.CRUDServiceImpl"/&gt;<br />
&lt;/module&gt;<br />
<br />
<strong>EntryPoint：CRUD.java，使用VerticalPanel 来显示List：</strong></p>
<p>package client;</p>
<p>import com.google.gwt.core.client.EntryPoint;<br />
import com.google.gwt.user.client.ui.*;<br />
import com.google.gwt.user.client.rpc.AsyncCallback;</p>
<p>public class CRUD implements EntryPoint {<br />
&nbsp;&nbsp;&nbsp; VerticalPanel main = new VerticalPanel();<br />
&nbsp;&nbsp;&nbsp; FlexTable lb = new FlexTable();<br />
&nbsp;&nbsp;&nbsp; public void onModuleLoad() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main.add(lb);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RootPanel.get().add(main);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CRUDService.App.getInstance().getStudent(new AsyncCallback(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onFailure(Throwable caught) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //To change body of implemented methods use File | Settings | File Templates.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onSuccess(Object result) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Student s[] = ( Student[])result ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0;i&lt;=s.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lb.setText(i,0,s[i].id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lb.setText(i,1,s[i].name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lb.setText(i,2,s[i].email);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }) ;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<strong>ENTITY：Student.java：</strong></p>
<p>package client;</p>
<p>import com.google.gwt.user.client.rpc.IsSerializable;</p>
<p>public class Student implements IsSerializable {<br />
&nbsp;&nbsp;&nbsp; public String id,name,email;<br />
&nbsp;&nbsp;&nbsp; public Student(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public Student(String id,String name,String email) {<br />
&nbsp;&nbsp;&nbsp; this.id=id;<br />
&nbsp;&nbsp;&nbsp; this.name=name;<br />
&nbsp;&nbsp;&nbsp; this.email=email;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<strong>SERVICE：CRUDService.java：</strong></p>
<p>package client;</p>
<p>import com.google.gwt.user.client.rpc.ServiceDefTarget;<br />
import com.google.gwt.user.client.rpc.RemoteService;<br />
import com.google.gwt.core.client.GWT;</p>
<p>public interface CRUDService extends RemoteService {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; Student[] getStudent()&nbsp;&nbsp;&nbsp;&nbsp; ;</p>
<p>&nbsp;&nbsp;&nbsp; public static class App {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static CRUDServiceAsync ourInstance = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static synchronized CRUDServiceAsync getInstance() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (ourInstance == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ourInstance = (CRUDServiceAsync) GWT.create(CRUDService.class);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((ServiceDefTarget) ourInstance).setServiceEntryPoint(GWT.getModuleBaseURL() + "CRUD/CRUDService");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ourInstance;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</p>
<p><br />
<strong><strong>SERVICEImpl：</strong>CRUDServiceImpl.java，这里使用直接连接hibernate的方法用native sql查询数据，不需要专门创建实体类和配置文件：</strong><br />
<br />
package server;</p>
<p>import com.google.gwt.user.server.rpc.RemoteServiceServlet;<br />
import client.CRUDService;<br />
import client.Student;<br />
import org.hibernate.Session;<br />
import org.hibernate.SessionFactory;<br />
import org.hibernate.Hibernate;<br />
import org.hibernate.cfg.Configuration;<br />
import java.util.List;<br />
import java.util.Iterator;</p>
<p>public class CRUDServiceImpl extends RemoteServiceServlet&nbsp; implements CRUDService {<br />
&nbsp;&nbsp;&nbsp; private static final SessionFactory sessionFactory;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; static {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionFactory = new Configuration().configure().buildSessionFactory();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Throwable ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Initial SessionFactory creation failed." + ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new ExceptionInInitializerError(ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static SessionFactory getSessionFactory() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sessionFactory;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public List ListStudent(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session =&nbsp; getSessionFactory().getCurrentSession() ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List ls = session.createSQLQuery("select * from t_student")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .addScalar("id", Hibernate.LONG)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .addScalar("name", Hibernate.STRING)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .addScalar("email", Hibernate.STRING).list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.getTransaction().commit();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ls;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public int CountStudent(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session =&nbsp; getSessionFactory().getCurrentSession() ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List ls = session.createSQLQuery("select count(*) from t_student").list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.getTransaction().commit();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Integer.parseInt(ls.iterator().next().toString());<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Student[] getStudent(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Student[] student = new Student[this.CountStudent()];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(Iterator it = this.ListStudent().iterator();it.hasNext();i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object[] ob = (Object[] )it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; student[i]=new Student(ob[0].toString(),ob[1].toString(),ob[2].toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return student;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p><br />
<strong>异步调用类CRUDServiceAsync.java：</strong></p>
<p>package client;</p>
<p>import com.google.gwt.user.client.rpc.AsyncCallback;</p>
<p>public interface CRUDServiceAsync {<br />
&nbsp;&nbsp;&nbsp; void getStudent(AsyncCallback async);<br />
}<br />
<br />
<strong>最后，在src目录下创建hibernate.cfg.xml，这里使用mysql：</strong></p>
<p>&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />
&lt;!DOCTYPE hibernate-configuration PUBLIC<br />
&nbsp; "-//Hibernate/Hibernate Configuration DTD//EN"<br />
&nbsp; "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;<br />
&lt;hibernate-configuration&gt;<br />
&nbsp; &lt;session-factory&gt;<br />
&lt;property name="connection.driver_class"&gt;<br />
&nbsp;&nbsp;com.mysql.jdbc.Driver<br />
&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;property name="connection.url"&gt;<br />
&nbsp;&nbsp;jdbc:mysql://localhost:3306/mysql<br />
&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;property name="connection.username"&gt;root&lt;/property&gt;<br />
&nbsp;&lt;property name="connection.password"&gt;root&lt;/property&gt;</p>
<p>&nbsp;&lt;!-- JDBC connection pool (use the built-in) --&gt;<br />
&nbsp;&lt;property name="connection.pool_size"&gt;1&lt;/property&gt;</p>
<p>&nbsp;&lt;!-- SQL dialect --&gt;<br />
&nbsp;&lt;property name="dialect"&gt;<br />
&nbsp;&nbsp;org.hibernate.dialect.MySQLDialect<br />
&nbsp;&lt;/property&gt;</p>
<p>&nbsp;&lt;!-- Enable Hibernate's automatic session context management --&gt;<br />
&nbsp;&lt;property name="current_session_context_class"&gt;thread&lt;/property&gt;</p>
<p>&nbsp;&lt;!-- Disable the second-level cache&nbsp; --&gt;<br />
&nbsp;&lt;property name="cache.provider_class"&gt;<br />
&nbsp;&nbsp;org.hibernate.cache.NoCacheProvider<br />
&nbsp;&lt;/property&gt;</p>
<p>&nbsp;&lt;!-- Echo all executed SQL to stdout --&gt;<br />
&nbsp;&lt;property name="show_sql"&gt;true&lt;/property&gt;</p>
<p>&nbsp;&lt;!-- Drop and re-create the database schema on startup --&gt;<br />
&nbsp;&lt;property name="myeclipse.connection.profile"&gt;mysql for j&lt;/property&gt;<br />
&nbsp; &lt;/session-factory&gt;<br />
&lt;/hibernate-configuration&gt;<br />
</p>
  <img src ="http://www.blogjava.net/lzj520/aggbug/238940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-11-06 07:28 <a href="http://www.blogjava.net/lzj520/archive/2008/11/06/238940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>081102 struts2 + swfupload 批量上传图片</title><link>http://www.blogjava.net/lzj520/archive/2008/11/02/238141.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sat, 01 Nov 2008 22:25:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/11/02/238141.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/238141.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/11/02/238141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/238141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/238141.html</trackback:ping><description><![CDATA[upload.jsp：<br />
在这个文件里，使用了新swfload的上传方式，将文件流发送到struts2的doMultipleUploadUsingList.action，uploadStart的这个function，是将页面上的"id"元素的值一起带过去，上传过程中，会在divStatus的DIV中显示上传进度条。<br />
<br />
<p>&lt;%@ page&nbsp; contentType="text/html;&nbsp; charset=utf-8"%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;link href="&lt;%=request.getContextPath() %&gt;/admin/uploadpic/js/default.css" rel="stylesheet" type="text/css" /&gt;<br />
&nbsp;&lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/admin/uploadpic/js/swfupload.js"&gt;&lt;/script&gt;<br />
&nbsp;&lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/admin/uploadpic/js/handlers.js"&gt;&lt;/script&gt;<br />
&nbsp;&lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/admin/uploadpic/js/fileprogress.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/admin/uploadpic/js/swfupload.queue.js"&gt;&lt;/script&gt;<br />
&nbsp;&lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp;var swfu;<br />
&nbsp;&nbsp;window.onload = function () {&nbsp;<br />
&nbsp;&nbsp;&nbsp;var settings = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Backend Settings<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_post_name : "upload", <br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_url: "&lt;%=request.getContextPath() %&gt;/admin/product/doMultipleUploadUsingList.action",&nbsp;// Relative to the SWF file<br />
&nbsp;&nbsp;&nbsp;&nbsp;post_params: {"product1": "1"},&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;use_query_string:false,<br />
&nbsp;&nbsp;&nbsp;&nbsp;// File Upload Settings<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_size_limit : "100 MB",<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_types : "*.*",<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_types_description : "All Files",<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_upload_limit : 100,<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_queue_limit : 0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;custom_settings : {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;progressTarget : "fsUploadProgress",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cancelButtonId : "btnCancel"<br />
&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;debug: false,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;// The event handler functions are defined in handlers.js<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_queued_handler : fileQueued,<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_queue_error_handler : fileQueueError,<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_dialog_complete_handler : fileDialogComplete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_start_handler : uploadStart,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_progress_handler : uploadProgress,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_error_handler : uploadError,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_success_handler : uploadSuccess,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_complete_handler : uploadComplete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;queue_complete_handler : queueComplete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Flash Settings<br />
&nbsp;&nbsp;&nbsp;&nbsp;flash_url : "&lt;%=request.getContextPath() %&gt;/admin/uploadpic/js/swfupload_f8.swf"&nbsp;// Relative to this file<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;swfu = new SWFUpload(settings);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;function uploadStart(file) {<br />
&nbsp;&nbsp;&nbsp;document.getElementById("back").innerHTML='';<br />
&nbsp;&nbsp;&nbsp;var post_params = this.settings.post_params;<br />
&nbsp;&nbsp;&nbsp;post_params.id = document.getElementById("id").value;<br />
&nbsp;&nbsp;&nbsp;this.setPostParams(post_params);<br />
&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&lt;style type="text/css"&gt;<br />
&nbsp;&nbsp;&nbsp;#content button,input,span{<br />
&nbsp;&nbsp;&nbsp;margin: 5 5 5 5;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;#back{<br />
&nbsp;&nbsp;&nbsp;width:810;<br />
&nbsp;&nbsp;&nbsp;height:500;<br />
&nbsp;&nbsp;&nbsp;float:left;<br />
&nbsp;&nbsp;&nbsp;text-align:center;<br />
&nbsp;&nbsp;&nbsp;vertical-align:middle;<br />
&nbsp;&nbsp;&nbsp;overflow:auto;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;#img2{<br />
&nbsp;&nbsp;&nbsp;float:left;<br />
&nbsp;&nbsp;&nbsp;margin: 1 1 1 1;<br />
&nbsp;&nbsp;&nbsp;text-align:center;<br />
&nbsp;&nbsp;&nbsp;vertical-align:middle;<br />
&nbsp;&nbsp;&nbsp;display: table-cell;<br />
&nbsp;&nbsp;&nbsp;display: block;<br />
&nbsp;&nbsp;&nbsp;font-size: 68px;<br />
&nbsp;&nbsp;&nbsp;width:78;<br />
&nbsp;&nbsp;&nbsp;height:78;<br />
&nbsp;&nbsp;&nbsp;border: 1px solid #B10000;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;#img2 img{<br />
&nbsp;&nbsp;&nbsp;vertical-align:middle;<br />
&nbsp;&nbsp;&nbsp;cursor: pointer;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;#img2 img hover{<br />
&nbsp;&nbsp;&nbsp;cursor: pointer;<br />
&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&nbsp;&nbsp;&lt;div id="SWFUploadTarget" &gt;<br />
&lt;body&gt;</p>
<p>&lt;div id="content"&gt;<br />
&nbsp;&nbsp;&lt;span&gt;1、Product ID&lt;/span&gt;&lt;input type="text" name="id" id="id" value= &lt;%=request.getParameter("id") %&gt; readonly&gt;<br />
&nbsp;&nbsp;&lt;button id="btnBrowse" type="button" style="padding: 6px;" onClick="swfu.selectFiles(); this.blur();javascript:document.getElementById('divStatus').innerHTML='';"&gt;<br />
&nbsp;&nbsp;&lt;/div&gt;<br />
&nbsp;&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;p&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;fieldset class="flash" id="fsUploadProgress"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;legend&gt;Upload Progress&lt;/legend&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/fieldset&gt;<br />
&nbsp;&nbsp;&lt;div id="divStatus"&gt;&lt;/div&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;input id="btnCancel" type="button" value="Cancel All Upload" onClick="swfu.cancelQueue();" disabled="disabled" style="font-size: 8pt;" /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&lt;/div&gt;</p>
<p>&lt;div id="back"&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;html&gt;<br />
<br />
MultipleFileUploadUsingListAction是一个可以通用的struts2 action，可以接收批量或单个上传过来的图片。并且可以选择生成相应压缩图。图片生成的命名方式是从xxx_01、xxx_02、xxx_03一直自动排列下去。压缩图为xxx_01_70<br />
<br />
package com..web.action;</p>
<p>import java.awt.Image;<br />
import java.awt.image.BufferedImage;<br />
import java.io.File;<br />
import java.io.FileInputStream;<br />
import java.io.FileOutputStream;<br />
import org.apache.struts2.ServletActionContext;<br />
import com.opensymphony.xwork2.ActionSupport;<br />
import com.web.commons.util.DirList;<br />
import com.sun.image.codec.jpeg.JPEGCodec;<br />
import com.sun.image.codec.jpeg.JPEGImageEncoder;<br />
</p>
<p>@SuppressWarnings("serial")<br />
public class MultipleFileUploadUsingListAction extends ActionSupport {</p>
<p>&nbsp;&nbsp;&nbsp; private String id;<br />
&nbsp;&nbsp;&nbsp; private File[] uploads;<br />
&nbsp;&nbsp;&nbsp; private String[] uploadFileNames;<br />
&nbsp;&nbsp;&nbsp; private String[] uploadContentTypes;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public String getId() {<br />
&nbsp;&nbsp;return id;<br />
&nbsp;}<br />
&nbsp;public void setId(String id) {<br />
&nbsp;&nbsp;this.id = id;<br />
&nbsp;}<br />
&nbsp;public File[] getUpload() { return this.uploads; }<br />
&nbsp;&nbsp;&nbsp; public void setUpload(File[] upload) { this.uploads = upload; }</p>
<p>&nbsp;&nbsp;&nbsp; public String[] getUploadFileName() { return this.uploadFileNames; }<br />
&nbsp;&nbsp;&nbsp; public void setUploadFileName(String[] uploadFileName) { this.uploadFileNames = uploadFileName; }</p>
<p>&nbsp;&nbsp;&nbsp; public String[] getUploadContentType() { return this.uploadContentTypes; }<br />
&nbsp;&nbsp;&nbsp; public void setUploadContentType(String[] uploadContentType) { this.uploadContentTypes = uploadContentType; }&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; public String upload() throws Exception{<br />
&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;String productname=id;<br />
&nbsp;&nbsp;String url = ServletActionContext.getServletContext().getRealPath("Personalizedphoto")+"\\"+id+"\\";<br />
&nbsp;&nbsp; for (int i=0;i&lt;uploads.length;i++) {<br />
&nbsp;&nbsp;FileInputStream fis=new FileInputStream(uploads[i]);&nbsp; <br />
&nbsp;&nbsp;&nbsp; if(!(new File(url).isDirectory()))&nbsp; <br />
&nbsp;&nbsp;&nbsp; {&nbsp; <br />
&nbsp;&nbsp;&nbsp; new File(url).mkdir();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;int temp=1,temp2=1;<br />
&nbsp;&nbsp;&nbsp;String myFileName = productname+"_0"+temp;<br />
&nbsp;&nbsp;&nbsp;DirList dirlist = new DirList();<br />
&nbsp;&nbsp;&nbsp;String[] dir =dirlist.list(url);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;for(int j=0;j&lt;dir.length;j++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] split = dir[j].split("\\.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(split[1].equals("jpg")&amp;&amp;split[0].split("\\_").length==3){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] split2=split[0].split("\\_");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Integer.parseInt(split2[1])&gt;0&amp;Integer.parseInt(split2[1])&gt;=temp2){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp2=Integer.parseInt(split2[1])+1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Integer.parseInt(split2[1])==0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp2=1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(temp2&lt;10){<br />
&nbsp;&nbsp;&nbsp;&nbsp;myFileName = productname+"_0"+temp2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;myFileName = productname+"_"+temp2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; FileOutputStream fos=new FileOutputStream(url+myFileName+"_800.jpg");&nbsp;&nbsp; <br />
&nbsp;&nbsp;byte[] buffer=new byte[1024];<br />
&nbsp;&nbsp;&nbsp;&nbsp; int len=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp; while((len=fis.read(buffer))&gt;0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fos.write(buffer, 0, len);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; java.io.File file = new java.io.File(url+myFileName+"_800.jpg");<br />
&nbsp;&nbsp;&nbsp;&nbsp; String newurl=url+myFileName+"_70.jpg";&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; java.awt.Image src = javax.imageio.ImageIO.read(new java.io.File(url+myFileName+"_800.jpg")); <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; float tagsize=70;<br />
&nbsp;&nbsp;&nbsp;&nbsp; int old_w=src.getWidth(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; int old_h=src.getHeight(null); <br />
&nbsp;&nbsp;&nbsp;&nbsp; int new_w=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp; int new_h=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; float tempdouble;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);&nbsp;&nbsp;&nbsp;&nbsp; java.awt.image.BufferedImage tag = new java.awt.image.BufferedImage(new_w,new_h,java.awt.image.BufferedImage.TYPE_INT_RGB);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; newurl=url+myFileName+"_130.jpg";&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; tagsize=130;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);<br />
&nbsp;&nbsp;&nbsp;&nbsp; tag = new java.awt.image.BufferedImage(new_w,new_h,java.awt.image.BufferedImage.TYPE_INT_RGB); <br />
&nbsp;&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);<br />
&nbsp;&nbsp;&nbsp;&nbsp; newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; newurl=url+myFileName+"_180.jpg";&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; tagsize=180;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);<br />
&nbsp;&nbsp;&nbsp;&nbsp; tag = new java.awt.image.BufferedImage(new_w,new_h,java.awt.image.BufferedImage.TYPE_INT_RGB); <br />
&nbsp;&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);<br />
&nbsp;&nbsp;&nbsp;&nbsp; newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; newurl=url+myFileName+"_500.jpg";&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; tagsize=500;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);<br />
&nbsp;&nbsp;&nbsp;&nbsp; tag = new java.awt.image.BufferedImage(new_w,new_h,java.awt.image.BufferedImage.TYPE_INT_RGB); <br />
&nbsp;&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);<br />
&nbsp;&nbsp;&nbsp;&nbsp; newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; newimage.close();<br />
&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp; }catch(Exception e){}<br />
&nbsp;&nbsp; this.setId(id);<br />
&nbsp;&nbsp; return SUCCESS;<br />
&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;}</p>
<p><br />
这个action还调用了一个类DirList ，是用于扫描当前文件夹里的图片，并且根据当前的命名情况来命名新上传的图片，如原来已经有了10张，那上传之后的就从第11开始命名。<br />
</p>
<p>import java.io.File;<br />
import java.io.FilenameFilter;<br />
import java.util.Arrays;<br />
import java.util.Comparator;<br />
import java.util.regex.Pattern;<br />
public class DirList { <br />
&nbsp;public String[] list(String thepath) {<br />
&nbsp;&nbsp;File path = new File(thepath);&nbsp; <br />
&nbsp;&nbsp;String[] list;&nbsp;&nbsp; <br />
&nbsp;&nbsp;list = path.list(); <br />
&nbsp;&nbsp;Arrays.sort(list, new AlphabeticComparator()); <br />
&nbsp;&nbsp;return list;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;private void deleteFile(File file){<br />
&nbsp;&nbsp;if(file.exists()){<br />
&nbsp;&nbsp;if(file.isFile()){<br />
&nbsp;&nbsp;file.delete();<br />
&nbsp;&nbsp;}else if(file.isDirectory()){<br />
&nbsp;&nbsp;File files[] = file.listFiles();<br />
&nbsp;&nbsp;for(int i=0;i&lt;files.length;i++){<br />
&nbsp;&nbsp;this.deleteFile(files[i]);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;file.delete();<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} <br />
}</p>
<p>class DirFilter implements FilenameFilter {&nbsp; <br />
&nbsp;private Pattern pattern;&nbsp; public DirFilter(String regex) { <br />
&nbsp;&nbsp;pattern = Pattern.compile(regex);&nbsp; }<br />
&nbsp;public boolean accept(File dir, String name) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;// Strip path information, search for regex:&nbsp;&nbsp; <br />
&nbsp;&nbsp;return pattern.matcher(new File(name).getName()).matches(); <br />
&nbsp;&nbsp;}<br />
&nbsp;} </p>
<p>class AlphabeticComparator implements Comparator { <br />
&nbsp;public int compare(Object o1, Object o2) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;String s1 = (String) o1;&nbsp;&nbsp;&nbsp; String s2 = (String) o2;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;return s1.toLowerCase().compareTo(s2.toLowerCase());&nbsp; <br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
</p>
<p><br />
&nbsp;</p>
 <img src ="http://www.blogjava.net/lzj520/aggbug/238141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-11-02 06:25 <a href="http://www.blogjava.net/lzj520/archive/2008/11/02/238141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>080813 结合使用SWFUpload和SmartUpload</title><link>http://www.blogjava.net/lzj520/archive/2008/08/13/221659.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Wed, 13 Aug 2008 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/08/13/221659.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/221659.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/08/13/221659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/221659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/221659.html</trackback:ping><description><![CDATA[前台使用SWFUpload：<br />
<br />
<p>&lt;%@ page&nbsp; contentType="text/html;&nbsp; charset=GBK"%&gt;<br />
&lt;%@ page import="javax.servlet.*"%&gt;<br />
&lt;%@ page import="javax.servlet.http.*"%&gt;<br />
&lt;%@ page import="com.yourcompany.util.*"%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp;&lt;link href="js/default.css" rel="stylesheet" type="text/css" /&gt;<br />
&nbsp;&lt;script type="text/javascript" src="js/swfupload.js"&gt;&lt;/script&gt;<br />
&nbsp;&lt;script type="text/javascript" src="js/handlers.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;script src="js/jquery.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;script type="text/javacript"&gt;<br />
&nbsp;&nbsp;&nbsp;function g(){<br />
&nbsp;&nbsp;$.ajax({<br />
&nbsp;&nbsp;&nbsp; url: 'upload2.jsp',<br />
&nbsp;&nbsp;&nbsp; date: {c: $('#c').val(), c: $('#c').val()},<br />
&nbsp;&nbsp;&nbsp; error: function() { alert"fail"},<br />
&nbsp;&nbsp;&nbsp; success: function(response) { ... }<br />
&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br />
&nbsp;&lt;script type="text/javascript"&gt;</p>
<p>&nbsp;var swfu;<br />
&nbsp;&nbsp;window.onload = function () {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;swfu = new SWFUpload({<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Backend Settings<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_url: "upload2.jsp",&nbsp;// Relative to the SWF file<br />
&nbsp;&nbsp;&nbsp;&nbsp;post_params: {"product1": "1"},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use_query_string:false,<br />
&nbsp;&nbsp;&nbsp;&nbsp;// File Upload Settings<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_size_limit : "2048",&nbsp;// 2MB<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_types : "*.jpg",<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_types_description : "JPG Images",<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_upload_limit : "0",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;// Event Handler Settings - these functions as defined in Handlers.js<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp; The handlers are not part of SWFUpload but are part of my website and control how<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp; my website reacts to the SWFUpload events.<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_queue_error_handler : fileQueueError,<br />
&nbsp;&nbsp;&nbsp;&nbsp;file_dialog_complete_handler : fileDialogComplete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_progress_handler : uploadProgress,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_start_handler : uploadStart,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_error_handler : uploadError,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_success_handler : uploadSuccess,<br />
&nbsp;&nbsp;&nbsp;&nbsp;upload_complete_handler : uploadComplete,</p>
<p>&nbsp;</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;// Flash Settings<br />
&nbsp;&nbsp;&nbsp;&nbsp;flash_url : "js/swfupload_f9.swf",&nbsp;// Relative to this file</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;custom_settings : {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upload_target : "divFileProgressContainer"<br />
&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// Debug Settings<br />
&nbsp;&nbsp;&nbsp;&nbsp;debug: false<br />
&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;}</p>
<p>function uploadStart(file) {<br />
var post_params = this.settings.post_params;<br />
post_params.product = document.getElementById("product").value;<br />
this.setPostParams(post_params);<br />
return true;<br />
}<br />
&nbsp;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&nbsp;&nbsp;&lt;div id="SWFUploadTarget"&gt;<br />
&lt;body&gt;</p>
<p>&nbsp;&nbsp;&lt;div&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;form action="upload2.jsp" method="get"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;button id="btnBrowse" type="button" style="padding: 5px;" onClick="swfu.selectFiles(); this.blur();"&gt;&lt;img src="images/page_white_add.png" style="padding-right: 3px; vertical-align: bottom;"&gt;请选择图片&lt;span style="font-size: 7pt;"&gt;(2 MB Max)&lt;/span&gt;&lt;/button&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请输入产品ID&lt;input type="text" name="product" id="product" value=""&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br />
&nbsp;&nbsp;&lt;/div&gt;<br />
&nbsp;&nbsp;&lt;div id="divFileProgressContainer" style="height: 75px;"&gt;&lt;/div&gt;<br />
&nbsp;&nbsp;&lt;div id="thumbnails"&gt;&lt;/div&gt;<br />
&nbsp;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;html&gt;<br />
<br />
后台使用SmartUpload：<br />
<br />
</p>
<p>&lt;%@ page contentType="text/html;charset=gb2312" language="java" import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,<br />
java.sql.*,com.jspsmart.upload.*,java.util.*,com.yourcompany.util.*"%&gt;<br />
&lt;%<br />
SmartUpload mySmartUpload =new SmartUpload();<br />
long file_size_max=4000000;<br />
//add</p>
<p><br />
//初始化<br />
&nbsp;mySmartUpload.initialize(pageContext);<br />
//只允许上载此类文件<br />
try {<br />
mySmartUpload.setAllowedFilesList("jpg,gif");<br />
//上载文件<br />
mySmartUpload.upload();<br />
} catch (Exception e){<br />
%&gt;<br />
&nbsp; &lt;SCRIPT language=javascript&gt;<br />
&nbsp; alert("只允许上传.jpg和.gif类型图片文件");<br />
&nbsp; window.location=''upfile.jsp'';<br />
&nbsp; &lt;/script&gt;<br />
&lt;%<br />
}<br />
//try{</p>
<p>&nbsp;&nbsp;&nbsp; com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);<br />
&nbsp;&nbsp;&nbsp; if (myFile.isMissing()){%&gt;<br />
&nbsp;&nbsp; &lt;SCRIPT language=javascript&gt;<br />
&nbsp;&nbsp; alert("请先选择要上传的文件");<br />
&nbsp;&nbsp; window.location=''upfile.jsp'';<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%}<br />
&nbsp;&nbsp;&nbsp; else{<br />
&nbsp;<br />
&nbsp;String fileName2="",ext="",testvar="";<br />
&nbsp;String productname=mySmartUpload.getRequest().getParameter("product");<br />
&nbsp;String url="/uploadfile/"+productname+"/";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //应保证在根目录中有此目录的存在</p>
<p><br />
&nbsp;java.io.File file1 = new java.io.File(request.getRealPath("/") + url );<br />
&nbsp;&nbsp; if(!file1.exists())<br />
&nbsp; {<br />
&nbsp;&nbsp; file1.mkdir(); <br />
&nbsp; } </p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //String myFileName=myFile.getFileName(); //取得上载的文件的文件名<br />
&nbsp;&nbsp; ext= myFile.getFileExt();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取得后缀名<br />
&nbsp;&nbsp; int file_size=myFile.getSize();&nbsp;&nbsp;&nbsp;&nbsp; //取得文件的大小&nbsp; <br />
&nbsp;&nbsp; String saveurl="";<br />
&nbsp;&nbsp; if(file_size&lt;file_size_max){</p>
<p>int temp=1,temp2=0;<br />
&nbsp;&nbsp;&nbsp; String[] a=myFile.getFileName().split(".jpg");<br />
&nbsp;&nbsp;&nbsp; String myFileNameo = productname+"_00_pic_big";<br />
&nbsp;String myFileName = productname+"_0"+temp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; Calendar calendar = Calendar.getInstance();<br />
&nbsp;&nbsp;&nbsp; String filename = String.valueOf(calendar.getTimeInMillis());<br />
&nbsp;&nbsp;&nbsp; saveurl=request.getRealPath("/")+url;<br />
&nbsp;&nbsp;&nbsp; saveurl+=myFileNameo+"."+ext;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存路径<br />
&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; myFile.saveAs(saveurl,mySmartUpload.SAVE_PHYSICAL);<br />
&nbsp; //&nbsp; java.io.File&nbsp; f1&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp; java.io.File (saveurl);<br />
&nbsp; //&nbsp; java.io.File&nbsp;&nbsp;&nbsp; f2&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; java.io.File (request.getRealPath("/")+url+myFileName+"_0_big.jpg");&nbsp;&nbsp; <br />
&nbsp; //&nbsp; f1.renameTo(f2);&nbsp; <br />
&nbsp;&nbsp;&nbsp; //out.print(filename);<br />
//-----------------------上传完成，开始生成缩略图-------------------------&nbsp; <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;com.yourcompany.util.DirList dirlist = new com.pixel.util.DirList();<br />
&nbsp; String[] dir =dirlist.list(request.getRealPath("/") + url );</p>
<p><br />
for(int i=0;i&lt;dir.length;i++){<br />
&nbsp; //for (String i : dir){<br />
&nbsp; String[] split = dir[i].split("\\.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(split[1].equals("jpg")){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] split2=split[0].split("\\_");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//split2[1]=01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;if(Integer.parseInt(split2[1])&gt;0&amp;Integer.parseInt(split2[1])&gt;=temp2){<br />
&nbsp;&nbsp;&nbsp;temp2=Integer.parseInt(split2[1])+1;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if(Integer.parseInt(split2[1])==0){<br />
&nbsp;&nbsp;&nbsp;temp2=1;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp; &nbsp;}<br />
}&nbsp;</p>
<p>if(temp2&lt;=10){<br />
myFileName = productname+"_0"+temp2;<br />
}else{<br />
myFileName = productname+"_"+temp2;<br />
}</p>
<p>&nbsp;</p>
<p>&nbsp; &nbsp;<br />
&nbsp;//myFileName = mySmartUpload.getRequest().getParameter("product");<br />
&nbsp;&nbsp;&nbsp; java.io.File file = new java.io.File(saveurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读入刚才上传的文件<br />
&nbsp;&nbsp;&nbsp; String newurl=request.getRealPath("/")+url+myFileName+"_70_min."+ext;&nbsp; //新的缩略图保存地址<br />
&nbsp;&nbsp;&nbsp; Image src = javax.imageio.ImageIO.read(file);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造Image对象<br />
&nbsp;&nbsp;&nbsp; float tagsize=70;<br />
&nbsp;&nbsp;&nbsp; int old_w=src.getWidth(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图宽<br />
&nbsp;&nbsp;&nbsp; int old_h=src.getHeight(null);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; int new_w=0;<br />
&nbsp;&nbsp;&nbsp; int new_h=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图长<br />
&nbsp;&nbsp;&nbsp; int tempsize;<br />
&nbsp;&nbsp;&nbsp; float tempdouble;<br />
&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);//计算新图长宽<br />
&nbsp;&nbsp;&nbsp; BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);<br />
&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //绘制缩小后的图<br />
&nbsp;&nbsp;&nbsp; FileOutputStream newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出到文件流<br />
&nbsp;&nbsp;&nbsp; JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //近JPEG编码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读入刚才上传的文件<br />
&nbsp;&nbsp;&nbsp; newurl=request.getRealPath("/")+url+myFileName+"_130_min."+ext;&nbsp; //新的缩略图保存地址<br />
&nbsp;&nbsp;&nbsp; //Image src = javax.imageio.ImageIO.read(file);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造Image对象<br />
&nbsp;&nbsp;&nbsp; tagsize=130;<br />
&nbsp; //&nbsp; int old_w2=src2.getWidth(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图宽<br />
&nbsp; //&nbsp; int old_h2=src2.getHeight(null);&nbsp;&nbsp; <br />
&nbsp;&nbsp; // int new_w=0;<br />
&nbsp;&nbsp; // int new_h=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图长<br />
&nbsp;&nbsp; // int tempsize;<br />
&nbsp; //&nbsp; float tempdouble;<br />
&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);//计算新图长宽<br />
&nbsp;&nbsp;&nbsp;&nbsp; tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);<br />
&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //绘制缩小后的图<br />
&nbsp;&nbsp;&nbsp; newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出到文件流<br />
&nbsp;&nbsp;&nbsp; encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //近JPEG编码<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; newurl=request.getRealPath("/")+url+myFileName+"_180_min."+ext;&nbsp; //新的缩略图保存地址<br />
&nbsp;&nbsp;&nbsp; //Image src = javax.imageio.ImageIO.read(file);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造Image对象<br />
&nbsp;&nbsp;&nbsp; tagsize=180;<br />
&nbsp; //&nbsp; int old_w2=src2.getWidth(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图宽<br />
&nbsp; //&nbsp; int old_h2=src2.getHeight(null);&nbsp;&nbsp; <br />
&nbsp;&nbsp; // int new_w=0;<br />
&nbsp;&nbsp; // int new_h=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图长<br />
&nbsp;&nbsp; // int tempsize;<br />
&nbsp; //&nbsp; float tempdouble;<br />
&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);//计算新图长宽<br />
&nbsp;&nbsp;&nbsp;&nbsp; tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);<br />
&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //绘制缩小后的图<br />
&nbsp;&nbsp;&nbsp; newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出到文件流<br />
&nbsp;&nbsp;&nbsp; encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //近JPEG编码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; newurl=request.getRealPath("/")+url+myFileName+"_500_min."+ext;&nbsp; //新的缩略图保存地址<br />
&nbsp;&nbsp;&nbsp; //Image src = javax.imageio.ImageIO.read(file);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造Image对象<br />
&nbsp;&nbsp;&nbsp; tagsize=500;<br />
&nbsp; //&nbsp; int old_w2=src2.getWidth(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图宽<br />
&nbsp; //&nbsp; int old_h2=src2.getHeight(null);&nbsp;&nbsp; <br />
&nbsp;&nbsp; // int new_w=0;<br />
&nbsp;&nbsp; // int new_h=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图长<br />
&nbsp;&nbsp; // int tempsize;<br />
&nbsp; //&nbsp; float tempdouble;<br />
&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);//计算新图长宽<br />
&nbsp;&nbsp;&nbsp;&nbsp; tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);<br />
&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //绘制缩小后的图<br />
&nbsp;&nbsp;&nbsp; newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出到文件流<br />
&nbsp;&nbsp;&nbsp; encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //近JPEG编码</p>
<p>&nbsp;newurl=request.getRealPath("/")+url+myFileName+"_800_min."+ext;&nbsp; //新的缩略图保存地址<br />
&nbsp;&nbsp;&nbsp; //Image src = javax.imageio.ImageIO.read(file);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造Image对象<br />
&nbsp;&nbsp;&nbsp; tagsize=800;<br />
&nbsp; //&nbsp; int old_w2=src2.getWidth(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图宽<br />
&nbsp; //&nbsp; int old_h2=src2.getHeight(null);&nbsp;&nbsp; <br />
&nbsp;&nbsp; // int new_w=0;<br />
&nbsp;&nbsp; // int new_h=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到源图长<br />
&nbsp;&nbsp; // int tempsize;<br />
&nbsp; //&nbsp; float tempdouble;<br />
&nbsp;&nbsp;&nbsp; if(old_w&gt;old_h){<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_w/tagsize;<br />
&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp; tempdouble=old_h/tagsize;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; new_w=Math.round(old_w/tempdouble);<br />
&nbsp;&nbsp;&nbsp; new_h=Math.round(old_h/tempdouble);//计算新图长宽<br />
&nbsp;&nbsp;&nbsp;&nbsp; tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);<br />
&nbsp;&nbsp;&nbsp; tag.getGraphics().drawImage(src,0,0,new_w,new_h,null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //绘制缩小后的图<br />
&nbsp;&nbsp;&nbsp; newimage=new FileOutputStream(newurl);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出到文件流<br />
&nbsp;&nbsp;&nbsp; encoder = JPEGCodec.createJPEGEncoder(newimage);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; encoder.encode(tag);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //近JPEG编码<br />
&nbsp;<br />
&nbsp;<br />
&nbsp; newimage.close();&nbsp; </p>
<p>&nbsp;&nbsp; }<br />
&nbsp;&nbsp; else{<br />
&nbsp;&nbsp;&nbsp; out.print("&lt;SCRIPT language=''javascript''&gt;");<br />
&nbsp;&nbsp;&nbsp; out.print("alert(''上传文件大小不能超过"+(file_size_max/1000)+"K'');");<br />
&nbsp;&nbsp;&nbsp; out.print("window.location=''upfile.jsp;''");<br />
&nbsp;&nbsp;&nbsp; out.print("&lt;/SCRIPT&gt;");<br />
&nbsp;&nbsp; }<br />
&nbsp; }<br />
//}catch (Exception e){</p>
<p>//e.toString();</p>
<p>//}<br />
%&gt; </p>
<br />
<br />
其中：<br />
com.yourcompany.util.DirList dirlist = new com.yourcompany.DirList();<br />
&nbsp; String[] dir =dirlist.list(request.getRealPath("/") + url );
<p><br />
for(int i=0;i&lt;dir.length;i++){<br />
&nbsp; //for (String i : dir){<br />
&nbsp; String[] split = dir[i].split("\\.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(split[1].equals("jpg")){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] split2=split[0].split("\\_");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//split2[1]=01 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;if(Integer.parseInt(split2[1])&gt;0&amp;Integer.parseInt(split2[1])&gt;=temp2){<br />
&nbsp;&nbsp;&nbsp;temp2=Integer.parseInt(split2[1])+1;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if(Integer.parseInt(split2[1])==0){<br />
&nbsp;&nbsp;&nbsp;temp2=1;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp; &nbsp;}<br />
}&nbsp;</p>
<p>if(temp2&lt;=10){<br />
myFileName = productname+"_0"+temp2;<br />
}else{<br />
myFileName = productname+"_"+temp2;<br />
}</p>
<br />
这部分调用一个方法，读取目录里的文件名，并重新按照01、02、03的顺序命名。<br />
获取目录里的文件名的类：<br />
<br />
<p>import java.io.File;<br />
import java.io.FilenameFilter;<br />
import java.util.Arrays;<br />
import java.util.Comparator;<br />
import java.util.regex.Pattern;<br />
public class DirList { <br />
&nbsp;public String[] list(String thepath) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;File path = new File(thepath);&nbsp;&nbsp; <br />
&nbsp;&nbsp;String[] list;&nbsp;&nbsp; <br />
&nbsp;&nbsp;list = path.list(); &nbsp;<br />
&nbsp;&nbsp;Arrays.sort(list, new AlphabeticComparator()); <br />
&nbsp;&nbsp;return list;<br />
&nbsp;}<br />
}</p>
<p>class DirFilter implements FilenameFilter {&nbsp; <br />
&nbsp;private Pattern pattern;&nbsp; public DirFilter(String regex) { <br />
&nbsp;&nbsp;pattern = Pattern.compile(regex);&nbsp; }<br />
&nbsp;public boolean accept(File dir, String name) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;// Strip path information, search for regex:&nbsp;&nbsp; <br />
&nbsp;&nbsp;return pattern.matcher(new File(name).getName()).matches(); <br />
&nbsp;&nbsp;}<br />
&nbsp;} </p>
<p>class AlphabeticComparator implements Comparator { <br />
&nbsp;public int compare(Object o1, Object o2) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;String s1 = (String) o1;&nbsp;&nbsp;&nbsp; String s2 = (String) o2;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;return s1.toLowerCase().compareTo(s2.toLowerCase());&nbsp; <br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
 <img src ="http://www.blogjava.net/lzj520/aggbug/221659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-08-13 11:57 <a href="http://www.blogjava.net/lzj520/archive/2008/08/13/221659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>acegi 添加验证码</title><link>http://www.blogjava.net/lzj520/archive/2008/07/28/218022.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Mon, 28 Jul 2008 04:11:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/07/28/218022.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/218022.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/07/28/218022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/218022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/218022.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;bean id="authenticationProcessingFilter"<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="com.pixel.hibernate.HomeAloneAuthenticationProcessingFilter"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="authenticationManager"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;ref bean="authenticationManager" /&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="authenticationFailureUrl"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;value&gt;/back/login.jsp?login_error=1&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="defaultTargetUrl"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;value&gt;/&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="filterProcessesUrl"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;value&gt;/j_acegi_security_check&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="exceptionMappings"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="com.eshore.util.ValidaAuthenticationException"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /back/login.jsp?login_error=1<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/props&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
<br />
<br />
<br />
package com.pixel.hibernate;<br />
<br />
import java.io.IOException;<br />
import javax.servlet.http.HttpServletRequest;<br />
import javax.servlet.http.HttpServletResponse;<br />
import org.acegisecurity.Authentication;<br />
import org.acegisecurity.AuthenticationException;<br />
import org.acegisecurity.ui.webapp.AuthenticationProcessingFilter;<br />
import org.apache.commons.logging.Log;<br />
import org.apache.commons.logging.LogFactory;<br />
<br />
<br />
public class HomeAloneAuthenticationProcessingFilter extends<br />
&nbsp;&nbsp; AuthenticationProcessingFilter {<br />
private static final Log logger = LogFactory<br />
&nbsp;&nbsp;&nbsp; .getLog(HomeAloneAuthenticationProcessingFilter.class);<br />
<br />
@Override<br />
protected void onSuccessfulAuthentication(<br />
&nbsp;&nbsp;&nbsp; HttpServletRequest arg0, HttpServletResponse arg1,<br />
&nbsp;&nbsp;&nbsp; Authentication arg2) throws IOException {<br />
&nbsp;&nbsp; logger.info("login successful:"<br />
&nbsp;&nbsp;&nbsp;&nbsp; + arg0.getParameter("j_username"));<br />
&nbsp;&nbsp; arg0.getSession().setAttribute("userName",<br />
&nbsp;&nbsp;&nbsp;&nbsp; arg0.getParameter("j_username"));<br />
&nbsp;&nbsp; super.onSuccessfulAuthentication(arg0, arg1, arg2);<br />
}<br />
<br />
@Override<br />
protected void onPreAuthentication(HttpServletRequest arg0,<br />
&nbsp;&nbsp;&nbsp; HttpServletResponse arg1) throws AuthenticationException,<br />
&nbsp;&nbsp;&nbsp; IOException {<br />
&nbsp;&nbsp; // 验证码验证<br />
&nbsp;&nbsp; String randomCode1 = (String) arg0.getSession().getAttribute(<br />
&nbsp;&nbsp;&nbsp;&nbsp; "rand");<br />
&nbsp;&nbsp; String randomCode2 = (String) arg0.getParameter("rand");<br />
&nbsp;&nbsp; if (!randomCode2.equals(randomCode1)) {<br />
&nbsp;&nbsp;&nbsp; throw new ValidaAuthenticationException(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "valida code error");<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; super.onPreAuthentication(arg0, arg1);<br />
}<br />
}<br />
<br />
class ValidaAuthenticationException extends AuthenticationException {<br />
/**<br />
*<br />
*/<br />
private static final long serialVersionUID = -8369047599309913998L;<br />
<br />
public ValidaAuthenticationException(String arg0) {<br />
&nbsp;&nbsp; super(arg0);<br />
}<br />
}<br />
<br />
<br />
<img src ="http://www.blogjava.net/lzj520/aggbug/218022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-07-28 12:11 <a href="http://www.blogjava.net/lzj520/archive/2008/07/28/218022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dom读取xml</title><link>http://www.blogjava.net/lzj520/archive/2008/07/25/217527.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 25 Jul 2008 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/07/25/217527.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/217527.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/07/25/217527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/217527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/217527.html</trackback:ping><description><![CDATA[<p>import org.w3c.dom.*;<br />
import javax.xml.parsers.*;<br />
import java.io.*;<br />
public class Parse {<br />
&nbsp;//Document可以看作是XML在内存中的一个镜像,那么一旦获取这个Document 就意味着可以通过对<br />
&nbsp; //内存的操作来实现对XML的操作,首先第一步获取XML相关的Document<br />
&nbsp;&nbsp; private Document doc=null;<br />
&nbsp; <br />
&nbsp; public void init(String xmlFile) throws Exception{<br />
&nbsp;&nbsp; //很明显该类是一个单例,先获取产生DocumentBuilder工厂<br />
&nbsp;&nbsp; //的工厂,在通过这个工厂产生一个DocumentBuilder,<br />
&nbsp;&nbsp; //DocumentBuilder就是用来产生Document的<br />
&nbsp;&nbsp; DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();<br />
&nbsp;&nbsp; DocumentBuilder db=dbf.newDocumentBuilder();&nbsp; <br />
&nbsp;&nbsp; //这个Document就是一个XML文件在内存中的镜像<br />
&nbsp;&nbsp; doc=db.parse(new File(xmlFile));<br />
&nbsp; }<br />
&nbsp; //该方法负责把XML文件的内容显示出来<br />
&nbsp; <br />
&nbsp; public void viewXML(String xmlFile) throws Exception{<br />
&nbsp;&nbsp; this.init(xmlFile);<br />
&nbsp;&nbsp; //在xml文件里,只有一个根元素,先把根元素拿出来看看<br />
&nbsp;&nbsp; Element element=doc.getDocumentElement();<br />
&nbsp;&nbsp; System.out.println("根元素为:"+element.getTagName());<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; NodeList nodeList=doc.getElementsByTagName("story");<br />
&nbsp;&nbsp; System.out.println("story节点链的长度:"+nodeList.getLength());<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; Node fatherNode=nodeList.item(0);<br />
&nbsp;&nbsp; System.out.println("父节点为:"+fatherNode.getNodeName());<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; //把父节点的属性拿出来<br />
&nbsp;&nbsp; NamedNodeMap attributes=fatherNode.getAttributes();<br />
&nbsp;&nbsp; <br />
//&nbsp;&nbsp; for(int i=0;i&lt;attributes.getLength();i++){<br />
//&nbsp;&nbsp;&nbsp; Node attribute=attributes.item(i);<br />
//&nbsp;&nbsp;&nbsp; System.out.println("person的属性名为:"+attribute.getNodeName()+" 相对应的属性值为:"+attribute.getNodeValue());<br />
//&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp; NodeList childNodes = fatherNode.getChildNodes();<br />
&nbsp;&nbsp; System.out.println(childNodes.getLength());<br />
&nbsp;&nbsp; for(int j=0;j&lt;2;j++){<br />
&nbsp;&nbsp;&nbsp; Node childNode=childNodes.item(j);<br />
&nbsp;&nbsp;&nbsp; //如果这个节点属于Element ,再进行取值<br />
&nbsp;&nbsp;&nbsp; if(childNode instanceof Element){<br />
&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println("子节点名为:"+childNode.getNodeName()+"相对应的值为"+childNode.getFirstChild().getNodeValue());<br />
&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("子节点名为:"+childNode.getNodeName()+"相对应的值为"+childNode.getFirstChild().getNodeValue());<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; public static void main(String[] args)throws Exception{<br />
&nbsp;&nbsp; Parse parse=new Parse();</p>
<p>&nbsp;//我的XML文件<br />
&nbsp;&nbsp; parse.viewXML("D:/Tomcat 5.5/webapps/ROOT/story/best_story.xml");<br />
&nbsp; }<br />
}<br />
</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/217527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-07-25 17:39 <a href="http://www.blogjava.net/lzj520/archive/2008/07/25/217527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat6+apache_2.2.9均衡负载</title><link>http://www.blogjava.net/lzj520/archive/2008/07/13/214628.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sun, 13 Jul 2008 14:11:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/07/13/214628.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/214628.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/07/13/214628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/214628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/214628.html</trackback:ping><description><![CDATA[<span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">下载apache<br />
http://apache.mirror.phpchina.com/httpd/httpd-2.2.9-win32-src.zip<br />
下载mod_jk-1.2.26-httpd-2.2.4.so <br />
http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.26/<br />
下载tomcat6<br />
下载JDK6<br />
然后配置好环境。<br />
<br />
<strong>步骤1：</strong><br />
安装apache，然后测试</span></span></span></span><a href="http://localhost/"><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">http://localhost：80/</span></span></span></span></a><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">，可以显示的话表示apache安装成功。<br />
把mod_jk-1.2.26-httpd-2.2.4.so 改名为mod_jk，并复制到apache的安装目录的modules下。<br />
<br />
<strong>步骤2：</strong><br />
修改apache，conf目录下的httpd文件，增加以下内容（根据自己的情况增减）<br />
</span></span></span></span>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">LoadModule jk_module modules/mod_jk.so<br />
JkWorkersFile "C:\Program Files/Apache Software Foundation/Apache2.2/conf/workers.properties"<br />
JkLogFile "C:\Program Files/Apache Software Foundation/Apache2.2/logs/mod_jk.log"<br />
JkLogLevel severe</span></span></span></span></p>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">JkMount /*.do controller<br />
JkMount /*.jsp controller<br />
JkMount /WEB-INF/* controller<br />
JkMount /lzj1/*.do controller</span></span></span></span></p>
<br />
<span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>步骤3：</strong><br />
在conf目录下增加uriworkermap.properties文件<br />
再增加workers.properties文件，增加或修改以下内容（根据自己的情况而定）<br />
<br />
workers.tomcat_home="E:\java\apache-tomcat-6.0.16\apache-tomcat-6.0.16"<br />
workers.java_home="C:\Program Files\Java\jdk1.6.0_06"<br />
<br />
worker.list=controller,tomcat1,tomcat2<br />
<br />
</span></span></span></span>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">worker.tomcat1.host=192.168.10.55<br />
worker.tomcat1.port=8009<br />
<br />
worker.tomcat2.port=8009<br />
worker.tomcat2.host=localhostworker.controller.type=lb<br />
<br />
worker.controller.balanced_workers=tomcat1,tomcat2&nbsp;<br />
worker.controller.sticky_session=1<br />
worker.ajp13.lbfactor=1</span></span></span></span></p>
<br />
<span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">worker.ajp13.port=8009<br />
worker.ajp13.host=localhost<br />
worker.ajp13.type=ajp13<br />
<br />
worker.ajp13.lbfactor=1<br />
<br />
这样就完成了均衡负载的配置。<br />
<br />
</span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>步骤4：<br />
</strong>配置tomcat6<br />
&lt;Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2"&gt; <br />
再配置tomcat6集群的session复制。打开tomcat6，conf目录下的server.xml文件。把集群配置的注释去掉。变成<br />
<br />
</span></span></span></span>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; channelSendOptions="8"&gt;</span></span></span></span></p>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Manager className="org.apache.catalina.ha.session.DeltaManager"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; expireSessionsOnShutdown="false"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notifyListenersOnReplication="true"/&gt;</span></span></span></span></p>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Channel className="org.apache.catalina.tribes.group.GroupChannel"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Membership className="org.apache.catalina.tribes.membership.McastService"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address="228.0.0.4"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port="45564"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frequency="500"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropTime="3000"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address="auto"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; port="4000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoBind="100"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selectorTimeout="5000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="6"/&gt;</span></span></span></span></p>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Sender&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Channel&gt;</span></span></span></span></p>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.ha.tcp.ReplicationValve"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filter=""/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/&gt;</span></span></span></span></p>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempDir="/tmp/war-temp/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deployDir="/tmp/war-deploy/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; watchDir="/tmp/war-listen/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; watchEnabled="false"/&gt;</span></span></span></span></p>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Cluster&gt; </span></span></span></span></p>
<br />
<span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 8pt"><strong>步骤5：</strong></span><br />
</span></span></span><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">建立一个页面index.jsp：<br />
</span></span></span></span>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">/*&lt;%<br />
&nbsp;&nbsp; System.out.println("===========================");<br />
%&gt;<br />
*/</span></span></span></span></p>
<p><span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&lt;%@ page contentType="text/html; charset=GBK" %&gt;<br />
&lt;%@ page import="java.util.*" %&gt;<br />
&lt;html&gt;&lt;head&gt;&lt;title&gt;Cluster App Test&lt;/title&gt;&lt;/head&gt;<br />
&lt;body&gt;<br />
Server Info:<br />
&lt;%<br />
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"&lt;br&gt;");%&gt;<br />
&lt;%<br />
&nbsp; out.println("&lt;br&gt; ID " + session.getId()+"&lt;br&gt;");<br />
&nbsp; // 如果有新的 Session 属性设置<br />
&nbsp; String dataName = request.getParameter("dataName");<br />
&nbsp; if (dataName != null &amp;&amp; dataName.length() &gt; 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; String dataValue = request.getParameter("dataValue");<br />
&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute(dataName, dataValue);<br />
&nbsp; }<br />
&nbsp; out.print("&lt;b&gt;Session 列表&lt;/b&gt;");<br />
&nbsp; Enumeration e = session.getAttributeNames();<br />
&nbsp; while (e.hasMoreElements()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; String name = (String)e.nextElement();<br />
&nbsp;&nbsp;&nbsp;&nbsp; String value = session.getAttribute(name).toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp; out.println( name + " = " + value+"&lt;br&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( name + " = " + value);<br />
&nbsp;&nbsp; }<br />
%&gt;<br />
&nbsp; &lt;form action="index.jsp" method="POST"&gt;<br />
&nbsp;&nbsp;&nbsp; 名称:&lt;input type=text size=20 name="dataName"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; 值:&lt;input type=text size=20 name="dataValue"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type=submit&gt;<br />
&nbsp;&nbsp; &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></span></span></span></p>
<span style="font-size: 8pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">其web.xml配置<br />
&lt;distributable/&gt;<br />
<br />
</span></span></span><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><strong>步骤6：<br />
</strong>最后使用jmeter运行一下简单测试，设置40个并发用户，测试的IP地址是192.168.10.66（apache）、192.168.10.66（tomcat2）、192.168.10.55（tomcat1）其中tomcat2是有线接入，tomcat2是无线接入。测试页面为/lzj1/index.jsp。<br />
可以看看结果：<br />
<strong>tomcat1：</strong><br />
</span></span></span>
<p><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">Thread Name: 线程组 1-1<br />
Sample Start: 2008-07-13 22:32:42 CST<br />
Load time: 2532<br />
Latency: 2532<br />
Size in bytes: 401<br />
Sample Count: 1<br />
Error Count: 0<br />
Response code: 200<br />
Response message: OK</span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">Response headers:<br />
HTTP/1.1 200 OK<br />
Date: Sun, 13 Jul 2008 14:32:42 GMT<br />
Server: Apache/2.2.9 (Win32) mod_jk/1.2.26<br />
Set-Cookie: JSESSIONID=6A15C0175A2E1EC8E0930FAF0C28ADC9.tomcat1; Path=/lzj1</span></span></span></p>
<strong><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">tomcat2：<br />
</span></span></span></strong>
<p><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">Thread Name: 线程组 1-3<br />
Sample Start: 2008-07-13 22:32:44 CST<br />
Load time: 4<br />
Latency: 4<br />
Size in bytes: 401<br />
Sample Count: 1<br />
Error Count: 0<br />
Response code: 200<br />
Response message: OK</span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">Response headers:<br />
HTTP/1.1 200 OK<br />
Date: Sun, 13 Jul 2008 14:32:44 GMT<br />
Server: Apache/2.2.9 (Win32) mod_jk/1.2.26<br />
Set-Cookie: JSESSIONID=2FF347B788690651E7DADE1A040EE94C.tomcat2; Path=/lzj1</span></span></span></p>
<span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-size: 10pt">可以从结果看到检测到的服务器是Apache/2.2.9 (Win32) ，使用了mod_jk/1.2.26，并且tomcat1的反应时间明显慢于tomcat2，这是由于这里的tomcat1的网络是使用的是无线接入的缘故。<br />
<br />
</span></span></span></span>
<img src ="http://www.blogjava.net/lzj520/aggbug/214628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-07-13 22:11 <a href="http://www.blogjava.net/lzj520/archive/2008/07/13/214628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.SecurityException</title><link>http://www.blogjava.net/lzj520/archive/2008/07/08/213474.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 08 Jul 2008 15:32:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/07/08/213474.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/213474.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/07/08/213474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/213474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/213474.html</trackback:ping><description><![CDATA[运行junit4时，报错，在VM里面加入参数：-verbose:class，发现是以下类报错。<br />
<br />
java.lang.SecurityException: class "junit.framework.JUnit4TestCaseFacade"'s signer information does not match signer information of other classes in the same package<br />
&nbsp;at java.lang.ClassLoader.checkCerts(Unknown Source)<br />
&nbsp;at java.lang.ClassLoader.preDefineClass(Unknown Source)<br />
&nbsp;at java.lang.ClassLoader.defineClass(Unknown Source)<br />
&nbsp;at java.security.SecureClassLoader.defineClass(Unknown Source)<br />
&nbsp;at java.net.URLClassLoader.defineClass(Unknown Source)<br />
&nbsp;at java.net.URLClassLoader.access$000(Unknown Source)<br />
&nbsp;at java.net.URLClassLoader$1.run(Unknown Source)<br />
&nbsp;at java.security.AccessController.doPrivileged(Native Method)<br />
&nbsp;at java.net.URLClassLoader.findClass(Unknown Source)<br />
&nbsp;at java.lang.ClassLoader.loadClass(Unknown Source)<br />
&nbsp;at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)<br />
&nbsp;at java.lang.ClassLoader.loadClass(Unknown Source)<br />
&nbsp;at java.lang.ClassLoader.loadClassInternal(Unknown Source)<br />
&nbsp;at org.junit.internal.runners.OldTestClassRunner$OldTestClassAdaptingListener.asDescription(OldTestClassRunner.java:41)<br />
&nbsp;at org.junit.internal.runners.OldTestClassRunner$OldTestClassAdaptingListener.startTest(OldTestClassRunner.java:31)<br />
&nbsp;at junit.framework.TestResult.startTest(TestResult.java:151)<br />
&nbsp;at junit.framework.TestResult.run(TestResult.java:103)<br />
&nbsp;at junit.framework.TestCase.run(TestCase.java:118)<br />
&nbsp;at junit.framework.TestSuite.runTest(TestSuite.java:208)<br />
&nbsp;at junit.framework.TestSuite.run(TestSuite.java:203)<br />
&nbsp;at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:76)<br />
&nbsp;at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)<br />
&nbsp;at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)<br />
&nbsp;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)<br />
&nbsp;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)<br />
&nbsp;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)<br />
&nbsp;at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)<br />
<br />
由于用的是myeclipse的junit4包，后来自己去下了一个，结果就不会报错了。
<img src ="http://www.blogjava.net/lzj520/aggbug/213474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-07-08 23:32 <a href="http://www.blogjava.net/lzj520/archive/2008/07/08/213474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个hibernate动态查询</title><link>http://www.blogjava.net/lzj520/archive/2008/07/05/212713.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sat, 05 Jul 2008 01:59:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/07/05/212713.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/212713.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/07/05/212713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/212713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/212713.html</trackback:ping><description><![CDATA[//@author lzj<br />
//lzj:根据条件动态查询<br />
&nbsp; public List findPhotoAllDyn(String isshow,String classname,String userid,String start, String end,String phototypeid,String pagenum){<br />
&nbsp;&nbsp;StringBuffer hqlStr = new StringBuffer("select pt.STypename,pc.IPhotoclass,pc.SNames,pc.SUsername,pc.IStatus,pc.IShow ,pc.DAdddate ,pt.ITypeid,count(pr) from TPhototype pt right outer join pt.TPhotoclasses pc left join ");<br />
&nbsp;&nbsp; &nbsp;try{<br />
&nbsp;&nbsp;&nbsp; &nbsp;if(Integer.parseInt(isshow)==0)hqlStr.append("pc.TPicturescores pr Where pc.IShow=0 ");<br />
&nbsp;&nbsp;&nbsp; &nbsp;if(Integer.parseInt(isshow)==1)hqlStr.append("pc.TShowopuses pr Where pc.IShow=1 ");<br />
&nbsp;&nbsp;&nbsp; &nbsp;if(Integer.parseInt(isshow)==-1)hqlStr.append("pc.TPicturescores pr Where pc.IShow is not null ");<br />
&nbsp;&nbsp;&nbsp; &nbsp;}catch(Exception e){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;hqlStr.append("pc.TPicturescores pr Where pc.IShow=0 ");<br />
&nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp; &nbsp;if(classname!="")hqlStr.append("and pc.SNames=:sn ");&nbsp;<br />
&nbsp;&nbsp; &nbsp;if(userid!="")hqlStr.append("and pc.SUsername =:SUsername ");<br />
&nbsp;&nbsp; &nbsp;if(start!="")hqlStr.append("and pc.DAdddate between :Start ");<br />
&nbsp;&nbsp; &nbsp;if(end!="")hqlStr.append("and :End ");<br />
&nbsp;&nbsp; &nbsp;if(phototypeid!="")hqlStr.append("and pt.ITypeid = :ITypeid ");<br />
&nbsp;&nbsp; &nbsp;hqlStr.append("group by pt.STypename,pc.IPhotoclass,pc.SNames,pc.SUsername,pc.IStatus,pc.IShow ,pc.DAdddate ,pt.ITypeid order by count(pr) desc ");<br />
&nbsp;&nbsp; &nbsp;Session session =this.getSession();<br />
&nbsp;&nbsp;&nbsp;Query query = session.createQuery(hqlStr.toString());<br />
&nbsp;&nbsp;&nbsp;if(classname!="")query.setString("sn",classname);<br />
&nbsp;&nbsp;&nbsp;if(userid!="")query.setString("SUsername",userid);<br />
&nbsp;&nbsp;&nbsp;if(phototypeid!="")query.setString("ITypeid",phototypeid);<br />
&nbsp;&nbsp;&nbsp;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;if(start!="")<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setDate("Start",sdf.parse(start));<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (ParseException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if(end!="")<br />
&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setDate("End",sdf.parse(end));<br />
&nbsp;&nbsp;&nbsp;&nbsp;} catch (ParseException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated catch block<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;query.setCacheable(true);<br />
&nbsp;&nbsp;&nbsp;if (pagenum == null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*如果pagenum是空，则数据从第一条开始*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setFirstResult(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*设置查询开始的第几条数据，这里是从第1条开始*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setMaxResults(PageSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*设置查询数据条数*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer p = (Integer.valueOf(pagenum)-1) * PageSize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setFirstResult(p);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setMaxResults(PageSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }catch (Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setFirstResult(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setMaxResults(PageSize);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;List result = query.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;List templist = new ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;for (Iterator it = result.iterator();it.hasNext();){<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Map mm = new HashMap();<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Object[] row=(Object[])it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Query query2 =session.createQuery("from TPopularshow ps where ps.SUpid = :s");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;query2.setString("s", ((Long)row[1]).toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;query2.setCacheable(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;List result2 = query2.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Iterator it2 = result.iterator();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;if (query2.list().size()&gt;0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("ps", "yes");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}&nbsp;else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("ps", "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("STypename", (String)row[0]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("IPhotoclass", (Long)row[1]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("SNames", (String)row[2]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("SUsername", (String)row[3]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;//mm.put("IStatus",(Long)row[4]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;if((Long)row[4]==null){<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IStatus2","");<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}else if((Long)row[4]==1){<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IStatus","半开放");<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IStatus2",(Long)row[4]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}else if((Long)row[4]==2){<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("IStatus","开放");<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("IStatus2",(Long)row[4]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}else if((Long)row[4]==0){<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IStatus","不开放");<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IStatus2",(Long)row[4]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;if((Long)row[5]==0){<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IShow", "普通相册");<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("ptype", 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IShowb", 3);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}else if((Long)row[5]==1){<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IShow", "特殊相册");<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("ptype", 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;mm.put("IShowb", 4);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;//mm.put("IShow", (Long)row[5]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("DAdddate", (Date)row[6]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("Count", (Long)row[8]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;templist.add(mm);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;session.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;return templist;<br />
&nbsp;&nbsp;&nbsp;&nbsp; } 
<img src ="http://www.blogjava.net/lzj520/aggbug/212713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-07-05 09:59 <a href="http://www.blogjava.net/lzj520/archive/2008/07/05/212713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用HQL的时候，dialect导致了oracle的right join 或者full join出错</title><link>http://www.blogjava.net/lzj520/archive/2008/06/28/211281.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sat, 28 Jun 2008 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/06/28/211281.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/211281.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/06/28/211281.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/211281.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/211281.html</trackback:ping><description><![CDATA[在oracle里使用right join 或者full join的HQL语句都会出错，不过使用inner join和left join都能够通过。<br />
出的错误是提示oracle不支持这种join类型。<br />
<br />
后来检查，发现dialect的语句是<br />
org.hibernate.dialect.Oracle9iDialect<br />
然后试着换成<br />
org.hibernate.dialect.Oracle9Dialect<br />
<br />
之后一切顺利通过。<br />
<img src ="http://www.blogjava.net/lzj520/aggbug/211281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-06-28 10:09 <a href="http://www.blogjava.net/lzj520/archive/2008/06/28/211281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate多表操作复习2</title><link>http://www.blogjava.net/lzj520/archive/2008/06/26/210975.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 26 Jun 2008 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/06/26/210975.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/210975.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/06/26/210975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/210975.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/210975.html</trackback:ping><description><![CDATA[继续之前那个复习，继续那3张表，在此前已经可以联级插入数据，现在来联级检索出3张表的数据，假设要求查出名字为&#8220;lzj"的学生在3张表里的所有记录。使用inner join操作。<br />
<br />
TstudentDAO：<br />
<br />
&nbsp;&nbsp;public List findall(String name){<br />
&nbsp;&nbsp;Session session =this.getSession();<br />
&nbsp;&nbsp;Transaction tx = null;<br />
&nbsp;&nbsp;Query query = session.createQuery("select t.name,t.email,s.name,tt.times from TStudent t join t.TSubjectses s join t.TTests tt where t.name=:name");<br />
&nbsp;&nbsp;query.setString("name", name);<br />
&nbsp;&nbsp;List result = query.list();<br />
&nbsp;&nbsp;&nbsp; &nbsp;List templist = new ArrayList();<br />
&nbsp;&nbsp;&nbsp; &nbsp;for (Iterator it = result.iterator();it.hasNext();){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object[] row=(Object[])it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map mm = new HashMap();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("name", (String)row[0]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("email", (String)row[1]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("sname", (String)row[2]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;mm.put("times", (Integer)row[3]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;templist.add(mm);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp; &nbsp;return templist;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
<br />
action里只需要一句话：<br />
List results =&nbsp; tstudentDAO.findall("lzj");<br />
并将结果返回给struts的jsp页面：<br />
if(results!=null){<br />
&nbsp;&nbsp;&nbsp;HttpSession session=request.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute("results",results);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mapping.findForward("ok");<br />
<br />
<br />
jsp页面接受，使用struts标签：<br />
<p>&nbsp;&lt;logic:present name="results"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;table border="1"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;logic:iterate id="element" name="results"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="100"&gt;&lt;bean:write name="element" property="name"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp; &lt;td width="100"&gt;&lt;bean:write name="element" property="email"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="100"&gt;&lt;bean:write name="element" property="sname"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td width="100"&gt;&lt;bean:write name="element" property="times"/&gt;&lt;/td&gt;</p>
<p>&lt;td id="result"&gt;&lt;/td&gt;<br />
&nbsp;&nbsp; &lt;/tr&gt;<br />
&lt;/logic:iterate&gt;<br />
&nbsp;&lt;/logic:present&gt;</p>
<br />
<br />
<img src ="http://www.blogjava.net/lzj520/aggbug/210975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-06-26 23:10 <a href="http://www.blogjava.net/lzj520/archive/2008/06/26/210975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate多表操作复习</title><link>http://www.blogjava.net/lzj520/archive/2008/06/22/209945.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Sun, 22 Jun 2008 15:42:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2008/06/22/209945.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/209945.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2008/06/22/209945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/209945.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/209945.html</trackback:ping><description><![CDATA[最近在熟习新公司的项目，看到里面乱麻麻的SQL语句，if - else语句就头大，虽然这个项目有用hibernate，但是感觉上没有运用到hibernate的优势，只是用了一些hql语句和hibernate的数据库分页。没有延迟加载，没有联级操作，表也没有建立约束，甚至没有索引。现在该项目已经算是做完了，我刚到，要去接手并修改里面的内容，真是很痛苦的，最痛苦的还是那512的内存。。。<br />
<br />
在一开始建立数据库表时，建立好约束，建立好索引，表的设计合理，之后的一切都会是很美好的。比如有3张表：<br />
<p>学生：t_student<br />
id <br />
name <br />
email</p>
<p><br />
科目：t_subjects<br />
id <br />
subjects name<br />
student_id </p>
<p><br />
考试：t_test<br />
id <br />
student_id <br />
subjects_id <br />
month <br />
times<br />
<br />
学生表和科目表，学生表和考试表，科目和考试都是一对多关系。建立好索引和约束，然后由hibernate自动生成hbm文件，并在学生表、科目表的hbm文件里设置inverse="true" cascade="all" lazy="true"。<br />
<br />
就大致配置好了，然后假如要录入这样一条涉及到3个表的记录：<br />
学生姓名、email、科目名称、月份、考试次数<br />
就只需要写一个简单的方法调用session.save就可以保存所有内容了：<br />
<br />
public ActionForward execute(ActionMapping mapping, ActionForm form,<br />
&nbsp;&nbsp;&nbsp;HttpServletRequest request, HttpServletResponse response) {<br />
&nbsp;&nbsp;DynaActionForm student_registerForm = (DynaActionForm) form;// TODO Auto-generated method stub<br />
&nbsp; //receive from actionform<br />
&nbsp;&nbsp;String strname = student_registerForm.getString("name");<br />
&nbsp;&nbsp;String stremail = student_registerForm.getString("email");<br />
&nbsp;&nbsp;String strsubjectname = student_registerForm.getString("subjectname");<br />
&nbsp;&nbsp;int intmonth = Integer.parseInt(student_registerForm.getString("month"));<br />
&nbsp;&nbsp;int inttimes = Integer.parseInt(student_registerForm.getString("times"));<br />
&nbsp;&nbsp;TStudent tStudent = new TStudent();<br />
&nbsp;&nbsp;tStudent.setName(strname);<br />
&nbsp;&nbsp;tStudent.setEmail(stremail);<br />
&nbsp;&nbsp;//set the subject<br />
&nbsp;&nbsp;TSubjects Tsubjects = new TSubjects();<br />
&nbsp;&nbsp;Tsubjects.setTStudent(tStudent);<br />
&nbsp;&nbsp;Tsubjects.setName(strname);<br />
&nbsp;&nbsp;tStudent.getTSubjectses().add(Tsubjects);<br />
&nbsp;&nbsp;//set the test<br />
&nbsp;&nbsp;TTest Ttest = new TTest();<br />
&nbsp;&nbsp;Ttest.setTStudent(tStudent);<br />
&nbsp;&nbsp;Ttest.setMonth(intmonth);<br />
&nbsp;&nbsp;Ttest.setTimes(inttimes);<br />
&nbsp;&nbsp;tStudent.getTTests().add(Ttest);<br />
&nbsp;&nbsp;//insert all<br />
&nbsp;&nbsp;tstudentDAO.insert(tStudent);<br />
&nbsp;&nbsp;return mapping.findForward("ok");<br />
&nbsp;}<br />
<br />
&nbsp;tstudentDAO只有一个操作：<br />
session.save(tStudent);<br />
<br />
之后可以看到3个表里的记录都同时增加好了。<br />
</p>
<img src ="http://www.blogjava.net/lzj520/aggbug/209945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2008-06-22 23:42 <a href="http://www.blogjava.net/lzj520/archive/2008/06/22/209945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>