Бесплатный курс по Java: от основ до продвинутого уровня
Интерфейс ServletContext
ServletContext – контекст является объектом общим для всего приложения.
В объекте ServletContext можно хранить какие-либо данные общие для всех сервлетов приложения. И потом эти данные можно извлекать из этого объектав сервлетах приложения.
Например, из него получать параметры инициализации прописанные в web.xml или сохранять в него какие-то аттрибуты с помощью метода setAttribute, и потом получать их с помощью getAttribute.
Аттрибуты это какие-то данные для внутренней коммуникации сервлетов. Сервлеты могут обмениваться ими в пределах контекста или сессии.
Положим аттрибут в ServletContext в сервлете MyServlet
Давайте положим аттрибут в контекст в одном сервлете, а извлечем его в другом сервлете. То есть, как уже было сказано, через аттрибуты сервлеты обмениваются данными между собой.
Пример программы:
import java.util.*;
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.ServletContext;
import javax.servlet.annotation.*;
@WebServlet(“/contextservlet”)
public class MyServlet extends HttpServlet{
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException,IOException{
PrintWriter pw = resp.getWriter();
//Получаем контекст всего приложения.
ServletContext scont = getServletContext();
//Создадим аттрибут с именем attrName
//и положим туда какие-то данные
//В данном случае просто строку “attrVal”.
scont.setAttribute(“attrName”, “attrVal”);
//getAttributeNames – получаем имена атрибутов.
//Вот таким образом можем просмотреть
//все атрибуты сервлета.
Enumeration attrNames=scont.getAttributeNames();
while(attrNames.hasMoreElements()) {
String attrName = attrNames.nextElement();
//выводим значение атрибута
pw.println(attrName+”: “+scont.getAttribute(attrName));
pw.println(“-------------“);
}
//Ниже также несколько полезных методов контекста.
//с помощью getRealPath можно вернуть полный путь
//сервлета засунув аргументом относительный.
pw.println(getServletContext().getRealPath(req.getServletPath()));
//Можно получить некоторую информацию о сервере.
pw.println(getServletContext().getServerInfo());
}
}
Прием этого аттрибута в другом сервлете MyServlet1.
С помощью getAttributeполучаем аттрибут из контекста, ранее положенный туда в другом сервлете.
Узнайте, как обеспечить потокобезопасность в Java сервлетах. Изучите работу с синхронизацией, deprecated SingleThreadModel и лучшие практики для многопоточных сервлетов.