zoukankan      html  css  js  c++  java
  • Servlet--HttpUtils类

    定义

    public class HttpUtils

    收集 HTTP Servlet 使用的静态的有效的方法。


    方法
    1、getRequestURL
    public static StringBuffer getRequestURL(HttpServletRequestrequest);
    在服务器上重建客户端用来建立请求的 URL。这个方法反映了不同的协议(例如 http和 https)和端口,但不包含查询字符串。这个方法返回一个 StringBuffer 而不是一个 String,这样 URL 可以被 Servlet 开发者有效地修改。
    2、parsePostData
    public static Hashtable parsePostData(int len,ServletInputstream in);
    解析一个包含 MIME 类型 application/x-www-form-urlencoded 的数据的流,并创建一个具有关键值-数据对的 hash table。这里的关键值是字符串,数据是该字符串所对应的值的列表。一个关键值可以在 POST 的数据中出现一次或多次。这个关键值每出现一 次,它的相应的值就被加入到 hash table 中的字符串所对应的值的列表中。从POST数据读出的数据将经过URL 解码, +将被转换为空格以十六进制传送的数据 (例如%xx)将被转换成字符。当 POST 数据无效时,该方法抛出一个 IllegalArgumentException。
    3、parseQueryString
    public static Hashtable parseQueryString(String s);
    解析一个查询字符串,并创建一个具有关键值-数据对的 hash table。这里的数据是该字符串所对应的值的列表。一个关键值可以出现一次或多次。这个关键值每出现一次,它的相应的值就被加入到 hash table 中的字符串所对应的值的列表中。从查询字符串读出的数据将经过 URL 解码,+将被转换为空格以十六进制传送的数据(例如%xx)将被转换成字符。

    当查询字符串无效时,该方法抛出一个 IllegalArgumentException。


    这个类我从来没接触过,不过既然是一个工具类,就贴出来吧,下面是源码:

    package javax.servlet.http;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.Hashtable;
    import java.util.ResourceBundle;
    import java.util.StringTokenizer;
    import javax.servlet.ServletInputStream;
    
    /** @deprecated */
    public class HttpUtils
    {
      private static final String LSTRING_FILE = "javax.servlet.http.LocalStrings";
      private static ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.http.LocalStrings");
    
      public static Hashtable parseQueryString(String s)
      {
        String[] valArray = null;
    
        if (s == null) {
          throw new IllegalArgumentException();
        }
        Hashtable ht = new Hashtable();
        StringBuffer sb = new StringBuffer();
        StringTokenizer st = new StringTokenizer(s, "&");
        while (st.hasMoreTokens()) {
          String pair = st.nextToken();
          int pos = pair.indexOf('=');
          if (pos == -1)
          {
            throw new IllegalArgumentException();
          }
          String key = parseName(pair.substring(0, pos), sb);
          String val = parseName(pair.substring(pos + 1, pair.length()), sb);
          if (ht.containsKey(key)) {
            String[] oldVals = (String[])(String[])ht.get(key);
            valArray = new String[oldVals.length + 1];
            for (int i = 0; i < oldVals.length; i++)
              valArray[i] = oldVals[i];
            valArray[oldVals.length] = val;
          } else {
            valArray = new String[1];
            valArray[0] = val;
          }
          ht.put(key, valArray);
        }
        return ht;
      }
    
      public static Hashtable parsePostData(int len, ServletInputStream in)
      {
        if (len <= 0) {
          return new Hashtable();
        }
        if (in == null) {
          throw new IllegalArgumentException();
        }
    
        byte[] postedBytes = new byte[len];
        try {
          int offset = 0;
          do
          {
            int inputLen = in.read(postedBytes, offset, len - offset);
            if (inputLen <= 0) {
              String msg = lStrings.getString("err.io.short_read");
              throw new IllegalArgumentException(msg);
            }
            offset += inputLen;
          }while (len - offset > 0);
        }
        catch (IOException e) {
          throw new IllegalArgumentException(e.getMessage());
        }
    
        try
        {
          String postedBody = new String(postedBytes, 0, len, "8859_1");
          return parseQueryString(postedBody);
        }
        catch (UnsupportedEncodingException e) {
        }
        throw new IllegalArgumentException(e.getMessage());
      }
    
      private static String parseName(String s, StringBuffer sb)
      {
        sb.setLength(0);
        for (int i = 0; i < s.length(); i++) {
          char c = s.charAt(i);
          switch (c) {
          case '+':
            sb.append(' ');
            break;
          case '%':
            try {
              sb.append((char)Integer.parseInt(s.substring(i + 1, i + 3), 16));
    
              i += 2;
            }
            catch (NumberFormatException e)
            {
              throw new IllegalArgumentException();
            } catch (StringIndexOutOfBoundsException e) {
              String rest = s.substring(i);
              sb.append(rest);
              if (rest.length() == 2) {
                i++;
              }
            }
    
          default:
            sb.append(c);
          }
        }
    
        return sb.toString();
      }
    
      public static StringBuffer getRequestURL(HttpServletRequest req)
      {
        StringBuffer url = new StringBuffer();
        String scheme = req.getScheme();
        int port = req.getServerPort();
        String urlPath = req.getRequestURI();
    
        url.append(scheme);
        url.append("://");
        url.append(req.getServerName());
        if (((scheme.equals("http")) && (port != 80)) || ((scheme.equals("https")) && (port != 443)))
        {
          url.append(':');
          url.append(req.getServerPort());
        }
    
        url.append(urlPath);
        return url;
      }
    }


  • 相关阅读:
    第二章:Java内存区域
    第六章:内核数据结构
    第十章:内核同步方法
    第九章:内核同步介绍
    第九章:zookeeper内部原理
    第三章:开始使用zookeeper的API
    第二章:了解zookeeper
    【观点】健康的心智是中国未来最大的生产力
    【流程管理分享】人事不分,问题不断
    为什么中国人勤劳而不富裕?为什么宋朝富裕而不强大?
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233016.html
Copyright © 2011-2022 走看看