как настроить сервер Flashcards
Servlet
Каждый сервлет – реализация интерфейса Servlet
Сервлет живет и умирает в пределах процесса сервера.
Три метода, определяющих жизненный цикл сервлета:
public void init(ServletConfig config);
service(ServletRequest request, ServletResponse response) ;
destroy() вызывается перед удалением экземпляра(дает возможность очистить память и освободить ресурсы и соединения)
GetServletInfo() -возвращает инфо о сервлете
GetServletConfig() -возвращает объект содержащий список парамеров сервлета
параметры для сервлета(ServletConfig ) заносятся в web.xml
Класс ServletRequest
Содержит параметры сервлета, аттрибуты контекста и входной поток
getRemoteAdress()
getRemoteHost()
Класс ServletResponse
Содержит выходной поток
getWriter() – возвращает поток вывода (объект java.io.PrintWriter)
интерфейс HttpServlet расширяет javax.servlet.GenericServlet
методы:
doGet(HttpServletRequest a, HttpServletResponse b)
doPost(HttpServletRequest a, HttpServletResponse b)
doPut(HttpServletRequest a, HttpServletResponse b)
duDelete(HttpServletRequest a, HttpServletResponse b)
doOptions()
doTrace()
(есть и doHead() – но он закрытый)
И два метода service, один публичный, другой protected. Именно в закрытом service методе в сервлете решается какой запрос нужно обработать(get, post или др.)
Если указанный метод отсутствует в сервлете, в ответ возвращается ошибка HTTP 405.
В чем разница между GenericServlet, HttpServlet и сервлета?
Servlet - это интерфейс, определяющий, что должен выполнять сервлет. он обслуживает клиентский запрос и получает ответ от сервера. Сервлеты выполняются как поток в веб-контейнере, а не в отдельном процессе ОС.В первый раз при первом запросе создается только один объект, другой запрос использует один и тот же объект.
Сервлет независим от платформы.
GenericServlet - это просто общий, не зависящий от протокола сервлет.
HttpServlet - это сервлет, привязанный специально к протоколу HTTP.ны расширить HttpServlet для реализации веб-уровня приложения.Как правило, все, кодирующие этот API, используют HttpServlet для реализации веб-служб HTTP, Метод service, как правило, переопределяется, чтобы иметь возможность различать стандартные методы запросов, получаемые от Web-браузера клиента(get, post и т.д)
Вы можете реализовать Servlet, если вы пишете свой собственный контейнер или обрабатываете все самостоятельно. Вы можете расширить GenericServlet, чтобы обрабатывать другой протокол.
HttpServletRequest
При каждом вызове методы doGet и doPost класса HttpServlet принимают в качестве параметра объект, который реализует интерфейс HttpServletRequest. Web-сервер, который исполняет сервлет, создает объект HttpServletRequest и передает его методу service сервлета (который в свою очередь передает его методу doGet или doPost). Данный объект содержит запрос, поступивший от клиента.
Имеет методы по получениям параметров, куков, сессии и т.д
HttpServletResponse
При каждом обращении к сервлету методы doGet и doPost класса HttpServlet принимают объект, который реализует интерфейс HttpServletResponse. Web-сервер, который исполняет сервлет, создает объект HttpServletResponse и передает его методу service сервлета (который в свою очередь передает его методу doGet или doPost). Объект HttpServletResponse описывает ответ клиенту.
ИЗ методов это: addCookie, getOutputStream(бинарного потока ), getWriter(символьного потока),setContentType
Сервлет-контейнер и Сервер приложений
Сервлет-контейнер поддерживает только API сервлета (включая JSP, JSTL).
Сервер приложений поддерживает весь JavaEE - EJB, JMS, CDI, JTA, API сервлета (включая JSP, JSTL) и т.д.
Как работает Сервлет-контейнер и что такое ServletContext
Контейнер сервлетов — программа, представляющая собой сервер, который занимается системной поддержкой сервлетов и обеспечивает их жизненный цикл в соответствии с правилами
Когда контейнер сервлета (например Apache Tomcat) запустится, он развернет и загрузит все свои веб-приложения. Когда веб-приложение загружается, контейнер сервлета создает ServletContext один раз и хранит его в памяти сервера. Файл веб-приложения web.xml анализируется,и каждый найденный , и (или каждый класс, аннотированный с помощью @WebServlet, @WebFilter и @WebListener соответственно) создается один раз и сохраняется в серверной памяти. Для каждого созданного фильтра его метод init() вызывается с помощью нового FilterConfig.
Когда контейнер сервлета отключается, он выгружает все веб-приложения, вызывает метод destroy() всех его инициализированных сервлетов и фильтров.
ServletContext живет до тех пор, пока работает веб-приложение. Он используется всеми запросами во всех сеансах.
сервлеты и фильтры разделяются между всеми запросами и ели ты держить обьект в doGet то он потокобезопасен, а если это общий обьект на весь HTTP сервлет - то туда имеют доступ все потоки
соккет
API-интерфейсы Socket - это абстракция низкого уровня (транспортный уровень), с помощью которой приложение Java взаимодействует с сетью
Сокет и связанные с ним API поддерживают надежный поток байтов и ненадежные службы обмена сообщениями. Они обычно используются для TCP/IP и UDP/IP, хотя другие сетевые протокольные стеки могут (по крайней мере теоретически) поддерживаться.
RMI предназначен для высокоуровневых распределенных вычислений Java-Java.
Сервлеты предназначены для реализации веб-сайтов и веб-сервисов.
tomcat
контейнер сервлетов.
установка tomcat
Скачать распаковать.
Перед запуском необходимо прописать переменные среды CATALINA_HOME и JAVA_HOME.
открываете командную строку, переходите в каталог с tomcat в папку bin, там есть два файла, startup.bat и shutdown.bat. Первый включает, второй выключает наш сервер.
идём в браузер и открываем адрес localhost:8080
Конфигурация сервера производится с помощью *.xml файлов, находящихся в папке conf в корневом каталоге tomcat. Документация на сайте.
В корне tomcat есть папка webapps, которая ждёт-не дождётся пока ей кто ни будь не закинет файл с расширением war. war файлы – это специальные, так называемые web archives.
Отличия Tomcat oот Jboss
JBoss — это реализация спецификации JavaEE (контейнер для EAR- и WAR-приложений).
Tomcat — это частичная реализация JavaEE в той её части, которая включает Web-приложения (контейнер для WAR).
Tomcat - это только контейнер сервлетов, то есть он реализует только сервлеты и спецификацию jsp. Glassfish и JBoss - это полноценные серверы Java EE (включая такие вещи, как EJB, JMS,…), а Glassfish - эталонная реализация последнего стека Java EE 6, но JBoss в 2010 году еще не полностью его поддерживала.
Если есть 100 одновременных запросов на сервер к синглетон приложению, что произойдет
В общем, это зависит от контейнера сервлета. Большинство из них, однако, многопоточны. Они будут вызывать doGet() 100 раз, в нескольких потоках, и поэтому несколько потоков могут одновременно использовать один и тот же объект сервлета. Таким образом, вы должны сделать свои сервлеты потокобезопасными, или ваш сервлет, похоже, будет работать при низкой нагрузке, но затем таинственно разваливается, когда вы начнете получать больше запросов.
Apache Lucene
библиотека для построения поисковых систем. Все, что она может, — только индексировать и искать. А API для ввода данных, для поисковых запросов, кластеризация и прочее — это все отдается на откуп «обертке».lasticsearch — это на самом деле не вполне самостоятельный поиск. Это, скорее, красивая обертка над библиотекой Apache Lucene
Что нам дает Elasticsearch?
Масштабируемость и отказоустойчивость. Elasticsearch легко масштабируется. К уже имеющейся системе можно на ходу добавлять новые серверы, и поисковый движок сможет сам распределить на них нагрузку. При этом данные будут распределены таким образом, что при отказе какой-то из нод они не будут утеряны и сама поисковая система продолжит работу без сбоев.
На самом деле оно даже работает. В хипстерском стиле «чувак, вот тебе три команды — пользуйся ими и, пожалуйста, не задумывайся, какой ад происходит внутри». И часто это прокатывает. Новые ноды подключаются буквально парой строчек в конфиге, почти как у Redis
Мультиарендность (англ. multitenancy) — возможность организовать несколько различных поисковых систем в рамках одного объекта Elasticsearch. ситуации, когда систем поиска должно быть больше одной. Это либо мультиязычные системы, либо системы, где есть определенное количество пользователей, которым нужно предоставлять возможность поиска по их персональным данным.
Elasticsearch позволяет загружать в него обычный JSON-объект, а далее он уже сам все проиндексирует, добавит в базу поиска. Позволяет не заморачиваться слишком сильно над структурой данных при быстром прототипировании.
CI Jenkins И GitLab
веб-сервисы для сборки и тестирования программного обеспечения
Redis
Redis это размещаемое в памяти хранилище ключ-значение, обычно используемое для кэшей и подобных механизмов ускорения сетевых приложений. Мы, тем не менее, храним все наши данные в Redis — в нашей главной базе данны
Вы вынуждены умещать все свои данные в памяти, и…
— Если сервер откажет между двумя синхронизациями с диском — вы потеряете всё что сидело в памяти.
Из-за этих двух проблем Redis обосновался в компактной нише в качестве временного кэша для данных которыми вы можете пожертвовать, но не главного хранилища данных. Предоставляя быстрый доступ к часто необходимым данным с возможностью перестроения при необходимости.
Docker
это такой новомодный способ изоляции ваших приложений друг от друга с помощью linux namespaces. Контейнер состоит из слоев, т.е. из слепков состояний файловой системы. Внутри контейнера этот процесс имеет pid=1.
Существуют публичные и приватные хранилки официальных и неофициальных образов. Они называются docker registry. Самый популярный из них — Docker hub. Когда вы докеризуете какой-либо сервис, сходите сначала на хаб и посмотрите, а не сделал ли это кто-то уже за вас?
Кроме публичных registry существуют еще и приватные — платные и бесплатные. Платные вам понадобятся, когда вы в замучавшись обуслуживанием воскликните «да пусть вот эти ребята следят за всей этой слоёной docker-вакханалией в этих ваших registry». И правда, когда вы активно пользуетесь при DevOps докером, когда люди или автоматика билдит сотни контейнеров, то рано или поздно у вас начнет подгорать от того как это чистить и обслуживать.
Не все конечно так плохо, естественно. Для десятка человек и пары билдов в день подойдет и свой registry. Для личного пользования тем более.
Зачем может пригодиться registry? это единое место хранения и обмена контейнерами между вами, другими людьми или автоматикой.
Докер образ (image) — это некоторый набор слоёв. Каждый слой — результат работы команды в Dockerfile. Грубо говоря образ — это шаблон на основе которого вы будете запускать контейнеры. Все что запускается на основе этого образа есть контейнер, или инстанс. т.е. с одного образа можно запустить несколько одинаковых копий этого образа — контейнеров.
Для создания своих контейнеров существует механизм сборки — docker build. Он использует набор инструкций в Dockerfile для сборки вашего собственного образа. При сборке контейнера внутри используется оболочка sh и ваши команды исполняются в ней.
хост
любое устройство, предоставляющее сервисы формата «клиент-сервер» в режиме сервера
Kubernetes
для управления кластером контейнеров Linux как единой системой. Kubernetes управляет и запускает контейнеры Docker на большом количестве хостов, а так же обеспечивает совместное размещение и репликацию большого количества контейнеров.
В каких условиях могут работать контейнеры Docker?
на всех основных дистрибутивах Linux, Microsoft Windows и на любой инфраструктуре, включая виртуальные машины, bare-metal и в облаке.
Где данные приложения находятся на Docker?
Данные приложения не хранятся в контейнере. Он живет в томе Docker, который разделяется между 1-N контейнерами, как определено архитектурой приложения. Sysadmins резервирует объем данных и забывает о контейнере.