如何在 Java EE 中以编程方式添加多个 servlet

Oky*_*kyo 2 java servlets jakarta-ee

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

我所拥有的是非常有效的代码……但是我找不到任何将多个 servlet 添加/映射到 url-pattern 的方法:

@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.
}
}
Run Code Online (Sandbox Code Playgroud)

我需要的是这样的:

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");
Run Code Online (Sandbox Code Playgroud)

等等...

但这种方式不起作用,我事件尝试了一个数组......我做错了什么?

非常感谢你的帮助

tma*_*wen 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");
    }

}
Run Code Online (Sandbox Code Playgroud)

您将以编程方式同时注册ServletAServletB注册。

BR。