`

通用Ajax设计

阅读更多

利用Servlet和反射技术实现通用的Ajax调用设计,如下:

一,调用规则
在JS代码,调用者只需按下面的规范,即可实现异步或同步java方法调用
在你的jsp或html页面中,导入通用异步调用方法文件(km.js[自定义]),然后写异步调用方法AjaxTest(url),url格式为:

var result  = AjaxTest(“异步类名/方法名?”+时间戳+参数)     参数中的名称,跟你异步类中的字段要一致,

异步类及其方法可自定义,但必须统一放在固定的包(com.smartcom.km.ajaxObj )下面,以达到通用的目的

,如果参数中有中文,须进行编码后再调用,用一个变量(result )接收其返回值即可,详细代码如下:

 

1. 在页面中引入异步方法文件

   <script type="text/javascript" src="js/km.js"></script>

 

2.  index.jsp (页面中的异步调用)

<script type="text/javascript">
   			document.write("异步调用1------------------------------<br>");
   			var params = "?time="+new Date().getTime()+"&userid=zhangs&username=张三";
   			var url = "Ajax4Public/execute1"+encodeURI(encodeURI(params));
   			var ret = AjaxTest(url);
   			if(""!=ret){ 
   				document.write(ret+"<br>");
   			}
   			
   			document.write("异步调用2------------------------------<br>");
   			var params = "?time="+new Date().getTime()+"&userid=lis&username=李四";
   			var url = "Ajax4Public/execute2"+encodeURI(encodeURI(params));
   			var ret = AjaxTest(url);
   			if(""!=ret){ 
   				document.write(ret+"<br>");
   			}
   			
   			document.write("异步调用3------------------------------<br>");
   			var params = "?time="+new Date().getTime()+"&userid=wangw&username=王五";
   			var url = "Ajax4Comm/execute1"+encodeURI(encodeURI(params));
   			var ret = AjaxTest(url);
   			if(""!=ret){ 
   				document.write(ret+"<br>");
   			}
   			
   			document.write("异步调用4------------------------------<br>");
   			var params = "?time="+new Date().getTime()+"&userid=zhaoq&username=赵七";
   			var url = "Ajax4Comm/execute2"+encodeURI(encodeURI(params));
   			var ret = AjaxTest(url);
   			if(""!=ret){ 
   				document.write(ret+"<br>");
   			}
 </script>

 

 3.  km.js( 通用异步方法代码)

	 function AjaxTest(url){
		var xmlhttp=null;
		
		if (window.XMLHttpRequest){// code for Firefox, Opera, IE7, etc.
		  xmlhttp=new XMLHttpRequest();
		  if(xmlhttp.overrideMimeType){
		  		xmlhttp.overrideMimeType("text/html");
		  }
		}else if (window.ActiveXObject){// code for IE6, IE5
		  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		
		if (xmlhttp!=null){  
			xmlhttp.onreadystatechange=function(){}; 
			xmlhttp.open("GET","./servlet/com.borse.km.servlet.Dispatcher/"+url,false);
			xmlhttp.send(null);
			return xmlhttp.responseText;
		}else{
			alert("Your browser does not support XMLHTTP.");
			return false;
		}
	} 

 

4.   com.smartcom.km.servlet.Dispatcher.java  (Servlet代码)

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");   
		Object retparam = null; //返回值参数
		try {
			System.out.println("------------------------------->>>params:"+request.getPathInfo());
			String [] path = request.getRequestURL().toString().split("/", -1);
			String methodName = path[path.length-1];
			System.out.println("------------------------------->>>methodName:"+methodName);
			String beanName = path[path.length-2];
			System.out.println("------------------------------->>>beanName:"+beanName);
			String ajaxpath = null;
			if(ajaxpath==null || ajaxpath.trim().length()<1){
				ajaxpath="com.smartcom.km.ajaxObj";
			}
			System.out.println("------------------------------->>>ajaxpath:"+ajaxpath);
			//反射
			System.out.println("------------------------------->>>bean:"+ajaxpath+"."+beanName);
			Object bean = Class.forName(ajaxpath+"."+beanName).newInstance();
			BeanUtils.populate(bean, request.getParameterMap());
			retparam = MethodUtils.invokeMethod(bean, methodName, new Object []{});
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html");
		response.getWriter().write(retparam.toString());
}

 

5. web.xml (servlet配置)

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>Dispatcher</servlet-name>
    <servlet-class>com.smartcom.km.servlet.Dispatcher</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Dispatcher</servlet-name> 
     <url-pattern>/servlet/*</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
 

 

6. com.smartcom.km.ajaxObj.Ajax4Public.java (异步类1)

public class Ajax4Public {
	private String userid;
	private String username;
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public void setUsername(String username) {
		try {
			this.username = java.net.URLDecoder.decode(username,"UTF-8"); 
		} catch (Exception e) {
			this.username = username;
		}
		
	}
	public String execute1(){
		System.out.println("----------------------->>>userid:"+this.userid);
		System.out.println("----------------------->>>username:"+this.username); 
		return  "["+this.username+"]调用[Ajax4Public.execute1()]成功!";
	}
	
	public String execute2(){
		System.out.println("----------------------->>>userid:"+this.userid);
		System.out.println("----------------------->>>username:"+this.username); 
		return  "["+this.username+"]调用[Ajax4Public.execute2()]成功!";
	}
}
 

7. com.smartcom.km.ajaxObj.Ajax4Comm.java (异步类2)

public class Ajax4Comm {
	private String userid;
	private String username;
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public void setUsername(String username) {
		try {
			this.username = java.net.URLDecoder.decode(username,"UTF-8"); 
		} catch (Exception e) {
			this.username = username;
		} 
	}
	public String execute1(){
		System.out.println("----------------------->>>userid:"+this.userid);
		System.out.println("----------------------->>>username:"+this.username); 
		return  "["+this.username+"]调用[Ajax4Comm.execute1()]成功!";
	}
	
	public String execute2(){
		System.out.println("----------------------->>>userid:"+this.userid);
		System.out.println("----------------------->>>username:"+this.username); 
		return  "["+this.username+"]调用[Ajax4Comm.execute2()]成功!";
	}
}

 

运行结果如下:


 

 

  • 大小: 42.1 KB
0
0
分享到:
评论
2 楼 skcks 2012-10-21  
建行内部开发平台也是做了一个类似的封装用于ajax远程调用服务端方法。
1 楼 qiuyu1990 2012-10-21  
这个应该是 DWR的原理吧

相关推荐

    validate 通用Ajax无刷新表单验证类

    "validate 通用Ajax无刷新表单验证类"就是针对这一需求设计的,旨在提供一个高效、便捷的解决方案,使得在用户填写表单时能够实时进行数据验证,无需等待页面刷新,极大地提高了用户体验。 Ajax(Asynchronous ...

    通用AjaxServlet

    通用AjaxServlet是一个旨在简化Web应用开发的技术方案,它利用了Java反射机制,使得前端JavaScript能够动态地调用后台服务器上的任意Java类中的方法。这种方式极大地提高了Web应用的灵活性和可扩展性,尤其在处理...

    validate 通用Ajax无刷新表彰验证类

    "validate 通用Ajax无刷新表彰验证类"是一个专门针对这一需求设计的JavaScript库,它的主要功能是在用户提交表单前进行实时验证,无需页面刷新,通过Ajax技术实现后台验证的无感交互。 1. **实时验证**: validate类...

    validate 通用Ajax无刷新表单验证类(JavaScript)

    总的来说,`validate`通用Ajax无刷新表单验证类为开发者提供了一个强大且灵活的工具,使得前端表单验证变得更加便捷和高效。通过合理利用这个类,开发者可以创建出用户体验优秀的Web应用,同时降低了服务器的压力。

    ajax通用函数,兼容市面所有浏览器,纯javascript实现

    }这个通用 `ajax` 函数通过使用 JavaScript 实现了一个跨浏览器的 AJAX 请求。它首先检查是否支持 `ActiveXObject`(针对旧版 Internet Explorer)或 `XMLHttpRequest` 对象。然后,它会初始化一个请求,设置请求...

    Ajax通用分页源码(ASP.NET)

    本资源提供的“Ajax通用分页源码”正是这样一个功能模块,它允许用户在浏览大量数据时,只加载当前所需的页面内容,从而提高网页性能和用户交互性。 首先,让我们了解Ajax分页的基本原理。在ASP.NET中,分页通常...

    使用简单方便的Ajax通用脚本

    这个Ajax库特别强调“简单”和“方便”,意味着它可能设计得易于理解和使用,适合初学者或小规模项目。然而,如果需要更复杂的功能,比如缓存管理、强大的数据转换、更全面的浏览器兼容性,那么可能需要考虑使用像...

    超强php分页打包 通用分页 万能分页 ajax分页 google分页

    通用分页则是指设计一个可以适应多种场景的分页组件,它可能包含以下特性: 1. 参数化配置:允许用户自定义每页显示的记录数。 2. URL路由处理:支持参数传递,如通过`?page=2`来表示第2页。 3. 多种样式支持:提供...

    基于Ajax的通用Web系统权限管理的设计与实现.pdf

    本文针对这一问题,探讨了基于Ajax技术和角色基础访问控制(RBAC)模型的通用Web系统权限管理的设计与实现。 在传统Web系统中,权限管理模块通常是针对每个系统单独设计和开发的,这种做法不仅耗费开发资源,而且...

    Ajax通用分页源码(ASP.net)

    【Ajax通用分页源码(ASP.net)】是一款基于ASP.NET技术实现的,利用Ajax无刷新方式实现网页分页功能的代码示例。这个源码集合涵盖了多种编程语言和技术,如C#、ASP.NET和WinForm,同时也涉及到数据库访问层(Data...

    一个基于Ajax的通用(组合)查询(ASP.NET)。

    **Ajax通用(组合)查询在ASP.NET中的应用** 在现代Web开发中,用户对交互性和实时性的需求越来越高,Ajax(Asynchronous JavaScript and XML)技术应运而生,它能够实现页面部分更新,无需每次交互都刷新整个页面。...

    ajax教程资料ajax

    JavaScript的设计和实现中有许多特点,这些特点有时会给开发者带来困扰,但也提供了强大的功能。 1. **名称误导**:JavaScript与Java名字相似,但两者完全不同,JavaScript是一种轻量级的脚本语言,而Java是面向...

    php无刷新简便超实用的ajax类附带实例

    描述中的"代码简洁 调用简便"意味着这个Ajax类设计得易于理解和使用,避免了复杂的代码结构,使得开发者能够快速集成到项目中。这样的类通常会提供简单的方法,如`sendRequest(url, data, callback)`,允许开发者...

    通用数据访问层及Ajax服务端框架源码20110907

    通用数据访问层及Ajax服务端框架源码 这个演示网站的特点: 1. 数据访问全使用了我的通用数据访问层 + 存储过程的实现。 2. 页面使用了大量的Ajax技术,没有任何的直接提交或回传(Submit Form or postback),分页,...

    [其他类别]通用的Ajax评论系统_ajax_cncoder.zip

    7. 响应式设计:为了适应不同设备和屏幕尺寸,评论系统应该具有响应式布局,确保在手机、平板和桌面等设备上都能良好显示。 总结,Ajax评论系统利用了Ajax技术,实现了评论的无刷新加载和提交,极大地提升了用户...

    通用数据访问层及Ajax服务端框架的综合示例

    "通用数据访问层"与"Ajax服务端框架"的结合,旨在提供一种优化的Web应用开发模式,提高前端与后端之间的交互效率,同时简化数据库操作。下面将详细阐述这两个概念以及它们在实际项目中的应用。 首先,通用数据访问...

    基于J2EE与Ajax的Web应用架构设计

    ### 基于J2EE与Ajax的Web应用架构设计 #### 一、引言 随着Web2.0模式在互联网中的快速发展,采用J2EE平台与Ajax技术的Web应用架构变得越来越成熟。Web2.0的核心技术包括博客(Blog)、RSS、标签(Tag)、P2P、维基...

    实用工具类AjaxResponse

    在IT行业中,AjaxResponse是一个常见的后端工具类,主要...文件列表中的"utils"可能包含了这个工具类和其他相关的辅助函数,这些函数可能涉及到日期处理、字符串操作等通用功能,都是为了提升项目开发效率而设计的。

    Ajax通用的数据验证程序

    **Ajax通用的数据验证程序**是针对Web开发中的一个常见需求——数据验证——而设计的工具。数据验证在软件工程中扮演着至关重要的角色,确保用户输入的数据符合预设的规则和标准,从而防止错误的数据进入系统,提升...

    通用AJAX:为每个服务器调用编写AJAX吗?

    1. **通用AJAX函数的设计** - 参数化:通用AJAX函数应该接受必要的参数,如URL、请求类型(GET、POST等)、数据、回调函数等,以便适应不同的服务器调用需求。 - 错误处理:函数应包含错误处理机制,如超时、网络...

Global site tag (gtag.js) - Google Analytics