АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Вопрос 17.6

Читайте также:
  1. E. Некорректный вопрос
  2. I. Перечень вопросов и тем для подготовки к экзамену
  3. II. Вопросительное предложение
  4. VII. Вопросник для анализа учителем особенностей индивидуального стиля своей педагогической деятельности (А.К. Маркова)
  5. X. примерный перечень вопросов к итоговой аттестации
  6. Аграрный вопрос
  7. Анализ влияния рекламы на продвижение противопростудных средств
  8. Балканский вопрос в начале XXв. Русско-германские отношения
  9. Бланк вопросов
  10. БЛОК № 1 (1 – 10 вопрос)
  11. БЛОК № 2 (11 – 20 вопрос)
  12. Блок № 4 (31 – 40 вопрос)

Какая из записей указывает правильное имя и расположение файла-дескриптора Web-приложения относительно его корневой директории?

1) /conf/web.xml

2) /WEB-INF/web.xml

3) /conf/server.xml

4) /META-INF/web.xml

5) /WEB-INF/rules.xml

6) /META-INF/server.xml

 

 
Глава 18

СЕРВЛЕТЫ

Сервлет применяется для создания серверного приложения, получающего от клиента запрос, анализирующего его, делающего выборку данных из базы, а затем пересылающего клиенту страницу HTML, сгенерированную с помощью JSP на основе полученных данных.

Преимуществом сервлетов перед CGI или ASP является быстродействие, переносимость на различные платформы, использование объектно-ориентированного языка высокого уровня Java, который расширяется большим числом классов и программных интерфейсов.

Сервлеты поддерживаются большинством Web-серверов и являются частью платформы J2EE. Сервлеты реализуют интерфейс Servlet, в котором, кроме рассмотренных выше методов service(), init(), destroy(), предусмотрена реализация еще двух методов:

ServletConfiggetServletConfig() – возвращает объект, содержащий параметры конфигурации сервлета;

String getServletInfo() – определение информации о назначении сервлета.

Интерфейс ServletContext

Интерфейс ServletContext объявляет методы, которые сервлет применяет для связи с контейнером сервлетов и позволяет получать информацию о среде выполнения, а также использовать ресурсы совместно с другими объектами приложения. Каждому сервлету ставится в соответствие единственный объект, реализующий ServletContext. Контекст выполнения сервлета дает средства для общения с сервером. В частности, можно получить информацию о MIME-типе файла, добавить/удалить атрибуты контекста или записать информацию в log-файл. Получить ссылку на объект ServletContext можно вызовом метода getServletContext().

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

String getMimeType(String filename) – определение MIME-типа файла или документа. По умолчанию MIME-типом для сервлетов является text/plain, но используется обычно text/html;

String getRealPath(String filename) – определение истинного маршрута файла относительно каталога, в котором сервер хранит документы;

String getServerInfo() – предоставляет информацию о самом сервере.

Ряд методов предназначен для управления атрибутами, с помощью которых передается информация между различными компонентами приложения (JSP, сервлетами):

Object getAttribute(String name) – получает значение атрибута по имени;

Enumeration getAttributeNames() – получает список имен атрибутов;

void setAttribute(String name, Object object) – добавляет атрибут и его значение в контекст;

void removeAttribute(String name) – удаляет атрибут из контекста;

ServletContext getContext(String uripath) – позволяет получить доступ к контексту других ресурсов данного контейнера сервлетов;

String getServletContextName() – возвращает имя сервлета, которому принадлежит данный объект интерфейса ServletContext.

Используя объект ServletContext, можно регистрировать события сервлета, сессии и запроса.

Интерфейс ServletConfig

Ранее уже упоминался метод getServletConfig(), но не было сказано об интерфейсе ServletConfig, с помощью которого контейнер сервлетов передает информацию сервлету в процессе его инициализации.

Некоторые методы класса:

String getServletName() – определение имени сервлета;

Enumeration getInitParameterNames() – определение имен параметров инициализации сервлета из дескрипторного файда web.xml;

String getInitParameter(String name) – определение значения конкретного параметра по его имени.

Чтобы задать параметры инициализации сервлета MyServlet, необходимо в тег < servlet > его описания вложить тег < init-param > с описанием имени
и значения параметра в виде:

<servlet>

<servlet-name> MyServletname </servlet-name>

<servlet-class> chapt18.MyServlet </servlet-class>

< init-param >

<param-name> mail. smtphost </param-name>

<param-value> mail.bsu </param-value>

</ init-param >

<init-param>

<param-name> mail. smtpport </param-name>

<param-value> 25 </param-value>

</init-param>

</servlet>

Тогда для доступа к параметрам инициализации сервлета и их дальнейшего использования можно применить следующую реализацию метода init() сервлета:

public void init() throws ServletException {

ServletConfig sc = getServletConfig();

 

// определение набора имен параметров инициализации

Enumeration e = sc.getInitParameterNames();

while (e.hasMoreElements()) {

// определение имени параметра инициализации

String name = (String)e.nextElement();

// определение значения параметра инициализации

String value = sc.getInitParameter(name);

//...

}

}

Такими же возможностями обладает и объект ServletContext, который содержит практически всю информацию о среде, в которой запущен и выполняется сервлет, например:

getServletContext().getInitParameter("mail. smtpport ");

