本次课程就是对HTML的标签进行处理,类似于定制一套浏览器服务器之间响应信息的规则。
//设计一个方法 解析响应信息并展示
private void parseResponseContentAndShow(String responseContent){
//创建两个新的变量 用于存储新一次的请求和参数
String content = null;
HashMap<String,String> paramsMap = null;
//解析一个<br>标签
responseContent = responseContent.replace("<br>","\r\n");
while(true){
//解析其他的标签
int lessThanIndex = responseContent.indexOf("<");
int greaterThenIndex = responseContent.indexOf(">");
//如果两个符号成对 证明存在一个有意义的标签
if(lessThanIndex!=-1 && greaterThenIndex!=-1 && lessThanIndex<greaterThenIndex){
//输出小于号前面的内容
System.out.println(responseContent.substring(0,lessThanIndex));
//分析标签是什么类型 做相应的处理 <input name="" value="">
String tag = responseContent.substring(lessThanIndex,greaterThenIndex+1);
if(tag.contains("input")){
String value = input.nextLine();
if(paramsMap==null){
paramsMap = new HashMap<String,String>();
}// <input name="xxx" value="">
String[] keyAndValues = tag.split(" ");//将一个大的标记按照空格拆分
for(String keyAndValue : keyAndValues){//循环每一组键值对
if(keyAndValue.contains("=")){//如果当前的一组中包含有等号 证明是正常的参数
String[] KV = keyAndValue.split("=");//按照等号拆分
if("name".equals(KV[0])){
paramsMap.put(KV[1].substring(1,KV[1].length()-1),value);
}
}
}
}else if(tag.contains("form")){//<form action="" method="">
String[] keyAndValues = tag.split(" ");//将一个大的标记按照空格拆分
for(String keyAndValue : keyAndValues){//循环每一组键值对
if(keyAndValue.contains("=")){//如果当前的一组中包含有等号 证明是正常的参数
String[] KV = keyAndValue.split("=");//按照等号拆分
if("action".equals(KV[0])){
//产生一个新的请求
content = KV[1].substring(1,KV[1].length()-1);
}
}
}
}
responseContent = responseContent.substring(greaterThenIndex+1);
}else{//如果符号不成对 证明不存在其他标签
//则直接输出全部的内容
System.out.println(responseContent);
break;
}
}
//------至此将所有的响应信息解析完毕--------------------------------------
//如果标签中遇到了<form>表示我还有一次新的请求
this.sendNewRequest(content,paramsMap);
}
//设计一个新的方法 专门解析新的请求
private void sendNewRequest(String content,HashMap<String,String> hashMap){
//判断form标签是否存在
//如果遇到证明存在一个新的请求
if(content !=null){
//拼接IP
StringBuilder url = new StringBuilder(ip);
url.append(":");
url.append(port);
url.append("/");
url.append(content);
//证明新情求还有参数
if(hashMap!=null){
url.append("?");
//利用迭代器
Iterator<String> it = hashMap.keySet().iterator();
while(it.hasNext()){
//获取键
String key = it.next();
//获取值
String value = hashMap.get(key);
url.append(key);
url.append("=");
url.append(value);
url.append("&");
}
//循环执行完毕后 最终多了一个&符号 将其删除
url.delete(url.length()-1,url.length());
}
//解析url 又调回去了
this.parseUrl(url.toString());
}
当然,这节课,我也懂了,当服务器给所有用户返回的是一样的结果,可以将信息写在文件中。