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文件组织约定(开发结构)的主要内容,如果未能解决你的问题,请参考以下文章

rust 模块组织结构

响应式开发一招致胜

在 Xcode 9 之前创建的项目中重新组织组和文件夹

在哪里“定位” C# 结构? / 如何在项目中组织结构

我们可以配置要在Tomcat的webapp目录中的相应位置部署的文件夹吗?

文件的结构