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. JavaScript周报#185

    This week’s JavaScript news Read this issue on the Web | Issue Archive JavaScript Weekly Issue 185Ju ...

  2. 原生Ajax(XMLHttpRequest)

    一.什么是Ajax: 全称Asynchronous JavaScript and XML: 异步的 JavaScript 和 XML: 可以在不重新加载整个页面的情况下(偷偷发数据),与服务器交换数据 ...

  3. ES6 模块化与 CommonJS 模块化

    ES6 模块化 import命令用于输入其他模块提供的功能;export命令用于规定模块的对外接口. export 可以有多个,export default 仅有一个 a.js 模块a文件 导出多个方 ...

  4. CSS绝对定位属性

    position - 类型:用于确定定位的类型,共有绝对(absolute).相对(relative)和静态(static)等3种选择. z-index - Z轴:用于控制网页中块元素的叠放顺序,可为 ...

  5. C# 字符串中英文对齐

    StringBuilder str = new StringBuilder(); str.AppendFormat( - Encoding.Default.GetBytes(); str.Append ...

  6. python模拟登陆豆瓣——简单方法

    学爬虫有一段时间了,前面没有总结又重装了系统,导致之前的代码和思考都没了..所以还是要及时整理总结备份.下面记录我模拟登陆豆瓣的方法,方法一登上了豆瓣,方法二重定向到了豆瓣中“我的喜欢”列表,获取了第 ...

  7. JavaScript运算符优先级引起的bug

    [下面是昨天发给同事的邮件,为防止泄露商业机密,隐去了项目名和变量名] ==================================================== 昨天发现Nx代码中的一 ...

  8. centos django+Nginx+uwsgi部署

    第五天 部署python3+uwsgi+nginx的博客系统 ================================ mysql基本命令 mysql mysql -p mysqladmin ...

  9. VUE知识day2

    VUE用途 VUE:是用来做单页面的 掘金网单击时会创建对象与销毁,减少与服务器的交互 1模块使用------------------- 1导出------------ export default ...

  10. react入门参考资料

    ReactJS简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出 ...