🔆 Успейте воспользоваться скидкой до 70% на Okmeter 🔆
@okmeter — это умный SaaS-мониторинг с готовыми дашбордами, графиками и алертами, который:
- сам находит процессы и сервисы, которые нужно замониторить: PostgreSQL, MySQL, MongoDB, RabbitMQ, Docker, NGINX и другие;
- собирает тысячи метрик с каждого хоста;
- имеет преднастроенные и продуманные алерты и дашборды для всех сервисов;
- доставляет алерты по email, SMS, в Slack, Telegram, Opsgenie, Alertmanager.
С Okmeter вообще не нужно тратить время и силы на настройку мониторинга. Просто поставьте агента Okmeter на сервер, и он все сделает за вас. Сосредоточьтесь на разработке, а мониторингом пусть занимается Okmeter.
🔥 Первые две недели бесплатно, а на дальнейшее использование сейчас действуют крутые скидки по случаю «Черной пятницы»! Подробности: https://okmeter.io/
@okmeter — это умный SaaS-мониторинг с готовыми дашбордами, графиками и алертами, который:
- сам находит процессы и сервисы, которые нужно замониторить: PostgreSQL, MySQL, MongoDB, RabbitMQ, Docker, NGINX и другие;
- собирает тысячи метрик с каждого хоста;
- имеет преднастроенные и продуманные алерты и дашборды для всех сервисов;
- доставляет алерты по email, SMS, в Slack, Telegram, Opsgenie, Alertmanager.
С Okmeter вообще не нужно тратить время и силы на настройку мониторинга. Просто поставьте агента Okmeter на сервер, и он все сделает за вас. Сосредоточьтесь на разработке, а мониторингом пусть занимается Okmeter.
🔥 Первые две недели бесплатно, а на дальнейшее использование сейчас действуют крутые скидки по случаю «Черной пятницы»! Подробности: https://okmeter.io/
Что такое Request Dispatcher?
Интерфейс RequestDispatcher используется для передачи запроса другому ресурсу, при этом существует возможность добавления данных, полученных из этого ресурса к собственному ответу сервлета. Так же этот интерфейс используется для внутренней коммуникации между сервлетами в одном контексте.
В интерфейсе объявлено два метода:
void forward(ServletRequest var1, ServletResponse var2) — передает запрос из сервлета к другому ресурсу (сервлету, JSP или HTML файлу) на сервере.
void include(ServletRequest var1, ServletResponse var2) — включает контент ресурса (сервлет, JSP или HTML страница) в ответ.
Доступ к интерфейсу можно получить с помощью метода интерфейса ServletContext - RequestDispatcher getRequestDispatcher(String path), где путь начинающийся с /, интерпретируется относительно текущего корневого пути контекста.
Интерфейс RequestDispatcher используется для передачи запроса другому ресурсу, при этом существует возможность добавления данных, полученных из этого ресурса к собственному ответу сервлета. Так же этот интерфейс используется для внутренней коммуникации между сервлетами в одном контексте.
В интерфейсе объявлено два метода:
void forward(ServletRequest var1, ServletResponse var2) — передает запрос из сервлета к другому ресурсу (сервлету, JSP или HTML файлу) на сервере.
void include(ServletRequest var1, ServletResponse var2) — включает контент ресурса (сервлет, JSP или HTML страница) в ответ.
Доступ к интерфейсу можно получить с помощью метода интерфейса ServletContext - RequestDispatcher getRequestDispatcher(String path), где путь начинающийся с /, интерпретируется относительно текущего корневого пути контекста.
Spring. Все паттерны проектирования
Раджпут Динеш (2019)
В этой книге дается обзор фреймворка Spring 5 и паттернов проектирования для него. Объясняется принцип внедрения зависимостей (dependency injection), играющий ключевую роль при создании слабосвязанного кода во фреймворке Spring. Затем рассматриваются классические паттерны «Банды четырех» при проектировании приложений на Spring. В следующих частях книги автор рассматривает паттерны аспектно-ориентированного программирования (AOP), шаблоны JDBC, позволяющие абстрагировать доступ к базе данных. В заключительных главах книги автор исследует работу с MVC, реактивные шаблоны проектирования и паттерны проектирования, применяемые при конкурентном и параллельном программировании в Spring
Скачать книгу
Раджпут Динеш (2019)
В этой книге дается обзор фреймворка Spring 5 и паттернов проектирования для него. Объясняется принцип внедрения зависимостей (dependency injection), играющий ключевую роль при создании слабосвязанного кода во фреймворке Spring. Затем рассматриваются классические паттерны «Банды четырех» при проектировании приложений на Spring. В следующих частях книги автор рассматривает паттерны аспектно-ориентированного программирования (AOP), шаблоны JDBC, позволяющие абстрагировать доступ к базе данных. В заключительных главах книги автор исследует работу с MVC, реактивные шаблоны проектирования и паттерны проектирования, применяемые при конкурентном и параллельном программировании в Spring
Скачать книгу
Как из одного сервлета вызвать другой сервлет?
Для вызова сервлета из того же приложения необходимо использовать механизм внутренней коммуникации сервлетов (inter-servlet communication mechanisms) через вызовы методов RequestDispatcher:
forward() - передаёт выполнение запроса в другой сервлет;
include() - предоставляет возможность включить результат работы другого сервлета в возвращаемый ответ.
Если необходимо вызывать сервлет принадлежащий другому приложению, то использовать RequestDispatcher уже не получится, т.к. он определен только для текущего приложения. Для подобных целей необходимо использовать метод ServletResponse - sendRedirect() которому предоставляется полный URL другого сервлета. Для передачи данных между сервлетами можно использовать cookies.
Для вызова сервлета из того же приложения необходимо использовать механизм внутренней коммуникации сервлетов (inter-servlet communication mechanisms) через вызовы методов RequestDispatcher:
forward() - передаёт выполнение запроса в другой сервлет;
include() - предоставляет возможность включить результат работы другого сервлета в возвращаемый ответ.
Если необходимо вызывать сервлет принадлежащий другому приложению, то использовать RequestDispatcher уже не получится, т.к. он определен только для текущего приложения. Для подобных целей необходимо использовать метод ServletResponse - sendRedirect() которому предоставляется полный URL другого сервлета. Для передачи данных между сервлетами можно использовать cookies.
👍1
Чем отличается sendRedirect() от forward()?
forward():
Выполняется на стороне сервера;
Запрос перенаправляется на другой ресурс в пределах того же сервера;
Не зависит от протокола клиентского запроса, так как обеспечивается контейнером сервлетов;
Нельзя применять для внедрения сервлета в другой контекст;
Клиент не знает о фактически обрабатываемом ресурсе и URL в строке остается прежним;
Выполняется быстрее метода sendRedirect();
Определён в интерфейсе RequestDispatcher.
sendRedirect():
Выполняется на стороне клиента;
Клиенту возвращается ответ 302 (redirect) и запрос перенаправляется на другой сервер;
Может использоваться только с клиентами HTTP;
Разрешается применять для внедрения сервлета в другой контекст;
URL адрес изменяется на адрес нового ресурса;
Медленнее forward() т.к. требует создания нового запроса;
Определён в интерфейсе HttpServletResponse.
forward():
Выполняется на стороне сервера;
Запрос перенаправляется на другой ресурс в пределах того же сервера;
Не зависит от протокола клиентского запроса, так как обеспечивается контейнером сервлетов;
Нельзя применять для внедрения сервлета в другой контекст;
Клиент не знает о фактически обрабатываемом ресурсе и URL в строке остается прежним;
Выполняется быстрее метода sendRedirect();
Определён в интерфейсе RequestDispatcher.
sendRedirect():
Выполняется на стороне клиента;
Клиенту возвращается ответ 302 (redirect) и запрос перенаправляется на другой сервер;
Может использоваться только с клиентами HTTP;
Разрешается применять для внедрения сервлета в другой контекст;
URL адрес изменяется на адрес нового ресурса;
Медленнее forward() т.к. требует создания нового запроса;
Определён в интерфейсе HttpServletResponse.
👍1
Пример бессерверного приложения, написанного на Java, скомпилированного с помощью собственного образа GraalVM
https://github.com/aws-samples/serverless-graalvm-demo
https://github.com/aws-samples/serverless-graalvm-demo
Чашечка Java — канал c материалами по Java со всего интернета. А значит и на русском языке, и на английском.
Обновления в версиях языка, инструменты, структуры данных, сложные конструкции языка, связанные с Java технологии и фреймворки – обо всём этом читайте в канале: @a_cup_of_java
Обновления в версиях языка, инструменты, структуры данных, сложные конструкции языка, связанные с Java технологии и фреймворки – обо всём этом читайте в канале: @a_cup_of_java
Для чего используются атрибуты сервлетов и как происходит работа с ними?
Атрибуты сервлетов используются для внутренней коммуникации сервлетов.
В веб-приложении существует возможность работы с атрибутами используя методы setAttribute(), getAttribute(), removeAttribute(), getAttributeNames(), которые предоставлены интерфейсами ServletRequest, HttpSession и ServletContext (для областей видимости request, session, context соответственно).
Атрибуты сервлетов используются для внутренней коммуникации сервлетов.
В веб-приложении существует возможность работы с атрибутами используя методы setAttribute(), getAttribute(), removeAttribute(), getAttributeNames(), которые предоставлены интерфейсами ServletRequest, HttpSession и ServletContext (для областей видимости request, session, context соответственно).
Каким образом можно допустить в сервлете deadlock?
Можно получить блокировку, например, допустив циклические вызовы метода doPost() в методе doGet() и метода doGet() в методе doPost().
Можно получить блокировку, например, допустив циклические вызовы метода doPost() в методе doGet() и метода doGet() в методе doPost().
Как получить реальное расположение сервлета на сервере?
Реальный путь к расположению сервлета на сервере можно получить из объекта ServletContext:
getServletContext().getRealPath(request.getServletPath()).
Реальный путь к расположению сервлета на сервере можно получить из объекта ServletContext:
getServletContext().getRealPath(request.getServletPath()).
Как получить информацию о сервере из сервлета?
Информацию о сервере можно получить из объекта ServletContext:
getServletContext().getServerInfo().
Информацию о сервере можно получить из объекта ServletContext:
getServletContext().getServerInfo().
Как получить IP адрес клиента на сервере?
IP адрес клиента можно получить вызвав request.getRemoteAddr().
IP адрес клиента можно получить вызвав request.getRemoteAddr().
Какие классы-обертки для сервлетов вы знаете?
Собственные обработчики ServletRequest и ServletResponse можно реализовать, добавив новые или переопределив существующие методы у классов-обёрток ServletRequestWrapper (HttpServletRequestWrapper) и ServletResponseWrapper (HttpServletRequestWrapper).
Собственные обработчики ServletRequest и ServletResponse можно реализовать, добавив новые или переопределив существующие методы у классов-обёрток ServletRequestWrapper (HttpServletRequestWrapper) и ServletResponseWrapper (HttpServletRequestWrapper).
В чем отличия GenericServlet и HttpServlet?
Абстрактный класс GenericServlet — независимая от используемого протокола реализация интерфейса Servlet, а абстрактный класс HttpServlet в свою очередь расширяет GenericServlet для протокола HTTP..
Абстрактный класс GenericServlet — независимая от используемого протокола реализация интерфейса Servlet, а абстрактный класс HttpServlet в свою очередь расширяет GenericServlet для протокола HTTP..