package org.voovan.test.http; import org.voovan.http.server.HttpRequest; import org.voovan.http.server.WebServer; import org.voovan.http.websocket.WebSocketRouter; import org.voovan.tools.TByteBuffer; import org.voovan.tools.TDateTime; import org.voovan.tools.TFile; import org.voovan.tools.log.Logger; import java.nio.ByteBuffer; public class WebServerDemo { private static byte[] fileContent = TFile.loadFileFromContextPath("WEBAPP/index.htm"); public static void main(String[] args) { WebServer webServer = WebServer.newInstance(); //性能测试请求 webServer.get("/test", (req, resp) -> { resp.body().write("OK"); }); //普通 GET 请求 webServer.get("/", (req, resp) -> { Logger.info("Client info: "+req.getRemoteAddres()+":"+req.getRemotePort()); Logger.simple("Request info: "+req.protocol()); //Session 测试 { String now = TDateTime.now(); if (req.getSession() != null && req.getSession().getAttribute("Time") != null) { Logger.simple("Session saved time is: " + req.getSession().getAttribute("Time")+" SavedTime: "+now); } req.getSession().setAttribute("Time", now); } resp.write(fileContent); resp.write("{" + "\"Method\":\"NormalGET\"," + "\"name\":\""+req.getParameter("name")+"\"," + "\"age\":\""+req.getParameter("age")+"\"" + "}"); }); //带路劲参数的 GET 请求 webServer.get("/Star/:name/:age", (req, resp) -> { Logger.info("Client info: "+req.getRemoteAddres()+":"+req.getRemotePort()); Logger.simple("Request info: "+req.protocol()); resp.write(fileContent); resp.write("{" + "\"Method\":\"PathGET\"," + "\"name\":\""+req.getParameter("name")+"\"," + "\"age\":\""+req.getParameter("age")+"\"" + "}"); }); //带路劲参数的 GET 请求 webServer.get("/test/t*t/kkk/*", (req, resp) -> { Logger.info("Client info: "+req.getRemoteAddres()+":"+req.getRemotePort()); Logger.simple("Request info: "+req.protocol()); resp.write(fileContent); resp.write("{" + "\"Method\":\"FuzzyMatching\"," + "\"name\":\""+req.getParameter("name")+"\"," + "\"age\":\""+req.getParameter("age")+"\"" + "}"); }); // 重定向 webServer.get("/redirect", (req, resp) -> { Logger.info("Client info: "+req.getRemoteAddres()+":"+req.getRemotePort()); Logger.simple("Request info: "+req.protocol()); resp.redirct("http://www.baidu.com"); }); //普通 POST 请求 webServer.post("/", (req, resp) -> { Logger.info("Client info: "+req.getRemoteAddres()+":"+req.getRemotePort()); Logger.simple("Request info: "+req.protocol()); resp.write(fileContent); String contentType = req.header().get("Content-Type").split(";")[0]; resp.write("{" + "\"Method\":\""+contentType+"\"," + "\"name\":\""+req.getParameter("name")+"\"," + "\"age\":\""+req.getParameter("age")+"\"" + "}"); }); //自定义方法测试 webServer.otherMethod("LOCK","/:test",(request,response)->{ response.body().write("User Defined HTTP method is "+request.protocol().getMethod()); Logger.simple("Query"); }); webServer.socket("/websocket", new WebSocketRouter() { @Override public ByteBuffer onRecived(ByteBuffer message) { String msg = TByteBuffer.toString(message); Logger.info(TByteBuffer.toString(message)); msg = "This is server message. Client message: \r\n\t\""+msg+"\""; return ByteBuffer.wrap(msg.getBytes()); } @Override public ByteBuffer onOpen() { Logger.info("WebSocket connect!"); return null; } @Override public void onSent(ByteBuffer message) { Logger.simple("Send: "+TByteBuffer.toString(message)); } @Override public void onClose() { Logger.info("WebSocket close!"); } }); webServer.serve(); } }