Класс Main является главным. Точка входа приложения - метод main() класса Main. В функции simpleServer() создается базовый Jetty сервер которому передается в качестве обработчика пользовательский класс - JettyServer. Далее сервер запускается в отдельном потоке (метод start()), а текущий поток останавливается до окончания потока сервера (это достигается вызовом метода join()).
Альтернативная функция для запуска сервера withStaticServer() отдает статический контент - файл index.html.
src/main/Main.java
package main; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.server.nio.SelectChannelConnector; public class Main { public static void main(String[] args) throws Exception { simpleServer(); } private static void simpleServer() throws Exception, InterruptedException { Server server = new Server(8080); server.setHandler(new JettyServer()); server.start(); server.join(); } private static void withStaticServer() throws Exception, InterruptedException { Server server = new Server(); SelectChannelConnector connector = new SelectChannelConnector(); connector.setPort(8080); server.addConnector(connector); ResourceHandler resource_handler = new ResourceHandler(); resource_handler.setDirectoriesListed(true); resource_handler.setWelcomeFiles(new String[]{ "index.html" }); resource_handler.setResourceBase("."); HandlerList handlers = new HandlerList(); handlers.setHandlers(new Handler[] { resource_handler, new JettyServer() }); server.setHandler(handlers); server.start(); server.join(); } }
В классе JettyServer метод handle() вызывается каждый раз при обращении к серверу. У Jetty есть пул потоков, из которого берется поток и в нем происходит выполнение метода handle().
src/main/JettyServer.java
package main; import html.HTMLPage; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; public class JettyServer extends AbstractHandler { public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=utf-8"); response.setStatus(HttpServletResponse.SC_OK); baseRequest.setHandled(true); response.getWriter().println(HTMLPage.getPage()); } }
Метод getPage() класса HTMLPage возвращает HTML страницу которую Jetty сервер вернет пользователю.
src/html/HTMLPage.java
package html; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class HTMLPage { private static final int refreshTime = 1000; private static String pagePart0 = "<html>" + "<head>" + "<script type='text/JavaScript'>" + "function setClientTime(){" + "currentTime = new Date();" + "hours = currentTime.getHours();" + "minutes = currentTime.getMinutes();" + "seconds = currentTime.getSeconds();" + "if (minutes < 10)" + "minutes = '0' + minutes;" + "if (seconds < 10)" + "seconds = '0' + seconds;" + "timeString = hours + ':' + minutes + ':' + seconds;" + "document.getElementById('ClientTime').innerHTML = timeString;" + "}" + "function refresh(){" + "location.reload(true);" + "}" + "</script>" + "</head>" + "<body onload='setInterval(function(){refresh()},"+ refreshTime +"); setClientTime();'>" + "<p>Client time: <span id='ClientTime'></span></p>" + "<p>Server time: "; private static String pagePart1 = "</p>" + "</body>" + "</html>"; public static String getTime(){ Date date = new Date(); date.getTime(); DateFormat formatter = new SimpleDateFormat("HH.mm.ss"); return formatter.format(date); } public static String getPage(){ return pagePart0 + getTime() + pagePart1; } }
--
https://github.com/vitaly-chibrikov/tp_java_2013_02/tree/master/lecture1