Java Web项目结构最佳实践

时间:2009-01-31 14:37:37

标签: java model-view-controller project structure packages

我正在开始使用Hibernate和标准MVC架构的新Java Web Project。 我刚刚开始布局项目结构,在这样做的时候,我开始环顾四周,看看这个区域是否有任何标准,关于控制器应该去哪里以及通常是最好的方法。但是我还没有找到任何指导方针。

所以我很想知道的是

  • 是否有人了解Java Web Project布局的最佳实践指南?
  • 对于不同类型的项目,是否有人有一套特定的硬规则?
  • 人们是否倾向于通过演示,业务和应用程序等不同层次来拆分包裹?

5 个答案:

答案 0 :(得分:6)

这实际上取决于您的网络框架。

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

请阅读框架附带的文档(Spring MVC,Struts,JSF e.t.c)。

另一个好建议是使用Maven Archetypes为您的特定框架生成骨架。一些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

第二种结构过于通用,倾向于解决具有不相关内容的大型软件包,并且难以维护。

答案 1 :(得分:3)

要继续我之前的回答,我有很多网络项目。在所有这些中,src下的结构或多或少相同。这些包大致分为3个逻辑层。

首先是表达层,正如您所说,对于servlet,应用程序监听器和帮助程序。

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

如果使用直接jdbc(通常使用Spring),那么有时我发现将数据对象放在业务逻辑层而不是数据库访问层更方便。

(其余的东西通常属于业务层)。

答案 2 :(得分:2)

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

  1. 如果您使用的是MVC,那么您可能不需要直接访问JSP。如果是这样,出于安全原因,请将JSP源代码保留在WEB-INF / jsp下。
  2. 同样,请在WEB-INF / tags下保留自定义标记文件。
  3. 将javascript文件保存在js文件夹中,将css文件保存在样式文件夹中等。所有文件夹应与WEB-INF处于同一级别,以模仿真实部署。
  4. 最好根据图层将代码分成包。显然,你的Hibernate daos不需要和你的servlet在同一个包中。
  5. 如果你在同一个软件包中有太多的servlet,可以考虑根据功能对它们进行子包装,但是它们有一个共同的祖先包很好 - 它有助于提高可读性。

答案 3 :(得分:2)

答案 4 :(得分:0)

使用Maven webapp archetype layout.

project
|-- pom.xml
`-- src
    `-- main
        |-- java
        `-- webapp
            |-- WEB-INF
            |   `-- web.xml
            `-- index.jsp

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