- Сервлет (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. Текущая спецификация на 24 апреля 2012 года — Servlet 3.0 (описана в JSR-315).
Хронология Servlet API Servlet API версия Релиз Платформа Важнейшие изменения Servlet 3.0 Декабрь 2009 JavaEE 6, JavaSE 6 Pluggability, простота разработки, асинхронные сервлеты, безопасность, загрузка файлов Servlet 2.5 Сентябрь 2005 JavaEE 5 , J2SE 5.0 Требует J2SE 5.0, поддержка annotations
Servlet 2.4 Ноябрь 2003 J2EE 1.4, J2SE 1.3 web.xml использует XML Schema Servlet 2.3 Август 2001 J2EE 1.3, J2SE 1.2 Появление Filter
Servlet 2.2 Август 1999 J2EE 1.2, J2SE 1.2 Становится частью J2EE, предлагает независимые веб-приложения в .war файлах Servlet 2.1 Ноябрь 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
- GlassFish
- OpenGSE
- IBM WebSphere
Ссылки
- Java Servlet Technology (англ.) — Официальная домашняя страница
- Введение в технологию Java Servlet
- Нововведения в стандарте Servlet API 2.5
Java Платформы Технологии Sun Java • Java Development Kit • OpenJDK • WTK • Java Virtual Machine • JavaFX • JAXP • Squawk
Основные сторонние технологии GNU Classpath • GNU компилятор для Java • Kaffe • TopLink • Apache Harmony • Apache Struts • Spring Framework • Dalvik • Hibernate • JBoss • Processing • Dozer • AspectJ
История История версий Java • Критика Java • Java Community Process • Sun Microsystems • Свободные реализации Java
Свойства языка Байткод • Синтаксис • Апплеты • Сервлеты • Мидлеты • JavaServer Pages • Web Start • Enterprise JavaBeans
Скриптовые языки Конференции Java JavaOne
Категории:- Java
- Java Enterprise Edition
- Концепции языков программирования
- В случае отсутствия сервлета в контейнере.
Wikimedia Foundation. 2010.