<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2006年6月15日

    原文來(lái)自: HttpClient POST 的 UTF-8 編碼問(wèn)題

    類(lèi)別標(biāo)簽: UTF-8? encoding? http-client? java

    Apache HttpClient ( http://jakarta.apache.org/commons/httpclient/ ) 是一個(gè)純 Java 的HTTP 協(xié)議的客戶(hù)端編程工具包, 對(duì) HTTP 協(xié)議的支持相當(dāng)全面, 更多細(xì)節(jié)也可以參考IBM 網(wǎng)站上的這篇文章 HttpClient入門(mén) ( http://www-128.ibm.com/developerworks/cn/opensource/os-httpclient/ ).

    問(wèn)題分析

    不過(guò)在實(shí)際使用中, 還是發(fā)現(xiàn)按照最基本的方式調(diào)用 HttpClient 時(shí), 并不支持 UTF-8 編碼, 在網(wǎng)絡(luò)上找過(guò)一些文章, 也不得要領(lǐng), 于是查看了 commons-httpclient-3.0.1 的一些代碼, 首先在 PostMethod 中找到了 generateRequestEntity() 方法:
    ????/**
    ?????*?Generates?a?request?entity?from?the?post?parameters,?if?present.??Calls
    ?????*?{@link?EntityEnclosingMethod#generateRequestBody()}?if?parameters?have?not?been?set.
    ?????*?
    ?????*?@since?3.0
    ?????*/
    ????protected?RequestEntity?generateRequestEntity()?{
    ????????if?(!this.params.isEmpty())?{
    ????????????//?Use?a?ByteArrayRequestEntity?instead?of?a?StringRequestEntity.
    ????????????//?This?is?to?avoid?potential?encoding?issues.??Form?url?encoded?strings
    ????????????//?are?ASCII?by?definition?but?the?content?type?may?not?be.??Treating?the?content
    ????????????//?as?bytes?allows?us?to?keep?the?current?charset?without?worrying?about?how
    ????????????//?this?charset?will?effect?the?encoding?of?the?form?url?encoded?string.
    ????????????String?content?=?EncodingUtil.formUrlEncode(getParameters(),?getRequestCharSet());
    ????????????ByteArrayRequestEntity?entity?=?new?ByteArrayRequestEntity(
    ????????????????EncodingUtil.getAsciiBytes(content),
    ????????????????FORM_URL_ENCODED_CONTENT_TYPE
    ????????????);
    ????????????return?entity;
    ????????}?else?{
    ????????????return?super.generateRequestEntity();
    ????????}
    ????}

    原來(lái)使用 NameValuePair 加入的 HTTP 請(qǐng)求的參數(shù)最終都會(huì)轉(zhuǎn)化為 RequestEntity 提交到 HTTP 服務(wù)器, 接著在 PostMethod 的父類(lèi) EntityEnclosingMethod 中找到了如下的代碼:
    ????/**
    ?????*?Returns?the?request's?charset.??The?charset?is?parsed?from?the?request?entity's?
    ?????*?content?type,?unless?the?content?type?header?has?been?set?manually.?
    ?????*?
    ?????*?@see?RequestEntity#getContentType()
    ?????*?
    ?????*?@since?3.0
    ?????*/
    ????public?String?getRequestCharSet()?{
    ????????if?(getRequestHeader("Content-Type")?==?null)?{
    ????????????//?check?the?content?type?from?request?entity
    ????????????//?We?can't?call?getRequestEntity()?since?it?will?probably?call
    ????????????//?this?method.
    ????????????if?(this.requestEntity?!=?null)?{
    ????????????????return?getContentCharSet(
    ????????????????????new?Header("Content-Type",?requestEntity.getContentType()));
    ????????????}?else?{
    ????????????????return?super.getRequestCharSet();
    ????????????}
    ????????}?else?{
    ????????????return?super.getRequestCharSet();
    ????????}
    ????}


    解決方案

    從上面兩段代碼可以看出是 HttpClient 是如何依據(jù) "Content-Type" 獲得請(qǐng)求的編碼(字符集), 而這個(gè)編碼又是如何應(yīng)用到提交內(nèi)容的編碼過(guò)程中去的. 按照這個(gè)原來(lái), 其實(shí)我們只需要重載 getRequestCharSet() 方法, 返回我們需要的編碼(字符集)名稱(chēng), 就可以解決 UTF-8 或者其它非默認(rèn)編碼提交 POST 請(qǐng)求時(shí)的亂碼問(wèn)題了.

    測(cè)試

    首先在 Tomcat 的 ROOT WebApp 下部署一個(gè)頁(yè)面 test.jsp, 作為測(cè)試頁(yè)面, 主要代碼片段如下:
    <%@?page?contentType="text/html;charset=UTF-8"%>
    <%@?page?session="false"?%>
    <%
    request.setCharacterEncoding("UTF-8");
    String?val?=?request.getParameter("TEXT");
    System.out.println(">>>>?The?result?is?"?+?val);
    %>


    接著寫(xiě)一個(gè)測(cè)試類(lèi), 主要代碼如下:
    ????public?static?void?main(String[]?args)?throws?Exception,?IOException?{
    ????????String?url?=?"http://localhost:8080/test.jsp";
    ????????PostMethod?postMethod?=?new?UTF8PostMethod(url);
    ????????//填入各個(gè)表單域的值
    ????????NameValuePair[]?data?=?{
    ????????????????new?NameValuePair("TEXT",?"中文"),
    ????????};
    ????????//將表單的值放入postMethod中
    ????????postMethod.setRequestBody(data);
    ????????//執(zhí)行postMethod
    ????????HttpClient?httpClient?=?new?HttpClient();
    ????????httpClient.executeMethod(postMethod);
    ????}
    ????
    ????//Inner?class?for?UTF-8?support
    ????public?static?class?UTF8PostMethod?extends?PostMethod{
    ????????public?UTF8PostMethod(String?url){
    ????????????super(url);
    ????????}
    ????????@Override
    ????????public?String?getRequestCharSet()?{
    ????????????//return?super.getRequestCharSet();
    ????????????return?"UTF-8";
    ????????}
    ????}


    運(yùn)行這個(gè)測(cè)試程序, 在 Tomcat 的后臺(tái)輸出中可以正確打印出 ">>>> The result is 中文" .

    代碼下載

    本文所提到的所有代碼, 以及測(cè)試程序(可直接導(dǎo)入 eclipse)提供打包下載: att:HttpClient POST 的 UTF-8 編碼問(wèn)題.httpClientUTF8.tar.bz2

    END


    posted @ 2006-10-31 23:00 thinkbase.net 閱讀(7707) | 評(píng)論 (8)編輯 收藏
     
    原文來(lái)自:? 使用 Apache 反向代理實(shí)現(xiàn)負(fù)載均衡及熱備


    初步設(shè)想

    • 早些時(shí)候在 JavaEye 上看到過(guò)一些使用 lighttpd 或者 apache 作前端, 通過(guò)負(fù)載均衡, 實(shí)現(xiàn)高性能的 Web 系統(tǒng)的討論, 于是留意了一下這方面的技術(shù);
    • 考慮到對(duì)不同的 App Server 而言, 實(shí)現(xiàn) Session 復(fù)制的配置各不相同(通常是需要配置集群), 因此從通用的角度, 覺(jué)得使用 session sticky 方式實(shí)現(xiàn)的負(fù)載均衡比較方便;
    • 由于沒(méi)有看到有資料說(shuō) lighttpd 能夠?qū)崿F(xiàn) session sticky, 所以決定先使用 Apache 試試.
    參考資料:

    環(huán)境準(zhǔn)備

    • 下載安裝 Apache, 測(cè)試時(shí)使用的是 XAMPP ( http://www.apachefriends.org/en/xampp.html ) 的 Linux 版本 (xampp-linux-1.5.4.tar.gz), 按照安裝說(shuō)明, 解壓到 /opt/lampp 目錄下就可以使用了;
      • 啟動(dòng) Apache: sudo /opt/lampp/lampp startapache
      • 重新加載 Apache: sudo /opt/lampp/lampp reloadapache (在 httpd.conf 文件被修改后可以不重啟, 而是直接 reload 就可以了)
      • 停止服務(wù): sudo /opt/lampp/lampp stop
    • 準(zhǔn)備兩個(gè)運(yùn)行同樣程序的 Web 服務(wù)器, 這里使用的是 Tomcat 5.5, 并使用一個(gè) jsp 文件作為測(cè)試文件(相關(guān)源代碼參見(jiàn)文章最后的附件);
      • 這兩個(gè) Tomcat 服務(wù)器需要將 HTTP 服務(wù)配置在不同的端口上, 同時(shí)由于測(cè)試時(shí)運(yùn)行在同一臺(tái)機(jī)器上, 其它端口也需要避免沖突;
    • 下載安裝 JMeter ( jakarta-jmeter-2.2), 用于壓力測(cè)試, 驗(yàn)證負(fù)載均衡的效果;

    測(cè)試 jsp 文件的說(shuō)明

    測(cè)試用的 jsp 文件 (test.jsp) 具有如下功能:
    • 顯示當(dāng)前運(yùn)行的服務(wù)器的 IP 地址及端口號(hào), 這樣從返回的頁(yè)面就能夠知道是運(yùn)行在哪一個(gè) Web 服務(wù)器上的了;
    • 統(tǒng)計(jì)每個(gè)客戶(hù)端(不同的 session)向同一臺(tái)服務(wù)器發(fā)出請(qǐng)求的次數(shù), 通過(guò)這個(gè)計(jì)數(shù)可以驗(yàn)證是否實(shí)現(xiàn)了 session sticky;
    • 通過(guò) clear 請(qǐng)求參數(shù)(即 .../test.jsp?clear=1)清除請(qǐng)求次數(shù)的計(jì)數(shù)結(jié)果, 以便進(jìn)行下一次測(cè)試;
    • 模擬 JSESSIONID +jvmRoute 的機(jī)制, 自行實(shí)現(xiàn)了一個(gè) STICK_PORT_TOKEN 的 Cookie, 直接使用不同服務(wù)器的 HTTP 端口號(hào)作為 route;
      • 說(shuō)明1: 考慮到方案的通用性, 這里沒(méi)有直接使用 JSESSIONID +jvmRoute 的機(jī)制;
      • 說(shuō)明2: 雖然作為一個(gè)例子, 相關(guān)代碼是寫(xiě)死在 jsp 文件中的, 但是這個(gè)機(jī)制可以很方便的用一個(gè) Filter 統(tǒng)一實(shí)現(xiàn);

    Apache 的配置

    編輯 Apache 的 httpd.conf 文件(如果使用 xampp-linux 的話(huà), 應(yīng)該在 /opt/lampp/etc 目錄下), 在文件的最后加上如下內(nèi)容:
    ###############################################################################
    # Reverse Proxy and Load Balance ##############################################
    ###############################################################################
    # 1)簡(jiǎn)單的反向代理
    ProxyRequests Off
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>
    ProxyPass /1 http://localhost:8080/test
    #ProxyPassReverse /1 http://localhost:8080/test
    ProxyPass /2 http://localhost:18080/test
    #ProxyPassReverse /2 http://localhost:18080/test
    # 2)非 stickysession 的 balance
    ProxyPass /3 balancer://non-sticky-cluster nofailover=On
    <Proxy balancer://non-sticky-cluster>
    BalancerMember http://localhost:8080/test
    BalancerMember http://localhost:18080/test smax=10
    </Proxy>
    # 3)stickysession 的 balance
    ProxyPass /4 balancer://sticky-cluster stickysession=STICK_PORT_TOKEN nofailover=On
    <Proxy balancer://sticky-cluster>
    BalancerMember http://localhost:8080/test route=8080
    BalancerMember http://localhost:18080/test route=18080 loadfactor=2
    </Proxy>
    這個(gè)配置分為3個(gè)部分, 包括了 1)簡(jiǎn)單的反向代理, 2)非 session sticky 的 load balance, 以及 3)session sticky 的 load balance 三種方式的配置(這里假設(shè)兩個(gè) Tomcat 服務(wù)器的 HTTP 服務(wù)被配置在 8080 和 18080 端口), 其中第 2) 和 3) 的配置中 "nofailover=On" 適合于沒(méi)有 session 復(fù)制的情況下, 這種情況下, 如果其中一臺(tái) HTTP 服務(wù)器出錯(cuò), 那么原來(lái)分配在這個(gè)出錯(cuò)機(jī)器上的瀏覽器客戶(hù)端不會(huì)被自動(dòng)轉(zhuǎn)移到另外的服務(wù)器上, 必須重新啟動(dòng)瀏覽器才能將請(qǐng)求分配到另外一臺(tái)服務(wù)器上去.

    使用 JMeter 測(cè)試結(jié)果

    使用 JMeter 對(duì) "3)session sticky 的 load balance" 的效果進(jìn)行測(cè)試, 通過(guò)壓力測(cè)試的方式, 檢查兩臺(tái) Tomcat 服務(wù)器被分配到的請(qǐng)求數(shù)量, 相關(guān)的測(cè)試腳本參見(jiàn)文章最后的附件.

    注意如果重復(fù)測(cè)試, 在下一次測(cè)試開(kāi)始之前請(qǐng)對(duì)每個(gè) Tomcat 服務(wù)器執(zhí)行 .../test.jsp?clear=1 的請(qǐng)求, 清除上一次的計(jì)數(shù)結(jié)果.

    從下圖的測(cè)試結(jié)果可見(jiàn): 50個(gè)線程中有21個(gè)被分配在 8080 端口的服務(wù)器上, 29個(gè)則被分配到 18080 端口的服務(wù)器; 另外, 所有的 session 請(qǐng)求次數(shù)都是 20 次, 說(shuō)明 session sticky 達(dá)到了預(yù)期的效果.

    附件


    后記

    如何禁用 XAMPP 自帶的內(nèi)容, 使之成為一個(gè)單純的轉(zhuǎn)發(fā)服務(wù)器:
    • 1)注釋掉 /opt/lampp/etc/httpd.conf 中 "Include etc/extra/httpd-xampp.conf" 這一行;
    • 2)刪除或者移走 /opt/lampp/htdocs 目錄下的內(nèi)容(但是此目錄需要保留).
    posted @ 2006-10-10 13:12 thinkbase.net 閱讀(7051) | 評(píng)論 (7)編輯 收藏
     

    (原文來(lái)自: 2006-07-28 介紹一個(gè) RSA 加密小工具 bmrsa)

    因?yàn)橐鲆粋€(gè)不對(duì)稱(chēng)加密/解密相關(guān)的應(yīng)用(其實(shí)是想用在軟件的注冊(cè)控制方面), 本來(lái)的想法是去找找有沒(méi)有 RSA 加密/解密的源代碼的例子, 結(jié)果在 sourceforge 找到來(lái) bmrsa(RSA Cryptographic Text Processor), 可以從 http://sourceforge.net/projects/bmrsa 訪問(wèn).

    項(xiàng)目 README 里的描述:

     This program is an exercise in prime number generation,
    RSA key generation, RSA encryption and conversion between
    decimal, hexadecimal, base64 and text. Take note that RSA
    is generally not used to encrypt entire messages because it
    is too slow. It is normally used to encrypt keys used in
    other encryption algorithms or other relatively small
    values. For more detailed documentation, execute bmrsa
    from a command line without passing any arguments. You will
    probably want to pipe the output through more like this

    試用了一下, 總結(jié)該軟件有如下特點(diǎn):
    • 開(kāi)源, GPL 協(xié)議;
    • 跨平臺(tái), 而且完全使用 C++ 編寫(xiě), 下載包里包含了 Windows 和 Linux 下的可執(zhí)行文件;
    • 命令行程序, 運(yùn)行時(shí)使用 stdin 和 stdout, 應(yīng)該說(shuō)被其它程序調(diào)用還算方便;
    • 只能處理文本, 不支持中文, 因此對(duì)于中文文本或者二進(jìn)制文件可能需要先 base64 一下.

    我用的是 2003-03-16 16:00 的 bmrsa10.zip 這個(gè)包, 可以從項(xiàng)目主頁(yè)找到下載, 也可以從下面的鏈接下載:
    下面簡(jiǎn)單說(shuō)明產(chǎn)生 公鑰/私鑰 和 加密/解密 的整個(gè)過(guò)程:
    • 首先將下載后的 bmrsa10.zip 解壓縮到一個(gè)目錄, 進(jìn)入這個(gè)目錄;
    • 如果是 linux 環(huán)境下, 為了后面輸入命令方便, 可以執(zhí)行 export PATH=.:$PATH , 將當(dāng)前目錄加入 PATH;
    • 首先生成一個(gè) 768 位的密鑰文件 _keys.768-bit.txt:
    bmrsa -mkh -g 48 -f _keys.768-bit.txt
    • 接走我們建立另外兩個(gè)文本文件 _private-key.768-bit.txt_public-key.768-bit.txt, 分別對(duì)應(yīng)私鑰和公鑰. 這兩個(gè)文件都是對(duì) _keys.768-bit.txt 中內(nèi)容的裁減, 基本上類(lèi)似這個(gè)樣子:
      • _private-key.768-bit.txt
    public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
    private key=3C4B0676352943057A3B6B0D54A8B0E56265B...
    private p=ED66018402DEED19082ED5EA500B778DAFA7A0...
    private q=88BF09780DC8C15C429AE72AC6F91B0795C4E68...
    • 和:
      • _public-key.768-bit.txt
    public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
    public key=BA562B6FEF44681C8937C54FCB985B205DAF0A...
    • 在實(shí)際使用中, 我們可以把公鑰公布出來(lái), 而用私鑰加密傳遞的信息, 接收到信息的人可以使用公鑰對(duì)信息進(jìn)行解密(另外也可以反過(guò)來(lái)使用公鑰加密, 接收方使用私鑰解密);
      • 具體到這個(gè)例子中, 也就是說(shuō)我們可以把 _public-key.768-bit.txt 公開(kāi)給需要接收我們的信息的人, 而 _private-key.768-bit.txt 必需妥善保管, 因?yàn)橐坏﹦e人拿到這個(gè)私鑰, 那就意味著他可以冒充你發(fā)送消息了;
    • 下面我們建立一個(gè)文本文件 _demo.txt 作為加密的原文:
    NAME=thinkbase
    URL =http://www.thinkbase.net
    IP =218.81.120.31
    • 我們使用密鑰 _private-key.768-bit.txt 對(duì) _demo.txt 進(jìn)行加密, 加密后的文件是 _demo.enc.txt
    bmrsa -mkh -mit -moh -pr -f _private-key.768-bit.txt <_demo.txt >_demo.enc.txt
    • 接收方拿到加密后的文件 _demo.enc.txt 后, 可以使用公鑰 _public-key.768-bit.txt 對(duì)信息進(jìn)行解密:
    bmrsa -mkh -mih -mot -pu -f _public-key.768-bit.txt <_demo.enc.txt

    具體的運(yùn)行界面參見(jiàn)下圖:




    在實(shí)驗(yàn)過(guò)程中使用的一些文件也可以下載, 供參考:
    posted @ 2006-07-29 00:18 thinkbase.net 閱讀(2048) | 評(píng)論 (0)編輯 收藏
     

    (原文來(lái)自: 2006-06-18 嘗試了一下用 swig 編寫(xiě) JNI 程序)

    總是覺(jué)得編寫(xiě) JNI (Java Native Interface) 程序是件復(fù)雜的事情, 于是開(kāi)始漫無(wú)目的地搜索是否有簡(jiǎn)單一點(diǎn)的方法, 倒是有些商業(yè)軟件提供這樣的功能, 比如 http://www.jniwrapper.com 就提供了通過(guò) Java 直接調(diào)用 DLL 的功能(可惜是商業(yè)軟件, 哈哈).

    搜索中無(wú)意到了 swig 的網(wǎng)站( http://www.swig.org ), 看到一個(gè)用 swig 產(chǎn)生 Java 模塊的例子(原來(lái)知道 swig 是因?yàn)?python 的緣故), 于是就照著例子自己嘗試了一下(比例子稍微復(fù)雜一點(diǎn), 另外我是用 mingw 上的 gcc 進(jìn)行編譯的).

    源代碼包括 3 個(gè)文件, Example.c, Example.i, net/thinkbase/test/Test.java:

    /**?Example.c?****************************************************************/
    #include?<time.h>

    /**A?variable*/
    double? PI?=? 3.1415927 ;

    /**Return?n!*/
    int? fact ( int? n )?{
    ???? if? ( n?<=? 1 )
    ???????? return? 1 ;
    ???? else
    ???????? return? n*fact ( n- 1 ) ;
    }

    /**mod?function*/
    int? mod ( int? x,? int? y )?{
    ???? return? ( x%y ) ;
    }

    /**Get?time?as?String*/
    char? *?getTime (){
    ???? time_t?ltime;
    ???? time ( &ltime ) ;
    ???? return? ctime ( &ltime ) ;
    }

    /**to?upper?case*/
    char? *?toUpperCase ( char? *?result ){
    ???? char? *?p?=?result;
    ???? while ( '\0' !=*p ){
    ???????? char? c?=?*p;
    ???????? if? (?( c?>? 'a' ) && ( c?<? 'x' )?){
    ???????? *p?=?c- 32 ;
    ???????? }
    ???????? p++;
    ???? }
    ???? return? result;
    }


    /**?Example.i?****************************************************************/
    %module?Example
    % {
    ???? /*?Put?header?files?here?or?function?declarations?like?below?*/
    ???? extern? double? PI;
    ???? extern? int? fact ( int? n ) ;
    ???? extern? int? mod ( int? x,? int? y ) ;
    ???? extern? char? *?getTime () ;
    ???? extern? char? *?toUpperCase ( char? *?str ) ;
    % }

    extern? double? PI;
    extern? int? fact ( int? n ) ;
    extern? int? mod ( int? x,? int? y ) ;
    extern? char? *?getTime () ;
    extern? char? *?toUpperCase ( char? *?str ) ;


    /**?net/thinkbase/test/Test.java?*********************************************/
    package? net.thinkbase.test;

    import? net.thinkbase.test.swig.Example;

    public?class? Test? {
    ???? public?static? void? main ( String?argv [])?{
    ???????? System.loadLibrary ( "Example" ) ;
    ???????? System.out.println (
    ???????????? "????Example.getPI()??????=?"? +?Example.getPI ()) ;
    ???????? System.out.println (
    ???????????? "????Example.fact(6)??????=?"? +?Example.fact ( 6 )) ;

    ???????? System.loadLibrary ( "Example" ) ;
    ???????? System.out.println (
    ???????????? "????Example.mod(100,?30)?=?"? +?Example.mod ( 100 ,? 30 )) ;
    ???????? System.out.println (
    ???????????? "????Example.getTime()????=?"? +?Example.getTime ()) ;
    ???????? System.out.println (
    ???????????? "????Example.toUpperCase(\"Hello,?world!\")?=?"? +
    ???????????? Example.toUpperCase ( "Hello,?world!" )) ;
    ???? }
    }



    試驗(yàn)步驟

    建立必要的目錄:
    • mkdir "net/thinkbase/test/swig"
    • mkdir ".out"
    使用 swig 建立相關(guān)接口:
    • swig -java -package net.thinkbase.test.swig -outdir net/thinkbase/test/swig Example.i
    編譯 c 文件得到 dll:
    • gcc -c Example.c -o .out/Example.o -I%JAVA_HOME%/include -I%JAVA_HOME%/include/win32
    • gcc -c Example_wrap.c -o .out/Example_wrap.o -I%JAVA_HOME%/include -I%JAVA_HOME%/include/win32
    • gcc -shared .out/Example.o .out/Example_wrap.o -mno-cygwin -Wl,--add-stdcall-alias -o .out/Example.dll
    編譯測(cè)試用的 Java 程序:
    • javac -sourcepath . net/thinkbase/test/Test.java -d .out
    運(yùn)行測(cè)試:
    • java -cp .out -Djava.library.path=.out net.thinkbase.test.Test
    運(yùn)行及測(cè)試結(jié)果:
    源代碼可以從這里下載:
    posted @ 2006-07-29 00:16 thinkbase.net 閱讀(4150) | 評(píng)論 (0)編輯 收藏
     
    一個(gè)方便的SSL證書(shū)配置工具的介紹, 以及Tomcat上配置雙向SSL(就是必須要客戶(hù)端數(shù)字證書(shū)才能訪問(wèn))的具體例子; 文章的主要內(nèi)容完成于一年半以前, 現(xiàn)在發(fā)表基本上算是炒冷飯了, 不過(guò)最近加上了 Tomcat 5 和 Tomcat 4 上的實(shí)際配置例子, 所以整理了一下重新發(fā)出來(lái).

    配置適用于正式使用環(huán)境下的Tomcat Web服務(wù)器雙向SSL認(rèn)證

    在 Tomcat 5.5 上的配置實(shí)例
    在 Tomcat 4.1.31 上的配置實(shí)例
    posted @ 2006-06-15 00:16 thinkbase.net 閱讀(5471) | 評(píng)論 (14)編輯 收藏
     
    主站蜘蛛池模板: 免费大片黄手机在线观看| 国产资源免费观看| 亚洲中文无码卡通动漫野外| 尤物永久免费AV无码网站| 久久久WWW成人免费精品| 91亚洲va在线天线va天堂va国产| 色妞WWW精品免费视频| 一级毛片完整版免费播放一区| 亚洲视频在线播放| 国产成人在线观看免费网站| 中文字幕不卡免费高清视频| 久久精品国产亚洲αv忘忧草 | 四虎永久免费影院在线| 黄色网址在线免费| 亚洲AV无码男人的天堂| 亚洲国产精品无码AAA片| 在线免费观看污网站| 久久午夜无码免费| 黄网站在线播放视频免费观看 | xxxxx做受大片在线观看免费| 亚洲综合无码一区二区三区| 亚洲国产精品综合久久网络| 精品香蕉在线观看免费| a级毛片免费观看网站| 亚洲综合无码无在线观看| 亚洲国产第一页www| 亚洲色图综合在线| 免费激情视频网站| 中文字幕亚洲免费无线观看日本| 一级一看免费完整版毛片| 亚洲中文字幕乱码AV波多JI| 亚洲精品免费观看| 在线a亚洲v天堂网2019无码| 国产成人免费片在线视频观看| 国产91色综合久久免费| 精品在线免费观看| 9久热这里只有精品免费| 国产亚洲精彩视频| 亚洲AV无码专区亚洲AV桃| jlzzjlzz亚洲jzjzjz| 亚洲第一页在线播放|