基於struts的jsp中url中傳遞數組與中文編碼

今天做一個項目,遇到了兩個問題,就是在URL中傳遞數組與url的中文亂碼。

1、如數組String[] roleIds = (String[]) ((DynaActionForm) form).get("roleIds");

即從動態Form表單中得到一個數組,要將其做爲條件加入到url中,

如已有條件爲:condition = "&loginName="+loginName;

若直接寫:condition +="roleIds="+roleIds;是肯定不對的,因爲這樣把roleIds數組做爲了它的成員.

若寫爲:condition += "roleIds="+roleIds[0];則會知道只把此數組的第一個值傳給了roleIds,但通過這我們可以想到,是否可以將數組拆分一下,將每個數據都加入Url中呢?答案是可以的。

如可以這樣寫:

//將數組傳入url中
  if(roleIds != null){
   for(int i = 0; i< roleIds.length; i++){
           SearchCondition += "&roleIds="+roleIds[i]; 
   }

這樣就把此數組加入到了url中。

2、中文亂碼可以通過編解碼來處理。

如userName是中文,

String userName = "我是中文";

將其加入url中作爲搜索條件,則需要先編碼:

condition +="&userName="+java.net.URLEncoder.encode(userName,"GB2312");

當通過request得到userName時,再通過解碼得到中文:

String userName = request.getParameter("userName");

userName = java.net.URLDecoder.decode(userName,"GB2312");

需要注意的是:encode與decode的字符編碼也相同,如都爲:GB2312。且要與容器的編碼同。

如:若容器是使用tomcat,則需修改其server.xml文件,在

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"  />

中加入URIEncoding="GB2312"

 

URIEncoding的編碼與你編解碼時的字符編碼同,若爲gb2312則都是gb2312,若爲gbk,都爲gbk。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章