j2ee Web应用程序的标准项目/包结构
我们正在使用Spring,Sping MVC和Hibernate启动一个新的Java EE Web应用程序。 我们很可能也会使用maven。
在开始之前,我们需要为Web应用程序提出项目/包结构。
什么是Java EE Web应用程序的标准项目/包结构?
它还应该在所有应用程序服务器上运行,而不对项目结构或任何配置文件进行任何更改。
我们将使用Spring source IDE 2.6.0版(最新版本)。
有任何想法吗?
如果您使用的是maven,最好遵循标准的maven项目布局。 你可以通过这样做让maven为你生成这个结构,
mvn archetype:generate
并从选项列表中选择spring-mvc-jpa-archetype
这将给你一个包结构,如,
├── pom.xml └── src ├── main │ ├── java │ │ └── mygroup │ │ ├── controller │ │ │ ├── HomeController.java │ │ │ └── PersonController.java │ │ ├── dao │ │ │ └── PersonDao.java │ │ └── model │ │ └── Person.java │ ├── resources │ │ ├── db.properties │ │ ├── log4j.xml │ │ └── META-INF │ │ └── persistence.xml │ └── webapp │ ├── index.html │ ├── META-INF │ │ ├── context.xml │ │ └── MANIFEST.MF │ ├── resources │ │ └── css │ │ └── screen.css │ └── WEB-INF │ ├── spring │ │ ├── app │ │ │ ├── controllers.xml │ │ │ └── servlet-context.xml │ │ ├── db.xml │ │ └── root-context.xml │ ├── views │ │ ├── edit.jsp │ │ ├── home.jsp │ │ └── list.jsp │ └── web.xml └── test ├── java │ └── mygroup │ ├── controller │ │ ├── DataInitializer.java │ │ ├── HomeControllerTest.java │ │ └── PersonControllerTest.java │ └── dao │ └── PersonDaoTest.java └── resources ├── db.properties ├── log4j.xml ├── test-context.xml └── test-db.xml
MVCSR(模型,视图,控制器,服务,存储库)Web应用程序的通用,更完整的Java包结构如下所示:
java └── com └── youdomain | ├── base // broadly used app-wide base and abstract classes) | ├── core // broadly, scattered use helpers, utilities, app health/stats | // tracking, logging, etc | ├── controller // Fields Http/CGI requests and drives/initiates request | // comprehension, validation, security checks, requesting | // operations by the Service module and invoking the View to | // generate a response. | ├── data // This is the lower level data infrastructure, with several | //packages under it for mappers, schema tables/enums, helpers, | // record location, id management, etc | ├── domain // app-wide exposed classes, managers, and interfaces to | // each persisted (usually DB) domain 'object'. Each | // object often correlates to one table row in you DB. | // Domain objects are mostly considered data, but have some fundamental | // record construction, validation, elaboration, and ancillary information | // functionality which is opaque to the rest of the application. | // For example: Customer, Account, Purchase, Inventory, | // Product, Sale, Return, SpecialOffer, FeedbackComment... | ├── repository // more complicated persisted objects, often structured | // to address certain efficiency or traversal needs, often each | // repository is underpinned by several records, tables, | // and even cross-DB structures. Example: | // -- OrderHistory, | // -- ProductsGlobalSearchIndex, | // -- CustomerSpecificProductMarketingSuggestionCorrelates | ├── service // The smarts of the whole application, performs macro, holoistic | // operations involving multiple DB tables and operations. Such as: | // -- account.UserAccountLifecycle, | // -- order.CustomerOrder, | // -- order.CustomerOrderShipment | └── view // Intefaces with your jsp, freemarker, tapestry etc.