解析URL中的参数

例如URL : http://127.0.0.1:8080/free07/QueryTest?from=5&to=20&name=zyy

对于后台,从URL中解析出from以及to的值,然后进行数据分析

 封装一个对URL进行解析的工具类,方便以后的快速使用

注:request.getQueryString()  返回的是:from=5&to=20&name=zyy    ?之后的

package my;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;

/**
 * 用于解析存储表单文本  
 * 对于HTTP GET, 可以从URL里读取 Query参数
 * 对于HTTP POST, 可以从HTTP 正文里读取数据
 * @author guojiusen
 * @since 20190621
 *
 */
public class AfFormData extends HashMap<String, String>
{
	public AfFormData()
	{
		
	}
	
	//解析query字符串(?之后的部分)
	public static AfFormData parse(String query, String charset)
	{
		AfFormData result = new AfFormData();
		if(query == null)return result;
		
		//分割出各个查询小条件(ppp[0]="from=1" ppp[1]="to=5")
		String[] ppp = query.split("&");
		
		//逐个解析出各个查询条件的数值(key-value)到result中
		for(String p : ppp)
		{
			
			String[] kv = p.split("=");
			String key = kv[0];
			String value = "";
			
			if(kv.length > 1)  //有时候查询条件里参数是空的
				value = kv[1];
			
			//如果存在%,则进行URL解码
			if(charset != null && value.indexOf("&") >= 0)
			{
				try
				{
					value = URLDecoder.decode(value, charset);
				} catch (UnsupportedEncodingException e)
				{
					System.out.println("** URL解码出错: " 
							+ key + ", " + value 
							+ ", ERROR" + e.getMessage());
				}
			}
			//解析出的key-value,存到HashMap  result中(当前对象)
			result.put(key, value);
		}
		return result;
	}
	//从参数中取值
	public int getInt(String key, int defValue)
	{
		try
		{
			return Integer.valueOf(this.get(key));
		}catch(Exception e)
		{
			return defValue;
		}
	}
	
	public long getLong(String key, Long defValue)
	{
		try
		{
			return Long.valueOf(this.get(key));
		}catch(Exception e)
		{
			return defValue;
		}
	}
	
	public String getString(String key, String defValue)
	{
		try
		{
			String value = this.get(key);
			
			if(value != null)
				return value;
		}
		catch(Exception e)
		{
		}
		
		return defValue;
	}
	
	public boolean getBoolean(String key, boolean defValue)
	{
		try
		{
			return Boolean.valueOf(this.get(key));
		} catch (Exception e)
		{
			return defValue;
		}
	}
}
package my;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class QueryTest
 */
@WebServlet("/QueryTest")
public class QueryTest extends HttpServlet 
{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
												throws ServletException, IOException 
	{
		AfFormData afd = new AfFormData().parse(request.getQueryString(), "utf-8");
		
		//进行解析
		int from = afd.getInt("from", 1);
		
		int to = afd.getInt("to", 4);
		
		String name = afd.getString("name", "guojiuse");
		
		System.out.println("from : " + from +"\nto : "+ to + "\nname : "+ name);
		
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值