lizongbo 的 編程學習

          http://618119.com

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            23 Posts :: 1 Stories :: 78 Comments :: 0 Trackbacks
          有同事討論到關于url編碼的問題。
          因此總結以下幾點方法供大家參考。
          首先,對于post請求的時候,通過過濾器就可以搞定,以下的方法主要是針對get方式的亂碼處理。

          1. 手工對字符串編碼解碼的方法為:
          java.net.URLEncoder.encode("測試","UTF-8");
          java.net.URLDecoder.decode("%E6%B5%8B%E8%AF%95%26%3Faaa","UTF-8");
          這個方法適用于自己從原始字符串中進行解碼處理。

          2. tomcat服務器的處理url編碼的方法:

          修改tomcat的server.xml增加指定的編碼,以代替tomcat默認的ISO-8859-1。
          需要增加的參數為:URIEncoding,
          比如下面的例子是制定解碼使用UTF-8,
          <Connector port="8080"
          maxThreads="800" minSpareThreads="25" maxSpareThreads="100"
          enableLookups="false" redirectPort="8443" acceptCount="0"
          debug="0" connectionTimeout="20000" URIEncoding="UTF-8"
          disableUploadTimeout="true" />
          如果用到了apache與tomcat 的整合,則還需要:
          <Connector port="8009" URIEncoding="UTF-8"
          enableLookups="false" redirectPort="8443" debug="0"
          protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100" acceptCount="0"/>
          (這個方法最簡單方便,但是使用這種的方法之后,代碼中就不需要也能有new String(strvalue.getBytes("ISO8859-1","GBK"); 這樣的處理方式)

          3.對于已經部署的系統,可能已經有其他同事對編碼使用了
          new String(strvalue.getBytes("ISO8859-1","GBK");
          這樣的方法作了處理,這個時候使用第二種方法就可能會影響到其它模塊的正常使用,

          因此,我們可以自己重新解析queryString我封裝了幾個方法。使用重新封裝的方法可以在不影響原來系統的情況下,正確的獲得參數。

          封裝的代碼如下,供大家參考:



          /**
          * 從請求的url字符串中解析參數,當request.getParameterValues()取得的參數值編碼值不正確的時候可以使用該方法
          * @param request HttpServletRequest
          * @param paramName String
          * @return String[] 返回多個同參數名的值
          */
          public static String[] getParamsFromQueryString(HttpServletRequest request,
          String paramName) {
          return getParamsFromQueryString(request.getQueryString(), paramName);
          }

          /**
          * 從請求的url字符串中解析參數,當request.getParameterValues()取得的參數值編碼值不正確的時候可以使用該方法
          * @param request HttpServletRequest
          * @param paramName String
          * @return String[]
          */
          public static String getParameterFromQueryString(HttpServletRequest request,
          String paramName) {
          return getParameterFromQueryString(request.getQueryString(), paramName);
          }

          /**
          * 從請求的url字符串中解析參數,當request.getParameter()取得的參數值編碼值不正確的時候可以使用該方法
          * @param queryString String
          * @param paramName String
          * @return String 只返回一個值
          */
          public static String getParameterFromQueryString(String queryString,
          String paramName) {
          String[] s = getParamsFromQueryString(queryString, paramName);
          if (s != null && s.length >= 1) {
          return s[0];
          }
          return null;
          }

          /**
          * 從請求的url字符串中解析參數,當request.getParameter()取得的參數值編碼值不正確的時候可以使用該方法
          * @param queryString String
          * @param paramName String
          * @return String[] 返回多個同參數名的值
          */
          public static String[] getParamsFromQueryString(String queryString,
          String paramName) {
          if (paramName == null || paramName.length() < 1 || paramName == null ||
          paramName.length() < 1) {
          return new String[0];
          }
          List rsl = new ArrayList();
          String params[] = queryString.split("&");
          for (int i = 0; i < params.length; i++) {
          // System.out.println(params[i]);
          if (params[i] != null && params[i].startsWith(paramName + "=")) {
          try {
          rsl.add(java.net.URLDecoder.decode(params[i].substring(paramName.
          length() +
          1), "UTF-8")); //根據需要修改自己要使用的編碼。
          }
          catch (UnsupportedEncodingException ex) {
          }
          }
          }
          return (String[]) rsl.toArray(new String[0]);
          }

          public static void main(String[] args) {
          //該例子演示解碼。
          //jsp和servlet中調用
          // System.out.println(getParameterFromQueryString(request.getQueryString(), "q"));
          //該例子示意的是gogole的url中的queryString。
          System.out.println(getParameterFromQueryString(
          "hl=zh-CN&newwindow=1&q=%E6%B5%8B%E8%AF%95%26%3Faaa&meta=", "q"));
          }


          posted on 2006-04-07 14:10 lizongbo 的編程學習 閱讀(6487) 評論(1)  編輯  收藏 所屬分類: java 積累
          主站蜘蛛池模板: 正定县| 施秉县| 綦江县| 阳高县| 大丰市| 永春县| 恭城| 原平市| 厦门市| 通许县| 孙吴县| 呈贡县| 南木林县| 亚东县| 淮阳县| 萍乡市| 高淳县| 赫章县| 鹰潭市| 灵山县| 新和县| 蚌埠市| 华宁县| 无极县| 扬州市| 临沭县| 宜春市| 武鸣县| 黔西| 安康市| 西和县| 延川县| 福贡县| 类乌齐县| 郯城县| 克东县| 睢宁县| 囊谦县| 江津市| 柳林县| 汉中市|