4

したがって、接続のリッスンを確立して接続を受け入れた後:

ServerSocket serverSock = new ServerSocket(6789);
Socket sock = serverSock.accept();

ブラウザに入力するとき、localhost:6789/index.htmlこの着信 GET 要求を処理して返すにはどうすればよいindex.htmlですか? index.htmlは同じディレクトリにあります。

まず、index.html実際に存在することを確認し、そうでない場合は HTTP 404 メッセージを返します。次に、接続を閉じます。

4

2 に答える 2

10

GET やその他のリクエストの処理は実際には非常に簡単ですが、 HTTP プロトコルの仕様を知っている必要があります。

最初に行うことはSocketInputStream、クライアントの と返すファイルのパスを取得することです。HTTP 要求の最初の行は、次の形式になります GET /index.html HTTP/1.1。これを行うコード例を次に示します。

SocketInputStream sis = sock.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(sis));
String request = br.readLine(); // Now you get GET index.html HTTP/1.1
String[] requestParam = request.split(" ");
String path = requestParam[1];

新しいFileオブジェクトを作成し、そのファイルが存在するかどうかを確認します。ファイルが存在しない場合は、クライアントに 404 応答を返します。それ以外の場合は、ファイルを読み取り、その内容をクライアントに送り返します。

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
File file = new File(path);
if( !file.exist()){
  out.write("HTTP 404") // the file does not exists  
}
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String line;
while((line = bfr.readLine()) != null){
  out.write(line);
}

bfr.close();
br.close();
out.close();    

完全なコードの要約は次のとおりです。

ServerSocket serverSock = new ServerSocket(6789);
Socket sock = serverSock.accept();

InputStream sis = sock.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(sis));
String request = br.readLine(); // Now you get GET index.html HTTP/1.1`
String[] requestParam = request.split(" ");
String path = requestParam[1];

PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
File file = new File(path);
if (!file.exists()) {
     out.write("HTTP 404"); // the file does not exists
}
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
String line;
while ((line = bfr.readLine()) != null) {
    out.write(line);
}

bfr.close();
br.close();
out.close();
于 2012-09-12T11:21:47.290 に答える
2

HTTPリクエストを処理するJavaベースのWebサーバーが必要な場合は、Tomcatを確認する必要があります。Tomcatは、静的ファイルを自動的に返すなどの処理を行い、特定のリクエストにカスタム応答を提供するJavaコードを定義することもできます。 。

ある種のTomcatクイックスタートガイドを読み、JavaサーブレットとJSPの基本を理解する必要があります。

セットアップと構成が簡単な代替手段はJettyであるため、これも確認することをお勧めします。

于 2012-09-12T11:05:17.237 に答える