• java命令行编译webserver


    编译命令行:"C:Program Files (x86)Javajdk1.8.0_20injavac.exe"  *.java

    运行命令:java WebServer

    源码:

    import java.io.*;
    import java.net.*;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.*;
     
    public class WebServer {
        public static void main(String[] args) throws IOException {
            try {
                //connection number
                int i = 1;
                //establish server socket
                ServerSocket s = new ServerSocket(8189);
     
                while (true) {
                    //wait for client connection
                    Socket incoming = s.accept();
                    System.out.println("WebServer running on port: " + s.getLocalPort());
                    System.out.println("The connection number is: " + i);
                    Runnable r = new ThreadHandler(incoming);
                    Thread t = new Thread(r);
                    t.start();
                    i++;
                }
     
            } catch (IOException e) {
                e.printStackTrace();
            }
     
        }
    }
     
    /**
     * This class handles the client input for one server socket
     */
    class ThreadHandler implements Runnable {
        private Socket incomig;
     
        public ThreadHandler(Socket i) {
            incomig = i;
        }
     
        public void run() {
            try {
                try {
                    InputStream inStream = incomig.getInputStream();
                    OutputStream outStream = incomig.getOutputStream();
                    Scanner in = new Scanner(inStream);
                    PrintWriter out = new PrintWriter(outStream, true);
     
                    while (true) {
                        String line = in.nextLine();
                        if (line.equals("
    ") && line.equals("")) {
                            break;
                        }
                        System.out.println("the client request is :" + line);
                        //read request line
                        String[] requests = line.split("\s+");
                        //read request head
                        Map<String, String> headMap = null;
                        //read request body
                        Map<String, String> parameterMap = null;
                        if (requests[0].equals("GET")) {
                            //response GET request
                            //respense with the file that the request wants
                            String path = System.getProperties().getProperty("user.dir") + requests[1].replaceAll("\/", "//");
                            System.out.println("The file that the client wants is:" + path);
                            //read request head
                            headMap = readhead(in);
                            //read request body
                            parameterMap = readbody(in);
                            doGet(path, out);
     
                        } else if (requests[0].equals("POST")) {
                            //response POST request
                            //response with the file that the request wants and write the parameter at the of the file
                            String path = System.getProperties().getProperty("user.dir") + requests[1].replaceAll("\/", "//");
                            System.out.println("The file that the client wants is:" + path);
                            //read request head
                            headMap = readhead(in);
                            //read request body
                            parameterMap = readbody(in);
                            doPost(path, out, parameterMap);
     
                        }
                    }
     
                } finally {
                    incomig.close();
     
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
     
        private Map<String, String> readhead(Scanner in) {
            String headline = in.nextLine();
            Map<String, String> headMap = new HashMap<>();
            while (!headline.equals("
    ") && !headline.equals("")) {
                String[] keyValue = {"", ""};
                String[] temp = headline.split(": |:");
                if (temp.length == 2) {
                    keyValue = temp;
                }
                if (temp.length == 1) {
                    keyValue[0] = temp[0];
                }
                headMap.put(keyValue[0], keyValue[1]);
                headline = in.nextLine();
            }
            return headMap;
        }
     
        private Map<String, String> readbody(Scanner in) {
            String bodyline = in.nextLine();
            if (bodyline.equals("
    ") || bodyline.equals("")) {
                return null;
            }
            String t = in.nextLine();
            while (!t.equals("
    ") && !t.equals("")) {
                bodyline += t + "
    ";
                t = in.nextLine();
            }
            String[] parameters = bodyline.split("&");
            Map<String, String> parameterMap = new HashMap<>();
            String[] keyV = {"", ""};
            for (String parameter : parameters) {
                String[] temp = parameter.split("=");
                if (temp.length == 2) {
                    keyV = temp;
                }
                if (temp.length == 1) {
                    keyV[0] = temp[0];
                }
                parameterMap.put(keyV[0], keyV[1]);
            }
            return parameterMap;
        }
     
        private void doGet(String requestPath, PrintWriter out) {
            final String CRLF = "
    ";
            String statusLine = null;
            String date = new Date().toString();
            String contentTypeLine = "";
            String contentLengthLine = "";
            String entityBody = "";
     
            File requestFile = new File(requestPath);
            Path path = Paths.get(requestPath);
            if (requestFile.exists()) {
                statusLine = "HTTP/1.0 200 OK";
                contentLengthLine = String.valueOf(requestFile.length());
                try {
                    contentTypeLine = Files.probeContentType(path);
                    List<String> contents = Files.readAllLines(path);
                    for (String line : contents) {
                        entityBody += line + CRLF;
                    }
                } catch (IOException e) {
                    statusLine = "HTTP/1.0 400 BadRequest";
                    entityBody = "<HTML>400 Not BadRequest</TITLE></HEAD>" +
                            "<BODY>400 BadRequest" +
                            e.getMessage();
                    e.printStackTrace();
                }
            } else {
                statusLine = "HTTP/1.0 404 Not Found";
                entityBody = "<HTML>404 Not Found</TITLE></HEAD>" +
                        "<BODY>404 Not Found";
     
            }
            out.print(statusLine + CRLF);
            out.print("Date: " + date + CRLF);
            out.print("Content-Type: " + contentTypeLine + CRLF);
            out.print("Content-Length: " + contentLengthLine + CRLF);
            out.print(CRLF);
            out.print(entityBody + CRLF);
            out.flush();
        }
     
        private void doPost(String requestPath, PrintWriter out, Map<String, String> parameterMap) {
            final String CRLF = "
    ";
            String statusLine = null;
            String date = new Date().toString();
            String contentTypeLine = "";
            String contentLengthLine = "";
            String entityBody = "";
     
            File requestFile = new File(requestPath);
            Path path = Paths.get(requestPath);
            if (requestFile.exists()) {
                statusLine = "HTTP/1.0 200 OK";
                try {
                    PrintWriter fileWrite = new PrintWriter(new FileWriter(requestFile, true));
                    fileWrite.append(parameterMap.toString());
                    fileWrite.close();
                    contentLengthLine = String.valueOf(requestFile.length());
                    contentTypeLine = Files.probeContentType(path);
                    List<String> contents = Files.readAllLines(path);
                    for (String line : contents) {
                        entityBody += line + CRLF;
                    }
                } catch (IOException e) {
                    statusLine = "HTTP/1.0 400 BadRequest";
                    entityBody = "<HTML>400 Not BadRequest</TITLE></HEAD>" +
                            "<BODY>400 BadRequest" +
                            e.getMessage();
                    e.printStackTrace();
                }
            } else {
                statusLine = "HTTP/1.0 404 Not Found";
                entityBody = "<HTML>404 Not Found</TITLE></HEAD>" +
                        "<BODY>404 Not Found";
     
            }
            out.print(statusLine + CRLF);
            out.print("Date: " + date + CRLF);
            out.print("Content-Type: " + contentTypeLine + CRLF);
            out.print("Content-Length: " + contentLengthLine + CRLF);
            out.print(CRLF);
            out.print(entityBody + CRLF);
            out.flush();
        }
     
    }
    

      

  • 相关阅读:
    使用OpenSSL自建一个HTTPS服务
    工程实践项目中的需求分析建模—问答系统后端
    代码中的软件工程—分析一个命令行菜单小程序
    Git多人项目开发流程演练
    Docker笔记
    Nginx+Gunicorn+Supervisor部署Flask应用
    Python协程之asyncio
    Python类元编程
    搬家到博客园啦
    Spring boot Security 登陆安全配置
  • 原文地址:https://www.cnblogs.com/coolyylu/p/12717451.html
Copyright © 2020-2023  润新知