|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Вопрос 17.6Какая из записей указывает правильное имя и расположение файла-дескриптора 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
СЕРВЛЕТЫ Сервлет применяется для создания серверного приложения, получающего от клиента запрос, анализирующего его, делающего выборку данных из базы, а затем пересылающего клиенту страницу 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> В результате выполнения в браузер будет выведено: Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.014 сек.) |