1. 程式人生 > >01-簡單編寫http伺服器

01-簡單編寫http伺服器

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] } }