diff --git a/src/main/java/info/istlab/ServerTester/WebServer.java b/src/main/java/info/istlab/ServerTester/WebServer.java index cd60d8a..51efa57 100644 --- a/src/main/java/info/istlab/ServerTester/WebServer.java +++ b/src/main/java/info/istlab/ServerTester/WebServer.java @@ -10,8 +10,8 @@ import java.net.SocketException; import javax.swing.JFileChooser; -import javax.swing.JFrame; import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; public class WebServer extends Server { @@ -32,40 +32,26 @@ start(); } + File rootdir; + public void handleRequest() { - File rootdir = new File(System.getProperty("user.dir")); + rootdir = new File(System.getProperty("user.dir")); // boolean askDocRoot = true; // ドキュメントルートをユーザが選べるようにする boolean askDocRoot = false; // ドキュメントルートは固定 if (askDocRoot) { - JOptionPane.showMessageDialog(null, - "ドキュメントルートとなるフォルダを、次の画面で選択してください。\n\n選択しなかった場合、以下のフォルダがドキュメントルートとなります。\n" - + System.getProperty("user.dir")); - System.out.println("test"); - JFileChooser chooser = new JFileChooser(rootdir.getParentFile()); - // フォルダのみを選択できるように設定 - chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - // ダイアログを表示して、ユーザーの操作を待つ - int returnValue = chooser.showOpenDialog(new JFrame()); - - // ユーザーが「OK」をクリックした場合 - if (returnValue == JFileChooser.APPROVE_OPTION) { - rootdir = chooser.getSelectedFile(); - } else { - rootdir = new File(System.getProperty("user.dir")); - } - JOptionPane.showMessageDialog(null, "ドキュメントルートを " + rootdir.getAbsolutePath() - + " に設定しました。"); + askDocRoot(); } else { System.out.println( - "[Web] ドキュメントルートは " + rootdir.getAbsolutePath() + " です。起動時に変更する場合は、askDocRootをtrueにしてください。"); + "[Web] ドキュメントルートは " + rootdir.getAbsolutePath() + + " です。起動時に変更する場合は、WebServer.java のソースコードを編集し、askDocRootをtrueにしてください。"); + File[] files = rootdir.listFiles(); + System.out.println("[Web] ドキュメントルートのファイル一覧"); + for (File file : files) { + System.out.println("[Web] " + file.getName()); + } } - File[] files = rootdir.listFiles(); - System.out.println("[Web] ドキュメントルートのファイル一覧"); - for (File file : files) { - System.out.println("[Web] " + file.getName()); - } while (thread != null) { try { Socket socket = serverSocket.accept(); @@ -80,6 +66,36 @@ } } + public void askDocRoot() { + SwingUtilities.invokeLater(() -> { + JOptionPane.showMessageDialog(Host.mainhost, + "ドキュメントルートとなるフォルダを、次の画面で選択してください。\n\n選択しなかった場合、以下のフォルダがドキュメントルートとなります。\n" + + System.getProperty("user.dir"), + "WebServer - ドキュメントルートの選択", JOptionPane.INFORMATION_MESSAGE); + JFileChooser chooser = new JFileChooser(rootdir.getParentFile()); + // フォルダのみを選択できるように設定 + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + // ダイアログを表示して、ユーザーの操作を待つ + chooser.setDialogTitle("WebServer ドキュメントルートの選択"); + int returnValue = chooser.showOpenDialog(Host.mainhost); + + // ユーザーが「OK」をクリックした場合 + if (returnValue == JFileChooser.APPROVE_OPTION) { + rootdir = chooser.getSelectedFile(); + } else { + rootdir = new File(System.getProperty("user.dir")); + } + JOptionPane.showMessageDialog(Host.mainhost, "ドキュメントルートを " + rootdir.getAbsolutePath() + + " に設定しました。"); + + File[] files = rootdir.listFiles(); + System.out.println("[Web] ドキュメントルートのファイル一覧"); + for (File file : files) { + System.out.println("[Web] " + file.getName()); + } + }); + } + public static void main(String[] args) { invokeMain(args, "WebServer"); } @@ -176,7 +192,7 @@ System.err.println(filename + " ファイルがありません"); response = "HTTP/1.1 404" + CRLF + CRLF; } else { - infile = new FileInputStream(filename); + infile = new FileInputStream(rootDir.getAbsolutePath()+File.separator+filename); } // Response Headerの出力