tomcat为什么能让jvm持续运行?

tomcat为什么能让jvm持续运行?我们知道任何java代码的程序入口都是一个main方法,随着main方法运行结束程序便随之结束。那么大家有没有这么一个疑问,我们平时都是将我们的

欢迎大家来到IT世界,在知识的湖畔探索吧!

我们知道任何java代码的程序入口都是一个main方法,随着main方法运行结束程序便随之结束。那么大家有没有这么一个疑问,我们平时都是将我们的应用部署到tomcat服务器上,然后tomcat上的应用就能持续接收请求给予响应。应用本身是没有main方法的(SpringBoot这种集成了tomcat的就不说了),tomcat本身也是java代码,java程序的执行入口必定是一个main方法,mian方法执行结束按理来说tomcat就会结束,但是为何tomcat却能一直运行呢?

其实能使main方法一直运行的方法很简单,我们只需要一个简单的while(true)方法即可让程序一直处于运行状态,而实际上tomcat也是这么做的,我们翻看tomcat的源码可以看到,这里确实有一个while(true),只不过这里的是一个变量可以来控制。

tomcat为什么能让jvm持续运行?

下面我们用一个简单的程序来模拟一下tomcat的接收请求的过程

/**
 * @author wangpeng
 * @version 1.0
 * @apiNote tomcat服务器
 * @date 2023/7/17 5:46 下午
 * @since JDK1.8
 **/
public class TomcatDemo {
    public static final int post = 8080;
    public static void main(String[] args) {
        System.out.println(" My Tomcat is Running");
        try {
            ServerSocket server = new ServerSocket(post);
            while (true) {
                Socket socket = server.accept();
                InputStream in = socket.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(in));
                StringBuilder info = new StringBuilder();
                String infoline = br.readLine();
                while (infoline != null) {
                    info.append(infoline);
                    infoline = br.readLine();
                }
              	//解析url地址,然后将对应的每个关键字解析
                UrlBean url = UrlUtil.readString(info.toString());
                String path = url.getPath();
                String className = url.getFileName();
                String methodName = url.getParameter();
                ClassLoader classloader = ClassLoader.getSystemClassLoader();
                try {
                    classloader.loadClass(path + "." + className);
                    Class<?> getClass = Class.forName(path + "." + className);
                    Method method = getClass.getMethod(methodName);
                    method.invoke(getClass.newInstance());
                } catch (Exception e) {
                }
            }
        } catch (IOException e) {

        }
    }

}

欢迎大家来到IT世界,在知识的湖畔探索吧!

欢迎大家来到IT世界,在知识的湖畔探索吧!/**
 * @author wangpeng
 * @version 1.0
 * @apiNote 程序客户端
 * @date 2023/7/17 5:56 下午
 * @since JDK1.8
 **/
public class ClientDemo {
    private static final String host = "127.0.0.1";
    //http://127.0.0.1:8080/com.bboss.zqesp.controller/TestTomcat.java?test
    public static void main(String[] args) {
        try {
            Socket con = new Socket(host, TomcatDemo.post);
            System.out.println("请输入URL地址:");
            Scanner scanner = new Scanner(System.in);
            String info = scanner.nextLine().trim();
            Writer writer = new OutputStreamWriter(con.getOutputStream());
            writer.write(info);
            writer.flush();
            writer.close();
        } catch (UnknownHostException e) {
        } catch (IOException e) {
        }
    }

}
/**
 * @author wangpeng
 * @version 1.0
 * @apiNote 模拟controller
 * @date 2023/7/17 6:01 下午
 * @since JDK1.8
 **/
public class TestTomcat {
    public void test(){
        System.out.println("请求到了路径!");
    }
}

启动”tomcat”:

tomcat为什么能让jvm持续运行?

tomcat开始接守请求

客户端发起请求:

tomcat为什么能让jvm持续运行?

客户端请求

“tomcat”服务器接收到请求

tomcat为什么能让jvm持续运行?

tomcat接收客户端请求

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/37264.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信