При разработке приложений часто возникает необходимость реализовать средства для удаленного администрирования, просмотра статистики и т.п. Самым простым, стандартным и переносимым способом для этого является веб-интерфейс. При этом возникают следующие проблемы:
1) Полноценные Java http серверы (например, Jetty) достаточно объемны, в то время как нам требуется только простейшая функциональность и минимальный размер кода.
2) Для удаленного администрирования лучше всего подходит интерфейс командной строки, а не традиционные html страницы.
3) Простота деплоймента: в идеале все html и JavaScript ресурсы должны храниться в том же jar файле, что и сам веб сервер.
Предлагаемый веб сервер поддерживает один-единственный http метод GET и примитивный аналог механизма сервлетов. Этого оказывается достаточно для того, чтобы реализовать AJAX командный интерфейс, описанный Стояном Стефановым (
http://www.sitepoint.com/article/take-command-ajax).
Сервер инициализируется в классе Main; необходимые html и JavaScript файлы должны физически находитсься в jar файле приложения или в любом другом месте в пути classpath.
HttpServer server = new HttpServer(8080);
server.registerServlet("/", new ResourceServlet("web/console.html"));
server.registerServlet("/console.html", new ResourceServlet("web/console.html"));
server.registerServlet("/wc.css", new ResourceServlet("web/wc.css"));
server.registerServlet("/st-xmlhttp.js", new ResourceServlet("web/st-xmlhttp.js"));
server.registerServlet("/exec", new CommandServlet());
server.initialize();
Команды клиентов передаются через параметр метода GET в сервлет CommandServlet. В тестовой версии он просто дублирует ввод пользователя:
public class CommandServlet implements IServlet {
public void doGet(HttpRequest request, HttpResponse response) {
String cmd = request.getParameter("command");
response.append(cmd != null ? cmd : "null");
}
}
Исходный код:
http://rsdn.ru/File/22883/jemweb.zip
Я с удовольствием добавлю новую функциональность, которая может понадобится в реальных проектах.