Servlet 3.0 ile gelen kullanışlı ozelliklerden birisi de dinamik olarak servlet ekleyebiliyor olmamız. Tomcat sunucuya deploy ettiğimiz uygulamalarımızda web.xml içerisinde eklediğimiz servlet ve servlet mapping işlemlerini ekleyebilmemiz mümkün oluyor. Eklentilere sahip bir sistem yazıyorsanız bu tür bir kullanıma ihtiyaç duyabilirsiniz. Oncelikle addServlet metodu oluşturacağız ve bu metod ile HttpServlet class ın türettiğimiz servletlerimizi eklememiz mümkün oluyor. Servlet 3.0 ile gelen yeni ozelliklerden birkaçı; servlet için dinamik isimlendirme, asenkron kullanım ve annotations kullanımı gibi ozellikler. Dinamik kod ekleme ozelliği oldukça basit ServletContextListener içerisine eklediğimiz addServlet metodu tüm işlemleri gerçekleştiriyor. Diyelim ki http:///myservlet pathinde çalışan bir servlet eklemek istiyoruz.

addServlet("MyServlet",myServletClass);

şeklinde bu metodu kullanabiliriz. Annotations için diğer makaleye goz atmanızı tavsiye ederim.

public class MyContextListener implements ServletContextListener {

    private ServletContext sc;

    @Override
    public void contextInitialized(ServletContextEvent sce) {
            	this.sc = sce.getServletContext();
		
		/*
		* Add MyServlet */
		Class myServletClass = new MyServletClass();
		addServlet("MyServlet",myServletClass);
	}

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }

    /**
    * Add servlet and map it dynamically
    */
    private void addServlet(String servletName,Class servletClass)
    {

		/*
		* Servlet path
		*/
		String servletMapping = "/" + servletName.toLowerCase();

		/*
		* Dynamically register the servlet class
		*/
		ServletRegistration.Dynamic sr = sc.addServlet(servletName, servletClass);
	
		/*
		* Asynchronous support
		*/
		sr.setAsyncSupported(true);

		/*
		* Add mapping for servlet
		*/
		sr.addMapping(servletMapping);
    }
}