⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webserver.java

📁 用JAVA做的小型WEB服务器
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import java.util.*;

/*WEB服务器主类*/
public final class WebServer {
	private String bindip; //绑定IP地址
	private int bindport; //绑定端口号
	private String defaultPage; //默认主页
	private String rootdir; //站点文档根目录
	private boolean isStartup; //服务器是否启动标记
	
	/*查看服务器是否已经启动*/
	public boolean isStartup() {
		return isStartup;
	}
	
	/*启动服务器*/
	public void startup() {
		if(!isStartup) {
			isStartup = true;
			new Thread(new Monitor()).start();
			System.out.println("启动服务器...");
		}else {
			System.out.println("服务器已经启动!");
		}
	}
	
	/*端口监听器,接收用户的请求*/
	private class Monitor implements Runnable {
		
		public void run() {
			ServerSocket serverSocket = null;
			try {
				BufferedReader reader = new BufferedReader(new FileReader(ServerContext.CFG_GENERAL)); //读取服务器配置
				String line = null;
				while((line = reader.readLine()) != null) {
					int index = line.indexOf("=");
					String key = line.substring(0,index);
					String value = line.substring(index+1);
					if(key.equals("bindip")) {
						bindip = value;
					}else if(key.equals("bindport")) {
						bindport = Integer.parseInt(value);
					}else if(key.equals("defaultpage")) {
						defaultPage = value;
					}else if(key.equals("rootdir")) {
						rootdir = value;
						if(!rootdir.endsWith("\\") || !rootdir.endsWith("/")) {
							rootdir = rootdir + "\\";
						}
					}
				}
				reader.close();
				serverSocket = new ServerSocket();
				serverSocket.bind(new InetSocketAddress(bindip,bindport),bindport);
				System.out.println("服务器成功绑定IP[" + bindip + "]和端口[" + bindport + "]!");
			}catch(IOException ex) {
				ex.printStackTrace(); 
			}
			while(true) { //开始循环监听
				try {
					Socket socket = serverSocket.accept();
					new Thread(new SingleUserThread(socket)).start(); //如果有用户请求,则开启一个线程来完成此请求
				}catch(IOException ex) {
					ex.printStackTrace();
				}
			}
		}
	}
	
	/*用户请求处理线程*/
	private class SingleUserThread implements Runnable {
		private Socket socket;
		
		SingleUserThread(Socket socket) {
			this.socket = socket;
		}
		
		public void run() {
			try {
				BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				String requestHeader = reader.readLine(); //读取用户请求头,为了获取所要请求的文档
				System.out.println("requestHeader = " + requestHeader);
				Request request = new Request(requestHeader,defaultPage,rootdir); //创建一个用户请求对象:Request
				Response response = new Response(socket.getOutputStream()); //创建一个用户响应对象:Response
				response.sendDoc(request.getDoc()); //响应用户所请求的文档
			}catch(IOException ex) {
				ex.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		new WebServer().startup(); //启动服务器
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -