【问题标题】:Add HTTP header to response in java socket server将 HTTP 标头添加到 java 套接字服务器中的响应
【发布时间】:2015-04-19 01:43:01
【问题描述】:

我不确定在哪里或使用什么命令将 HTTP 标头添加到服务器的响应中。

import java.io.*;
import java.net.*;
import com.sun.net.httpserver.*;

public class Response {

private static final int BUFFER_SIZE = 9999;
Request request;
BufferedOutputStream output;
//constructor para el output
public Response(BufferedOutputStream output){
    this.output = output;
}
//Set del request
public void setRequest(Request request){
    this.request = request;
}

public void sendResource() throws IOException{

    File file = new File(Java_Server.Web_dir,request.getUri());
    byte [] bytearray = new byte[(int) file.length()];

    FileInputStream file_out = null;

    if(file.exists())
        file_out = new FileInputStream(file);  
    else{
        String errorMessage = "HTTP/1.1 404 File Not Found\r\n" +
      "Content-Type: text/html\r\n" +
      "Content-Length: 23\r\n" +
      "\r\n" +
      "<h1>File Not Found</h1>";
    output.write(errorMessage.getBytes());
    }

    BufferedInputStream bis = new BufferedInputStream(file_out);

    try{
        bis.read(bytearray,0,bytearray.length);
        output.write(bytearray,0 , bytearray.length);
        output.flush();
        output.close();
        return;
    }catch (IOException e){
        e.printStackTrace();
    }

}

内容被传递给浏览器,但没有 HTTP 标头,例如,如果发送图像,浏览器不会显示图像,它会逐字节显示。

【问题讨论】:

    标签: java sockets http-headers


    【解决方案1】:

    首选的方法是实现一个 Servlet 并在 Servlet 容器中运行它。然后在HttpServletResponse 对象上调用setHeader 方法:

    public class ExampleServlet extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException {
            response.setHeader("X-Whatever-Header-Name-You-Want", "Value");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2023-03-17
      • 2015-04-05
      相关资源
      最近更新 更多