从http服务器,文件处理程序中删除冗余代码

时间:2014-09-09 21:59:54

标签: java http handler

我已经设置了我的网络服务器,暂时只有localhost,在8080端口进行测试。

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);
        }

    }

}

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

但我该怎么做呢? 将文件名的String参数的处理程序的构造函数做? 像这样

public pagesHandler(String fileName){
}

主要是这样的:

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

如果不是,我将如何减少rudandant代码?

0 个答案:

没有答案