﻿<?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-天空是蓝色的-随笔分类-工作总结</title><link>http://www.blogjava.net/bluesky/category/4546.html</link><description>做好软件为中国
#gcc -c helloworld.c -o helloworld.o //编译目标文件
#gcc helloworld.o -o helloworld //编译成可执行exe
#helloworld //运行exe</description><language>zh-cn</language><lastBuildDate>Sun, 21 Feb 2010 09:01:18 GMT</lastBuildDate><pubDate>Sun, 21 Feb 2010 09:01:18 GMT</pubDate><ttl>60</ttl><item><title>契约式开发webservice实践之spring-ws+Xmlbeans</title><link>http://www.blogjava.net/bluesky/archive/2008/09/19/Writing_Contract-First_Web_Services_Use_Spring-ws_and_Xmlbeans.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Fri, 19 Sep 2008 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2008/09/19/Writing_Contract-First_Web_Services_Use_Spring-ws_and_Xmlbeans.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/230022.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2008/09/19/Writing_Contract-First_Web_Services_Use_Spring-ws_and_Xmlbeans.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/230022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/230022.html</trackback:ping><description><![CDATA[<p>契约式开发webservice实践之spring-ws+Xmlbeans<br />
1、开发环境<br />
JDK1.4.2.*<br />
Tomcat6.0.*<br />
Spring-2.5.5<br />
Spring-ws-1.5.4<br />
XmlBeans-2.3</p>
<p><br />
2、确定需要请求和应答的xml实例<br />
Request.xml</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;wl_request&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp; xmlns="http://footmarktech.com/samples"&gt;<br />
&lt;flights&gt;<br />
&nbsp;&lt;flight&gt;&lt;segment&gt;PEK-CAN&lt;segment&gt;&lt;ticketNo&gt;7841234656&lt;/ticketNo&gt;&lt;/flight&gt;<br />
&nbsp;&lt;flight&gt;&lt;segment&gt;PEK-CAN&lt;segment&gt;&lt;ticketNo&gt;7841234656&lt;/ticketNo&gt;&lt;/flight&gt;<br />
&lt;/flights&gt;<br />
&lt;/wl_request&gt;</p>
<p>Response.xml</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;wl_response&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp; xmlns="http://footmarktech.com/samples"&gt;<br />
&lt;flights&gt;<br />
&nbsp;&lt;flight&gt;&lt;segment&gt;PEK-CAN&lt;segment&gt;&lt;ticketNo&gt;7841234656&lt;/ticketNo&gt;&lt;/flight&gt;<br />
&nbsp;&lt;flight&gt;&lt;segment&gt;PEK-CAN&lt;segment&gt;&lt;ticketNo&gt;7841234656&lt;/ticketNo&gt;&lt;/flight&gt;<br />
&lt;/flights&gt;<br />
&lt;/wl_response&gt;</p>
<p>3、设置XmlBeans环境<br />
设置XMLBEANS_HOME<br />
并将 %XMLBEANS_HOME%/bin增加到path路径中</p>
<p>4、使用xmlbeans tool准备数据契约xsd<br />
根据上一步骤请求和应答的实例xml执行如下命令<br />
inst2xsd -enumerations never Request.xml Response.xml<br />
将生成的schema0.xsd文件命名为 Airline.xsd</p>
<p>将 Airline.xsd放在 ${web-context}/WEB-INF目录下<br />
5、使用xmlbeans tool生成OXM数据映射对象<br />
需要说明的是这些对象是跟Xmlbeans耦合比较紧的,不是POJO<br />
执行如下命令<br />
scomp -out Airline.jar Airline.xsd</p>
<p>6、准备运行时和编译时jar包</p>
<p><br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/acegi-security-1.0.7.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/activation-1.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/antlr-2.7.7.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/aopalliance-1.0.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/axiom-api-1.2.6.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/axiom-dom-1.2.6.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/axiom-impl-1.2.6.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/backport-util-concurrent-3.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/bsf-2.3.0.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/cglib-nodep-2.1_3.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-beanutils-1.7.0.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-codec-1.3.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-collections-3.2.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-configuration-1.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-digester-1.8.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-discovery-0.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-el-1.0.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-fileupload-1.2.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-httpclient-3.0.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-io-1.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-lang-2.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-logging-1.1.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-net-1.2.2.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-pool-1.3.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/commons-validator-1.3.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/concurrent-1.3.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/dom4j-1.6.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/ehcache-1.2.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/ezmorph-1.0.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/groovy-all-1.5.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/hibernate-3.2.6.ga.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/hsqldb-1.8.0.7.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/icu4j-3.4.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/jasypt-1.4.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/javassist-3.6.ga.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/jaxen-1.1.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/jaxrpc-1.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/jcaptcha-all-1.0-RC6.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/jcr-1.0.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/jdom-1.0.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/json-lib-2.2.1-jdk13.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/jta-spec1_0_1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/log4j-1.2.15.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/lucene-core-2.2.0.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/mail-1.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/mysql-connector-java-5.1.5-bin.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/ognl-2.7.2.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/oro-2.0.8.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/oscache-2.4.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/pdfbox-0.6.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/poi-3.0.1-FINAL-20070705.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/poi-contrib-3.0.1-FINAL-20070705.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/poi-scratchpad-3.0.1-FINAL-20070705.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/proxool-0.9.0RC3.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/serializer-2.7.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/slf4j-api-1.4.3.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/slf4j-log4j12-1.4.3.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/spring-2.5.5.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/stax-api-1.0.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/wsdl4j-1.6.2.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/wstx-asl-3.2.3.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xalan-2.7.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xercesImpl-2.8.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xfire-all-1.2.6.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xml-apis-1.3.04.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xom-1.1.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xpp3_min-1.1.3.4.0.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xstream-1.2.2.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/axis-saaj-1.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/axis-1.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/spring-oxm-1.5.4.jar" sourcepath="D:/maven-1.0.2/.maven/repository/springframework/srcs/spring-ws-1.5.4-with-dependencies.zip"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/spring-webmvc-2.5.5.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/spring-ws-core-1.5.4.jar" sourcepath="D:/maven-1.0.2/.maven/repository/springframework/srcs/spring-ws-1.5.4-with-dependencies.zip"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/spring-ws-security-1.5.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/spring-ws-support-1.5.4.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/spring-xml-1.5.4.jar" sourcepath="D:/maven-1.0.2/.maven/repository/springframework/srcs/spring-ws-1.5.4-with-dependencies.zip"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/jsr173_1.0_api.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/resolver.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xbean_xpath.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xbean.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xmlbeans-qname.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/xmlpublic.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="lib" path="web/src/context/WEB-INF/lib/Airline.jar"/&gt;<br />
&nbsp;&lt;classpathentry kind="output" path="web/src/context/WEB-INF/classes"/&gt;</p>
<p><br />
Spring-ws1.5.4必须使用springframework2.5版本以上<br />
其对org.springframework.core.io.Resource版本要求较高<br />
必须加入spring-webmvc-2.5.5.jar<br />
org.springframework.web.servlet.FrameworkServlet从2.5版本后被分到spring-webmvc.jar包,并不包含于主spring包内</p>
<p>注,可能有些jar包没有用到<br />
7、书写web.xml</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />
&lt;web-app&gt;<br />
&nbsp; &lt;display-name&gt;Web&lt;/display-name&gt;<br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; &lt;context-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param-value&gt;classpath:applicationContext.xml&lt;/param-value&gt;<br />
&nbsp; &lt;/context-param&gt;<br />
&nbsp; <br />
&nbsp; <br />
&nbsp; &lt;listener&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />
&nbsp; &lt;/listener&gt;</p>
<p>&nbsp; &lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;ws-spring-ws&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.springframework.ws.transport.http.MessageDispatcherServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp; &lt;/servlet&gt;<br />
&nbsp;&nbsp; <br />
&nbsp; &lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;ws-spring-ws&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/spring-ws/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/servlet-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; </p>
<p>&lt;/web-app&gt;</p>
<p>8、书写业务实现</p>
<p>package demo1;</p>
<p>public class Order {<br />
&nbsp;private String id;</p>
<p>&nbsp;public String getId() {<br />
&nbsp;&nbsp;return id;<br />
&nbsp;}</p>
<p>&nbsp;public void setId(String id) {<br />
&nbsp;&nbsp;this.id = id;<br />
&nbsp;}<br />
}</p>
<p>package demo1;</p>
<p>public interface OrderService {<br />
&nbsp;Order getOrder(String id);<br />
}</p>
<p>&nbsp;</p>
<p>package demo1;</p>
<p>public class OrderServiceImpl implements OrderService{<br />
&nbsp;public Order getOrder(String id) {<br />
&nbsp;&nbsp;Order order = new Order();<br />
&nbsp;&nbsp;order.setId(id);<br />
&nbsp;&nbsp;return order;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;<br />
}</p>
<p>书写spring配置放在classpath下<br />
applicationContext.xml</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
<p>&lt;!DOCTYPE beans PUBLIC<br />
&nbsp;&nbsp;&nbsp; "-//SPRING//DTD BEAN//EN"<br />
&nbsp;&nbsp;&nbsp; "http://www.springframework.org/dtd/spring-beans.dtd"&gt;</p>
<p>&lt;beans default-autowire="no" default-lazy-init="false" default-dependency-check="none"&gt;<br />
&nbsp; &lt;bean id="orderService" class="demo1.OrderServiceImpl"/&gt;<br />
&lt;/beans&gt;</p>
<p>9、书写Spring-ws EndPoint</p>
<p>package demo1;</p>
<p>import org.springframework.oxm.Marshaller;<br />
import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;</p>
<p>import com.footmarktech.samples.WlRequestDocument;<br />
import com.footmarktech.samples.WlResponseDocument;</p>
<p>public class SampleMarshallingEndpoint extends<br />
&nbsp;&nbsp;AbstractMarshallingPayloadEndpoint {</p>
<p>&nbsp;private final OrderService orderService;</p>
<p>&nbsp;public SampleMarshallingEndpoint(OrderService orderService,<br />
&nbsp;&nbsp;&nbsp;Marshaller marshaller) {<br />
&nbsp;&nbsp;super(marshaller);<br />
&nbsp;&nbsp;this.orderService = orderService;<br />
&nbsp;}</p>
<p>&nbsp;protected Object invokeInternal(Object request) throws Exception {<br />
&nbsp;&nbsp;com.footmarktech.samples.WlRequestDocument ab = null;<br />
&nbsp;&nbsp;ab = (WlRequestDocument)request;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;//TODO invoke orderService<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;WlResponseDocument rs = (WlResponseDocument) WlResponseDocument.Factory.newInstance();<br />
&nbsp;&nbsp;rs.addNewWlResponse().addNewFlights().addNewFlight().setTicketNo(ab.getWlRequest().getFlights().getFlightArray(0).getTicketNo());<br />
&nbsp;&nbsp;return rs;<br />
&nbsp;}<br />
}</p>
<p><br />
10、书写ws-spring-ws-servlet.xml<br />
放置于${web-context}/WEB-INF目录下</p>
<p><br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;</p>
<p><br />
&lt;bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory"&gt;<br />
&nbsp;&lt;property name="payloadCaching" value="true"/&gt;<br />
&lt;/bean&gt;</p>
<p>&lt;bean id="xmlBeansMarshaller" class="org.springframework.oxm.xmlbeans.XmlBeansMarshaller" /&gt;</p>
<p>&lt;bean id="orderEndPoint" class="demo1.SampleMarshallingEndpoint"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constructor-arg&gt;&lt;ref bean="orderService"/&gt;&lt;/constructor-arg&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constructor-arg&gt;&lt;ref bean="xmlBeansMarshaller"/&gt;&lt;/constructor-arg&gt;<br />
&lt;/bean&gt;</p>
<p>&lt;bean id="payloadMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="defaultEndpoint" ref="orderEndPoint"/&gt;<br />
&lt;/bean&gt;</p>
<p>&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&lt;bean id="echo" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition"&gt;<br />
&nbsp;&nbsp; &lt;property name="schema"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean class="org.springframework.xml.xsd.SimpleXsdSchema"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="xsd" value="/WEB-INF/Airline.xsd"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="portTypeName" value="Echo"/&gt;<br />
&nbsp;&nbsp; &lt;property name="locationUri" value="http://localhost:8080/ss1/spring-ws/echo/services"/&gt;<br />
&nbsp;&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>11、开发客户端</p>
<p>配置applicationContext1.xml放置于 classpath demo1.client包内<br />
</p>
<p><br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;</p>
<p><br />
&lt;bean id="xmlBeansMarshaller" class="org.springframework.oxm.xmlbeans.XmlBeansMarshaller" /&gt;</p>
<p>&lt;bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory"&gt;<br />
&nbsp;&lt;property name="payloadCaching" value="true"/&gt;<br />
&lt;/bean&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&lt;bean id="webServiceTemplate1" class="org.springframework.ws.client.core.WebServiceTemplate"&gt;<br />
&lt;constructor-arg ref="messageFactory" /&gt;<br />
&lt;property name="marshaller" ref="xmlBeansMarshaller" /&gt;<br />
&lt;property name="unmarshaller" ref="xmlBeansMarshaller" /&gt;<br />
&lt;property name="messageSender"&gt;<br />
&nbsp;&lt;bean class="org.springframework.ws.transport.http.CommonsHttpMessageSender"&gt;<br />
&nbsp;&nbsp;&lt;property name="readTimeout" value="0" /&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&lt;/property&gt;<br />
&lt;property name="defaultUri" value="http://localhost:8080/ss1/spring-ws/echo/services" /&gt;<br />
&lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; </p>
<p>&lt;/beans&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>package demo1.client;</p>
<p>import java.io.File;<br />
import java.io.IOException;</p>
<p>import javax.xml.transform.Source;</p>
<p>import org.apache.xmlbeans.XmlException;<br />
import org.apache.xmlbeans.XmlObject;<br />
import org.jdom.JDOMException;<br />
import org.springframework.context.ApplicationContext;<br />
import org.springframework.context.support.ClassPathXmlApplicationContext;<br />
import org.springframework.core.io.Resource;<br />
import org.springframework.ws.client.core.WebServiceTemplate;<br />
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;<br />
import org.springframework.xml.transform.ResourceSource;<br />
import org.springframework.xml.transform.StringResult;</p>
<p>import com.footmarktech.smscenter.webservice.SendSMDocument;<br />
import com.footmarktech.smscenter.webservice.SendSMResponseDocument;<br />
import com.footmarktech.samples.WlRequestDocument;<br />
import com.footmarktech.samples.WlResponseDocument;</p>
<p>public class EchoClient {<br />
&nbsp;public static void RequestSpring() {<br />
&nbsp;&nbsp;ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext1.xml", EchoClient.class);<br />
&nbsp;&nbsp;WebServiceTemplate webServiceTemplate = (WebServiceTemplate) applicationContext<br />
&nbsp;&nbsp;&nbsp;&nbsp;.getBean("webServiceTemplate1");<br />
&nbsp;&nbsp;WlRequestDocument request = WlRequestDocument.Factory.newInstance();<br />
&nbsp;&nbsp;request.addNewWlRequest().addNewFlights().addNewFlight().setTicketNo(new Long(1231235555).longValue());<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;WlResponseDocument response = (WlResponseDocument)webServiceTemplate.marshalSendAndReceive(request);<br />
&nbsp;&nbsp;System.out.println(response.getWlResponse().getFlights().getFlightArray(0).getTicketNo());<br />
&nbsp;}</p>
<p>&nbsp;public static void main(String[] args) throws IOException, JDOMException {<br />
&nbsp;&nbsp;RequestSpring();</p>
<p>&nbsp;}</p>
<p>}</p>
<p>12、参考资料<br />
http://xmlbeans.apache.org/<br />
http://static.springframework.org/spring-ws/sites/1.5/reference/html/index.html<br />
http://mdasgin.blogspot.com/2008/06/web-servisleri-bir-makinede-sunulan.html<br />
http://www.infoq.com/cn/articles/arjen-poutsma-spring-ws<br />
http://www.infoq.com/cn/articles/sosnoski-code-first <br />
<br />
<a href="/Files/bluesky/Writing_Contract-First_Web_Services_Use_Spring-ws_and_Xmlbeans.zip">下载pdf版文档</a></p>
<img src ="http://www.blogjava.net/bluesky/aggbug/230022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2008-09-19 21:44 <a href="http://www.blogjava.net/bluesky/archive/2008/09/19/Writing_Contract-First_Web_Services_Use_Spring-ws_and_Xmlbeans.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Extension Tapestry4`s restart service to clear my login cookies</title><link>http://www.blogjava.net/bluesky/archive/2008/03/24/188261.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Mon, 24 Mar 2008 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2008/03/24/188261.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/188261.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2008/03/24/188261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/188261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/188261.html</trackback:ping><description><![CDATA[<p>接上篇,自定义一个logout service 把我的login cookies 清楚掉
<p>Tapestry .java
<p>package common.tapestry;
<p>public final&nbsp; class Tapestry {<br />
&nbsp; public static final String LOGOUT_SERVICE = "logout";<br />
}
<p>LogoutService.java<br />
package common.tapestry.engine;
<p>import java.io.IOException;
<p>import org.apache.tapestry.IRequestCycle;<br />
import org.apache.tapestry.engine.RestartService;
<p>import common.tapestry.Tapestry;
<p>public class LogoutService extends RestartService {<br />
&nbsp;private LoginCookiesManager loginCookiesManager;
<p><br />
&nbsp;public void setLoginCookiesManager(<br />
&nbsp;&nbsp; LoginCookiesManager loginCookiesManager) {<br />
&nbsp; this.loginCookiesManager = loginCookiesManager;<br />
&nbsp;}
<p>&nbsp;public void service(IRequestCycle cycle) throws IOException {<br />
&nbsp; loginCookiesManager.removeCookies();<br />
&nbsp; super.service(cycle);<br />
&nbsp;}
<p>&nbsp;public String getName() {<br />
&nbsp; return Tapestry.LOGOUT_SERVICE;<br />
&nbsp;}<br />
}
<p>hivemodule.xml<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;module id="common.tapestry" version="1.0.0"&gt;
<p>&nbsp;&lt;!-- extends tapestry RestartService and clear the login cookies info--&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;service-point id="LogoutService" interface="org.apache.tapestry.engine.IEngineService"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;invoke-factory&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;construct class="common.tapestry.engine.LogoutService"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;set-service property="request" service-id="tapestry.globals.HttpServletRequest" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-service property="response" service-id="tapestry.globals.HttpServletResponse" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-object property="servletPath" value="app-property:org.apache.tapestry.servlet-path" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-object property="linkFactory" value="infrastructure:linkFactory" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-object property="loginCookiesManager" value="service:common.tapestry.LoginCookiesManager"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/construct&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/invoke-factory&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/service-point&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;contribution configuration-id="tapestry.services.ApplicationServices"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;service name="logout" object="service:common.tapestry.LogoutService" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/contribution&gt;
<p>&lt;/module&gt;
<p>in your Pages<br />
&lt;a jwcid="@ServiceLink" href="#" service="ognl:@common.tapestry.Tapestry@LOGOUT_SERVICE" target="_top"&gt;退出&lt;/a&gt;<br />
<br />
系原创<br />
作者其他blog&nbsp; <a href="http://oxyc.spaces.live.com">http://oxyc.spaces.live.com</a><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;<a href="http://hiok.blog.sohu.com">http://hiok.blog.sohu.com</a> <br />
<br />
</p>
<img src ="http://www.blogjava.net/bluesky/aggbug/188261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2008-03-24 15:34 <a href="http://www.blogjava.net/bluesky/archive/2008/03/24/188261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl</title><link>http://www.blogjava.net/bluesky/archive/2008/03/24/188254.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Mon, 24 Mar 2008 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2008/03/24/188254.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/188254.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2008/03/24/188254.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/188254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/188254.html</trackback:ping><description><![CDATA[<p>How to use cookies in tapestry4? my Tapestry4.1.5`LoginCookiesManagerImpl
<p>思路<br />
首先BasePage是需要登陆的 protected ,<br />
BasePage实现org.apache.tapestry.event.PageValidateListener方法,判断asm对象Visit是否已经登陆<br />
如没visit==null,去cookies找回用户名和密码从cycle中获得Login页面<br />
Login页面实现common.tapestry.IConstructVisit接口。LoginPage登陆时保存用户名密码到cookies中,并对cookies的值加密,<br />
cookies的key是baseUrl+key,取回时对cookies值解密,加密解密的password放到Application的meta信息中
<p>实现代码如下<br />
抽象接口LoginCookiesManager
<p>package common.tapestry.engine;
<p>public interface LoginCookiesManager {<br />
&nbsp;<br />
&nbsp;String APPLICATION_META_KEY_DEFAULT_COOKIES_IS_ENCRYPTION = "common.tapestry.default-cookies-encrypt";//是否需要加密,默认加密<br />
&nbsp;String APPLICATION_META_KEY_DEFAULT_COOKIES_ENCRYPTION_KEY = "common.tapestry.default-cookies-encryption-key";//加密的password
<p>&nbsp;public static final String COOKIES_KEY_LOGIN_USERNAME = "USERNAME";<br />
&nbsp;public static final String COOKIES_KEY_LOGIN_PASSWORD = "PASSWORD";<br />
&nbsp;<br />
&nbsp;/**<br />
&nbsp; * 将用户名和密码写入cookies<br />
&nbsp; * @param username<br />
&nbsp; * @param password<br />
&nbsp; * @param maxAge<br />
&nbsp; */<br />
&nbsp;void writeCookies(String username,String password,int maxAge);<br />
&nbsp;/**<br />
&nbsp; * 清除用户名和密码cookies<br />
&nbsp; */<br />
&nbsp;void removeCookies();<br />
&nbsp;/**<br />
&nbsp; * 从cookies中获得用户名<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;String getUsername();<br />
&nbsp;/**<br />
&nbsp; * 从cookies中获得密码<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;String getPassword();<br />
}
<p>LoginCookiesManagerImpl 实现
<p>package common.tapestry.engine;
<p>import org.apache.hivemind.ApplicationRuntimeException;<br />
import org.apache.tapestry.engine.IPropertySource;<br />
import org.apache.tapestry.services.AbsoluteURLBuilder;<br />
import org.apache.tapestry.services.CookieSource;<br />
import org.apache.tapestry.web.WebRequest;<br />
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;<br />
import org.jasypt.exceptions.EncryptionOperationNotPossibleException;
<p>public class LoginCookiesManagerImpl implements LoginCookiesManager {<br />
&nbsp;private static StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();<br />
&nbsp;private IPropertySource applicationPropertySource;<br />
&nbsp;private CookieSource cookieSource;<br />
&nbsp;private WebRequest request;<br />
&nbsp;private AbsoluteURLBuilder absoluteURLBuilder;
<p>&nbsp;public void setApplicationPropertySource(<br />
&nbsp;&nbsp;&nbsp;IPropertySource applicationPropertySource) {<br />
&nbsp;&nbsp;this.applicationPropertySource = applicationPropertySource;<br />
&nbsp;&nbsp;String encrypKey = getCookiesEncryptionKey();<br />
&nbsp;&nbsp;standardPBEStringEncryptor.setPassword(encrypKey);<br />
&nbsp;}
<p>&nbsp;private String decrypt(String value) {<br />
&nbsp;&nbsp;String tmp = value;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;tmp = standardPBEStringEncryptor.decrypt(value);<br />
&nbsp;&nbsp;} catch (EncryptionOperationNotPossibleException e) {<br />
&nbsp;&nbsp;&nbsp;throw new ApplicationRuntimeException("please clear your cookies");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return tmp;<br />
&nbsp;}
<p>&nbsp;private String encrypt(String value) {<br />
&nbsp;&nbsp;return standardPBEStringEncryptor.encrypt(value);<br />
&nbsp;}
<p>&nbsp;private String getCookiesEncryptionKey() {<br />
&nbsp;&nbsp;String temp = applicationPropertySource<br />
&nbsp;&nbsp;&nbsp;&nbsp;.getPropertyValue(APPLICATION_META_KEY_DEFAULT_COOKIES_ENCRYPTION_KEY);<br />
&nbsp;&nbsp;return (temp != null) ? temp : "crypassword";<br />
&nbsp;}
<p>&nbsp;private boolean isCookiesEncryption() {<br />
&nbsp;&nbsp;String temp = applicationPropertySource<br />
&nbsp;&nbsp;&nbsp;&nbsp;.getPropertyValue(APPLICATION_META_KEY_DEFAULT_COOKIES_IS_ENCRYPTION);<br />
&nbsp;&nbsp;return (temp != null) ? Boolean.valueOf(temp).booleanValue() : true;<br />
&nbsp;}
<p>&nbsp;public void removeCookies() {<br />
&nbsp;&nbsp;String cookiesKeyLogin_username = generateApplicationCookiesKey_Login__Username();<br />
&nbsp;&nbsp;String cookiesKeyLogin_password = generateApplicationCookiesKey_Login__Password();<br />
&nbsp;&nbsp;cookieSource.removeCookieValue(cookiesKeyLogin_username);<br />
&nbsp;&nbsp;cookieSource.removeCookieValue(cookiesKeyLogin_password);<br />
&nbsp;}
<p>&nbsp;public void writeCookies(String username, String password, int maxAge) {<br />
&nbsp;&nbsp;writeCookiesValue_Login__Username(username, maxAge);<br />
&nbsp;&nbsp;writeCookiesValue_Login__Password(password, maxAge);<br />
&nbsp;}
<p>&nbsp;public String getUsername() {<br />
&nbsp;&nbsp;String value = cookieSource<br />
&nbsp;&nbsp;&nbsp;&nbsp;.readCookieValue(generateApplicationCookiesKey_Login__Username());<br />
&nbsp;&nbsp;if (isCookiesEncryption()) {<br />
&nbsp;&nbsp;&nbsp;value = decrypt(value);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return value;<br />
&nbsp;}
<p>&nbsp;public String getPassword() {<br />
&nbsp;&nbsp;String value = cookieSource<br />
&nbsp;&nbsp;&nbsp;&nbsp;.readCookieValue(generateApplicationCookiesKey_Login__Password());<br />
&nbsp;&nbsp;if (isCookiesEncryption()) {<br />
&nbsp;&nbsp;&nbsp;value = decrypt(value);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return value;<br />
&nbsp;}
<p>&nbsp;private void writeCookiesValue_Login__Username(String username, int maxAge) {<br />
&nbsp;&nbsp;String key = generateApplicationCookiesKey_Login__Username();<br />
&nbsp;&nbsp;String value = username;<br />
&nbsp;&nbsp;if (isCookiesEncryption()) {<br />
&nbsp;&nbsp;&nbsp;value = encrypt(username);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;cookieSource.writeCookieValue(key, value, maxAge);<br />
&nbsp;}
<p>&nbsp;private void writeCookiesValue_Login__Password(String password, int maxAge) {<br />
&nbsp;&nbsp;String key = generateApplicationCookiesKey_Login__Password();<br />
&nbsp;&nbsp;String value = password;<br />
&nbsp;&nbsp;if (isCookiesEncryption()) {<br />
&nbsp;&nbsp;&nbsp;value = encrypt(password);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;cookieSource.writeCookieValue(key, value, maxAge);<br />
&nbsp;}
<p>&nbsp;private String generateApplicationCookiesKey_Login__Username() {<br />
&nbsp;&nbsp;return generateApplicationCookiesKey(COOKIES_KEY_LOGIN_USERNAME);<br />
&nbsp;}
<p>&nbsp;private String generateApplicationCookiesKey_Login__Password() {<br />
&nbsp;&nbsp;return generateApplicationCookiesKey(COOKIES_KEY_LOGIN_PASSWORD);<br />
&nbsp;}
<p>&nbsp;private String generateApplicationCookiesKey(String key) {<br />
&nbsp;&nbsp;String contextPath = request.getContextPath();<br />
&nbsp;&nbsp;return absoluteURLBuilder.constructURL(contextPath + "/") + key;<br />
&nbsp;}
<p>&nbsp;public void setCookieSource(CookieSource cookieSource) {<br />
&nbsp;&nbsp;this.cookieSource = cookieSource;<br />
&nbsp;}
<p>&nbsp;public void setRequest(WebRequest request) {<br />
&nbsp;&nbsp;this.request = request;<br />
&nbsp;}
<p>&nbsp;public void setAbsoluteURLBuilder(AbsoluteURLBuilder absoluteURLBuilder) {<br />
&nbsp;&nbsp;this.absoluteURLBuilder = absoluteURLBuilder;<br />
&nbsp;}
<p>}
<p>hivemodule.xml配置
<p>&lt;?xml version="1.0"?&gt;<br />
&lt;module id="common.tapestry" version="1.0.0"&gt;<br />
&lt;service-point id="LoginCookiesManager" interface="common.tapestry.engine.LoginCookiesManager"&gt;<br />
&lt;invoke-factory&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;construct class="common.tapestry.engine.LoginCookiesManagerImpl" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-object property="cookieSource" value="infrastructure:cookieSource"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-service property="absoluteURLBuilder" service-id="tapestry.request.AbsoluteURLBuilder"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-service property="request" service-id="tapestry.globals.WebRequest"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;set-object property="applicationPropertySource" value="service:tapestry.props.ApplicationPropertySource"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/construct&gt;<br />
&nbsp;&nbsp;&lt;/invoke-factory&gt;&nbsp;<br />
&lt;/service-point&gt;
<p>&lt;contribution configuration-id="tapestry.Infrastructure"&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;property name="loginCookiesManager" object="service:common.tapestry.LoginCookiesManager"/&gt;<br />
&lt;/contribution&gt;<br />
&lt;/module&gt;
<p>使用
<p>在BasePage中获得该service
<p>public LoginCookiesManager getLoginCookiesManager() {<br />
&nbsp;&nbsp;LoginCookiesManager svc = (LoginCookiesManager) getRequestCycle().getInfrastructure().getProperty("loginCookiesManager");<br />
&nbsp;&nbsp;return svc;<br />
&nbsp;}<br />
&nbsp;<br />
/**<br />
&nbsp; * 判断用户是否已经登陆<br />
&nbsp; * <br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;private boolean isUserLoggedIn() {<br />
&nbsp;&nbsp;Object asmVisit = this.getRequestCycle().getInfrastructure().getApplicationStateManager().get(ASM_VISIT);
<p>&nbsp;&nbsp;if (!(asmVisit instanceof IVisit)) {<br />
&nbsp;&nbsp;&nbsp;throw new ApplicationRuntimeException(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"The visit class must implements " + IVisit.class);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;IVisit visit = (IVisit) asmVisit;<br />
&nbsp;&nbsp;if (visit == null || (visit != null &amp;&amp; !visit.isLoggedIn())) {<br />
&nbsp;&nbsp;&nbsp;IPage loginPage = getRequestCycle().getPage(PAGE_LOGIN);<br />
&nbsp;&nbsp;&nbsp;if (loginPage instanceof IConstructVisit) {<br />
&nbsp;&nbsp;&nbsp; //从cookies中找回用户名和密码<br />
&nbsp;&nbsp;&nbsp;&nbsp;String cookiesLoginUsername = getLoginCookiesManager().getUsername();<br />
&nbsp;&nbsp;&nbsp;&nbsp;String cookiesLoginPassword = getLoginCookiesManager().getPassword();<br />
&nbsp;&nbsp;&nbsp;&nbsp;IConstructVisit constructVisit = (IConstructVisit) loginPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;visit = constructVisit.doConstructVisit(this.getRequestCycle(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookiesLoginUsername, cookiesLoginPassword);<br />
&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw new ApplicationRuntimeException("The " + PAGE_LOGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " class must implements " + IConstructVisit.class);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if (visit == null)<br />
&nbsp;&nbsp;&nbsp;return Boolean.FALSE.booleanValue();<br />
&nbsp;&nbsp;return visit.isLoggedIn();<br />
&nbsp;}&nbsp;
<p><br />
Login类必须实现如下接口<br />
package common.tapestry;
<p>import org.apache.tapestry.IRequestCycle;
<p>public interface IConstructVisit {<br />
&nbsp;public IVisit doConstructVisit(IRequestCycle cycle, String username,String password);<br />
}
<p>&nbsp;<br />
系原创<br />
其他blog地址&nbsp; <a href="http://oxyc.spaces.live.com/">http://oxyc.spaces.live.com/</a><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; <a href="http://hiok.blog.sohu.com">http://hiok.blog.sohu.com</a></p>
<img src ="http://www.blogjava.net/bluesky/aggbug/188254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2008-03-24 15:26 <a href="http://www.blogjava.net/bluesky/archive/2008/03/24/188254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通讯名词解释</title><link>http://www.blogjava.net/bluesky/archive/2006/06/09/51613.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Fri, 09 Jun 2006 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/06/09/51613.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/51613.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/06/09/51613.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/51613.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/51613.html</trackback:ping><description><![CDATA[<p>&nbsp; WCDMA：指直接扩频的码分多址复用方式，一种适用于数字蜂窝移动通信的新技术。 <br />
&nbsp; CDMA2000：指多载波的码分多址复用方式，一种适用于数字蜂窝移动通信的新技术。 <br />
&nbsp; GSM： 指一种蜂窝数字移动通信系统，起源于泛欧标准，是目前移动通信应用最多的技术体制。 <br />
&nbsp; ATM： 异步传输模式，ATM交换机是未来宽带综合业务数据网中的核心设备 <br />
&nbsp; CATV：指以有线的形式传输、分配电视、调频信号及其它信息给用户的系统。 <br />
&nbsp; IP：一种互联网协议，是分组的非面向连接的数据传输协议 <br />
&nbsp; STP： 信令转换点，在信令网中用于转接信令 <br />
&nbsp; SDH： 是一套可进行同步数字传输、复用和交叉连接的标准化数字信号传输体制 <br />
&nbsp; DWDM： 密集波分复用，指在光纤的同一窗口中信道间隔较小的光波分复用。 <br />
&nbsp; 3G：指第三代移动网络，在用户高速移动状态时的峰值速率可达144Kbps，处于步行状态时峰值速率可达384 Kpbs，处于静止状态时峰值速率可达2 Mbps，不过有些初始网络建设仅支持64 Kbps。ITU通过其IMT-2000项目和一些关键标准组织如3GPP和3GPP2来协调3G标准。&nbsp; <br />
&nbsp; ASIC：指专用集成电路，专门设计以执行一个或多个特定功能的集成电路。&nbsp; <br />
&nbsp; ATM：指异步传输模式，基于固定大小分组数据传输的网络技术。分组长度短小固定，使ATM设备能在同一网络中传输视频、话音和数据，防止任何一种数据信号霸占整个线路。 <br />
&nbsp; 骨干网：指网络中承载高密度大流量信号的组成部分。交换网络的骨干网一般包括主干线路由器和交换机，数据网络的骨干网一般包括本地环间的主链路。&nbsp; <br />
&nbsp; 宽带：指描述一个系统覆盖很宽的频率范围的词汇，比话音信道宽很多，亦称「宽频」。 <br />
&nbsp; BWA：指宽带无线接入，一种宽带点对多点无线通信业务，运行的频带在2GHz到60GHz之间，因应「最后一里」话音、数据和视频业务等高速业务进行优化，作为连接用户和运营商本地交换机的可选择的另一种进网技术。&nbsp; <br />
&nbsp; CDMA：指码分多址，是2G移动通信技术标准之一，属于扩频技术标准，对所有的话音和数据位分配一个伪随机（PN）码，通过扰码方式在空中发送编码话音，并按照原始格式对话音进行译码。对每个发射机分配一个独特的相关码，可以使多个对话共享同一频谱。&nbsp; <br />
&nbsp; CDMA2000 1x：指以CDMAOne标准提供增强话音容量的技术规格，峰值数据速率最高可达2 Mbps，相关的规格包括1xRTT（无线传输技术），1xEVDO（纯数据版）和1xEVDV（话音数据版）。&nbsp; <br />
&nbsp; DWDM：指密集波分复用系统，能够使一根光纤承载多个数据信道（或波长）。商用DWDM系统目前已经达到100个信道。&nbsp; <br />
&nbsp; DSL：指数字用户线，在本地环路或用户线上传送数字数据的技术，亦称xDSL，如ADSL、HDSL、VDSL、MDSL和RDSL。&nbsp; <br />
&nbsp; GPRS：指通用分组无线业务，一种ETSI GSM第2+阶段的数据分组无线接入技术规格，其无线接口支持共享媒介分组接入，而不同于GSM的专用信道拨号接入。GPRS是建设在已有的GSM网络架构之上，需要添加新的网络元素来连接核心网和公众分组网络。&nbsp; <br />
&nbsp; GSM：指起源于欧洲的一种全球蜂窝移动电话通信系统，已经在170多个国家建设网络，使用TDMA无线传播技术。&nbsp; <br />
&nbsp; NGN：指下一代网络，以数据分组为基础的网络，能够提供多种业务，利用多种宽带传送技术，支持用户无限制地接入到不同服务提供商，能够支持普通的移动方式，不间断的向用户提供业务。&nbsp; <br />
&nbsp; PCS：指个人通信系统，为本集团基于PHS技术的无线本地接入系统，目前被中国电信和中国网通采用。&nbsp; <br />
&nbsp; PSTN：指公共交换电话网，沿用已久的国际电话系统，利用铜缆通过电路交换连接传送话音和数据。 路由器：指一种通信设备，可在网络中选择数据的传送路径。&nbsp; <br />
&nbsp; 软交换：指软件交换的缩略语，是一种应用协议接口，用于连接传统的PSTN网和IP网络，并对包括话音、传真、数据和视频的流量进行管理。&nbsp; <br />
&nbsp; TD-SCDMA：指时分同步码分多址，是中国倡导的第三代移动通信技术，支持话音和数据。&nbsp; <br />
&nbsp; WCDMA：指宽带CDMA，是3G数字移动网络的UMTS标准，采用CDMA技术，提供增强的话音容量，理论上数据速率的峰值可到2 Mbps。&nbsp; <br />
&nbsp; 无线本地接入系统：指提供无线接入到固网的设备，支持局部范围内的有限移动。无线本地接入系统的命名根据不同生产厂商或采用的技术不同而有不同命名。如本集团称自身的无线本地接入系统为PCS设备（基于PHS技术而开发），但其它供货商可能称类似设备为PHS或者PAS设备。此外，无线本地接入系统还可以基于其它技术而开发，如CDMA450 WLL和SCDMA。 <br />
</p>
<img src ="http://www.blogjava.net/bluesky/aggbug/51613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-06-09 09:42 <a href="http://www.blogjava.net/bluesky/archive/2006/06/09/51613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>猎人带狗追捕，兔子刚跑80步，猎狗去追兔子，已知猎狗跑2步的时间兔子跑3步，猎狗跑4步的距离与兔子跑7步的距离相等。那么猎狗跑多少步可以捕获这只兔子？</title><link>http://www.blogjava.net/bluesky/archive/2006/05/19/47036.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Fri, 19 May 2006 05:11:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/05/19/47036.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/47036.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/05/19/47036.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/47036.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/47036.html</trackback:ping><description><![CDATA[
		<p>猎人带狗追捕，兔子刚跑80步，猎狗去追兔子，已知猎狗跑2步的时间兔子跑3步，猎狗跑4步的距离与兔子跑7步的距离相等。那么猎狗跑多少步可以捕获这只兔子？ <br />距离80步<br />2a/x = 3b/y<br />-&gt; 2ay = 3bx<br />-&gt; x = 2ay/3b</p>
		<p>4*a = 7*b<br />-&gt;a = 7b/4</p>
		<p>带入x = 2ay/3b<br />x = 2*7by/12b<br />x = 7y/6</p>
		<p> </p>
		<p>b = 4a/7</p>
		<p>
				<br />(n*a - 80*b)/y = n*a/x</p>
		<p>n*a*x - 80*b*x = n*a*y<br />n*a*(x-y) = 80*b*x<br />n = 80*b*x<br />   ------------<br />    a*(x-y)<br />   =  80 *4a/7* 7y/6<br />   ----------------<br />   a* (7y/6 - y)</p>
		<p> = 80*4/7 *7y/6<br /> ---------------<br /> 1y/6<br /> = 80*4=320 </p>
		<p> </p>
		<p> </p>
		<p> </p>
<img src ="http://www.blogjava.net/bluesky/aggbug/47036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-05-19 13:11 <a href="http://www.blogjava.net/bluesky/archive/2006/05/19/47036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Maven的顺序</title><link>http://www.blogjava.net/bluesky/archive/2006/03/29/38008.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Wed, 29 Mar 2006 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/03/29/38008.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/38008.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/03/29/38008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/38008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/38008.html</trackback:ping><description><![CDATA[check-out from cvs first<br /><br />修改修改 project.properties<br /><br />1.create-domain<br />2.create-launcher<br />3.启动weblogic<br />4.deploy-datasource<br />5.deploy<br /><br />ok<br /><img src ="http://www.blogjava.net/bluesky/aggbug/38008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-03-29 11:44 <a href="http://www.blogjava.net/bluesky/archive/2006/03/29/38008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>3月15日工作总结 </title><link>http://www.blogjava.net/bluesky/archive/2006/03/16/35536.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Thu, 16 Mar 2006 01:04:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/03/16/35536.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/35536.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/03/16/35536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/35536.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/35536.html</trackback:ping><description><![CDATA[<p>encountered SQLException [weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool cp_baggage to allocate to applications, please increase the size of the pool and retry..]; nested exception is weblogic.jdbc.extensions.PoolLimitSQLException: weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool cp_baggage to allocate to applications, please increase the size of the pool and retry..{ exceptionClass=org.springframework.jdbc.UncategorizedSQLException} </p>
<p><br />服务-&gt;连接缓冲池-&gt;最大容量-&gt;5<br /><br /><br />问一下, after checkout a new project from cvs how to use Maven to deploy the web ear to the weblogic? what is the first,second&nbsp; </p>
<p>copy build.properties.sample to build.properties<br />then modify it to fit your environment. </p>
<p>2. install weblogic plugin for weblogic (if not installed ) by <br />maven plugin:download -DartifactId=maven-weblogic-plugin -DgroupId=footmark-plugins -Dversion=0.1.1 </p>
<p>3. invoking maven weblogic:prepare-domain to prepare weblogic runtime&nbsp; </p>
<p>4.invoking maven:create-launcher to create weblogic launcher which can be used to debug or run weblogic application server&nbsp; </p>
<p>that's all&nbsp; </p>
<p>catch me immediately if you have further more questions. </p>
<p>ok,i see </p><img src ="http://www.blogjava.net/bluesky/aggbug/35536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-03-16 09:04 <a href="http://www.blogjava.net/bluesky/archive/2006/03/16/35536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]Java性能优化技巧集锦</title><link>http://www.blogjava.net/bluesky/archive/2006/02/15/30812.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Wed, 15 Feb 2006 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/02/15/30812.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/30812.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/02/15/30812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/30812.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/30812.html</trackback:ping><description><![CDATA[<P>&nbsp;</P>
<P><BR>===================================<BR>提纲:<BR>===================================<BR>一、通用篇<BR>　　1.1 不用new关键词创建类的实例<BR>　　1.2 使用非阻塞I/O<BR>　　1.3 慎用异常<BR>　　1.4 不要重复初始化变量<BR>　　1.5 尽量指定类的final修饰符<BR>　　1.6 尽量使用局部变量<BR>　　1.7 乘法和除法<BR>二、J2EE篇<BR>　　2.1 使用缓冲标记<BR>　　2.2 始终通过会话Bean访问实体Bean<BR>　　2.3 选择合适的引用机制<BR>　　2.4 在部署描述器中设置只读属性<BR>　　2.5 缓冲对EJB Home的访问<BR>　　2.6 为EJB实现本地接口<BR>　　2.7 生成主键<BR>　　2.8 及时清除不再需要的会话<BR>　　2.9 在JSP页面中关闭无用的会话<BR>　　2.10 Servlet与内存使用<BR>　　2.11 HTTP Keep-Alive<BR>　　2.12 JDBC与Unicode<BR>　　2.13 JDBC与I/O<BR>　　1.14 内存数据库<BR>三、GUI篇<BR>　　3.1 用JAR压缩类文件<BR>　　3.2 提示Applet装入进程<BR>　　3.3 在画出图形之前预先装入它<BR>　　3.4 覆盖update方法<BR>　　3.5 延迟重画操作<BR>　　3.6 使用双缓冲区<BR>　　3.7 使用BufferedImage<BR>　　3.8 使用VolatileImage<BR>　　3.9 使用Window Blitting<BR>四、补充资料<BR>===================================</P>
<P>正文:<BR>===================================</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>一、通用篇</P>
<P><BR>"通用篇"讨论的问题适合于大多数Java应用。</P>
<P><BR>1.1 不用new关键词创建类的实例</P>
<P><BR>用new关键词创建类的实例时，构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口，我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。</P>
<P><BR>在使用设计模式（Design Pattern）的场合，如果用Factory模式创建对象，则改用clone()方法创建新的对象实例非常简单。例如，下面是Factory模式的一个典型实现：</P>
<P><BR>public static Credit getNewCredit() {return new Credit();} <BR>&nbsp;</P>
<P><BR>改进后的代码使用clone()方法，如下所示：</P>
<P><BR>private static Credit BaseCredit = new Credit();public static Credit getNewCredit() {return (Credit) BaseCredit.clone();} <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>上面的思路对于数组处理同样很有用。</P>
<P><BR>1.2 使用非阻塞I/O</P>
<P><BR>版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞，一些应用采用了创建大量线程的办法（在较好的情况下，会使用一个缓冲池）。这种技术可以在许多必须支持并发I/O流的应用中见到，如Web服务器、报价和拍卖应用等。然而，创建Java线程需要相当可观的开销。</P>
<P><BR>JDK 1.4引入了非阻塞的I/O库（java.nio）。如果应用要求使用版本较早的JDK，在这里有一个支持非阻塞I/O的软件包。</P>
<P><BR>请参见Sun中国网站的《调整Java的I/O性能》。</P>
<P><BR>1.3 慎用异常</P>
<P><BR>异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地（Native）方法，fillInStackTrace()方法检查堆栈，收集调用跟踪信息。只要有异常被抛出，VM就必须调整调用堆栈，因为在处理过程中创建了一个新的对象。</P>
<P><BR>异常只能用于错误处理，不应该用来控制程序流程。</P>
<P><BR>1.4 不要重复初始化变量</P>
<P><BR>默认情况下，调用类的构造函数时， Java会把变量初始化成确定的值：所有的对象被设置成null，整数变量（byte、short、int、long）设置成0，float和double变量设置成0.0，逻辑值设置成false。当一个类从另一个类派生时，这一点尤其应该注意，因为用new关键词创建一个对象时，构造函数链中的所有构造函数都会被自动调用。</P>
<P><BR>1.5 尽量指定类的final修饰符</P>
<P><BR>带有final修饰符的类是不可派生的。在Java核心API中，有许多应用final的例子，例如java.lang.String。为String类指定final防止了人们覆盖length()方法。</P>
<P><BR>另外，如果指定一个类为final，则该类所有的方法都是final。Java编译器会寻找机会内联（inline）所有的final方法（这和具体的编译器实现有关）。此举能够使性能平均提高50%。</P>
<P><BR>1.6 尽量使用局部变量</P>
<P><BR>调用方法时传递的参数以及在调用中创建的临时变量都保存在栈（Stack）中，速度较快。其他变量，如静态变量、实例变量等，都在堆（Heap）中创建，速度较慢。另外，依赖于具体的编译器/JVM，局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。</P>
<P><BR>1.7 乘法和除法</P>
<P><BR>考虑下面的代码：</P>
<P><BR>for (val = 0; val &lt; 100000; val +=5) { alterX = val * 8; myResult = val * 2; } <BR>&nbsp;</P>
<P><BR>用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码：</P>
<P><BR>for (val = 0; val &lt; 100000; val += 5) { alterX = val &lt;&lt; 3; myResult = val &lt;&lt; 1; } <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>修改后的代码不再做乘以8的操作，而是改用等价的左移3位操作，每左移1位相当于乘以2。相应地，右移1位操作相当于除以2。值得一提的是，虽然移位操作速度快，但可能使代码比较难于理解，所以最好加上一些注释。</P>
<P><BR>二、J2EE篇</P>
<P><BR>前面介绍的改善性能技巧适合于大多数Java应用，接下来要讨论的问题适合于使用JSP、EJB或JDBC的应用。</P>
<P><BR>2.1 使用缓冲标记</P>
<P><BR>一些应用服务器加入了面向JSP的缓冲标记功能。例如，BEA的WebLogic Server从6.0版本开始支持这个功能，Open Symphony工程也同样支持这个功能。JSP缓冲标记既能够缓冲页面片断，也能够缓冲整个页面。当JSP页面执行时，如果目标片断已经在缓冲之中，则生成该片断的代码就不用再执行。页面级缓冲捕获对指定URL的请求，并缓冲整个结果页面。对于购物篮、目录以及门户网站的主页来说，这个功能极其有用。对于这类应用，页面级缓冲能够保存页面执行的结果，供后继请求使用。</P>
<P><BR>对于代码逻辑复杂的页面，利用缓冲标记提高性能的效果比较明显；反之，效果可能略逊一筹。</P>
<P><BR>请参见《用缓冲技术提高JSP应用的性能和稳定性》。</P>
<P><BR>2.2 始终通过会话Bean访问实体Bean</P>
<P><BR>直接访问实体Bean不利于性能。当客户程序远程访问实体Bean时，每一个get方法都是一个远程调用。访问实体Bean的会话Bean是本地的，能够把所有数据组织成一个结构，然后返回它的值。</P>
<P><BR>用会话Bean封装对实体Bean的访问能够改进事务管理，因为会话Bean只有在到达事务边界时才会提交。每一个对get方法的直接调用产生一个事务，容器将在每一个实体Bean的事务之后执行一个"装入-读取"操作。</P>
<P><BR>一些时候，使用实体Bean会导致程序性能不佳。如果实体Bean的唯一用途就是提取和更新数据，改成在会话Bean之内利用JDBC访问数据库可以得到更好的性能。</P>
<P><BR>2.3 选择合适的引用机制</P>
<P><BR>在典型的JSP应用系统中，页头、页脚部分往往被抽取出来，然后根据需要引入页头、页脚。当前，在JSP页面中引入外部资源的方法主要有两种：include指令，以及include动作。</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>include指令：例如。该指令在编译时引入指定的资源。在编译之前，带有include指令的页面和指定的资源被合并成一个文件。被引用的外部资源在编译时就确定，比运行时才确定资源更高效。</P>
<P>include动作：例如。该动作引入指定页面执行后生成的结果。由于它在运行时完成，因此对输出结果的控制更加灵活。但时，只有当被引用的内容频繁地改变时，或者在对主页面的请求没有出现之前，被引用的页面无法确定时，使用include动作才合算。</P>
<P>&nbsp;</P>
<P><BR>2.4 在部署描述器中设置只读属性</P>
<P><BR>实体Bean的部署描述器允许把所有get方法设置成"只读"。当某个事务单元的工作只包含执行读取操作的方法时，设置只读属性有利于提高性能，因为容器不必再执行存储操作。</P>
<P><BR>2.5 缓冲对EJB Home的访问</P>
<P><BR>EJB Home接口通过JNDI名称查找获得。这个操作需要相当可观的开销。JNDI查找最好放入Servlet的init()方法里面。如果应用中多处频繁地出现EJB访问，最好创建一个EJBHomeCache类。EJBHomeCache类一般应该作为singleton实现。</P>
<P><BR>2.6 为EJB实现本地接口</P>
<P><BR>本地接口是EJB 2.0规范新增的内容，它使得Bean能够避免远程调用的开销。请考虑下面的代码。</P>
<P><BR>PayBeanHome home = (PayBeanHome)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javax.rmi.PortableRemoteObject.narrow&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ctx.lookup ("PayBeanHome"), PayBeanHome.class); PayBean bean = (PayBean)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javax.rmi.PortableRemoteObject.narrow&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (home.create(), PayBean.class); <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>第一个语句表示我们要寻找Bean的Home接口。这个查找通过JNDI进行，它是一个RMI调用。然后，我们定位远程对象，返回代理引用，这也是一个RMI调用。第二个语句示范了如何创建一个实例，涉及了创建IIOP请求并在网络上传输请求的stub程序，它也是一个RMI调用。</P>
<P><BR>要实现本地接口，我们必须作如下修改：</P>
<P><BR>&nbsp;</P>
<P>&nbsp;</P>
<P>方法不能再抛出java.rmi.RemoteException异常，包括从RemoteException派生的异常，比如TransactionRequiredException、TransactionRolledBackException和NoSuchObjectException。EJB提供了等价的本地异常，如TransactionRequiredLocalException、TransactionRolledBackLocalException和NoSuchObjectLocalException。</P>
<P>所有数据和返回值都通过引用的方式传递，而不是传递值。</P>
<P>本地接口必须在EJB部署的机器上使用。简而言之，客户程序和提供服务的组件必须在同一个JVM上运行。</P>
<P>如果Bean实现了本地接口，则其引用不可串行化。</P>
<P>&nbsp;</P>
<P><BR>请参见《用本地引用提高EJB访问效率》。</P>
<P><BR>2.7 生成主键</P>
<P><BR>在EJB之内生成主键有许多途径，下面分析了几种常见的办法以及它们的特点。</P>
<P><BR>利用数据库内建的标识机制（SQL Server的IDENTITY或Oracle的SEQUENCE）。这种方法的缺点是EJB可移植性差。</P>
<P><BR>由实体Bean自己计算主键值（比如做增量操作）。它的缺点是要求事务可串行化，而且速度也较慢。</P>
<P><BR>利用NTP之类的时钟服务。这要求有面向特定平台的本地代码，从而把Bean固定到了特定的OS之上。另外，它还导致了这样一种可能，即在多CPU的服务器上，同一个毫秒之内生成了两个主键。</P>
<P><BR>借鉴Microsoft的思路，在Bean中创建一个GUID。然而，如果不求助于JNI，Java不能确定网卡的MAC地址；如果使用JNI，则程序就要依赖于特定的OS。</P>
<P><BR>还有其他几种办法，但这些办法同样都有各自的局限。似乎只有一个答案比较理想：结合运用RMI和JNDI。先通过RMI注册把RMI远程对象绑定到JNDI树。客户程序通过JNDI进行查找。下面是一个例子：</P>
<P><BR>public class keyGenerator extends UnicastRemoteObject implements Remote { private static long KeyValue = System.currentTimeMillis(); public static synchronized long getKey() throws RemoteException { return KeyValue++; } <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>2.8 及时清除不再需要的会话</P>
<P><BR>为了清除不再活动的会话，许多应用服务器都有默认的会话超时时间，一般为30分钟。当应用服务器需要保存更多会话时，如果内存容量不足，操作系统会把部分内存数据转移到磁盘，应用服务器也可能根据"最近最频繁使用"（Most Recently Used）算法把部分不活跃的会话转储到磁盘，甚至可能抛出"内存不足"异常。在大规模系统中，串行化会话的代价是很昂贵的。当会话不再需要时，应当及时调用HttpSession.invalidate()方法清除会话。HttpSession.invalidate()方法通常可以在应用的退出页面调用。</P>
<P><BR>2.9 在JSP页面中关闭无用的会话</P>
<P><BR>对于那些无需跟踪会话状态的页面，关闭自动创建的会话可以节省一些资源。使用如下page指令：</P>
<P><BR>&nbsp;<BR>&nbsp;</P>
<P>&nbsp;</P>
<P><BR>2.10 Servlet与内存使用</P>
<P><BR>许多开发者随意地把大量信息保存到用户会话之中。一些时候，保存在会话中的对象没有及时地被垃圾回收机制回收。从性能上看，典型的症状是用户感到系统周期性地变慢，却又不能把原因归于任何一个具体的组件。如果监视JVM的堆空间，它的表现是内存占用不正常地大起大落。</P>
<P><BR>解决这类内存问题主要有二种办法。第一种办法是，在所有作用范围为会话的Bean中实现HttpSessionBindingListener接口。这样，只要实现valueUnbound()方法，就可以显式地释放Bean使用的资源。</P>
<P><BR>另外一种办法就是尽快地把会话作废。大多数应用服务器都有设置会话作废间隔时间的选项。另外，也可以用编程的方式调用会话的setMaxInactiveInterval()方法，该方法用来设定在作废会话之前，Servlet容器允许的客户请求的最大间隔时间，以秒计。</P>
<P><BR>2.11 HTTP Keep-Alive</P>
<P><BR>Keep-Alive功能使客户端到服务器端的连接持续有效，当出现对服务器的后继请求时，Keep-Alive功能避免了建立或者重新建立连接。市场上的大部分Web服务器，包括iPlanet、IIS和Apache，都支持HTTP Keep-Alive。对于提供静态内容的网站来说，这个功能通常很有用。但是，对于负担较重的网站来说，这里存在另外一个问题：虽然为客户保留打开的连接有一定的好处，但它同样影响了性能，因为在处理暂停期间，本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时，Keep-Alive功能对资源利用的影响尤其突出。</P>
<P><BR>2.12 JDBC与Unicode</P>
<P><BR>想必你已经了解一些使用JDBC时提高性能的措施，比如利用连接池、正确地选择存储过程和直接执行的SQL、从结果集删除多余的列、预先编译SQL语句，等等。</P>
<P><BR>除了这些显而易见的选择之外，另一个提高性能的好选择可能就是把所有的字符数据都保存为Unicode（代码页13488）。Java以Unicode形式处理所有数据，因此，数据库驱动程序不必再执行转换过程。但应该记住：如果采用这种方式，数据库会变得更大，因为每个Unicode字符需要2个字节存储空间。另外，如果有其他非Unicode的程序访问数据库，性能问题仍旧会出现，因为这时数据库驱动程序仍旧必须执行转换过程。</P>
<P><BR>2.13 JDBC与I/O</P>
<P><BR>如果应用程序需要访问一个规模很大的数据集，则应当考虑使用块提取方式。默认情况下，JDBC每次提取32行数据。举例来说，假设我们要遍历一个5000行的记录集，JDBC必须调用数据库157次才能提取到全部数据。如果把块大小改成512，则调用数据库的次数将减少到10次。</P>
<P><BR>在一些情形下这种技术无效。例如，如果使用可滚动的记录集，或者在查询中指定了FOR UPDATE，则块操作方式不再有效。</P>
<P><BR>1.14 内存数据库</P>
<P><BR>许多应用需要以用户为单位在会话对象中保存相当数量的数据，典型的应用如购物篮和目录等。由于这类数据可以按照行/列的形式组织，因此，许多应用创建了庞大的Vector或HashMap。在会话中保存这类数据极大地限制了应用的可伸缩性，因为服务器拥有的内存至少必须达到每个会话占用的内存数量乘以并发用户最大数量，它不仅使服务器价格昂贵，而且垃圾收集的时间间隔也可能延长到难以忍受的程度。</P>
<P><BR>一些人把购物篮/目录功能转移到数据库层，在一定程度上提高了可伸缩性。然而，把这部分功能放到数据库层也存在问题，且问题的根源与大多数关系数据库系统的体系结构有关。对于关系数据库来说，运行时的重要原则之一是确保所有的写入操作稳定、可靠，因而，所有的性能问题都与物理上把数据写入磁盘的能力有关。关系数据库力图减少I/O操作，特别是对于读操作，但实现该目标的主要途径只是执行一套实现缓冲机制的复杂算法，而这正是数据库层第一号性能瓶颈通常总是CPU的主要原因。</P>
<P><BR>一种替代传统关系数据库的方案是，使用在内存中运行的数据库（In-memory Database），例如TimesTen。内存数据库的出发点是允许数据临时地写入，但这些数据不必永久地保存到磁盘上，所有的操作都在内存中进行。这样，内存数据库不需要复杂的算法来减少I/O操作，而且可以采用比较简单的加锁机制，因而速度很快。</P>
<P><BR>三、GUI篇</P>
<P><BR>这一部分介绍的内容适合于图形用户界面的应用（Applet和普通应用），要用到AWT或Swing。</P>
<P><BR>3.1 用JAR压缩类文件</P>
<P><BR>Java档案文件（JAR文件）是根据JavaBean标准压缩的文件，是发布JavaBean组件的主要方式和推荐方式。JAR档案有助于减少文件体积，缩短下载时间。例如，它有助于Applet提高启动速度。一个JAR文件可以包含一个或者多个相关的Bean以及支持文件，比如图形、声音、HTML和其他资源。</P>
<P><BR>要在HTML/JSP文件中指定JAR文件，只需在Applet标记中加入ARCHIVE = "name.jar"声明。</P>
<P><BR>请参见《使用档案文件提高 applet 的加载速度》。</P>
<P><BR>3.2 提示Applet装入进程</P>
<P><BR>你是否看到过使用Applet的网站，注意到在应该运行Applet的地方出现了一个占位符？当Applet的下载时间较长时，会发生什么事情？最大的可能就是用户掉头离去。在这种情况下，显示一个Applet正在下载的信息无疑有助于鼓励用户继续等待。</P>
<P><BR>下面我们来看看一种具体的实现方法。首先创建一个很小的Applet，该Applet负责在后台下载正式的Applet：</P>
<P>&nbsp;</P>
<P>import java.applet.Applet;import java.applet.AppletStub;import java.awt.Label;import java.awt.Graphics;import java.awt.GridLayout; public class PreLoader extends Applet implements Runnable, AppletStub {&nbsp;&nbsp;&nbsp; String largeAppletName;&nbsp;&nbsp;&nbsp; Label label;&nbsp;&nbsp;&nbsp; public void init() {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 要求装载的正式Applet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; largeAppletName = getParameter("applet");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // "请稍等"提示信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label = new Label("请稍等..." + largeAppletName);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(label);&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp; public void run(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 获得待装载Applet的类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class largeAppletClass = Class.forName(largeAppletName);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 创建待装载Applet的实例&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Applet largeApplet = (Applet)largeAppletClass.newInstance();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置该Applet的Stub程序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; largeApplet.setStub(this);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 取消"请稍等"信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; remove(label);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置布局&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setLayout(new GridLayout(1, 0));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(largeApplet);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 显示正式的Applet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; largeApplet.init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; largeApplet.start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception ex) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 显示错误信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label.setText("不能装入指定的Applet");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 刷新屏幕&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validate();&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; public void appletResize(int width, int height) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 把appletResize调用从stub程序传递到Applet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resize(width, height);&nbsp;&nbsp; }}<BR>&nbsp;</P>
<P>&nbsp;</P>
<P>编译后的代码小于2K，下载速度很快。代码中有几个地方值得注意。首先，PreLoader实现了AppletStub接口。一般地，Applet从调用者判断自己的codebase。在本例中，我们必须调用setStub()告诉Applet到哪里提取这个信息。另一个值得注意的地方是，AppletStub接口包含许多和Applet类一样的方法，但appletResize()方法除外。这里我们把对appletResize()方法的调用传递给了resize()方法。</P>
<P><BR>3.3 在画出图形之前预先装入它</P>
<P><BR>ImageObserver接口可用来接收图形装入的提示信息。ImageObserver接口只有一个方法imageUpdate()，能够用一次repaint()操作在屏幕上画出图形。下面提供了一个例子。</P>
<P>&nbsp;</P>
<P>public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((flags &amp; ALLBITS) !=0 {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repaint();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (flags &amp; (ERROR |ABORT )) != 0) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error = true;&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; repaint();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (flags &amp; (ALLBITS | ERROR| ABORT)) == 0;} <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>当图形信息可用时，imageUpdate()方法被调用。如果需要进一步更新，该方法返回true；如果所需信息已经得到，该方法返回false。</P>
<P><BR>3.4 覆盖update方法</P>
<P><BR>update()方法的默认动作是清除屏幕，然后调用paint()方法。如果使用默认的update()方法，频繁使用图形的应用可能出现显示闪烁现象。要避免在paint()调用之前的屏幕清除操作，只需按照如下方式覆盖update()方法：</P>
<P><BR>public void update(Graphics g) {&nbsp;&nbsp;&nbsp;&nbsp; paint(g);} <BR>&nbsp;</P>
<P><BR>更理想的方案是：覆盖update()，只重画屏幕上发生变化的区域，如下所示：</P>
<P><BR>public void update(Graphics g) {&nbsp;&nbsp;&nbsp;&nbsp; g.clipRect(x, y, w, h);&nbsp;&nbsp;&nbsp;&nbsp; paint(g);} <BR>&nbsp;</P>
<P><BR>3.5 延迟重画操作</P>
<P><BR>对于图形用户界面的应用来说，性能低下的主要原因往往可以归结为重画屏幕的效率低下。当用户改变窗口大小或者滚动一个窗口时，这一点通常可以很明显地观察到。改变窗口大小或者滚动屏幕之类的操作导致重画屏幕事件大量地、快速地生成，甚至超过了相关代码的执行速度。对付这个问题最好的办法是忽略所有"迟到"的事件。</P>
<P><BR>建议在这里引入一个数毫秒的时差，即如果我们立即接收到了另一个重画事件，可以停止处理当前事件转而处理最后一个收到的重画事件；否则，我们继续进行当前的重画过程。</P>
<P><BR>如果事件要启动一项耗时的工作，分离出一个工作线程是一种较好的处理方式；否则，一些部件可能被"冻结"，因为每次只能处理一个事件。下面提供了一个事件处理的简单例子，但经过扩展后它可以用来控制工作线程。</P>
<P><BR>&nbsp;</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">public&nbsp;static&nbsp;void&nbsp;runOnce(String&nbsp;id</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;final&nbsp;long&nbsp;milliseconds)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;synchronized(e_queue)&nbsp;{&nbsp;//&nbsp;e_queue:&nbsp;所有事件的集合&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!e_queue.containsKey(id))&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><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e_queue.put(token</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;LastOne())</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;LastOne&nbsp;lastOne&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(LastOne)&nbsp;e_queue.get(token)</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;long&nbsp;time&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;System.currentTimeMillis()</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;//&nbsp;获得当前时间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;lastOne.time&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;time</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;(new&nbsp;Thread()&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;run()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(milliseconds&nbsp;&gt;&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(milliseconds)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&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><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&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><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;synchronized(lastOne.running)&nbsp;{&nbsp;//&nbsp;等待上一事件结束&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(lastOne.time&nbsp;!</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;time)&nbsp;//&nbsp;只处理最后一个事件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&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><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;).start()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Hashtable&nbsp;e_queue&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;Hashtable()</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;class&nbsp;LastOne&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;long&nbsp;time</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Object&nbsp;running&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;Object()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</SPAN></DIV>
<P><BR>&nbsp;</P>
<P>&nbsp;</P>
<P>3.6 使用双缓冲区</P>
<P><BR>在屏幕之外的缓冲区绘图，完成后立即把整个图形显示出来。由于有两个缓冲区，所以程序可以来回切换。这样，我们可以用一个低优先级的线程负责画图，使得程序能够利用空闲的CPU时间执行其他任务。下面的伪代码片断示范了这种技术。</P>
<P><BR>Graphics myGraphics;Image myOffscreenImage = createImage(size().width, size().height);Graphics offscreenGraphics = myOffscreenImage.getGraphics(); offscreenGraphics.drawImage(img, 50, 50, this);myGraphics.drawImage(myOffscreenImage, 0, 0, this); <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>3.7 使用BufferedImage</P>
<P><BR>Java JDK 1.2使用了一个软显示设备，使得文本在不同的平台上看起来相似。为实现这个功能，Java必须直接处理构成文字的像素。由于这种技术要在内存中大量地进行位复制操作，早期的JDK在使用这种技术时性能不佳。为解决这个问题而提出的Java标准实现了一种新的图形类型，即BufferedImage。</P>
<P><BR>BufferedImage子类描述的图形带有一个可访问的图形数据缓冲区。一个BufferedImage包含一个ColorModel和一组光栅图形数据。这个类一般使用RGB（红、绿、蓝）颜色模型，但也可以处理灰度级图形。它的构造函数很简单，如下所示：</P>
<P><BR>public BufferedImage (int width, int height, int imageType) <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>ImageType允许我们指定要缓冲的是什么类型的图形，比如5-位RGB、8-位RGB、灰度级等。</P>
<P><BR>3.8 使用VolatileImage</P>
<P><BR>许多硬件平台和它们的操作系统都提供基本的硬件加速支持。例如，硬件加速一般提供矩形填充功能，和利用CPU完成同一任务相比，硬件加速的效率更高。由于硬件加速分离了一部分工作，允许多个工作流并发进行，从而缓解了对CPU和系统总线的压力，使得应用能够运行得更快。利用VolatileImage可以创建硬件加速的图形以及管理图形的内容。由于它直接利用低层平台的能力，性能的改善程度主要取决于系统使用的图形适配器。VolatileImage的内容随时可能丢失，也即它是"不稳定的（volatile）"。因此，在使用图形之前，最好检查一下它的内容是否丢失。VolatileImage有两个能够检查内容是否丢失的方法：</P>
<P><BR>public abstract int validate(GraphicsConfiguration gc);public abstract Boolean contentsLost(); <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>每次从VolatileImage对象复制内容或者写入VolatileImage时，应该调用validate()方法。contentsLost()方法告诉我们，自从最后一次validate()调用之后，图形的内容是否丢失。</P>
<P><BR>虽然VolatileImage是一个抽象类，但不要从它这里派生子类。VolatileImage应该通过Component.createVolatileImage()或者GraphicsConfiguration.createCompatibleVolatileImage()方法创建。</P>
<P><BR>3.9 使用Window Blitting</P>
<P><BR>进行滚动操作时，所有可见的内容一般都要重画，从而导致大量不必要的重画工作。许多操作系统的图形子系统，包括WIN32 GDI、MacOS和X/Windows，都支持Window Blitting技术。Window Blitting技术直接在屏幕缓冲区中把图形移到新的位置，只重画新出现的区域。要在Swing应用中使用Window Blitting技术，设置方法如下：</P>
<P><BR>setScrollMode(int mode); <BR>&nbsp;</P>
<P>&nbsp;</P>
<P>在大多数应用中，使用这种技术能够提高滚动速度。只有在一种情形下，Window Blitting会导致性能降低，即应用在后台进行滚动操作。如果是用户在滚动一个应用，那么它总是在前台，无需担心任何负面影响。</P>
<P>&nbsp;</P><img src ="http://www.blogjava.net/bluesky/aggbug/30812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-02-15 15:08 <a href="http://www.blogjava.net/bluesky/archive/2006/02/15/30812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[struts]MVC</title><link>http://www.blogjava.net/bluesky/archive/2006/02/15/30783.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Wed, 15 Feb 2006 04:22:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/02/15/30783.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/30783.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/02/15/30783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/30783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/30783.html</trackback:ping><description><![CDATA[<A title="Photo Sharing" href="http://www.flickr.com/photos/chinawangliang/99581845/"></A><IMG src="http://static.flickr.com/26/99581845_d5513b1cbb.jpg">&nbsp;<BR>Struts is an open-source framework for building Model 2 web applications. 
<P>MVC框架</P>
<P>A controller servlet that dispatches requests to appropriate action classes<BR>provided by the application developer.</P>
<P>All requests are dispatched through a single controller servlet that is part of the<BR>framework.</P>
<P>单独的控制器把所有的请求集中分发</P>
<P>This controller provides numerous application-wide services, such as<BR>database connection pooling and automatic request dispatching. The controller<BR>creates action classes, which are built by the developer to perform the work of the<BR>application. These action classes extend the Struts Action class. This is a perfect<BR>example of a reusable framework part—the controller is designed to create<BR>Action subclasses to perform work. This aspect of Struts is based on the Command<BR>design pattern, which allows for parameterizing activities.</P>
<P>控制器提供了众多的应用程序范围的服务,例如数据库连接池,请求自动分发.控制器创建开发者提供解决业务问题的action业务类<BR>这些action类包括Struts Action class.控制器可以重复创建Action类是复用框架</P>
<P>The action instances create model beans that perform domain-specific activities.<BR>Examples of these activities include executing business logic, connecting to<BR>databases, and calling other bean methods. The model beans encapsulate the real<BR>work of the application, just as in Model 2. Once the action instance has utilized<BR>the model beans to perform work, it forwards the models that contribute to the<BR>display via the controller to a view component, generally a JSP (although other<BR>view options are possible; see the discussion on Velocity in chapter 9). The view<BR>extracts the model beans and presents the visual results to the user. As you can<BR>see, this is the same general information flow described in Model 2. Struts provides<BR>a great deal of the infrastructure to make it easy to accommodate this information<BR>flow.</P>
<P>Struts handles other details of application development as well. The framework<BR>includes numerous custom JSP tags to help you construct the view. It also<BR>provides classes that aid in internationalization, database connection pooling, and<BR>flexible resource mapping.</P>
<P>Struts is a fairly lightweight framework whose primary job is to facilitate building<BR>web applications using Model 2. I estimate that Struts saves from 35 to 40 percent<BR>of the typical amount of effort to build a Model 2 application. One of Struts’<BR>strengths is its cohesiveness—it doesn’t supply services outside those needed for<BR>building Model 2 applications. Other frameworks are much more extensive; the<BR>Turbine framework is one of them.<BR><BR>摘自&lt;ARTOF<BR>JAVA WEB<BR>DEVELOPMENT&gt;</P><img src ="http://www.blogjava.net/bluesky/aggbug/30783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-02-15 12:22 <a href="http://www.blogjava.net/bluesky/archive/2006/02/15/30783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]JDK5.0的11个主要新特征</title><link>http://www.blogjava.net/bluesky/archive/2006/02/10/30099.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Fri, 10 Feb 2006 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/02/10/30099.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/30099.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/02/10/30099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/30099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/30099.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 泛型(Generic)&nbsp;1.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 说明&nbsp;增强了java的类型安全，可以在编译期间对容器内的对象进行类型检查，在运行期不必进行类...&nbsp;&nbsp;<a href='http://www.blogjava.net/bluesky/archive/2006/02/10/30099.html'>阅读全文</a><img src ="http://www.blogjava.net/bluesky/aggbug/30099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-02-10 10:07 <a href="http://www.blogjava.net/bluesky/archive/2006/02/10/30099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>open source database (RDBMS)</title><link>http://www.blogjava.net/bluesky/archive/2006/02/09/30001.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Thu, 09 Feb 2006 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/02/09/30001.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/30001.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/02/09/30001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/30001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/30001.html</trackback:ping><description><![CDATA[<font size="4">Ingres<br /></font>Ingres<span><sup><font color="#000000">&reg;</font></sup></span> is a mature, high-performance relational database solution. It offers scalability, integration and flexibility to leverage information resources across a wide range of platforms, including Linux, UNIX, Windows and OpenVMS. Reliable and cost effective, it supports mission-critical applications in small to medium-size businesses and high-volume deployments in large scale enterprises.<span> </span><br /><a href="http://opensource.ca.com/projects/ingres/">http://opensource.ca.com/projects/ingres/</a><br /><br /><br /><font size="4">EnterpriseDB<br /></font><br />
<p class="intro">EnterpriseDB is an enterprise-class relational database management system (RDBMS) that is built on PostgreSQL, the world's most advanced open source database. EnterpriseDB is <a href="http://www.enterprisedb.com/solutions/compatible.do">compatible</a> with most Oracle applications, <a href="http://www.enterprisedb.com/solutions/reliable.do">reliable</a> and <a href="http://www.enterprisedb.com/solutions/scalable.do">scalable</a> enough for high-volume, mission-critical enterprise use, and surprisingly <a href="http://www.enterprisedb.com/solutions/affordable.do">affordable</a>.<br /><br /><a href="http://www.enterprisedb.com/products/index.do">http://www.enterprisedb.com/products/index.do</a><br /><br /><font size="4">Mysql</font><br /><br />The World's Most Popular Open Source Database<br /><a href="http://dev.mysql.com/">http://dev.mysql.com/</a><br /><br /><font size="4">Postgresql</font><br />The world's most advanced open source database. <br /><br /><a href="http://www.postgresql.org/">http://www.postgresql.org/</a></p><img src ="http://www.blogjava.net/bluesky/aggbug/30001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-02-09 10:01 <a href="http://www.blogjava.net/bluesky/archive/2006/02/09/30001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web application development frameworks: request-based and component-based.</title><link>http://www.blogjava.net/bluesky/archive/2006/01/11/27539.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Wed, 11 Jan 2006 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/01/11/27539.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/27539.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/01/11/27539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/27539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/27539.html</trackback:ping><description><![CDATA[<P>There are currently two major schools of web application development frameworks: request-based and component-based.<BR><BR><BR></P>
<P>Request-based frameworks are very close to the original CGI specification. They use controllers and actions that directly handle incoming requests. Each request is fundamentally stateless. With the introduction of server-side sessions, a certain degree of statefulness has been achieved. The different frameworks basically differentiate themselves by the way they map logic to URLs and how data is structured and provided to the developer.<BR></P>
<P><BR>Component-based frameworks abstract the developer away from the internals of the request handling and encapsulate the logic into reusable components, often independent from the web medium. The state is automatically handled by the framework, based on the data that is present in each component instance. Together with some form of event handling, this development model is very similar to the features offered by desktop GUI toolkits. The different frameworks basically differentiate themselves by the provided component API and how components are combined together.</P>
<P><A href="http://www.rifers.org/"><FONT style="BACKGROUND-COLOR: #deb887" color=#ff1493>http://www.rifers.org/</FONT></A>&nbsp;<BR><A href="https://rife-jumpstart.dev.java.net/"><FONT style="BACKGROUND-COLOR: #d3d3d3" color=#0000ff>https://rife-jumpstart.dev.java.net/</FONT></A></P><img src ="http://www.blogjava.net/bluesky/aggbug/27539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-01-11 10:53 <a href="http://www.blogjava.net/bluesky/archive/2006/01/11/27539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]使用TrueLicense来保护我们的JAVA软件产品</title><link>http://www.blogjava.net/bluesky/archive/2006/01/10/27426.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Tue, 10 Jan 2006 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/01/10/27426.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/27426.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/01/10/27426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/27426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/27426.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们的JAVA软件产品有时需要限制非法用户，只有购买了LICENSE的用户才能使用，因此，我们可以通过TrueLicense来实现。首先要用KeyTool工具来生成私匙库：keytool&nbsp;-genkey&nbsp;-alias&nbsp;privatekey&nbsp;-keystore&nbsp;privateKeys.store然后把私匙库内的公匙导出到一个文件当中：...&nbsp;&nbsp;<a href='http://www.blogjava.net/bluesky/archive/2006/01/10/27426.html'>阅读全文</a><img src ="http://www.blogjava.net/bluesky/aggbug/27426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-01-10 16:55 <a href="http://www.blogjava.net/bluesky/archive/2006/01/10/27426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]session.flush()</title><link>http://www.blogjava.net/bluesky/archive/2006/01/09/27238.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Mon, 09 Jan 2006 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/01/09/27238.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/27238.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/01/09/27238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/27238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/27238.html</trackback:ping><description><![CDATA[<A href="http://hairroot.blogchina.com/hairroot/1639334.html"><FONT color=#006400 size=4>http://hairroot.blogchina.com/hairroot/1639334.html<BR></FONT></A><BR>hibernate一个Session有一个Cache，cache屏蔽了应用程序直接去访问数据库，如果同一张table的同一row在先前已经被请求过，那么为何下次请求的时候还要去请求一次呢，把前面的cache住，再遇到这样的请求直接返回cache里边的即可。<BR><BR>cache里边的数据如果含有脏数据，需要跟数据库同步（也就是需要hibernate来发送update, delete, insert），调用session.flush()达到此目的。一般情况下，hibernate在一个tx.commit()的时候会自动调用session.flush();也可以应用程序手动调用session.flush()来立刻将session的脏数据提交。<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">Session&nbsp;session&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateSessionFactory.currentSession()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;session.beginTransaction()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Employee&nbsp;employee1&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Employee)session.load(Employee.class</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;Integer(</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">))</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(employee1)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;employee1.setAge((byte)</SPAN><SPAN style="COLOR: #000000">98</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.flush()</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">//发送employee1的update给数据库</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;employee1.setAge((byte)</SPAN><SPAN style="COLOR: #000000">43</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit()</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">//employee1已经被flush过，不会再被flush。如果把上面以行代码注释取消，还会再发一条update语句。</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(HibernateException&nbsp;e){<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.rollback()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;session.beginTransaction()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Employee&nbsp;employee2&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Employee)&nbsp;session.load(Employee.class</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;Integer(</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">))</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;employee2.setGender('f')</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(employee2)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR><STRONG>session.flush()的动作执行的时候，session中cache不会被清空，所以上面的employee2和employee1返回的还是同一个实例。<BR><BR>那些被flush()过的对象不会在下次flush()的时候再被flush()一次，除非两次flush()中间又产生了新的脏数据。<BR><BR>我认为应用程序基本上不需要显示去调用session.flush();而交给tx.commit()去做就可以了。原因是：手动调用session.flush()虽然是往数据库提交了update等sql语句，但是这些update真正的commit是在tx.commit()执行的时候。所以手动session.flush()后，其他的session或者是其他的应用程序看到的仍然还是数据库以前的数据。(可以试验)</STRONG>
<P></P>
<P class=diaryFoot>- 作者： <A onclick="window.open('http://publishblog.blogchina.com/blog/postMessage.b?receiver=47683','发送短消息','width=520, height=455')" href="javascript:void(0);">HairRoot</A> 2005年05月24日, 星期二 20:02</P><img src ="http://www.blogjava.net/bluesky/aggbug/27238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-01-09 12:15 <a href="http://www.blogjava.net/bluesky/archive/2006/01/09/27238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Stripes框架</title><link>http://www.blogjava.net/bluesky/archive/2006/01/05/26664.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Thu, 05 Jan 2006 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/01/05/26664.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/26664.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/01/05/26664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/26664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/26664.html</trackback:ping><description><![CDATA[<H1><A href="http://muthos.cn/">兔子的离经叛道</A>&nbsp;看到了Stripes的介绍,就去看了看</H1>
<P>还是以jsp+扩展标签为基本的框架~~<BR><BR>用扩展标签 感觉还是不如 Tapestry 的用ongl实现的组件来的好<BR><BR></P><img src ="http://www.blogjava.net/bluesky/aggbug/26664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-01-05 10:32 <a href="http://www.blogjava.net/bluesky/archive/2006/01/05/26664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初步看了java动态代理</title><link>http://www.blogjava.net/bluesky/archive/2006/01/04/26568.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Wed, 04 Jan 2006 08:32:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2006/01/04/26568.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/26568.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2006/01/04/26568.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/26568.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/26568.html</trackback:ping><description><![CDATA[ProxyClass.java<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.lang.reflect.InvocationHandler;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.lang.reflect.InvocationTargetException;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.lang.reflect.Proxy;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_153_666_Open_Image onclick="this.style.display='none'; Codehighlighter1_153_666_Open_Text.style.display='none'; Codehighlighter1_153_666_Closed_Image.style.display='inline'; Codehighlighter1_153_666_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_153_666_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_153_666_Closed_Text.style.display='none'; Codehighlighter1_153_666_Open_Image.style.display='inline'; Codehighlighter1_153_666_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;ProxyClass&nbsp;</SPAN><SPAN id=Codehighlighter1_153_666_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_153_666_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;main(String&nbsp;arags[])&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;IllegalArgumentException,<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecurityException,&nbsp;InstantiationException,&nbsp;IllegalAccessException,<BR><IMG id=Codehighlighter1_351_664_Open_Image onclick="this.style.display='none'; Codehighlighter1_351_664_Open_Text.style.display='none'; Codehighlighter1_351_664_Closed_Image.style.display='inline'; Codehighlighter1_351_664_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_351_664_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_351_664_Closed_Text.style.display='none'; Codehighlighter1_351_664_Open_Image.style.display='inline'; Codehighlighter1_351_664_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InvocationTargetException,&nbsp;NoSuchMethodException&nbsp;</SPAN><SPAN id=Codehighlighter1_351_664_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_351_664_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InvocationHandler&nbsp;handler&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;MyInvocationHandler();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;proxyClass&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Proxy.getProxyClass(Foo.</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">.getClassLoader(),<BR><IMG id=Codehighlighter1_495_507_Open_Image onclick="this.style.display='none'; Codehighlighter1_495_507_Open_Text.style.display='none'; Codehighlighter1_495_507_Closed_Image.style.display='inline'; Codehighlighter1_495_507_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_495_507_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_495_507_Closed_Text.style.display='none'; Codehighlighter1_495_507_Open_Image.style.display='inline'; Codehighlighter1_495_507_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Class[]&nbsp;</SPAN><SPAN id=Codehighlighter1_495_507_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_495_507_Open_Text><SPAN style="COLOR: #000000">{&nbsp;Foo.</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foo&nbsp;f&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Foo)&nbsp;proxyClass.getConstructor(<BR><IMG id=Codehighlighter1_570_596_Open_Image onclick="this.style.display='none'; Codehighlighter1_570_596_Open_Text.style.display='none'; Codehighlighter1_570_596_Closed_Image.style.display='inline'; Codehighlighter1_570_596_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_570_596_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_570_596_Closed_Text.style.display='none'; Codehighlighter1_570_596_Open_Image.style.display='inline'; Codehighlighter1_570_596_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Class[]&nbsp;</SPAN><SPAN id=Codehighlighter1_570_596_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_570_596_Open_Text><SPAN style="COLOR: #000000">{&nbsp;InvocationHandler.</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">).newInstance(<BR><IMG id=Codehighlighter1_629_639_Open_Image onclick="this.style.display='none'; Codehighlighter1_629_639_Open_Text.style.display='none'; Codehighlighter1_629_639_Closed_Image.style.display='inline'; Codehighlighter1_629_639_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_629_639_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_629_639_Closed_Text.style.display='none'; Codehighlighter1_629_639_Open_Image.style.display='inline'; Codehighlighter1_629_639_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Object[]&nbsp;</SPAN><SPAN id=Codehighlighter1_629_639_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_629_639_Open_Text><SPAN style="COLOR: #000000">{&nbsp;handler&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.doSomething();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><BR>Foo.java<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG id=Codehighlighter1_21_44_Open_Image onclick="this.style.display='none'; Codehighlighter1_21_44_Open_Text.style.display='none'; Codehighlighter1_21_44_Closed_Image.style.display='inline'; Codehighlighter1_21_44_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_21_44_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_44_Closed_Text.style.display='none'; Codehighlighter1_21_44_Open_Image.style.display='inline'; Codehighlighter1_21_44_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">interface</SPAN><SPAN style="COLOR: #000000">&nbsp;Foo&nbsp;</SPAN><SPAN id=Codehighlighter1_21_44_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_21_44_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;doSomething();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV>MyInvocationHandler.java<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.lang.reflect.InvocationHandler;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.lang.reflect.Method;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_140_286_Open_Image onclick="this.style.display='none'; Codehighlighter1_140_286_Open_Text.style.display='none'; Codehighlighter1_140_286_Closed_Image.style.display='inline'; Codehighlighter1_140_286_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_140_286_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_140_286_Closed_Text.style.display='none'; Codehighlighter1_140_286_Open_Image.style.display='inline'; Codehighlighter1_140_286_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;MyInvocationHandler&nbsp;</SPAN><SPAN style="COLOR: #0000ff">implements</SPAN><SPAN style="COLOR: #000000">&nbsp;InvocationHandler&nbsp;</SPAN><SPAN id=Codehighlighter1_140_286_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_140_286_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;Object&nbsp;invoke(Object&nbsp;proxy,&nbsp;Method&nbsp;method,&nbsp;Object[]&nbsp;args)<BR><IMG id=Codehighlighter1_229_283_Open_Image onclick="this.style.display='none'; Codehighlighter1_229_283_Open_Text.style.display='none'; Codehighlighter1_229_283_Closed_Image.style.display='inline'; Codehighlighter1_229_283_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_229_283_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_229_283_Closed_Text.style.display='none'; Codehighlighter1_229_283_Open_Image.style.display='inline'; Codehighlighter1_229_283_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;Throwable&nbsp;</SPAN><SPAN id=Codehighlighter1_229_283_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_229_283_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Helloworld</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.blogjava.net/bluesky/aggbug/26568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2006-01-04 16:32 <a href="http://www.blogjava.net/bluesky/archive/2006/01/04/26568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]文件和目录复制函数</title><link>http://www.blogjava.net/bluesky/archive/2005/12/29/25915.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Thu, 29 Dec 2005 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/29/25915.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/25915.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/29/25915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/25915.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/25915.html</trackback:ping><description><![CDATA[<A href="http://spaces.msn.com/members/kliweik/"><FONT color=#ff0000 size=6>http://spaces.msn.com/members/kliweik/</FONT></A><BR><BR>今天偷懒，要Roy帮我写了一个目录复制的函数，记录，备后用，呵呵！<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">/*&nbsp;Created&nbsp;on&nbsp;</SPAN><SPAN style="COLOR: #000000">2005</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">8</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">8</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;*&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;*&nbsp;@author&nbsp;wei.li&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;*&nbsp;TODO&nbsp;用来运行外部命令的工具类&nbsp;*/<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>package&nbsp;com.linktone.photo.lucene</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;java.io.File</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">import&nbsp;java.io.FileInputStream</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">import&nbsp;java.io.FileOutputStream</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">import&nbsp;java.io.IOException</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">import&nbsp;java.nio.channels.FileChannel</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>public&nbsp;class&nbsp;FileUtil&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*&nbsp;功能:利用nio来快速复制文件&nbsp;*/<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;copyFile(String&nbsp;srcFile</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;destFile)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;java.io.FileNotFoundException</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;java.io.IOException&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fis&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;FileInputStream(srcFile)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fos&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;FileOutputStream(destFile)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileChannel&nbsp;fcin&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;fis.getChannel()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileChannel&nbsp;fcout&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;fos.getChannel()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fcin.transferTo(</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;fcin.size()</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;fcout)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fcin.close()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fcout.close()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fis.close()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*&nbsp;功能:利用nio快速复制目录&nbsp;*/<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;copyDirectory(String&nbsp;srcDirectory</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;destDirectory)<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;java.io.FileNotFoundException</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;java.io.IOException&nbsp;{&nbsp;//&nbsp;得到目录下的文件和目录数组<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;srcDir&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;File(srcDirectory)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[]</SPAN><SPAN style="COLOR: #000000">&nbsp;fileList&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;srcDir.listFiles()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;循环处理数组<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;i&nbsp;&lt;&nbsp;fileList.length;&nbsp;i++)&nbsp;{</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fileList</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[</SPAN><SPAN style="COLOR: #800000">i</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">]</SPAN><SPAN style="COLOR: #000000">.isFile())&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;数组中的对象为文件<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果目标目录不存在，创建目标目录<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;descDir&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;File(destDirectory)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!descDir.exists())&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;descDir.mkdir()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;//&nbsp;复制文件到目标目录<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyFile(srcDirectory&nbsp;+&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;+&nbsp;fileList</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[</SPAN><SPAN style="COLOR: #800000">i</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">]</SPAN><SPAN style="COLOR: #000000">.getName()</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destDirectory&nbsp;+&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;+&nbsp;fileList</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[</SPAN><SPAN style="COLOR: #800000">i</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">]</SPAN><SPAN style="COLOR: #000000">.getName())</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;数组中的对象为目录<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果该子目录不存在就创建（其中也包含了对多级目录的处理）<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;subDir&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;File(destDirectory&nbsp;+&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&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;fileList</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[</SPAN><SPAN style="COLOR: #800000">i</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">]</SPAN><SPAN style="COLOR: #000000">.getName())</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!subDir.exists())&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subDir.mkdir()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;递归处理子目录<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyDirectory(srcDirectory&nbsp;+&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;+&nbsp;fileList</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[</SPAN><SPAN style="COLOR: #800000">i</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">]</SPAN><SPAN style="COLOR: #000000">.getName()</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destDirectory&nbsp;+&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">/</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;+&nbsp;fileList</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[</SPAN><SPAN style="COLOR: #800000">i</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">]</SPAN><SPAN style="COLOR: #000000">.getName())</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[]</SPAN><SPAN style="COLOR: #000000">&nbsp;args)&nbsp;throws&nbsp;IOException&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileUtil.copyDirectory(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">e:/temp/index/test</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">e:/temp/index/test2</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><img src ="http://www.blogjava.net/bluesky/aggbug/25915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-29 17:52 <a href="http://www.blogjava.net/bluesky/archive/2005/12/29/25915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]hibernate错误信息</title><link>http://www.blogjava.net/bluesky/archive/2005/12/29/25912.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Thu, 29 Dec 2005 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/29/25912.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/25912.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/29/25912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/25912.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/25912.html</trackback:ping><description><![CDATA[<P><FONT color=#ff0000 size=6>出处: </FONT>http://spaces.msn.com/members/kliweik/<BR>No row with the given identifier exists </P>
<P>表示你现在查询的对象所关联的对象有问题，一般是因为数据的问题（该对象所关联的对象找不到）</P>
<P>Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence. <BR>如果出现这行错误说明你的xml配置文件有不规范的字符，检查下。 <BR><BR>net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml <BR>如果出现这行错误说明你的hibernate的XML配置文件有错 <BR><BR>net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found <BR>如果出现这行错误说明hibernate的XML配置文件没有找到，你应该把XML文件放在与你的类文件同个目录下,本文中是放在hibernate\classes\hibernate\目录下，也就是跟Hello_Bean.class类文件一起。 <BR><BR>net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean <BR>如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.java类里的getXXX或setXXX方法不一致。 <BR><BR>net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver <BR>如果出现这行错误说明你的MYSQL驱动没有加进JB库里或者不在CLASSPATH里。</P><img src ="http://www.blogjava.net/bluesky/aggbug/25912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-29 17:43 <a href="http://www.blogjava.net/bluesky/archive/2005/12/29/25912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中止for循环break和return有区别么?</title><link>http://www.blogjava.net/bluesky/archive/2005/12/29/25884.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Thu, 29 Dec 2005 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/29/25884.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/25884.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/29/25884.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/25884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/25884.html</trackback:ping><description><![CDATA[<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">for循环</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">continue</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">return</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">break</SPAN></DIV><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">5</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">i&lt;1;i++){</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;k&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">6</SPAN><SPAN style="COLOR: #000000">/i</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(k)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(Exception&nbsp;e){<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">error</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//continue</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">//忽略错误继续循环</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">//中止循环</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//break</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">//中止循环</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}finally{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//TODO无论成功失败都会执行的<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">finally&nbsp;code</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></DIV><BR>我看用break和return输出的都一样<img src ="http://www.blogjava.net/bluesky/aggbug/25884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-29 14:55 <a href="http://www.blogjava.net/bluesky/archive/2005/12/29/25884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jbuilder2005内置的Tomcat5.0.27加载数据源配置的方法</title><link>http://www.blogjava.net/bluesky/archive/2005/12/24/25277.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Sat, 24 Dec 2005 00:43:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/24/25277.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/25277.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/24/25277.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/25277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/25277.html</trackback:ping><description><![CDATA[<IMG height=682 alt=Snap001.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap001.gif" width=380 border=0><BR><BR><IMG height=169 alt=Snap002.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap002.gif" width=405 border=0><BR><IMG height=682 alt=Snap003.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap003.gif" width=519 border=0> <IMG height=348 alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap004.gif" width=711 border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap005.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap006.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap007.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap008.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap009.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap010.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap011.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap012.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap013.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap014.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap015.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap016.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap017.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap018.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap019.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap020.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap021.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap022.gif" border=0><BR><IMG alt=Snap004.gif src="http://www.blogjava.net/images/blogjava_net/bluesky/images/JBuilder2005-Tomcat5.0.27-DatasSource-config/Snap023.gif" border=0><BR><img src ="http://www.blogjava.net/bluesky/aggbug/25277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-24 08:43 <a href="http://www.blogjava.net/bluesky/archive/2005/12/24/25277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jakarta Slide 使用笔记</title><link>http://www.blogjava.net/bluesky/archive/2005/12/23/25206.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Fri, 23 Dec 2005 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/23/25206.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/25206.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/23/25206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/25206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/25206.html</trackback:ping><description><![CDATA[<P><IMG alt=icq00.gif src="http://blogjava.net/images/blogjava_net/bluesky/images/icq/icq02.gif"><FONT color=#9acd32 size=6><BR>Jakarta slide</FONT>主要模型是一个文件仓库管理系统,可以用来做CMS基础框架;<BR>能达到网络硬盘共享或者ftp服务器相同的作用,通过WebDav,slide可以上传,下载,删除文件--<BR>基于web的文件管理系统.<BR><BR>org.apache.slide.webdav.method.GetMethod&nbsp; //处理请求的类<BR>org.apache.slide.webdav.util.DirectoryIndexGenerator&nbsp; //回复请求的类<BR>所有的文件都通过这个类来"过滤" 如果是html就把html源文件显示<BR><A href="http://wiki.apache.org/jakarta-slide/FrontPage"><FONT color=#ff1493>http://wiki.apache.org/jakarta-slide/FrontPage</FONT></A></P><img src ="http://www.blogjava.net/bluesky/aggbug/25206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-23 14:56 <a href="http://www.blogjava.net/bluesky/archive/2005/12/23/25206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解IOC容器的概念和DI</title><link>http://www.blogjava.net/bluesky/archive/2005/12/23/25161.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Fri, 23 Dec 2005 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/23/25161.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/25161.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/23/25161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/25161.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/25161.html</trackback:ping><description><![CDATA[<P><FONT size=6><FONT color=#ff1493><IMG height=480 alt=015.jpg src="http://www.blogjava.net/images/blogjava_net/bluesky/images/helloworld/015.jpg" width=338 border=0></FONT></FONT></P>
<P><FONT size=6><FONT color=#ff1493>Inversion of Control/Dependency Injection</FONT><BR>IOC容器</FONT>相当于一个bean工厂,来管理整个应用程序中使用的bean,来管理这些bean的生命周期;<BR><BR>实现<FONT size=6>IOC/DI</FONT>是通过一堆描述文件,IOC容器根据这堆描述文件来实现创建对象提供服务等工作;<BR><BR>一般情况下,我们通过new一个对象并调用这个对象的某个方法来完成服务.<BR><BR>既然有了<FONT size=6>IOC容器</FONT>管理概念,那么通过描述文件容器就为我们创建所需要对象和方法.<BR><BR>好处就是减少了硬编码.<IMG height=19 src="http://www.blogjava.net/Emoticons/teeth_smile.gif" width=19 border=0><BR><BR></P>
<P>There are three different implementation pattern types for IoC:</P>
<TABLE class=ForrestTable cellSpacing=1 cellPadding=4 border=1>
<TBODY>
<TR>
<TD>type-1</TD>
<TD>Services need to implement a dedicated interface through which they are provided with an object from which they can look up dependencies (other services). This is the pattern used by the earlier containers provided by Excalibur.</TD></TR>
<TR>
<TD>type-2</TD>
<TD>Services dependencies upon are assigned via JavaBeans properties (setter methods). Both HiveMind and <A class=external href="http://www.springframework.org/">Spring</A> use this approach.</TD></TR>
<TR>
<TD>type-3</TD>
<TD>Services dependencies are provided as constructor parameters (and are not exposed as JavaBeans properties). This is the exclusive approach used by <A class=external href="http://www.picocontainer.org/">PicoContainer</A>, and is also used in HiveMind and Spring.</TD></TR></TBODY></TABLE><BR><A href="http://jakarta.apache.org/hivemind/ioc.html">http://jakarta.apache.org/hivemind/ioc.html<BR></A><BR><A href="http://www.javaworld.com.tw/confluence/display/opensrc/Spring">http://www.javaworld.com.tw/confluence/display/opensrc/Spring</A><img src ="http://www.blogjava.net/bluesky/aggbug/25161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-23 10:04 <a href="http://www.blogjava.net/bluesky/archive/2005/12/23/25161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修正一下Hibernate取count(*)的方法</title><link>http://www.blogjava.net/bluesky/archive/2005/12/22/25069.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Thu, 22 Dec 2005 06:20:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/22/25069.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/25069.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/22/25069.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/25069.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/25069.html</trackback:ping><description><![CDATA[<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;getCount(String&nbsp;emailGroupId,&nbsp;String&nbsp;emailBatchId)<BR><IMG id=Codehighlighter1_92_758_Open_Image onclick="this.style.display='none'; Codehighlighter1_92_758_Open_Text.style.display='none'; Codehighlighter1_92_758_Closed_Image.style.display='inline'; Codehighlighter1_92_758_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_92_758_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_758_Closed_Text.style.display='none'; Codehighlighter1_92_758_Open_Image.style.display='inline'; Codehighlighter1_92_758_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateException&nbsp;</SPAN><SPAN id=Codehighlighter1_92_758_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_92_758_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateUtil.currentSession();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;session.beginTransaction();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select&nbsp;count(*)&nbsp;from&nbsp;EmailSendInfo&nbsp;where&nbsp;email_group_id&nbsp;=&nbsp;:emailGroupId&nbsp;and&nbsp;batch_id&nbsp;=&nbsp;:batchId</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;session.createQuery(hql);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setString(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">emailGroupId</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;emailGroupId);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setString(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">batchId</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;emailBatchId);<BR><IMG id=Codehighlighter1_447_560_Open_Image onclick="this.style.display='none'; Codehighlighter1_447_560_Open_Text.style.display='none'; Codehighlighter1_447_560_Closed_Image.style.display='inline'; Codehighlighter1_447_560_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_447_560_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_447_560_Closed_Text.style.display='none'; Codehighlighter1_447_560_Open_Image.style.display='inline'; Codehighlighter1_447_560_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_447_560_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</SPAN><SPAN id=Codehighlighter1_447_560_Open_Text><SPAN style="COLOR: #008000">/*</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;for&nbsp;(Iterator&nbsp;it&nbsp;=&nbsp;query.iterate();&nbsp;it.hasNext();)&nbsp;{&nbsp;return<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;((Integer)&nbsp;it.next()).intValue();&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">*/</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG id=Codehighlighter1_568_629_Open_Image onclick="this.style.display='none'; Codehighlighter1_568_629_Open_Text.style.display='none'; Codehighlighter1_568_629_Closed_Image.style.display='inline'; Codehighlighter1_568_629_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_568_629_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_568_629_Closed_Text.style.display='none'; Codehighlighter1_568_629_Open_Image.style.display='inline'; Codehighlighter1_568_629_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_568_629_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_568_629_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;((Integer)&nbsp;query.iterate().next()).intValue();<BR><IMG id=Codehighlighter1_651_692_Open_Image onclick="this.style.display='none'; Codehighlighter1_651_692_Open_Text.style.display='none'; Codehighlighter1_651_692_Closed_Image.style.display='inline'; Codehighlighter1_651_692_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_651_692_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_651_692_Closed_Text.style.display='none'; Codehighlighter1_651_692_Open_Image.style.display='inline'; Codehighlighter1_651_692_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</SPAN><SPAN id=Codehighlighter1_651_692_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_651_692_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateException(</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">);<BR><IMG id=Codehighlighter1_702_755_Open_Image onclick="this.style.display='none'; Codehighlighter1_702_755_Open_Text.style.display='none'; Codehighlighter1_702_755_Closed_Image.style.display='inline'; Codehighlighter1_702_755_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_702_755_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_702_755_Closed_Text.style.display='none'; Codehighlighter1_702_755_Open_Image.style.display='inline'; Codehighlighter1_702_755_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">finally</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_702_755_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_702_755_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx.commit();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HibernateUtil.closeSession();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN></DIV><img src ="http://www.blogjava.net/bluesky/aggbug/25069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-22 14:20 <a href="http://www.blogjava.net/bluesky/archive/2005/12/22/25069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>俺用hibernate最原始的方法取得count(*)</title><link>http://www.blogjava.net/bluesky/archive/2005/12/22/25050.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Thu, 22 Dec 2005 04:27:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/22/25050.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/25050.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/22/25050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/25050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/25050.html</trackback:ping><description><![CDATA[<IMG height=161 alt=90934966D300E863F14BC5BA7B3ACB19.JPG src="http://www.blogjava.net/images/blogjava_net/bluesky/images/helloworld/90934966D300E863F14BC5BA7B3ACB19.JPG" width=163 border=0><BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;getCount(String&nbsp;emailGroupId,&nbsp;String&nbsp;emailBatchId)<BR><IMG id=Codehighlighter1_92_562_Open_Image onclick="this.style.display='none'; Codehighlighter1_92_562_Open_Text.style.display='none'; Codehighlighter1_92_562_Closed_Image.style.display='inline'; Codehighlighter1_92_562_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_92_562_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_562_Closed_Text.style.display='none'; Codehighlighter1_92_562_Open_Image.style.display='inline'; Codehighlighter1_92_562_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateException&nbsp;</SPAN><SPAN id=Codehighlighter1_92_562_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_92_562_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateUtil.currentSession();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;tx&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;session.beginTransaction();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hql&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select&nbsp;count(*)&nbsp;from&nbsp;EmailSendInfo&nbsp;where&nbsp;email_group_id&nbsp;=&nbsp;:emailGroupId&nbsp;and&nbsp;batch_id&nbsp;=&nbsp;:batchId</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;query&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;session.createQuery(hql);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setString(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">emailGroupId</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;emailGroupId);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.setString(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">batchId</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;emailBatchId);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_499_547_Open_Image onclick="this.style.display='none'; Codehighlighter1_499_547_Open_Text.style.display='none'; Codehighlighter1_499_547_Closed_Image.style.display='inline'; Codehighlighter1_499_547_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_499_547_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_499_547_Closed_Text.style.display='none'; Codehighlighter1_499_547_Open_Image.style.display='inline'; Codehighlighter1_499_547_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;(Iterator&nbsp;it&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;query.iterate();&nbsp;it.hasNext();)&nbsp;</SPAN><SPAN id=Codehighlighter1_499_547_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_499_547_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;((Integer)&nbsp;it.next()).intValue();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN></DIV>俺觉得挺原始的,俺又不会用别的<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">Spring+Hibernate&nbsp;如何使用count(*)（转）&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>第一种方法：<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>String&nbsp;hql&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select&nbsp;count(*)&nbsp;from&nbsp;User&nbsp;as&nbsp;user</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">Integer&nbsp;count&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Integer)getHibernateTemplate().find(hql).listIterator().next()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">return&nbsp;count.intValue()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">第二种方法：<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>String&nbsp;hql&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select&nbsp;count(*)&nbsp;from&nbsp;User&nbsp;as&nbsp;user</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">return&nbsp;((Integer)getHibernateTemplate().iterate(hql).next()).intValue()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">第三种方法：<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>String&nbsp;hql&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select&nbsp;count(*)&nbsp;from&nbsp;User&nbsp;as&nbsp;user</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">Query&nbsp;query&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;getHibernateTemplate().createQuery(&nbsp;getSession()</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">hql)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">return&nbsp;((Integer)query.uniqueResult()).intValue()</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>俺试了Spring 可是俺拿不到getHibernateTemplate 拿到总是空,可能是因为俺没有配置applicationContext.xml中的&lt;beans&gt;&lt;/beans&gt;<BR>DAO support 需要注入一些东东吧,比如说sessionFactory... :(<BR><img src ="http://www.blogjava.net/bluesky/aggbug/25050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-22 12:27 <a href="http://www.blogjava.net/bluesky/archive/2005/12/22/25050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的分页</title><link>http://www.blogjava.net/bluesky/archive/2005/12/21/24946.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Wed, 21 Dec 2005 06:16:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/21/24946.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/24946.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/21/24946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/24946.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/24946.html</trackback:ping><description><![CDATA[<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000"><FONT style="BACKGROUND-COLOR: #eeeeee">&nbsp;</FONT>Session&nbsp;session&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateUtil.currentSession();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR>Transaction&nbsp;tx&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;session.beginTransaction();<BR>Query&nbsp;query&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;session.createQuery(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">from&nbsp;Cat</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><BR>query.setFirstResult(</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">);</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">开始</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">query.setMaxResult(</SPAN><SPAN style="COLOR: #000000">10</SPAN><SPAN style="COLOR: #000000">);<FONT color=#006400>//最大</FONT><BR><IMG id=Codehighlighter1_258_292_Open_Image onclick="this.style.display='none'; Codehighlighter1_258_292_Open_Text.style.display='none'; Codehighlighter1_258_292_Closed_Image.style.display='inline'; Codehighlighter1_258_292_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_258_292_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_258_292_Closed_Text.style.display='none'; Codehighlighter1_258_292_Open_Image.style.display='inline'; Codehighlighter1_258_292_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;(Iterator&nbsp;it&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;query.iterate();&nbsp;it.hasNext();)&nbsp;</SPAN><SPAN id=Codehighlighter1_258_292_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_258_292_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">Object&nbsp;obj&nbsp;=&nbsp;it.next();</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #000000">}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR>tx.commit();<BR>HibernateUtil.closeSession();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>HibernateUtil.java<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG id=Codehighlighter1_27_918_Open_Image onclick="this.style.display='none'; Codehighlighter1_27_918_Open_Text.style.display='none'; Codehighlighter1_27_918_Closed_Image.style.display='inline'; Codehighlighter1_27_918_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_27_918_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_918_Closed_Text.style.display='none'; Codehighlighter1_27_918_Open_Image.style.display='inline'; Codehighlighter1_27_918_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;HibernateUtil&nbsp;</SPAN><SPAN id=Codehighlighter1_27_918_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_27_918_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;SessionFactory&nbsp;sessionFactory;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_91_314_Open_Image onclick="this.style.display='none'; Codehighlighter1_91_314_Open_Text.style.display='none'; Codehighlighter1_91_314_Closed_Image.style.display='inline'; Codehighlighter1_91_314_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_91_314_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_91_314_Closed_Text.style.display='none'; Codehighlighter1_91_314_Open_Image.style.display='inline'; Codehighlighter1_91_314_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_91_314_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_91_314_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_99_238_Open_Image onclick="this.style.display='none'; Codehighlighter1_99_238_Open_Text.style.display='none'; Codehighlighter1_99_238_Closed_Image.style.display='inline'; Codehighlighter1_99_238_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_99_238_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_99_238_Closed_Text.style.display='none'; Codehighlighter1_99_238_Open_Image.style.display='inline'; Codehighlighter1_99_238_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_99_238_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_99_238_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Create&nbsp;the&nbsp;SessionFactory</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;cfg&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;Configuration().configure();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sessionFactory&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;cfg.buildSessionFactory();<BR><IMG id=Codehighlighter1_261_311_Open_Image onclick="this.style.display='none'; Codehighlighter1_261_311_Open_Text.style.display='none'; Codehighlighter1_261_311_Closed_Image.style.display='inline'; Codehighlighter1_261_311_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_261_311_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_261_311_Closed_Text.style.display='none'; Codehighlighter1_261_311_Open_Image.style.display='inline'; Codehighlighter1_261_311_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">&nbsp;(Throwable&nbsp;ex)&nbsp;</SPAN><SPAN id=Codehighlighter1_261_311_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_261_311_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throw</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ExceptionInInitializerError(ex);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;ThreadLocal&nbsp;session&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;ThreadLocal();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_420_668_Open_Image onclick="this.style.display='none'; Codehighlighter1_420_668_Open_Text.style.display='none'; Codehighlighter1_420_668_Closed_Image.style.display='inline'; Codehighlighter1_420_668_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_420_668_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_420_668_Closed_Text.style.display='none'; Codehighlighter1_420_668_Open_Image.style.display='inline'; Codehighlighter1_420_668_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;Session&nbsp;currentSession()&nbsp;</SPAN><SPAN id=Codehighlighter1_420_668_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_420_668_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;s&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Session)&nbsp;session.get();<BR><IMG id=Codehighlighter1_478_653_Open_Image onclick="this.style.display='none'; Codehighlighter1_478_653_Open_Text.style.display='none'; Codehighlighter1_478_653_Closed_Image.style.display='inline'; Codehighlighter1_478_653_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_478_653_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_478_653_Closed_Text.style.display='none'; Codehighlighter1_478_653_Open_Image.style.display='inline'; Codehighlighter1_478_653_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(s&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN id=Codehighlighter1_478_653_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_478_653_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_487_530_Open_Image onclick="this.style.display='none'; Codehighlighter1_487_530_Open_Text.style.display='none'; Codehighlighter1_487_530_Closed_Image.style.display='inline'; Codehighlighter1_487_530_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_487_530_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_487_530_Closed_Text.style.display='none'; Codehighlighter1_487_530_Open_Image.style.display='inline'; Codehighlighter1_487_530_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_487_530_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_487_530_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;sessionFactory.openSession();<BR><IMG id=Codehighlighter1_561_630_Open_Image onclick="this.style.display='none'; Codehighlighter1_561_630_Open_Text.style.display='none'; Codehighlighter1_561_630_Closed_Image.style.display='inline'; Codehighlighter1_561_630_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_561_630_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_561_630_Closed_Text.style.display='none'; Codehighlighter1_561_630_Open_Image.style.display='inline'; Codehighlighter1_561_630_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">&nbsp;(HibernateException&nbsp;e)&nbsp;</SPAN><SPAN id=Codehighlighter1_561_630_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_561_630_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.set(s);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;s;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG id=Codehighlighter1_706_915_Open_Image onclick="this.style.display='none'; Codehighlighter1_706_915_Open_Text.style.display='none'; Codehighlighter1_706_915_Closed_Image.style.display='inline'; Codehighlighter1_706_915_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_706_915_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_706_915_Closed_Text.style.display='none'; Codehighlighter1_706_915_Open_Image.style.display='inline'; Codehighlighter1_706_915_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;closeSession()&nbsp;</SPAN><SPAN id=Codehighlighter1_706_915_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_706_915_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;s&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Session)&nbsp;session.get();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">&nbsp;(s&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)<BR><IMG id=Codehighlighter1_771_791_Open_Image onclick="this.style.display='none'; Codehighlighter1_771_791_Open_Text.style.display='none'; Codehighlighter1_771_791_Closed_Image.style.display='inline'; Codehighlighter1_771_791_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_771_791_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_771_791_Closed_Text.style.display='none'; Codehighlighter1_771_791_Open_Image.style.display='inline'; Codehighlighter1_771_791_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_771_791_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_771_791_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.close();<BR><IMG id=Codehighlighter1_822_891_Open_Image onclick="this.style.display='none'; Codehighlighter1_822_891_Open_Text.style.display='none'; Codehighlighter1_822_891_Closed_Image.style.display='inline'; Codehighlighter1_822_891_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_822_891_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_822_891_Closed_Text.style.display='none'; Codehighlighter1_822_891_Open_Image.style.display='inline'; Codehighlighter1_822_891_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">&nbsp;(HibernateException&nbsp;e)&nbsp;</SPAN><SPAN id=Codehighlighter1_822_891_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_822_891_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.set(</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><img src ="http://www.blogjava.net/bluesky/aggbug/24946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-21 14:16 <a href="http://www.blogjava.net/bluesky/archive/2005/12/21/24946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MD5加密算法</title><link>http://www.blogjava.net/bluesky/archive/2005/12/19/24567.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Mon, 19 Dec 2005 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/19/24567.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/24567.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/19/24567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/24567.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/24567.html</trackback:ping><description><![CDATA[<SPAN class=oblog_text>&nbsp;
<P>介绍MD5加密算法基本情况MD5的全称是Message-Digest Algorithm 5，在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明，经MD2、MD3和MD4发展而来。<BR>Message-Digest泛指字节串(Message)的Hash变换，就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了"字节串"而不是"字符串"这个词，是因为这种变换只与字节的值有关，与字符集或编码方式无关。 
<P>MD5将任意长度的"字节串"变换成一个128bit的大整数，并且它是一个不可逆的字符串变换算法，换句话说就是，即使你看到源程序和算法描述，也无法将一个MD5的值变换回原始的字符串，从数学原理上说，是因为原始的字符串有无穷多个，这有点象不存在反函数的数学函数。</P>
<P>MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹)，以防止被"篡改"。举个例子，你将一段话写在一个叫readme.txt文件中，并对这个readme.txt产生一个MD5的值并记录在案，然后你可以传播这个文件给别人，别人如果修改了文件中的任何内容，你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构，用MD5还可以防止文件作者的"抵赖"，这就是所谓的数字签名应用。</P>
<P>MD5还广泛用于加密和解密技术上，在很多操作系统中，用户的密码是以MD5值（或类似的其它算法）的方式保存的，用户Login的时候，系统是把用户输入的密码计算成MD5值，然后再去和系统中保存的MD5值进行比较，而系统并不"知道"用户的密码是什么。</P>
<P>一些黑客破获这种密码的方法是一种被称为"跑字典"的方法。有两种方法得到字典，一种是日常搜集的用做密码的字符串表，另一种是用排列组合方法生成的，先用MD5程序计算出这些字典项的MD5值，然后再用目标的MD5值在这个字典中检索。</P>
<P>即使假设密码的最大长度为8，同时密码只能是字母和数字，共26+26+10=62个字符，排列组合出的字典的项数则是P(62,1)+P(62,2)....+P(62,8)，那也已经是一个很天文的数字了，存储这个字典就需要TB级的磁盘组，而且这种方法还有一个前提，就是能获得目标账户的密码MD5值的情况下才可以。</P>
<P>在很多电子商务和社区应用中，管理用户的Account是一种最常用的基本功能，尽管很多Application Server提供了这些基本组件，但很多应用开发者为了管理的更大的灵活性还是喜欢采用关系数据库来管理用户，懒惰的做法是用户的密码往往使用明文或简单的变换后直接保存在数据库中，因此这些用户的密码对软件开发者或系统管理员来说可以说毫无保密可言，本文的目的是介绍MD5的Java Bean的实现，同时给出用MD5来处理用户的Account密码的例子，这种方法使得管理员和程序设计者都无法看到用户的密码，尽管他们可以初始化它们。但重要的一点是对于用户密码设置习惯的保护</P>
<P>MD加密算法的JAVA描述为：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.security.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.security.spec.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;&nbsp;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_69_713_Open_Image onclick="this.style.display='none'; Codehighlighter1_69_713_Open_Text.style.display='none'; Codehighlighter1_69_713_Closed_Image.style.display='inline'; Codehighlighter1_69_713_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_69_713_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_69_713_Closed_Text.style.display='none'; Codehighlighter1_69_713_Open_Image.style.display='inline'; Codehighlighter1_69_713_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;Md5</SPAN><SPAN id=Codehighlighter1_69_713_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_69_713_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_111_633_Open_Image onclick="this.style.display='none'; Codehighlighter1_111_633_Open_Text.style.display='none'; Codehighlighter1_111_633_Closed_Image.style.display='inline'; Codehighlighter1_111_633_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_111_633_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_633_Closed_Text.style.display='none'; Codehighlighter1_111_633_Open_Image.style.display='inline'; Codehighlighter1_111_633_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">final</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;String&nbsp;MD5(String&nbsp;s)</SPAN><SPAN id=Codehighlighter1_111_633_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_111_633_Open_Text><SPAN style="COLOR: #000000">{&nbsp;<BR><IMG id=Codehighlighter1_133_214_Open_Image onclick="this.style.display='none'; Codehighlighter1_133_214_Open_Text.style.display='none'; Codehighlighter1_133_214_Closed_Image.style.display='inline'; Codehighlighter1_133_214_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_133_214_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_133_214_Closed_Text.style.display='none'; Codehighlighter1_133_214_Open_Image.style.display='inline'; Codehighlighter1_133_214_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">&nbsp;hexDigits[]&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_133_214_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_133_214_Open_Text><SPAN style="COLOR: #000000">{&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">5</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">6</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">7</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">8</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">9</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">a</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">b</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">c</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">d</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">e</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">f</SPAN><SPAN style="COLOR: #000000">'</SPAN><SPAN style="COLOR: #000000">}</SPAN></SPAN><SPAN style="COLOR: #000000">;&nbsp;<BR><IMG id=Codehighlighter1_222_591_Open_Image onclick="this.style.display='none'; Codehighlighter1_222_591_Open_Text.style.display='none'; Codehighlighter1_222_591_Closed_Image.style.display='inline'; Codehighlighter1_222_591_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_222_591_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_222_591_Closed_Text.style.display='none'; Codehighlighter1_222_591_Open_Image.style.display='inline'; Codehighlighter1_222_591_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_222_591_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_222_591_Open_Text><SPAN style="COLOR: #000000">{&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">[]&nbsp;strTemp&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s.getBytes();&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>MessageDigest&nbsp;mdTemp&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;MessageDigest.getInstance(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">MD5</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>mdTemp.update(strTemp);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">[]&nbsp;md&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;mdTemp.digest();&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;j&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;md.length;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">&nbsp;str[]&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">[j&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">];&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;k&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;<BR><IMG id=Codehighlighter1_461_563_Open_Image onclick="this.style.display='none'; Codehighlighter1_461_563_Open_Text.style.display='none'; Codehighlighter1_461_563_Closed_Image.style.display='inline'; Codehighlighter1_461_563_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_461_563_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_461_563_Closed_Text.style.display='none'; Codehighlighter1_461_563_Open_Image.style.display='inline'; Codehighlighter1_461_563_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000">&nbsp;(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;&nbsp;i&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">&nbsp;j;&nbsp;i</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN id=Codehighlighter1_461_563_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_461_563_Open_Text><SPAN style="COLOR: #000000">{&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">&nbsp;byte0&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;md[i];&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>str[k</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">]&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;hexDigits[byte0&nbsp;</SPAN><SPAN style="COLOR: #000000">&gt;&gt;&gt;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0xf</SPAN><SPAN style="COLOR: #000000">];&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>str[k</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">]&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;hexDigits[byte0&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0xf</SPAN><SPAN style="COLOR: #000000">];&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;String(str);&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG id=Codehighlighter1_613_630_Open_Image onclick="this.style.display='none'; Codehighlighter1_613_630_Open_Text.style.display='none'; Codehighlighter1_613_630_Closed_Image.style.display='inline'; Codehighlighter1_613_630_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_613_630_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_613_630_Closed_Text.style.display='none'; Codehighlighter1_613_630_Open_Image.style.display='inline'; Codehighlighter1_613_630_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">&nbsp;(Exception&nbsp;e)</SPAN><SPAN id=Codehighlighter1_613_630_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_613_630_Open_Text><SPAN style="COLOR: #000000">{&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG id=Codehighlighter1_674_711_Open_Image onclick="this.style.display='none'; Codehighlighter1_674_711_Open_Text.style.display='none'; Codehighlighter1_674_711_Closed_Image.style.display='inline'; Codehighlighter1_674_711_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_674_711_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_674_711_Closed_Text.style.display='none'; Codehighlighter1_674_711_Open_Image.style.display='inline'; Codehighlighter1_674_711_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)</SPAN><SPAN id=Codehighlighter1_674_711_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_674_711_Open_Text><SPAN style="COLOR: #000000">{&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>System.out.print(MD5.Md5(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">XX</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">));&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top></SPAN></DIV></SPAN></SPAN><img src ="http://www.blogjava.net/bluesky/aggbug/24567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-19 09:47 <a href="http://www.blogjava.net/bluesky/archive/2005/12/19/24567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic 配置 MailSession</title><link>http://www.blogjava.net/bluesky/archive/2005/12/16/24196.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Fri, 16 Dec 2005 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/16/24196.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/24196.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/16/24196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/24196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/24196.html</trackback:ping><description><![CDATA[<P>Webligic 的MailSession 不能通过远程调用来获得必须在webloigc的容器中才能通过JNDI拿到 mail Session对象<BR><BR><A href="http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html">http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html</A><BR><BR>属性的设置如下<BR><BR></P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">mail.smtp.user</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">example<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>mail.smtp.port</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">25</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>mail.debug</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">true<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>mail.smtp.host</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">192.168.8.1</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>mail.smtp.auth</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">true<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>mail.smtp.form 还不能随便设置 必须是提供用户名密码验证后的那个用户的地址,不然还发不出去<BR><BR>导致的问题可能是webloigc的j2ee的Jmail paggage版本比较落后<img src ="http://www.blogjava.net/bluesky/aggbug/24196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-16 13:43 <a href="http://www.blogjava.net/bluesky/archive/2005/12/16/24196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate.cfg.xml配置sybase数据库不支持左连接sql语句</title><link>http://www.blogjava.net/bluesky/archive/2005/12/16/24194.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Fri, 16 Dec 2005 05:36:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/16/24194.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/24194.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/16/24194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/24194.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/24194.html</trackback:ping><description><![CDATA[<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&lt;property&nbsp;name</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">hibernate.use_outer_join</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&gt;false&lt;/property&gt;</SPAN></DIV><BR>&nbsp;把这句设置成false 就不会产生 left outer join 的sql语句<BR>&nbsp;<BR>如果ture通过关联 mapping 映射 many-to-one 产生的sql语句 不能执行 提示sql语法有错误<BR>&nbsp;<BR>&nbsp;
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&lt;many-to-one&nbsp;name</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">MemberInfo</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">false</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">false</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not-null</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">true</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&gt;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;column&nbsp;name</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">member_no</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;/&gt;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;column&nbsp;name</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">corp_id</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;/&gt;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&lt;/many-to-one&gt;&nbsp;&nbsp;</SPAN></DIV><img src ="http://www.blogjava.net/bluesky/aggbug/24194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-16 13:36 <a href="http://www.blogjava.net/bluesky/archive/2005/12/16/24194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic-JNDI-MailSession-javaMail-java.io.NotSerializableException: javax.mail.Session</title><link>http://www.blogjava.net/bluesky/archive/2005/12/13/23687.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Tue, 13 Dec 2005 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/13/23687.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/23687.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/13/23687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/23687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/23687.html</trackback:ping><description><![CDATA[<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">import&nbsp;java.util.Properties</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>import&nbsp;javax.mail.Session</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">import&nbsp;javax.naming.Context</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">import&nbsp;javax.naming.InitialContext</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">import&nbsp;javax.naming.NamingException</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>public&nbsp;class&nbsp;SendMail&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;ic&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;null</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;SendMail()&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Properties&nbsp;props</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;send()&nbsp;throws&nbsp;Exception&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使用JNDI查询Mail&nbsp;Session<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Hashtable&nbsp;ht&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;Hashtable()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;ht.put(Context.INITIAL_CONTEXT_FACTORY</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">weblogic.jndi.WLInitialContextFactory</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;ht.put(Context.PROVIDER_URL</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">t3://localhost:7001/slide/</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;</SPAN><SPAN style="COLOR: #008000">&nbsp;ic&nbsp;=</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;new&nbsp;InitialContext(ht)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ic&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;getInitialContext()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(Session)&nbsp;ic.lookup(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">mail/MailSession</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NamingException&nbsp;e)&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #800000">[]</SPAN><SPAN style="COLOR: #000000">)&nbsp;throws&nbsp;Exception&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMail&nbsp;sendMail&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;SendMail()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendMail.send()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">send&nbsp;ok</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Context&nbsp;getInitialContext()&nbsp;throws&nbsp;Exception&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">t3://localhost:7001</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;user&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">weblogic</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">weblogic</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;properties&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;null</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;new&nbsp;Properties()</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties.put(Context.INITIAL_CONTEXT_FACTORY</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">weblogic.jndi.WLInitialContextFactory</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties.put(Context.PROVIDER_URL</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;url)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(user&nbsp;!</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;null)&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties.put(Context.SECURITY_PRINCIPAL</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000">&nbsp;user)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties.put(Context.SECURITY_CREDENTIALS</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;null&nbsp;?&nbsp;</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">&nbsp;:&nbsp;password)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;InitialContext(properties)</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;e</SPAN><SPAN style="COLOR: #008000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>}<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>java.io.NotSerializableException: javax.mail.Session]<BR><BR>相关帖子<BR><BR><A href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=122&amp;threadID=10958&amp;tstart=1112">http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=122&amp;threadID=10958&amp;tstart=1112</A><BR><BR><A href="http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&amp;threadID=27136&amp;tstart=15http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=1&amp;threadID=1450&amp;tstart=1440">http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&amp;threadID=27136&amp;tstart=15<BR><BR>http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=1&amp;threadID=1450&amp;tstart=1440<BR></A><BR><FONT color=#ff1493>weblogic配置</FONT><BR><BR><FONT style="BACKGROUND-COLOR: #ff0000">服务-邮件-</FONT><SPAN class=dialog-info><FONT size=2><FONT style="BACKGROUND-COLOR: #ff0000">在此页中，您可以定义此邮件会话的配置。<BR></FONT><BR></FONT></SPAN>名称:MyMailSession<BR><SPAN class=dialog-label id=wl_control_weblogic_management_configuration_MailSessionMBean_JNDIName_label><STRONG><FONT style="BACKGROUND-COLOR: #a9a9a9" size=2>JNDI 名称</FONT></STRONG></SPAN><SPAN><STRONG><FONT size=2><FONT style="BACKGROUND-COLOR: #a9a9a9">:mail/MailSession<BR></FONT>属性</FONT></STRONG></SPAN><SPAN class=dialog-label><FONT size=2><STRONG>:<BR>mail.debug=true<BR>mail.smtp.port=25<BR>mail.smtp.auth=true<BR>mail.smtp.host=192.168.8.1<BR><BR></STRONG><SPAN class=dialog-help id=wl_control_weblogic_management_configuration_MailSessionMBean_Properties_help><FONT color=#333333>用来配置此邮件会话的属性。这些属性名是在 JavaMail API 设计规范中指定的。</FONT></SPAN><BR></FONT></SPAN><BR><BR><BR><BR><BR><img src ="http://www.blogjava.net/bluesky/aggbug/23687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-13 15:54 <a href="http://www.blogjava.net/bluesky/archive/2005/12/13/23687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]javamail发送邮件</title><link>http://www.blogjava.net/bluesky/archive/2005/12/13/23619.html</link><dc:creator>bluesky</dc:creator><author>bluesky</author><pubDate>Tue, 13 Dec 2005 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/bluesky/archive/2005/12/13/23619.html</guid><wfw:comment>http://www.blogjava.net/bluesky/comments/23619.html</wfw:comment><comments>http://www.blogjava.net/bluesky/archive/2005/12/13/23619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bluesky/comments/commentRss/23619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bluesky/services/trackbacks/23619.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: http://spaces.msn.com/members/tcjava//*在java版经常看到有人问如何用javamail发送邮件？如何接收邮件？如何访问多个文件夹等。问题零散，而历史的回复早已经淹没在问题的海洋之中。本人之前所做过一个java项目，其中包含有WebMail功能，当初为用java实现而对javamail摸索了一段时间，总算有点收获。看到论坛中的经常有此方面的问题，因此把我的...&nbsp;&nbsp;<a href='http://www.blogjava.net/bluesky/archive/2005/12/13/23619.html'>阅读全文</a><img src ="http://www.blogjava.net/bluesky/aggbug/23619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bluesky/" target="_blank">bluesky</a> 2005-12-13 11:41 <a href="http://www.blogjava.net/bluesky/archive/2005/12/13/23619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>