javaFAQ

問:

當用JDBC向數據庫中插入數據或從數據庫中提取數據時,爲何有時中文字符會顯示爲亂?

??

答:

這個問題的實現通常與各個JDBC driver的實現有關. 目前大多數JDBC
driver採用本地編碼格式來傳輸中文字符,例如中文字符"0x4175"會被轉成"0x41"和"0x75"進行傳輸.因此我們需要對JDBC driver返回的字符以及要發給JDBC driver的字符進行轉換.

當用JDBC driver向數據庫中插入數據時,需要先將Unicode轉成native code; 當JDBC driver從數據庫中查詢數據時,則需要將native code轉換成Unicode.

下面給出了這兩種轉換的實現:

String native2Unicode(String s) {

if (s == null || s.length() == 0) {

return null;

}

byte[] buffer = new byte[s.length()];

for (int i = 0; i s.length(); i++) { if (s.charAt(i)>= 0x100) {
c = s.charAt(i);

byte []buf = (""+c).getBytes();

buffer[j++] = (char)buf[0];

buffer[j++] = (char)buf[1];

}

else {

buffer[j++] = s.charAt(i);

}

}

return new String(buffer, 0, j);

}

除使用以上兩個方法之外,有些JDBC driver如果對jdbc driver Manager設置了正確
的字符集屬性,以上2個方法就不需要了.

問:

當用Servlet來處理http請求併產生返回的HTML頁面時,如何使HTML頁面中的中文字符能
夠正常顯示?

答:

javax.servlet.http.HttpResponse類用於產生返回頁面.通過HttpResponse定義的方法
getOutputStream()可以獲得ServletOutputStream的實例,這樣用戶就可以利用ServletOu
tputStream.write方法向輸出流中寫入返回頁面的內容.

但是ServletOutputStream使用的是缺省的編碼方式,如果要使返回頁面中的中文字符能夠正常顯示,最好顯示地指定所用的字符編碼方式. 通常需要構造一個 OutputStreamWriter , 例程如下:

public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException

{

res.setContentType("text/html";

ServletOutputStream out = res.getOutputStream();

OutputStreamWriter ow = new OutputStreamWriter(out,"GB2312";

ow.write("這是測試";

ow.flush();

ow.close();

}

問:

如何設置Java WebServer的CLASSPATH,以包含用戶的class文件?

答:

有兩種方法可以設置Java

WebServer的CLASSPATH環境變量,以使用戶編寫的Servlet能夠調
用用戶的class文件.

將用戶的class文件放到 JavaWebServer_Dir/classes目錄下,在Java WebServer
啓動時,classes目錄被自動加入到CLASSPATH環境變量中了.

修改httpd.nojre文件,將用戶class文件所在的路徑名加到CLASSPATH環境變量中.

問:

爲什麼在Windows平臺上用Naming.lookup來獲取遠程RMI對象時會很慢?

答:

機器的網絡設置不正確很可能會引起該問題的發生.

RMI使用了Java網絡類,特別是java.net.InetAddress類,它將查詢TCP/IP的主機名,
包括IP地址到主機名的映射和主機名到IP地址的映射.在Windows平臺,這種查詢功能
是由本地的Windows Socket庫來實現的. 因此延時是發生在Windows庫中,而非RMI中.

如果你的機器設置成使用DNS,問題通常是DNS服務器查不到主機名,你所發現的延時
是DNS查詢的延時. 請嘗試將RMI通信中涉及到的所有主機名/IP地址加到本地文件
winntsystem32driversetchosts或windowshosts中. 格式如下:

IP地址 主機名

如此設置應當可以明顯地減少查詢所花的時間.  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章