简单的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输出响应。



posted @ 2017-07-12 16:49  samcheng  阅读(646)  评论(0编辑  收藏  举报