框架模块化开发规范.docx

上传人:b****6 文档编号:5999054 上传时间:2023-01-02 格式:DOCX 页数:13 大小:74KB
下载 相关 举报
框架模块化开发规范.docx_第1页
第1页 / 共13页
框架模块化开发规范.docx_第2页
第2页 / 共13页
框架模块化开发规范.docx_第3页
第3页 / 共13页
框架模块化开发规范.docx_第4页
第4页 / 共13页
框架模块化开发规范.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

框架模块化开发规范.docx

《框架模块化开发规范.docx》由会员分享,可在线阅读,更多相关《框架模块化开发规范.docx(13页珍藏版)》请在冰豆网上搜索。

框架模块化开发规范.docx

框架模块化开发规范

框架模块化开发规范

 

2015年8月

更新历史

编写人

日期

版本号

变更内容

萧海生

2015-08-31

0.01

初次编写

1.前言4

1.1模块化要做什么?

4

1.2模块化的技术支持4

2.模块化项目目录结构8

2.1目录结构结构说明9

3.MAINFEST.MF文件配置10

4.pom.xml文件配置11

5.依赖与引用12

6.参数配置12

7.数据库检查13

8.核心模块13

8.1核心模块作用13

8.2启动检查14

8.3工具类14

8.4日志支持14

9.附录15

9.1MANIFEST.MF文件编辑问题15

1.前言

1.1模块化要做什么?

模块化的目标是将WEB应用的所有内容打到一个jar包中(包括类文件、页面文件、JS文件、CSS文件以及配置文件等)。

每个模块都以一个jar包的形式存在,这样模块的粒度就可以随意掌握,以利于框架的管理和版本升级。

1.2模块化的技术支持

1.2.1Servlet3.0模块化支持

 Servlet从3.0开始支持各Web应用的模块化,也就是说从Servlet3.0开始,我们可以把各Web应用单独拿出来进行开发,之后把它们打成对应的jar包放到主项目中就可以了。

(包括各种资源文件以及web.xml的配置都可以打包到jar中)

Web模块打成的jar包的内容的文件结构要求是这个样子的:

|--META-INF

|    |--web-fragment.xml

|    |--resources

|    |    |--jsp、图片等,相当于web的根目录

|--class文件和类路径下的文件

其中web-fragment.xml文件是必须要的。

上述目录结构就相当于在我们的类路径下有一个META-INF目录,该目录下有web-fragment.xml文件及包含jsp、图片等资源的resources目录。

1.2.1.1web-fragment.xml

web-fragment.xml文件的作用与Web应用下的web.xml文件的作用是相似的,在web.xml文件可以配置的信息都可以在web-fragment.xml文件中进行配置。

此外,它们的文档结构也非常的相似。

所不同的是web-fragment.xml文件的根元素是web-fragment,所使用的schema也是web-fragment相应的schema,配置如下:

1.

2.   xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"  

3.   xsi:

schemaLocation="   

4.    

5.  

在web-fragment.xml文件中我们可以通过元素来指定当前模块的名称,用元素来指定当前模块相对的加载顺序。

元素下面可以指定元素,而元素下又可以指定元素。

指定ordering的示例如下。

Ø在其他模块之前加载

1.  

2.   

-- 在其它模块之前加载 -->  

3.     

4.        

5.     

6.  

Ø在指定模块之后加载

1.  

2.   

-- 在指定模块之后加载 -->  

3.     

4.      模块名称  

5.     

6.  

除了可以在web-fragment.xml文件里面通过元素定义当前模块的加载顺序外,我们还可以在web.xml文件中通过元素指定各模块的加载顺序。

而且web.xml文件中指定的加载顺序比web-fragment.xml文件中指定的加载顺序具有更高的优先级。

如:

1.  

2.   module1  

3.   module2  

4.   module3  

5.     

6.  

更多内容请参考Servlet3.0规范。

1.2.1.2模块化示例

接下来我们来展示一个创建web模块的例子。

假设我们要创建一个叫做module1的模块,其中含有一个Module1Servlet,其代码如下所示:

1.public class Module1Servlet extends HttpServlet {  

2.   

3.   private static final long serialVersionUID = 1L;  

4.   

5.   @Override  

6.   protected void doGet(HttpServletRequest req, HttpServletResponse resp)  

7.         throws ServletException, IOException {  

8.      this.doPost(req, resp);  

9.   }  

10.   

11.   @Override  

12.   protected void doPost(HttpServletRequest req, HttpServletResponse resp)  

13.         throws ServletException, IOException {  

14.      req.getRequestDispatcher("/module1.jsp").forward(req, resp);  

15.   }  

16.   

17.}  

  

接着我们在类路径下创建一个META-INF文件夹,在该文件夹下创建一个resources目录,在resources目录下创建一个module1.jsp文件。

接着在META-INF目录下创建一个web-fragment.xml文件,其内容如下:

1.

2.   xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"  

3.   xsi:

schemaLocation="   

4.    

5.   

-- 指定模块名称 -->  

6.   module1  

7.   

-- 加载顺序 -->  

