模拟B\S服务器
模拟网站服务器,使用浏览器访问自己编写的服务端程序,查看网页效果。
代码:
package a;
/*
模拟B\S服务器
模拟网站服务器,使用浏览器访问自己编写的服务端程序,查看网页效果。
*/
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Demo11Server {
public static void main(String[] args) throws IOException {
//创建服务端
ServerSocket serverSocket = new ServerSocket(7777);
while (true) {
//建立连接
Socket accept = serverSocket.accept();
//创建多线程
new Thread(new imp(accept)).start();
}
}
public static class imp implements Runnable {
private Socket accept;
public imp(Socket accept) {
this.accept = accept;
}
@Override
public void run() {
try {
//转换流(字节->字符)
InputStreamReader inputStreamReader = new InputStreamReader(accept.getInputStream());
//读取字符串,,读取浏览器请求第一行
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//得到文件路径
String ss = bufferedReader.readLine();
String s = ss.split(" ")[1];
String path = s.substring(1);
System.out.println(path);
FileInputStream fileInputStream = new FileInputStream("D:\\IdeaProjects\\myself\\src\\a\\" + path);//D:\IdeaProjects\myself\src\a\web\index.html
//向浏览器 回写数据
OutputStream os = accept.getOutputStream();
int len;
byte[] bytes = new byte[1024];
// 写入HTTP协议响应头,固定写法
os.write("HTTP/1.1 200 OK\r\n".getBytes());
os.write("Content‐Type:text/html\r\n".getBytes());
// 必须要写入空行,否则浏览器不解析
os.write("\r\n".getBytes());
while ((len = fileInputStream.read(bytes)) != -1) {
os.write(bytes, 0, len);
os.flush();
}
//释放资源
os.close();
fileInputStream.close();
bufferedReader.close();
inputStreamReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
效果: