zoukankan      html  css  js  c++  java
  • 简单的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输出响应。



  • 相关阅读:
    MyBatis的Mapper接口以及Example的实例函数及详解
    数据存储
    广播
    java线程复习3(线程的中断)
    java线程复习2(获取和设置线程信息)
    java线程复习1(线程创建)
    最好的启动方式
    工厂模式
    欧几里得算法
    组合数打表
  • 原文地址:https://www.cnblogs.com/sam-cheng/p/7156347.html
Copyright © 2011-2022 走看看