8.     

9.      

-- 在其它模块之前加载 -->  

10.        

11.           

12.        

13.     

14.    

15.     

16.      module1Servlet  

17.      com.xxx.Module1Servlet  

18.     

19.    

20.     

21.      module1Servlet  

22.      /servlet/module1  

23.     

24.    

25.  

之后我们把该项目打成一个jar包就可以把它作为一个jar加到其它Web应用中,在其它Web应用中使用了。

放到其它Web应用中后,我们通过访问/servlet/module1就可以访问到我们module1模块中定义的Module1Servlet了。

module1模块的目录结构如下:

1.2.2Maven

Maven是个优秀的项目管理及构建工具。

由于模块化开发的最终产出物为jar包,使用maven进行项目管理可以很方便的将项目打包成jar包。

在进行模块化开发的时候模块间的依赖关系是非常复杂的,而maven的项目依赖管理功能是非常强大的,可以很好的帮助我们管理模块间的依赖关系。

综合以上原因,在进行模块化开发时采用maven作为项目管理工具。

2.运行环境要求

软件

版本

说明

操作系统

Windows/linux

Jdk

>=1.6

应用服务器

Tomcat

>=7.0

支持Servlet3.0规范的应用服务器。

Weblogic

>=12c

3.模块化项目目录结构

模块化开发采用maven作为项目管理工具,模块化项目必须遵循如下目录结构。

目录

说明

|

/

项目根目录

|--pom.xml

/pom.xml

Maven配置文件

|--src

/src

||--main

/main

项目主体根目录

|||--java

/src/main/java

源代码目录

|||--resources

/src/main/resources

所需资源目录

||||--config

/src/main/resources/config

配置文件根目录

||||--spring

/src/main/resources/spring

Spring配置文件根目录

||||--META-INF

/src/main/resources/META-INF

MANIFEST.MF、web-fragment.xml

|||||--resources

/src/main/resources/META-INF/resources

相当于Web应用目录,存放jsp、css、图片、js等资源文件

||--test

/src/test

项目测试根目录

|||--java

/src/test/java

测试代码目录

|||--resources

/src/test/resources

测试资源所需目录

|--target

/target

项目输出根目录

目录结构如下图所示:

3.1目录结构结构说明

3.1.1/src/main/java

该目录为java源代码目录。

模块的java包路径必须以模块简称开头。

如demo模块类的包路径为:

com.hnisi.demo.***

3.1.2/src/main/resources/config

该目录为配置文件目录。

为了防止模块间配置文件的冲突,配置文件必须存放在该目录下对应模块的目录内。

如demo模块的配置文件存放路径为:

/src/main/resources/config/demo

3.1.3/src/main/resources/spring

该目录为spring配置文件目录。

为了防止模块间文件的冲突,配置文件必须存放在该目录下对应模块的目录内。

如demo模块的spring配置文件存放路径为:

/src/main/resources/spring/demo

3.1.4/src/main/resources/META-INF/resources

根据Servlet3.0规范,该文件夹相当于web应用的根目录。

主要用于存放web应用资源,如jsp、html、css、js、image等资源文件。

4.MAINFEST.MF文件配置

MANIFEST.MF文件位于/src/main/resources/META-INF目录下。

打包成jar模块包时该文件位于jar包的META-INF目录下。

该文件为jar包的描述文件。

为了区别普通jar包与模块化jar包的区别,需要在MANIFEST.MF文件中加入如下配置信息,其中红色部分的属性是必须的(MANIFEST.MF文件的编辑问题请参考附录9.1章节)。

Manifest-Version:

1.0

Bundle-Type:

模块类型,必须为:

Hnisi

Bundle-Name:

模块名,与pom.xml中的artifactId一致

Bundle-Version:

模块版本号,与pom.xml中的version一致

Bundle-Description:

模块描述

Bundle-Version-Compatible:

模块兼容的最低版本号

Require-Bundle:

依赖的模块,写法为:

模块1;模块1版本号,模块2;模块2版本号

Require-Table:

S_USER,S_FRAMEWORK_MENU

Require-View:

V_TODO_LIST

例子:

Manifest-Version:

1.0

Bundle-Type:

Hnisi

Bundle-Name:

Hnisi-Fw-Demo

Bundle-Version:

1.0.0.0

Bundle-Description:

测试模块

Bundle-Version-Compatible:

0.0.0.1

Require-Bundle:

Hnisi-Fw-Code;1.0.0.0,Hnisi-Fw-Dao;1.0.0.0

Require-Table:

S_USER,S_FRAMEWORK_MENU

Require-View:

V_TODO_LIST

5.pom.xml文件配置

pom.xml文件为maven配置文件,具体配置可参考maven相关文档。

为了将MANIFEST.MF文件打包进jar包中,需要在pom.xml文件中加入如下配置。

org.apache.maven.plugins

maven-jar-plugin

2.6

false

src\main\resources\META-INF\MANIFEST.MF

6.依赖与引用

一个模块除了包含java类之外同时还包含了各种接口、springbean、service服务以及页面文件、JS文件、CSS文件、图片文件等。