Интерфейсы ServletRequest и HttpServletRequest

Информация от компьютера клиента отправляется серверу в виде объекта запроса типа HttpServletRequest. Данный интерфейс является производным от интерфейса ServletRequest. Используя методы интерфейса ServletRequest, можно получить много дополнительной информации, в том числе и о сервлете и деталях протокола HTTP, закодированной и упакованной
в запрос:

String getCharacterEncoding() – определение символьной кодировки запроса;

String getContentType() – определение MIME-типа (Multipurpose Internet Mail Extension) пришедшего запроса;

String getProtocol() – определение названия и версии протокола;

String getServerName(), getServerPort() – определение имени сервера, принявшего запрос, и порта, на котором запрос был принят сервером соответственно;

String getRemoteAddr(), getRemoteHost() – определение IP-адреса клиента, от имени которого пришел запрос, и его имени соответственно;

String getRemoteUser() – определение имени пользователя, выполнившего запрос;

ServletInputStream getInputStream(), BufferedReader getReader() – получение ссылки на поток, ассоциированный с содержимым полученного запроса. Первый метод возвращает ссылку на байтовый поток ServletInputStream, а второй – на объект BufferedReader. В результате можно прочитать любой байт из полученного объекта-запроса. Если метод getReader() был вызван после вызова getInputStream() для этого запроса, то генерируется исключение IllegalStateException и наоборот.

При обращении к серверу, как правило, передаются параметры и их значения. Для разбора параметров и извлечения их значений применяются методы:

String getParameter(String name) – определение значения параметра по его имени или null, если параметр с таким именем не задан;

String[] getParameterValues(String name) – определение всех значений параметра по его имени;

Enumeration getParameterNames() – определение ссылки на список имен всех параметров через объект типа Enumeration.

Непосредственно в интерфейсе HttpServletRequest объявлен ряд методов, позволяющих манипулировать содержимым запросов:

void setAttribute(String name, Object ob) – установка значения атрибута компонента, являющегося внутренним параметром для передачи информации между компонентами приложения, например от сервлета к странице JSP или другому сервлету;

Enumeration getAttributeNames() – извлечение перечисления имен атрибутов;

Object getAttribute(String name) – извлечение значения переданного атрибута по имени;

Cookie[] getCookies() – извлечение массива cookie, полученного с запросом. Файл cookie – маленький файл, сохраняемый приложением на стороне клиента;

String getMethod() – определение имени метода доступа к ресурсам, на основе которого построен запрос;

String getQueryString() – извлечение строки HTTP-запроса.

В следующем примере рассматривается применение некоторых методов интерфейса HttpServletRequestдля получения данных о запросе, посылаемом методом GET и генерации ответа клиенту.

/* пример # 1: извлечение информации из запроса и счетчик посещений: RequestServlet.java: RequestInfo.java: ClickOutput.java */

package chapt18;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.IOException;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

 

public class RequestServlet extends HttpServlet {

// счётчик подключений к сервлету

private int count = 0;

 

public void doGet(HttpServletRequest req,

HttpServletResponse resp)

throws ServletException {

performTask(req, resp);

}

public void doPost(HttpServletRequest req,

HttpServletResponse resp)

throws ServletException {

performTask(req, resp);

}

private void performTask(HttpServletRequest req,

HttpServletResponse resp)

throws ServletException {

try {

// установка MIME-типа содержания ответа

resp.setContentType("text/html; charset=Windows-1251");

 

// поток для данных ответа

PrintWriter out = resp.getWriter();

count = ClickOutput.printClick(out, count);

//обращение к классу бизнес-логики

if (count == 1)

RequestInfo.printToBrowser(out, req);

// закрытие потока

out.close();

} catch (UnsupportedEncodingException e) {

System.err.print("UnsupportedEncoding");

} catch (IOException e) {

System.err.print("IOErroR");

}

}

}

package chapt18;

import java.io.PrintWriter;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

 

public class RequestInfo {

static String br = "<br>";

 

public static void printToBrowser(

PrintWriter out, HttpServletRequest req) {

out.println("Method: " + req.getMethod());

out.print(br + "Request URI: " + req.getRequestURI());

out.print(br + "Protocol: " + req.getProtocol());

out.print(br + "PathInfo: " + req.getPathInfo());

out.print(br + "Remote Address: " + req.getRemoteAddr());

// извлечение имен заголовочной информации запроса

Enumeration e = req.getHeaderNames();

out.print(br + "Header INFO: ");

while (e.hasMoreElements()) {

String name = (String) e.nextElement();

String value = req.getHeader(name);

out.print(br + name + " = " + value);

}

}

}

package chapt18;

import java.io.PrintWriter;

 

public class ClickOutput {

public static int printClick(

PrintWriter out, int count) {

 

out.print(++count + " -е обращение." + "<br>");

return count;

}

}

Приведенный выше сервлет вызывается нажатием кнопки “Выполнить” формы из документа index.jsp по адресу URL – RequestServlet.

<!-- пример # 2: стартовая страница вызова сервлета: index.jsp-->

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-5"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">

<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-5">

<title>Info about Request </title>

</head><body>

<FORM action="RequestServlet" method="GET">

<INPUT type="submit" value="Выполнить">

</FORM>

</body></html>

В результате выполнения в браузер будет выведено:


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.014 сек.)