Java使用Scoket实现一个简单的Web服务器
一、项目介绍
该项目是用JAVA使用Scoket实现一个简单的Web服务器,项目的实现受到了 HaHa_Sir 的《Java写一个简单的Web服务器Socket实现》 的启发。
项目已实现功能:
- 用户能自由设置WebServer端口(1024-65535);
- 允许多个用户同时访问服务器;
- 实现HTML和JPG图片的解析;
- 资源文件实现相对路径解析;
二、整体思路
实现WebServer的逻辑是很清晰的:
- 设置WebServer端口号,其范围在1024-65535之间;
- 使用 **ServerSocket.accept()**方法,轮询监听用户请求;
- 用户使用浏览器输入地址,向WebServer发出请求;
- 服务器监听到用户请求,为该请求新建一个HttpServer来处理该请求;
- HttpServer解析用户请求并作出响应;
- 用户浏览器显示响应结果;
三、代码实现
该项目为WebServer,整个项目包含两个java文件,分别是webserver.java 和 httpserver.java。
1. WebServer.java
其中,WebServer.java 是整个项目的主线程,用于设置服务器端口号;监听用户的请求,为每一个监听到的请求新建一个httpserver线程,来处理用户请求。
函数 | 介绍 |
---|---|
public static void startServer(int port) | 轮询serverSocket.accept(),监听用户请求,为每一个监听到的请求,新建一个httpserver线程响应 |
public static void main(String[] args) | 用于根据用户输入来设置服务器端口号,其后,启动Webserver服务器 |
package com.webServer;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class WebServer {
public static void startServer(int port){
try {
@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(port);
while(true){
Socket socket = serverSocket.accept();
new HttpServer(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args){
@SuppressWarnings("resource")
Scanner in =new Scanner(System.in);
System.out.print("Please input the Port Number( 1024 -65535 ):");
int portNumber=80;
do{
portNumber=in.nextInt();
if(portNumber>=1024 && portNumber <= 65535 )
break;
else
System.out.print("The Input Port Number is wrong,please input again( 1024 -65535 ):");
}while(in.hasNext());
System.out.println("**********WebServer start!*********");
startServer(portNumber);
}
}
2. Httpserver.java
Httpserver.java 继承自Thread,用于读取用户访问路径,根据路径响应请求。
函数 | 介绍 |
---|---|