Java Web项目结构最佳实践

Java Web项目结构最佳实践,java,model-view-controller,project,structure,packages,Java,Model View Controller,Project,Structure,Packages,我正在启动一个新的JavaWeb项目,它使用Hibernate和标准的MVC架构。 我刚刚开始规划项目结构,在这样做的同时,我开始环顾四周,看看这方面是否有任何标准,关于控制器应该去哪里,以及通常最好的布局方式。然而,我还没有找到任何指导方针 所以我想知道的是 有人知道Java Web项目布局的最佳实践指南吗 是否有人有一套特定的硬规则,他们总是遵循不同类型的项目 人们是否倾向于按不同的层(如表示层、业务层和应用程序层)划分软件包 首先,我们需要遵循流行ide、ala Eclipse、Netb

我正在启动一个新的JavaWeb项目,它使用Hibernate和标准的MVC架构。 我刚刚开始规划项目结构,在这样做的同时,我开始环顾四周,看看这方面是否有任何标准,关于控制器应该去哪里,以及通常最好的布局方式。然而,我还没有找到任何指导方针

所以我想知道的是

  • 有人知道Java Web项目布局的最佳实践指南吗
  • 是否有人有一套特定的硬规则,他们总是遵循不同类型的项目
  • 人们是否倾向于按不同的层(如表示层、业务层和应用程序层)划分软件包

首先,我们需要遵循流行ide、ala Eclipse、Netbeans等的传统结构。 例如,在Eclipse中,所有内容都已经安排好了WEB-INF和META-INF文件夹,因此打包和部署很容易。类源代码(通常在src下)自动复制到WEB-INF/Classes。 还有一些其他考虑因素:

  • 如果您使用的是MVC,那么您可能不需要直接访问JSP。如果是这样,出于安全原因,请将JSP源代码保存在WEB-INF/JSP下
  • 同样,将自定义标记文件保存在WEB-INF/tags下
  • 将javascript文件保存在js文件夹中,css文件保存在style文件夹中,等等。所有文件夹应与WEB-INF处于同一级别,以模拟实际部署
  • 根据层将代码分成包是很好的。显然,您的Hibernate DAO不需要与servlet位于同一个包中
  • 如果您在同一个包中使用了太多servlet,请考虑将它们按照功能打包,但很好的是它们有一个共同的祖先包——它有助于可读性。李>
    为了继续我先前的回答,我有许多web项目。在所有这些结构中,src下的结构大致相同。这些包大致分为3个逻辑层

    第一个是表示层,如您所说,用于servlet、应用程序侦听器和帮助器

    其次,有一个用于hibernate模型/db访问层的层。业务逻辑的第三层。然而,有时这些层之间的边界并不清楚。如果您使用hibernate进行db访问,那么模型是由hibernate类定义的,因此我将它们放在与dao对象相同的区域中。例如,com.sample.model保存hibernate数据对象,com.sample.model.dao保存dao对象

    如果使用纯jdbc(通常与Spring一起使用),那么有时我发现将数据对象放在更靠近业务逻辑层的位置比放在db访问层的位置更方便


    (其余部分通常属于业务层)。

    这取决于您的web框架

    例如,如果您使用Wicket,java文件和网页同时存在于同一目录中 在大多数其他框架中,页面(.jsp文件或任何表示引擎)和 代码隐藏的东西(java文件)是完全独立的

    因此,请阅读框架附带的文档(SpringMVC、Struts、JSFEE.t.c)

    另一个好的建议是使用Maven原型为您的特定框架生成框架。一些web框架(如seam)甚至有自己的代码生成工具,为您的web项目奠定基础

    对于src目录,我唯一的好建议(Yoni没有提到)是 根据业务目的而非类型/层次制作包装

    这就意味着为

    • com.mycompany.myproject.customers
    • com.mycompany.myproject.departments
    • com.mycompany.myproject.billing
    • com.mycompany.myproject.reports
    • com.mycompany.myproject.admin
    而不是

    • com.mycompany.myproject.entities
    • com.mycompany.myproject.tables
    • com.mycompany.myproject.graphs
    • com.mycompany.myproject.dialogs
    • com.mycompany.myproject.servlets
    第二种结构过于通用,倾向于解析包含无关内容的大型包,并且很难维护

    使用


    我在这里的示例中包含了
    java
    文件夹,这可能是显而易见的,但出于某种原因,它被遗漏在上面的链接中。

    我更喜欢WEB-INF/content或WEB-INF/view,谁知道什么是或可能是表示技术……我有一些优点。然而,我仍然对人们关于src目录应该如何使用包进行结构的观点感兴趣,因为servlets主要被称为JSP内容,所以我会将它们放在一个名为presentation的包中。@kazanaki不幸的是,在这个项目中,我只使用简单的MVC,没有框架。我已经根据maven规则构建了src目录。在软件包布局中,您是将其分包到不同的层中,还是只深入到子目的中。@标记子包是层。例如,我给客户举的例子有customers.actions、customers.servlet、customers.entities e.t.c.但是在一个非常大的项目中,正如您所说,子包可以是子目的。没有正确的答案IMHOI对这个答案投了赞成票:我有一个大项目,的确,与层相关的包很难维护,但有一些问题:接口放在哪里?是否有公共接口或类(例如抽象类)?
    project
    |-- pom.xml
    `-- src
        `-- main
            |-- java
            `-- webapp
                |-- WEB-INF
                |   `-- web.xml
                `-- index.jsp