Топ-100Интерфейс ServletContext - CodOrbits
LogoCodOrbits

Раздел: Servlets

Познакомьтесь с сервлетами Java: создание динамических веб-страниц и работа с HTTP-запросами и ответами.

Все разделы
Иконка Servlets

Интерфейс 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
мин.

Similar Articles Icon
Divider

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

16
мин.

Similar Articles Icon
Divider

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

12
мин.

Similar Articles Icon