larryscale 发表于 2013-1-29 08:35:46

通用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, IE5xmlhttp=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;System.out.println("------------------------------->>>methodName:"+methodName);String beanName = path;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+"]调用成功!";}public String execute2(){System.out.println("----------------------->>>userid:"+this.userid);System.out.println("----------------------->>>username:"+this.username); return"["+this.username+"]调用成功!";}} 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+"]调用成功!";}public String execute2(){System.out.println("----------------------->>>userid:"+this.userid);System.out.println("----------------------->>>username:"+this.username); return"["+this.username+"]调用成功!";}} 
运行结果如下:

http://dl.iteye.com/upload/attachment/0075/4347/0201bb23-a637-3f3b-975f-5bbec4409af6.jpg
 
 
页: [1]
查看完整版本: 通用Ajax设计