2017-12-19 1 views
2

프런트 엔드에는 Ember를 사용하고 백엔드에는 Java를 사용하고 있습니다. localhost : 8080을 입력 할 때 Ember 홈페이지 index.html을 보여줘야합니다. 이전에, 내가 Node.js를 사용하고 아래 라인은 자바로 이동에서 지금 트릭을 Java HTTP 서버에서 응답 파일 보내기

res.sendfile('./public/index.html'); 

를했다, 나는 동일한 결과를 얻을 수 없어요. 나는 아래의 코드를 시도했다.

public static void main(String[] args) throws Exception 
{ 
    HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); 
    server.createContext("/", new HHandler()); 
    server.createContext("/getbookarray", new MyHandler()); 
    server.setExecutor(null); // creates a default executor 
    server.start(); 
} 

static class HHandler implements HttpHandler 
{ 
    @Override 
    public void handle(HttpExchange t) throws IOException 
    { 
     File file = new File("..\\public\\index.html"); 
     String response = FileUtils.readFileToString(file); 
     String encoding = "UTF-8"; 
     t.getResponseHeaders().set("Content-Type", "text/html; charset=" + encoding); 
     t.getResponseHeaders().set("Accept-Ranges", "bytes"); 
     t.sendResponseHeaders(200, response.length()); 
     OutputStream os = t.getResponseBody(); 
     os.write(response.getBytes("UTF-8")); 
     os.close(); 
    } 
} 

하지만 불행히도 홈페이지 페이지를로드하려고 할 때 아래 오류가 표시됩니다.

"Uncaught SyntaxError: Unexpected token <"

Node.js를 사용하여 처리 할 때 동일한 Ember 응용 프로그램이 정상적으로 작동합니다. 나는 HTTP 응답을 제대로 보내지 않을 것이라고 생각한다. 어떤 도움을 주셔서 감사합니다.

+0

'os.close()'앞에 'os.flush()'를 사용하여 차이가 있는지 확인하십시오. – edkeveked

답변

0

파일 경로에 문제가있을 수 있습니다. readFileToString은 더 이상 사용되지 않습니다.

여기는 index.html을 프런트 엔드로 보낼 작동하는 서버입니다.

import com.sun.net.httpserver.Headers; 
import com.sun.net.httpserver.HttpExchange; 
import com.sun.net.httpserver.HttpHandler; 
import com.sun.net.httpserver.HttpServer; 
import org.apache.commons.io.FileUtils; 

import java.io.*; 
import java.net.HttpURLConnection; 
import java.net.InetSocketAddress; 
import java.nio.charset.Charset; 

public class myServer { 
    public static void main(String[] args) throws Exception { 
     System.out.println("server ..."); 
     HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); 
     server.createContext("/", new HHandler()); 
     //server.createContext("/getbookarray", new HHandler()); 
     //server.setExecutor(null); // creates a default executor 
     server.start(); 
     //server.getExecutor(); 
    } 

    static class HHandler implements HttpHandler { 
     @Override 
     public void handle(HttpExchange t) throws IOException { 
      Headers h = t.getResponseHeaders(); 



      String line; 
      String resp = ""; 

      try { 
       File newFile = new File("src/index.html"); 
       System.out.println("*****lecture du fichier*****"); 
       System.out.println("nom du fichier: " + newFile.getName()); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(newFile))); 

       while ((line = bufferedReader.readLine()) != null) { 
        System.out.println(line); 
        resp += line; 
       } 
       bufferedReader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      h.add("Content-Type", "application/json"); 
      t.sendResponseHeaders(200, resp.length()); 
      OutputStream os = t.getResponseBody(); 
      os.write(resp.getBytes()); 
      os.close(); 
     } 
    } 
} 

당신은 경량 서버 nanoHttpd를 사용할 수 있습니다. 다음 코드를 사용하여 index.html 파일을 프런트 엔드에도 보낼 수 있습니다.

import fi.iki.elonen.NanoHTTPD; 

import java.io.*; 

public class App extends NanoHTTPD { 

    public App() throws IOException { 
     super(8080); 
     start(NanoHTTPD.SOCKET_READ_TIMEOUT, false); 
     System.out.println("\nRunning! Point your browsers to http://localhost:8080/ \n"); 
    } 

    public static void main(String[] args) { 
     try { 
      new App(); 
     } catch (IOException ioe) { 
      System.err.println("Couldn't start server:\n" + ioe); 
     } 
    } 

    @Override 
    public Response serve(NanoHTTPD.IHTTPSession session) { 

     File newFile = new File("src/index.html"); 
     System.out.println("*****lecture du fichier*****"); 
     System.out.println("nom du fichier: " + newFile.getName()); 


     String line; 
     String reponse = ""; 

     try { 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(newFile))); 
      while ((line = bufferedReader.readLine()) != null){ 
       reponse += line; 
      } 
      bufferedReader.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return newFixedLengthResponse(reponse); 
    } 
} 
+0

헤이 edkeveked, 나는 당신의 제안을 시도했다. 하지만 여전히 같은 오류가 발생합니다. 다른 제안? –

+0

@GiridharanJ, 내 대답을 업데이트했습니다. – edkeveked

+0

@edkeveked 감사합니다. 오늘 밤 이걸 시험해보고 어떻게되었는지 알려줄거야. –

관련 문제