Библиотека Java разработчика
10.8K subscribers
1.14K photos
564 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
Как обработать в приложении исключения, выброшенные другим сервлетом?
Когда приложение выбрасывет исключение контейнер сервлетов обрабатывает его и создаёт ответ в формате HTML. Это аналогично тому, что происходит при кодах ошибок вроде 404, 403 и т.д.

В дополнении к этому существует возможность написания собственных сервлетов для обработки исключений и ошибок с указанием их в дескрипторе развертывания:

<error-page>
<error-code>404</error-code>
<location>/AppExceptionHandler</location>
</error-page>

<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/AppExceptionHandler</location>
</error-page>
Основная задача таких сервлетов - обработать ошибку/исключение и сформировать понятный ответ пользователю. Например, предоставить ссылку на главную страницу или же описание ошибки.
EPAM JavaOps Meetup — 29 ноября, 11:00, онлайн

Меньше, чем через неделю команда EPAM при поддержке JUG Ru Group проведет новый бесплатный онлайн-митап — на этот раз по DevOps и Java.
Само собой, где Java и EPAM — там Борисов ;)

В программе:
Евгений Борисов и Александр Бармин, «Spring Сloud goes cloud».
Иногда на проектах все еще выбирают синхронное взаимодействие микросервисов. Этот доклад — о том, как сделать масштабируемую динамическую синхронную архитектуру с помощью Spring Cloud, запустить это дело в облаке и прикрутить к нему Kubernetes.
Илья Феоктистов, «Pulumi: программируем инфраструктуру на языках высокого уровня».
При работе с Terraform у многих возникают сложности с его внутренним языком конфигурации HCL. Илья на примере Pulumi покажет более понятный подход с использованием языка Go.

А еще в ходе митапа можно будет выиграть толстовки и кружки-коферы. Подробности — в эфире 🎁

Участие бесплатное, нужно только зарегистрироваться.
Что представляет собой ServletConfig?
Интерфейс javax.servlet.ServletConfig используется для передачи сервлету конфигурационной информации. Каждый сервлет имеет свой собственный экземпляр объекта ServletConfig, создаваемый контейнером сервлетов.

Для установки параметров конфигурации используются параметры init-param в web.xml:

<servlet>
<servlet-name>ExampleServlet</servlet-name>
<servlet-class>xyz.company.ExampleServlet</servlet-class>
<init-param>
<param-name>exampleParameter</param-name>
<param-value>parameterValue</param-value>
</init-param>
</servlet>
или аннотации @WebInitParam:

@WebServlet(
urlPatterns = "/example",
initParams = {
@WebInitParam(name = "exampleParameter", value = "parameterValue")
}
)
public class ExampleServlet extends HttpServlet {
//...
}
Для получения ServletConfig сервлета используется метод getServletConfig().
Что представляет собой ServletContext?
Уникальный (в рамках веб-приложения) объект ServletContext реализует интерфейс javax.servlet.ServletContext и предоставляет сервлетам доступ к параметрам этого веб-приложения. Для предоставления доступа используется элемент <context-param> в web.xml:

<web-app>
...
<context-param>
<param-name>exampleParameter</param-name>
<param-value>parameterValue</param-value>
</context-param>
...
</web-app>
Объект ServletContext можно получить с помощью метода getServletContext() у интерфейса ServletConfig. Контейнеры сервлетов так же могут предоставлять контекстные объекты, уникальные для группы сервлетов. Каждая из групп будет связана со своим набором URL-путей хоста. В спецификации Servlet 3 ServletContext был расширен и теперь предоставляет возможности программного добавления слушателей и фильтров в приложение. Так же у этого интерфейса имеется множество полезных методов таких как getServerInfo(), getMimeType(), getResourceAsStream() и т.д.
В чем отличия ServletContext и ServletConfig?
ServletConfig уникален для сервлета, а ServletContext - для приложения;
ServletConfig используется для предоставления параметров инициализации конкретному сервлету, а ServletContext для предоставления параметров инициализации для всех сервлетов приложения;
для ServletConfig возможности модифицировать атрибуты отсутствуют, атрибуты в объекте ServletContext можно изменять.
Для чего нужен интерфейс ServletResponse?
Интерфейс ServletResponse используется для отправки данных клиенту. Все методы данного инструмента служат именно этой цели:

