在 Undertow 中部署基于 Spring 的 Web 应用程序
Deploy Spring-based web app in Undertow
我正在尝试将我们基于 Spring 的 Web 应用程序从 Tomcat 8 迁移到 Undertow。
我们使用 Spring 的 WebApplicationInitializer 对 Spring-MVC 和 HibernateTransactionManager 进行编程配置。
有一个ServletContainerInitializerInfo
class(Javadoc) that seems to serve my purpose, e.g I can instantiate it and then follow the steps given in Undertow docs (link)启动服务器:
ServletContainerInitializerInfo sciInfo =
new ServletContainerInitializerInfo(containerInitializerClass,
instanceFactory, handlesTypes);
DeploymentInfo servletBuilder = Servlets.deployment()
.addServletContainerInitalizer(sciInfo);
DeploymentManager manager = Servlets.defaultContainer()
.addDeployment(servletBuilder);
manager.deploy();
PathHandler path = Handlers.path(Handlers.redirect("/myapp"))
.addPrefixPath("/myapp", manager.start());
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(path)
.build();
server.start();
问题是我不知道在调用 ServletcontainerInitializerInfo
构造函数时用什么来替代 instanceFactory
和 handlesTypes
参数。另外,addServletContainerInitalizer
方法的名字拼错了(应该是Initializer而不是Initalizer)
有人可以帮忙吗?
谢谢!
Undertow 在实例化后使用 InstanceFactory<T>
作为依赖注入或对给定 class 的实例进行其他自定义的扩展点。
handlesTypes
参数将是与您的 servlet 容器初始化器上的 @HandlesTypes
注释相对应的所有 classes 的集合。
如果你的初始化器没有 @HandlesTypes
并且不需要依赖注入,你可以简单地试试这个:
MyInitializer initializer = new MyInitializer();
InstanceFactory<MyInitializer> instanceFactory
= new ImmediateInstanceFactory<>(initializer);
ServletContainerInitializerInfo sciInfo =
new ServletContainerInitializerInfo(MyInitializer.class,
instanceFactory, new HashSet<Class<?>>());
我正在尝试将我们基于 Spring 的 Web 应用程序从 Tomcat 8 迁移到 Undertow。
我们使用 Spring 的 WebApplicationInitializer 对 Spring-MVC 和 HibernateTransactionManager 进行编程配置。
有一个ServletContainerInitializerInfo
class(Javadoc) that seems to serve my purpose, e.g I can instantiate it and then follow the steps given in Undertow docs (link)启动服务器:
ServletContainerInitializerInfo sciInfo =
new ServletContainerInitializerInfo(containerInitializerClass,
instanceFactory, handlesTypes);
DeploymentInfo servletBuilder = Servlets.deployment()
.addServletContainerInitalizer(sciInfo);
DeploymentManager manager = Servlets.defaultContainer()
.addDeployment(servletBuilder);
manager.deploy();
PathHandler path = Handlers.path(Handlers.redirect("/myapp"))
.addPrefixPath("/myapp", manager.start());
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(path)
.build();
server.start();
问题是我不知道在调用 ServletcontainerInitializerInfo
构造函数时用什么来替代 instanceFactory
和 handlesTypes
参数。另外,addServletContainerInitalizer
方法的名字拼错了(应该是Initializer而不是Initalizer)
有人可以帮忙吗?
谢谢!
Undertow 在实例化后使用 InstanceFactory<T>
作为依赖注入或对给定 class 的实例进行其他自定义的扩展点。
handlesTypes
参数将是与您的 servlet 容器初始化器上的 @HandlesTypes
注释相对应的所有 classes 的集合。
如果你的初始化器没有 @HandlesTypes
并且不需要依赖注入,你可以简单地试试这个:
MyInitializer initializer = new MyInitializer();
InstanceFactory<MyInitializer> instanceFactory
= new ImmediateInstanceFactory<>(initializer);
ServletContainerInitializerInfo sciInfo =
new ServletContainerInitializerInfo(MyInitializer.class,
instanceFactory, new HashSet<Class<?>>());