Web框架——XWAF的代码结构和运行机制(4)
XWAF是一套基于Servlet和java反射技术的Web应用程序框架,它利用Servlet运行机制在服务器上加载和运行,接管客户端请求,依靠ServletRequest对象获取用户请求信息,使用ServletResponse对象返回处理结果。
XWAF框架能够扩展Web服务器的功能,简化Web应用程序的开发,减少用户编码,提高开发效率。XWAF框架能够智能整合用户代码,完成用户项目的业务逻辑。
1、Web项目的用户代码
使用XWAF框架开发Web项目,程序员需要编写与项目业务逻辑直接相关的数据库脚本、HTML或JSP页面、处理访问请求的拦截器和处理器代码、实现业务逻辑的服务层代码、数据访问层代码等。由于这些代码与项目的具体业务相关,且千变万化,框架不可能事先得知,必须由项目开发人员根据需求完成设计和编码。我们将这些与项目的业务联系紧密、个性化很强的代码称为“用户代码”。
2、XWAF的框架代码
引入XWAF框架压缩包代码文件后,XWAF框架提供了大量代码,按照它们的任务不同可以分为“管理代码”和“功能代码”两部分。
管理代码负责组织、整合用户代码。包括:解析配置文件、创建数据库连接对象,扫描并解析用户拦截器和处理器、创建用户代码管理器、Web访问监听器、匹配Web请求与拦截器和处理器的适配器、控制拦截器与处理器执行顺序的调度器等应用程序的骨架代码。
功能代码则是提供某些应用功能的通用代码模块。包括:实现文件的上传下载、日志管理、XML解析、JSON解析、java对象转换为JSON表达式,以及WebSocket通信助理等等。可以帮助程序员大大减少编程的复杂度和工作量,提高开发效率。
3、XWAF框架的类结构
XWAF框架的全部代码,按照功能模块分别存放在以“com.xwaf”为母包的18个java类型包中,分别是:
1)com.xwaft包:存放XWAF框架的公共基础类。
2)com.xwaf.account包:存放XWAF框架的账户管理类。
3)com.xwaf.annotation包:存放XWAF框架的注解定义类。
4)com.xwaf.control包:存放XWAF框架的核心管理类。
5)com.xwaf.data包:存放XWAF框架的数据公共类。
6)com.xwaf.data.sql包:存放XWAF框架的数据服务类。
7)com.xwaf.date包:存放XWAF框架的日期和日历工具类。
8)com.xwaf.exception包:存放XWAF框架的异常定义类。
9)com.xwaf.http包:存放XWAF框架与HTTP访问相关的类。
10)com.xwaf.io包:存放XWAF框架的文件管理类。
11)com.xwaf.io.http包:存放XWAF框架与HTTP相关的文件管理类,如:上传与下载管理。
12)com.xwaf.json包:存放XWAF框架与JSON数据相关的类。
13)com.xwaf.log包:存放XWAF框架的日志管理类。
14)com.xwaf.reflect包:存放XWAF框架的反射技术工具类。
15)com.xwaf.text包:存放XWAF框架的文本管理类。
16)com.xwaf.validate包:存放XWAF框架与密码验证、MD5和手机验证相关的类。
17)com.xwaf.websocket包:存放XWAF框架与WebSocket通信和推送技术相关的类。
18)com.xwaf.xml包:存放XWAF框架的XML解析工具类。
4、XWAF框架的运行机制
XWAF是基于Servlet规范和Java反射技术的Web应用程序框架,在Web服务器上加载和运行。它包括XWAF框架管理代码和专项应用技术功能代码,框架管理代码创建的对象和工作任务包括:
4.1 运行WebAppListener监听器
WebAppListener监听器是XWAF框架的入口程序,它的contextInitialized(ServletContextEvent)方法会在ServletContext对象初始化时被执行。XWAF框架借此方法和ServletContext对象创建了XWAF框架的核心管理器“WebAppManager”对象。
4.2 创建WebAppManager对象
随着WebAppManager对象的创建,XWAF框架开始了“解析配置文件、扫描类型包、创建全部管理对象”等管理应用程序的准备工作。
4.3 解析XwafConfig.xml配置文件
通过解析配置文件,获取数据库连接参数、用户拦截器和处理器的类包名称、文件上传约定等重要信息,并返回配置信息管理器(XwafConfig)对象。
4.4 创建Interceptor和Handler适配器
XWAF框架创建Interceptor适配器,用于管理用户项目的拦截器类信息;创建Handler适配器,用于管理用户项目的处理器类和方法信息。
4.5 扫描用户项目的代码包
XWAF框架使用PackageScanner类包扫描器,扫描配置文件中指定的拦截器和处理器代码包,将获取的HttpInterceptor和WebSocketInterceptor类信息提交给框架的Interceptor适配器,获取的HttpHandler和WebSocketHandler类型及其处理方法的信息,提交给Handler适配器。
4.6 创建数据服务器
该数据服务器包含数据源和连接池对象,为数据访问提供支持。该对象使用WebAppManager的getDataServer(String projName)静态方法获取。
4.7 创建登录账号管理器
XWAF框架使用内存管理器监控所有登录失败和锁定的账号,为控制用户的登录行为提供简便方法,简化开发编程。该对象使用WebAppManager的getLoginAccountManager()静态方法获取。
4.8 创建级别管理器
XWAF框架会自动创建“用户角色、业务分类、管理范围”和“数据操作”等级别管理器(GradeManager对象),为用户权限管理提供便利。程序员可以使用WebAppManager的如下方法获取相应的级别管理器:
1)getRuleGradeManager()方法:获取角色级别管理器对象;
2)getWorkTypeManager()方法:获取业务分类级别管理器对象;
3)getEntityManager()方法:获取管理范围级别管理器对象;
4)getDataOperateManager()方法:获取数据操作级别管理器对象;
4.9 接管Web请求
XWAF使用com.xwaf.control.XwafDispatchServlet类实例接管客户请求,为了保持XWAF框架接管请求的灵活性,XwafDispatchServlet类没有使用注解指定匹配的URL,而是交给项目开发人员在web.xml文件中配置。如果开发人员希望所有的客户请求都交给XWAF处理,只要将<servlet-mapping>的<url-pattern>子节点设置为“/*”即可。使用XWAG插件创建用户项目的代码时,会自动配置为“*.handl”,即只接管扩展名为“handl”的客户请求,代码如下所示:
<servlet-mapping>
<servlet-name>XwafDispatchServlet</servlet-name>
<url-pattern>*.handl</url-pattern>
</servlet-mapping>
4.10 整合用户代码
XWAF框架使用XwafHandlerAndInterceptorAdapter静态类管理用户项目的全部拦截器和处理器,包括HTTP和WebSocket的拦截器和处理器。
1)getHttpHandlerInfo(String)方法:提取与URL匹配的HttpHandler类和方法;
2)getWsHandlerInfo(String)方法:提取与URL匹配的WebSocketHandler类和方法;
3)getHttpInterceptorInfo(String)方法:提取与URL匹配的IHttpInterceptor类;
4)getWsInterceptorInfo(String)方法:提取与URL匹配的IWebSocketInterceptor类。
4.11 响应用户请求
XWAF框架的XwafDispatchServlet对象是服务器响应客户请求的调度器,它会到适配器中查找与请求的URL匹配的拦截器和处理器,并执行相应的方法。将处理结果返回给浏览器。
4.12 使用拦截机制实现切面开发
XWAF框架调度器在执行处理器之前和之后调用执行拦截器代码的机制,很方便地实现了面向切面的开发模式。如果程序员在处理器写好之后,想要插入一个新功能,直接添加一个拦截器即可。
4.13 集成应用功能代码包
XWAF框架集成了许多专项应用功能的通用代码模块,包括:文件的上传下载、日志管理、XML解析、JSON解析、java对象转换为JSON表达式,以及WebSocket通信助理等等。用户在自己的代码中直接引用即可,将帮助程序员大大减少编程的复杂度和工作量,提高开发效率。