1. package com.day3;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;
  7. import java.sql.Array;
  8. import java.util.ArrayList;
  9. import java.util.Arrays;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13.  
  14. public class Server {
  15.  
  16. /**刘诗华
  17. * @param args
  18. * @throws Exception
  19. */
  20. public static void main(String[] args) throws Exception {
  21. //换行符
  22. String CRLF="\r\n";
  23.  
  24. //绑定本机8080端口
  25. ServerSocket server=new ServerSocket(8080);
  26. //开始接受服务器
  27. Socket socket = server.accept();
  28. //获取输入流
  29. InputStream in = socket.getInputStream();
  30. //用于接受浏览器的Request请求报文内容
  31. byte[] buffer=new byte[20480];
  32.  
  33. int len = in.read(buffer);
  34. //将字节数组转换成字符串对象
  35. String s = new String(buffer);
  36.  
  37. //获取http请求方式
  38. int endIndex=s.indexOf(CRLF);
  39. String firstTr=s.substring(0, endIndex); // 第一行 GET /default.jsp?userid=100&pwd=123456 HTTP/1.1
  40. endIndex=firstTr.indexOf("/"); // 从第一行中获取第一个 /线
  41. String method=firstTr.substring(0, endIndex).trim();
  42.  
  43. //获取请求url地址
  44. int beginIndex=endIndex+1; // 从第一个 /线位置
  45. endIndex=firstTr.indexOf("HTTP"); // 第一行的 HTTP位置
  46. String url=firstTr.substring(beginIndex, endIndex);
  47.  
  48. //请求参数字符串
  49. StringBuilder paramString=new StringBuilder();
  50.  
  51. //如果浏览器是GET方式请求
  52. if(method.equalsIgnoreCase("get"))
  53. {
  54. //判断是否有带参数,如果有,则做截取,存放于变量paramString字符串当中
  55. if(firstTr.contains("?"))
  56. {
  57. int i=firstTr.indexOf("?")+1;
  58. paramString.append(firstTr.substring(i, endIndex));
  59. }
  60. }
  61.  
  62. //如果是POST请求,则请求参数的位置是最后一个换行符的位置开始到报文的最后
  63. if(method.equalsIgnoreCase("post"))
  64. {
  65. int lastIndex=s.lastIndexOf(CRLF);
  66. paramString.append(s.substring(lastIndex));
  67. }
  68.  
  69. //定义一个Map集合用于存储请求参数  键:String 值:List
  70. //因为我们在前端写表单的时候,可能会有多个 name一样
  71. //这里我们就要采用一个ArrayList单列集合来存放数据 如 fav=1&fav=2&fav=3
  72. Map<String, List<String>> parameterMap=new HashMap<String, List<String>>();
  73.  
  74. //以&符号进行切割请求参数,得到一个字符串数组对象
  75. String[] keyValues = paramString.toString().split("&");
  76.  
  77. //关闭资源
  78. in.close();
  79. socket.close();
  80. server.close();
  81.  
  82. //遍历请求参数数组
  83. for (String attr : keyValues) {
  84. //以=符做为切割符
  85. String[] arr = attr.split("=");
  86. //键
  87. String key=arr[0].trim();
  88. //值
  89. String value=arr[1].trim();
  90.  
  91. //假设Map集合当中没有key的数据,则添加一个
  92. if(!parameterMap.containsKey(key))
  93. {
  94. List<String> list=new ArrayList<String>();
  95. parameterMap.put(key, list);
  96. }
  97. //通过key获取list对象
  98. List<String> list = parameterMap.get(key);
  99. //将内容值存放于ArrayList数组
  100. list.add(value);
  101. }
  102.  
  103. System.out.println("员工姓名:"+parameterMap.get("uname"));
  104. System.out.println("手机号码:"+parameterMap.get("tel"));
  105. System.out.println("个人爱好:"+parameterMap.get("fav"));
  106. System.out.println("提交按键:"+parameterMap.get("but"));
  107.  
  108. // 打印结果
  109. // 员工姓名:[lsh]
  110. // 手机号码:[15390725037]
  111. // 个人爱好:[1, 3]
  112. // 提交按键:[ok]
  113.  
  114. }
  115.  
  116. }

