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体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可扩展、灵活缩放的高质量企业应用系统提供了一套...
我们关心是 Ajax 技术的引入对现有传统 J2EE Web 开发方式的影响和挑战,进而论述 Beetle Web 框架封装 Ajax 的理念和机制, 从而最终了解 J2EE Web 开发使用 Ajax 技术的核心所在。 Ajax 技术的引入对传统 J2EE ...
BJAF(beetle-j2ee-application-framework)甲壳虫J2EE应用开发框架代码&开发指南 甲壳虫,一个功能强大而简单易用的J2EE应用开发框架。它涵盖了J2EE体系结构的表示层、业务层和持久层,为构建一个可靠、高性能、可...
【标题】"beetle 开源框架书的源码"涉及的是一个名为"beetle"的开源框架的源代码,这通常意味着该框架可能是用于Java平台,因为J2EE(Java 2 Platform, Enterprise Edition)是Java领域广泛使用的开发企业级应用的...
标题中的"Beetle.JT808-master.zip"表明这是一个关于JT808协议的开源项目,由Beetle框架实现,且基于C#编程语言。Beetle是一个通用的通讯框架,而JT808则是一种广泛应用于中国GPS监控系统中的通信协议。这个项目可能...
已经成功应用于多个高并发量的TCP、UDP框架通信接口,
本用户指南主要介绍了BEETLE_XL_II收款机的操作方法、维护保养以及常见问题解决办法等内容。它适用于所有BEETLE_XL_II系列产品的用户及技术支持人员。 #### 设备护理 - **日常清洁**:使用柔软干净的布料轻轻擦拭...
在C#编程中,"Beetle"可能指的是一个自定义的框架或库,用于处理文件传输任务。这个框架可能是为了提高文件传输的效率而设计的。在标题中提到的"beetle类包含其他类",这暗示了Beetle可能是一个封装了多种功能的类库...
Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle.zipscratch2.0 3.0编程项目源文件源码经典游戏案例素材源代码Beetle....
甲壳虫 PSX 剧本Beetle PSX 是 Mednafen 的 PSX 模块到 libretro API 的端口/分支。 可以用C++98模式编译,不包括Vulkan渲染器,暂时是用C++11写的。 Beetle PSX 目前在 Linux、OSX 和 Windows 上运行。 这个分叉中...
总的来说,Popular Beetle是一款功能强大且易于使用的数据库管理工具,它的数据库比较和数据整合能力对于软件生命周期管理中的各个阶段都具有重要的价值。通过高效、准确的数据库操作,可以大大提升工作效率,降低因...
-dung_beetle.zip" 是一个压缩包,其中包含了一个名为 "dung_beetle-master" 的文件夹,这很可能是项目的源代码目录,通常包括教程的实例、脚本和其他相关资源。让我们逐步了解Python爬虫的基本概念和常用工具。 1....
标题中的“加长版甲壳虫汽车外壳3D图纸”是指使用solidworks2014软件设计的一款经典甲壳虫汽车的加长版车型的三维模型。SolidWorks是一款广泛应用于机械设计领域的三维CAD(计算机辅助设计)软件,以其易用性和强大...
天牛须算法(Beetle Antennae Search Algorithm,简称BAS),是一种新型的智能优化算法,它以长角天牛的搜索行为为灵感而设计。长角天牛因其长长的触须而著名,这些触须常常比它们的身体还要长。BAS算法模拟了这些...
标题中的“c#_以Beetle为基础SOCKET服客端(WPF)与客户端(winphone\win8 metro)”指的是一个使用C#编程语言构建的网络通信应用,它基于Beetle框架,实现了SOCKET服务器端(WPF)以及Windows Phone和Windows 8 Metro...
至于“keracce-Beetle-9cc3275”,这可能是一个源代码库的特定版本标识,比如Git仓库的一个分支或者标签。这个名称可能指的是Beetle项目的作者或者一个特定的开发迭代。要深入理解这个项目,你需要解压这个压缩包并...
新投资组合 产品组合-Web开发-全栈 图标指南 新功能 :sparkles: =>闪闪发光错误修正 :lady_beetle: =>甲虫包裹 :package: =>包裹自述文件 :clipboard: =>剪贴板
有需要的朋友就下吧
标注类别名称:["Cashew-anthracnose","Cashew-healthy","Cashew-leaf-miner","Cassava-bacterial-blight","Cassava-brown-spot","Cassava-healthy","Maize-healthy","Maize-leaf-beetle","Maize-leaf-blight",...
对于那些频繁使用GitHub、GitLab和Azure DevOps的开发者来说,Beetle无疑是一个非常实用的工具,值得尝试和贡献。通过探索和参与这个项目,不仅可以学习到如何与这些平台的API进行交互,还可以了解如何构建高效且...