2

如何以编程方式映射多个 Servlet 3.0(不使用部署描述符 web.xml)

我所拥有的是下面的代码,效果很好......但我找不到任何方法可以将多个 servlet 添加/映射到 url 模式:

@WebListener
public class NewServletListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent sce) {
    ServletContext sc = sce.getServletContext();
    ServletRegistration sr = sc.addServlet("test", "BusinessObjects.test");  
    sr.addMapping("/test"); 
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}

我需要的是某种这样的:

ServletRegistration sr = sc.addServlet("testA", "BusinessObjects.testA");  
sr.addMapping("/testA"); 

ServletRegistration sr2 = sc.addServlet("testB", "BusinessObjects.testB");  
sr2.addMapping("/testB"); 

ServletRegistration sr3 = sc.addServlet("testC", "BusinessObjects.testC");  
sr3.addMapping("/testC");

等等...

但是这种方式行不通,我尝试了一个数组...我做错了什么?

非常感谢你的帮助

4

1 回答 1

5

您应该使用javax.servlet.ServletRegistration.Dynamic来注册您的 servlet,而不是ServletRegistration这样代码可能如下所示:

@WebListener
public class MyContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent event) {
    }

    @Override
    public void contextInitialized(ServletContextEvent event) {
            ServletContext context = event.getServletContext();

            Dynamic dynamic = context.addServlet("ServletA", ServletA.class);
            dynamic.addMapping("/ServletA");

            Dynamic dynamic2 = context.addServlet("ServletB", ServletB.class);
            dynamic2.addMapping("/ServletB");
    }

}

您将同时拥有ServletA并以ServletB编程方式注册。

BR。

于 2014-02-15T13:48:07.547 回答