Spring Rest控制器:部署到Tomcat

时间:2013-05-07 21:26:56

标签: spring spring-mvc tomcat7

我想使用Spring Rest在我的基于Spring的多模块项目中开发RESTful API。为此,我有一个webapp模块和一些其他业务/数据层模块。例如,这将是我简化的项目结构:

myProject
  -- webapp (war-packaged)
  -- business (jar-packaged)
  -- data (jar-packaged)

业务模块依赖于数据模块,业务模块上的webapp也是如此。 Webapp成功导入每个模块的应用程序上下文。现在我希望能够使用一些业务模块类,根据从数据库中检索到的某些数据进行某种计算,以便提供某种资源。我看过的所有例子都非常简单,这种多模块方法根本没有涉及。

有什么问题?就我而言,Tomcat按特定顺序加载类。具体来说,它首先加载WEB-INF / classes,然后才加载WEB-INF / lib(其中放置了所有webapp依赖项,在这种情况下为业务模块)。那么,我的问题就出现了。 我应该在哪里放置我的Controller类?如果我将它们放在webapp模块中,我将无法自动装配任何业务模块bean,因为Tomcat将抛出 ClassNotFoundException 我部署了webapp战争(至少这是我经历过的行为)。

答案可能很简单,但我对Spring及其世界都很陌生!

提前谢谢大家。

2 个答案:

答案 0 :(得分:0)

您的业务和数据jar将进入WEB-INF / lib目录。然后,在部署应用程序时,这些jar将自动添加到应用程序的CLASSPATH中。您需要将应用程序部署为WAR文件。

理想情况下,您可以构建业务和数据jar,将它们添加到某个存储库,然后构建系统会将每个jar的正确版本拉到WEB-INF / lib目录中。

至于最初的问题,控制器类进入webapp / src目录。

答案 1 :(得分:0)

假设您正在使用Maven 2.确保您的程序集创建者(例如maven war模块)在最终的.war文件的WEB-INF / lib目录中包含您的依赖.jar文件。这应该是默认程序(per:http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#dependentWarIncludes)。另一个问题是,您的子项目(业务和数据)是否甚至创建了jar,以便它们可以包含在WAR输出中。

如果您对该war文件的内容有疑问,请通过执行来浏览它的列表 从命令行'jar tvf $ WAR_FILENAME'并观察WEB-INF / lib目录内容。您应该在那里看到您的业务和数据罐。进一步展开你的war文件,然后浏览业务和数据jar的内容(使用'jar xvf $ FILENAME'在新目录中爆炸)。

希望这有帮助!