说说BES(续)
接上次,我的BES將connector改為org.apache.catalina.connector.http.HttpConnector
但其實這也是一個不負責任的做法,因為這個connector是一個不建議使用的東東,BES也沒對其BUG作一些
改為,最明顯的,所有通過get過去的中文全無法正常處理,即使顯示的調用
a = new String(a.getBytes("iso-8859-1"),"gb2312")也一樣,而用org.apache.coyote.tomcat4.CoyoteConnector則沒有問題,因此認定是connector的相關代碼有問題
經過一番排查,最終將目標銷定了代碼catalina.jar:org.apache.catalina.connector.http。SocketInputStream
在readRequestLine方法中,竟然用類似requestLine.uri[readCount] = (char)buf[pos];的方法將byte轉成了char,這顯然是有問題的,
后寫了方法:
private char Byte2Char(byte a)
????????? throws MalformedInputException
???? {
????????? byte srcbyte[] = new byte[1];
????????? srcbyte[0] = a;
????????? ByteToCharISO8859_1 conv = new ByteToCharISO8859_1();
????????? return conv.convertAll(srcbyte)[0];
???? }
完成二者之間的轉換,即改為:
requestLine.uri[readCount] = Byte2Char(buf[pos]);
問題得到了解決。
出了這些問題讓人更覺得BES用得不爽,tomcat的所有低級錯誤它都保留了,畢竟是一個要錢的東東呀!
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 聊几句
- 下一篇: 最近看的电影(乱谈)