从 Servlet 3.0 开始,您可以使用ServletContext#addServlet()
它。
servletContext.addServlet("hello", test.HelloServlet.class);
根据您正在开发的内容,您可以使用两个挂钩来运行此代码。
如果您正在开发可公开重用的模块化 Web 片段 JAR 文件,例如 JSF 和 Spring MVC 等现有框架,请使用ServletContainerInitializer
.
public class YourFrameworkInitializer implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> c, ServletContext servletContext) throws ServletException {
servletContext.addServlet("hello", test.HelloServlet.class);
}
}
或者,如果您将其用作 WAR 应用程序的内部集成部分,则使用ServletContextListener
.
@WebListener
public class YourFrameworkInitializer implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
event.getServletContext().addServlet("hello", test.HelloServlet.class);
}
// ...
}
您只需要确保您web.xml
与 Servlet 3.0 或更高版本(因此不是 Servlet 2.5 或更早版本)兼容,否则 servletcontainer 将以符合声明版本的回退方式运行,您将失去所有 Servlet 3.0 功能。
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
>
<!-- Config here -->
</web-app>
也可以看看: