使用java模拟简单的tomcat的方法详解

 更新时间:2022年02月23日 15:24:02   作者:不服输的少年  
这篇文章主要为大家详细介绍了java模拟简单的tomcat的方法,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

我们现在已经会使用tomcat了,但tomcat具体的原理还很模糊,下面我们使用java来简单模拟一下tomcat,实现游览器访问8888端口,然后得到一个网页进行展示。注意:这只是简单模拟

我们接下来将会使用java里面的io和网络的知识。首先先简单一点,游览器访问8888端口,然后输出一句话,编写代码如下

@Test
    public void myTomcat() throws IOException {
        // 在 8888 端口进行监听
        ServerSocket serverSocket = new ServerSocket(8888);
        //当服务器没有关闭的时候一直等待连接
        while (!serverSocket.isClosed()){
            //得到socket用于通讯
            Socket socket = serverSocket.accept();
            //得到输出流
            OutputStream outputStream = socket.getOutputStream();
            //写入数据
            outputStream.write("this is myTomcat".getBytes());
            //关闭输出流和socket
            outputStream.close();
            socket.close();
        }
        //关闭服务器
        serverSocket.close();
    }

我们使用firefox进行访问,访问的网站为localhost:8888,firefox访问后的显示为:

可以看见,已经成功实现。注意 ,必须使用firefox,使用geogle和edge都不可以,原因是他们没有解析tcp协议的数据。

我们在次基础上进一步加深,让游览器访问服务器时,服务器返回一个html的文件,然后游览器进行展示,编写代码如下

@Test
    public void myTomcat() throws IOException {
        // 在 8888 端口进行监听
        ServerSocket serverSocket = new ServerSocket(8888);
        //当服务器没有关闭的时候一直等待连接
        while (!serverSocket.isClosed()) {
            //得到socket用于通讯
            Socket socket = serverSocket.accept();
            //得到输出流
            OutputStream outputStream = socket.getOutputStream();
            //得到输入流
            BufferedInputStream bufferedInputStream = new BufferedInputStream(
                    new FileInputStream("src/hello.html"));
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = bufferedInputStream.read(bytes)) != -1) {
                //写入数据
                outputStream.write(bytes, 0, len);
            }
            //关闭输出流和socket
            outputStream.close();
            socket.close();
        }
        //关闭服务器
        serverSocket.close();
    }

html文件如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hello</title>
</head>
<body>
    <h1>this is myTomcat</h1>
</body>
</html>

运行java文件后,游览器访问localhost:8888,显示如下

我们可以看见我们已经成功了,但是游览器并没有把这个解析为html,这个问题展示先不说,现在我们已经用java实现了一个最简单tomcat,后面会慢慢的深入。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!  

相关文章

  • 浅谈Java8新特性Predicate接口

    浅谈Java8新特性Predicate接口

    这篇文章主要介绍了浅谈Java8新特性Predicate接口,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java e.printStackTrace()案例讲解

    Java e.printStackTrace()案例讲解

    这篇文章主要介绍了Java e.printStackTrace()案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 基于surging跨网关跨语言进行缓存降级的问题小结

    基于surging跨网关跨语言进行缓存降级的问题小结

    surging是一款开源的微服务引擎,包含了rpc服务治理,中间件,以及多种外部协议来解决各个行业的业务问题,这篇文章主要介绍了如何基于surging跨网关跨语言进行缓存降级,需要的朋友可以参考下
    2024-05-05
  • Java中BigDecimal的基本运算(详解)

    Java中BigDecimal的基本运算(详解)

    下面小编就为大家带来一篇Java中BigDecimal的基本运算(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 关于Java Spring三级缓存和循环依赖的深入理解

    关于Java Spring三级缓存和循环依赖的深入理解

    对于循环依赖,我相信读者无论只是听过也好,还是有过了解也好,至少都有所接触。但是我发现目前许多博客对于循环依赖的讲解并不清楚,都提到了Spring的循环依赖解决方案是三级缓存,但是三级缓存每一级的作用是什么,很多博客都没有提到,本篇文章带你深入了解
    2021-09-09
  • jenkins按模块进行构建遇到的问题及解决方案

    jenkins按模块进行构建遇到的问题及解决方案

    这篇文章主要介绍了jenkins按模块进行构建的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 浅析Java如何优雅的避免那无处不在的空指针异常

    浅析Java如何优雅的避免那无处不在的空指针异常

    在Java编程语言中,NullPointerException(简称NPE)是一种常见的运行时异常,本文主要来和大家讲讲如何优雅的避免这些空指针异常,需要的可以参考下
    2024-03-03
  • JavaWeb实现简单用户发送邮件

    JavaWeb实现简单用户发送邮件

    这篇文章主要为大家详细介绍了JavaWeb实现简单用户发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java按照模板导出pdf或word文件详细代码

    java按照模板导出pdf或word文件详细代码

    有时候业务中我们需要使用pdf模板生成一份pdf文件,下面这篇文章主要给大家介绍了关于java按照模板导出pdf或word文件的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-11-11
  • Springboot项目实现将类从@ComponentScan中排除

    Springboot项目实现将类从@ComponentScan中排除

    这篇文章主要介绍了Springboot项目实现将类从@ComponentScan中排除,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论