Библиотека 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
Можно ли одновременно использовать в сервлете PrintWriter и ServletOutputStream?


Так сделать не получится, т.к. при попытке одновременного вызова getWriter() и getOutputStream() будет выброшено исключение java.lang.IllegalStateException с сообщением, что уже был вызван другой метод.
Поисковик новостей (RSS), написанный на Java + SQLite

Вы скорее всего подумаете: "Зачем десктопная программа, если можно, как минимум, загуглить?". А затем, что моя программа автоматически "гуглит" за тебя! Причём не только по одному ключевому слову, а по нескольким, которые вы, само собой, можете редактировать. А результат поиска будет направлен на указанную почту, исключая ранее направленные результаты.

https://habr.com/ru/post/595749/
Расскажите об интерфейсе SingleThreadModel.


Интерфейс SingleThreadModel является маркерным - в нем не объявлен ни один метод, однако, если сервлет реализует этот интерфейс, то метод service() этого сервлета гарантированно не будет одновременно выполняться в двух потоках. Контейнер сервлетов либо синхронизирует обращения к единственному экземпляру, либо обеспечивает поддержку пула экземпляров и перенаправление запроса свободному сервлету. Другими словами, контейнер гарантирует отсутствие конфликтов при одновременном обращении к переменным или методам экземпляра сервлета. Однако существуют также и другие разделяемые ресурсы, которые даже при использовании этого интерфейса, остаются всё так же доступны обработчикам запросов в других потоках. Т.о. пользы от использования этого интерфейса немного и в спецификации Servlet 2.4 он был объявлен deprecated.
Что означает URL encoding? Как это осуществить в Java?


URL Encoding — процесс преобразования данных в форму CGI (Common Gateway Interface), не содержащую пробелов и нестандартных символов, которые заменяются в процессе кодирования на специальные escape-символы. В Java для кодирования строки используется метод java.net.URLEncoder.encode(String str, String unicode). Обратная операция декодирования возможна через использование метода java.net.URLDecoder.decode(String str, String unicode).

Hello мир! преобразовывается в Hello%20%D0%BC%D0%B8%D1%80!.
Подборка каналов для программистов 🎯

Системное администрирование 📌
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов

Программирование, фронтенд, мобильная р-ка, книги 📌
https://t.me/game_devv GameDev: разработка игр
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/developer_mobila Мобильная разработка
https://t.me/BookPython Библиотека Python разработчика
https://t.me/programmist_of Книги по программированию
https://t.me/BookJava Библиотека Java разработчика
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов

Шутки программистов 📌
https://t.me/itumor ITumor | программисты шутят

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Учим английский 📌
https://t.me/UchuEnglish Английский с нуля

Книги по математике 📌
https://t.me/Pomatematike Канал по математике

Арбитраж трафика 📌
https://t.me/partnerochkin CPA и арбитраж трафика

Крипта 📌
https://t.me/bitkoinoff Новости криптовалют 📈

Вакансии для программистов 📌
https://t.me/progjob Вакансии для программистов
Какие различные методы управления сессией в сервлетах вы знаете?

При посещении клиентом Web-ресурса и выполнении вариантов запросов, контекстная информация о клиенте не хранится. В протоколе HTTP нет возможностей для сохранения и изменения информации о предыдущих посещениях клиента. Сеанс (сессия) – соединение между клиентом и сервером, устанавливаемое на определенное время, за которое клиент может отправить на сервер сколько угодно запросов. Сеанс устанавливается непосредственно между клиентом и Web-сервером. Каждый клиент устанавливает с сервером свой собственный сеанс. Сеансы используются для обеспечения хранения данных во время нескольких запросов Web-страницы или на обработку информации, введенной в пользовательскую форму в результате нескольких HTTP-соединений (например, клиент совершает несколько покупок в интернет-магазине; студент отвечает на несколько тестов в системе дистанционного обучения).

Существует несколько способов обеспечения уникального идентификатора сессии:

