Middle
What are the main features introduced in the Servlet 3 specification?
sobes.tech AI
Answer from AI
Main features of Servlet 3:
- Asynchronous Processing: Allows a servlet to delegate request processing to another thread, freeing the current thread to handle new requests and improving scalability.
- Annotations: Ability to configure servlets, filters, and listeners using annotations
@WebServlet,@WebFilter,@WebListenerinstead of the deployment descriptorweb.xml. - Pluggability: Enables adding servlets, filters, and listeners programmatically during web application startup or via web-fragment.xml.
- Resource Provisioning: Specifies mechanisms for discovering and processing JAR files in WEB-INF/lib containing web application resources (Tld, web-fragment.xml, static resources).
- Improved File Upload Support: Simplifies handling multipart requests used for file uploads with the
@MultipartConfigannotation.
Example of asynchronous processing:
// servlet
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;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(urlPatterns = "/async", asyncSupported = true) // Annotation and support for asynchronous processing
public class AsyncServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.println("Synchronous part...");
AsyncContext asyncContext = request.startAsync(); // Start asynchronous context
asyncContext.start(() -> { // Execute asynchronous task in another thread
try {
Thread.sleep(5000); // Simulate long operation
PrintWriter asyncOut = asyncContext.getResponse().getWriter();
asyncOut.println("Asynchronous part executed!");
asyncContext.complete(); // Complete asynchronous context
} catch (InterruptedException | IOException e) {
e.printStackTrace();
}
});
out.println("Synchronous part finished.");
}
}
Example of using the @WebServlet annotation:
// servlet
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/hello") // Servlet configuration using annotation
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("Hello from Servlet 3!");
}
}