本次课程就是对HTML的标签进行处理,类似于定制一套浏览器服务器之间响应信息的规则。

    1. //设计一个方法 解析响应信息并展示
    2. private void parseResponseContentAndShow(String responseContent){
    3. //创建两个新的变量 用于存储新一次的请求和参数
    4. String content = null;
    5. HashMap<String,String> paramsMap = null;
    6. //解析一个<br>标签
    7. responseContent = responseContent.replace("<br>","\r\n");
    8. while(true){
    9. //解析其他的标签
    10. int lessThanIndex = responseContent.indexOf("<");
    11. int greaterThenIndex = responseContent.indexOf(">");
    12. //如果两个符号成对 证明存在一个有意义的标签
    13. if(lessThanIndex!=-1 && greaterThenIndex!=-1 && lessThanIndex<greaterThenIndex){
    14. //输出小于号前面的内容
    15. System.out.println(responseContent.substring(0,lessThanIndex));
    16. //分析标签是什么类型 做相应的处理 <input name="" value="">
    17. String tag = responseContent.substring(lessThanIndex,greaterThenIndex+1);
    18. if(tag.contains("input")){
    19. String value = input.nextLine();
    20. if(paramsMap==null){
    21. paramsMap = new HashMap<String,String>();
    22. }// <input name="xxx" value="">
    23. String[] keyAndValues = tag.split(" ");//将一个大的标记按照空格拆分
    24. for(String keyAndValue : keyAndValues){//循环每一组键值对
    25. if(keyAndValue.contains("=")){//如果当前的一组中包含有等号 证明是正常的参数
    26. String[] KV = keyAndValue.split("=");//按照等号拆分
    27. if("name".equals(KV[0])){
    28. paramsMap.put(KV[1].substring(1,KV[1].length()-1),value);
    29. }
    30. }
    31. }
    32. }else if(tag.contains("form")){//<form action="" method="">
    33. String[] keyAndValues = tag.split(" ");//将一个大的标记按照空格拆分
    34. for(String keyAndValue : keyAndValues){//循环每一组键值对
    35. if(keyAndValue.contains("=")){//如果当前的一组中包含有等号 证明是正常的参数
    36. String[] KV = keyAndValue.split("=");//按照等号拆分
    37. if("action".equals(KV[0])){
    38. //产生一个新的请求
    39. content = KV[1].substring(1,KV[1].length()-1);
    40. }
    41. }
    42. }
    43. }
    44. responseContent = responseContent.substring(greaterThenIndex+1);
    45. }else{//如果符号不成对 证明不存在其他标签
    46. //则直接输出全部的内容
    47. System.out.println(responseContent);
    48. break;
    49. }
    50. }
    51. //------至此将所有的响应信息解析完毕--------------------------------------
    52. //如果标签中遇到了<form>表示我还有一次新的请求
    53. this.sendNewRequest(content,paramsMap);
    54. }
    55. //设计一个新的方法 专门解析新的请求
    56. private void sendNewRequest(String content,HashMap<String,String> hashMap){
    57. //判断form标签是否存在
    58. //如果遇到证明存在一个新的请求
    59. if(content !=null){
    60. //拼接IP
    61. StringBuilder url = new StringBuilder(ip);
    62. url.append(":");
    63. url.append(port);
    64. url.append("/");
    65. url.append(content);
    66. //证明新情求还有参数
    67. if(hashMap!=null){
    68. url.append("?");
    69. //利用迭代器
    70. Iterator<String> it = hashMap.keySet().iterator();
    71. while(it.hasNext()){
    72. //获取键
    73. String key = it.next();
    74. //获取值
    75. String value = hashMap.get(key);
    76. url.append(key);
    77. url.append("=");
    78. url.append(value);
    79. url.append("&");
    80. }
    81. //循环执行完毕后 最终多了一个&符号 将其删除
    82. url.delete(url.length()-1,url.length());
    83. }
    84. //解析url 又调回去了
    85. this.parseUrl(url.toString());
    86. }

    当然,这节课,我也懂了,当服务器给所有用户返回的是一样的结果,可以将信息写在文件中。