前言
这次需要用到的技术:socket网络编程,多线程,I/O文件编程,反射,Http协议,集合等技术。以及我们自定义一套Servlet规范。
代码实现
首先要实现通过浏览器访问到自己的服务器,就像Tomcat一样,访问8080端口会展示的那个默认页面一样。
public class MyTomCat {
public static void main(String[] args) {
try {
//监听8080端口
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("我的服务器启动成功...");
//socket没接收到关闭事件之前不退出循环
while (!serverSocket.isClosed()) {
System.out.println("等待连接...");
//等待连接,该事件会阻塞线程
Socket socket = serverSocket.accept();
System.out.println("连接成功...");
//获取与该浏览器的输入流
InputStream inputStream = socket.getInputStream();
//设置编码为UTF-8,并以字符的形式读取
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
String msg = null;
//循环读取
while ((msg = bufferedReader.readLine()) != null) {
if (msg.length() == 0) {
break;
}
//讲读取的信息打印在控制台上
System.out.println(msg);
}
//读取完毕后,进行一个简单响应
OutputStream outputStream = socket.getOutputStream();
String responseHead = "HTTP/1.1 200\n" +
"Content-Type: text/html;charset=utf-8\r\n\r\n";
String responseBody = "这是一个简单的展示页面";
String response = responseHead + responseBody;
//将数据展示给浏览器
outputStream.write(response.getBytes());
outputStream.close();
inputStream.close();
socket.close();
System.out.println("断开连接...");
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("服务器启动失败");
}
}
}
使用浏览器访问localhost:8080地址

观察控制台输出

由于我使用的是Edge浏览器,他除了访问8080端口外还访问了另一个地址

/favicon.ico,该请求似乎是访问收藏夹等按钮的个性图标,并无大碍,介意的可以使用火狐浏览器,火狐只会访问8080端口。
至此,实现了浏览器与服务器之间的通信
本文详细介绍了如何通过Java编程,利用socket、多线程、I/O文件编程等技术创建一个简单的HTTP服务器,使得浏览器能访问8080端口,并处理基本的HTTP请求,如显示静态页面。
5456

被折叠的 条评论
为什么被折叠?



