简单的Http Server实现
思路:
1.创建一个ServerSocket对象。
2.调用ServerSocket对象的accept方法,等待连接,连接成功会返回一个socket对象,否则一直阻塞等待。
3.从Socket对象中获取InputStream与OutputStream字节流,这两个流分别对应request请求与response响应。
4.处理请求:读取InputStream字节流信息,转成字符串形式,并解析,这里的解析比较简单,仅仅获取URI信息。
5.处理响应:根据解析出来的URI信息,从WEB-ROOT目录中寻找请求的资源文件,读取资源文件,并将其写入到OutputStream字节流中。
6.关闭Socket对象。
7.转到步骤2,继续等待连接请求。
重点:在输出响应信息时,一定要注意响应信息的格式,响应头与响应正文之间空一行。
//发送回执
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.println("HTTP/1.1 200 OK");
pw.println("Content-type:text/html");
pw.println();
pw.println("<h1>访问成功!</h1>");
pw.flush();
//首先向浏览器输出响应头信息
pw.println("HTTP/1.1 200 OK");
pw.println("Content-Type:text/html;charset:GBK");
pw.println();
//输出主页信息
pw.println("<HTML><BODY>"
+ "<center>"
+ "<h1>HTTP协议测试服务器,当前时间:"
+ new java.util.Date()
+ "</h1>"
+ "</center>"+"<pre>"+ msg.toString() +"</pre></BODY></HTML>"); //String msg
直接将内容输出在浏览器上面
File file = new File(HttpServer.WEB_ROOT, request.getUri());
System.out.println(file.length());
if (file.exists()) {
fis = new FileInputStream(file);
int ch = 0;
while ((ch = fis.read(bytes)) != -1) {
output.write(bytes, 0, ch);
}
也可采用PrintWriter与PrintStream输出响应。