使用XWAF框架(1)——Web项目的代码分层
建议在Eclipse环境下使用XWAF框架来开发用户的Web项目,并遵循以下步骤和约定。
1、获取XWAF框架压缩包文件
程序员点击下列地址免费下载XWAF框架的压缩包文件:XWAF框架压缩文件
2、安装XWAF框架
下载XWAF框架的压缩包文件后,其名称格式类似于:com.xwaf_10.jar
将该文件放到用户Web项目的子目录“WEB-INF/lib/”中即完成了安装。
3、XWAF框架的代码分层规范
XWAF框架按照MVC的分层思想,要求用户对代码合理分层,并通过简单配置和注解融入XWAF框架的代码管理体系。
所谓MVC就是将项目的全部代码分为模型(Model)、视图(View)和控制(Control)三大部分,每一部分的代码实现一定的功能。模型层代码负责数据访问、数据传递和业务逻辑处理,视图层代码实现数据展示和用户交互,控制层代码接受客户请求,组织和调度视图层与模型层的代码协调工作,向客户端做出响应。MVC的核心思想就是代码分层和逻辑控制。
XWAF框架和XWAG插件遵循了MVC的代码分层与逻辑控制思想,但进行了细化,将MVC三大部分划分成如下六层:
3.1 视图层(View)
也称为视图表现层或用户交互界面层(UI),是展示数据和接受用户输入的地方,一般使用HTML页面或JSP页面实现。
XWAF框架提供了JSP动态网页模板库和JavaScript函数库(XJQL),支持用户快速开发视图文件。
如果使用XWAG插件生成用户的项目代码,将依据动态网页模板、用户的菜单设置和数据库绑定,以及XJQL函数创建首页,同时自动生成“客户注册、完善注册、登录、修改密码”和“基础数据维护”等JSP页面。
用户项目中更为复杂的业务交互页面,需要程序员自己设计和编码完成,可以使用XWAG提供的CSS样式和XJQL中的函数。同时,XWAG支持使用第三方动态网页模板,生成具有特定功能的页面。
3.2 控制层(Control)
XWAF框架提供了服务器端访问控制的两个核心类:
1)com.xwaf.control.XwafDispatchServlet——请求响应调度器。这是一个遵循Servlet访问规范的Servlet类,开发人员需要在web.xml文件中,使用<servlet>和<servlet-mapping>配置项来注册类路径和映射地址,将特定的URL请求纳入XWAF框架控制之下。
2)com.xwaf.control.XwafHandlerAndInterceptorAdapter——请求处理与拦截适配器。XWAF框架自动扫描用户项目的HttpHandler和WebSocketHandler处理器类型包,以及HttpInterceptor和WebSocketInterceptor拦截器类型包,建立请求地址(URL)与处理器和拦截器的映射关系库,提供动态匹配功能,供请求响应调度器调用。
XWAG插件还会自动生成DownloadServlet、DrawCodeServlet、ExitLoginServlet和PageClosedServlet等几个特殊功能的Servlet类文件。分别控制下载文件、绘制验证码、注销登录和客户端关闭页面等特殊请求的服务器响应。
项目开发人员也可以编写ServletFilter过滤器,更加灵活地控制客户访问。过滤器代码将在Servlet类文件之前被执行。
3.3 拦截层(HttpInterceptor和WebSocketInterceptor)
XWAF支持面向切面的开发模式,这有利于程序员在不修改已有代码的前提下,扩展或插入新的功能。
XWAF框架使用处理拦截器机制,实现切面开发。控制器在执行HttpHandler代码之前,会先执行拦截器的代码。比如:程序员可以将工作日志代码全部写在拦截器中,不必在HttpHandler类中考虑工作日志,这样会节省大量的日志代码。
XWAF框架支持HttpInterceptor和WebSocketInterceptor两种拦截器,XWAF约定:HttpInterceptor必须使用@HttpInterceptor注解标识,而WebSocketInterceptor必须使用@WebSocketInterceptor注解标识。拦截器类的处理方法,则必须使用@RequestMapping注解映射要拦截的URL地址。
为了让XWAF框架找到用户的拦截器位置,必须在“XConfig/XwafConfig.xml”配置文件的“<interceptorPackage></interceptorPackage>”节点中,注册拦截器类所在的包名称。如果有多个拦截器的包名称,请使用英文“,”分隔包名。
3.4 请求处理层(HttpHandler与WebSocketHandler)
请求处理层是XWAF框架真正处理用户请求的重要代码,是控制层的核心处理器。主要工作是提取来自客户端的请求参数和数据,经过分析后,调用业务逻辑服务类的合适方法,实现相应的业务逻辑。并将结果返回给控制器,也可以直接响应客户端(使用Response对象实现)。处理层的代码一般由开发人员编写。
XWAF支持HttpHandler和WebSocketHandler两种处理类。XWAF约定:程序员自定义的HttpHandler类必须使用@HttpHandler注解标识,WebSocketHandler类必须使用@WebSocketHandler注解标识。一个处理方法对应一个客户端请求地址(URL)。方法必须使用@RequestMapping注解映射匹配的请求地址。当Handler处理类的所有方法匹配的请求地址包含共同的地址前缀字符串时,可以给类添加@RequestMapping注解来标识这个前缀,同时,在方法的@RequestMapping注解中去掉这个前缀字符串,达到优化代码的目的。
XWAG插件在生成用户项目代码时,会自动生成基于单表的HttpHandler类,实现对单表的“增、删、改、查”等操作,程序员可以参考。涉及复杂业务逻辑的HttpHandler处理类需要程序员自己编写,并正确注解。
XWAF框架提供了转发WebSocket消息和数据的默认处理类和方法,如果仅仅是转发数据和消息,不需要编写任何处理类;如果要实现复杂的逻辑处理,就需要程序员按照规范自己编写处理类和方法。为了规范程序员编程,XWAF定义了一个IWebSocketHandler接口,程序员可以实现它来完成自己的业务需求。
XWAF框架约定:程序员编写的HttpHandler和WebSocketHandler类可以放在同一个包中,并在框架配置文件“XConfig/XwafConfig.xml”中,使用配置节点“<handlerPackage></handlerPackage>”设置处理类所在的包名称。如果用户项目有多个处理类型包,则使用英文“,”隔开它们。
Web服务器启动项目时,XWAF框架会扫描注册的包,将添加有@HttpHandler注解和@WebSocketHandler注解的类,及其添加有@RequestMapping注解的方法的信息保存到管理器中,以备匹配之用。
过滤器、控制器、Http处理器和拦截器的执行顺序如下:
Servlet 过滤器(Filter)>XWAF 控制器(XwafDispatchServlet)>XWAF 拦截器(HttpInterceptor)>XWAF 处理器(HttpHandler)
3.5 业务逻辑服务层(Service)
业务逻辑服务层是真正处理用户业务逻辑的主体类,应该由开发人员编写,以实现各种各样复杂的业务逻辑处理,并接受Handler类的调用。
为了减轻程序员的工作量,如果使用XWAG插件生成用户项目代码,会自动生成了与各个数据表对应的业务逻辑服务类文件,类文件实现了IHttpXwafService接口,提供对单个数据表进行“增、删、改、查”等基本操作的方法,类文件的命名规则是:数据表名称(去掉前缀字符)+ ”Service.java”。
如果用户项目有更复杂的业务逻辑,可以优先考虑组合这些单表的服务类提供的方法,实现更为复杂的功能。
3.6 数据访问层(DAO)
DAO类是实现数据库访问的基础类,SQL语句和命令应该在DAO方法中组织,不应该放在Service服务层中。
一般地,在Handler层中提取用户提交的参数,转化为DataField或其子类对象的集合后,传递给被调用的Service方法;Service方法再传递给被调用的DAO方法。DAO类的静态方法依据这些来自用户的参数,借助XWAF框架的数据库服务器(DataServer)、数据访问器(DataAccessor)和数据库助手(DataBaseHelper)实现对数据库的访问和更新。如果有返回结果集,就以PageDataSet对象原路返回给Handler层。
XWAG插件为每一个数据表建立一个DAO文件,命名规则是:数据表名称(去掉前缀字符)+ ”DAO.java”,提供对每个数据表的“增、删、改、查”静态方法。也就是说,在XWAF框架中,XWAG插件生成的DAO文件实现了对真实数据表的个性化操作。同时,插件还会为每一个数据表自动创建了“存储过程、触发器、函数、序列”等数据库对象,以提高数据访问的性能。
XWAF框架主张使用DataField数据字段、Record记录和PageDataSet分页数据集对象在不同层次之间传递数据。PageDataSet包含Record对象的Map集合,Record包含DataField对象的List集合。只有DataField对象与数据表的原始字段结构有关联,记录和分页数据集对象都是大小可伸缩的集合,可以随实际参数的个数或结果集的变化而变化。返回结果集PageDataSet与实体类没有关系,因此不需要再考虑查询结果集与实体类的字段不匹配的问题。
为了给开发者提供更多的选择和便利,使用Eclipse插件XWAG生成项目代码时,还是会自动生成与各个数据表对应的实体类,开发人员也可以选作传递数据之用,但框架不建议这样做。因为实体类在Web项目中传递客户的请求数据不够灵活,在输出查询结果集时,又难以满足只输出部分字段值的特殊情况,还需要额外的数据实体映射编程。
使用XWAF框架(1)——Web项目的代码分层的更多相关文章
- SSM框架开发web项目系列(二) MyBatis真正的力量
前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...
- SSM框架开发web项目系列(五) Spring集成MyBatis
前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...
- MyEclipse使用总结——在MyEclipse中新建Maven框架的web项目[转]
前面的文章我们已经在本机安装好了maven,同时在myeclipse中配置好了maven的插件. 链接如下: Maven安装----在Windows上安装Maven myeclipse安装maven插 ...
- 手工搭建ABP框架(1) - Web项目
为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7295533.html ABP是 ASP.NET Boilerplate Proj ...
- SSM框架开发web项目系列(一) 环境搭建篇
前言 开发环境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL 主要框架:Spring + Spring MVC + Mybatis 目的:快速上手 ...
- SSM框架开发web项目系列(六) SpringMVC入门
前言 我们最初的javaSE部分学习后,基本算是入门了,也熟悉了Java的语法和一些常用API,然后再深入到数据库操作.WEB程序开发,渐渐会接触到JDBC.Servlet/Jsp之类的知识,期间可能 ...
- SpringMVC框架下Web项目的搭建与部署
这篇文章已被废弃. 现在,Deolin使用Maven构建项目,而不是下载Jar文件,使用Jetty插件调试项目,而不是外部启动Tomcat. SpringMVC比起Servlet/JSP方便了太多 W ...
- SSM框架开发web项目系列(七) SpringMVC请求接收
前言 在上篇Spring MVC入门篇中,我们初步了解了Spring MVC开发的基本搭建过程,本文将针对实际开发过程的着重点Controller部分,将常用的知识点罗列出来,并配以示例.在这之前,我 ...
随机推荐
- Lucas定理及扩展
Lucas定理 不会证明... 若\(p\)为质数 则\(C(n, m)\equiv C(n/p, m/p)*C(n\%p, m\%p)(mod\ p)\) 扩展 求 \(C(n,m)\) 模 \(M ...
- php中怎么理解Closure的bind和bindTo
bind是bindTo的静态版本,因此只说bind吧.(还不是太了解为什么要弄出两个版本) 官方文档: 复制一个闭包,绑定指定的$this对象和类作用域. 其实后半句表述很不清楚. 我的理解: 把一个 ...
- 用Appium让Android功能自动化测试飞起来
前言 做Android端功能自动化已有2年多的时间了,使用过的功能自动化框架有Robotium.Uiautomator.Appium.最近研究自动化case复用的方案,调研了Appium的自动化框架, ...
- TCP状态统计 - 脚本命令
一.netstat命令说明 netstat常见参数 -a (all)显示所有选项,默认不显示LISTEN相关 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示 ...
- 自动化测试基础篇--Selenium框架设计(POM)
一.自动化测试框架 感谢木棉花的漂泊分享,内容转自链接:http://www.cnblogs.com/fengyiru6369/p/8053035.html 1.什么是自动化测试框架 简单来说,自动化 ...
- C# winfrom Datagridview表头样式和选中样式
Griscolor是表格线的颜色 表头的样式修改如下图: 选中某一行的样色设置
- C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别
多维数组的声明 在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ] int [,] test1 = new int [3,3]; 或声明时即赋值 ...
- August 25th 2017 Week 34th Friday
Stop to have a rest, do not forget others still in the running. 停下来休息的时候,不要忘记别人还在奔跑. You don't need ...
- 安装Jdk,tomcat【转载】
一.下载安装对应的jdk,并配置Java环境. 官网下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-dow ...
- shell基础之脚本执行,命令别名以及快捷键等
脚本执行方式 比如我们在/root/下编写了一个脚本,名字为hello.sh.那么怎么调用执行它呢?有两种办法: (1)直接通过bash,如下: bash hello.sh 注:采用bash执行脚本 ...