User Authentication – Предоставление учетных данных самим пользователем в момент аутентификации. Переданная таким образом информация в дальнейшем используется для поддержания сеанса. Это метод не будет работать, если пользователь вошёл в систему одновременно из нескольких мест.
HTML Hidden Field – Присвоение уникального значения скрытому полю HTML страницы, в момент когда пользователь начинает сеанс. Этот метод не может быть использован со ссылками, потому что нуждается в подтверждении формы со скрытым полем каждый раз во время формирования запроса. Кроме того, это не безопасно, т.к. существует возможность простой подмены такого идентификатора.
URL Rewriting – Добавление идентификатора сеанса как параметра URL. Достаточно утомительная операция, потому что требует постоянного отслеживания этого идентификатора при каждом запросе или ответе.
Cookies – Использование небольших фрагментов данных, отправленных web-сервером и хранимых на устройстве пользователя. Данный метод не будет работать, если клиент отключает использование cookies.
Session Management API – Использование специального API для отслеживания сеанса, построенный на основе и на методах, описанных выше и который решает частные проблемы перечисленных способов:
Чаще всего недостаточно просто отслеживать сессию, необходимо ещё и сохранять какие-либо дополнительные данные о ней, которые могут потребоваться при обработке последующих запросов. Осуществление такого поведения требует много дополнительных усилий.
Все вышеперечисленные методы не являются универсальными: для каждого из них можно подобрать конкретный сценарий, при котором они не будут работать.
Что такое cookies?


Сookies («куки») — небольшой фрагмент данных, отправленный web-сервером и хранимый на устройстве пользователя. Всякий раз при попытке открыть страницу сайта, web-клиент пересылает соответствующие этому сайту cookies web-серверу в составе HTTP-запроса. Применяется для сохранения данных на стороне пользователя и на практике обычно используется для:

аутентификации пользователя;
хранения персональных предпочтений и настроек пользователя;
отслеживания состояния сеанса доступа пользователя;
ведения разнообразной статистики.
Пишем простого slack-бота на Java

Привет! Я — Саша Казанцев, разработчик в hh. ru. В статье я расскажу, как сделать простого бота в Slack на java и немного о других вариантах использования slack api.

https://habr.com/ru/company/hh/blog/595837/
В Новый год — с новой профессией в IT!

Проверь свои знания на NIX Online Edu Testing

Купить подарки, поставить елку. Чего-то не хватает в праздничном списке… Точно! Подготовиться к карьере в IT!
Для этого приглашаем тебя поучаствовать в онлайн-тестировании по одной из 17-ти программ обучения. Выполни тест и узнай уровень своей подготовки.

Когда:
с 3 по 24 декабря
Где: онлайн с любого удобного тебе гаджета

Хочешь освоить самую актуальную профессию в IT? Эксперты NIX помогут тебе.

В Корпоративном центре обучения NIX есть 17 учебных программ. В зависимости от направления ты будешь учиться офлайн в Харькове или онлайн. Ты получишь базовые знания по фронтенд и бэкенд-разработке, по бизнес-анализу и в сфере облачных технологий. После обучения ты сможешь уверенно начать карьеру в IT и попробовать себя на позиции Junior-специалиста в команде NIX!

Отличный старт для нового года, правда? ;)

Теперь дело за малым — переходи по ссылке, выбирай понравившуюся программу обучения и проходи онлайн-тестирование.
Какие методы для работы с cookies предусмотрены в сервлетах?

Servlet API предоставляет поддержку cookies через класс javax.servlet.http.Cookie:

Для получения массива cookies из запроса необходимо воспользоваться методом HttpServletRequest.getCookies(). Методов для добавления cookies в HttpServletRequest не предусмотрено.
Для добавления cookie в ответ используется HttpServletResponse.addCookie(Cookie c). Метода получения cookies в HttpServletResponse отсутствует.
💥 Хотите попробовать себя в роли Java-разработчика и в будущем заниматься enterprise backend-задачами, используя современные подходы и паттерны? Тогда стажировка по Java в тренинг-центре EPAM Санкт-Петербург – то что нужно!

Интенсивное онлайн-обучение (от 30 часов в неделю) рассчитано на три–четыре месяца. Мы учим тех, с кем потом хотим работать в одной команде. Поэтому после успешного завершения стажировки вы получите предложение о работе в EPAM Санкт-Петербург.

👉🏻 Регистрируйтесь: https://epa.ms/internship-java-vk-33

📌 Как проходит стажировка
Вы участвуете в учебном проекте в роли разработчика под руководством наставника и параллельно изучаете материалы для самообучения. Цель учебного проекта — сократить время вашего входа на реальный рабочий проект. После завершения учебного проекта наставники примут решение, насколько вы готовы к работе на реальном проекте.

📌 Что мы предлагаем на стажировке
• Практический опыт на внутренних проектах;
• Помощь наставников с большим опытом в IT-сфере;
• 9000+ образовательных курсов по hard & soft skills;
• Бесплатные курсы английского языка;
• Нетворкинг и комьюнити единомышленников: митапы, вечера настольных игр и т. д.

