Apache HttpClient ( http://jakarta.apache.org/commons/httpclient/ ) 是一個純 Java 的HTTP 協議的客戶端編程工具包, 對 HTTP 協議的支持相當全面, 更多細節也可以參考IBM 網站上的這篇文章 HttpClient入門 ( http://www-128.ibm.com/developerworks/cn/opensource/os-httpclient/ ).
????/** |
????/** |
<%@?page?contentType="text/html;charset=UTF-8"%> |
????public?static?void?main(String[]?args)?throws?Exception,?IOException?{ |
sudo /opt/lampp/lampp startapache
sudo /opt/lampp/lampp reloadapache
(在 httpd.conf 文件被修改后可以不重啟, 而是直接 reload 就可以了)sudo /opt/lampp/lampp stop
###############################################################################這個配置分為3個部分, 包括了 1)簡單的反向代理, 2)非 session sticky 的 load balance, 以及 3)session sticky 的 load balance 三種方式的配置(這里假設兩個 Tomcat 服務器的 HTTP 服務被配置在 8080 和 18080 端口), 其中第 2) 和 3) 的配置中 "nofailover=On" 適合于沒有 session 復制的情況下, 這種情況下, 如果其中一臺 HTTP 服務器出錯, 那么原來分配在這個出錯機器上的瀏覽器客戶端不會被自動轉移到另外的服務器上, 必須重新啟動瀏覽器才能將請求分配到另外一臺服務器上去.
# Reverse Proxy and Load Balance ##############################################
###############################################################################
# 1)簡單的反向代理
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>
因為要做一個不對稱加密/解密相關的應用(其實是想用在軟件的注冊控制方面), 本來的想法是去找找有沒有 RSA
加密/解密的源代碼的例子, 結果在 sourceforge 找到來 bmrsa(RSA Cryptographic Text
Processor), 可以從 http://sourceforge.net/projects/bmrsa 訪問.
項目 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
export PATH=.:$PATH
, 將當前目錄加入 PATH;bmrsa -mkh -g 48 -f _keys.768-bit.txt
public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
private key=3C4B0676352943057A3B6B0D54A8B0E56265B...
private p=ED66018402DEED19082ED5EA500B778DAFA7A0...
private q=88BF09780DC8C15C429AE72AC6F91B0795C4E68...
public mod=7ECF58B12DAB4557B9B39589D26CA444BDF96...
public key=BA562B6FEF44681C8937C54FCB985B205DAF0A...
NAME=thinkbase
URL =http://www.thinkbase.net
IP =218.81.120.31
bmrsa -mkh -mit -moh -pr -f _private-key.768-bit.txt <_demo.txt >_demo.enc.txt
bmrsa -mkh -mih -mot -pu -f _public-key.768-bit.txt <_demo.enc.txt具體的運行界面參見下圖:
總是覺得編寫 JNI (Java Native Interface) 程序是件復雜的事情, 于是開始漫無目的地搜索是否有簡單一點的方法, 倒是有些商業軟件提供這樣的功能, 比如 http://www.jniwrapper.com 就提供了通過 Java 直接調用 DLL 的功能(可惜是商業軟件, 哈哈).
搜索中無意到了 swig 的網站( http://www.swig.org ), 看到一個用 swig 產生 Java 模塊的例子(原來知道 swig 是因為 python 的緣故), 于是就照著例子自己嘗試了一下(比例子稍微復雜一點, 另外我是用 mingw 上的 gcc 進行編譯的).
源代碼包括 3 個文件, Example.c, Example.i, net/thinkbase/test/Test.java
:
/**?Example.c?****************************************************************/
|
/**?Example.i?****************************************************************/
|
/**?net/thinkbase/test/Test.java?*********************************************/
|
mkdir "net/thinkbase/test/swig"
mkdir ".out"
swig -java -package net.thinkbase.test.swig -outdir net/thinkbase/test/swig Example.i
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
javac -sourcepath . net/thinkbase/test/Test.java -d .out
java -cp .out -Djava.library.path=.out net.thinkbase.test.Test
配置適用于正式使用環境下的Tomcat Web服務器雙向SSL認證
在 Tomcat 5.5 上的配置實例
Aspirin(阿司匹林, https://aspirin.dev.java.net/ ), 按照網站上的介紹, "Aspirin is an embeddable send-only SMTP server.".
為什么叫阿司匹林呢? 因為它就是用來解決令人頭痛的發送郵件問題的.
Aspirin 項目中使用了部分來自 Apache James (Apache 著名的郵件服務器項目, http://james.apache.org/ )的代碼, 通過建立一個小型的 SMTP 服務器, 實現了一個不需要外部 SMTP 服務器的, 簡單的 mail 發送工具;
不依賴于外部 SMTP 服務器, 意味著我們在通過 Java 程序發送郵件時, 可以不再需要安裝和配置 postfix, sendmail 等 email 服務器, 使應用程序配置更簡單, 更方便做到跨平臺.
使用 Aspirin 發送郵件的代碼很簡單, 代碼片斷如下:
...
|
類別標簽: NTLM | subclipse | subversion | ubuntu
一開始使用 subclipse (Eclipse 的 Subversion 插件)不能通過 NTLM 認證訪問 SVN 服務器, 始終報告如下圖所示的錯誤(svn: HTTP authorization method 'NTLM' is not supported):
sudo dpkg -i libsvn-javahl_1.3.1-3ubuntu1_i386.deb進行安裝, 卻被告知依賴的 libsvn0 還沒有被安裝, 直接用 apt-get install libsvn0 安裝后再次使用 dpkg -i 安裝下載的 libsvn-javahl_1.3.1-3ubuntu1_i386.deb, 卻被告知 libsvn0 版本不對:
xxx@xxxlinux:~/Desktop$ sudo dpkg -i libsvn-javahl_1.3.1-3ubuntu1_i386.deb于是又從 http://packages.ubuntulinux.org/dapper/devel/libsvn-javahl 頁面上找到 libsvn-javahl 的依賴庫 libsvn0 (= 1.3.1-3ubuntu1) 的 deb 文件, 然后安裝時又被告知依賴于其它的模塊(未安裝或者版本不對), 于是繼續使用 apt-get install 安裝這些模塊, 或者繼續在 http://packages.ubuntulinux.org/dapper/devel/ 下面各個依賴模塊的頁面上找到這些下一層的依賴模塊的 deb 安裝包, 如此循環往復, 花了不少時間, 總算把 JavaHL 安裝好了.
選中了曾被取消選擇的軟件包 libsvn-javahl。
(正在讀取數據庫 ... 系統當前總共安裝有 60192 個文件和目錄。)
正在解壓縮 libsvn-javahl (從 libsvn-javahl_1.3.1-3ubuntu1_i386.deb) ...
dpkg:依賴關系問題使得 libsvn-javahl 的配置工作不能繼續:
libsvn-javahl 依賴于 libsvn0 (= 1.3.1-3ubuntu1);然而:
系統里的 libsvn0 的版本是 1.2.0-1ubuntu1.
dpkg:處理 libsvn-javahl (--install)時出錯:
依賴關系問題 - 仍未被配置
在處理時有錯誤發生:
libsvn-javahl
sudo ln -s /usr/lib/jni/libsvnjavahl-1.so libsvnjavahl-1.so然后再啟動 Eclipse, 進入 SVN 的設置頁面, 果然現在可以選擇 "JavaHL (JNI)" 方式了:
首先說一下, 這篇文章主要是針對 Java 開發者的, 如果是做 Windows 開發, 那么基本上沒有辦法把工作環境移植到 Ubuntu 上的(當然也不能說死, 也許以后可以使用 WINE 試試, 呵呵).
LANGUAGE="zh_CN:zh:en_US:en"
GST_ID3_TAG_ENCODING=GBK
LANG=zh_CN.GBK
LC_CTYLE=zh_CN.GBK