String getCharacterEncoding() - возвращает MIME тип кодировки (к примеру - UTF8), в которой будет выдаваться информация;
void setLocale(Locale locale)/Locale getLocale() - указывают на язык используемый в документе;
ServletOutputStream getOutputStream()/PrintWriter getWriter() - возвращают потоки вывода данных;
void setContentLength(int len) - устанавливает значение поля HTTP заголовка Content-Length;
void setContentType(String type) - устанавливает значение поля HTTP заголовка Content-Type.
void reset() - позволяет сбросить HTTP заголовок к значениям по-умолчанию, если он ещё не был отправлен
и др.
​​Бесплатный курс от «билайн» с возможностью попасть на работу в компанию.

Хотите начать карьеру в «билайн»? Тогда регистрируйтесь на бесплатную образовательную программу от экспертов компании в онлайн-формате. Здесь вы погрузитесь в разработку web-интерфейсов, пройдете курс из трех блоков и получите шанс попасть на работу в компанию. Приглашаются студенты последних курсов бакалавриата, магистранты, а также выпускники 2018-2021 годов со всей России.

На программе вас ждут:
— Карьерные бонусы и предложение о работе. Вы сможете добавить в резюме диплом о прохождении курса и рекомендательное письмо, а лучшие интерны получат шанс попасть в команду «билайн».
— Возможность бесплатно выучить HTML/CSS, JAVASCRIPT и REACT. Вас ждет курс лекций от IT-специалистов — лучших разработчиков «билайн» и приглашенных экспертов — похожие программы стоят сотни тысяч.
— Реальные проекты компании. Вы узнаете, как работают разные отделы, погрузитесь в запуск продукта и поучаствуете в планировании спринтов.
— Персональный ментор, который будет вас сопровождать на протяжении всего курса.

Регистрируйтесь до 15 декабря включительно: https://clck.ru/Z4B6g
Для чего нужен интерфейс
ServletRequest?
Интерфейс ServletRequest используется для получения параметров соединения, запроса, а также заголовков, входящего потока данных и т.д.
Что выведет программа? 👆
Anonymous Poll
55%
12
29%
11
14%
01
2%
10
🔆 Успейте воспользоваться скидкой до 70% на Okmeter 🔆

@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), где путь начинающийся с /, интерпретируется относительно текущего корневого пути контекста.
Spring. Все паттерны проектирования
Раджпут Динеш (2019)

В этой книге дается обзор фреймворка Spring 5 и паттернов проектирования для него. Объясняется принцип внедрения зависимостей (dependency injection), играющий ключевую роль при создании слабосвязанного кода во фреймворке Spring. Затем рассматриваются классические паттерны «Банды четырех» при проектировании приложений на Spring. В следующих частях книги автор рассматривает паттерны аспектно-ориентированного программирования (AOP), шаблоны JDBC, позволяющие абстрагировать доступ к базе данных. В заключительных главах книги автор исследует работу с MVC, реактивные шаблоны проектирования и паттерны проектирования, применяемые при конкурентном и параллельном программировании в Spring

Скачать книгу
Как из одного сервлета вызвать другой сервлет?

Для вызова сервлета из того же приложения необходимо использовать механизм внутренней коммуникации сервлетов (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.
👍1
Собеседование Backend-Java-разработчика: вопросы и где искать ответы.

Часть 1
Часть 2
👍1
Пример бессерверного приложения, написанного на Java, скомпилированного с помощью собственного образа GraalVM

https://github.com/aws-samples/serverless-graalvm-demo