Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 модуль.docx
Скачиваний:
15
Добавлен:
02.11.2018
Размер:
92.62 Кб
Скачать

Работа сервлетов в многопоточной среде

Обработка каждого запроса клиента ведется в отдельном потоке команд (это обеспечивает сам сервлет-контейнер).

Если одновременно поступило несколько запросов, то их обработка будет идти параллельно в нескольких потоках. Это нужно учитывать при работе с общими данными, например, полями сервлета или базой данных. По возможности следует использовать локальные переменные в методах обработки doGet/doPost, применять критические секции при работе с общими данными, в СУБД применять транзакции или блокировки таблиц (в зависимости от типа СУБД).

Сервлет-контейнер можно «заставить» отказаться от многопоточного выполнения сервлета, для чего сервлет должен реализовать интерфейс SingleThreadModel (интерфейс не имеет методов, используется лишь как признак «однопоточного сервлета»). Примерно того же результата можно добиться, если у методов doGet/doPost указать директиву synchronized.

13.3. Основные классы Servlet api Класс HttpServletRequest (запрос)

String getParameter(String name) — возвращает значение параметра запроса, переданного клиентом, по его имени. Возвращает null, если параметр не существует. Поддерживает параметры, переданные как методом GET, так и POST. Имена параметров чувствительны к регистру.

Если параметр присутствует в запросе более одного раза, то список всех значений можно получить методом getParameterValues.

Список всех параметров можно получить с помощью метода getParameterMap.

В Servlet API нет удобных средств для работы с загруженными файлами. Но можно воспользоваться библиотекой Apache Commons File Upload (http://jakarta.apache.org/commons/fileupload/) или аналогичной.

void setCharacterEncoding(String encoding) — устанавливает кодировку запроса, чтобы метод getParameter корректно обрабатывал национальные символы в параметрах запросов.

По умолчанию этот метод указывает кодировку только параметров, переданных в теле HTTP-запроса (т. е. методом POST). Чтобы он влиял и на параметры, переданные в строке запроса (методом GET), то в настройках Tomcat в файле conf/server.xml в теге <Connector> следует поменять значение атрибута useBodyEncodingForURI с false на true.

String getRemoteHost() — IP-адрес клиента.

String getHeader(String name) — заголовок HTTP-запроса.

String getQueryString() — строка запроса (в запрашиваемом URI идет после символа «?»)

String getRequestURI() — запрашиваемый URI (без строки запроса, например, /myapp/hello).

Класс HttpServletResponse (ответ)

void setContentType(String type) — устанавливает поле Content-Type HTTP-ответа. В этом поле указывается MIME-тип и кодировка (опционально). Указанная кодировка будет использоваться при отправке клиенту ответа (если ответ имеет текстовый формат). Если ответ содержит национальные символы, то следует обязательно использовать этот метод до начала отправки тела ответа. Пример:

response.setContentType("text/html; charset=UTF-8");

PrintWriter getWriter() — возвращает объект PrintWriter, который позволяет отправить ответ клиенту (текстовый ответ). Предыдущий метод (setContentType) должен быть вызван до вызова метода getWriter. Если сервлет генерирует не текстовый ответ, а двоичный (например, изображение), то вместо метода getWriter следует использовать getOutputStream.

Методы setContentType и getWriter используются практически всеми сервлетами.

void addHeader(String name, String value) — добавляет HTTP-заголовок в ответ. Пример заголовка, получив который, браузер предложит пользователю сохранить документ под указанным именем (price.xls):

res.addHeader("Content-Disposition", "attachment; filename=price.xls");

void sendRedirect(String location) — выполняет перенаправление клиента на другую страницу.

void setStatus(int code) — установка кода статуса HTTP-ответа (по умолчанию 200). Можно пользоваться не напрямую числовыми кодами, а константами класса (например, HttpServletResponse.SC_NOT_FOUND).

void sendError(int code, [String msg]) — возвращает клиенту стандартную страницу с сообщением об ошибке. В параметрах указывается код ошибки и ее описание, которое отображается клиенту.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]