【仿写框架之仿写Tomact】三、使用socket监听配置文件中的端口接收HTTP请求并创建线程池处理请求

文章目录

  • 1、自定义配置文件
  • 2、使用DOM解析XML文件
  • 3、创建Tomcat启动方法(解析配置文件、创建线程池、socket循环监听端口)

【仿写框架之仿写Tomact】三、使用socket监听配置文件中的端口接收HTTP请求并创建线程池处理请求_第1张图片

1、自定义配置文件

首先在main文件下创建资源目录resources:
【仿写框架之仿写Tomact】三、使用socket监听配置文件中的端口接收HTTP请求并创建线程池处理请求_第2张图片
在resource目录下创建server.xml文件,并写入监听端口与线程池数量的配置信息
【仿写框架之仿写Tomact】三、使用socket监听配置文件中的端口接收HTTP请求并创建线程池处理请求_第3张图片

2、使用DOM解析XML文件

自定义一个MyTomcat类

private  int port;
private  int poolSize;

public void init(String location){
        // 加载 xml 配置文件
        try {
            InputStream inputStream = new FileInputStream(location);
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = factory.newDocumentBuilder();
            Document doc = docBuilder.parse(inputStream);
            Element root = doc.getDocumentElement();
            NodeList nodes = root.getChildNodes();
            for(int i=0;i< nodes.getLength();i++){
                if (nodes.item(i).getNodeType()== Node.ELEMENT_NODE) {
                    System.out.print(nodes.item(i).getNodeName() + ":");
                    System.out.println(nodes.item(i).getFirstChild().getNodeValue());
                    if(nodes.item(i).getNodeName().equals("pool-size")){
                        poolSize=Integer.valueOf(nodes.item(i).getFirstChild().getNodeValue());
                    }
                    if(nodes.item(i).getNodeName().equals("port")){
                        port=Integer.valueOf(nodes.item(i).getFirstChild().getNodeValue());
                    }
                }
            }
        }catch (FileNotFoundException | ParserConfigurationException exception){
            exception.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException exception) {
            exception.printStackTrace();
        }
    }

3、创建Tomcat启动方法(解析配置文件、创建线程池、socket循环监听端口)

	public void start(String location) throws Exception {
        //1.定义ServerSocket对象进行服务端的端口注册
        init(location);
        ServerSocket ServerSocket = new ServerSocket(port);
        ExecutorService executorService = Executors.newFixedThreadPool(poolSize);

        // while(true) 持续接收请求
        while(true) {
            final Socket socket = ServerSocket.accept();
            System.out.println("有客户端连接了..." + socket.getRemoteSocketAddress());
            executorService.execute(new ServerThread(socket));
        }

    }

你可能感兴趣的:(网络协议,网络,http,java,tomcat)