2017-12-19 27 views
2

私はEmberをフロントエンドに、Javaをバックエンドに使用しています。 localhost:8080と入力すると、Emberのホームページindex.htmlを表示する必要があります。以前はNode.jsを使用していましたが、下の行がトリックでしたJava HTTPサーバーからの応答でファイルを送信

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

Javaに移行すると、同じ結果が得られません。私は以下のコードを試しました。

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.flush()' ')('にos.close前を使用してみてください。 – 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。私は今夜​​これを試して、それがどのようになったのかを知らせます。 –

関連する問題