有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从http服务器、filehandler中删除冗余代码

我已经在8080端口设置了我的Web服务器,目前只是本地主机,用于测试

public class WebServer {

static int port = 8080; //not the final port
static String ip = "127.0.0.1"; // not the final IP


public static void main(String[] args) throws IOException {

    InetSocketAddress i = new InetSocketAddress(ip, port); //localhost - 127.0.0.1
    HttpServer server = HttpServer.create(i, 0);

    server.createContext("/tester", new testHandler("index.html"));

    server.createContext("/startpage", new PagesHandler());
    server.createContext("/online", new OnlineHandler());
    server.createContext("/logfile", new LogFileHandler());

    server.setExecutor(null);
    server.start();

}

对于每个页面引用,我都有一个单独的处理程序,它基本上做相同的事情。 PagesHandler()的示例

   static class PagesHandler implements HttpHandler {

    String content = "public/";

    @Override
    public void handle(HttpExchange he) throws IOException {

        File file = new File(content + "index.html");

        byte[] bytesToSend = new byte[(int) file.length()];
        try {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
            bis.read(bytesToSend, 0, bytesToSend.length);
        } catch (IOException ie) {
            ie.printStackTrace();
        }
        he.sendResponseHeaders(200, bytesToSend.length);
        try (OutputStream os = he.getResponseBody()) {
            os.write(bytesToSend, 0, bytesToSend.length);
        }

    }

}

这使得我有很多冗余代码,我真的不认为有必要。 我的问题是。我猜有一种方法可以用文件名来解析处理程序,而不是用文件中的硬编码文件名

但是我该怎么做呢? 具有字符串参数作为文件名的处理程序的构造函数会这样做吗? 像这样

public pagesHandler(String fileName){
}

大体上是这样的:

 server.createContext("/tester", new testHandler("index.html"));

如果没有,我将如何减少粗鲁的代码


共 (0) 个答案