The widely accepted technology to build web application, Servlets, has seen new features and APIs in its store with the release of version Servlet 3.0 specs. This release is crammed with stirring feature for new age web development.
The specification focuses on following feature:
• Ease of development
• Plug-ability and extensibility
• Asynchronous support
• Security enhancement
In this article(Servlet 3.0 part-1), I would keep the focus on defining Servlet, Filters and Listeners using annotations and will try to put my thougts on programmatically adding Servlet, Filters and Listeners to ServletContext object in Servlet 3.0 (part-2).
According to specs 3.0, deployment descriptor is optional. Servlets and other components can be configured using annotations.
All annotations used in Servlet 3.0 can be found under package ‘javax.servlet.annotation’.
For comparison, i have put code snippets for writing servlet and its components in old Servlet 2.5 API and same components in new Servlet 3.0. In 2.5 Web container will initialize the components only if you configure the details in deployment descriptor.
• Servlet:
public class ServletA extends HttpServlet {
//A GET method
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
//code to process request
}
Deployment Descriptor (web.xml) Entry
ServletA
com.jb.ServletA
ServletA
/ServletA
Here is a much simplified code for servlet written in Servlet 3.0
@WebServlet(name="ServletA", urlPatterns={"/ServletA"})
public class ServletA extends HttpServlet {
@ Override
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
//code to process request.
}
}
Deployment Descriptor (web.xml) Entry
Optional
• Filters
public class FilterA implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
//code snippets …
}
Deployment Descriptor (web.xml) Entry
FilterA
com.jb.FilterA
FilterA
/ServletA
Configuring Filter in Servlet 3.0
@WebFilter(filterName="FilterA", urlPatterns={"/ServletA"})
public class FilterA implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
//filter code here…
}
}
Deployment Descriptor (web.xml) Entry
Optional
• Listeners
public class ListenerA implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
Deployment Descriptor (web.xml) Entry
com.jb.ListenerA
Configuring Listeners in Servlet 3.0
@WebListener()
public class ListenerA implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
Deployment Descriptor (web.xml) Entry
Optional
• Passing Init Params in Servlet 3.0 has a simple syntax too.
@WebServlet(name="ServletA",
urlPatterns={"/ServletA"},
initParams={@WebInitParam(name="param1", value="paramvalue")} // passing init params to servlet ServletA
)
public class ServletA extends HttpServlet {
//Servlet code …
}
Continued in Servlet 3.0 (part-2)...