Интерфейс ServletConfig

ServletConfig – можно сказать, что то же самое, что и ServletContext, но в отличии от него хранит данные касающиеся только конкретного сервлета.

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

В основном, он нужен для извлечения параметров инициализации.

Параметры инициализации (прописываются в web.xml) – это какие-то данные, которые доступны сервлету или сервлетам сразу с начала его работы.


Определение параметров инициализации в web.xml

В web.xml можно определить параметры инициализации как на уровне контекста, так и только для конкретного сервлета.  

Web.xml:

MyServlet MyServlet name firstParamName MyServlet1 MyServlet1 name secondParamName name commonName

Как можно увидеть, мы задали три параметра инициализации.

Задали один общий для всех сервлетов параметр с именем name и задали параметры с именем name, доступные только конкретному сервлету. Эти все параметры потом можно будет достать с помощью getInitParameter().


Параметры инициализации в первом сервлете MyServlet.

С помощью getInitParameter извлекаем параметры инициализации, которые были определены в web.xml.

import java.util.*; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletExcept1on; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletContext; import javax.servlet.ServletConfig; import javax.servlet.annotation.*; @WebServlet(“/configservlet”) public class MyServlet extends HttpServlet{ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ PrintWriter pw = resp.getWriter(); //получаем контекст всего приложения ServletContext scont = getServletContext(); //получаем значение параметра name контекста //(будет commonName) pw.println(scont.getInitParameter(“name”)); //получаем конфиг сервлета ServletConfig sconf = getServletConfig(); //получаем значение параметра name конфига //(будет firstParamName) pw.println(sconf.getInitParameter(“name”)); } }

Параметры инициализации во втором сервлете MyServlet1.

С помощью getInitParameter извлекаем параметры инициализации во втором сервлете, которые были определены в web.xml.

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.annotation.*; import javax.servlet.ServletContext; import javax.servlet.ServletConfig; import javax.servlet.http.Cookie; @WebServlet(“/myservlet”) public class MyServlet1 extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ PrintWriter pw = resp.getWriter(); //получаем контекст всего приложения ServletContext scont = getServletContext(); //получаем значение параметра name контекста //(также как и в другом сервлете будет CommonName) pw.println(scont.getInitParameter(“name”)); //получаем конфиг сервлета ServletConfig sconf = getServletConfig(); //получаем значение параметра name конфига //(будет secondParamName) pw.println(sconf.getInitParameter(“name”)); } }

Проверка работы сервлетов

Скомпилируем файлы сервлетов и в адресной строке перейдем по адресу /configservlet.

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

Если перейдем по пути /myservlet, то можно увидеть параметр инициализации уровня контекста (это тот же самый параметр, что и на картинке выше), который доступен всем сервлетам и параметр инициализации, который принадлежит только сервлету MyServlet1 и нигде больше не виден.

encodeURL и encodeRedirectURL в Java сервлетах

Разберитесь, как поддерживать сессии в Java сервлетах при отключенных cookies. Используйте encodeURL и encodeRedirectURL для передачи JSESSIONID в URL.
Time to read: 16

Синхронизация в Java сервлете

Узнайте, как обеспечить потокобезопасность в Java сервлетах. Изучите работу с синхронизацией, deprecated SingleThreadModel и лучшие практики для многопоточных сервлетов.
Time to read: 12

Что такое Filter в Java сервлетах

Фильтры (Filter) в Java сервлетах: выполняйте код до и после обработки запроса. Пример реализации интерфейса Filter для предварительной авторизации и логирования.
Time to read: 14