`
liuxiang123
  • 浏览: 29710 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

java解析url参数到hashMap

阅读更多

tomcat解析url参数的解析方式 拿出来做一个备份 方便以后使用

  public static void parseParameters(Map map, String data, String encoding)
	    throws UnsupportedEncodingException
	  {
	    if ((data == null) || (data.length() <= 0))
	    {
	      return;
	    }

	    byte[] bytes = null;
	    try {
	      if (encoding == null)
	        bytes = data.getBytes();
	      else
	        bytes = data.getBytes(encoding);
	    }
	    catch (UnsupportedEncodingException uee)
	    {
	    }
	    parseParameters(map, bytes, encoding);
	  }
	public static void parseParameters(Map map, byte[] data, String encoding) throws UnsupportedEncodingException
  {
    if ((data != null) && (data.length > 0)) {
      int ix = 0;
      int ox = 0;
      String key = null;
      String value = null;
      while (ix < data.length) {
        byte c = data[(ix++)];
        switch ((char)c)
        {
        case '&':
          value = new String(data, 0, ox, encoding);
          if (key != null) {
            putMapEntry(map, key, value);
            key = null;
          }
          ox = 0;
          break;
        case '=':
          if (key == null) {
            key = new String(data, 0, ox, encoding);
            ox = 0;
          } else {
            data[(ox++)] = c;
          }
          break;
        case '+':
          data[(ox++)] = 32;
          break;
        case '%':
          data[(ox++)] = (byte)((convertHexDigit(data[(ix++)]) << 4) + convertHexDigit(data[(ix++)]));

          break;
        default:
          data[(ox++)] = c;
        }
      }

      if (key != null) {
        value = new String(data, 0, ox, encoding);
        putMapEntry(map, key, value);
      }
    }
  }
	  private static void putMapEntry(Map map, String name, String value)
	  {
	    String[] newValues = null;
	    String[] oldValues = (String[])(String[])map.get(name);
	    if (oldValues == null) {
	      newValues = new String[1];
	      newValues[0] = value;
	    } else {
	      newValues = new String[oldValues.length + 1];
	      System.arraycopy(oldValues, 0, newValues, 0, oldValues.length);
	      newValues[oldValues.length] = value;
	    }
	    map.put(name, newValues);
	  }
	  private static byte convertHexDigit(byte b)
	  {
	    if ((b >= 48) && (b <= 57)) return (byte)(b - 48);
	    if ((b >= 97) && (b <= 102)) return (byte)(b - 97 + 10);
	    if ((b >= 65) && (b <= 70)) return (byte)(b - 65 + 10);
	    return 0;
	  }

 

分享到:
评论

相关推荐

    java解析出url请求的路径和参数键值对类(解析出url请求的路径,包括页面)

    public class CRequest { /** * 解析出url请求的路径,包括页面 * @param strURL url地址 * @return url路径 */ public static String UrlPage(String strURL) { String strPage=null; String[] arrSplit=null; ...

    java jdk实列宝典 光盘源代码

    java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;...

    java基础案例与开发详解案例源码全

    2.3.5 常见错误解析24 2.4 Java类库组织结构和文档27 2.5 Java虚拟机简介28 2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是变量32 3.1.2 为什么需要变量32 3.1.3 变量的声明和赋值33...

    Java JDK实例宝典

    3 Java的参数传递 2. 4 自定义形状类 2. 5 类的加载顺序 2. 6 方法和变量在继承时的覆盖与隐藏 2. 7 排序类 2. 8 Singleton单例模式 2. 9 Factory工厂模式 2. 10 Adapter适配器模式 ...

    java 面试题 总结

    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...

    Java用正则表达式如何读取网页内容

    学习java的正则表达式,抓取网页并解析HTML部分内容  ... import java.io.BufferedReader;...import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import j

    java面试题

    35. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 18 36. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    3 匹配匹配并提取url ; 4 匹配并提取http ; 5.匹配日期 6 匹配电话; 7 匹配身份证 8 匹配邮编代码 9. 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" 分号; 逗号, 帽号: 数学减号- 右尖...

    超级有影响力霸气的Java面试题大全文档

    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...

    Java开发技术大全 电子版

    11.2.5哈希映射类(HashMap)使用示例347 11.2.6有序树(TreeSet)使用示例349 11.2.7有序树映射类(TreeMap)使用示例353 11.2.8枚举(Enum)使用示例355 11.2.9枚举集(EnumSet)使用示例358 11.3常用算法361...

    一个web爬虫的事例.txt

    import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.regex.Matcher; import java.util.regex.Pattern; //...

    Excel POI读取封装(文件+示范代码)

    List&lt;HashMap, String&gt;&gt; dataList = new ArrayList&lt;HashMap, String&gt;&gt;( 0);// 存放其他数据集合 for (int i = startRow; i ; i++) {// 循环行 // ;i的范围是xls坐标中的数字(A‘1’,C‘10’) HSSFRow row = ...

    Android手机卫士之获取联系人信息显示与回显

    系统联系人提供了一个内容提供者,通过内容解析器,匹配Url地址 1.内容解析器 2.Url地址,查看系统联系人数据库,内容提供者源码 先看api文档的清单文件,后看java类(联系人数据库有多张表) contents://...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关...

Global site tag (gtag.js) - Google Analytics