建议在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项目的代码分层的更多相关文章

  1. SSM框架开发web项目系列(二) MyBatis真正的力量

    前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...

  2. SSM框架开发web项目系列(五) Spring集成MyBatis

    前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...

  3. SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射

    前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...

  4. MyEclipse使用总结——在MyEclipse中新建Maven框架的web项目[转]

    前面的文章我们已经在本机安装好了maven,同时在myeclipse中配置好了maven的插件. 链接如下: Maven安装----在Windows上安装Maven myeclipse安装maven插 ...

  5. 手工搭建ABP框架(1) - Web项目

    为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7295533.html ABP是 ASP.NET Boilerplate Proj ...

  6. SSM框架开发web项目系列(一) 环境搭建篇

    前言 开发环境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL 主要框架:Spring + Spring MVC + Mybatis 目的:快速上手 ...

  7. SSM框架开发web项目系列(六) SpringMVC入门

    前言 我们最初的javaSE部分学习后,基本算是入门了,也熟悉了Java的语法和一些常用API,然后再深入到数据库操作.WEB程序开发,渐渐会接触到JDBC.Servlet/Jsp之类的知识,期间可能 ...

  8. SpringMVC框架下Web项目的搭建与部署

    这篇文章已被废弃. 现在,Deolin使用Maven构建项目,而不是下载Jar文件,使用Jetty插件调试项目,而不是外部启动Tomcat. SpringMVC比起Servlet/JSP方便了太多 W ...

  9. SSM框架开发web项目系列(七) SpringMVC请求接收

    前言 在上篇Spring MVC入门篇中,我们初步了解了Spring MVC开发的基本搭建过程,本文将针对实际开发过程的着重点Controller部分,将常用的知识点罗列出来,并配以示例.在这之前,我 ...

随机推荐

  1. BZOJ P1212 [HNOI2004] L语言

    标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的集合. 我 ...

  2. Install MySQL on Mac

    1. 可参考此文章:http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html 2. 目前MySQL(我用的mysql 5 ...

  3. Python 爬虫 ajax爬取马云爸爸微博内容

    ajax爬取情况 有时候我们在用 Requests 抓取页面的时候,得到的结果可能和在浏览器中看到的是不一样的,在浏览器中可以看到正常显示的页面数据,但是使用 Requests 得到的结果并没有,这其 ...

  4. configparser logging collections 模块

    configparser 模块: 这是一个写入的模块就是把你的信息给写入的模块 #这是一个把信息写入example文件内import configparserconfig = configparser ...

  5. 设计模式(17) 访问者模式(VISITOR) C++实现

    意图: 表示一个作用于某对象结构的各元素的操作.它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作. 动机: 之前在学校的最后一个小项目就是做一个编译器,当时使用的就是访问者模式. 在静态 ...

  6. exchange 普通用户可以创建通讯组

    运维发现,通讯组多了好多未知名称的,经查为普通用户通过owa新建的,怎么阻止用户新建通讯组呢. 在搭建exchange后,系统会自动创建一个“Default Role Assignment Polic ...

  7. 点开无线显示"已连接 安全",但是点击下面无线图标却显示"无法连接internet",解决方案

    管理员权限运行“命令提示符” 输入:netsh winsock reset 然后重启电脑即可

  8. 二进制安装mariaDB

    1.获取二进制安装包 获取二进制格式MariaDB安装包,可去官网下载. 因为是实验环境,所以选择了最新版. mariadb-10.2.12-linux-x86_64.tar.gz 2.解压 解压到 ...

  9. C++通过Callback向C#传递数据

    现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得. 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题. 从调用方式看也 ...

  10. python 函数式编程之lambda( ), map( ), reduce( ), filter( )

    lambda( ), map( ), reduce( ), filter( ) 1. lambda( )主要用于“行内函数”: f = lambda x : x + 2 #定义函数f(x)=x+2 g ...