【问题标题】:How to send file to web browser using java sockets?如何使用 Java 套接字将文件发送到 Web 浏览器?
【发布时间】:2017-03-01 15:01:03
【问题描述】:

出于好奇,我正在尝试用 Java 构建 HTTP 服务器。

我知道 HTTP 在下面使用套接字(如果我错了,请纠正我)。于是开始使用ServerSocket 类开始编程。

public class Server
{

    public static void main(String[] args) throws IOException
    {
        System.out.println("Listening.....");
        ServerSocket ss = new ServerSocket(80);
        while(true)
        {
        Socket s = ss.accept();
        Scanner sc = new Scanner(s.getInputStream());
        while(sc.hasNextLine())
        {
            String line = sc.nextLine();
            if(line.equals(""))
                break;
            else
                System.out.println(line);
        }
        System.out.println("-------------------------------");
        PrintStream ps = new PrintStream(s.getOutputStream());
        ps.println("Hello from Server");
        s.close();
        ps.close();
        sc.close();
        }
    }
}

(我在实际代码中使用Thread 为多个用户提供服务。我刚刚提供了基本代码。)

我正在从网络浏览器获取所有标题。但是如何发送文件和图像?

对于简单的 HTML,我可以读取文件并使用 PrintStream 在网络浏览器上打印它。

但是如何将 JavaScript、图像等发送到浏览器?

【问题讨论】:

    标签: java sockets http


    【解决方案1】:

    HTTP 有一个协议,您需要遵循该协议。仍在广泛使用的 HTTP 1.1 协议规范是 RFC 2616(尽管它已正式被更新的 RFC 723072317232723372347235 取代)。

    my answeranother question 中,我展示了正确 直接从Java Socket 读取入站HTTP 请求的方法。

    发送回复时,您可以使用PrintStreamPrintWriter 发送响应HTTP 标头。但是,正文内容根据Content-TypeTransfer-Encoding 响应标头指定的格式作为原始字节发送。通常,您只需将原始字节直接发送到套接字的OutputStream,或者至少发送到附加的BufferedOutputStream。如果您从磁盘发送预先存在的文件,无论其类型如何,您都可以为该文件打开一个InputStream,然后将其数据直接复制到套接字的OutputStream。如果您正在动态生成数据,那么您可以使用任何合适的中间类将数据发送到套接字的OutputStreamPrint... 类仅适用于文本数据,不适用于图像等二进制数据。

    话虽如此,Java 有自己的 HttpServerHttpsServer 类。您应该考虑使用它们。

    【讨论】:

      【解决方案2】:

      基本上是一样的。您应该将原始字节“打印”到套接字的 OutputStream。

      但是,为了让浏览器能够理解它,您需要根据HTTP/1.1 protocol 调整您的响应。指定 Content-Type 标头将告诉浏览器它从您那里收到什么。指定Content-Length 标头将告诉浏览器它从您那里接收到多少字节。等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多