Смекни!
smekni.com

Разработка Web–приложений с применением Java Servlet-технологии (стр. 2 из 2)

· Метод init(), объявленный интерфейсом Servlet, принимает объект ServletConfig в качестве его параметра;

· Метод getServletConfig(), объявленный интерфейсом Servlet, возвращает объект ServletConfig.

Манера, в которой параметры инициализации предоставляются сервлету, зависит от сервера.

Пакет javax.servlet.http

Пакет javax.servlet содержит ряд интерфейсов и классов, облегчающих построение сервлетов, которые работают с HTTP – запросами и ответами.


Интерфейс Описание
HttpServletRequest Используется для чтения данных из HTTP – запроса клиента.
HttpServletResponse Используется для записи данных в HTTP – ответ клиенту.
HttpSession Позволяет читать и записывать данные сеанса
HttpSessionBindingListener Информирует объект о том, что он связан или не связан с сеансом.
HttpSessionContext Обеспечивает управляемость сеансов
Класс Описание
Cookie Позволяет сохранять информацию состояния на машине клиента
HttpServlet Обеспечивает методы для обработки запросов и ответов HTTP
HttpSessionBindingEvent Указывает на наличие или отсутствие связи блока прослушивания с сеансовым значением
HttpUtils Обеспечивает методы утилит для сервлетов.

Класс HttpServlet. Работа с HTTP – запросами

Методы, которым метод service передает HTTP‑запросы:

· doGet, для работы с GET-, условными GET-, и HEAD‑запросами

· doPost, для работы с POST‑запросами

· doPut, для работы с PUT‑запросами

· doDelete, для работы с DELETE‑запросами

По умолчанию, эти методы возвращают ошибку BAD_REQUEST (400). Сервлет должен переопределить либо метод service, либо методы для работы с теми HTTP‑запросами, которые он поддерживает. Метод service, принадлежащий HttpServlet, также вызывает метод doOptions, когда сервлет получает OPTIONS‑запрос и метод doTrace, когда сервлет получает TRACE‑запрос. По умолчанию, реализация метода doOptions автоматически определяет какие HTTP‑опции поддерживаются и возвращает эту информацию. По умолчанию, реализация метода doTrace выдает ответ с сообщением, содержащим все заголовки, посланные в TRACE‑запросе. Эти методы, как правило, не переопределяются.

Практическая часть

Сервер Jakarta Tomcat

Перейдем к практической части лабораторной работы. Для ее выполнения вам понадобится сервер Jakarta Tomcat Server, который можно скачать на web‑узле http://java.sun.com. Установите дистрибутив. Объявите переменные среды JAVA_HOME = «<path>/jdk…» и CATALINA_HOME =»<path>&bsol;jakarta-tomcat…» (Control Panel / System / Advanced / Environment Variables). Теперь Вы имеет установленный tomcat. Если вам надо чтобы какие-то библиотеки подключались в CLASSPATH – положите их в каталог lib. По умолчанию сервер использует порт 8080. Для запуска Tomcat используйте bin&bsol;startup.bat, для остановки – bin&bsol;shutdown.bat. Корневым каталогом для Ваших докуметов будет webapps/ROOT/

Для классов – webapps/ROOT/WEB-INF/classes/. Например, класс myServlet расположенный в этом каталоге вызывается: http://localhost:8080/servlet/myServlet. Класс myPackage.myServlet (расположенный в пакете myPackage и соответственно в каталге webapps/ROOT/WEB-INF/classes/myPackage/) вызывается: http://localhost:8080/servlet/myPackage.myServlet

Примеры

Приведем несколько примеров сервлетов.

// HelloWorld.java выводит на браузер надпись HelloWorld

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HelloWorld extends HttpServlet {public void doGet (HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{response.setContentType («text/html»);PrintWriter out = response.getWriter();out.println («<html>»);out.println («<body>»);out.println («<head>»);out.println («<title>Hello World!</title>»);out.println («</head>»);out.println («<body>»);out.println («<h1>Hello World!</h1>»);out.println («</body>»);out.println («</html>»);}}

Как вы видите, сервлет обрабатывает Get – запрос браузера.

response.setContentType («text/html»); – устанавливаем тип ответаPrintWriter out = response.getWriter(); – открываем поток, при помощи которого происходит запись выходных данных на браузер.

Приведем пример сервлета, обрабатывающего входные параметры.

// код HTML‑страницы, вызывающей сервлет

<form action= «RequestParamExample» method=POST>

First Name:

<input type=text size=20 name=firstname>

<br>

Last Name:

<input type=text size=20 name=lastname>

<br>

<input type=submit>

</form>

// RequestParamExample.java получает входные параметры и выводит на браузер их значения

import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class RequestParamExample extends HttpServlet {public void doPost (HttpServletRequest request, HttpServletResponse res)throws IOException, ServletException{Enumeration e = request.getParameterNames();PrintWriter out = res.getWriter ();while (e.hasMoreElements()) {String name = (String) e.nextElement();String value = request.getParameter(name);out.println (name + «=» + value);}}}

Здесь мы из вызывающей страницы получаем параметры firstname и lastname. В сервлете:

Enumeration e = request.getParameterNames(); – получаем имена всех параметров запроса, затем открываем поток записи н браузер, и до тех пор, пока множество имен не исчерпано, получаем имя параметраString name = (String) e.nextElement();Получаем, значение параметра, зная имяString value = request.getParameter(name);Выводим его на брузерout.println (name + «=» + value);Приведем пример работы с сессиями:import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class SessionExample extends HttpServlet {public void doGet (HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{response.setContentType («text/html»);PrintWriter out = response.getWriter();HttpSession session = request.getSession(true); // добавить атрибут в сессиюString dataName = request.getParameter («dataName»);String dataValue = request.getParameter («dataValue»);session.setAttribute (dataName, dataValue); // вывести значения атрибутов сессииEnumeration e = session.getAttributeNames();while (e.hasMoreElements()) {String name = (String) e.nextElement();String value = session.getAttribute(name).toString();out.println (name + «=» + value);}}}Сервлет обрабатывает Get‑запрос, извлекает значение параметраString dataName = request.getParameter («dataName»);String dataValue = request.getParameter («dataValue»);И добавляет его в сессиюsession.setAttribute (dataName, dataValue);Затем получаем имена всех атрибутов сессии:Enumeration e = session.getAttributeNames();И пишем на браузер их значенияString value = session.getAttribute(name).toString();out.println (name + «=» + value);