Ajax是当前流行的Web开发技术,BJAF Web框架在原有框架结构上对Ajax进行了强而有力的封装,是开发Ajax就想开发一个普通的传统标准控制器那么简单。Ajax框架结构如下:
浏览器采取Javascript调用XMLHttpRequest(Mozilla、Microsoft各有实现)后台底层Http请求组件与远程的J2EE Web Servlet容器通信:发出的请求交给GlobalDispatchServlet服务程序去负责统一处理,它适配给AjaxController控制器再通过AjaxConfig配置类读取部署在WebController.xml文件中的Ajax子控制器配置信息。然后,根据浏览器提交请求的子控制器名称来匹配其对应的处理程序,完成请求逻辑并把结果数据返回给浏览器客户端。最后,浏览器再利用Javascript来解析并展现这些结果数据。
ICommonAjax是请求处理程序的入口,所有的Ajax子控制器都必须实现此接口,其定义如下:
package com.beetle.framework.web.controller.ajax;
public interface ICommonAjax {
/**
* ajax控制逻辑执行方法,GlobalDispatchServlet会根据请求的名称来找到此接口的实现类,
* 并执行此方法完成任务
* @param AjaxRequest 浏览器客户端提交的参数对象,参照传统的Http Request设计。提供一些方法便于获取参数。
* @return AjaxResponse 返回一个AjaxResponse结果响应的数据对象,其数据格式为json。因为ajax是后台刷新,也就是说返回的视图就是它自己本身。
* @throws ControllerException
*/
AjaxResponse perform(AjaxRequest request) throws ControllerException;
}
可见,其执行过程很明显:在perform方法体内,首先从输入参数AjaxRequest对象中获取页面提交上来的数据,然后编程处理请求的逻辑,最后生成结果的数据放在AjaxResponse对象中,并返回。
下面例子为用Ajax改写标准控制器的登录实现:
package com.beetle.WebDemo.presentation;
import java.util.*;
import com.beetle.WebDemo.common.*;
import com.beetle.framework.web.controller.ajax.* ;
public class LoginAjaxController implements ICommonAjax {
public LoginAjaxController() {
}
public AjaxResponse perform(AjaxRequest ajaxRequest) throws ControllerException {
AjaxResponse response = new AjaxResponse();
//获取页面输入的参数
String userName = ajaxRequest.getParameter("username");
int password = ajaxRequest.getParameterAsInt("password");
//调用业务对象处理业务逻辑,本示例在这里只是简单地作了一个字符串比较
if (userName.equals("HenryYu") && password == 888888) {
User user = new User();
user.setUserId(new Integer(10001));
user.setName("余浩东");
user.setPhone("13501583576");
user.setSex("男");
user.setYear(30);
response.setValue("UserInfo", user);
response.setValue("LoginTime", new Date(System.currentTimeMillis()));
response.setReturnFlag(0);
response.setReturnMsg("登陆成功!");
}
else {
response.setReturnFlag(-1);
response.setReturnMsg("登陆失败!");
}
return response;
}
}
Javascript客户端请求(同步)代码为:
<SCRIPT LANGUAGE="JavaScript">
<!--
function doLogin()
{
var req=new Request();//创建一个请求对象
req.setControllerName("LoginAjaxController.ajax");//设置处理控制器名称
req.put("username",form1.username.value);//输入请求参数
req.put("password",form1.password.value);
var r=req.synchroExecute();//同步执行请求并处理响应结果
if(r.returnFlag==0){
var userInfo=r.getValueByName("UserInfo");
var user=userInfo.name;
var userid=userInfo.userId;
var useryear=userInfo.year;
var sex=userInfo.sex;
var phone=userInfo.phone;
var loginTime=new Date(r.getValueByName("LoginTime").time);
alert(r.returnMsg+'\n-->用户信息<--\n编号:'+userid+'\n姓名:'+user+'\n性别:'+sex+'\n年龄:'+useryear+'\n登陆时间:'+loginTime.toString());
}else{
alert(r.returnMsg);
}
}
//-->
</SCRIPT>
当然,框架也支持异步请求,其代码如下:
function login(){
var req=new Request();
req.setControllerName("LoginAjaxController.ajax");
req.put("username",f2.username.value);
req.put("pwd",f2.pwd.value);
req.put("flag",0);
req.asynchroExecute( //异步执行,并利用回调函数处理结果
function resultHandle(r){
if(r.returnFlag==0){
alert(r.returnMsg);
var userInfo=r.getValueByName("UserInfo");
var username=userInfo.username;
var pwd=userInfo.pwd;
var sex=userInfo.sex;
var email=userInfo.email;
var registTime=new Date(userInfo.registTime.time);
alert(r.returnMsg+'\n-->用户信息<--\n姓名:'+username+'\n性别:'+sex+'\n邮件:'+email+'\n注册时间:'+registTime.toString());
}else{
alert(r.returnMsg);
}
});
}
最后,需要在WebController.xml文件指定Ajax控制器与实现类的映射关系:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
<controllers>
<ajax>
<aItem name="LoginAjaxController.ajax" class=" com.beetle.WebDemo.presentation.LoginAjaxController"/>
</ajax>
</controllers>
</mappings>
上面整个ajax请求访问过程的各组件的调用关系如下:
首先,浏览器html页面引入jsonrpcEx.js库,在登录按钮事件内创建一个Request请求对象,调用其setControllerName()方法指定服务器处理此请求的子控制器名称,调用put()方法输入请求参数,调用synchroExecute()方法提交请求。
其次,GlobalDispatchServlet主控器接收到通过http协议提交上来的请求,交给AjaxController控制器去处理,它根据控制器名称找到其对应的LoginController实现类,并实例化它,调用其perform()方法执行处理请求的逻辑,并返回AjaxResponse结果对象给主控器,主控制将此结果进行序列化,以MapValue数据形式返回到浏览器的javascript客户端。
最后,javacirpt端request对象把传回的数据封装成一个Response对象交回给html页面,再通过Response对象提供的getValueByName方法读取返回的数据解析显示在页面视图上。
#BJAF Web框架对Ajax技术进行有力封装,详细请参考Henry Yu编写的《J2EE Web开发使用Ajax技术的核心所在》文章。
- 大小: 26.2 KB
- 大小: 24.7 KB
分享到:
相关推荐
Beetle J2ee Application Framework(BJAF)一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可扩展、灵活缩放的高质量企业应用系统提供了一套...
BJAF(beetle-j2ee-application-framework)甲壳虫J2EE应用开发框架代码&开发指南 甲壳虫,一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可...
beetle 开源框架书的源码 beetle 开源框架书的源码
已经成功应用于多个高并发量的TCP、UDP框架通信接口,
X协议解析测试程序,服务器和客户端都有,字数字数字数
Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle....
BAS: Beetle Antennae Search Algorithm for Optimization Problems。 论文英文原文。
甲壳虫 PSX 剧本Beetle PSX 是 Mednafen 的 PSX 模块到 libretro API 的端口/分支。 可以用C++98模式编译,不包括Vulkan渲染器,暂时是用C++11写的。 Beetle PSX 目前在 Linux、OSX 和 Windows 上运行。 这个分叉中...
软件测试的利器。 最新版本请到这下载www.popular-soft.com/beetle/zh-cn/
新投资组合 产品组合-Web开发-全栈 图标指南 新功能 :sparkles: =>闪闪发光错误修正 :lady_beetle: =>甲虫包裹 :package: =>包裹自述文件 :clipboard: =>剪贴板
有需要的朋友就下吧
BJAF 是甲壳虫J2EE 应用框架(Beetle J2EE Application Framework)的简写,它并不是一个可以 即时看见和运行的应用系统,它为构建于J2EE 之上的应用系统定义了一个固定而有效的设计开发框 架,简化J2EE 应用,尤其...
beetle是基于c#编写的高性能Socket tcp组件,它基于SocketAsyncEventArgs的实现并提供了发送队列和接收队列的支持,可以根据情况灵活地设置1-N个发送队列和接收队列。除了队列上的支持组件还提供Buffer缓冲池和基于...
APMongo visual [供开发人员使用] I :large_orange_diamond: 智威汤逊 (JSON Web令牌)-本地身份验证 :large_orange_diamond: BCrypt 密码的哈希加密 :lady_beetle: 安装方式 在ubuntu 16.04 LTS上安装MySQL...
Python从零开始,一点一滴学习爬虫。-dung_beetle
c#传输文件传输用到的类, 听说效率不错,具体没用过
适用于Chrome的高清版19张adung甲虫图像新标签页。 粪便甲虫是部分或完全以粪便为食的甲虫。 一头甲虫可以在一个晚上掩埋比自己重250倍的粪便。 许多被称为“滚子”的粪便甲虫会将粪便滚成圆球,用作食物来源或繁殖...
Beetle J2ee Application Framework(BJAF)一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可扩展、灵活缩放的高质量企业应用系统提供了一套...
scratch编程项目源代码文件案例素材-Beetle.zip
ExtJS实用开发指南包括了tree、panel、grid等进行详细的操作讲解