这篇文章主要为大家详细介绍了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,后面会慢慢的深入。
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程学习网的更多内容!
本文标题为:使用java模拟简单的tomcat的方法详解
- ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
- 深入了解Spring的事务传播机制 2023-06-02
- 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
- Java中的日期时间处理及格式化处理 2023-04-18
- Java实现顺序表的操作详解 2023-05-19
- Springboot整合minio实现文件服务的教程详解 2022-12-03
- SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
- JSP页面间传值问题实例简析 2023-08-03
- JSP 制作验证码的实例详解 2023-07-30
- Spring Security权限想要细化到按钮实现示例 2023-03-07