Сервлет является Java-интерфейсом, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ.
Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов. Для таких приложений технология Java Servlet определяет HTTP-специфичные сервлет классы.
Пакеты javax.servlet
и javax.servlet.http
обеспечивают интерфейсы и классы для создания сервлетов.
Первая спецификация сервлетов была создана в JSR-315).
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 "Пример сервлета"; } }
Серверы
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 |
|
История | ||
Свойства языка |
Байткод • Синтаксис • Апплеты • Сервлеты • Мидлеты • JavaServer Pages • Web Start • Enterprise JavaBeans |
|
Скриптовые языки |
Java Tcl • Jython • JRuby • BeanShell • Groovy • Judoscript • Sleep • Bean Scripting Framework • Yoix • Rhino |
|
Конференции Java |
Сервлет (Java).