`
volunteer521
  • 浏览: 205329 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java解析url地址字符串,获得请求参数(基于JDK1.4)

    博客分类:
  • Java
阅读更多

【需求描述】

项目中,需要一个解析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地址字串,获得请求参数)

分享到:
评论

相关推荐

    二维码生成 图片Base64编码解码

    在Java中生成二维码,我们可以使用一些库,如`qrcode-jdk1.4.jar`,这个库提供了生成二维码的功能。以下是一个简单的Java生成二维码的示例: ```java import net.sf.qrcodegen.QRCode; public class ...

    Weblogic in Chinese Env.pdf

    - **数据库连接**:确保数据库连接字符串中指定了正确的字符集。 - **文件读写**:使用合适的编码来读取或写入文件,例如在使用Java的`FileReader`和`FileWriter`时,需要明确指定字符编码。 - **日志记录**:在记录...

    新版Java实用教程

    - **字符串处理**: 字符串操作方法。 #### 三、类和接口 - **类的概念**: 对象的模板,定义对象的属性和行为。 - **构造函数**: 初始化对象的方法。 - **继承**: 子类继承父类的属性和方法。 - **接口**: 定义行为...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_7_国际化 共9页.pptx

    - **视图名称**:直接返回字符串作为视图名称。 - **ModelAndView**:返回`ModelAndView`对象,设置模型数据和视图名称。 **2.5 常用注解** - `@Controller`:标记类为控制器。 - `@RequestMapping`:指定请求映射...

    JSP教程适合初学者

    表达式(Expression)将Java表达式的结果转换为字符串,并直接插入到HTML输出中。 **2.5 JSP指令标签** page指令用于配置整个JSP页面的属性,如字符编码、导入的包等;include指令用于在编译时将其他文件内容包含...

    java常用框架学习笔记

    - **属性编辑**:Spring支持自定义属性编辑器,用于将字符串转换成特定类型的值。 - **访问Properties文件**:Spring提供了多种方式来读取和管理Properties文件中的配置信息。 ##### 2.3 AOP容器...

    Java后端技术面试汇总-2019

    - **StringBuilder/StringBuffer**:可变字符串,后者是线程安全的。 - **重载和重写的区别**: - **重载**:同一个类中方法名相同但参数列表不同。 - **重写**:子类覆盖父类的方法。 - **抽象类和接口的区别*...

    struts2视频自学总结

    为了处理复杂的数据类型,Struts2提供了转换器机制,如通过`conversion.properties`文件自定义转换规则,这有助于将HTTP请求中的字符串转换成应用所需的对象类型。同时,Struts2支持国际化,通过配置`struts.custom....

    java就业培训教程(个人整理)

    - **与服务器通信**:使用URL类进行网络请求。 - **10.7 验证Applet对象在客户端如何存在的**: - **对象状态**:通过getDocumentBase()等方法检查。 #### 第11章:网络编程 - **11.1 网络编程的基础知识**: ...

    黑马程序员_struts2框架2016版视频_struts2_day01笔记

    - **commons-lang3**: 提供字符串和数据操作的公共方法。 - **javassist**: 字节码操作库。 #### 1.4 Struts2入门理论 **JavaEE设计模式** 对于理解Struts2的工作原理非常重要。其中,**前端控制器模式**是Struts2...

    传智播客 方立勋 javaweb 完全笔记

    - 将 XML 字符串转换为 Document 对象 - 将 Document 对象转换为 XML 字符串 **7.40 XML Schema** - **定义**: 一种 XML 数据类型语言,用于描述 XML 文档的结构和数据类型。 - **优点**: - 强类型约束 - 更好...

    Grails基础教程

    - **基础类型**:Groovy支持整型、浮点型、字符串等多种基础数据类型,同时也支持复数、大整数等高级类型。 - **语法糖**:Groovy通过语法糖简化了列表、映射和范围等复杂数据结构的操作,提高了代码的可读性和简洁...

    Grails基础教程.pdf

    - **玩转Groovy**:通过简单的代码示例展示Groovy的基本用法,如字符串操作、集合处理等。 - **与Java的基本不同点**:Groovy在语法上与Java有许多相似之处,但也存在显著差异,例如闭包、元编程等高级特性。 - **...

    JSP教程

    - JSP(JavaServer Pages)是一种基于Java的服务器端技术,用于创建动态网页。它允许开发者将Java代码嵌入到HTML文档中,从而实现动态内容的生成。 - **1.2 JSP页面** - JSP页面是由HTML标记和嵌入其中的Java代码...

    精通ANDROID 3(中文版)1/2

    3.1.1 字符串资源  3.1.2 布局资源  3.1.3 资源引用语法  3.1.4 定义资源ID供以后使用  3.1.5 已编译和未编译的Android资源  3.2 Android关键资源  3.3 使用任意XML资源文件  3.4 使用原始资源  3.5...

    精通Android 3 (中文版)2/2

    3.1.1 字符串资源  3.1.2 布局资源  3.1.3 资源引用语法  3.1.4 定义资源ID供以后使用  3.1.5 已编译和未编译的Android资源  3.2 Android关键资源  3.3 使用任意XML资源文件  3.4 使用原始资源  3.5...

Global site tag (gtag.js) - Google Analytics