Buffalo最佳实践
本文将介绍Buffalo AJAX的两种配置的最佳实践,这个AJAX框架还是中国大师开发的,用起来估计是最方便、最简单的一个
准备工作:
官网下载buffalo-2.0-bin,也可以下载buffalo-2.0-src
下载地址:http://sourceforge.net/project/showfiles.php?group_id=178867
一、纯buffalo实现ajax异步调用
1.buffalo-2.0.jar
直接在buffalo-2.0-bin里,把它添加到WEB服务中lib。
2.buffalo.js和prototype.js
a.两个文件放到Web应用程序的/WebRoot/js/目录下。
b.[buffalo.js]文件在buffalo-2.0-bin目录中获取。
c.[prototype.js]文件在buffalo-demo.war包中获取。
3.web.xml中添加buffalo核心处理类的配置
<servlet>
<servlet-name>bfapp</servlet-name>
<servlet-class>
net.buffalo.web.servlet.ApplicationServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bfapp</servlet-name>
<url-pattern>/bfapp/*</url-pattern>
</servlet-mapping>
4.新建一个java示例类,此处命名为:MyBuffalo.java
package my.buffalo; public class MyBuffalo
{
public String getMyBuffalo(String name)
{
return "Hi, " + name + " , Welcome to MyBuffalo !";
}
}
5.在源文件夹src下新建一个属性文件,命名为:buffalo-service.properties,
此文件编译后位于WEB-INF/classes/目录下,buffalo框架是通过此文件来查找远程调用的类的。
#如果web工程也使用buffalo整合spring的配置方式[BuffaloServiceConfigurer]
#此文件中myBuffalo在Spring配置文件也存在,此时存在访问优先级,优先读取Spring的myBuffalo进行远程调用,找不到才会读取此文件中的myBuffalo
myBuffalo = my.buffalo.MyBuffalo
6.index.jsp文件--测试入口
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Buffalo--最佳实践</title>
<script language="JavaScript" src="js/prototype.js"></script>
<script language="JavaScript" src="js/buffalo.js"></script> <script type="text/javascript">
var endPoint = "${pageContext.request.contextPath}/bfapp";
var buffalo = new Buffalo(endPoint);
//第一个参数是调用业务的方法,第二个是参数列表,用[]括起来,第三个是回调接口,
//需要调用的都可以写在这个函数中
function foo(name) {
buffalo.remoteCall("myBuffalo.getMyBuffalo", [name.value], function(reply) {
alert(reply.getResult());
})
}
</script>
</head> <body> UserName :<input type="text" name="myname" id="myNameId">
<!-- 此处的$('myNameId')中的myNameId推荐使用id属性,而不是name属性,很多浏览器都不支持name属性获取值的方式 -->
<input type="button" value="Buffalo-Enter" onclick="foo($('myNameId'));"><br>
</body>
</html>
7.启动web服务,在browser地址输入http://ip:port/projectName, 测试结果:

二、buffalo整合spring框架实现ajax异步调用
Notes:此方式与纯buffalo实现ajax异步调用区别,简单来说就是将buffalo-service.properties内容交给spring来管理。
实现步骤仅需要在“纯buffalo实现ajax异步调用”基础上,增加两个核心参数配置即可。
1、第一个核心参数,在web.xml增加spring的核心监听器ContextLoaderListener
<!-- Spring加载的配置文件,主要通过ContextLoader中的CONFIG_LOCATION_PARAM = "contextConfigLocation" -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:kernel.xml</param-value>
</context-param> <listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
2、第二个核心参数,在kernel.xml增加buffalo的核心管理器BuffaloServiceConfigurer
<bean class="my.buffalo.MyBuffalo" name="myBuffalo"></bean> <!-- Buffalo的业务配置,需要用到的业务核心类都在此处配置 -->
<bean id="buffaloServiceBean" class="net.buffalo.service.BuffaloServiceConfigurer">
<property name="services">
<map>
<entry key="myBuffalo" value-ref="myBuffalo"></entry>
</map>
</property>
</bean>
3、测试方式使用index.jsp, 结果和纯buffalo实现方式的结果一致!
Buffalo最佳实践的更多相关文章
- ASP.NET跨平台最佳实践
前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语言本身来看,C#确实比Java ...
- 《AngularJS深度剖析与最佳实践》简介
由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...
- ASP.NET MVC防范CSRF最佳实践
XSS与CSRF 哈哈,有点标题党,但我保证这篇文章跟别的不太一样. 我认为,网站安全的基础有三块: 防范中间人攻击 防范XSS 防范CSRF 注意,我讲的是基础,如果更高级点的话可以考虑防范机器人刷 ...
- 快速web开发中的前后端框架选型最佳实践
这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...
- Spring Batch在大型企业中的最佳实践
在大型企业中,由于业务复杂.数据量大.数据格式不同.数据交互格式繁杂,并非所有的操作都能通过交互界面进行处理.而有一些操作需要定期读取大批量的数据,然后进行一系列的后续处理.这样的过程就是" ...
- Atitit.log日志技术的最佳实践attilax总结
Atitit.log日志技术的最佳实践attilax总结 1. 日志的意义与作用1 1.1. 日志系统是一种不可或缺的单元测试,跟踪调试工具1 2. 俩种实现[1]日志系统作为一种服务进程存在 [2] ...
- PHP核心技术与最佳实践——全局浏览
难得买到并喜欢一本好书,‘PHP核心技术与最佳实践’. 几天时间,先看了个大概,总结一下整体是什么样子的,怎么看怎么学. 1.总共14章: 2.第1.2章讲PHP的OOP: 其中第一章侧重于PHP的O ...
- Abp集成Swagger的最佳实践
1.在项目中添加nuget包 Abp.Web.Api.SwaggerTool 2.在项目Abp模块的DependsOn添加AbpWebApiSwaggerToolModule Run It,启动项目, ...
- MySQL · 答疑解惑 · MySQL 锁问题最佳实践
http://mysql.taobao.org/monthly/2016/03/10/ 前言 最近一段时间处理了较多锁的问题,包括锁等待导致业务连接堆积或超时,死锁导致业务失败等,这类问题对业务可能会 ...
随机推荐
- php数组常见的几种遍历方法
1.foreach遍历 $arr[] = array('first'=>green,'second'=>'yellow','third'=>'blue'); foreach($arr ...
- Linq学习总结2--Linq to XML
概述: linq to xml(下面简称ltx好了),是微软根据linq技术对于XML的CURD.使用起来比System.XML中的XML操作方式更加简便.这段时间使用它在公司里升级了老板的邮件系统, ...
- HTML之iframe
iframe:是框架的一种形式. 属性: frameborder=0/1 表示是否显示周围边框 0--否 1--是 width,height:设置的边框宽高,具体数值不需要加单位,也可用百分比 mar ...
- block中如何避免循环引用
使用 weak–strong dance 技术 block 可以直接引用 self,但是要非常小心地在 block 中引用 self.因为在 block 引用 self,可能会导致循环引用.如下例所示 ...
- JSTL的fn函数
JSTL使用表达式来简化页面的代码,这对一些标准的方法,例如bean的getter/setter方法,请求参数或者context以及session中的数据的访问非常方便,但是我们在实际应用中经常需要在 ...
- 关于rem的自定义HTML比例设定
通过设定html根标签的font-size值,控制rem来达到全局布局的自适应的,CSS长度单位全部通过rem设定 必须在head在中引入不可以延迟引入: (function (doc, win) { ...
- js中的call和apply方法的区别
一.call和apply的说明 1.call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以 ...
- 当我们说线程安全时,到底在说什么——Java进阶系列(二)
原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...
- 第三方Girdview中文件下载的方法,以及js显示图片
/// <summary> /// 文件下载事件 /// </summary> /// <param name="sender"></ ...
- IOS开发网络数据---- AFNetworking的使用
http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库.最新版本支持session,xctool单元测试.网络获取数 ...