Интерфейс ServletContext
Last updated: 9 мая 2025 г.ServletContext
– контекст является объектом общим для всего приложения.
В объекте ServletContext
можно хранить какие-либо данные общие для всех сервлетов приложения. И потом эти данные можно извлекать из этого объекта в сервлетах приложения.
Например, из него получать параметры инициализации прописанные в web.xml или сохранять в него какие-то аттрибуты с помощью метода setAttribute
, и потом получать их с помощью getAttribute
.
Аттрибуты это какие-то данные для внутренней коммуникации сервлетов. Сервлеты могут обмениваться ими в пределах контекста или сессии.
Положим аттрибут в ServletContext в сервлете MyServlet
Давайте положим аттрибут в контекст в одном сервлете, а извлечем его в другом сервлете. То есть, как уже было сказано, через аттрибуты сервлеты обмениваются данными между собой.
Пример программы:
1import java.util.*;
2import java.io.IOException;
3import java.io.PrintWriter;
4
5import javax.servlet.ServletException;
6import javax.servlet.http.HttpServlet;
7import javax.servlet.http.HttpServletRequest;
8import javax.servlet.http.HttpServletResponse;
9import javax.servlet.ServletContext;
10import javax.servlet.annotation.*;
11
12@WebServlet("/contextservlet")
13public class MyServlet extends HttpServlet{
14 protected void doGet(HttpServletRequest req,
15 HttpServletResponse resp)
16 throws ServletException,IOException{
17 PrintWriter pw = resp.getWriter();
18 //Получаем контекст всего приложения.
19 ServletContext scont = getServletContext();
20 //Создадим аттрибут с именем attrName
21 //и положим туда какие-то данные
22 //В данном случае просто строку "attrVal".
23 scont.setAttribute("attrName", "attrVal");
24 //getAttributeNames – получаем имена атрибутов.
25 //Вот таким образом можем просмотреть
26 //все атрибуты сервлета.
27 Enumeration <String> attrNames=scont.getAttributeNames();
28 while(attrNames.hasMoreElements()) {
29 String attrName = attrNames.nextElement();
30 //выводим значение атрибута
31 pw.println(attrName+": "+scont.getAttribute(attrName));
32 pw.println("————-");
33 }
34
35 //Ниже также несколько полезных методов контекста.
36
37 //с помощью getRealPath можно вернуть полный путь
38 //сервлета засунув аргументом относительный.
39 pw.println(getServletContext().getRealPath(req.getServletPath()));
40 //Можно получить некоторую информацию о сервере.
41 pw.println(getServletContext().getServerInfo());
42 }
43}
Прием этого аттрибута в другом сервлете MyServlet1.
С помощью getAttribute
получаем аттрибут из контекста, ранее положенный туда в другом сервлете.
1import java.io.IOException;
2import java.io.PrintWriter;
3
4import javax.servlet.ServletException;
5import javax.servlet.http.HttpServlet;
6import javax.servlet.http.HttpServletRequest;
7import javax.servlet.http.HttpServletResponse;
8import javax.servlet.annotation.*;
9import javax.servlet.ServletContext;
10import javax.servlet.http.Cookie;
11
12@WebServlet("/myservlet")
13public class MyServlet1 extends HttpServlet{
14 protected void doGet(HttpServletRequest req,
15 HttpServletResponse resp)
16 throws ServletException, IOException{
17 PrintWriter pw = resp.getWriter();
18 //здесь получаем значение атрибута attrName (будет attrVal)
19 ServletContext scont = getServletContext();
20 String str = scont.getAttribute("attrName").toString();
21 pw.write(str);
22 }
23}
Скомпилируем файлы сервлетов и в адресной строке перейдем по адресу /contextservlet
.

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

Также, как можно увидеть, последние две строки это результат методов getRealPath
и getServerInfo
.
Если перейдем по пути /myservlet
, то можно увидеть значение аттрибута, который был создан в MyServlet.
То есть, очевидно, что аттрибут attrName доступен не в одном сервлете приложения. Он доступен всем сервлетам на уровне контекста.
Следующие уроки
Интерфейс ServletConfig
15
мин.
encodeURL и encodeRedirectURL в Java сервлетах
16
мин.
Синхронизация в Java сервлете
12
мин.