如何将基于Spring的RESTful服务作为Servlet添加到Tomcat

时间:2016-01-13 02:57:00

标签: java spring rest spring-mvc tomcat

我正在开发一个使用类似模块的方法的应用程序。在运行时加载了几个模块。一个模块是Tomcat Web服务器,另一个模块是使用Spring的RESTful API的实现。 我想在运行时将整个基于Spring的RESTful API作为servlet添加到Tomcat。这可能吗?

我已经阅读过关于Spring Boot的内容,它看起来很有前途,但我只找到有关创建一个可以部署到Tomcat的WAR文件的信息。但是,这是不可能的,因为RESTful API需要是一个模块。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

创建和配置Tomcat Web服务器

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 ...

创建和配置Spring应用程序上下文

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);

使用Tomcat部署Spring服务

现在我们将这些内容放在一起并将调度程序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。如果你有一些提示和改进想法,我会非常感激。

我希望能帮助有这个特殊问题的人。