package com.day3; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.sql.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class Server { /**刘诗华 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //换行符 String CRLF="\r\n"; //绑定本机8080端口 ServerSocket server=new ServerSocket(8080); //开始接受服务器 Socket socket = server.accept(); //获取输入流 InputStream in = socket.getInputStream(); //用于接受浏览器的Request请求报文内容 byte[] buffer=new byte[20480]; int len = in.read(buffer); //将字节数组转换成字符串对象 String s = new String(buffer); //获取http请求方式 int endIndex=s.indexOf(CRLF); String firstTr=s.substring(0, endIndex); // 第一行 GET /default.jsp?userid=100&pwd=123456 HTTP/1.1 endIndex=firstTr.indexOf("/"); // 从第一行中获取第一个 /线 String method=firstTr.substring(0, endIndex).trim(); //获取请求url地址 int beginIndex=endIndex+1; // 从第一个 /线位置 endIndex=firstTr.indexOf("HTTP"); // 第一行的 HTTP位置 String url=firstTr.substring(beginIndex, endIndex); //请求参数字符串 StringBuilder paramString=new StringBuilder(); //如果浏览器是GET方式请求 if(method.equalsIgnoreCase("get")) { //判断是否有带参数,如果有,则做截取,存放于变量paramString字符串当中 if(firstTr.contains("?")) { int i=firstTr.indexOf("?")+1; paramString.append(firstTr.substring(i, endIndex)); } } //如果是POST请求,则请求参数的位置是最后一个换行符的位置开始到报文的最后 if(method.equalsIgnoreCase("post")) { int lastIndex=s.lastIndexOf(CRLF); paramString.append(s.substring(lastIndex)); } //定义一个Map集合用于存储请求参数 键:String 值:List //因为我们在前端写表单的时候,可能会有多个 name一样 //这里我们就要采用一个ArrayList单列集合来存放数据 如 fav=1&fav=2&fav=3 Map<String, List<String>> parameterMap=new HashMap<String, List<String>>(); //以&符号进行切割请求参数,得到一个字符串数组对象 String[] keyValues = paramString.toString().split("&"); //关闭资源 in.close(); socket.close(); server.close(); //遍历请求参数数组 for (String attr : keyValues) { //以=符做为切割符 String[] arr = attr.split("="); //键 String key=arr[0].trim(); //值 String value=arr[1].trim(); //假设Map集合当中没有key的数据,则添加一个 if(!parameterMap.containsKey(key)) { List<String> list=new ArrayList<String>(); parameterMap.put(key, list); } //通过key获取list对象 List<String> list = parameterMap.get(key); //将内容值存放于ArrayList数组 list.add(value); } System.out.println("员工姓名:"+parameterMap.get("uname")); System.out.println("手机号码:"+parameterMap.get("tel")); System.out.println("个人爱好:"+parameterMap.get("fav")); System.out.println("提交按键:"+parameterMap.get("but")); // 打印结果 // 员工姓名:[lsh] // 手机号码:[15390725037] // 个人爱好:[1, 3] // 提交按键:[ok] } }
01-简单编写http服务器
猜你喜欢
转载自www.cnblogs.com/hua900822/p/9807832.html
今日推荐
周排行