2007年8月23日
我是不是因該寫一點關(guān)于設(shè)計模式的文章了呢?
或許我該了...
最近真的很累,非常累,最多的還是來自無盡物質(zhì)的要求和匱乏的工資;致使我開始懷疑我來上海是否是對的,但是想想別人,或者說是很多人都能來,而且還有些還混的比較好,難道我就不該來嗎?我很彷徨.
URL的openConnection大開一個URLConnection,如果你打開的是一個http協(xié)議的url.那么返回的事實上是一個HttpURLConnection.這個connection中,可以設(shè)置和Http訪問有關(guān)的一些屬性,比如contentType,method等等,這些都是http所特有的.所以必須在HttpURLConnection中設(shè)置.
在URL去訪問servlet時,url字符串會被編碼成相應(yīng)的字符集,比如下面代碼
URL url=new URL("http://localhost:8080/TestWeb/URLServlet?name=中國");
那么在servlet端看來,這個"中國"兩個漢字必須使用以上代碼的調(diào)用端的系統(tǒng)默認字符集來解碼,比如我的機器的默認字符集是GBK.那么Servlet端的tomcat的相應(yīng)的connector的URIEncoding必須設(shè)置為GBK或者其兼容字符集.否則出現(xiàn)亂碼.
當(dāng)然,在上述代碼中可以把中文用URLEncoder來按照相應(yīng)的字符集編碼.比如URLEncoder.encode("中國","UTF-8");那相應(yīng)的tomcat端.比如把connector的URIEncoding屬性設(shè)置為相應(yīng)的字符集UTF-8.這樣才不會出現(xiàn)亂碼.
同理.在servlet端.使用contentType設(shè)置的字符集編碼方式,和客戶端的解碼方式必須一致,不然中文會出現(xiàn)亂碼現(xiàn)象.
在servlet中用sendRedirect中url出現(xiàn)中文的時候的問題,比如sendRedirect("my.jsp?name=張三");那么在客戶端,會出現(xiàn)一串亂碼.比如
http://localhost:8080?my.jsp?name=????,這是由于在java內(nèi)部的編碼都是以Unicode來編碼的,那這串字符串在反映到客戶端時.你客戶端使用的解碼方式和這個是不同的 所以出現(xiàn)亂碼.所需要做的,是用URLEncoder來編碼成特定的編碼格式,當(dāng)然,這個類的使用可以參考jdk文檔.