01-简单编写http服务器的更多相关文章

  1. 实战WEB 服务器(JAVA编写WEB服务器)

    实战WEB 服务器(JAVA编写WEB服务器) 标签: web服务服务器javawebsockethttp服务器 2010-04-21 17:09 11631人阅读 评论(24) 收藏 举报  分类: ...

  2. MQTT协议的简单介绍和服务器的安装

    最近公司做的项目中有用到消息推送,经过多方面的筛选之后确定了使用MQTT协议,相对于XMPP,MQTT更加轻量级,并且占用用户很少的带宽. MQTT是IBM推出的一种针对移动终端设备的基于TCP/IP ...

  3. Mina、Netty、Twisted一起学(一):实现简单的TCP服务器

    MINA.Netty.Twisted为什么放在一起学习?首先,不妨先分别看一下它们官方网站对其的介绍: MINA: Apache MINA is a network application frame ...

  4. JAVA编写WEB服务器

    一.超文本传输协议  1.1 HTTP请求  1.2 HTTP应答  二.Socket类  三.ServerSocket类  四.Web服务器实例  4.1 HttpServer类  4.2 Requ ...

  5. 响应式编程笔记三:一个简单的HTTP服务器

    # 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习. 我们会看到Reactive是一个有用的抽象 - 对 ...

  6. 基于python2【重要】怎么自行搭建简单的web服务器

    基本流程:1.需要的支持     1)python本身有SimpleHTTPServer     2)ForkStaticServer.py支持,该文件放在python7目录下     3)将希望共享 ...

  7. 用 PHP 编写 http 服务器

    概述 众所周知,我们一般使用 PHP 开发Web程序时需要使用到比如Apache或Nginx等Web服务器来支持,那么有没有办法直接使用PHP开发HTTP服务器,答案当然是可以的,最近看了一遍Work ...

  8. 学习用node.js建立一个简单的web服务器

    一.建立简单的Web服务器涉及到Node.js的一些基本知识点: 1.请求模块 在Node.js中,系统提供了许多有用的模块(当然你也可以用JavaScript编写自己的模块,以后的章节我们将详细讲解 ...

  9. Golang 编写 Tcp 服务器

    Golang 作为广泛用于服务端和云计算领域的编程语言,tcp socket 是其中至关重要的功能.无论是 WEB 服务器还是各类中间件都离不开 tcp socket 的支持. Echo 服务器 拆包 ...

  10. 使用纯php构建一个简单的PHP服务器

    使用原生PHP构建一个简单的PHPWeb服务器 1.目录机构 webserver --src -- Response.php -- Server.php -- Request.php -- vendo ...

随机推荐

  1. RandomAccessFile多线程下载

    public class DownloadServer { ; private static String fileUrl = "https://dldir1.qq.com/qqtv/mac ...

  2. 除了Udacity,全球最聪明的那群人还上哪些网站?

    01. ***,与世界相连 WikiWand——打开维基百科的新方式 http://www.wikiwand.com/ InsightfulQuestions(subreddit)——跨越界限的智力讨 ...

  3. day059 ajax初识 登录认证练习

    ajax初识 ajax有两个特点: 一个是异步,另一个是浏览器页面局部刷新(这个特点是用户感受不到的时候进行的) 示例: 页面输入两个整数,通过AJAX传输到后端计算结果并返回 在HTML文件中: & ...

  4. web工程启动时,在一个类中延迟加载Bean,因为该Bean类可能还没被JVM加载

     问题描述: (1)javaWeb项目启动中,还没启动完成,在下面这个类加载另一个Bean类, (2)通过getBean方法获取到该Bean,可以获取到,不为null (3)但是,调用该Bean的方法 ...

  5. weinre 远程调试 安装 配置

    1.第一种方法:安装:npm install -g weinre 2.第一种方法:开启本地监听服务器(修改端口,默认端口是8080):在cmd中运行: weinre --httpPort 8101 - ...

  6. 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素, 添加另一个集合,删除元素,判断集合中是否包含一个元素, 判断是否为空,清除集合, 返回集合里元素的个数等常用操作。

    package com.lanxi.demo2; import java.util.HashSet; import java.util.Iterator; import java.util.Set; ...

  7. 复现 360 Unicorn Team 黑科技之 HackNFC

    看了2条360 Unicorn Team的微博后,感觉蛮有趣的,打算复现一下 谷歌了下相关资料,在HACKADAY找到了介绍文章 还有2篇北邮工学硕士的论文,欢迎有兴趣的朋友和我一起交流~ 联系方式在 ...

  8. logback-spring.xml 博客分享

    https://juejin.im/post/5b51f85c5188251af91a7525

  9. 【linux基础】关于ARM板子使用O3编译选项优化

    前言 应领导要求需要将最初级版本的算法移植到ARM板子上,并进行优化,以期达到实时. 平台 移植前: TX2 移植后: ARM() processor : model name : ARMv7 Pro ...

  10. linux基础之用户登录信息查看命令

    用户登录信息查看命令 1.who命令 同一个账号通过不同终端登录也属于不同的登录信息,这里不同的终端包含虚拟终端和模拟终端,因为一个用户通过一个终端登录属于一个session 基本介绍 打印当前系统上 ...