我正在开发一个使用类似模块的方法的应用程序。在运行时加载了几个模块。一个模块是Tomcat Web服务器,另一个模块是使用Spring的RESTful API的实现。 我想在运行时将整个基于Spring的RESTful API作为servlet添加到Tomcat。这可能吗?
我已经阅读过关于Spring Boot的内容,它看起来很有前途,但我只找到有关创建一个可以部署到Tomcat的WAR文件的信息。但是,这是不可能的,因为RESTful API需要是一个模块。谢谢你的帮助!
答案 0 :(得分:0)
webserver模块运行以下代码来创建和配置 一个Tomcat网络服务器。
Tomcat tomcat = new Tomcat();
// this defines Tomcat's working directory
File base = new File(System.getProperty("java.io.tmpdir"));
Context rootContext = tomcat.addContext("", base.getAbsolutePath());
// more configuration ...
REST API模块按如下方式创建和配置Spring应用程序上下文:
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(SomeAnnotatedClass.class);
context.register(AnotherAnnotatedClass.class);
// more configuration ...
context.refresh();
// this is the servlet that we need to add to Tomcat
DispatcherServlet servlet = new DispatcherServlet(context);
现在我们将这些内容放在一起并将调度程序servlet添加到Tomcat。
Context rootContext = getTomcatsRootContextFromSomewhere();
Servlet dispatcherServlet = getDispatcherServletFromSomewhere();
// add the dispatcher servlet to the root context
Tomcat.addServlet(rootContext, "mySpringService", dispatcherServlet);
// add a mapping to the dispatcher servlet
rootContext.addServletMapping("/api/*", "mySpringService");
我相信这不是最佳解决方案,因为我仍然是Spring / Tomcat noob。如果你有一些提示和改进想法,我会非常感激。
我希望能帮助有这个特殊问题的人。