package cn.itcast.web1;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 静态的网页服务器
*
* @author APPle
*
*/
public class StaticWebServer {
public static void main(String[] args) {
int port = 8888;
try {
// 开启服务器,等待客户端的链接
ServerSocket ss = new ServerSocket(port);
System.out.println("服务器已经启动,正在监听" + port + "端口...");
// 不断地接收客户端的请求
while (true) {
final Socket socket = ss.accept();
// 用多线程可以处理多个客户端的请求
new Thread() {
public void run() {
try {
// 接收客户端发送过来的信息
InputStream in2 = socket.getInputStream();
for (int b = -1; (b = in2.read()) != -1;) {
System.out.print((char) b);
}
BufferedReader br = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
// 请求行
String requestLine = br.readLine();
// GET /a.html HTTP/1.1
// GET /b.html HTTP/1.1
// GET /news/aaa.html HTTP/1.1
// 客户端请求资源的名称
String request = requestLine.split(" ")[1];
String base = "e:/myweb";
// 请求资源在本机上路径
String resPath = base + request;
// 如果请求根目录的时候,返回一个默认页面给客户端
if (request.equals("/")) {
resPath = base + "/index.html";
}
// 当找不到资源的时候,给客户端返回一个友好的404页面
File resFile = new File(resPath);
if (!resFile.exists()) {
resPath = base + "/404.html";
}
// 把数据发送到网络的另外一端(客户端)
OutputStream out = socket.getOutputStream();
InputStream in = new FileInputStream(resPath);
for (int b = -1; (b = in.read()) != -1;) {
out.write(b);
}
in.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
学习笔记之 Servlet容器服务器原理 简易实现代码
最新推荐文章于 2023-11-02 10:34:20 发布