📄 webserver.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 + -