繁体   English   中英

Java Web项目结构最佳实践

[英]Java Web Project Structure Best Practice

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

所以我很想知道的是

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

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

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

因此,请阅读框架附带的文档(Spring MVC,Struts,JSF等)。

另一个好建议是使用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

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

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

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

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

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

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

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

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

使用Maven webapp原型布局。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM