Какой результат выведет следующая программа?
Anonymous Quiz
7%
Hello
13%
Программа уйдет в бесконечный цикл
37%
Hello world
43%
Программа не скомпилируется
Что такое «контейнер сервлетов»?
Контейнер сервлетов — программа, представляющая собой сервер, который занимается системной поддержкой сервлетов и обеспечивает их жизненный цикл в соответствии с правилами, определёнными в спецификациях. Может работать как полноценный самостоятельный веб-сервер, быть поставщиком страниц для другого веб-сервера, или интегрироваться в Java EE сервер приложений.
Контейнер сервлетов обеспечивает обмен данными между сервлетом и клиентами, берёт на себя выполнение таких функций, как создание программной среды для функционирующего сервлета, идентификацию и авторизацию клиентов, организацию сессии для каждого из них.
Наиболее известные реализации контейнеров сервлетов:
• Apache Tomcat
• Jetty
• JBoss
• WildFly
• GlassFish
• IBM WebSphere
• Oracle Weblogic
@javatg
Контейнер сервлетов — программа, представляющая собой сервер, который занимается системной поддержкой сервлетов и обеспечивает их жизненный цикл в соответствии с правилами, определёнными в спецификациях. Может работать как полноценный самостоятельный веб-сервер, быть поставщиком страниц для другого веб-сервера, или интегрироваться в 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>
Как обработать в приложении исключения, выброшенные другим сервлетом?
Когда приложение выбрасывет исключение контейнер сервлетов обрабатывает его и создаёт ответ в формате
В дополнении к этому существует возможность написания собственных сервлетов для обработки исключений и ошибок с указанием их в дескрипторе развертывания:
@javatg
Когда приложение выбрасывет исключение контейнер сервлетов обрабатывает его и создаёт ответ в формате
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
Uptimer – приложение для проверки пинга серверов, приложений или сайтов, написанное на Kotlin
Оно может работать как в режиме простого API, так и в качестве уведомителя на почту или в Telegram канал
В приложении имеется возможность создать статусное сообщение и закрепить его в Telegram канале, в таком случае все статусы серверов будут отображаться в нем. Все сообщения настраиваются в конфиге, так что полная кастомизация под ваши нужды обеспечена
@javatg | #Kotlin #Server #Interesting
Оно может работать как в режиме простого API, так и в качестве уведомителя на почту или в Telegram канал
В приложении имеется возможность создать статусное сообщение и закрепить его в Telegram канале, в таком случае все статусы серверов будут отображаться в нем. Все сообщения настраиваются в конфиге, так что полная кастомизация под ваши нужды обеспечена
@javatg | #Kotlin #Server #Interesting
Forwarded from Android разработка
orhanobut/logger
Наглядный и удобный логгер для использования в Android-проектах. Фуннкции:
https://github.com/orhanobut/logger
@android_its
Наглядный и удобный логгер для использования в Android-проектах. Фуннкции:
Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");
https://github.com/orhanobut/logger
@android_its
Как ограничить upcasting типа-параметра?
Задача: запретить этому методу принимать параметры разных типов:
То есть, нужно разрешить вызывать
Upcasting – приведение к типу-родителю. String → Object, Integer → Number.
Дело в том, что у любых двух классов есть общий предок: как минимум Object. Если вызвать этот метод с параметрами
Использовать
Фокус в том, что на этапе компиляции это невозможно. Объект любого типа всегда является объектом типа-родителя (отношение is a). Это фундаментальное правило ООП, которое невозможно нарушить. К тому же, подобный метод нарушал бы принцип подстановки Лисков.
Единственная возможность добиться желаемого поведения – с помощью getClass() сравнивать классы объектов в рантайме.
#Дженерики
@javatg
Задача: запретить этому методу принимать параметры разных типов:
<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
Каким будет результат работы программы?
Anonymous Quiz
17%
777
35%
666
15%
777 666
29%
ошибка компиляция
4%
ошибка времени выполнения
Можно ли хранить данные в сервлете?
По спецификации наследник интерфейса
Чтобы обеспечить серверам приложений такую возможность, на сервлет накладывается ряд ограничений. Одно из них – сервлет не должен хранить пользовательское состояние в своих полях.
На практике, иногда бывает полезно хранить внутреннюю служебную информацию в сервлете. Тогда, кроме вероятности масштабирования, еще следует помнить о многопоточности сервлетов. Разные запросы обрабатываются в разных тредах, и доступ к полям должен быть синхронизирован.
Для хранения данных между запросами существует специальный объект – сессия (класс
#JavaEE
@javatg
По спецификации наследник интерфейса
Servlet
реализует распределяемое (distributable) web-приложение. Значит, при необходимости, очередь поступающих запросов может быть разделена между несколькими экземплярами сервлета, возможно даже размещенными на отдельных серверах внутри кластера.Чтобы обеспечить серверам приложений такую возможность, на сервлет накладывается ряд ограничений. Одно из них – сервлет не должен хранить пользовательское состояние в своих полях.
На практике, иногда бывает полезно хранить внутреннюю служебную информацию в сервлете. Тогда, кроме вероятности масштабирования, еще следует помнить о многопоточности сервлетов. Разные запросы обрабатываются в разных тредах, и доступ к полям должен быть синхронизирован.
Для хранения данных между запросами существует специальный объект – сессия (класс
HttpSession
). Если будет принято решение масштабировать сервер, произойдет репликация сессии. При репликации все актуальные данные сессии переносятся на другие сервера кластера в сериализованном виде. Отсюда другое требование – данные в сессии должны быть сериализуемыми. #JavaEE
@javatg
О сложности работы с датами и преимуществах Java API
Работа с датами или любыми операциями, которые имеют дело со временем как единицей измерения, всегда является большой проблемой. Эта статья даст вам лучшее представление о сложности работы с датами и о том, насколько полезен Java API для работы с ними.
Читать статью
Работа с датами или любыми операциями, которые имеют дело со временем как единицей измерения, всегда является большой проблемой. Эта статья даст вам лучшее представление о сложности работы с датами и о том, насколько полезен Java API для работы с ними.
Читать статью
DZone
Now It's Time to Uncomplicate With the Not-So-New API in Java
This article will give you a better understanding of the complexity of working with dates and how useful Java's date API is.
✅ Java Spring. 33 лучших вопроса на собеседовании
Что такое Spring Framework?
Spring Framework – это платформа приложений с открытым исходным кодом, написанная на Java. Он предназначен для упрощения проектирования приложений за счет автоматической обработки низкоуровневых функций. Это позволяет разработчикам сосредоточиться на бизнес-логике. Spring также очень легко адаптируется со многими модулями, которые расширяют возможности фреймворка.
Хотя Spring не навязывает конкретную модель программирования, она приобрела широкую популярность в сообществе Java в качестве дополнения к корпоративной модели JavaBeans (EJB). Отчасти это связано с уникальным набором функций Spring, таких как инверсия управления и аспектно-ориентированное программирование (AOП), которые отлично подходят для работы с компонентами.
Читать дальше
@javatg
Что такое 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
JDBC или Java Database Connectivity — это Java API для подключения и выполнения запросов к базе данных. JDBC вместе с драйвером базы данных может обращаться к базам данных и электронным таблицам. Доступ к данным, хранящимся в реляционной базе данных, можно получить с помощью API-интерфейсов JDBC.
Java-приложение, которое должно взаимодействовать с базой данных, должно быть запрограммировано с использованием JDBC API. Драйвер JDBC, поддерживающий источники данных, такие как Oracle и SQL сервер, должен быть добавлен в java-приложение для поддержки JDBC. На картинке приведен простой пример подключения к базе данных с JDBC.
Подробнее
@javatg