zoukankan      html  css  js  c++  java
  • 自定义Tomcat

    MyRequest请求类

    package com.hailu;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    public class MyRequest {
        //请求方法
        private String requestMethod;
        //请求地址
        private String requestUrl;
    
        public MyRequest(InputStream inputStream) throws IOException {
            //缓冲区域
            byte[] buffer = new byte[1024];
            //读取数据长度
            int len = 0;
            //定义请求变量
            String str = null;
            if ((len = inputStream.read(buffer)) > 0) {
                str = new String(buffer, 0, len);
            }
            //GET / HTTP/1.1
            String data = str.split("
    ")[0];
            String[] params = data.split(" ");
            this.requestMethod = params[0];
            this.requestUrl = params[1];
        }
    
        public String getRequestMethod() {
            return requestMethod;
        }
    
        public void setRequestMethod(String requestMethod) {
            this.requestMethod = requestMethod;
        }
    
        public String getRequestUrl() {
            return requestUrl;
        }
    
        public void setRequestUrl(String requestUrl) {
            this.requestUrl = requestUrl;
        }
    }

    MyResponse响应类

    package com.hailu;
    
    import java.io.OutputStream;
    
    public class MyResponse {
        private OutputStream outputStream;
    
        public MyResponse(OutputStream outputStream){
            this.outputStream=outputStream;
        }
    
        public void write(String string) throws  Exception{
            StringBuilder stringBuilder=new StringBuilder();
            stringBuilder.append("HTTP/1.1 200 OK
    ")
                    .append("Content-Type:text/html
    ")
                    .append("
    ")
                    .append("<html><body><h1>")
                    .append(string)
                    .append("</h1></body></html>");
            this.outputStream.write(stringBuilder.toString().getBytes());
            this.outputStream.flush();
            this.outputStream.close();
        }
    }

    MyMapping用于映射哪个Servlet处理我们的请求

    package com.hailu;
    
    import java.util.HashMap;
    
    public class MyMapping {
        public static HashMap<String,String> mapping=new HashMap<>();
        static {
            mapping.put("/mytomcat","com.hailu.MyServlet");
        }
        public HashMap<String,String> getMapping(){
            return mapping;
        }
    }

    MyHttpServlet抽象类

    package com.hailu;
    
    public abstract class MyHttpServlet {
        public static final String METHOD_GET = "GET";
        public static final String METHOD_POST = "POST";
    
        public abstract void doGet(MyRequest myRequest, MyResponse myResponse) throws Exception;
    
        public abstract void doPost(MyRequest myRequest, MyResponse myResponse)throws Exception;
    
        /**
         * 根据请求方式来判断用哪种处理方法
         * @param myRequest
         * @param myResponse
         * @throws Exception
         */
        public void service(MyRequest myRequest, MyResponse myResponse)throws Exception {
            if (METHOD_GET.equals(myRequest.getRequestMethod())){
                doGet(myRequest,myResponse);
            }else if (METHOD_POST.equals(myRequest.getRequestMethod())){
                doPost(myRequest,myResponse);
            }
        }
    }

    MyHttpServlet

    package com.hailu;
    
    public class MyServlet extends MyHttpServlet {
        @Override
        public void doGet(MyRequest myRequest, MyResponse myResponse) throws Exception {
            myResponse.write("GetMyTomcat");
        }
    
        @Override
        public void doPost(MyRequest myRequest, MyResponse myResponse)throws Exception {
            myResponse.write("PostMyTomcat");
        }
    }

    MyServer

    package com.hailu;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class MyServer {
        public static void startServer(int port) throws Exception {
            ServerSocket serverSocket = new ServerSocket(port);
            Socket socket = null;
            while (true) {
                socket = serverSocket.accept();
                MyRequest myRequest = new MyRequest(socket.getInputStream());
                MyResponse myResponse = new MyResponse(socket.getOutputStream());
    
                String clazz = new MyMapping().getMapping().get(myRequest.getRequestUrl());
                if (clazz != null) {
                    Class<MyServlet> myServletClass = (Class<MyServlet>) Class.forName(clazz);
                    MyServlet myServlet = myServletClass.newInstance();
                    myServlet.service(myRequest, myResponse);
                }
            }
        }
    
        public static void main(String[] args) {
            try {
                startServer(10086);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    Saltstack安装及入门
    网络-flannel及calico
    vxlan 协议
    5G系统架构
    5G及移动边缘计算(MEC)学习笔记(3)
    linux 环境变量
    Python 包管理工具
    linux 后台运行程序
    训练测试样本划分
    kmeans 聚类 k 值优化
  • 原文地址:https://www.cnblogs.com/yanghailu/p/12741155.html
Copyright © 2011-2022 走看看