💬 Спросят с вероятностью 6%
Спецификация Servlet 3.0, выпущенная как часть Java EE 6, внесла множество новых особенностей и улучшений в Java Servlet API. Основные нововведения включают поддержку аннотаций, асинхронную обработку запросов, облегчение настройки сервлетов и фильтров, а также улучшенную безопасность. Рассмотрим эти особенности подробнее:
1️⃣ Поддержка аннотаций
Введены аннотации, которые позволяют конфигурировать сервлеты, фильтры и слушатели без необходимости редактирования файла
web.xml. Это значительно упрощает процесс разработки и улучшает читаемость кода.➕ `@WebServlet`: для регистрации сервлета.
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
// Реализация сервлета
}
➕
@WebFilter: для регистрации фильтра.import javax.servlet.annotation.WebFilter;
import javax.servlet.Filter;
@WebFilter("/*")
public class ExampleFilter implements Filter {
// Реализация фильтра
}
➕
@WebListener: для регистрации слушателя.import javax.servlet.annotation.WebListener;
import javax.servlet.ServletContextListener;
@WebListener
public class ExampleListener implements ServletContextListener {
// Реализация слушателя
}
2️⃣ Асинхронная обработка запросов
Servlet 3.0 добавляет поддержку асинхронной обработки запросов, что позволяет сервлетам обрабатывать долгосрочные задачи, не блокируя основной поток. Это полезно для улучшения производительности и масштабируемости.
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = "/asyncExample", asyncSupported = true)
public class AsyncExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
final AsyncContext asyncContext = request.startAsync();
asyncContext.start(() -> {
try {
// Долгосрочная задача
Thread.sleep(5000);
response.getWriter().println("Asynchronous processing complete.");
asyncContext.complete();
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
➕ Динамическое добавление компонентов
Servlet 3.0 позволяет динамически добавлять сервлеты, фильтры и слушатели программно в
ServletContextListener или в любое другое место, где доступен ServletContext.import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRegistration;
public class DynamicServletRegistrationListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
ServletRegistration.Dynamic registration = context.addServlet("dynamicServlet", new ExampleServlet());
registration.addMapping("/dynamic");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// Очистка ресурсов (если необходимо)
}
}
Servlet 3.0 ввел множество полезных особенностей, таких как поддержка аннотаций для конфигурации сервлетов, фильтров и слушателей, асинхронная обработка запросов для улучшения производительности, динамическое добавление компонентов, улучшенная безопасность и общая легкость настройки. Эти нововведения значительно упростили разработку и повысили гибкость и масштабируемость веб-приложений.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых