zoukankan      html  css  js  c++  java
  • 自己动手写Web容器之TomJetty之二:开启服务器

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229

            上一节我们对于实现TomJetty服务器做了一些与Web有关的知识铺垫和回顾。那么从本节正式开始实现TomJetty服务器的“山寨”之旅。要想实现一个服务器,第一步要把服务器建立起来,并且能够正常运行,才能等待来自客户端的请求。考虑到这一点,我们本节就来处理TomJetty服务器的创建和启动工作。

    1服务器建立

    (1)新建一个名为TomJetty的Java工程

    (2)在工程根目录下新建一个tomjetty.config文件,用于提供服务器配置参数

    tomjetty.port=9527
    tomjetty.requestheader.class=cn.lynn.tomjetty.RequestHeaderParserImpl

    (3)编写一个工具类TomJettyUtil,用于程序读取服务器配置参数值

    package cn.lynn.tomjetty;
    import java.io.IOException;
    import java.io.FileInputStream;
    import java.util.Properties;
    
    public class TomJettyUtil {
    
        private static Properties props = new Properties();
        
        static {
            try {
                props.load(new FileInputStream(".//tomjetty.config"));
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(0);
            }
        }
        
        public static String getValue(String key) {
            return props.getProperty(key);
        }
    }

    (4)编写一个TomJetty类继承于Thread类,用于封装服务器对象

    public class TomJetty extends Thread {
        private static ServerSocket server;
        private Socket socket;
    
        public TomJetty(Socket socket) {
            this.socket = socket;
        }
        
        ...
    }

    (5)为TomJetty类提供openServer()和closeServer()方法,用于封装打开和关闭服务器的细节操作

    public static void openServer() throws Exception {
            server = new ServerSocket(Integer.parseInt(TomJettyUtil.getValue("tomjetty.port")));
            while (true) {
                new TomJetty(server.accept()).start();
            }
        }
    
    public static void closeServer() throws Exception {
        if (server != null) {
            if (!server.isClosed()) {
                server.close();
            }
        }
    }

            到这里为止,TomJetty服务器已经建立完毕,并且提供了openServer()和closeServer()方法,供外部程序调用,以执行打开和关闭服务器的操作。

    2服务器启动

            编写一个服务器启动类StartTomJetty。

    package cn.lynn.tomjetty;
    
    public class StartTomJetty {
    
        public static void main(String[] args) {
            try {
                TomJetty.openServer();
            } catch (Exception e) {
                try {
                    TomJetty.closeServer();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
    
    }

            这样一来,TomJetty服务器就能正常启动了,控制台无任何异常出现出现^_^。当然,它什么也不会做。因为在run()方法中没有进行任何操作^_^。好了,现在服务器的创建和启动工作都已完成,可以等待来自客户端的请求。但是当真的有请求来到时,目前的TomJetty服务器会感到“束手无策”,不知道请求到底要做什么、需要什么东西。这还谈什么交互呢?因此在下一节里我们将掀开HTTP请求头的神秘面纱,让TomJetty服务能够认识它,明白它的意图!

  • 相关阅读:
    CSharpGL(26)在opengl中实现控件布局/渲染文字
    CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子
    some OpenGL constants
    CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能
    CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator
    CSharpGL(22)实现顺序无关的半透明渲染(Order-Independent-Transparency)
    CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身
    批量重命名文件
    [译]基于GPU的体渲染高级技术之raycasting算法
    CSharpGL(20)用unProject和Project实现鼠标拖拽图元
  • 原文地址:https://www.cnblogs.com/innosight/p/3271192.html
Copyright © 2011-2022 走看看