package com.bjsxt.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.*;
public class Request {
private InputStream is;
private String requestInfo;
private String method;// post get private String url;// //用于存储参数的Map集合 //username=zhangsan&password=qwer&role=manager&role=clerk /** key value* username [zhangsan]* password [qwer]* role [manager,clerk]** */
private Map> paramaterValues;
private static final String CRLF="\r\n";
private static final String BLANK=" ";
public String getUrl() {
return url;
}
public Request(){
requestInfo="";
method="";
url="";
paramaterValues=new HashMap>();
}
public Request(InputStream is){
this();
this.is=is;
paraseRequeseInfo();
}
public void paraseRequeseInfo(){
// 获取请求信息 byte[] buf=new byte[10240];
int index = 0;
try {
index = is.read(buf);
} catch (IOException e) {
e.printStackTrace();
}
requestInfo=new String (buf,0,index);
// 取出请求行 请求方式 url地址 请求的协议 String requestLine=requestInfo.substring(0,requestInfo.indexOf(CRLF)).trim();
String[] requestLines = requestLine.split(" ");
method=requestLines[0];
String paramaterLine="";
if(method.equalsIgnoreCase("get")){// 请求方式是get if(requestLines[1].contains("?")){
url=requestLines[1].substring(0,requestLines[1].indexOf("?"));
String[] urls=requestLines[1].split("\\?");
paramaterLine=urls[1].trim();
}else{
url=requestLines[1];
}
}else{//请求方式是Post url=requestLines[1];
paramaterLine=requestInfo.substring(requestInfo.lastIndexOf(CRLF)+1).trim();
}
parseParamater(paramaterLine);
}
public void parseParamater(String paramaterLine){
//username=asdf&password=qwer&role=manager&role=clerk
System.out.println("paramaterLine:"+paramaterLine);
if("".equalsIgnoreCase(paramaterLine)){
return;
}
String[] lines = paramaterLine.split("&");
/*[username,asdf][password,qwer][role,manager][role,clerk]*/
/** key value* username [zhangsan]* password [qwer]* role [manager,clerk]** */
for(String line:lines){
String[] keyValue = line.split("=");
if(keyValue.length==1){// key= keyValue=Arrays.copyOf(keyValue,2);
keyValue[1]=null;
}
String key=keyValue[0];
String value=keyValue[1]==null?null:decode(keyValue[1],"UTF-8");
if(paramaterValues.containsKey(key)){// List values = paramaterValues.get(key);
values.add(value);
}else{
List values=new ArrayList();
values.add(value);
paramaterValues.put(key,values);
}
}
System.out.println(paramaterValues);
}
public String decode(String value,String charset){
// %E5%BC%A0%E4%B8%89 UTF-8 try {
return URLDecoder.decode(value,charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
// 根据键向外界返回参数的方法 public String getParamater(String name){
if(paramaterValues.containsKey(name)){
List list = paramaterValues.get(name);
if(null == list || list.size()==0){
return null;
}else{
return list.get(0);
}
}
return null;
}
public String[] getParamaterValues(String name){
if(paramaterValues.containsKey(name)){
List list = paramaterValues.get(name);
if(null == list || list.size()==0){
return null;
}else{
String[] values = list.toArray(new String[0]);
return values;
}
}
return null;
}
}