Я использую com.sun.net.httpserver служить HTML-страницы, содержание текста отображается корректно, но я не могу заставить его служить образы, вот как мой код выглядит следующим образом:С com.sun.net.httpserver, почему изображение не отображается в Java-сгенерированной странице html?
static String Test(int Font_Size,String First_Name,String Last_Name)
{
String Pic_File="C:/Dir_Resume_App/Dir_Resume_Picture/Hi_Test.jpg";
String Resume="<Table><Tr><Td><H2>First_Name Last_Name</H2></Td></Tr><Tr><Td><Img Src=\"file://"+Pic_File+"\" alt=Hi_Test width=268 height=201><br>"+(Pic_File+" : exists = "+new File(Pic_File).exists())+"</Td></Tr></Table>\n";
...
return Resume;
}
И вот результат:
Как видно из результата, файл изображения существует, но как-то путь «файл: // C: /Dir_Resume_App/Dir_Resume_Picture/Hi_Test.jpg» может» t привести его к отображению изображения.
Я также попытался относительные пути, как "Dir_Resume_Picture/Hi_Test.jpg", "/Dir_Resume_Picture/Hi_Test.jpg", "../Dir_Resume_Picture/Hi_Test.jpg",»../../Dir_Resume_Picture /Hi_Test.jpg "и" Dir_Resume_App/Dir_Resume_Picture/Hi_Test.jpg ", ни один из них не работает, кто-то успешно подавал изображения с com.sun.net.httpserver?
Я подозреваю, что мог пропустить что-то в заголовке http, например, рассказывать, как служить изображению вместо простого текста, может быть, это и есть причина? Сейчас это выглядит следующим образом:
InetSocketAddress addr=new InetSocketAddress(Port);
HttpServer server=HttpServer.create(addr,0);
server.createContext("/"+App_Id,new MyHandler(server));
...
class MyHandler implements HttpHandler
{
HttpServer server;
public MyHandler(HttpServer server) { this.server=server; }
public void handle(HttpExchange exchange)
{
OutputStream responseBody=exchange.getResponseBody();
String requestMethod=exchange.getRequestMethod(),requestPath=exchange.getRequestURI().getPath(),line,title="Match Skillsets",
responseString="<Html>\n<Head>\n <Title>"+title+"</Title>\n </Head>\n<Body>\n<Center>\n";
BufferedReader in=new BufferedReader(new InputStreamReader(exchange.getRequestBody()));
LinkedHashMap<String,String> params=queryToMap(exchange.getRequestURI().getQuery());
try
{
if (requestMethod.equalsIgnoreCase("GET"))
{
Headers responseHeaders=exchange.getResponseHeaders();
// responseHeaders.set("Content-Type","text/plain");
responseHeaders.set("Content-Type","text/html;charset=utf-8");
exchange.sendResponseHeaders(200,0);
это не совсем «сервер» HTTP, как это обычно понимается. это библиотека, которую вы должны перехватывать каждый запрос и обслуживать соответственно; он автоматически не служит для файла. – ZhongYu
Итак, что мне нужно сделать, чтобы оно отображало изображения? – Frank
Вы спрашиваете: как атрибут 'src' тега' <ìmg> 'должен искать локальные файлы? Кроме того, почему бы вам даже рассмотреть абсолютные пути к локальным путям в html-сайтах? –