Java使用Scoket实现一个简单的Web服务器

一、项目介绍

该项目是用JAVA使用Scoket实现一个简单的Web服务器,项目的实现受到了 HaHa_Sir《Java写一个简单的Web服务器Socket实现》 的启发。

项目已实现功能:

  1. 用户能自由设置WebServer端口(1024-65535);
  2. 允许多个用户同时访问服务器;
  3. 实现HTML和JPG图片的解析;
  4. 资源文件实现相对路径解析;

二、整体思路

实现WebServer的逻辑是很清晰的:

  1. 设置WebServer端口号,其范围在1024-65535之间;
  2. 使用 **ServerSocket.accept()**方法,轮询监听用户请求;
  3. 用户使用浏览器输入地址,向WebServer发出请求;
  4. 服务器监听到用户请求,为该请求新建一个HttpServer来处理该请求;
  5. HttpServer解析用户请求并作出响应;
  6. 用户浏览器显示响应结果;

三、代码实现

该项目为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,用于读取用户访问路径,根据路径响应请求。

函数 介绍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值