設(shè)計(jì)模式大概分為三種:1)創(chuàng)建型2)結(jié)構(gòu)型3)行為型.
          創(chuàng)建型模式:(如何創(chuàng)建對(duì)象)
          1.工廠模式(FACTORY METHOD PATTERN)提供了一個(gè)簡(jiǎn)單的決策類,他根據(jù)提供的數(shù)據(jù)返回一個(gè)抽象基類的多個(gè)子類中的一個(gè).
          2.抽象工廠模式(ABSTRACT FACTORY PATTERN)提供了一個(gè)創(chuàng)建并返回一系列相關(guān)對(duì)象的接口.他的主要目的是隔離要生成的具體類,這些類的實(shí)際類名隱藏才工廠類,客戶端根本不需要知道.
          3.單件模式(SINGLETON PATTERN)是指某個(gè)類只能有一個(gè)實(shí)例,他提供了一個(gè)訪問(wèn)該實(shí)例的全局訪問(wèn)點(diǎn).
          4.生成器模式(BUILDER PATTERN)將一個(gè)復(fù)雜對(duì)象的構(gòu)建與他的表示分開(kāi),這樣就能根據(jù)程序的需要?jiǎng)?chuàng)建不同的表現(xiàn)形式.他有點(diǎn)類似抽象工廠模式,兩者都返回由許多方法和對(duì)象組成的類,差別在于,生成器是根據(jù)提供給他的數(shù)據(jù)一步一步地創(chuàng)建一個(gè)復(fù)雜對(duì)象.
          5.原型模式(PROTOTYPE PATTERN)是先實(shí)例化一個(gè)類,然后拷貝或克隆該類來(lái)創(chuàng)建新的實(shí)例,可以用公有方法進(jìn)一步修改.他能根據(jù)需要克隆類,在運(yùn)行時(shí)添加或刪除類,問(wèn)題在于如果類早就存在,則不能改變他們來(lái)增加需要的克隆方法,另外,間接引用其他類的類也不能被真正克隆.

          結(jié)構(gòu)型模式:(如何組合對(duì)象)
          1.適配器模式(ADAPTER PATTERN)可以使一個(gè)類的接口匹配另外一個(gè)接口.
          2.組合模式(COMPOSITE PATTERN)對(duì)象的組合,他允許你構(gòu)建一棵由各種相關(guān)類組成的樹(shù),其中任何一個(gè)對(duì)象既可以是一個(gè)組合,也可以是一個(gè)葉子.
          3.代理模式(PROXY PATTERN)通常是一個(gè)簡(jiǎn)單對(duì)象,他代替一個(gè)比較復(fù)雜的稍后會(huì)調(diào)用的對(duì)象,而且實(shí)例化該對(duì)象代價(jià)比較高.
          4.享元模式(FLYWEIGHT PATTERN)用于共享對(duì)象,其中的每一個(gè)實(shí)例都不包含自己的狀態(tài),而是將狀態(tài)存儲(chǔ)在外部.把一部分的類數(shù)據(jù)移到類外部,在執(zhí)行方法時(shí)將數(shù)據(jù)傳遞進(jìn)來(lái).
          5.外觀模式(FACADE PATTERN)對(duì)客戶屏蔽了復(fù)雜的子系統(tǒng)組件,并為一般用戶提供了一個(gè)簡(jiǎn)單的程序接口,但他并沒(méi)有限制高級(jí)用戶在需要時(shí)使用深層的復(fù)雜的類.
          6.橋接模式(BRIDGE PATTERN)將對(duì)象的接口和他的實(shí)現(xiàn)分離,這樣就可以獨(dú)立的改變他們.
          7.裝飾模式(DECORATOR PATTERN)他可以動(dòng)態(tài)地給對(duì)象添加功能.他和外觀模式的區(qū)別在于外觀模式是將復(fù)雜系統(tǒng)隱藏在一個(gè)簡(jiǎn)單接口,而裝飾模式通過(guò)包裝一個(gè)類來(lái)增加功能.

          行為型模式:(如何在對(duì)象之間通信)
          1.職責(zé)鏈模式(CHAIN OF RESPONSIBILITY PATTERN)把請(qǐng)求從鏈中的一個(gè)對(duì)象傳遞到下一個(gè)對(duì)象,直到請(qǐng)求被響應(yīng).鏈中的每個(gè)對(duì)象都是"自治"的,他對(duì)其他對(duì)象一無(wú)所知,只判斷他本身能不能滿足請(qǐng)求,不能的話就轉(zhuǎn)到下一個(gè),但你必須知道鏈中的最后一個(gè)對(duì)象是哪一個(gè).
          2.命令模式(COMMAND PATTERN)用簡(jiǎn)單的對(duì)象表示軟件命令的執(zhí)行.他把一個(gè)申請(qǐng)?zhí)囟ú僮鞯恼?qǐng)求封裝到一個(gè)對(duì)象,并給這個(gè)對(duì)象一個(gè)眾所周知的接口.
          3.解釋器模式(INTERPRETER PATTERN)提供一種如何把語(yǔ)言元素包含在程序中的定義.
          4.迭代器模式(ITERATOR PATTERN)提供一種順序訪問(wèn)一個(gè)類中的一系列數(shù)據(jù)的方式,他允許使用一個(gè)標(biāo)準(zhǔn)接口順序訪問(wèn)一個(gè)數(shù)據(jù)列表或集合,而又不需知道數(shù)據(jù)內(nèi)部表示細(xì)節(jié).
          5.中介者模式(MEDIATOR PATTERN)定義了如何用一個(gè)對(duì)象簡(jiǎn)化對(duì)象之間的通信,使對(duì)象之間不必互相了解.
          6.備忘錄(MEMENTO PATTERN)定義了如何保存一個(gè)類實(shí)例的內(nèi)容以便以后能恢復(fù)他
          7.觀察者模式(OBSERVER PATTERN)定義了一種把改動(dòng)通知給多個(gè)對(duì)象的方式.
          8.狀態(tài)模式(STATE PATTERN)允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變時(shí)修改他的行為.
          9.策略模式(STRATEGY PATTERN)將算法封裝到類里.
          10.模板方法模式(TEMPLATE METHOD PATTERN)提供了算法的一個(gè)抽象定義.
          11.訪問(wèn)者模式(VISITOR PATTERN)在不改變類的前提下,為類添加多種操作.

          posted @ 2006-07-14 17:08 edsonjava 閱讀(219) | 評(píng)論 (0)編輯 收藏
           

          【摘 要】Axis本質(zhì)上就是一個(gè)SOAP引擎,提供創(chuàng)建服務(wù)器端、客戶端和網(wǎng)關(guān)SOAP操作的基本框架。Axis目前版本是為Java編寫的,不過(guò)為C++的版本正在開(kāi)發(fā)中。

           什么是SOAP?

            SOAP是一個(gè)基于XML的用于應(yīng)用程序之間通信數(shù)據(jù)編碼的傳輸協(xié)議。最初由微軟和Userland Software提出,隨著不斷地完善和改進(jìn),SOAP很快被業(yè)界廣泛應(yīng)用。

            什么是Axis?

            Axis本質(zhì)上就是一個(gè)SOAP引擎,提供創(chuàng)建服務(wù)器端、客戶端和網(wǎng)關(guān)SOAP操作的基本框架。Axis目前版本是為Java編寫的,不過(guò)為C++的版本正在開(kāi)發(fā)中。

            配置webservice具體步驟:

            1.安裝weblogic。

            2.配置一個(gè)web應(yīng)用,如“\\lijunjie\e$\software\bea\user_projects\domains\lijjdomain\applications\ cntapws “。

            3.從apache網(wǎng)站上下載axis-bin-1_2_1.tar.gz,解壓后copy到cntapws下面。

            4.打開(kāi)“http://localhost:7001/console“,配置cntapws 的web應(yīng)用。

            5.axis1.2和weblogic8.1有沖突,原因是weblogic 本身攜帶的webservice.jar使用的舊的javax.xml.soap.*,而不是像axis使用J2EE1.4新的版本。解決方案是在WEB -INF/weblogic.xml文件中如下的配置:

          <weblogic-web-app>
          <container-descriptor>
          <prefer-web-inf-classes>true</prefer-web-inf-classes>
          </container-descriptor>
          </weblogic-web-app>

            6.按 http://localhost:8080/axis/happyaxis.jsp地址,可以顯示你發(fā)布的webservice是否配置成功,如果顯示必須的包缺失,則你的webservice不能正常運(yùn)行。

            開(kāi)發(fā)webservice流程

            1.寫普通的java類,該類中有你要發(fā)布到webservice上的有關(guān)方法。

            2.配置server-comfig.xml, 把你要發(fā)布的方法寫入該文件。具體內(nèi)容如下:

          <?xml version="1.0" encoding="UTF-8"?>

          <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

          <globalConfiguration>

          <parameter name="adminPassword" value="admin"/>

          <parameter name="attachments.Directory" value="C:\eclipse\workspace\bookstore\WEB-INF\attachments"/>

          <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>

          <parameter name="sendXsiTypes" value="true"/>

          <parameter name="sendMultiRefs" value="true"/>

          <parameter name="sendXMLDeclaration" value="true"/>

          <parameter name="axis.sendMinimizedElements" value="true"/>

          <requestFlow>

          <handler type="java:org.apache.axis.handlers.JWSHandler">

          <parameter name="scope" value="session"/>

          </handler>

          <handler type="java:org.apache.axis.handlers.JWSHandler">

          <parameter name="scope" value="request"/>

          <parameter name="extension" value=".jwr"/>

          </handler>

          </requestFlow>

          </globalConfiguration>

          <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>

          <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>

          <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>

          <service name="Version" provider="java:RPC">

          <parameter name="allowedMethods" value="getVersion"/>

          <parameter name="className" value="org.apache.axis.Version"/>

          </service>

          <!--要配置的內(nèi)容start,注意每一個(gè)要發(fā)布成webservice的類都要配置成一個(gè)service如下à

          <service name="webserviceproxy" provider="java:RPC">

          <parameter name="className" value="com.copia.webservice.server.proxy.WebServiceProxy"/>

          <parameter name="allowedMethods" value="*"/>

          <!—具體某個(gè)方法說(shuō)明-->

          <operation name="login" returnType="ns:LoginOutServiceBean">

          <parameter name="branchNo" type="xsd:string"/>

          <parameter name="userId" type="xsd:string"/>

          <parameter name="password" type="xsd:string"/>

          <parameter name="certificateNo" type="xsd:string"/>

          </operation>

          <!—如果該方法的參數(shù)有基本類型和對(duì)象類型,則不要聲明,webservice能夠找到相關(guān)的類及方法-->

          <!—聲明涉及到的所有類及其父類,引用類,還有它們的相關(guān)類,類似與對(duì)象樹(shù)遍歷,某個(gè)類聲明缺失也會(huì)導(dǎo)致運(yùn)行失敗-->

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:LoginOutServiceBean"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.module.security.login.LoginOutServiceBean" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:User"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.client.User" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:GetBatchListInServiceBean"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.module.batch.service.GetBatchListInServiceBean" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:GetBatchListOutServiceBean"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.module.batch.service.GetBatchListOutServiceBean" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:BatchJobDefBean"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.module.batch.service.BatchJobDefBean" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:ValueObjectPage"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.voa.ValueObjectPage" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:ValueObjectColInfo"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.voa.ValueObjectColInfo" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:ValueObjectList"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.voa.ValueObjectList" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:PageInfo"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.voa.PageInfo" xmlns:ns="webserviceproxy"/>

          <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

          qname="ns:ValueObjectMetaData"

          serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

          type="java:com.copia.core.voa.ValueObjectMetaData" xmlns:ns="webserviceproxy"/>

          </service>

          <!--要配置的內(nèi)容endà

          <service name="AdminService" provider="java:MSG">

          <parameter name="allowedMethods" value="AdminService"/>

          <parameter name="enableRemoteAdmin" value="false"/>

          <parameter name="className" value="org.apache.axis.utils.Admin"/>

          <namespace>http://xml.apache.org/axis/wsdd/</namespace>

          </service>

          <transport name="local">

          <responseFlow>

          <handler type="LocalResponder"/>

          </responseFlow>

          </transport>

          <transport name="http">

          <requestFlow>

          <handler type="URLMapper"/>

          <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>

          </requestFlow>

          </transport>

          </deployment>

            3.在地址欄輸入http://localhost:7001/cntapws/services/webserviceproxy?wsdl,如沒(méi)有什么錯(cuò)誤,則表示你的webservice發(fā)布成功了。

            Java webservice客戶端編程

            1.啟動(dòng)你配置好的weblobic。

            2.進(jìn)入dos界面,在你的臨時(shí)目錄(任意目錄)下根據(jù)wsdl產(chǎn)生客戶文件,如下指令:

          E:\kk>java -Djava.ext.dirs=E:\software\bea\user_projects\domains\lijjdomain\appl

          ications\axis\WEB-INF\axislib org.apache.axis.wsdl.WSDL2Java http://localhost:7001/cntapws/services/webserviceproxy?wsdl即可在kk目錄下產(chǎn)生有關(guān)文件。

            3.把產(chǎn)生的文件copy到你的工程中,再寫一個(gè)webservice調(diào)用測(cè)試類,如下:

          public class TestWs {

          public static void main(String[] args) {

          WebServiceProxyService service = new WebServiceProxyServiceLocator();

          try {

          WebServiceProxy serviceProxy = service.getwebserviceproxy();

          User user = new User();

          user.setBranchNo("000001");

          user.setClerkNo("1004");

          GetBatchListInServiceBean in = new GetBatchListInServiceBean();

          in.setCurPageNo(1);

          String serviceName = "GetBatchListService";

          GetBatchListOutServiceBean out = (GetBatchListOutServiceBean)serviceProxy.getBatchListService(user, in, serviceName);

          BatchJobDefBean[] defBeans = out.getBatchJobDefBeans();

          for(int i = 0 ; i < defBeans.length ; i++){

          System.out.println(defBeans[i].getBatchName());

          }

          }catch(Exception ex){

          ex.printStackTrace();

          }

          }

          }

          posted @ 2006-07-14 10:41 edsonjava 閱讀(937) | 評(píng)論 (1)編輯 收藏
           
          ? Eclipse IDE 變得如此熱門,以至于出現(xiàn)在許多工作簡(jiǎn)歷中。但是,也正因?yàn)樗墓δ芊倍啵沟秒y于入手了。在這篇文章中, Sam Brodkin 分享了他最常用的一些Eclipse功能。他也提到了那些會(huì)讓你的手指動(dòng)的飛快的熱鍵組合。在工作的時(shí)候,人們會(huì)懷疑你是在打電玩。

            Eclipse最妙的地方是它的功能是如此的豐富。如果你找不到某項(xiàng)功能,要么是你沒(méi)有好好的去找,要么有一個(gè)插件可以實(shí)現(xiàn)它。Eclipse最糟的地方也是它的功能如此的豐富。擁擠的工具條,臃腫的菜單,以及配置對(duì)話框都讓我想起了拉比林特斯迷宮(譯者注:Minotau’s labyrinth,希臘神戶中的人身牛頭怪,住在Labyrinth迷宮中,吃人們供奉的童男童女,最后被Theseus殺死)(盡管配置對(duì)話框在Eclipse3.1中已經(jīng)好了很多)。甚至是有經(jīng)驗(yàn)的Eclipse程序員也是慢吞吞,笨手笨腳的。我觀察過(guò)無(wú)數(shù)的同事,當(dāng)試圖在Eclipse的navigation面板里找一個(gè)類的時(shí)候,不假思索的按下“Ctrl + Shift + T”(打開(kāi)型別(open type))。其實(shí),只要有意識(shí)的投入一點(diǎn)點(diǎn)時(shí)間,你也會(huì)不在笨手笨腳的,而成為熱鍵高手。

            精通Eclipse不單提高了你的效率,(我知道,按小時(shí)賺錢的簽約人更喜歡文本編輯器),對(duì)你的求職簡(jiǎn)歷也有好處。既然Eclipse已經(jīng)越來(lái)越多的出現(xiàn)在Java工作說(shuō)明上,那么在你的求職簡(jiǎn)歷上也絕對(duì)是個(gè)好詞。我把它放在我的個(gè)人簡(jiǎn)歷上,就在POJO(簡(jiǎn)單初始Java對(duì)象)和POJI(簡(jiǎn)單初始Java接口)的中間。越來(lái)越多的公司轉(zhuǎn)向Eclipse,因?yàn)樗赓M(fèi),而且為大多數(shù)程序員所接受。(除了那些少有的IntelliJ和Emacs的崇拜者)

            因此,你的簡(jiǎn)歷上并不都是幫助你提高編程效率的大話,在本文中,我將給你幾條Eclipse高效的建議。

            Eclipse的快捷鍵組合功能

            使用Eclipse的快捷鍵組合功能,讓你看起來(lái)像是在打電玩。特別是讓人想起《真人快打》(Mortal Combat)的感覺(jué)。要成為《真人快打》的高手,你必須記住大量的按鍵順序。比如,要使出Sub-Zero Skeleton Rip,你必須依次按下????和X鍵。這里的控制桿就是Ctrl,Alt,Shift,字母鍵,數(shù)字鍵和功能鍵的組合。

            讓我們按照使用頻率來(lái)看看我最愛(ài)用的一些熱鍵組合。(注:以下內(nèi)容在Eclipse3.02及一上版本通過(guò)測(cè)試)

            1. Control-Shift-T: 打開(kāi)類型(Open type)。如果你不是有意磨洋工,還是忘記通過(guò)源碼樹(shù)(source tree)打開(kāi)的方式吧。

            2. Control-Shift-R: 打開(kāi)資源(不只是用來(lái)尋找Java文件)。小提示:利用Navigator視圖的黃色雙向箭頭按鈕讓你的編輯窗口和導(dǎo)航器相關(guān)聯(lián)。這會(huì)讓你打開(kāi)的文件對(duì)應(yīng)顯示在導(dǎo)航器的層級(jí)結(jié)構(gòu)中,這樣便于組織信息。如果這影響了速度,就關(guān)掉它。

            3. F3: 打開(kāi)申明(Open declaration)。或者,利用Declaration Tab(在Java視圖模式下,選擇Windows --> Show View -- > Declaration)。當(dāng)你選中代碼中的一個(gè)方法,然后按這個(gè)按鍵,它會(huì)把整個(gè)方法在申明方框里顯示出來(lái)。

            4. Alt-left arrow: 在導(dǎo)航歷史記錄(Navigation History)中后退。就像Web瀏覽器的后退按鈕一樣,在利用F3跳轉(zhuǎn)之后,特別有用。(用來(lái)返回原先編譯的地方)

            5. Alt-right arrow: 導(dǎo)航歷史記錄中向前。

            6. Control-Q: 回到最后依次編輯的地方。這個(gè)快捷鍵也是當(dāng)你在代碼中跳轉(zhuǎn)后用的。特別是當(dāng)你鉆的過(guò)深,忘記你最初在做什么的時(shí)候。

            7. Control-Shift-G: 在workspace中搜索引用(reference)。這是重構(gòu)的前提。對(duì)于方法,這個(gè)熱鍵的作用和F3恰好相反。它使你在方法的棧中,向上找出一個(gè)方法的所有調(diào)用者。一個(gè)與此相關(guān)的功能是開(kāi)啟“標(biāo)記”功能(occurrence marking) 。選擇Windows->Preferences->Java-> Editor-> Mark Occurrences,勾選選項(xiàng)。這時(shí),當(dāng)你單擊一個(gè)元素的時(shí)候,代碼中所有該元素存在的地方都會(huì)被高亮顯示。我個(gè)人只使用“標(biāo)記本地變量”(Mark Local Variables)。注意:太多的高亮顯示會(huì)拖慢Eclipse。

            8. Control-Shift-F: 根據(jù)代碼風(fēng)格設(shè)定重新格式化代碼。我們的團(tuán)隊(duì)有統(tǒng)一的代碼格式,我們把它放在我們的wiki上。要這么做,我們打開(kāi)Eclipse,選擇Window?Preferences?Java?Code Style,然后設(shè)置Code Formatter,Code Style和Organize Imports。利用導(dǎo)出(Export)功能來(lái)生成配置文件。我們把這些配置文件放在wiki上,然后團(tuán)隊(duì)里的每個(gè)人都導(dǎo)入到自己的Eclipse中。

            9. Control-O: 快速概要(quick outline)。通過(guò)這個(gè)快捷鍵,你可以迅速的跳到一個(gè)方法或者屬性,只需要輸入名字的頭幾個(gè)字母。

            10. Control-/: 對(duì)一行注釋或取消注釋。對(duì)于多行也同樣適用。

            11. Control-Alt-down arrow: 復(fù)制高亮顯示的一行或多行。

            12. Alt-down arrow: 將一行或多行向下移動(dòng)。Alt-up arrow會(huì)向上移動(dòng)。

            其他的熱鍵在菜單里有。你可以通過(guò)按下Control-Shift-L(從3.1版本開(kāi)始),看到所有快捷鍵的列表。按下Control-Shift-L兩次,會(huì)顯示熱鍵對(duì)話框(Keys Preferences dialog),你可以在這里自己設(shè)置熱鍵。我歡迎你在Talkback部分發(fā)表你的Eclipse提示。
          他的Eclipse竅門

            我總結(jié)了幾個(gè)相關(guān)的小竅門:

            鎖定命令行窗口:在命令行視圖中(Window Show View Other Basic Console),試試看用滾動(dòng)鎖定按鈕來(lái)鎖定控制臺(tái)輸出不要滾屏。

            使用Ant視圖:在我的Java或Debug模式下,我喜歡顯示出Ant視圖,這樣我就可以迅速的運(yùn)行Ant任務(wù)。通過(guò)Window ? Show View ? Other ? Ant可以找到該視圖。把Ant視圖放在屏幕的一角, 通過(guò)“添加編譯文件(Add Buildfiles)”按鈕來(lái)添加build.xml文件。在3.1版本中,甚至支持Ant調(diào)試腳本語(yǔ)言。

            自動(dòng)遍歷一個(gè)集合:for + Control-Space: 如果你還不知道,那么你應(yīng)該記住Control-Space是自動(dòng)完成功能。在Eclipse中,你還可以自動(dòng)完成結(jié)構(gòu)。在一個(gè)數(shù)組或集合范圍內(nèi),試試看輸入“for”然后按下Control-Space鍵。Eclipse會(huì)問(wèn)你你想要遍歷哪一個(gè)集合然后自動(dòng)完成循環(huán)代碼。

            使用分級(jí)布局:在包瀏覽視圖(Package Explorer view)中默認(rèn)的布局(扁平式)方式讓我困惑,它把包的全名顯示在導(dǎo)航樹(shù)(navigation tree)中。我更喜歡我源碼的包和文件系統(tǒng)視圖,在Eclipse中叫做分級(jí)布局(Hierarchical Layout)。要切換到這種模式,點(diǎn)擊包瀏覽視圖中向下的按鈕,選擇布局(Layout),然后選擇分級(jí)(Hierarchial)。

            一次顯示多個(gè)文件:你可以一次瀏覽多個(gè)文件。把不在激活狀態(tài)的編輯窗口拖到激活窗口的底部或側(cè)邊的滾動(dòng)條上,就可以打開(kāi)該編輯窗口。這是我能描述該竅門的最好方式了。

            同時(shí)打開(kāi)兩個(gè)Eclipse:要將改動(dòng)從一個(gè)CVS分支上合并到另外一個(gè)上,我喜歡通過(guò)同時(shí)打開(kāi)兩個(gè)工作目錄(Workspace)不同Eclipse來(lái)實(shí)現(xiàn)。這樣我可以通過(guò)比較CVS上的最新版本看到所有的變化(右鍵單擊工程,然后選擇Compare with ? Lastest from HEAD)然后把每一個(gè)變化都合并到另外一個(gè)CVS分支上。啟動(dòng)多個(gè)Eclipse的最簡(jiǎn)單的方法是利用Eclipse Launcher。

            Implementors插件:安裝一個(gè)能夠跳到一個(gè)接口的實(shí)現(xiàn)的插件。如果你是個(gè)dependency injection 粉絲,或者正在基于編寫優(yōu)良的接口工作,那么你需要一個(gè)這樣的插件來(lái)加速代碼導(dǎo)航。 你可以在SourceForge找到這個(gè)插件。

            就像Modest Mouse樂(lè)隊(duì)的歌曲“Out of Gas”唱的,“意見(jiàn)就像小貓,我已經(jīng)送給別人”。這些是我的Eclipse小貓,希望你能給它找一個(gè)溫暖的家。


          posted @ 2006-07-14 10:35 edsonjava 閱讀(374) | 評(píng)論 (1)編輯 收藏
           
          Web Service是最近幾年比較火的一個(gè)東西,它帶來(lái)了一大堆的新名詞,所以顯得比較炫。看透其華而不實(shí)的表面,它也就不再神奇。下面的討論均以Java為參考。

          1 訪問(wèn)一個(gè)Web Service實(shí)際上可以看作調(diào)用一個(gè)函數(shù),唯一不同的就是這個(gè)函數(shù)是遠(yuǎn)程的,這么一說(shuō),它和RMI就沒(méi)有什么本質(zhì)的區(qū)別了。
          既然是一個(gè)函數(shù),當(dāng)然要有函數(shù)的聲明了,完成這個(gè)工作的就是WSDL,它詳細(xì)的定義函數(shù)的原型,包括函數(shù)名、入口參數(shù)、出口參數(shù),這就是WSDL中opertion完成的工作。
          既然是一個(gè)遠(yuǎn)程的函數(shù),還要涉及與遠(yuǎn)程地址的一個(gè)綁定,這是WSDL中service的任務(wù)。
          Axis是一個(gè)可以通過(guò)WSDL生成相應(yīng)訪問(wèn)代碼的開(kāi)發(fā)包,JBuilder中將它集成了進(jìn)去,通過(guò)Wizard的方式簡(jiǎn)化了原本需要在命令行中手工完成的操作。

          2 既然是遠(yuǎn)程訪問(wèn),就一定要有一個(gè)訪問(wèn)協(xié)議,Web Service的訪問(wèn)協(xié)議就是SOAP,SOAP建立在XML之上,不同的就是對(duì)XML原本沒(méi)有限制的格式加上了一些限制,需要有envelope,在envelope中,還要分header和body。
          如果利用SOAP開(kāi)發(fā)Web Service的程序,那就需要根據(jù)WSDL的定義來(lái)自行組裝SOAP包,這顯然要比利用WSDL直接面向Web Service開(kāi)發(fā)要復(fù)雜一些。
          JAXM是一個(gè)利用SOAP進(jìn)行通信的開(kāi)發(fā)包,它簡(jiǎn)化了SOAP消息的打包過(guò)程。

          3 SOAP是建立在XML之上的,那么顯然XML的開(kāi)發(fā)包同樣適合于SOAP。
          在這個(gè)層次上開(kāi)發(fā)Web Service,除了要完成上一層的工作外,還要自行按照SOAP的格式組裝SOAP消息,這顯然又增加了工作量。
          XML的開(kāi)發(fā)工具就比較多了,從最簡(jiǎn)單的SAX和DOM到DOM4J、JDOM,還有不少XML到對(duì)象綁定的工具,如JAXB、Castor等等。
          其實(shí),不考慮Web Service,完全用XML做通信協(xié)議的情況也并不少見(jiàn)。知曉XML-RPC的存在,就不難理解了XML做通信的含義了。

          截至到這里所討論的內(nèi)容,Sun提供了JWSDP(Java Web Service Developer Pack),其中包含從XML解析到WSDL生成的全套解決方案。

          4 上面討論的所有東西實(shí)際上都還停留在傳遞消息的內(nèi)容上,并未涉及通信的過(guò)程。不要一看到Web Service的Web就想當(dāng)然認(rèn)為它只能通過(guò)HTTP來(lái)傳輸。前面的討論可以看出,所有的消息內(nèi)容與傳輸并無(wú)直接關(guān)系,所以,無(wú)論是以HTTP傳輸,還是SMTP或是自定義的協(xié)議都沒(méi)有問(wèn)題。
          在這個(gè)層次上開(kāi)發(fā)Web Service,前面的種種險(xiǎn)阻之外,還要完成對(duì)XML的手工解析工作。
          這里還是以最常見(jiàn)的HTTP方式來(lái)討論。
          HTTP的開(kāi)發(fā)就將Server和Client區(qū)別對(duì)待,Server的實(shí)現(xiàn)通常的選擇是Servlet,讓W(xué)eb Server替我們完成HTTP協(xié)議的解析可以省去我們很多的作。Client的實(shí)現(xiàn)可以選擇JDK自帶的Http Client,Apache的Jakarta項(xiàng)目下的Commons子項(xiàng)目也提供了一個(gè)HttpClient。

          5 無(wú)論是HTTP還是SMTP,抑或是自定義協(xié)議,歸根結(jié)底都是應(yīng)用級(jí)的協(xié)議,底層的實(shí)現(xiàn)都是由Socket完成。到了這個(gè)層次基本就是原始時(shí)代了,什么都沒(méi)有,一切都要手工完成。
          在這個(gè)層次上開(kāi)發(fā)Web Service,所有前面的困難都要一一經(jīng)歷,此外,還有協(xié)議的開(kāi)發(fā)等待著不幸至此的人們。
          到了這里,也不需要其它的工具了,JDK自帶的Socket可以保打天下。

          6 還想往下嗎?再往下就是操作系統(tǒng)的實(shí)現(xiàn)了,Java的平臺(tái)無(wú)關(guān)就失去了意義,也超出了我目前所了解的范圍,到此打住吧!

          前面所提及應(yīng)該算是Web Service的一個(gè)基本知識(shí)結(jié)構(gòu),這里并沒(méi)有討論UDDI等等的內(nèi)容,一來(lái)我對(duì)它并不了解,二來(lái)那應(yīng)該屬于應(yīng)用,不應(yīng)該算Web Service實(shí)現(xiàn)中。

          雖然我們可能不會(huì)從最下層開(kāi)發(fā)Web Service,但遇到底層的問(wèn)題的情況卻在所難免。
          我就曾經(jīng)在開(kāi)發(fā)一個(gè)Web Service應(yīng)用的時(shí)候,被人抓住HTTP頭中的SOAPAction大小寫與某個(gè)所謂的規(guī)范不同,我查了半天HTTP規(guī)范和SOAP規(guī)范,知道了HTTP是區(qū)分大小,而SOAPAction就是應(yīng)該這么寫,據(jù)理力爭(zhēng),指出所謂規(guī)范的錯(cuò)誤。

          經(jīng)過(guò)前面的討論,我們可以看出,Web Service并沒(méi)有什么神秘可言,所有的東西都是建立在已有東西的基礎(chǔ)之上。技術(shù)的發(fā)展不會(huì)是無(wú)中生有,只會(huì)是一個(gè)更好的解決方案而已,在追新求變之前,一個(gè)比較牢固的基礎(chǔ)才是最重要

          posted @ 2006-07-12 21:19 edsonjava 閱讀(187) | 評(píng)論 (0)編輯 收藏
           
          Jboss自帶均衡器的配置

          將文件夾%jboss%\docs\examples\varia\loadbalancer\loadbalancer.sar拷貝到%jboss%\ server\all\deploy下,并且修改loadbalancer.sar\loadbalancer.sar\META-INF\jboss- service.xml,在<host>標(biāo)簽中類出所有節(jié)點(diǎn),在<sticky-session>標(biāo)簽中指定是否使用粘性 session。配置完成。

          該均衡器的缺點(diǎn)是負(fù)載能力相對(duì)不高,配置參數(shù)太少,比如無(wú)法指定不同節(jié)點(diǎn)的負(fù)載加權(quán),所以后面都以mod_jk為例,不再講解jboss自帶的負(fù)載均衡器的內(nèi)容。


          負(fù)載均衡的配置基本完成,啟動(dòng)jboss,其中過(guò)程中會(huì)列出DefaultPatition中所有的節(jié)點(diǎn):

          run.bat -c all
          2、session sticky配置

          apache 應(yīng)該會(huì)以粘性session的方式分發(fā)請(qǐng)求。部署一個(gè)應(yīng)用測(cè)試一下,你會(huì)發(fā)現(xiàn)粘性session沒(méi)有起作用。因?yàn)槲覀冞€沒(méi)有給jboss配置jvm路由 ( jvmRoute),apache就無(wú)法知道究竟哪些session是屬于哪個(gè)節(jié)點(diǎn)的。我們繼續(xù)往下:

          修改server1機(jī)器上的jboss的配置文件:%jboss%\server\all\deploy\jbossweb-tomcat55.sar\ META-INF\ jboss-service.xml

          在110行有:<attribute name="UseJK">false</attribute>,將它改為true。值得注意的是在這行標(biāo)簽上面有一段注釋,要求你在server.xml中必須有:
          Engine name="jboss.web" jmvRoute="Node1" defaultHost="localhost"

          請(qǐng)注意這里有一個(gè)氣死人不償命的小bug,jboss的官方文檔把 jvmRoute寫成了jmvRoute,就是v和m兩個(gè)字母的顛倒讓我郁悶了三天,翻遍了jboss.com和theserverside.com。都是直接拷貝的錯(cuò),吐血吐到脫水啊。

          下面需要修改server1上的%jboss%\server\all\deploy\jbossweb-tomcat55.sar\ server.xml,在32行左右有:


          <Engine name="jboss.web" defaultHost="localhost">

          給它增加一個(gè)jvmRoute屬性:


          <Engine jvmRoute="server1" name="jboss.web" defaultHost="localhost">

          請(qǐng)注意,jvmRoute的值必須和mod_jk中的節(jié)點(diǎn)名字正確對(duì)應(yīng),否則無(wú)法正確路由。Cluster中的所有節(jié)點(diǎn)都應(yīng)該做相應(yīng)的配置。

          Jboss的配置完成了,下面需要在你的web應(yīng)用中修改配置文件,讓它支持集群。

          在WEB-INF\web.xml中加入屬性: <distributable/>

          Ok,基于用戶的cluster完成了,每個(gè)用戶會(huì)綁定都某個(gè)節(jié)點(diǎn)上進(jìn)行交互。這種綁定是如何完成的呢?原來(lái)apache把客戶分發(fā)到節(jié)點(diǎn)后,該節(jié)點(diǎn)會(huì)在用戶的session id后面加上此節(jié)點(diǎn)的路由名稱,變成這個(gè)樣子:

          Efdfxxd98daja87daj76da2dka**,server1

          有了這個(gè)標(biāo)志,就能分辨該session屬于哪個(gè)節(jié)點(diǎn)。

          3、session replication配置

          下面要做的是基于request的cluster,也就讓各個(gè)節(jié)點(diǎn)之間互相復(fù)制session狀態(tài)。有兩種復(fù)制模式,同步與異步。使用同步的方式, jboss會(huì)把session復(fù)制的操作和對(duì)request的響應(yīng)放到一個(gè)應(yīng)用事務(wù)(application transaction),session 復(fù)制完成后才去處理request。異步復(fù)制則發(fā)送session復(fù)制的消息后馬上處理request,session復(fù)制則會(huì)稍有延遲。但是在多框架的 web頁(yè)面中,這樣的集群方式會(huì)有問(wèn)題。由于frame在同一時(shí)間發(fā)出多個(gè)request,會(huì)造成一些混亂,這也是采用基于用戶的集群方式的原因之一。

          JBoss 4.0.2 中采用了Jboss cache來(lái)實(shí)現(xiàn)session復(fù)制,實(shí)際上就是一個(gè)分布式緩存,由于session id中包含了jvm route,所以能夠分辨session屬于哪個(gè)節(jié)點(diǎn)。Session的更新類似于hibernate中的樂(lè)觀鎖,有了更新之后就讓session的版本號(hào)增加,其他節(jié)點(diǎn)通過(guò)對(duì)比版本號(hào)來(lái)決定是否同步session狀態(tài)。

          配置session replication首先需要編輯
          %jboss% server\all\deploy\jbossweb-tomcat55.sar\META-INF\ jboss-service.xml,88行左右有:


          <attribute name="SnapshotMode">instant</attribute>

          這就是剛才提到的復(fù)制模式,instant為立即復(fù)制,如果設(shè)為interval 那么系統(tǒng)會(huì)在延遲一段時(shí)間再進(jìn)行復(fù)制,時(shí)間長(zhǎng)度在< attribute name="SnapshotInterval">2000</attribute>中指定,單位是毫秒。

          單獨(dú)配置這一個(gè)地方還不夠,在%jboss% server\all\deploy\ tc5-cluster-service.xml中有:


          <attribute name="CacheMode">REPL_ASYNC</attribute>

          這里才真正決定復(fù)制是同步的還是異步的,可以指定為REPL_ASYNC(異步)或者REPL_SYNC(同步)。

          在這個(gè)文件下面一點(diǎn),還有一個(gè)config標(biāo)簽,里面指定了各個(gè)節(jié)點(diǎn)在進(jìn)行session復(fù)制的時(shí)候如何通信,有udp和tcp兩種可選,如果使用udp方式,那么應(yīng)該將udp的lookback屬性指定為true,因?yàn)閣indows上有一個(gè)叫做media sense的東西會(huì)影響 udp multicast。注意如果你不了解multi address的ip規(guī)則,請(qǐng)不要隨便修改mcast_addr的值。如果采用tcp方式的話,應(yīng)該指定bind_addr的值為本機(jī)ip,并且在TCPPING標(biāo)簽的initial_hosts屬性中列出所有節(jié)點(diǎn),格式是”機(jī)器名[端口號(hào)]”,比如在我們的例子中,就應(yīng)該這樣配置tcp(以其中一個(gè)節(jié)點(diǎn)為例):


          <config><TCP bind_addr="172.16.0.116" start_port="7810" loopback="true"/><TCPPING initial_hosts="172.16.0.116[7810],172.16.32.88[7810]" port_range="3" timeout="3500"num_initial_members="3" up_thread="true" down_thread="true"/><MERGE2 min_interval="5000" max_interval="10000"/><FD shun="true" timeout="2500" max_tries="5" up_thread="true" down_thread="true" /><VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false" /> ? <pbcast.NAKACK down_thread="true" up_thread="true" gc_lag="100" ? ? ? retransmit_timeout="3000"/> ? <pbcast.STABLE desired_avg_gossip="20000" down_thread="false" up_thread="false" /> ? <pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="false"print_local_addr="true" down_thread="true" up_thread="true"/><pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/></config>

          JBoss的clustering版主建議盡量使用udp。不過(guò)在Sobey內(nèi)部,建議使用tcp方式,經(jīng)測(cè)試可能有不明物體在影響udp通信,導(dǎo)致Timeout異常。

          在%jboss%\ server\all\deploy\ cluster-service.xml中也有關(guān)于udp和tcp的配置信息,在4.0以前版本的jboss中,會(huì)以這個(gè)文件為主配置,4.0以后都以tc5-cluster-service.xml為主配置。

          Jboss的配置完成了,最后需要在web應(yīng)用中增加配置信息,控制session復(fù)制的粒度。在WEB-INF\ jboss-web.xml中增加以下內(nèi)容:


          <replication-config> ? <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger> ? <replication-granularity>SESSION</replication-granularity> </replication-config>

          其中replication-trigger是指定哪些操作引發(fā)session的版本更新,它的取值有:


          SET_AND_GET ? ? SET_AND_NON_PRIMITIVE_GETSET

          replication-granularity是復(fù)制粒度,可以取session或attribute。如果取為attribute有可能導(dǎo)致復(fù)制失敗,這是目前版本的jboss cache的一個(gè)bug,等待修正。

          部署項(xiàng)目,測(cè)試,如果配置沒(méi)有問(wèn)題,可以在%jboss%\0server\all\log\server.log中發(fā)現(xiàn)類似于這樣的信息:


          DEBUG [org.jboss.web.tomcat.tc5.session.JBossCacheManager] check to see if needs to store and replicate session with id Im9-qpuaXppMS+xXwE3M+Q**.server1 DEBUG [org.jboss.web.tomcat.tc5.session.ClusteredSession] processSessionRepl(): session is dirty. Will increment version from: 20 and replicate.

          Session replication配置的成功率比較低,情況也很復(fù)雜,請(qǐng)仔細(xì)操作。
          posted @ 2006-07-12 14:53 edsonjava 閱讀(459) | 評(píng)論 (0)編輯 收藏
           
               摘要: 在Oracle中存取BLOB對(duì)象實(shí)現(xiàn)文件的上傳和下載 最近做一個(gè) J2EE 項(xiàng)目,需要在 JSP 頁(yè)面實(shí)現(xiàn)對(duì)文...  閱讀全文
          posted @ 2006-07-03 17:59 edsonjava 閱讀(214) | 評(píng)論 (0)編輯 收藏
           
               摘要: 在Oracle中存取BLOB對(duì)象實(shí)現(xiàn)文件的上傳和下載 最近做一個(gè) J2EE 項(xiàng)目,需要在 JSP 頁(yè)面實(shí)現(xiàn)對(duì)文...  閱讀全文
          posted @ 2006-07-03 17:59 edsonjava 閱讀(1431) | 評(píng)論 (0)編輯 收藏
           
          DB2的DRIVER分為四種
          以下文章有介紹
          http://www-128.ibm.com/developerworks/cn/db2/library/techarticles/0402chenjunwei/0402chenjunwei.html

          不建議使用db2java.zip裡的COM.ibm.db2.jdbc.app.DB2Driver這個(gè)驅(qū)動(dòng)
          原因在於使用此驅(qū)動(dòng)時(shí),必須要先行安裝DB2 Administrator Client,然後才有能力去Catalog DB進(jìn)來(lái),所以連結(jié)的URL就如下
          jdbc:db2:資料庫(kù)名稱

          建議使用db2jcc.jar裡的com.ibm.db2.jcc.DB2Driver這個(gè)驅(qū)動(dòng)
          不需要另外安裝DB2 Client即可進(jìn)行資料庫(kù)連線,連結(jié)URL如下
          jdbc:db2://DB2主機(jī)HOST:50000/資料庫(kù)名稱

          實(shí)際測(cè)試上也證實(shí)db2jcc.jar的驅(qū)動(dòng)比較OK
          但是使用db2jcc.jar有一點(diǎn)必須十分注意
          就是class path裡必須要多一個(gè)JAR
          這個(gè)JAR的檔名為db2jcc_license_cu.jar
          主要是用於辯識(shí)DB2的授權(quán),沒(méi)有它也是無(wú)法驅(qū)動(dòng)的

          說(shuō)到這裡...似乎還沒(méi)有提到DB2的DRIVER要去那裡下載
          其實(shí)它不用下載,就在安裝DB2的INSTANCE底下
          例如: DB2安裝在C:\IBM\SQLLIB
          這個(gè)目錄下有個(gè)名為java的目錄
          相信它有您需要的所有JAR檔

          舉UNIX的例子來(lái)說(shuō)
          /home/db2inst1/sqllib/java/下就是放這些JAR檔的路徑
          posted @ 2006-06-23 09:26 edsonjava 閱讀(452) | 評(píng)論 (0)編輯 收藏
           

          jscript.encode這個(gè)是一個(gè)流傳已經(jīng)很久的加密方式,下面的html頁(yè)面,不解密的話你可以看懂么?

          提供一個(gè)在線解密加密的頁(yè)面:

          http://www.aspxuexi.com/forfun/functions/jsencode.htm

          如下就是原文件了。如果在線無(wú)法進(jìn)行加密解密的話,可以將下面的html文件另存為html文件后執(zhí)行。

          參考javascript加密和解密:http://www.aspxuexi.com/script/2006-5-20/javascript_encode.htm

          <HTML><HEAD><TITLE>JScript.Encode在線加密解密|asp學(xué)習(xí)網(wǎng)提供</TITLE>
          <META http-equiv="Content-Type" content="text/html; charset=gb2312">
          <script language="JScript.Encode">
          #@~^khQAAA==@!eOR@#@&6Ex1YbGx,/^Dx^G9+`kSV*@#@&PnUm{xh~b^Ob\n(}8LmOcr?m.raYrxT Ax^KNDJ*i@#@&DY;D?PnU1R2?^W9+?1.rwDsbVn`E r_s~kS!BVQE1Dk2Or#I@#@&N@#@&@#@&@#@&\lMPUPb:2mZ}nem&1n`PP{PFZT@#@&7lMPjK)PA{]2z9SA1~x,F!q@#@&\CD,j:bPA{G2Z}fA~',FT @#@&-CMP?:)KA{jg3jZznAPxPqT2@#@&@#@&-lMP2r13{nU1W[k?L,'~?+SPbMDmz`@#@&q~, S~Z~P8SPy~PZS~ BPZ~~!S~y~~!B~ BPqS,!~~+BPT~@#@&8~~Z~, ~,!B~FBPq~, S~Z~PZSPy~P8S~!BPy~~!S~Z~~ B@#@&8~~qBP!S~y~~!B~y~~Z~,F~,!B~FBPq~, S~Z~P8SPZ~PyS@#@&8~,!SP+S,!SP8SP8~~+BP!S~Z~~FB~8~~y~,!~,FB~!BP+@#@&#@#@&@#@&\m.PMlhGCOl,',xnh~)MDCXv@#@&Z6*B!6f{B!avOS,!al!B!6F2BT6yZSPZ6++B!6l)~Z6vlS~!Xcz~T6*XB!aGyS@#@&!a8~!afz~T6l$BPTX*A~!XGOS!Xv~,!aXG~!XX,B!6FXSPZ6lAS!a+F~T6W/~@#@&TaW ~TaFvS!X*l~~Z6+!~Z6+f~Z6{vBPTay&~Zavy~!X+)~,!XvX~TaWfS!X*&B@#@&TX*sSTX*q~Za2&S,!XG2B!XX&B!acy~~TXcsBT6l ~Za+!BPZ6X STX T~Zav2~@#@&Z6G)SZ6+vBTXc)BPZ6 8~Za*W~T6lbS~Z6c+S!XGFBTa&R~,!a TSZ6+ABT6F,S@#@&!6+B!av+SZ6fy~,!6+&BT6ybS!X*{S,!6y)~Z6*RST6+ZBPT6{B!aGwS!X $S@#@&!a*F~T6F$B!aWvBP!X lS!X&T~Z6X+BP!X+ZB!62qS!Xcw~~!a+O~T6+/~Z6f9B@#@&Ta+,S!X*O~TXGZ~PZ62o~Z6fsB!afw~PZa F~!X{0~Z6FASPTa2sS!XfsB!afw~@#@&TXv{~ZalsSZ6lF~,!XfsB!a&w~Ta2s~,T6+ ~Za+,B!XG)~~TXcq~Za W~TaF2~@#@&Z6XbBTX oB!X&ABPZav+~T62,STXcGB~!X& BTa&2~Z6*FS~Z6{&BT6+sSTXGGS@#@&!acGSZ6+8~Z6*+~,T6W&S!XGXSZ6*wSPZ6G8ST6y%B!a S,!a&OS!Xc+SZ6G0S@#@&T6F/B!aWvB!6+2B~!X*f~Z6*)B!6+*~,!6W0S!X*;~T6{*BPT62q~Z6*0B!6{B@#@&!X{y~TX&+~!XGGSPZ62B!a*~~!X%BP!X{T~Z6FfS!afl~~!X*,B!aXG~!a+y~@#@&Za2sSZ6+b~Z6lX~,!ac~~Tal!~Za&z~PZabB!Xv1~Ta+!SPZa A~Tay&~Ta+bS@#@&TXGoB!X!,B!X{FBPT6y%STXG!BT6+s~,Ta&l~Z6*STXc1~,T6FfSTXGcSTX*/~@#@&Z6+W~Z6 ;~Za*G~~!X 9SZ6GFS!X GB~T6lcB!ac*SZ6X,B~!X&{SZ6&oSZ6+*B@#@&!aFAB!6+fBT6FZSPZ6f9B!6F/~Z6 2S~!Xv;~T6*fB!avGSPZ6f*B!6f0B!a RS@#@&TXvG~!X*AS!X&q~,!a*A~!XXAB!621SPZ6yAS!aA~T6Fo~,!afZ~!aXF~T62B@#@&Z6+s~Z6W/~Z6XcBPTaFc~Za&W~!Xf*~,!Xv$~TaF S!X BPTaWZ~Tay*S!X*A~@#@&!X&&B!XXvB!a&Z~~TX*vBT6F&~ZaX2BPZ6fbSTXv0~ZaG2~~TXG%STX*X~ZaZ,S@#@&Z6*F~ZacF~T6WAS~Z6GFS!X& BTav8~,!a&$SZ6f*BT6ycS~Z6c*SZ6+2BTXc9B@#@&!6ysBT6+cS!Xv$S,!6l1~Z6cwST6WcBPT6*XB!a&~S!X qS,!6X/B!a GSZ6fF~@#@&!XvRS!Xcq~Z6XfBP!XfvB!6+qS!X*R~~!aXR~T6F)~Z6*0BP!a{O~T6y+B!ay2B@#@&Z6Z1~Z6!B!aXZ~PZaGl~!X$~Z6yfSPTa2%S!X*2B!a+O~PTal*S!XfG~TX&w@#@&*@#@&@#@&7l.PDDCUk0WMh+9P',Unh,bMDCXcb@#@&WWM~`7l.~b'!I~b@!fi,r3_b,YMlxk0K.:N,kYPx~?+h,)DMlXvb@#@&6WMPc\C.,kx&8IPb@!xqyvi~r3_bP6GMPc7lMPL{!p~L@!&IPN_Qb,YDmU/6WDsn[$NT]DCh9CDl,`bR&8#~M,&PQ~NTDP{~vkx{&8#PQPO~),k@#@&@#@&-CMPNbLkD/P{~U+SPzD.lzc*@#@&0K.Pv\C.,k'TI,k@! +I,kQ3#@#@&?@#@&9robYd$rbE 1tlM/W9+bDcT#3kYPxPr@#@&NrobO/]JCEcmtC.;W[+zOv!b3kYP',k3+v@#@&N@#@&0G.,`\m.Pb'!p~r@!8!pPr_Qb,NrobO/]JTEcmtC.;W[+zOv!b3kYP',k3X @#@&[kTkOd]!6y8T,'P++@#@&9kTkO/,TX WT,xP+&@#@&@#@&0;U1YrW?~!xnkmmw+vm4CD*@#@&?@#@&-CMP+k^la+/,x~J[[eeyJ@#@&7l.Pdmmwn[,'PEwM-U@!@*@$r@#@&@#@&b0Pvm4CDcm4lMZG[bYvT#,@*P8+#,DY;DU~1tCD@#@&k6Pcnkml2nkRrx9nXrWvm4lD*PexP FbPM+O;MxPdmmw+9 dE(/DDc+d^mwn/crx9+a66`m4CM#SP8b@#@&.Y!Dx,JQE@#@&8@#@&@#@&W;?mYbGx,N+1G[+~lk+ccdDDrxTb@#@&?@#@&7lD~-mV~',T@#@&-mV,_',`9robYd$kY.r?oRk;4kYDvTSF*R1tCD/G9+)YvT#YP@!@!, #@#@&7lsP3x,`[bobY/]/D.k?o /!4dOM`FBq#cmtm./W9+zYc!bD,@*@*PWb@#@&\Cs,_'~c9kLkDd]/OMk?oRkE(dYM`q~8# ^4lD;GNbYvTbT,[,!a0b~@!@!~Fy@#@&7ls~3'Pcc9kLkDd]/OMk?oRkE(dYM`+~8# ^4lD;GNbYvTbT,@*@*P+#~@!@!P0#@#@&\mV~Q{P`c[borYk,kY.bxTR/!4kODv SF*R^4mDZK[+zY`ZbDPLPZ6f#~@!@!P+ *@#@&7ls~3'Pc[borYk,kY.bxTR/!4kODv&SF*R^4mDZK[+zY`ZbDP@!@!,F#@#@&M+OEMUP7ls@#@&8@#@&@#@&0;x1ObWU,/DDNmvnx1W[k?ojOMkxTb@#@&?@#@&@#@&\mD,:CDVnMPxPr:@$?7E@#@&\l.~kY.k?L&x[6,'PZ@#@&-lMPdmMk2O&xNaP{PO8@#@&\mD,EU2U^KNrxT(x9+a~{P!@#@&7l.P14mD~{P?EV^@#@&-lMPnx1W[r?oSUoDtP{~;xAx1W[kUL^+UoD4P{PT@#@&\l.~kYCY~{Pj:b:2{;rhe{&1Kj:@#@&-mDP!U2?mW9rUoUYMkUo~x,JE@#@&-lMP.nBPl..@#@&@#@&S4bVnv/DlY#@#@&?@#@&dhbY^4,`/DCY#@#@&`@#@&1lk+~`jPzK3{;6nI{(HhjKb~=@#@&/1.bwO&x9+6,',nx1W[k?ojOMkxT k?N+X6W`slM3nDS~kY.k?Lq?Nna*@#@&rW,`dmMraY(?N6Pe',RF*@#@&?@#@&;UAxmK[k?o?D.rxTP3'~+U^KNrxTjYMkULc/E8dDDrxTckY.bxTqx9+XSPkm.kaY(U9+6*@#@&kmDb2Oq?N6~_x~sl.3.R^+ULDt@#@&dDlO+,x,?PzKA{IAbGJ2g@#@&8@#@&nsk+@#@&`@#@&/YMrUo&x9+aPx~kY.k?Lq?Nna{'!~_,!~),dDDr?o&xN6@#@&E?2UmKNrUT?YMrxTP_{~nx1W9kUojOMkUocdE(/O.v/Y.r?o(x9nX~~x1WNbxTjYMkUocVnUTYt*@#@&kYlDn~',!@#@&N@#@&8M+C3@#@&@#@&mCdP`jPzK3{"3zfJA1*P)@#@&UmKNrxTSnUTYt,xPxmK[rxT?DDrxL kE8/D.`km.raYqU[6SP+b@#@&;?2?mW9k?LVxLY4Px~9+mK[+~l/*`x1W[kULd+UoD4#@#@&d^MkwO(?Nn6,Q{Pc+P3PJ{'r VxLY4#@#@&kYlDnP{P?:)P2|fAZ6f3@#@&4.+mV@#@&@#@&^m/+~cUK)KAmG2/}fA#P=@#@&r0,`ZE?2U^KNk?LVxoD4b@#@&?@#@&dY.r?o(x9n6,'~d1Dk2O&x[+X~3PEGpTbbz'{?a?@$ER^+ULDt@#@&;xAxmK[rxTq?Nn6~x,!@#@&kOlD+~x,?K)PA{/rhe|qHhj:@#@&(DC3@#@&N@#@&m4CMP',nx1WNbUL?DDbxLRd;(/ODvdmMk2O&xNnaBPq#@#@&b0~vm4lD,'{~J@$JbPkYCOP',jKzK2|iH2UZzn3@#@&n^/n@#@&`@#@&kW~vmtC.cm4lM/KNnzYv!#,@!,T6wsb@#@&?@#@&!x2?^W9kxTjODbxTPQ'~jDDrxT 0MWh/4lD/G9+cYMC?/WKDs+N]wb^3|+UmKNrUT$E?3x1WNbULq?N6Yv*DY$^tm.R1tC.;WNn)D`T#Yb@#@&;?2?mW9k?Lq?Nn63_@#@&)@#@&s/@#@&P@#@&E?2?mGNrUT?ODbUo,_x~1tl.@#@&8~@#@&d1DraY&xN63Q@#@&EU2?mG[bxo^nxTYt R@#@&(DlV@#@&N@#@&@#@&1C/PjPzK2mig2jZzKA)@#@&E?2x1W9rxT?ODbxL~3'P!U+kmlanc+?mKNrxLjDDrxT /!4dOM`_Qd1DrwD(?NnX~,F#*@#@&dmMk2Y&x[nX__p~E?2x1G[k?o^+UoO4,Ox @#@&E?2U^KNkUL&x[+XQ3@#@&kYmY+,',jKzK3{G2/6G2@#@&8Dl3@#@&N@#@&8@#@&@#@&.n,'~xAP"+L3Xw`Ecx?^Db2Du#~/1DkaY* +?mGNJS~ro:bE#@#@&h4rs+vlMD~'~.Rn6^`!x3U1WNrUT?ODbUT#b,E?2x1W9rxT?ODbxL~{PIL2XwR^nWY;W?Yn6O~3P]+T36aRyq,_P]nT2awc.bo4DZKxY6D@#@&M+OEMx~;?2x1GNbxoUO.k?o@#@&N@#@&@#@&z&O @*emwFAA==^#~@
          </script>
          <body style="font:14px;text-align:center">
          <div style="text-align:left;width:666px;margin:auto">
          <h1 style="color:#123;font-size:16px;text-align:center">JScript.Encode腳本在線加密和解密</h1>
          使用本頁(yè)面可以加密javascript函數(shù),將script標(biāo)記中的內(nèi)容復(fù)制后進(jìn)行加密(可多次加密),然后將標(biāo)記修改為&lt;script language="JScript.Encode"&gt;即可。<br />
          ??????????????????? <BR>
          ??????????????????? 使用方法:<BR>
          ??????????????????? &nbsp;&nbsp;&nbsp; <FONT color=#ff0000>加密</FONT>:源代碼粘貼在下面的框內(nèi),注意:<FONT
          color=#ff0000>請(qǐng)?jiān)诩用芮跋葌浞菽木W(wǎng)頁(yè)</FONT><BR>
          ??????????????????? &nbsp;&nbsp;&nbsp; <FONT
          color=#ff0000>解密方法</FONT>:將引號(hào)內(nèi)的亂碼貼入按解密即可</P>
          ??????????????
          ??????????????? <form>
          ??????????????? <center>
          ??????????????????? <textarea style="" name="codeinput" rows="20" cols="65"></TEXTAREA>
          ??????????????????? <BR />??????????????????
          ??????????????????? <input? type="button" onclick="this.form.codeinput.value=screncode(this.form.codeinput.value,'JS')" value="加密">
          ??????????????????? <input type="button" onclick="this.form.codeinput.value=strdec(this.form.codeinput.value)" value="解密" />
          ????? </form>
          ??????????????????? <br />
          ????????????????? </center>
          ????????????????? <P >說(shuō)明:加密時(shí)應(yīng)只加密腳本部分,不加密腳本標(biāo)記&lt;script
          ??????????????????? language="javascript"&gt;,并且加密后腳本標(biāo)記應(yīng)改為:<BR>
          ??????????????????? &lt;script language="JScript.Encode"&gt;</P>
          ????????????????? <P>特別注意:本頁(yè)面以及您加密后的jscript一般只可以在ie中進(jìn)行。</P>
          ????? <p><a href="??????????????
          </DIV>
          </BODY></HTML>

           
          消除從MySQL數(shù)據(jù)庫(kù)中讀出中文的亂碼

          ??? 分為兩個(gè)目標(biāo): step1: 從MySQL客戶端查看中文正常, step2: 從網(wǎng)頁(yè)中查看中文正常;

          ? 1: 在用SQL腳本創(chuàng)建數(shù)據(jù)庫(kù)前,設(shè)置MySQL的默認(rèn)編碼方式為“gb2312”,
          ?? 此步可以在mysql-administrator-1.1.0-rc-win.msi中完成,或者是MySQL Server向?qū)В?br />?? 這樣設(shè)置完畢后再用SQL 腳本創(chuàng)建數(shù)據(jù)庫(kù), 注意如果SQL腳本中有設(shè)置字符集為latin1或utf-8的語(yǔ)句,一定要?jiǎng)h除。
          ???????? 已發(fā)現(xiàn)目前版本《在線書店》中的SQL腳本中帶有設(shè)置默認(rèn)字符集為latin1,一定要?jiǎng)h除!

          ?????? 創(chuàng)建數(shù)據(jù)庫(kù)完畢后,用MySQL CC或MySQL Admin可檢查所創(chuàng)建的數(shù)據(jù)庫(kù)的字符集,如果正確,則用MySQL CC或MySQL Admin都可以正常查看中文;

          ? 2:? 一般情況下,到這一步,在網(wǎng)頁(yè)中已經(jīng)基本能正常顯示中文了,但凡事總有例外,可以在數(shù)據(jù)庫(kù)連接串處再特別說(shuō)明一下:

          ?String url ="jdbc:mysql://localhost/BookStore?useUnicode=true&characterEncoding=gb2312";
          ?????? conn=DriverManager.getConnection(url,"root","");

          ?? 一般情況下用 String url ="jdbc:mysql://localhost/BookStore"應(yīng)該就能正常顯示中文。

          ?? 總結(jié):修改MySQL Server數(shù)據(jù)庫(kù)默認(rèn)字符集為“GB2312”,從MySQL讀出中文可正常顯示;

          posted @ 2006-06-07 00:10 edsonjava 閱讀(1008) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共7頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 下一頁(yè) 
           
          主站蜘蛛池模板: 广德县| 广宗县| 桃园县| 保德县| 苏州市| 峨边| 余江县| 涟水县| 神农架林区| 额敏县| 城口县| 名山县| 广宗县| 乌审旗| 江西省| 浦江县| 镇江市| 宁武县| 长治市| 外汇| 广灵县| 道孚县| 孝感市| 永春县| 海盐县| 西和县| 兴宁市| 夏邑县| 连山| 驻马店市| 霍城县| 南昌县| 东安县| 玛纳斯县| 莲花县| 罗田县| 邓州市| 四川省| 巫溪县| 云梦县| 夏邑县|