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;
      }
    }


  • 相关阅读:
    HOJ 2139 Spiderman's workout(动态规划)
    FZU 2107 Hua Rong Dao(dfs)
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233016.html
Copyright © 2011-2022 走看看