請(qǐng)求:
分:各種信息key=value
合:拼成1個(gè)字符串
分:拆分成各種信息
合:類(hashmap碰逸、list、自定義類)倡蝙、數(shù)組旅敷、字符串
分:獲取容器類的單個(gè)信息處理
響應(yīng):
分:各種響應(yīng)信息
合:類、hashmap等
分:?jiǎn)蝹€(gè)取出來(lái)處理
合:合成字符串冬阳,返回
一蛤虐、請(qǐng)求和接收雙方,達(dá)成一個(gè)協(xié)議
二肝陪、請(qǐng)求方驳庭,按照協(xié)議格式,把所有信息拼成1個(gè)字符串
1. 請(qǐng)求行格式:
請(qǐng)求方法 請(qǐng)求路徑 協(xié)議版本
2. 其中請(qǐng)求路徑格式
協(xié)議類型://IP地址:端口號(hào)/工程名/資源路徑?參數(shù)名=參數(shù)值&參數(shù)名=參數(shù)值
3. 實(shí)例
get http://127.0.0.1:8080/NewWeb/login?name=guoyasoft&password=123456 HTTP1.1
三、接收方饲常,按照協(xié)議格式蹲堂,把字符串拆分成零散的信息
string常用方法
split("分隔符號(hào)");
indexOf("定位符號(hào)");
substring(開(kāi)始下標(biāo),結(jié)束下標(biāo));
equals("要比較的串");
equalsIgnoreCase("要比較的串")
字符串切分完的小塊贝淤,單個(gè)存放柒竞,打包存放
基本變量(單個(gè),key=value霹娄,缺點(diǎn),很多個(gè)的時(shí)候鲫骗,傳輸特別麻煩)
字符串
數(shù)組(value犬耻,固定,缺點(diǎn)执泰,多了記不住哪個(gè)位置是什么東西)
list(value枕磁,不固定,缺點(diǎn)术吝,多了記不住哪個(gè)位置是什么東西)
hashmap(key=value计济,不固定,缺點(diǎn)背不住名字)
類(key=value排苍,固定沦寂,有點(diǎn)很明顯,缺點(diǎn)淘衙,屬性是預(yù)先固定)
package com.guoyasoft.tomcat;
import java.util.HashMap;
import java.util.Map;
public class Request {
private String method;
private String url;
private String protocalVersion;
private String protocal;
private String ip;
private String port;
private String projectName;
private String resourcePath;
private Map<String,String> parameters=new HashMap<String, String>();
public Map<String, String> getParameters() {
return parameters;
}
public void setParameter(Map<String, String> parameter) {
this.parameters = parameters;
}
public String getParameter(String key){
return parameters.get(key);
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getProtocalVersion() {
return protocalVersion;
}
public void setProtocalVersion(String protocalVersion) {
this.protocalVersion = protocalVersion;
}
public String getProtocal() {
return protocal;
}
public void setProtocal(String protocal) {
this.protocal = protocal;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getResourcePath() {
return resourcePath;
}
public void setResourcePath(String resourcePath) {
this.resourcePath = resourcePath;
}
public void setParameters(Map<String, String> parameters) {
this.parameters = parameters;
}
}
package com.guoyasoft;
import java.util.HashMap;
import java.util.Map;
import org.testng.annotations.Test;
import com.guoyasoft.tomcat.Request;
public class StringTools {
@Test
public Request testString(String str){
/*
* 第1部分:請(qǐng)求行
* 1. 請(qǐng)求方法
* 2. 請(qǐng)求資源路徑
* 3. 協(xié)議版本
*/
Request request=new Request();
// String str="get http://127.0.0.1:8080/NewWeb/login?name=guoyasoft&password=123456 HTTP1.1";
//切割:把一個(gè)大的字符串传藏,按照分割符,切割成很多小的字符串
String[] firstLine=str.split(" ");
String method=firstLine[0];
System.out.println("請(qǐng)求方法:"+method);
request.setMethod(method);
String url=firstLine[1];
System.out.println("資源路徑:"+url);
request.setUrl(url);
String protocalVersion=firstLine[2];
System.out.println("協(xié)議版本:"+protocalVersion);
request.setProtocalVersion(protocalVersion);
/*
* 資源路徑
* 1. 協(xié)議:http或者h(yuǎn)ttps
* 2. ip:"http://"開(kāi)始彤守,":"結(jié)束
* 3. 端口:":"開(kāi)始毯侦,"/"第一個(gè)反斜杠結(jié)束
* 4. 工程名:第一個(gè)"/"開(kāi)始,第二個(gè)反斜杠結(jié)束
* 5. 資源路徑:第二個(gè)"/"開(kāi)始具垫,"?"結(jié)束侈离,如果沒(méi)有"?",直接到結(jié)尾
* 6. 參數(shù):"?"開(kāi)始筝蚕,一直到結(jié)束
*/
int httpIndex=url.indexOf("://");
String protocal=url.substring(0,httpIndex);
System.out.println("協(xié)議:"+protocal);
request.setProtocal(protocal);
url=url.substring(httpIndex+3);
System.out.println(url);
int ipIndex=url.indexOf(":");
String ip=url.substring(0,ipIndex);
System.out.println("ip:"+ip);
request.setIp(ip);
url=url.substring(ipIndex+1);
System.out.println(url);
int portIndex=url.indexOf("/");
String port=url.substring(0,portIndex);
System.out.println("端口號(hào):"+port);
request.setPort(port);
url=url.substring(portIndex+1);
System.out.println(url);
int prjIndex=url.indexOf("/");
String prj=url.substring(0,prjIndex);
System.out.println("工程名:"+prj);
request.setProjectName(prj);
url=url.substring(prjIndex+1);
int resIndex=url.indexOf("?");
String res=url.substring(0,resIndex);
System.out.println("資源路徑:"+res);
request.setResourcePath(res);
url=url.substring(resIndex+1);
Map<String,String> parameters=new HashMap<String, String>();
String[] ps=url.split("&");
for(String s:ps){
System.out.println(s.split("=")[0]+"="+s.split("=")[1]);
parameters.put(s.split("=")[0], s.split("=")[1]);
}
request.setParameters(parameters);
return request;
}
}
測(cè)試類:
package com.guoyasoft.client;
import com.guoyasoft.StringTools;
public class TestString {
public static void main(String[] args) {
String url = "get http://127.0.0.1:8080/NewWeb/login?name=guoyasoft&password=123456 HTTP1.1";
StringTools.testString(url);
}
}