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;
  }
}
时间: 2024-10-04 13:29:01

Servlet--HttpUtils类的相关文章

Servlet相关类/接口说明

可通过该网址查看英文API       https://docs.oracle.com/javaee/6/api/ Java Servlet API的部分类和接口的详细说明.本API包含了两个软件包,十二个接口和九个类. 软件包:javax.servlet  所包含的接口:RequestDispatcher:Servlet:ServletConfig:ServletContext:ServletRequest:ServletResponse:SingleThreadModel.  所包含的类:G

Servlet 常用类

Servlet 是一套标准的接口规范,当用户通过web请求来访问服务器时,由web容器根据配置调用我们实现的对应的servlet对象来提供服务.同时为了方便开发,servlet标准中也提供了许多常用的工具类,比如基本的Request 和Response对象以及其他要说到的常用的类. ServletRequest 对象 Servlet接口中的service方法的定义如下: public void service(ServletRequest req, ServletResponse res) th

springmvc中配置servlet初始化类

<bean  id="InitStart" lazy-init="false" init-method="InitSystem" class="my.spring.uitl.InitStart"></bean> 配置在springmvc的配置文件中 只要项目启动,就会默认执行这个类的这个方法 相比静态类代码块的好处, 有点在tomcat启动时就会调用如果有错立即报错,静态代码块,调用时才会报错 作用 可

servlet HttpServletResponse类

HttpServletResponse 类和 HttpServletRequest 类一样.每次请求进来,Tomcat 服务器都会创建一个 Response 对象传递给 Servlet 程序去使用.HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息,我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置 a) 两个流 字节流 getOutputStream(); 常用于下载(传递二进

Servlet-02 Servlet相关类

ServletConfig / ServletContext / ServletRequest / ServletResponse 一. ServletConfig:封装了Servlet得配置信息,并且可以获取ServletContext对象. 1 获取初始化参数 a. 配置初始化参数 <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.bwr.start.HelloS

Servlet常用类

javax.servlet.ServletConfig;javax.servlet.ServletException;javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse; javax.servlet.http.HttpSession; javax.servlet.http.Cookie; javax.servlet.ServletCo

servlet HttpServletRequest类 4请求转发

请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发. servlet 1: // 获取请求的参数(办事的材料)查看 String username = req.getParameter("username"); System.out.println("在 Servlet1(柜台 1)中查看参数(材料):" + username); // 给材料 盖一个章,并传递到 Servlet2 (柜台 2 )去查看 req.setAttribute(&q

Servlet类详解

Servlet核心类 关联: 从我可以拿到你 想要拿到servletConfig对象只要通过Servlet的getServletConfig()就可以拿到了 在ServletConfig中提供了getServeltContext()方法,返回的是一个ServeltContext对象,也是通过方法拿到了ServeltContext对象,所以ServletConfig和ServeltContext也是关联的关系 依赖:依赖的那个为被依赖的参数 ServletConfig 1.作用: 就是拿取serv

06.实现servlet的几种方式,以及接口或者类之间的关系

接口:Servlet.ServletConfig.ServletRequest.ServletResponse.HttpServletRequest.HttpServletResponse.ServletContext 类:HttpServlet(抽象类).GenericServlet(抽象类) 来张关系图 ServletContext: ServletContext的对象是application是在项目初始化时被创建的.故servletContext随着应用初始化而被创建,随着应用的结束而被销

servlet学习笔记02 servlet类、对象

1.servlet主要类和接口的结构如下图所示: servlet常用类和接口javax.servlet.Servlet接口:规定了必须由servlet类实现由servlet引擎识别和管理的方法集,基本目标是提供生命周期方法init().service()和destroy()方法.Servlet接口中方法:void init(ServletConfig config)throws ServletException:在servlet被载入后和实施服务前由servlet引擎进行1次调用,如果产生Una