📌 Мы ждём студентов четвертых – шестых курсов, выпускников и начинающих специалистов.
Необходимо иметь базовые зания Java Core, Java 8, Spring Core, писать SQL запросы и уверенно владеть английским языком (уровень B1 и выше).

👉🏻 Успейте подать заявку: https://epa.ms/internship-java-vk-33
👍1
Программирование на Java

Лекция 1. Введение
Лекция 2. Синтаксис
Лекция 3. Объекты
Лекция 4. Наследование. Перечисления. Строки.
Лекция 5. Исключения, try-catch, generics, varargs
Лекция 6. Коллекции.
Лекция 7. Элементы функционального программирования
Лекция 8. Stream API
Лекция 9. Коллекторы. Ввод-вывод
Лекция 10. Многопоточность
Лекция 11. Многопоточность. Продолжение
Лекция 12. Конкуррентные коллекции. Аннотации. Рефлекшн
Лекция 13. Что внутри?

Смотреть на youtube.
Что такое URL Rewriting?


URL Rewriting - специальная перезапись (перекодирование) оригинального URL. Данный механизм может использоваться для управления сессией в сервлетах, когда cookies отключены.
Зачем нужны и чем отличаются методы encodeURL() и encodeRedirectURL()?


HttpServletResponse.encodeURL() предоставляет способ преобразования URL в HTML гиперссылку с преобразованием спецсимволов и пробелов, а так же добавления session id к URL. Такое поведение аналогично java.net.URLEncoder.encode(), но с добавлением дополнительного параметра jsessionid в конец URL.

Метод HttpServletResponse.encodeRedirectURL() преобразует URL для последующего использования в методе sendRedirect().

Таким образом для HTML гиперссылок при URL rewriting необходимо использовать encodeURL(), а для URL при перенаправлении - encodeRedirectUrl().
Что такое «сессия»?


Сессия - это сеанс связи между клиентом и сервером, устанавливаемый на определенное время. Сеанс устанавливается непосредственно между клиентом и веб-сервером в момент получения первого запроса к веб-приложению. Каждый клиент устанавливает с сервером свой собственный сеанс, который сохраняется до окончания работы с приложением.
Как уведомить объект в сессии, что сессия недействительна или закончилась?

Чтобы быть уверенным в том, что объект будет оповещён о прекращении сессии, нужно реализовать интерфейс javax.servlet.http.HttpSessionBindingListener. Два метода этого интерфейса: valueBound() и valueUnbound() используются при добавлении объекта в качестве атрибута к сессии и при уничтожении сессии соответственно.
Подборка каналов для программистов 🎯

Системное администрирование 📌
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов

Программирование, фронтенд, мобильная р-ка, книги 📌
https://t.me/game_devv GameDev: разработка игр
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/developer_mobila Мобильная разработка
https://t.me/BookPython Библиотека Python разработчика
https://t.me/programmist_of Книги по программированию
https://t.me/BookJava Библиотека Java разработчика
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов

Шутки программистов 📌
https://t.me/itumor ITumor | программисты шутят

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Учим английский 📌
https://t.me/UchuEnglish Английский с нуля

Книги по математике 📌
https://t.me/Pomatematike Канал по математике

Арбитраж трафика 📌
https://t.me/partnerochkin CPA и арбитраж трафика

Крипта 📌
https://t.me/bitkoinoff Новости криптовалют 📈

Вакансии для программистов 📌
https://t.me/progjob Вакансии для программистов
Какой существует эффективный способ удостоверится, что все сервлеты доступны только для пользователя с верной сессией?

Сервлет фильтры используются для перехвата всех запросов между контейнером сервлетов и сервлетом. Поэтому логично использовать соответствующий фильтр для проверки необходимой информации (например валидности сессии) в запросе.
Как мы можем обеспечить transport layer security для нашего веб приложения?


Для обеспечения transport layer security необходимо настроить поддержку SSL сервлет контейнера. Как это сделать зависит от конкретной реализации сервлет-контейнера.
Как организовать подключение к базе данных, обеспечить журналирование в сервлете?

При работе с большим количеством подключений к базе данных рекомендуется инициализировать их в servlet context listener, а также установить в качестве атрибута контекста для возможности использования другими сервлетами.

Журналирование подключается к сервлету стандартным для логгера способом (например для log4j это может быть property-файл или XML-конфигурация) , а далее эта информация используется при настройке соответствующего context listener.