dist目录的基本结构是什么,它被构建为Tomcat的.war文件?

时间:2011-04-06 19:21:22

标签: java tomcat

准备将dist目录转换为.war文件时,创建目录结构的理想方法是什么?

1 个答案:

答案 0 :(得分:2)

在更复杂的项目中,我知道在源代码中有一个webapp目录,如下所示:

my-webapp/
my-webapp/WEB-INF/
my-webapp/WEB-INF/web.xml
my-webapp/WEB-INF/lib/
my-webapp/WEB-INF/classes/
my-webapp/WEB-INF/jsp/my.jsp
my-webapp/WEB-INF/tld/my.tld

然后,using Ant,我创建一个临时的暂存目录并使用它来构建战争:

<mkdir dir="${staging.dir}"/>
<copy todir="${staging.dir}">
  <fileset dir="${src.dir}/my-webapp" includes="**/*"/>
</copy>

<war destfile="my-webapp.war" webxml="${staging.dir}/WEB-INF/web.xml">
  <fileset dir="${staging.dir}" includes="**/*"/>
  <classes dir="${build.dir}"/>
  <lib dir="${lib.dir}"/>
</war>

但是,如果您的项目更简单(没有JSP,资源等),您可能只能在源中没有定义的webapp目录的情况下离开。您可以在源代码树中将web.xml放在适当的位置,将<war>任务指向它,并相应地指定类/ lib目录。


关于您在评论中的澄清,Tomcat(以及大多数容器)期望得到类似于以下内容的结构:

my-webapp/WEB-INF/
my-webapp/WEB-INF/lib/     (for jar files)
my-webapp/WEB-INF/classes/ (for class files)
my-webapp/WEB-INF/web.xml  (deployment descriptor)

Tomcat文档 section on Deployment 对这些内容也有很好的解释。

值得关注:您放在WEB-INF下的任何内容都无法直接访问(例如通过网址)。例如:

  • 如果您将JSP文件放在my-webapp/jsp中,则可以直接访问它们,例如http://example.com/my-webapp/my.jsp
  • 如果您将JSP文件放在my-webapp/WEB-INF/jsp中,您将无法通过上一个项目符号中的URL访问它们。您需要提供一种方法来获取它们,例如,通过从Servlet中转发它们。

我更喜欢我的JSP文件在WEB-INF中,因为我将它们视为MVC结构中的视图,并让我的控制器(Servlets)决定如何访问和呈现它们。