Webapp文件组织约定(开发结构)
Posted
技术标签:
【中文标题】Webapp文件组织约定(开发结构)【英文标题】:Webapp file organization convention (development structure) 【发布时间】:2012-12-21 08:36:52 【问题描述】:对于我正在开发的 webapps,我通常使用以下文件组织,因为我认为它尊重约定:
src
|-- main
|-- resources
| |-- *.properties
| |-- *.xml
| |-- spring
| |-- applicationContext.xml (main application context config file)
|-- webapp
|-- WEB-INF
|-- spring
| |-- spring-mvc.xml (web application context config file, delegated to manage only the web part)
| |-- spring-security-http.xml (web security config)
|-- static
| |-- *.css
| |-- *.js
|-- views
| |-- *.jsp
|-- web.xml (deployment configuration)
我想尝试的是按照以下结构组织我的文件:
src
|-- main
|-- resources
| |-- *.properties
| |-- *.xml
| |-- web.xml
| |-- spring
| |-- applicationContext.xml
| |-- spring-mvc.xml
| |-- spring-security-http.xml
|-- webapp
|-- WEB-INF
|-- static
| |-- *.css
| |-- *.js
|-- views
|-- *.jsp
当然,在打包 webapp 时,文件将被重新定位到它们必须的位置(例如 WEB-INF 文件夹中的 web.xml 文件)。我想像上面那样重新组织我的 webapps 的原因是,我发现将所有 *.xml 配置文件放在同一个位置更方便,而不是在这里和那里有一些。你认为打破我的初始结构是个坏主意吗?如果是,为什么?为什么将所有 Web 配置文件都放在 WEB-INF 文件夹中如此重要?
PS:从技术上讲,我知道如何很好地链接 webapp 的类路径中的所有文件。问题更多的是关于惯例和个人/专业经验的反馈。
【问题讨论】:
【参考方案1】:你可以创建Java Web项目是一些流行的IDE,比如Eclipse、NetBeans、IntelliJ IDEA,看看典型的Java Web应用结构。
而且开发结构和包装结构是有区别的。 在开发应用程序时,您几乎可以使用您喜欢的任何结构。但是您必须按照特定规则打包 Java EE Web 应用程序。
详见官方Java EE教程:
The Java EE 8 Tutorial: Packaging The Java EE 7 Tutorial: Packaging The Java EE 6 Tutorial: Packaging Applications The Java EE 6 Tutorial: Example Directory Structure (这里忽略与 NetBeans 相关的信息)这里还有推荐的用于构建使用 Java 2 平台企业版开发的应用程序的约定(虽然过时但可能有用):Java Blueprints Guidelines. Project Conventions for Enterprise Applications
这里有一个来自上述 Java 蓝图的示例:
更新
这是我的一个 Java Web 应用程序项目中的示例。 例如,我将所有与 Spring 相关的配置文件存储在 WEB-INF 内专门创建的 spring 文件夹中。在 spring 文件夹中,我创建了更多文件夹以更好地组织我的应用程序。同样,这只是可能的变体之一,即个人喜好问题。
【讨论】:
感谢您的回答。我说的是开发结构,我知道打包的时候web.xml文件应该在WEB-INF文件夹里面。你能提供你正在谈论的典型结构吗?我在 springfuse.com 上找到了第一个结构。 删除了我关于您的目录结构异常的第一个声明。正如@AndresOlarte 所指出的,它确实是标准的 Maven 结构 (maven.apache.org/guides/introduction/…)。没有考虑过Maven结构,抱歉。刚刚写了关于非 Mavenized 目录结构的文章 ... 所以你说WEB-INF
应该放在src
之外,放到WebContent
中。但是,apache 指南建议相反:maven.apache.org/plugins/maven-war-plugin/examples/…
@informatik01 见我上面的评论。在另一个 Maven 指南中,OP 的结构被认为是正确的。
@parsecer Em,其实那根本不是 Maven 项目(Apache Ant 用于依赖管理),一般的目录结构是 Eclipse 为一个 web 项目生成的.这就是为什么有“Web Content”目录等的原因。另外,这个问题也不是 Maven 特定的,而是与 Java EE 规范中描述的要求有关。另请参阅 Oracle Java EE 官方教程中的directory structure。【参考方案2】:
web.xml 需要在 WEB-INF 目录中。这是应用服务器唯一会寻找它的地方。除此之外,spring xml 文件可以在资源中(最终会在类路径中)。
【讨论】:
好的,谢谢!那么开发的时候把web.xml放到src/main/resources,打包的时候再放到WEB-INF文件夹下呢? 您当然可以在包装过程中移动它。但是,对于查看您的应用程序的人来说,这将是违反直觉的。查看您的结构,它似乎是标准的 Maven webapp 结构。我会坚持把东西放在自然位置。以上是关于Webapp文件组织约定(开发结构)的主要内容,如果未能解决你的问题,请参考以下文章