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通信助理等等。用户在自己的代码中直接引用即可,将帮助程序员大大减少编程的复杂度和工作量,提高开发效率。
Web框架——XWAF的代码结构和运行机制(4)的更多相关文章
- 理解Web应用程序的代码结构和运行原理(3)
1.理解Web应用程序的运行原理和机制 Web应用程序是基于浏览器/服务器模式(也称B/S架构)的应用程序,它开发完成后,需要部署到Web服务器上才能正常运行,与用户交互的客户端是网页浏览器. 浏览器 ...
- JVM内存结构,运行机制
三月十号,白天出去有事情出去了一天,晚上刚到食堂就接到阿里电话, 紧张到不行,很多基础的问题都不知道从哪里说了orz: 其中关于JVM内存结构,运行机制,自己笔记里面有总结的,可当天还是一下子说不出来 ...
- maven(三):maven项目结构及其运行机制
在上一篇中讲了如何创建maven项目,现在回到那个项目 项目结构 src/main/java:java代码目录 src/main/resources:资源目录,比如spring.xml文件,prope ...
- Hadoop框架:Yarn基本结构和运行原理
本文源码:GitHub·点这里 || GitEE·点这里 一.Yarn基本结构 Hadoop三大核心组件:分布式文件系统HDFS.分布式计算框架MapReduce,分布式集群资源调度框架Yarn.Ya ...
- php CI框架目录结构及运行机制
CI目录结构 CI主要组成部分为,application(应用文件夹).system(系统文件夹)和index.php入口文件. 应用文件夹中主要是存放控制器.模型和视图等,系统文件夹中主 ...
- 01 . Go之从零实现Web框架(类似Gin)
设计一个框架 大部分时候,我们需要实现一个 Web 应用,第一反应是应该使用哪个框架.不同的框架设计理念和提供的功能有很大的差别.比如 Python 语言的 django和flask,前者大而全,后者 ...
- 01 . Go之从零实现Web框架(框架雏形, 上下文Context,路由)
设计一个框架 大部分时候,我们需要实现一个 Web 应用,第一反应是应该使用哪个框架.不同的框架设计理念和提供的功能有很大的差别.比如 Python 语言的 django和flask,前者大而全,后者 ...
- python_way day17 html-day3 前端插件(fontawsome,easyui,bootstrap,jqueryui,bxslider,jquerylazyload),web框架
python_way day17 一.模板插件 图标的插件 fontawsome: 后台管理: easyui jqueryui 很多网站都会用: bootstrap :引入jQuery:(2.x,1. ...
- 实时计算框架:Flink集群搭建与运行机制
一.Flink概述 1.基础简介 Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算.Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算.主要特性包 ...
随机推荐
- 浏览器根对象window之值为数值的属性
1. number属性 1.1 length length 属性返回在当前窗口中frames的数量(包括IFRAMES). 该属性值与window.frames.length属性值相等. 1.2 in ...
- FineReport移动端如何获取地址位置
对于企业大多数员工来说,由于其工作位置是固定的,可以有多种方式进行上班打卡签到以保证该员工有按时正常来上班,但是对于经常需要出差,去客户现场的员工来说,就无法保证他们是否有去上班,所以希望能通过手机位 ...
- ioctl
在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值. cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 ...
- 关于UNITY3D的各种各样。
作为一个老C++程序员,在接触了UNITY3D之后,除了玩C#还得玩JAVA和OBJECTIVE-C. 1年多的经验证明,UNITY3D游戏项目,如果打算做多平台,项目组里必须得有一个会多语言的万金油 ...
- 【Yii系列】Yii2.0的安装与调试
接上一节的话,我们最终选择了Yii框架作为我们的主要开发框架,今天,我就和大伙来聊聊如何安装与调试Yii2.0,以及后续会和大伙聊聊如何在Yii2.0上快速撸代码. Yii2.0的安装 好的,Comp ...
- 封装网络请求并在wxml调用
https://blog.csdn.net/qq_35713752/article/details/78109084 // url:网络请求的url method:网络请求方式 data:请求参数 m ...
- Value与Sql Value
在使用Value作为参数传递给SqlServer时 实际上传递的是SqlValue 为其赋值的一种方式,可以将datetime类型转换成string类型(yyyy-MM-dd HH:mm:ss)
- Python学习---django下的cookie操作 180201
什么是Cookies 什么是Cookies cookies设置的原因: 1. http请求的无记忆性: 2.加快访问速度 3. 减少服务器压力 cookies特点: cookies保存在客户端浏览器 ...
- 企业级Ngnix基于域名的配置_server
普通的nginx配置 egrep -v "#|^$" /usr/local/nginx/conf/nginx.conf.default 更改nginx的配置文件-->注意空格 ...
- Source InSight context 窗口丢失的解决办法
我没关si的情况下强制关机导致的 Source InSight context 窗口丢失的解决办法 (2010-09-03 13:35:45) 转载▼ 今天早晨改改CLI,上了趟WC,回来发现 ...