在Java中将HTML文件写入OutputStream时包含CSS

问题描述 投票:0回答:1

我正在尝试导入预先编写的

index.html
文件并将其从主机服务器解析到客户端。我正在使用
StringBuilder
将 HTML 文件加载到字符串中,然后将其写入客户端。我的服务器代码如下:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class HTTPServer {
    public static void main(String[] args) throws IOException {
        // start server on port 8080
        ServerSocket server = new ServerSocket(8080);
        System.out.println("Listening for connection on port 8080..."); 

        while (true) {
            try {
                // accept connection from a client
                Socket socket = server.accept();
                InputStream in = socket.getInputStream();
                OutputStream out = socket.getOutputStream();

                // load HTML file from file directory
                StringBuilder contentBuilder = new StringBuilder();
                try {
                    BufferedReader webpage = new BufferedReader(new FileReader("index.html"));
                    String str;
                    while ((str = webpage.readLine()) != null) {
                        contentBuilder.append(str);
                    }
                    webpage.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                String html = contentBuilder.toString();

                // construct valid HTML response message
                final String CRLF = "\r\n"; // 13, 10
                String response = 
                    "HTTP/1.1 200 OK" + CRLF + // status line: HTTP_VERSION RESPONSE_CODE RESPONSE_MESSAGE
                    "Content-Length: " + html.getBytes().length + CRLF + // header
                    CRLF + 
                    html + 
                    CRLF + CRLF;

                // write HTML message to the client
                out.write(response.getBytes());

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

我的

index.html
文件引用了我之前编写的
style.css
文件,但是当我启动此服务器时,localhost 上的 HTML 页面未根据上述 CSS 文件进行格式化。作为参考,这里是正常打开时
index.html
页面的样子(顺便说一下,这是一个假教堂!)。

有谁知道如何让我的 Java 服务器保持完整的样式?谢谢!

我尝试在网上寻找解决方案,但尚未找到。也许我必须将整个样式表文件单独发送给客户端?

java html css server
1个回答
0
投票

将每个外部文件合并到一个index.html中

将外部文件(css、xxx.jpg)嵌入到一个 html 文件中。

您的原始 html

├── index.html
├── 001.jpg
└── style.css

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Simple HTML Page</title>
    <!-- External CSS File -->
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>Welcome to my simple web page</h1>
    <p>This is a sample web page using external CSS and images.</p>
    
    <!-- External Image File -->
    <div class="image-container">    
    <img src="001.jpg" alt="Sample pictures">
    </div>    
</body>
</html>

样式.css

body {
    font-family: Arial, sans-serif;
    background-color: #f0f0f0;
    text-align: center;
    padding: 20px;
}

h1 {
    color: #333;
}

p {
    color: #666;
}

img {
    width: 200px;
    height: auto;
    margin-top: 20px;
}

001.jpg

001.jpg 是你的图片。

新输出

全部合一 -index.html

index.html

将 style.css 移至 html

    <title>Embedded Resources Example</title>
    <style>
        /* Embedded CSS */
        // COPY style.css into here
    </style>
</head>

将图像编码为 64 进制

运行linux命令:

base64 -w 76 001.jpg > 001_base64.txt

将001_base64.txt放入此处

    <div class="image-container">
        <!-- Embedded Image as base64 -->
        <img src="data:image/png;base64,
         //all 001_base64.txt
         
        " alt="Sample pictures">
     </div>

完整索引.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Embedded Resources Example</title>
    <style>
        /* Embedded CSS */
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            text-align: center;
            padding: 20px;
        }

        h1 {
            color: #333;
        }

        p {
            color: #666;
        }

        img {
            width: 200px;
            height: auto;
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <h1>Welcome to Embedded Resources web page</h1>
    <p>This is a Embedded Resources web page using embedded CSS and images.</p>
    
    <div class="image-container">
        <!-- Embedded Image as base64 -->
        <img src="data:image/png;base64,
        
        /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
        HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
        ...
        ...
        WPDLUElPTAjZRRdzKHM6SOczBbnKY7I2WJlerTtbdjHkNFMaDwUUXBm/7v8Aj/60X/UendV4/auV
        lK9uXUxNZxUUWyhR/9k=" alt="Sample pictures">
    </div>

</body>
</html>

现在你可以使用这个index.html来包含css和图像文件。

© www.soinside.com 2019 - 2024. All rights reserved.