例如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);
}
}