HTTP и Java

Август 12, 2011

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

___________________________________

Основная модель взаимодействия клиента с сервером — это модель запрос-ответ. При этом стандартным протоколом взаимодействия является протокол HTTP. Для представления запросов предусмотрены 2 интерфейса. 1-ый javax.sevlet.ServletRequest — является базовым для любых запросов и не несет в себе никакой протокольной специфики. 2-ой javax.servlet.http.HttpServletRequestрасширяет 1-ый и используется д/представления именно http — запросов. Д/каждого входящего http-запроса сервер приложений создает объект этого типа. Вне зав-ти от исполь-ого протокола у запроса м.б. те или иные параметры. Они указывается клиентом при формировании запроса. Методы для работы с параметрами предусмотрены в интерфейсе javax.servlet.ServletRequest. В спецификации протокола http предусмотрено 7 видов запросов, из них наиболее важными с т.зр. интерактивного взаимодействия с клиентом являются методы Get и Post. В любом случае у параметра есть имя и значение. Ключевой особенностью метода Get является то, что параметры передаются в заголовке http запроса как часть URL, по кот. идет обращение к клиенту. При этом пар-ры оформляются в виде пар имя=значение. Эти пары разделяются символом &, и присоединяются к адресу веб-ресурса после символа ?.

Пр-р:http://www.vstore.com/uicontroller?action=removeItem&id =7

Запрос в данном случае б.отправлен на сайт http://www.vstore.com компоненту uicontroller по протоколу http и б.содержать 2 пар-ра: action со значением removeItem и id со значением 7.

Недостаток м-да Get в том, что некоторые системы накладывают ограничения на длину URL и передавать большой объем данных так нельзя.

М-д Post решает проблему м-да Get, обеспечивая передачу пар-ров не в заголовке, а в теле http запроса.

Запросы м-дом Get м.формировать вручную, вводя URL в адресной строке браузера или кликая по ссылке. Запросы м-дом Post формируются с помощью HTML форм. Напр-р:

<form name ="login" action = «uicontroller» method = «post»>

<table><tr><tb>username</tb><tb> password </tb></tr>

<tr><tb><input name = «username» type = «text» ></tb>

<tb><input name = «password» type = «password» ></tb>

</tr></ table >

<input name ="action" type = «hidden» value = «login»>

<input type ="submit" value = «войти» name =" ">

</form>

При формировании запроса такой формы запрос б.передан компоненту uicontroller, кот. здесь указан относительным URL с помощью атр-та action элемента form. Тип запроса Post, что указано атр-том method элемента form. Пар-ры запроса формируются на основе элементов input, описанных внутри элемента form. Имя пар-ра б.соот-ть атр-та name эл-та input, а зн-ие либо атр-ту value, явно указ-му д/ эл-та input, либо знач-ию, кот. ввел поль-ль в соот-щий эл-нт упр-ия — здесь многое опред-ся типом эл-нта упр-ния, указ-ым атр-том type эл-та input.

Д/работы с пар-рами в интерфейсе ServletRequest предусмотрены м-ды: getParameternames — возвращает список имен, пар-ров присутствующих в запросе; getParameter — возвращает первое значение пар-ра с указ-ым именем.

Значения пар-ров представляются в виде строк, если присутствуют несколько пар-ров с одинаковым именем, то считается что у пар-ра с этим именем несколько значений. В этом случае getParameter вернет только 1-ое из них. Полный список м.вернуть с помощью м-да getParameternames в виде массива строк.

Объет запроса также как и ServletContex м.выступать в роле контейнера д/др.объектов —атрибутов. Время жизни атр-тов запроса ограничено временем обр-ки запросов. Атр-ты запроса основное средство передачи инф-ции при перенаправлении запроса от одного веб-компонента др-гому. Д/работы с атр-тами запроса испол-ся м-ды: getAttributenames, getAttribute, setAttribute, removeAttribute.

Получить доступ к телу запроса м . 2-мя способами :

1. м-ом getReader — возвращает об-кт типа java.io.BufferedReader, кот. позволяет работать с телом запроса как с текстовым потоком ввода.

2. м-дом getInputStream — возвращает об-кт типа javax.servlet.ServletInputStream, кот. позволяет работать с телом запроса как с бинарным потоком ввода.

В протоколе http тело запроса м.испол-тся не только д/передачи пар-ров формы, но и д/передачи файлов.

Размер тела запроса м.получить м-дом getContentLength, а тип содержимого запроса м-дом getContentType.

Многие протоколы позволяют передавать инф-ию разных типов, требующих различной обработки. Поэтому необходимо идентифицировать тип передаваемой инф-ии. Это делается с помощью идентификатора MIME — типа-строки вида тип/подтип. Так дютекстовых док-тов: text/plain, text/html, text/xml

д/изображений: image/gif(картинки), image/jpeg, image/png; д/видео: video/mpeg и др.; д/сложных документов applicacion/pdf, applicacion/x-msword и др. Т.об. MIME типы идентифицируются строкой.

М-ды: getLocale— извлекают инф-ию о региональных настройках клиента;

getCharacterEncoding— возвращает название кодировки, в кот. предст-но тело запроса;

getRemoteHost(возв-ет доменное имя узла) и getRemoteAddr(возвр-ет IP-адрес) нужны д/того, чтобы узнать с какого узла пришел запрос.

Все рассмотренные м-ды предусмотрены в базовом интерфейсе ServletRequest, дополнительно в интер-се HttpServletRequest определено следующее:

getMethod— возвращает метод, которым б.послан запрос.