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通信助理等等。用户在自己的代码中直接引用即可,将帮助程序员大大减少编程的复杂度和工作量,提高开发效率。

Web框架——XWAF的代码结构和运行机制(4)的更多相关文章

  1. 理解Web应用程序的代码结构和运行原理(3)

    1.理解Web应用程序的运行原理和机制 Web应用程序是基于浏览器/服务器模式(也称B/S架构)的应用程序,它开发完成后,需要部署到Web服务器上才能正常运行,与用户交互的客户端是网页浏览器. 浏览器 ...

  2. JVM内存结构,运行机制

    三月十号,白天出去有事情出去了一天,晚上刚到食堂就接到阿里电话, 紧张到不行,很多基础的问题都不知道从哪里说了orz: 其中关于JVM内存结构,运行机制,自己笔记里面有总结的,可当天还是一下子说不出来 ...

  3. maven(三):maven项目结构及其运行机制

    在上一篇中讲了如何创建maven项目,现在回到那个项目 项目结构 src/main/java:java代码目录 src/main/resources:资源目录,比如spring.xml文件,prope ...

  4. Hadoop框架:Yarn基本结构和运行原理

    本文源码:GitHub·点这里 || GitEE·点这里 一.Yarn基本结构 Hadoop三大核心组件:分布式文件系统HDFS.分布式计算框架MapReduce,分布式集群资源调度框架Yarn.Ya ...

  5. php CI框架目录结构及运行机制

    CI目录结构   CI主要组成部分为,application(应用文件夹).system(系统文件夹)和index.php入口文件.     应用文件夹中主要是存放控制器.模型和视图等,系统文件夹中主 ...

  6. 01 . Go之从零实现Web框架(类似Gin)

    设计一个框架 大部分时候,我们需要实现一个 Web 应用,第一反应是应该使用哪个框架.不同的框架设计理念和提供的功能有很大的差别.比如 Python 语言的 django和flask,前者大而全,后者 ...

  7. 01 . Go之从零实现Web框架(框架雏形, 上下文Context,路由)

    设计一个框架 大部分时候,我们需要实现一个 Web 应用,第一反应是应该使用哪个框架.不同的框架设计理念和提供的功能有很大的差别.比如 Python 语言的 django和flask,前者大而全,后者 ...

  8. python_way day17 html-day3 前端插件(fontawsome,easyui,bootstrap,jqueryui,bxslider,jquerylazyload),web框架

    python_way day17 一.模板插件 图标的插件 fontawsome: 后台管理: easyui jqueryui 很多网站都会用: bootstrap :引入jQuery:(2.x,1. ...

  9. 实时计算框架:Flink集群搭建与运行机制

    一.Flink概述 1.基础简介 Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算.Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算.主要特性包 ...

随机推荐

  1. IEC62304-2006解读

    IEC62304强调医疗软件在明确和满足其预期用途的前提下,不能引发不可接受的风险 62304提供一个医疗软件开发的框架,并指出框架下每个过程的要求,62304将过程分解为若干活动,活动分解为若干任务 ...

  2. 5 使用ip代理池爬取糗事百科

    从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...

  3. java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for

    使用mybatis做一个简单的查询的时候,报了这个问题.代码如下: <mapper namespace="cn.gaiay.business.zm.live.living.dao.Li ...

  4. GOOGLE高级搜索技巧

    前记:  我是完整的看完了.内容有点乱啊,自己没有时间整理,先放在自己的印象笔记里了....   二,GOOGLE特色 GOOGLE支持多达132种语言,包括简体中文和繁体中文: GOOGLE网站只提 ...

  5. SQL 语句及关键字的用法

    一.SELECT select [ALL|DISTINCT] select_list [into new table] FROM table_source [where serch_conditaio ...

  6. INSERT CLAUSE

    a.single table insert INSERT INTO jobs(job_id,job_title,min_salary,Max_Salary) VALUES('IT_PM','PROJE ...

  7. Using shared access signatures (SAS) From Microsoft

    A shared access signature (SAS) provides you with a way to grant limited access to objects in your s ...

  8. cascade属性

    cascade属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时会进行级联操作,一对一的时候直接写在标签上,其他的要写在set标签上 cascade="none|save-upd ...

  9. SOJ 1017 Power of Cryptography 库函数精度

    Background Current work in cryptography involves (among other things) large prime numbers and comput ...

  10. UVA 12230 Crossing Rivers

    嘟嘟嘟 虽然分类是期望dp,不过好像是最水的 因为在陆地上的时间和概率是固定的,所以只用考虑过河的期望时间. 对于一条河p, l, v,p好像没什么用……不管了,首先期望时间我觉得可以这么算:期望时间 ...