如何从服务器发送html文件以在客户端的浏览器中打开?

时间:2017-07-30 15:02:37

标签: java html multithreading sockets webserver

我创建了一个功能正常的Web服务器,此时,我必须将文件中的html代码完全粘贴到服务器程序中,以便客户端浏览器读取html代码。我想要一个更简单的方法,我可以创建一个导致服务器目录中的html文件的变量,这样服务器就可以发送在该文件中写入的任何代码。

这是我的主要Server类:

package myserver.pkg1.pkg0;

import java.io.*;
import java.net.*;

public class Worker implements Runnable {

    protected Socket client;

    public Worker(Socket client) {
        this.client = client;
    }

    @Override
    public void run() {

        try {
            PrintWriter out = new PrintWriter(client.getOutputStream());       
            out.println("HTTP/1.1 200 OK");
            out.println("Content-type: text/html");
            out.println("\r\n");
            //In this line I used out.println("full html code"); but I'd like a simpler way where it can search for the html file in the directory and send it.
            out.flush();
            out.close();
            client.close();

        } catch(Exception e) {
            System.out.println(e);
        }

    }

}

正如您在服务器接受请求后所看到的,客户端套接字变量被转发到新的类Worker。

这是工人类:

[server]

const http = require('http');
const fs = require('fs');
const $ = require('jquery');

const jsdom = require("jsdom");
const { JSDOM } = jsdom;

const main = require('./main');

const dom = new JSDOM(`<!DOCTYPE html><html><body><p>Hello world</p></body>`);

http.createServer(function(request, response){
  response.writeHeader(200, {"Content-Type": "text/html"});
  response.write(dom.serialize());
  response.end();
}).listen(8080);

Worker类处理将在客户端浏览器上看到的所有输出,我希望它是html文件的结果。

1 个答案:

答案 0 :(得分:2)

您可以放置​​文件&#34; index.html&#34;在你的类路径中并执行

    InputStream in = this.getClass().getClassLoader()
            .getResourceAsStream("index.html");
    String s = new BufferedReader(new InputStreamReader(in))
            .lines().collect(Collectors.joining("\n"));
    out.println(s);