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;
}
}
Servlet--HttpUtils类的更多相关文章
- 找不到javax.servlet.Filter类,
找不到javax.servlet.Filter类, 在构建的依赖包中缺少servlet.api
- JavaWeb知识回顾-Servlet常用类、接口及其方法
今天主要把servlet的一些常用的类.接口和方法简单回顾一下. javax.servlet包 1.javax.servlet.Servlet接口 接口用于开发servlet,所有的servlet都要 ...
- springmvc中配置servlet初始化类
<bean id="InitStart" lazy-init="false" init-method="InitSystem" cl ...
- 利用反射实现Servlet公共类的抽取
一次请求的执行过程: 请求:发送请求地址-->到达web.xml中,找到地址对应的servlet类-->通过反射调用该类的构造函数,创建该servlet类的对象-->通过当前对象调用 ...
- Servlet 常用类
Servlet 是一套标准的接口规范,当用户通过web请求来访问服务器时,由web容器根据配置调用我们实现的对应的servlet对象来提供服务.同时为了方便开发,servlet标准中也提供了许多常用的 ...
- Servlet/JSP-02 Servlet相关类
ServletConfig / ServletContext / ServletRequest / ServletResponse 一. ServletConfig:封装了Servlet得配置信息,并 ...
- Servlet获取类路径下的资源
示例程序: package cn.yzu; import java.io.IOException; import java.io.InputStream; import javax.servlet.S ...
- Servlet常用类
javax.servlet.ServletConfig;javax.servlet.ServletException;javax.servlet.http.HttpServlet;javax.serv ...
- Servlet API遍程常用接口和类
本文主要总结Servlet API遍程常用接口和类 Servlet API http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html ...
- 关于Servlet的原理以及常用类
Servlet是JavaWeb的三大组件之一,它属于动态资源. 在Servlet中通常需要: 接收请求数据: 处理请求: 完成响应. 实现Servlet有三种方式: 实现javax.servlet.S ...
随机推荐
- Java学习笔记16(面向对象九:补充内容)
总是看到四种权限,这里做一个介绍: 最大权限是public,后面依次是protected,default,private private修饰的只在本类可以使用 public是最大权限,可以跨包使用,不 ...
- centos下卸载OpenJDK 并安装sun的jdk
centos下卸载OpenJDK 并安装sun的jdk 第一步:查看并卸载CentOS自带的OpenJDK 安装好的CentOS会自带OpenJdk,用命令 java -version ,我这里显示下 ...
- .NET使用Office Open XML导出超大数量数据到 Excel
我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EX ...
- squid日志分析
sarg对squid的日志流量分析报表(按小时,天,周生成) 1.SARG介绍 SARG的全称是:Squid Analysis Report GeneratorSARG非常好用的Squid日志分析工具 ...
- AdaBoost入门
写一点自己理解的AdaBoost,然后再贴上面试过程中被问到的相关问题.按照以下目录展开. 当然,也可以去我的博客上看 Boosting提升算法 AdaBoost 原理理解 实例 算法流程 公式推导 ...
- springMvc项目的搭建,暂时没有整合持久层框架(java Config配置对比xml配置)
public class WebInit implements WebApplicationInitializer { @Override public void onStartup(ServletC ...
- assert断言
https://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html assert是一个宏定义,其作用是如果它的条件返回错误,则终止程序执行,原型 ...
- IE6的兼容性以及处理方法
1. 当我们写了一段正确的代码,但是在不同浏览器下,产生一些不正确的解析,这叫做兼容性问题 2. 在IE6下 ,标准盒模型: width/height = content; 可视宽/高 = conte ...
- Sql的基础知识(一)
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份 sql server --- ...
- BASH 学习笔记小结
1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...