java.version java |
Java 運行時環境版本 編程 |
java.vendor windows |
Java 運行時環境供應商 瀏覽器 |
java.vendor.url 安全 |
Java 供應商的 URL 服務器 |
java.home 架構 |
Java 安裝目錄 函數 |
java.vm.specification.version 測試 |
Java 虛擬機規範版本 編碼 |
java.vm.specification.vendor |
Java 虛擬機規範供應商 |
java.vm.specification.name |
Java 虛擬機規範名稱 |
java.vm.version |
Java 虛擬機實現版本 |
java.vm.vendor |
Java 虛擬機實現供應商 |
java.vm.name |
Java 虛擬機實現名稱 |
java.specification.version |
Java 運行時環境規範版本 |
java.specification.vendor |
Java 運行時環境規範供應商 |
java.specification.name |
Java 運行時環境規範名稱 |
java.class.version |
Java 類格式版本號 |
java.class.path |
Java 類路徑 |
java.library.path |
加載庫時搜索的路徑列表 |
java.io.tmpdir |
默認的臨時文件路徑 |
java.compiler |
要使用的 JIT 編譯器的名稱 |
java.ext.dirs |
一個或多個擴展目錄的路徑 |
os.name |
操做系統的名稱 |
os.arch |
操做系統的架構 |
os.version |
操做系統的版本 |
file.separator |
文件分隔符(在 UNIX 系統中是「/」) |
path.separator |
路徑分隔符(在 UNIX 系統中是「:」) |
line.separator |
行分隔符(在 UNIX 系統中是「/n」) |
user.name |
用戶的帳戶名稱 |
user.home |
用戶的主目錄 |
user.dir |
用戶的當前工做目錄 |
獲取的代碼示例:
public class SystemProperty { public static void main(String args[]) { System.out.println("java_vendor:" + System.getProperty("java.vendor")); System.out.println("java_vendor_url:" + System.getProperty("java.vendor.url")); System.out.println("java_home:" + System.getProperty("java.home")); System.out.println("java_class_version:" + System.getProperty("java.class.version")); System.out.println("java_class_path:" + System.getProperty("java.class.path")); System.out.println("os_name:" + System.getProperty("os.name")); System.out.println("os_arch:" + System.getProperty("os.arch")); System.out.println("os_version:" + System.getProperty("os.version")); System.out.println("user_name:" + System.getProperty("user.name")); System.out.println("user_home:" + System.getProperty("user.home")); System.out.println("user_dir:" + System.getProperty("user.dir")); System.out.println("java_vm_specification_version:" + System.getProperty("java.vm.specification.version")); System.out.println("java_vm_specification_vendor:" + System.getProperty("java.vm.specification.vendor")); System.out.println("java_vm_specification_name:" + System.getProperty("java.vm.specification.name")); System.out.println("java_vm_version:" + System.getProperty("java.vm.version")); System.out.println("java_vm_vendor:" + System.getProperty("java.vm.vendor")); System.out .println("java_vm_name:" + System.getProperty("java.vm.name")); System.out.println("java_ext_dirs:" + System.getProperty("java.ext.dirs")); System.out.println("file_separator:" + System.getProperty("file.separator")); System.out.println("path_separator:" + System.getProperty("path.separator")); System.out.println("line_separator:" + System.getProperty("line.separator")); }
1、java 經過System.getProperties()獲取系統參數
Properties props=System.getProperties(); //系統屬性 System.out.println("Java的運行環境版本:"+props.getProperty("java.version")); System.out.println("Java的運行環境供應商:"+props.getProperty("java.vendor")); System.out.println("Java供應商的URL:"+props.getProperty("java.vendor.url")); System.out.println("Java的安裝路徑:"+props.getProperty("java.home")); System.out.println("Java的虛擬機規範版本:"+props.getProperty("java.vm.specification.version")); System.out.println("Java的虛擬機規範供應商:"+props.getProperty("java.vm.specification.vendor")); System.out.println("Java的虛擬機規範名稱:"+props.getProperty("java.vm.specification.name")); System.out.println("Java的虛擬機實現版本:"+props.getProperty("java.vm.version")); System.out.println("Java的虛擬機實現供應商:"+props.getProperty("java.vm.vendor")); System.out.println("Java的虛擬機實現名稱:"+props.getProperty("java.vm.name")); System.out.println("Java運行時環境規範版本:"+props.getProperty("java.specification.version")); System.out.println("Java運行時環境規範供應商:"+props.getProperty("java.specification.vender")); System.out.println("Java運行時環境規範名稱:"+props.getProperty("java.specification.name")); System.out.println("Java的類格式版本號:"+props.getProperty("java.class.version")); System.out.println("Java的類路徑:"+props.getProperty("java.class.path")); System.out.println("加載庫時搜索的路徑列表:"+props.getProperty("java.library.path")); System.out.println("默認的臨時文件路徑:"+props.getProperty("java.io.tmpdir")); System.out.println("一個或多個擴展目錄的路徑:"+props.getProperty("java.ext.dirs")); System.out.println("操做系統的名稱:"+props.getProperty("os.name")); System.out.println("操做系統的構架:"+props.getProperty("os.arch")); System.out.println("操做系統的版本:"+props.getProperty("os.version")); System.out.println("文件分隔符:"+props.getProperty("file.separator")); //在 unix 系統中是"/" System.out.println("路徑分隔符:"+props.getProperty("path.separator")); //在 unix 系統中是":" System.out.println("行分隔符:"+props.getProperty("line.separator")); //在 unix 系統中是"/n" System.out.println("用戶的帳戶名稱:"+props.getProperty("user.name")); System.out.println("用戶的主目錄:"+props.getProperty("user.home")); System.out.println("用戶的當前工做目錄:"+props.getProperty("user.dir"));
二、用Java編寫經過代理訪問的應用程序
本技巧將向您講述如何編寫可經過代理訪問因特網上的Web服務器的Java應用程序。在Java應用程序中加入代理支持只需額外編寫幾行代碼,且不依賴任何安全性「漏洞」。
將Java和代理結合起來的祕訣即在Java運行時激活特定的系統屬性。這些屬性未被寫入正式文件,只是做爲Java傳說的一部分在Java編程人員中祕傳。爲了支持代理,Java應用程序不只須要指定代理自己的信息,並且須要指定用於認證的用戶信息。在開始使用網際協議以前,您須要在程序中添加如下幾行代碼:
//通知Java您要經過代理進行鏈接
System.getProperties().put("proxySet","true");
//指定代理所在的服務器
System.getProperties().put("proxyHost","myProxyMachineName");
//指定代理監聽的端口
System.getProperties().put("proxyPort","85");
有些代理在受權用戶訪問因特網以前,要求用戶輸入用戶名和口令。若是您使用位於防火牆以內的Web瀏覽器,您就可能碰到過這種狀況。如下是執行認證的方法:
URLConnection connection=url.openConnection();
String password="username:password";
String encodedPassword=base64Encode(password);
connection.setRequestProperty("Proxy-Authorization",encodedPassword);
這段代碼的思想是,您必須調整HTTP標頭以發出用戶信息。這是經過調用setRequestProperty()來實現的。這種方法容許您在發出請求以前處理HTTP標頭。HTTP要求用base64對用戶名和口令進行編碼。幸運的是,有一組公用域API,它們將代您執行編碼(請參閱參考資源部分)。
如您所見,在Java應用程序中加入代理支持並不須要作多少工做。有了如今的知識,再作一點研究(您必須查明您的代理是如何處理您感興趣的協議以及如何進行用戶認證的),您就能用其餘協議實現代理。
HTTP代理:(例子)
Properties props = System.getProperties();
props.put("http.proxyHost", "192.168.0.150");
props.put("http.proxyPort", "808");
FTP代理
ScottD.Taylor提出這個祕訣來處理FTP協議代理:
defaultProperties.put("ftpProxySet","true");
defaultProperties.put("ftpProxyHost","proxy-host-name");
defaultProperties.put("ftpProxyPort","85");
接下來您即可以經過如下代碼使用"ftp"協議訪問文件URL:
URL url=newURL("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt");
若是有人有使用其餘網際協議代理的例子,我很想看看。
注意:代碼示例(Example.java)僅在JDK1.1.4下測試過。
後續技巧!
對於仍在使用JDK1.1.7(配合WebSphere3.0)的開發人員而言,將proxyHost和proxyPort設爲系統屬性不起做用;conn.getInputStream()或者返回鏈接超時,或者是找不到主機路徑。可是,我使用接受Host和Port爲參數的URL構造函數解決了這一問題(使用個人代理主機和端口):
public URL(String protocol,String host,int port,String file).
藉助用戶名和口令進行認證的方法不起做用。應將"Basic"置於認證字符串的開頭;例如:
String encodedPassword=base64Encode(password);
應該是:
String encodedPassword="Basic"+base64Encode(password);
您也沒必要用一個單獨的程序來進行64位編碼。您可使用sun.misc.BASE64Encoder()類。下面是完成這兩處改動以後的代碼:
System.getProperties().put("proxySet","true");
System.getProperties().put("proxyHost",proxyHost);
System.getProperties().put("proxyPort",proxyPort);
String authString="userid:password";
String auth="Basic"+newsun.misc.BASE64Encoder().encode(authString.getBytes());
URL url=newURL("http://java.sun.com/");
URLConnection conn=url.openConnection();
conn.setRequestProperty("Proxy-Authorization",auth);
下面是使用socks4代理服務器的方法:
System.getProperty("socksProxySet",true);
System.getProperty("socksProxyHost",proxyHostName);
System.getProperty("socksProxyPort",proxyPort);
Usually the proxyPort for Socks 4 is port 1080