/**
* 模拟http服务器的实现原理
* @author mrchai
*
*/
public class MyHttpServer extends Thread{
private Socket s;
public MyHttpServer(Socket s) {
super();
this.s = s
}
@Override
public void run() {
PrintStream out = null;
InputStream is = null;
try {
//获取基于socket的输出流
out = new PrintStream(s.getOutputStream());
//获取socket的输入流
Scanner sc = new Scanner(s.getInputStream());
String line = sc.nextLine();
//截取客户端请求的资源地址(相对地址)
String source = line.split(" ")[1].substring(1);
System.out.println("请求的资源:"+source);
File file = new File(source);
//判断请求的资源是否存在
if(!file.exists()) {
out.println("HTTP/1.1 404 NOT FOUND");
out.println();
out.flush();
return;
}
//发送响应头
out.println("HTTP/1.1 200 OK");
//Mimetype:text/html,text/json,image/jpg
out.println("Content-Type: */*");
out.println();
//发送请求的内容
is = new FileInputStream(file);
byte[] b = new byte[1024];
int len = 0;
while((len = is.read(b)) != -1) {
out.write(b, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(out != null)out.close();
if(is != null)is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
erverSocket server = new ServerSocket(9090);
while(true) {
Socket s = server.accept();
new MyHttpServer(s).start();
}
}
}
模拟HTTP服务器
最新推荐文章于 2023-11-09 11:55:39 发布