- •Раздел 12. Веб-сервера
- •12.2. Стандарт cgi
- •Раздел 13. Технология Java Servlet
- •Пример сервлета
- •Компиляция сервлетов
- •Структура веб-модуля
- •Запуск сервлета
- •Архив веб-модуля
- •13.2. Структура и жизненный цикл сервлета
- •Работа сервлетов в многопоточной среде
- •13.3. Основные классы Servlet api Класс HttpServletRequest (запрос)
- •Класс HttpServletResponse (ответ)
- •Класс HttpServlet (сервлет)
- •Класс ServletContext (взаимодействие с сервлет-контейнером)
- •13.4. Cookies и сессии
- •13.5. Отладка сервлетов
- •Раздел 14. Технология JavaServer Pages
- •14.1. Введение в jsp
- •14.2. Жизненный цикл jsp-страниц
- •Действия
- •14.4. Язык выражений
- •Предопределенные объекты
- •14.5. Библиотеки тегов
- •Раздел 14. Технология JavaServer Pages
- •14.1. Введение в jsp
- •14.2. Жизненный цикл jsp-страниц
- •Действия
- •14.4. Язык выражений
- •Предопределенные объекты
- •14.5. Библиотеки тегов
Раздел 13. Технология Java Servlet
Java Servlet (или просто сервлет) — это Java-класс, который выполняется на стороне веб-сервера и обрабатывает запросы клиентов. Веб-сервер, поддерживающий работу сервлетов, называют сервлет-контейнером (например, Tomcat и Jetty).
Сервлет — наследник абстрактного класса javax.servlet.http.HttpServlet. Пакеты javax.servlet и javax.servlet.http (так называемое Servlet API) входят в состав J2EE.
Сервлет-контейнер при получении запроса от клиента вызывает соответствующий метод у сервлета (метод service), который обрабатывает запрос и генерирует ответ. Методу service в параметрах передаются объекты, которые позволяют получить информацию о запросе и сгенерировать ответ.
Сервлеты — это технология по назначению аналогичная CGI, но ориентированная на язык Java. Основное отличие сервлетов от CGI в том, что для обработки каждого запроса не создается новый процесс, а все запросы обрабатываются одним экземпляром сервлета в рамках одного процесса сервлета-контейнера. Это существенно влияет на производительность сервлетов и общую архитектуру веб-приложения.
13.1. Веб-модули
Пример сервлета
Ниже приводится пример простого сервлета, который выводит форму для ввода имени; если имя уже введено, то сервлет выводит приветствие. Внизу страницы выводится счетчик с количеством обращений к странице.
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet {
int counter = 0;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
request.setCharacterEncoding("windows-1251");
response.setContentType("text/html; charset=windows-1251");
PrintWriter out = response.getWriter();
String name = request.getParameter("name"); // имя пользователя
if (name != null && !name.equals("")) // если введено имя...
out.printf("<h1>Здравствуйте, %s!</h1>", name);
else
out.printf("<form action=\"%s\">Ваше имя: " + "<input type=text name=name><input type=submit></form>",
request.getRequestURI()
);
out.printf("<div align=right>%d</div>", ++counter); // счетчик
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
doGet(request,response);
}
}
Метод doGet вызывается при HTTP-запросе типа GET, метод doPost — при HTTP-запросе типа POST. Этим методам передается два параметра: первый — это информация о запросе, второй — объект для формирования ответа.
Компиляция сервлетов
Чтобы разместить на веб-сервере сервлет, его предварительно необходимо откомпилировать. Для этого понадобится библиотека классов Servlet API (пакеты javax.servlet, javax.servlet.http). Эти пакеты входят в состав J2EE, а также поставляются вместе с веб-сервером Tomcat (путь: common/lib/servlet-api.jar).
Чтобы Java-компилятор находил и использовал нужную библиотеку классов, в переменной окружения CLASSPATH следует указать путь к библиотеке (jar-архиву) или скопировать библиотеку в каталог JRE\lib\ext (из вашей инсталляции JDK). При использовании интегрированной среды разработки (например, Eclipse или NetBeans), следует добавить библиотеку к проекту средствами самой среды.