· Метод init(), объявленный интерфейсом Servlet, принимает объект ServletConfig в качестве его параметра;
· Метод getServletConfig(), объявленный интерфейсом Servlet, возвращает объект ServletConfig.
Манера, в которой параметры инициализации предоставляются сервлету, зависит от сервера.
Пакет javax.servlet содержит ряд интерфейсов и классов, облегчающих построение сервлетов, которые работают с HTTP – запросами и ответами.
Интерфейс | Описание |
HttpServletRequest | Используется для чтения данных из HTTP – запроса клиента. |
HttpServletResponse | Используется для записи данных в HTTP – ответ клиенту. |
HttpSession | Позволяет читать и записывать данные сеанса |
HttpSessionBindingListener | Информирует объект о том, что он связан или не связан с сеансом. |
HttpSessionContext | Обеспечивает управляемость сеансов |
Класс | Описание |
Cookie | Позволяет сохранять информацию состояния на машине клиента |
HttpServlet | Обеспечивает методы для обработки запросов и ответов HTTP |
HttpSessionBindingEvent | Указывает на наличие или отсутствие связи блока прослушивания с сеансовым значением |
HttpUtils | Обеспечивает методы утилит для сервлетов. |
Методы, которым метод 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 Server, который можно скачать на web‑узле http://java.sun.com. Установите дистрибутив. Объявите переменные среды JAVA_HOME = «<path>/jdk…» и CATALINA_HOME =»<path>\jakarta-tomcat…» (Control Panel / System / Advanced / Environment Variables). Теперь Вы имеет установленный tomcat. Если вам надо чтобы какие-то библиотеки подключались в CLASSPATH – положите их в каталог lib. По умолчанию сервер использует порт 8080. Для запуска Tomcat используйте bin\startup.bat, для остановки – bin\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);