Telegram Web Link
Что такое «контейнер сервлетов»?

Контейнер сервлетов — программа, представляющая собой сервер, который занимается системной поддержкой сервлетов и обеспечивает их жизненный цикл в соответствии с правилами, определёнными в спецификациях. Может работать как полноценный самостоятельный веб-сервер, быть поставщиком страниц для другого веб-сервера, или интегрироваться в Java EE сервер приложений.

Контейнер сервлетов обеспечивает обмен данными между сервлетом и клиентами, берёт на себя выполнение таких функций, как создание программной среды для функционирующего сервлета, идентификацию и авторизацию клиентов, организацию сессии для каждого из них.

Наиболее известные реализации контейнеров сервлетов:
• Apache Tomcat
• Jetty
• JBoss
• WildFly
• GlassFish
• IBM WebSphere
• Oracle Weblogic

@javatg
Как реализовать запуск сервлета одновременно с запуском приложения?

Контейнер сервлетов обычно загружает сервлет по первому запросу клиента.

Если необходимо загрузить сервлет прямо на старте приложения (например если загрузка сервлета происходит длительное время) следует использовать элемент <load-on-startup> в дескрипторе или аннотацию @loadOnStartup в коде сервлета, что будет указывать на необходимость загрузки сервлета при запуске.

Если целочисленное значение этого параметра отрицательно, то сервлет будет загружен при запросе клиента. В противном случае - загрузится на старте приложения, при этом, чем число меньше, тем раньше в очереди на загрузку он окажется.

<servlet>
<servlet-name>ExampleServlet</servlet-name>
<servlet-class>xyz.company.ExampleServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Как обработать в приложении исключения, выброшенные другим сервлетом?

Когда приложение выбрасывет исключение контейнер сервлетов обрабатывает его и создаёт ответ в формате HTML. Это аналогично тому, что происходит при кодах ошибок вроде 404, 403 и т.д.

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

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

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

@javatg
Эффективный трюк, чтобы узнать, является ли число степенью двойки

Обычный метод деления имеет сложность O(logN), но эту задачу можно решить со сложностью O(v), где v — количество цифр числа в двоичной форме.

@javatg
Uptimerприложение для проверки пинга серверов, приложений или сайтов, написанное на Kotlin

Оно может работать как в режиме простого API, так и в качестве уведомителя на почту или в Telegram канал

В приложении имеется возможность создать статусное сообщение и закрепить его в Telegram канале, в таком случае все статусы серверов будут отображаться в нем. Все сообщения настраиваются в конфиге, так что полная кастомизация под ваши нужды обеспечена

@javatg | #Kotlin #Server #Interesting
orhanobut/logger

Наглядный и удобный логгер для использования в Android-проектах. Фуннкции:

Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");


https://github.com/orhanobut/logger

@android_its
Как ограничить upcasting типа-параметра?

Задача: запретить этому методу принимать параметры разных типов:
<T> void pair(T a, T b) {}

То есть, нужно разрешить вызывать pair(Foo, Foo), но запретить pair(Foo, Bar).

Upcasting – приведение к типу-родителю. String → Object, Integer → Number.

Дело в том, что у любых двух классов есть общий предок: как минимум Object. Если вызвать этот метод с параметрами String и Boolean – согласно правилам вычисления типа-границы, параметр T будет стерт в Object.

Использовать super тоже не поможет: для этого нужно знать заранее, какой именно тип будет передаваться.

Фокус в том, что на этапе компиляции это невозможно. Объект любого типа всегда является объектом типа-родителя (отношение is a). Это фундаментальное правило ООП, которое невозможно нарушить. К тому же, подобный метод нарушал бы принцип подстановки Лисков.

Единственная возможность добиться желаемого поведения – с помощью getClass() сравнивать классы объектов в рантайме.

#Дженерики

@javatg
Forwarded from Java tests
Forwarded from Java tests
Каким будет результат работы программы?
Anonymous Quiz
17%
777
35%
666
15%
777 666
29%
ошибка компиляция
4%
ошибка времени выполнения
Захват координат курсора

Чтобы захватить события мыши, необходимо реализовать интерфейс MouseMotionListener. Когда курсор попадает в определенную область, срабатывает обработчик события mouseMoved, из которого можно получить точные координаты.

@javatg
Можно ли хранить данные в сервлете?

По спецификации наследник интерфейса Servlet реализует распределяемое (distributable) web-приложение. Значит, при необходимости, очередь поступающих запросов может быть разделена между несколькими экземплярами сервлета, возможно даже размещенными на отдельных серверах внутри кластера.

Чтобы обеспечить серверам приложений такую возможность, на сервлет накладывается ряд ограничений. Одно из них – сервлет не должен хранить пользовательское состояние в своих полях.

На практике, иногда бывает полезно хранить внутреннюю служебную информацию в сервлете. Тогда, кроме вероятности масштабирования, еще следует помнить о многопоточности сервлетов. Разные запросы обрабатываются в разных тредах, и доступ к полям должен быть синхронизирован.

Для хранения данных между запросами существует специальный объект – сессия (класс HttpSession). Если будет принято решение масштабировать сервер, произойдет репликация сессии. При репликации все актуальные данные сессии переносятся на другие сервера кластера в сериализованном виде. Отсюда другое требование – данные в сессии должны быть сериализуемыми.

#JavaEE

@javatg
О сложности работы с датами и преимуществах Java API

Работа с датами или любыми операциями, которые имеют дело со временем как единицей измерения, всегда является большой проблемой. Эта статья даст вам лучшее представление о сложности работы с датами и о том, насколько полезен Java API для работы с ними.

Читать статью
Java Spring. 33 лучших вопроса на собеседовании

Что такое Spring Framework?

Spring Framework это платформа приложений с открытым исходным кодом, написанная на Java. Он предназначен для упрощения проектирования приложений за счет автоматической обработки низкоуровневых функций. Это позволяет разработчикам сосредоточиться на бизнес-логике. Spring также очень легко адаптируется со многими модулями, которые расширяют возможности фреймворка.


Хотя Spring не навязывает конкретную модель программирования, она приобрела широкую популярность в сообществе Java в качестве дополнения к корпоративной модели JavaBeans (EJB). Отчасти это связано с уникальным набором функций Spring, таких как инверсия управления и аспектно-ориентированное программирование (AOП), которые отлично подходят для работы с компонентами.

Читать дальше

@javatg
Какой результат выведет следующая программа?
Anonymous Quiz
38%
A is equal to Infinity
22%
Ошибку при выполнении
18%
Ошибку компиляции
21%
A is equal to NaN
Введение в JDBC

JDBC или Java Database Connectivity — это Java API для подключения и выполнения запросов к базе данных. JDBC вместе с драйвером базы данных может обращаться к базам данных и электронным таблицам. Доступ к данным, хранящимся в реляционной базе данных, можно получить с помощью API-интерфейсов JDBC.

Java-приложение, которое должно взаимодействовать с базой данных, должно быть запрограммировано с использованием JDBC API. Драйвер JDBC, поддерживающий источники данных, такие как Oracle и SQL сервер, должен быть добавлен в java-приложение для поддержки JDBC. На картинке приведен простой пример подключения к базе данных с JDBC.

Подробнее

@javatg
2024/10/04 11:22:21
Back to Top
HTML Embed Code: