模拟 B\S 服务器
- 模拟网站服务器,使用浏览器访问自己编写的服务端程序,查看网页效果。
1. 案例分析
- 准备页面数据,web 文件夹;
- 我们模拟服务器端,ServerSocket 类监听端口,使用浏览器访问,查看网页效果。
2. 案例实现
- 浏览器工作原理是遇到图片会开启一个线程进行单独的访问,因此在服务器端加入线程技术。
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
while (true) {
Socket socket = server.accept();
new Thread(new Web(socket)).start();
}
}
}
class Web implements Runnable {
private Socket socket;
public Web(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedReader readWb = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String requst = readWb.readLine();
String[] strArr = requst.split(" ");
System.out.println(Arrays.toString(strArr));
String path = strArr[1].substring(1);
System.out.println(path);
FileInputStream fis = new FileInputStream(path);
System.out.println(fis);
byte[] bytes = new byte[1024];
int len = 0;
OutputStream out = socket.getOutputStream();
out.write("HTTP/1.1 200 OK\r\n".getBytes());
out.write("Content-Type:text/html\r\n".getBytes());
out.write("\r\n".getBytes());
while ((len = fis.read(bytes)) != -1) {
out.write(bytes, 0, len);
}
fis.close();
out.close();
readWb.close();
socket.close();
} catch (Exception ex) {
}
}
}
3. 效果展示
- Console:
www.index.html
。访问效果:
原文链接:https://qwert.blog.csdn.net/article/details/105356269