※ ChatGPTを利用し、要約された質問です(原文:javaでWebサーバー)
javaで簡単なWebサーバーを作成しています
このQ&Aのポイント
javaで簡単なWebサーバーを作成しています。トップディレクトリのdocrootフォルダ下のファイルにアクセスできるようにしました。
HTTPServerクラスのdoServiceメソッドでは、サーバが受け付けるポート番号とWebサイトのトップディレクトリを設定し、クライアントからの接続を待ち受け続けます。接続があるたびにClientHandlerクラスのインスタンスを生成し、そのインスタンスのdoServiceメソッドを実行します。
HTTPServerクラスのmainメソッドでは、引数としてポート番号を受け取り、そのポート番号とカレントディレクトリのdocrootを使用してHTTPServerインスタンスを作成し、doServiceメソッドを実行します。
今学校の課題でjavaで簡単なWebサーバーを作っています
トップディレクトリのdocrootフォルダ下のファイルにアクセスできるようにしました
内容は以下の様です
import java.io.File;
import java.net.Socket;
import java.net.ServerSocket;
/**
* 簡単なWebサーバ.
*/
public class HTTPServer {
/**
* サーバソケット
*/
private ServerSocket server;
/**
* Webサイトのトップディレクトリ
*/
private String docRoot;
/**
* サーバーソケットを作成する。
* @param port このサーバが受け付けるポート番号
* @param docRoot Webサイトのトップディレクトリ
*/
private HTTPServer(int port, String docRoot) throws java.io.IOException {
server = new ServerSocket(port);
this.docRoot = docRoot;
}
/**
* サーバのサービスを行うメソッド.
*/
private void doService() {
System.out.println("Starting Server Service!!");
while (true) {
try {
Socket client = server.accept();
ClientHandler clientHandler =
new ClientHandler(client, docRoot);
clientHandler.doService();
}
catch (Exception e) {
// スタックトレースの表示
e.printStackTrace();
}
}
}
/**
* サーバ起動のための主メソッド.
* 起動方法:トップディレクトリにて
* <pre>
* java -cp lib pro3.HTTPServer ポート番号
* </pre>
*/
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("usage: java HTTPServer port_number");
System.exit(1);
}
int port = -1;
try {
port = Integer.parseInt(args[0]); // 文字列を整数へ変換
}
catch (Exception e) {
System.err.println("Invalid port number.");
System.exit(1);
}
// Webサイトのトップディレクトリ(カレントディレクトリのdocroot)を求める.
String docRoot =
System.getProperty("user.dir") + File.separator + "docroot";
try {
HTTPServer server = new HTTPServer(port, docRoot);
server.doService();
}
catch (Exception e) {
// スタックトレースの表示
e.printStackTrace();
}
}
}
doServiceで指定したファイルを読んで返したりしています
ここで質問なのですが
このサーバーを動かしている時に
http://localhost:ポート/index.html
でアクセスするたびにindex.htmlをきちんと出力してくれます
しかしソースを読む限りだとループしているようには思えないのですが
どのように繰り返しを行っているのですか?
お礼
mainの方ばかり見て完全に見逃してました ありがとうございます