gpt4 book ai didi

Java - HttpServer 不提供图像

转载 作者:行者123 更新时间:2023-11-28 04:40:40 25 4
gpt4 key购买 nike

我有一个简单的设置,包括一个带有一些上下文的 HttpServer 来加载图像和 CSS 文件:

public class Server {
private HttpServer httpServer;

public Server(int port, String path, HttpHandler handler) {
try {
httpServer = HttpServer.create(new InetSocketAddress(port), 0);

httpServer.createContext(path, handler);

// load css files
List<String> cssFiles = new ArrayList<String>();
Files.walk(Paths.get("../css")).forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
cssFiles.add(filePath.getFileName().toString());
}
});
for (String cssFile : cssFiles) {
httpServer.createContext("/css/" + cssFile, new CssHandler(cssFile));
}

// load image files
List<String> imgFiles = new ArrayList<String>();
Files.walk(Paths.get("../images")).forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
imgFiles.add(filePath.getFileName().toString());
}
});
for (String imgFile : imgFiles) {
httpServer.createContext("/images/" + imgFile, new ImageHandler(imgFile));
}

httpServer.setExecutor(null);
} catch (IOException e) {
e.printStackTrace();
}

}

public void start() {
this.httpServer.start();
}
}

除此之外,还有一个工作正常的 css 处理程序和一个图像处理程序类,它提供在 html 标签中定义的图像,但是无法加载通过 css 标签“background-image”包含的图像.. 为什么?

图像处理器:

class ImageHandler implements HttpHandler {
private String img;

public ImageHandler(String img) {
this.img = img;
}

@Override
public void handle(HttpExchange http) throws IOException {
if (http.getRequestMethod().equals("GET")) {
System.out.println("img transfered..." + img);
try {
StringBuilder contentBuilder = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new FileReader("../images/" + img));
String str;
while ((str = in.readLine()) != null) {
contentBuilder.append(str);
}
in.close();
} catch (IOException e) {
}
String response = contentBuilder.toString();
http.sendResponseHeaders(200, response.length());
OutputStream os = http.getResponseBody();
os.write(response.getBytes());
os.flush();
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}

太好了,

这个有效:

<img src="images/example.png"/>

但是这个不行:

background-image: url("images/example.png");

谁能解释原因并建议如何解决这个问题?

最佳答案

由于部分 URL 是相对于样式表的源代码的,因此您的路径结构如下所示:

/images/example.png
/css/example.css

因此 example.css 中的图像 URL 应该是绝对路径 (/images/example.png),或者具有正确的相对路径 (../images/example.png).

关于Java - HttpServer 不提供图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41213811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com