由此可见模块间的依赖是非常复杂的,除了最常见的java类依赖外还包含了接口、服务、资源文件等之间的相互依赖。

这里我们只对模块间的依赖关系进行管理,开发过程中通过maven进行依赖管理。

运行过程中通过MANIFEST.MF文件的Require-Bundle配置属性进行定义,然后由核心模块进行启动时检查。

配置如下。

Manifest-Version:

1.0

Bundle-Type:

模块类型,必须为:

Hnisi

Bundle-Name:

模块名,与pom.xml中的artifactId一致

Bundle-Version:

模块版本号,与pom.xml中的version一致

Bundle-Description:

模块描述

Bundle-Version-Compatible:

模块兼容的最低版本号

Require-Bundle:

依赖的模块,写法为:

模块1;模块1版本号,模块2;模块2版本号

Require-Table:

S_USER,S_FRAMEWORK_MENU

Require-View:

V_TODO_LIST

例:

Manifest-Version:

1.0

Bundle-Type:

Hnisi

Bundle-Name:

Hnisi-Fw-Demo

Bundle-Version:

1.0.0.0

Bundle-Description:

测试模块

Bundle-Version-Compatible:

0.0.0.1

Require-Bundle:

Hnisi-Fw-Code;1.0.0.0,Hnisi-Fw-Dao;1.0.0.0

Require-Table:

S_USER,S_FRAMEWORK_MENU

Require-View:

V_TODO_LIST

7.参数配置

模块的一些固定的参数可配置到配置文件中。

配置文件位于/src/main/resources/config/目录下。

具体配置文件及说明如下。

配置文件名

说明

/config/模块简称/config.properties

配置开发、测试和生产环境都相同的参数

/config/模块简称/config-dev.properties

配置开发环境需要的参数

/config/模块简称/config-test.properties

配置测试环境需要的参数

/config/模块简称/config-product.properties

配置生产环境需要的参数

/config/模块简称/log4j.properties

配置log4j日志的参数

WEB应用同样需要包含以上这些配置文件,WEB应用的配置文件直接存放到config目录下。

WEB应用的config.properties配置文件必须包要配置SYSTEM.TYPE参数。

核心模块通过SYSTEM.TYPE参数加载相应的配置文件。

SYSTEM.TYPE参数说明如下。

参数配置

说明

SYSTEM.TYPE=dev

开发模式,加载config-dev.properties文件

SYSTEM.TYPE=test

测试模式,加载config-test.properties文件

SYSTEM.TYPE=product

生产模式,加载config-product.properties文件

8.数据库检查

9.核心模块

9.1核心模块作用

核心模块的主要作用如下:

Ø进行模块依赖检查

Ø进行数据库版本检查

Ø提供工具类支持

Ø提供日志支持

Ø第三方框架依赖配置(开发阶段,由maven配置)

9.2启动检查

启动检查包括模块依赖检查和数据库检查。

9.2.1模块依赖检查

模块依赖检查主要是在系统启动的过程中,通过MANIFEST.MF文件配置的依赖关系检查启动模块依赖的其他模块是否存在。

如果不存在则进行提示询问是否继续启动应用。

9.2.2数据库检查

核心模块在系统启动的过程中进行提供数据库的相关检查支持。

具体请参考第7章数据库版本检查。

9.3工具类

核心模块为其他模块提供常用的工具类。

方便其他模块的调用。

9.4日志支持

核对模块为其他模块提供日志支持,主要是对log4j的支持。

由于不同模块可能存在不同的日志输出需求,因此核心模块支持每个模块都可以有自己的日志配置文件。

每个模块的日志配置文件存放路径为:

/src/main/resources/config/模块简称/log4j.properties

10.附录

10.1MANIFEST.MF文件编辑问题

MANIFEST.MF文件有着严格的格式要求,甚至一个空格都会引起错误。

因此在编写MANIFEST.MF文件时需要严格遵循如下格式说明。

10.1.1MANIFEST.MF格式说明

1.文件中的内容以键值对的形式出现,键值对之间采用"冒号+空格"进行分隔(注意:

冒号后的空格必须有,否则格式有错误)

2.文件每行最多72个字符,可以分多行写,但是在行的末尾必须加上空格符作为续行符(注意:

末尾的续行符不能少)

3.文件的最后必须要空两行,并且这两行都必须顶格

4.通常指定Class-Path时会采用每一行一个JAR包的方法,因为每一行的长度有限制,当JAR较多时容易超过

10.1.2MANIFEST.MF示例

Manifest-Version:

1.0

Bundle-Type:

Hnisi

Bundle-Name:

Hnisi-Fw-Demo

Bundle-Version:

1.0.0.0

Bundle-Description:

测试模块

Bundle-Version-Compatible:

0.0.0.1

Require-Bundle:

Hnisi-Fw-Code;1.0.0.0,Hnisi-Fw-Dao;1.0.0.0

Require-Table:

S_USER,S_FRAMEWORK_MENU

Require-View:

V_TODO_LIST

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1