【需求描述】
项目中,需要一个解析URL并获取参数信息的工具类。
JDK版本要求:1.4
【解决方案】
1)增加一个解析URL的HttpRequestParser工具类
public class HttpRequestParser
2)代码如下:
/*
* 创建日期 2012-9-26
*
*/
package com.test.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.security.Principal;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* 解析URL的HttpRequestParser工具类
* 基于JDK版本1.4
*/
public class HttpRequestParser {
/**
* 分析url字符串,采用utf-8解码
* @param urlString
* @return
*/
public static Request parse(String urlString) {
return parse(urlString, "utf-8");
}
/**
* 分析url字符串,指定字符集进行解码
* @param urlString
* @param enc
* @return
*/
public static Request parse(String urlString, String enc) {
if (urlString == null || urlString.length() == 0) {
return new Request();
}
int questIndex = urlString.indexOf('?');
if (questIndex == -1) {
return new Request(urlString);
}
String url = urlString.substring(0, questIndex);
String queryString = urlString.substring(questIndex + 1, urlString.length());
return new Request(url, getParamsMap(queryString, enc));
}
private static Map getParamsMap(String queryString, String enc) {
Map paramsMap = new HashMap();
if (queryString != null && queryString.length() > 0) {
int ampersandIndex, lastAmpersandIndex = 0;
String subStr, param, value;
String[] paramPair, values, newValues;
do {
ampersandIndex = queryString.indexOf('&', lastAmpersandIndex) + 1;
if (ampersandIndex > 0) {
subStr = queryString.substring(lastAmpersandIndex, ampersandIndex - 1);
lastAmpersandIndex = ampersandIndex;
} else {
subStr = queryString.substring(lastAmpersandIndex);
}
paramPair = subStr.split("=");
param = paramPair[0];
value = paramPair.length == 1 ? "" : paramPair[1];
try {
value = URLDecoder.decode(value, enc);
} catch (UnsupportedEncodingException ignored) {
}
if (paramsMap.containsKey(param)) {
values = (String[])paramsMap.get(param);
int len = values.length;
newValues = new String[len + 1];
System.arraycopy(values, 0, newValues, 0, len);
newValues[len] = value;
} else {
newValues = new String[] { value };
}
paramsMap.put(param, newValues);
} while (ampersandIndex > 0);
}
return paramsMap;
}
/**
* 请求对象
* @author yy
* @date Jun 21, 2009 2:17:31 PM
*/
public static class Request implements HttpServletRequest {
private String requestURI;
private Map parameterMap;
Request() {
this("");
}
Request(String requestURI) {
this.requestURI = requestURI;
parameterMap = new HashMap();
}
Request(String requestURI, Map parameterMap) {
this.requestURI = requestURI;
this.parameterMap = parameterMap;
}
/**
* 获得指定名称的参数
* @param name
* @return
*/
public String getParameter(String name) {
String[] values = (String[])parameterMap.get(name);
if (values != null && values.length > 0) {
return values[0];
}
return null;
}
/**
* 获得所有的参数名称
* @return
*/
public Enumeration getParameterNames() {
return Collections.enumeration(parameterMap.keySet());
}
/**
* 获得指定名称的参数值(多个)
* @param name
* @return
*/
public String[] getParameterValues(String name) {
return (String[])parameterMap.get(name);
}
/**
* 获得请求的url地址
* @return
*/
public String getRequestURI() {
return requestURI;
}
/**
* 获得 参数-值Map
* @return
*/
public Map getParameterMap() {
return parameterMap;
}
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("{");
buf.append("\n url = ").append(this.requestURI);
buf.append("\n paramsMap = {");
if (this.parameterMap.size() > 0) {
Iterator it = this.parameterMap.entrySet().iterator();
while(it.hasNext()){
Map.Entry e=(Map.Entry)it.next();
buf.append(e.getKey()).append("=").append(Arrays.asList((Object[])e.getValue()).toString()).append(",");
}
buf.deleteCharAt(buf.length() - 1);
}
buf.append("}\n}");
return buf.toString();
}
// 剩下的函数,自己根据需求实现了,一般返回0或者null即可
// 这里就不贴了,HttpServletRequest的接口方法也太多了
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getAuthType()
*/
public String getAuthType() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getCookies()
*/
public Cookie[] getCookies() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getDateHeader(java.lang.String)
*/
public long getDateHeader(String arg0) {
// TODO 自动生成方法存根
return 0;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getHeader(java.lang.String)
*/
public String getHeader(String arg0) {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getHeaders(java.lang.String)
*/
public Enumeration getHeaders(String arg0) {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getHeaderNames()
*/
public Enumeration getHeaderNames() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getIntHeader(java.lang.String)
*/
public int getIntHeader(String arg0) {
// TODO 自动生成方法存根
return 0;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getMethod()
*/
public String getMethod() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getPathInfo()
*/
public String getPathInfo() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getPathTranslated()
*/
public String getPathTranslated() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getContextPath()
*/
public String getContextPath() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getQueryString()
*/
public String getQueryString() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getRemoteUser()
*/
public String getRemoteUser() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#isUserInRole(java.lang.String)
*/
public boolean isUserInRole(String arg0) {
// TODO 自动生成方法存根
return false;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getUserPrincipal()
*/
public Principal getUserPrincipal() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getRequestedSessionId()
*/
public String getRequestedSessionId() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getRequestURL()
*/
public StringBuffer getRequestURL() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getServletPath()
*/
public String getServletPath() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getSession(boolean)
*/
public HttpSession getSession(boolean arg0) {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#getSession()
*/
public HttpSession getSession() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid()
*/
public boolean isRequestedSessionIdValid() {
// TODO 自动生成方法存根
return false;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromCookie()
*/
public boolean isRequestedSessionIdFromCookie() {
// TODO 自动生成方法存根
return false;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromURL()
*/
public boolean isRequestedSessionIdFromURL() {
// TODO 自动生成方法存根
return false;
}
/* (非 Javadoc)
* @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromUrl()
*/
public boolean isRequestedSessionIdFromUrl() {
// TODO 自动生成方法存根
return false;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getAttribute(java.lang.String)
*/
public Object getAttribute(String arg0) {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getAttributeNames()
*/
public Enumeration getAttributeNames() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getCharacterEncoding()
*/
public String getCharacterEncoding() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#setCharacterEncoding(java.lang.String)
*/
public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException {
// TODO 自动生成方法存根
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getContentLength()
*/
public int getContentLength() {
// TODO 自动生成方法存根
return 0;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getContentType()
*/
public String getContentType() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getInputStream()
*/
public ServletInputStream getInputStream() throws IOException {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getProtocol()
*/
public String getProtocol() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getScheme()
*/
public String getScheme() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getServerName()
*/
public String getServerName() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getServerPort()
*/
public int getServerPort() {
// TODO 自动生成方法存根
return 0;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getReader()
*/
public BufferedReader getReader() throws IOException {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getRemoteAddr()
*/
public String getRemoteAddr() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getRemoteHost()
*/
public String getRemoteHost() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#setAttribute(java.lang.String, java.lang.Object)
*/
public void setAttribute(String arg0, Object arg1) {
// TODO 自动生成方法存根
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#removeAttribute(java.lang.String)
*/
public void removeAttribute(String arg0) {
// TODO 自动生成方法存根
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getLocale()
*/
public Locale getLocale() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getLocales()
*/
public Enumeration getLocales() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#isSecure()
*/
public boolean isSecure() {
// TODO 自动生成方法存根
return false;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getRequestDispatcher(java.lang.String)
*/
public RequestDispatcher getRequestDispatcher(String arg0) {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getRealPath(java.lang.String)
*/
public String getRealPath(String arg0) {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getRemotePort()
*/
public int getRemotePort() {
// TODO 自动生成方法存根
return 0;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getLocalName()
*/
public String getLocalName() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getLocalAddr()
*/
public String getLocalAddr() {
// TODO 自动生成方法存根
return null;
}
/* (非 Javadoc)
* @see javax.servlet.ServletRequest#getLocalPort()
*/
public int getLocalPort() {
// TODO 自动生成方法存根
return 0;
}
}
}
PS:原来JDK1.5版本的解析URL工具类以及测试代码参见
http://yy629.iteye.com/blog/420432(解析url地址字串,获得请求参数)
分享到:
相关推荐
j2sdk java jdk java 开发工具 jdk 1.4 免安装版
jdk1.4非安装版,可直接在MyEclipse等IDE工具导入jdk相应的版本。希望对你们有用处。
java jdk 1.4
JDK1.4工程下json解析包集合(内含6个jar包),可以解决项目工程在JDK1.4下对对象的JSON解析。亲测有效,希望能
JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别...
jdk1.4老版的JDK,不常用了,有特殊需要的可以下载。
jdk1.4绿色版本
java_jdk1.4 api 中文手册
Memcache for jdk 1.4
这是JDK1.4的源代码,供学习参考。 它是早期发布的Jdk的源代码。
之前好些人找我要1.4linux版本,现在分享出来
JAVA JDK 小版本为JDK1.4.2.17 32位安装包。备份留着自己使用。
jdk1.4.2.17
因为听同事说官网木有jdk1.4下载了
jdk1.4,绿色版,免安装版,对于旧的jdk代码可以运行。
兼容 jdk 1.4 的json jar包,经过测试支持JDK1.4,记得导入依赖JAR包
jdk1.4的json包,包含相关依赖jar包,包括commons-beanutils、commons-collections、commons-lang-2.5、commons-logging、ezmorph-1.0.6、json-lib-2.4-jdk14
当操作系统中同时安装了JDK1.4和JDK1.5,如何更改环境变量等设置。
jdk1.4老版本 供大家 在研究一些早期java框架源码的时候使用
jdk1.4