人生第一篇博客,提高自己并分享给大家,话不多说上代码:
package com.qiuyiliang.tomcat;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 主函数
*/
public class TomcatDemo {
public static void main(String[] args) throws IOException {
//开放一个8080端口
@SuppressWarnings("resource")
ServerSocket server = new ServerSocket(8080);
System.out.println("应用服务器启动成功...");
while(true) {//处理多个请求
//创建一个套接字socket,用来接受客户端请求,这是一个阻塞方法,一直等待负责监听
Socket socket = server.accept();
//启动一个线程
ThreadHandler threadHandler = new ThreadHandler(socket);
Thread thread = new Thread(threadHandler);
thread.start();
}
}
}
package com.qiuyiliang.tomcat;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 多线程处理请求 无需等待
* @author qiuyiliang
*
*/
public class ThreadHandler implements Runnable {
private Socket socket;
public ThreadHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
//使用输入流读取请求内容
InputStream inputStream = socket.getInputStream();
//转换成字符流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb = new StringBuilder();
String temp = "";
while ((temp = bufferedReader.readLine())!=null && temp.length()>0) {
sb.append(temp);
sb.append("\r\n");
}
System.out.println("读取的请求信息"+sb.toString());
//通过空格来分析请求到的内容
String[] content = sb.toString().split(" ");
if (content.length<=2) { //某个文件请求不到 做处理
return;
}
//使用这个web容器托管一个web应用 d:\\web目录
String webRoot = "d:\\webRoot";
//获取到路径 GET /index.html 通过java io流读取到文件并响应给客户端或浏览器
FileInputStream fileInputStream = new FileInputStream(webRoot+content[1]);
OutputStream outputStream = socket.getOutputStream();
//将输出字节流转换成字符流
PrintWriter pWriter = new PrintWriter(new OutputStreamWriter(outputStream));
//响应http协议规范的头信息
pWriter.println("HTTP/1.1 200 OK");
pWriter.println("Content-Type:text/html;charset=utf-8");
pWriter.println();//格式要求 输出一个空行
pWriter.flush();
byte[] buf = new byte[1024];
int length = 0;
while ((length = fileInputStream.read(buf))!=-1) {
outputStream.write(buf, 0, length);
}
//关流
fileInputStream.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}