Ищем: Java Developer Trainee (стажировка)
Локация (Офис): Ростов-на-Дону, Казань, Санкт-Петербург, Киев, Харьков, Одесса, Днепр, Чернигов, Черкассы, Минск, Гомель, Полоцк, Витебск.
Удаленно: Города РФ (не более UTC+5). Москва - набор закрыт.
Опыт работы: без опыта
Международная компания Andersen, проводит набор на оплачиваемую стажировку с последующим трудоустройством по направлению Java Developer Trainee
Требования:
📌уровень знания английского языка Intermediate и выше ( в РФ уровень может быть ниже);
📌понимание принципов ООП, понимание алгоритмов и структур данных знание, Java Core;
📌обязательное знание основ Java EE (Servlets, jsp);
📌представление о реляционных базах данных (Oracle, MySQL, PostgreSQL и др.);
📌опыт написания unit-тестов, знания систем контроля версий (git или svn), Spring Framework, а также ORM (Hibernate Framework)
Направляйте заявку на trainee@andersenlab.com
Тема письма «Имя, Фамилия, город, Java Trainee»
Локация (Офис): Ростов-на-Дону, Казань, Санкт-Петербург, Киев, Харьков, Одесса, Днепр, Чернигов, Черкассы, Минск, Гомель, Полоцк, Витебск.
Удаленно: Города РФ (не более UTC+5). Москва - набор закрыт.
Опыт работы: без опыта
Международная компания Andersen, проводит набор на оплачиваемую стажировку с последующим трудоустройством по направлению Java Developer Trainee
Требования:
📌уровень знания английского языка Intermediate и выше ( в РФ уровень может быть ниже);
📌понимание принципов ООП, понимание алгоритмов и структур данных знание, Java Core;
📌обязательное знание основ Java EE (Servlets, jsp);
📌представление о реляционных базах данных (Oracle, MySQL, PostgreSQL и др.);
📌опыт написания unit-тестов, знания систем контроля версий (git или svn), Spring Framework, а также ORM (Hibernate Framework)
Направляйте заявку на trainee@andersenlab.com
Тема письма «Имя, Фамилия, город, Java Trainee»
Зачем в сервлетах используются различные listener?
Listener (слушатель) работает как триггер, выполняя определённые действия при наступлении какого-либо события в жизненном цикле сервлета.
Слушатели, разделённые по области видимости (scope):
Request:
ServletRequestListener используется для того, чтобы поймать момент создания и уничтожения запроса;
ServletRequestAttributeListener используется для прослушивания событий, происходящих с атрибутами запроса.
Context:
ServletContextListener позволяет поймать момент, когда контекст инициализируется либо уничтожается;
ServletContextAttributeListener используется для прослушивании событий, происходящих с атрибутами в контексте.
Session:
HttpSessionListener позволяет поймать момент создания и уничтожения сессии;
HttpSessionAttributeListener используется при прослушивании событий происходящих с атрибутами в сессии;
HttpSessionActivationListener используется в случае, если происходит миграция сессии между различными JVM в распределённых приложениях;
HttpSessionBindingListener так же используется для прослушивания событий, происходящих с атрибутами в сессии. Разница между HttpSessionAttributeListener и HttpSessionBindingListener слушателями: первый декларируется в web.xml; экземпляр класса создается контейнером автоматически в единственном числе и применяется ко всем сессиям; второй: экземпляр класса должен быть создан и закреплён за определённой сессией «вручную», количество экземпляров также регулируется самостоятельно.
Подключение слушателей:
<web-app>
...
<listener>
<listener-class>xyz.company.ExampleListener</listener-class>
</listener>
...
</web-app>
HttpSessionBindingListener подключается в качестве атрибута непосредственно в сессию, т.е., чтобы его подключить необходимо:
создать экземпляр класса, реализующего этот интерфейс;
положить созданный экземпляр в сессию при помощи setAttribute(String, Object).
Listener (слушатель) работает как триггер, выполняя определённые действия при наступлении какого-либо события в жизненном цикле сервлета.
Слушатели, разделённые по области видимости (scope):
Request:
ServletRequestListener используется для того, чтобы поймать момент создания и уничтожения запроса;
ServletRequestAttributeListener используется для прослушивания событий, происходящих с атрибутами запроса.
Context:
ServletContextListener позволяет поймать момент, когда контекст инициализируется либо уничтожается;
ServletContextAttributeListener используется для прослушивании событий, происходящих с атрибутами в контексте.
Session:
HttpSessionListener позволяет поймать момент создания и уничтожения сессии;
HttpSessionAttributeListener используется при прослушивании событий происходящих с атрибутами в сессии;
HttpSessionActivationListener используется в случае, если происходит миграция сессии между различными JVM в распределённых приложениях;
HttpSessionBindingListener так же используется для прослушивания событий, происходящих с атрибутами в сессии. Разница между HttpSessionAttributeListener и HttpSessionBindingListener слушателями: первый декларируется в web.xml; экземпляр класса создается контейнером автоматически в единственном числе и применяется ко всем сессиям; второй: экземпляр класса должен быть создан и закреплён за определённой сессией «вручную», количество экземпляров также регулируется самостоятельно.
Подключение слушателей:
<web-app>
...
<listener>
<listener-class>xyz.company.ExampleListener</listener-class>
</listener>
...
</web-app>
HttpSessionBindingListener подключается в качестве атрибута непосредственно в сессию, т.е., чтобы его подключить необходимо:
создать экземпляр класса, реализующего этот интерфейс;
положить созданный экземпляр в сессию при помощи setAttribute(String, Object).
👍1
Создание игры на Java без сторонних библиотек
https://te.legra.ph/Sozdanie-igry-na-Java-bez-storonnih-bibliotek-11-18
https://te.legra.ph/Sozdanie-igry-na-Java-bez-storonnih-bibliotek-11-18
Telegraph
Создание игры на Java без сторонних библиотек
Почему Java? Ничего объективного я тут не скажу, а скажу лишь то, что я люблю этот язык, и мне нравится писать на нем. Да, на Java нет игр AAA-класса, но Java предоставляет огромные возможности, большое количество встроенных средств и быстроту написания кода.…
Знаешь, как оптимизировать транспортные потоки Москвы и обеспечить кибербезопасность транспортных систем? Подавай заявку на участие в хакатоне Moscow Secure Traffic от Транспортных инноваций Москвы и Центра организации дорожного движения!
Будет много активностей и приятных бонусов:
• 2 кейса по разработке чат-бота и информационного портала;
• Идеатон с призовым фондом в 100 000 рублей;
• Комнаты Диснея, где эксперты помогут тебе пройти 3 этапа генерации идеи;
• Мастер-классы;
• Wild-card в студенческий трек акселератора ТИМ;
• Много подарков и призов от партнеров;
• Мерч и сертификаты;
• Общий призовой фонд в 500 000 рублей.
Членами жюри и экспертами хакатона выступят представители ТИМ, ЦОДД, ИЦ «Безопасный транспорт», Акселератора Возможностей, МГУ им. М. В. Ломоносова, ИНТЦ МГУ «Воробьевы горы», ФИЦ ИУ РАН, АО «Лаборатория Касперского», Positive Technologies, Сбер, BI.Zone, ГК «Программный продукт», и RuSIEM.
Лови ссылку на регистрацию: https://securetraffic.moscow/. А если пока нет времени на заполнение формы, просто оставь свой ник в Телеграмм на нашем сайте, и мы обязательно тебе напомним.
Мероприятие пройдет 3-5 декабря. Прием заявок на хакатон открыт до 2 декабря.
Будет много активностей и приятных бонусов:
• 2 кейса по разработке чат-бота и информационного портала;
• Идеатон с призовым фондом в 100 000 рублей;
• Комнаты Диснея, где эксперты помогут тебе пройти 3 этапа генерации идеи;
• Мастер-классы;
• Wild-card в студенческий трек акселератора ТИМ;
• Много подарков и призов от партнеров;
• Мерч и сертификаты;
• Общий призовой фонд в 500 000 рублей.
Членами жюри и экспертами хакатона выступят представители ТИМ, ЦОДД, ИЦ «Безопасный транспорт», Акселератора Возможностей, МГУ им. М. В. Ломоносова, ИНТЦ МГУ «Воробьевы горы», ФИЦ ИУ РАН, АО «Лаборатория Касперского», Positive Technologies, Сбер, BI.Zone, ГК «Программный продукт», и RuSIEM.
Лови ссылку на регистрацию: https://securetraffic.moscow/. А если пока нет времени на заполнение формы, просто оставь свой ник в Телеграмм на нашем сайте, и мы обязательно тебе напомним.
Мероприятие пройдет 3-5 декабря. Прием заявок на хакатон открыт до 2 декабря.
Когда стоит использовать фильтры сервлетов, а когда слушателей?
Следует использовать фильтры, если необходимо обрабатывать входящие или исходящие данные (например: для аутентификации, преобразования формата, компрессии, шифрования и т.д.), в случае, когда необходимо реагировать на события - лучше применять слушателей.
Следует использовать фильтры, если необходимо обрабатывать входящие или исходящие данные (например: для аутентификации, преобразования формата, компрессии, шифрования и т.д.), в случае, когда необходимо реагировать на события - лучше применять слушателей.
Как реализовать запуск сервлета одновременно с запуском приложения?
Контейнер сервлетов обычно загружает сервлет по первому запросу клиента.
Если необходимо загрузить сервлет прямо на старте приложения (например если загрузка сервлета происходит длительное время) следует использовать элемент <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>
Контейнер сервлетов обычно загружает сервлет по первому запросу клиента.
Если необходимо загрузить сервлет прямо на старте приложения (например если загрузка сервлета происходит длительное время) следует использовать элемент <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>
Senior Java Developer — как проходят собеседования
https://te.legra.ph/Senior-Java-Developer--kak-prohodyat-sobesedovaniya-11-23
https://te.legra.ph/Senior-Java-Developer--kak-prohodyat-sobesedovaniya-11-23
Telegraph
Senior Java Developer — как проходят собеседования
Я прошел за свою деятельность больше 100 собеседований на позиции Senior Java Developer, и скажу я вам, накопилось много интересных моментов, которыми и хочется поделиться. К слову, я не махровый кодер, в разработке около 5 лет, на позиции Senior всего 2…
🎙 «БКС Мир инвестиций» и Фонд «Сколково» проводят онлайн-митап в формате круглого стола по Java разработке.
Всех заинтересованных приглашаем к участию: https://clck.ru/YuUcV
📌 25 ноября в 15:00 пройдет онлайн круглый стол, на котором обсудим, «Асинхронный бэкенд на JVM: Как увидеть прирост производительности?» и «Масштабирование приложений и оптимизация производительности».
В программе:
15:00 - 15:10 — Вступительное слово модератора, представление программы
15:10 - 15:40 — «Асинхронный бэкенд на JVM: Как увидеть прирост производительности?», Янис Батура, Ведущий разработчик, команда Wildlings, «БКС Мир Инвестиций».
15:40-16:00 — Задача соревнования BCS Coding Days: полезная информация про задачу, секретики для ее решения
16:00 - 17:00 — Круглый стол с участием Виктора Молодцова, CTO of Broker business, «БКС Мир Инвестиций»; Владислава Иванова, TeamLead, команда Baggins, «БКС Мир Инвестиций»; Юрия Милютина, Engineering Manager, Эквайринг Сбера; Александра Токарева, Head of R&D, Платформа Сбера.
👉 Регистрация на митап: https://clck.ru/YuUcV
Митап проводится в рамках онлайн-соревнования BCS Coding Days для Java, Android-разработчиков и системных аналитиков. Победители разделят 1,5 млн рублей. Подробнее о Java-треке: https://clck.ru/YuUdx
Всех заинтересованных приглашаем к участию: https://clck.ru/YuUcV
📌 25 ноября в 15:00 пройдет онлайн круглый стол, на котором обсудим, «Асинхронный бэкенд на JVM: Как увидеть прирост производительности?» и «Масштабирование приложений и оптимизация производительности».
В программе:
15:00 - 15:10 — Вступительное слово модератора, представление программы
15:10 - 15:40 — «Асинхронный бэкенд на JVM: Как увидеть прирост производительности?», Янис Батура, Ведущий разработчик, команда Wildlings, «БКС Мир Инвестиций».
15:40-16:00 — Задача соревнования BCS Coding Days: полезная информация про задачу, секретики для ее решения
16:00 - 17:00 — Круглый стол с участием Виктора Молодцова, CTO of Broker business, «БКС Мир Инвестиций»; Владислава Иванова, TeamLead, команда Baggins, «БКС Мир Инвестиций»; Юрия Милютина, Engineering Manager, Эквайринг Сбера; Александра Токарева, Head of R&D, Платформа Сбера.
👉 Регистрация на митап: https://clck.ru/YuUcV
Митап проводится в рамках онлайн-соревнования BCS Coding Days для Java, Android-разработчиков и системных аналитиков. Победители разделят 1,5 млн рублей. Подробнее о Java-треке: https://clck.ru/YuUdx
Соверши прорыв в методах диагностики и выиграй приз ₽200 млн!
Прими участие в конкурсе в области ИИ в медицине.
Нужно создать интеллектуальную систему поддержки принятия врачебных решений (СППВР) для формулировки заключительного диагноза на основе анализа комплекса данных о пациенте, информации из профессиональных медицинских баз знаний и клинических рекомендаций. Такая СППВР должна стать коллегой-помощником доктора, а потому должна уметь не только поставить точный диагноз, но и обосновать его так, чтобы врач ей доверял.
Технологии, развиваемые в рамках проведения Конкурса, смогут стать ядром широкого спектра продуктов, как в медицине и здравоохранении, так и в других областях, где необходимо объединять системы на основе машинного обучения, обработку естественного языка и работу с неструктурированными данными. Полученные в ходе Конкурса разработки будут способствовать занятию российскими высокотехнологичными компаниями ведущих позиций в области ИИ в медицине и здравоохранении на мировом рынке.
Вместе с основным этапом проводится конкурс-сателлит по аналогичной тематике с более простым заданием. Он направлен на поддержку команд-участниц и также имеет денежный приз.
Отборочный этап начнется осенью 2022 года, но заявку можно подать уже сейчас. Требования к разработчикам, график конкурса, задание и регистрация на конкурс: http://ai4med.upgreat.one/?utm_source=tg
Прими участие в конкурсе в области ИИ в медицине.
Нужно создать интеллектуальную систему поддержки принятия врачебных решений (СППВР) для формулировки заключительного диагноза на основе анализа комплекса данных о пациенте, информации из профессиональных медицинских баз знаний и клинических рекомендаций. Такая СППВР должна стать коллегой-помощником доктора, а потому должна уметь не только поставить точный диагноз, но и обосновать его так, чтобы врач ей доверял.
Технологии, развиваемые в рамках проведения Конкурса, смогут стать ядром широкого спектра продуктов, как в медицине и здравоохранении, так и в других областях, где необходимо объединять системы на основе машинного обучения, обработку естественного языка и работу с неструктурированными данными. Полученные в ходе Конкурса разработки будут способствовать занятию российскими высокотехнологичными компаниями ведущих позиций в области ИИ в медицине и здравоохранении на мировом рынке.
Вместе с основным этапом проводится конкурс-сателлит по аналогичной тематике с более простым заданием. Он направлен на поддержку команд-участниц и также имеет денежный приз.
Отборочный этап начнется осенью 2022 года, но заявку можно подать уже сейчас. Требования к разработчикам, график конкурса, задание и регистрация на конкурс: http://ai4med.upgreat.one/?utm_source=tg
ai4med.upgreat.one
Технологические конкурсы UP GREAT — AI’m Doctor
Технологический конкурс Up Great на создание интеллектуальной системы поддержки принятия врачебных решений для постановки заключительного диагноза.
Как обработать в приложении исключения, выброшенные другим сервлетом?
Когда приложение выбрасывет исключение контейнер сервлетов обрабатывает его и создаёт ответ в формате 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>
Основная задача таких сервлетов - обработать ошибку/исключение и сформировать понятный ответ пользователю. Например, предоставить ссылку на главную страницу или же описание ошибки.
Когда приложение выбрасывет исключение контейнер сервлетов обрабатывает его и создаёт ответ в формате 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.
А еще в ходе митапа можно будет выиграть толстовки и кружки-коферы. Подробности — в эфире 🎁
Участие бесплатное, нужно только зарегистрироваться.
Меньше, чем через неделю команда 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().
Интерфейс 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 реализует интерфейс 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() и т.д.
Что полезно знать Java-разработчику про вывод типов
https://te.legra.ph/CHto-polezno-znat-Java-razrabotchiku-pro-vyvod-tipov-11-27
https://te.legra.ph/CHto-polezno-znat-Java-razrabotchiku-pro-vyvod-tipov-11-27
Telegraph
Что полезно знать Java-разработчику про вывод типов
В Java 8 кардинально переработали процедуру вывода типов выражений. В спецификации появилась целая новая глава на эту тему. Это весьма сложная штука, изложенная скорее на языке алгебры, чем на языке нормальных людей. Не каждый программист готов в этом разобраться.…
В чем отличия ServletContext и ServletConfig?
ServletConfig уникален для сервлета, а ServletContext - для приложения;
ServletConfig используется для предоставления параметров инициализации конкретному сервлету, а ServletContext для предоставления параметров инициализации для всех сервлетов приложения;
для ServletConfig возможности модифицировать атрибуты отсутствуют, атрибуты в объекте ServletContext можно изменять.
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 заголовок к значениям по-умолчанию, если он ещё не был отправлен
и др.
Интерфейс 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 заголовок к значениям по-умолчанию, если он ещё не был отправлен
и др.