建议在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. SPOJ:LCS2 - Longest Common Substring II

    题面 给定一些字符串,求出它们的最长公共子串 输入格式 输入至多 \(10\) 行,每行包含不超过 \(100000\)个的小写字母,表示一个字符串 输出格式 一个数,最长公共子串的长度 若不存在最长 ...

  2. 爬虫必备—requests

    Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得 ...

  3. 如何提高 Java 中锁的性能

    锁不是问题的根源,锁之间的竞争才是 通常在多线程的代码中遇到性能方面的问题时,一般都会抱怨是锁的问题.毕竟锁会降低程序的运行速度和其较低的扩展性是众所周知的.因此,如果带着这种“常识”开始优化代码,其 ...

  4. String和StringBuffer有什么区别

    首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...

  5. nginx参考资料

    什么是负载均衡? 官网的入门文章中文版 love2上关注数比较高的nginx教程 什么是反向代理,什么又是正向代理? csdn上浅谈Nginx之反向代理与负载均衡 Nginx 作为 WebSocket ...

  6. [NCH 1, 3]

    Preview: 1. Implement strStr() O(m*n): class Solution { public: int strStr(string haystack,string ne ...

  7. [翻译] BBCyclingLabel

    BBCyclingLabel BBCyclingLabel is just like a UILabel but allows you to perform custom animations whe ...

  8. Mybatis学习---Mybatis分页插件 - PageHelper

    1. Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,S ...

  9. 第三次作业 史浩然 -assassin Talon

  10. Java面试基本知识

    Java基本知识 基本知识 服务器:Tomcat 支持Servlet jsp JBoss 开源应用服务器 Apache:最广泛的http服务器,只支持静态网页 String是长度不可变,用+=的时候会 ...