Сервлеты. Контекст

Сервлет живет и умирает в пределах процесса сервера. Сервлет может получать информацию о своем окружении в различное время. Во время запуска сервлета доступна информация об инициализации; информация о сервере доступна в любое время, кроме этого, любой запрос может содержать дополнительную специфическую информацию.

Информация об инициализации сервера

Информация об инициализации передается сервлету при помощи параметра ServletConfig метода init(). Каждый Web-сервер обеспечивает свой способ передачи информации об инициализации в сервлет. Если, например, класс сервера DatePrintServlet принимает аргумент инициализации timezone, то необходимо определить следующие свойства в файле servlets.properties:
  • servlet.dateprinter.code=DatePrinterServlet
  • servlet.dateprinter.timezone=PST

Эта информация также может быть предоставлена административным средством GUI. В следующем коде сервлет получает доступ к информации timezone на этапе инициализации.

  public void init(ServletConfig config) 
  { 
      timeZone = config.getInitParameter("timezone"); 
  } 

Объект Enumeration со всеми параметрами инициализации доступен сервлету через метод getInitParameterNames().

Информация о контексте сервера

Информация о контексте сервера доступна в любое время через объект ServletContext. Сервлет может получить этот объект, вызывая метод getServletContext() объекта ServletConfig. Необходимо помнить, что этот объект передается сервлету во время инициализации. Грамотно написанный метод init() сохраняет ссылку в переменной, имеющей тип доступа private. Интерфейс ServletContext определяет несколько методов, представленные в таблице:

getAttribute () Гибкий способ получения информации о сервере через пары атрибутов имя/значение. Зависит от сервера.
GetMimeType () Возвращает тип MIME данного файла.
getRealPath () Этот метод преобразует относительный или виртуальный путь в новый путь относительно месторасположения корня HTML-документов сервера.
getServerInfo () Возвращает имя и версию сетевой службы, в которой исполняется сервлет.
getServlet () Возвращает объект Servlet указанного имени. Полезен при доступе к службам других сервлетов.
getServletNames () Возвращает список имен сервлетов, доступных в текущем пространстве имен.
log () Записывает информацию в файл регистрации сервлета. Имя файла регистрации и его формат зависят от сервера.

Следующий пример показывает, как сервлет использует Web-сервер для записи сообщения в свой log-файл во время инициализации:

  import java.io.*;  
  import javax.servlet.*;  
  public HelloWorld implements Servlet  
  {  
       private ServletConfig config;  
       public void init (ServletConfig config) throws ServletException  
       {  
            this.config = config;  
            ServletContext sc = config.getServletContext();  
            sc.log( "Started OK!" );  
       }  
}  

Контекст сервлета во время запроса на обслуживание

Каждый запрос на обслуживание может содержать информацию в форме пар параметров имя/значение, как ServletInputStream, или BufferedReader. Эта информация доступна при помощи объекта ServletRequest, который передается в метод service().
Следующий код показывает, как получить информацию во время работы метода service():

  BufferedReader reader;  
  String         param1;  
  String         param2;  
  
  public void service(ServletRequest request,ServletResponse response) 
  {  
        reader = request.getReader();  
        param1 = request.getParameter("First");  
        param2 = request.getParameter("Second");  
  }  

Существует также дополнительная информация, доступная сервлету через объект ServletRequest. Она приведена в следующей таблице:

getAttribute () Возвращает значение указанного атрибута этого запроса.
getContentLength () Размер запроса, если известен.
getContentType () Возвращает тип MIME тела запроса.
getInputStream () Возвращает InputStream для чтения двоичных данных из тела запроса.
GetParameterNames () Возвращает массив строк с именами всех параметров.
getParameterValues () Возвращает массив значений для указанного параметра.
getProtocol () Возвращает протокол и версию для запроса как строку вида /..
getReader () Возвращает BufferedReader для получения текста из тела запроса.
getRealPath () Возвращает реальный путь для указанного виртуального пути.
getRemoteAddr () IP-адрес клиента, пославшего данный запрос.
getRemoteHost () Имя хоста клиентской машины, пославшего данный запрос.
getScheme () Возвращает схему, используемую в URL этого запроса (например, https, http, ftp, и т.д.).
getServerName () Имя хоста сервера, принявшего данный запрос.
getServerPort () Возвращает номер порта, используемого для приема этого запроса.