Сервлет (Java)
Сервлет является интерфейсом Java, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ.
Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов. Для таких приложений технология Java Servlet определяет HTTP-специфичные сервлет классы.
Пакеты javax.servlet
и javax.servlet.http
обеспечивают интерфейсы и классы для создания сервлетов.
Первая спецификация сервлетов была создана в Sun Microsystems (версия 1.0 была закончена в июне 1997). Начиная с версии 2.3, спецификация сервлетов разрабатывалась под руководством Java Community Process. Стандарт JSR 53 определял как Servlet 2.3, так и спецификацию JavaServer Page 1.2. JSR 154 включает в себя спецификации Servlet 2.4 и 2.5. Текущая спецификация на 13 июня 2013 года — Servlet 3.1 (описана в [jcp.org/aboutJava/communityprocess/final/jsr340/index.html JSR-340]).
Хронология Servlet API
Servlet API версия | Релиз | Платформа | Важнейшие изменения |
---|---|---|---|
Servlet 3.1 | [jcp.org/en/jsr/detail?id=340 Май 2013] | JavaEE 7, JavaSE 7 | Неблокирующий ввод-вывод, поддержка нестандартных протоколов поверх HTTP |
Servlet 3.0 | [www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html Декабрь 2009] | JavaEE 6, JavaSE 6 | Pluggability, простота разработки, асинхронные сервлеты, безопасность, загрузка файлов |
Servlet 2.5 | [www.javaworld.com/javaworld/jw-01-2006/jw-0102-servlet.html Сентябрь 2005] | JavaEE 5 , J2SE 5.0 | Требует J2SE 5.0, поддержка annotations
|
Servlet 2.4 | [www.javaworld.com/jw-03-2003/jw-0328-servlet.html Ноябрь 2003] | J2EE 1.4, J2SE 1.3 | web.xml использует XML Schema |
Servlet 2.3 | [www.javaworld.com/jw-01-2001/jw-0126-servletapi.html Август 2001] | J2EE 1.3, J2SE 1.2 | Появление Filter
|
Servlet 2.2 | [www.javaworld.com/jw-10-1999/jw-10-servletapi.html Август 1999] | J2EE 1.2, J2SE 1.2 | Становится частью J2EE, предлагает независимые веб-приложения в .war файлах |
Servlet 2.1 | [www.javaworld.com/jw-12-1998/jw-12-servletapi.html Ноябрь 1998] | не оговорено | Первая официальная спецификация, добавлены RequestDispatcher , ServletContext
|
Servlet 2.0 | JDK 1.1 | Часть Java Servlet Development Kit 2.0 | |
Servlet 1.0 | Июнь 1997 |
Жизненный цикл Сервлета
Жизненный цикл сервлета состоит из следующих шагов:
- В случае отсутствия сервлета в контейнере.
- Класс сервлета загружается контейнером.
- Контейнер создает экземпляр класса сервлета.
- Контейнер вызывает метод
init()
. Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл методinit()
вызывается только один раз.
- Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод
service()
для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса. - В случае если контейнеру необходимо удалить сервлет, он вызывает метод
destroy()
, который снимает сервлет из эксплуатации. Подобно методуinit()
, этот метод тоже вызывается единожды за весь цикл сервлета.
Пример
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class NewServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Параметр
String parameter = request.getParameter("parameter");
// Старт HTTP сессии
HttpSession session = request.getSession(true);
session.setAttribute("parameter", parameter);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Заголовок</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Пример сервлета"+parameter+"</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
public String getServletInfo() {
return "Пример сервлета";
}
}
См. также
Серверы
- Jetty
- Apache Tomcat
- JBoss (WildFly)
- GlassFish
- OpenGSE
- IBM WebSphere
Напишите отзыв о статье "Сервлет (Java)"
Ссылки
- [www.oracle.com/technetwork/java/javaee/servlet/index.html Java Servlet Technology (англ.)] — Официальная домашняя страница
- [www.quizful.net/post/new-in-servlet-api-v25 Нововведения в стандарте Servlet API 2.5]
- [blogs.oracle.com/arungupta/entry/what_s_new_in_servlet What’s new in Servlet 3.1 (англ.)]
|
Отрывок, характеризующий Сервлет (Java)
И в доказательство неопровержимости этого довода складки все сбежали с лица.Князь Андрей вопросительно посмотрел на своего собеседника и ничего не ответил.
– Зачем вы поедете? Я знаю, вы думаете, что ваш долг – скакать в армию теперь, когда армия в опасности. Я это понимаю, mon cher, c'est de l'heroisme. [мой дорогой, это героизм.]
– Нисколько, – сказал князь Андрей.
– Но вы un philoSophiee, [философ,] будьте же им вполне, посмотрите на вещи с другой стороны, и вы увидите, что ваш долг, напротив, беречь себя. Предоставьте это другим, которые ни на что более не годны… Вам не велено приезжать назад, и отсюда вас не отпустили; стало быть, вы можете остаться и ехать с нами, куда нас повлечет наша несчастная судьба. Говорят, едут в Ольмюц. А Ольмюц очень милый город. И мы с вами вместе спокойно поедем в моей коляске.
– Перестаньте шутить, Билибин, – сказал Болконский.
– Я говорю вам искренно и дружески. Рассудите. Куда и для чего вы поедете теперь, когда вы можете оставаться здесь? Вас ожидает одно из двух (он собрал кожу над левым виском): или не доедете до армии и мир будет заключен, или поражение и срам со всею кутузовскою армией.
И Билибин распустил кожу, чувствуя, что дилемма его неопровержима.
– Этого я не могу рассудить, – холодно сказал князь Андрей, а подумал: «еду для того, чтобы спасти армию».
– Mon cher, vous etes un heros, [Мой дорогой, вы – герой,] – сказал Билибин.
В ту же ночь, откланявшись военному министру, Болконский ехал в армию, сам не зная, где он найдет ее, и опасаясь по дороге к Кремсу быть перехваченным французами.
В Брюнне всё придворное население укладывалось, и уже отправлялись тяжести в Ольмюц. Около Эцельсдорфа князь Андрей выехал на дорогу, по которой с величайшею поспешностью и в величайшем беспорядке двигалась русская армия. Дорога была так запружена повозками, что невозможно было ехать в экипаже. Взяв у казачьего начальника лошадь и казака, князь Андрей, голодный и усталый, обгоняя обозы, ехал отыскивать главнокомандующего и свою повозку. Самые зловещие слухи о положении армии доходили до него дорогой, и вид беспорядочно бегущей армии подтверждал эти слухи.
«Cette armee russe que l'or de l'Angleterre a transportee, des extremites de l'univers, nous allons lui faire eprouver le meme sort (le sort de l'armee d'Ulm)», [«Эта русская армия, которую английское золото перенесло сюда с конца света, испытает ту же участь (участь ульмской армии)».] вспоминал он слова приказа Бонапарта своей армии перед началом кампании, и слова эти одинаково возбуждали в нем удивление к гениальному герою, чувство оскорбленной гордости и надежду славы. «А ежели ничего не остается, кроме как умереть? думал он. Что же, коли нужно! Я сделаю это не хуже других».
Князь Андрей с презрением смотрел на эти бесконечные, мешавшиеся команды, повозки, парки, артиллерию и опять повозки, повозки и повозки всех возможных видов, обгонявшие одна другую и в три, в четыре ряда запружавшие грязную дорогу. Со всех сторон, назади и впереди, покуда хватал слух, слышались звуки колес, громыхание кузовов, телег и лафетов, лошадиный топот, удары кнутом, крики понуканий, ругательства солдат, денщиков и офицеров. По краям дороги видны были беспрестанно то павшие ободранные и неободранные лошади, то сломанные повозки, у которых, дожидаясь чего то, сидели одинокие солдаты, то отделившиеся от команд солдаты, которые толпами направлялись в соседние деревни или тащили из деревень кур, баранов, сено или мешки, чем то наполненные.
На спусках и подъемах толпы делались гуще, и стоял непрерывный стон криков. Солдаты, утопая по колена в грязи, на руках подхватывали орудия и фуры; бились кнуты, скользили копыта, лопались постромки и надрывались криками груди. Офицеры, заведывавшие движением, то вперед, то назад проезжали между обозами. Голоса их были слабо слышны посреди общего гула, и по лицам их видно было, что они отчаивались в возможности остановить этот беспорядок. «Voila le cher [„Вот дорогое] православное воинство“, подумал Болконский, вспоминая слова Билибина.