简体   繁体   中英

Add HTTP header to response in java socket server

I'm not sure where or what command to use to add the HTTP header to the response from the server.

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();
    }

}

The contents is deliver to the browser but without the HTTP header and if a image is send for example, the browser doesn't show the image, it shows byte for byte.

The preferred way to do is, is to implement a Servlet and run it in a Servlet Container. Then you call the method setHeader on the HttpServletResponse object:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM