我已经设置了我的网络服务器,暂时只有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代码?