没有根的野草,漂浮的命途

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

通用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 (页面中的异步调用)

Js代码  收藏代码
  1. <script type="text/javascript">  
  2.             document.write("异步调用1------------------------------<br>");  
  3.             var params = "?time="+new Date().getTime()+"&userid=zhangs&username=张三";  
  4.             var url = "Ajax4Public/execute1"+encodeURI(encodeURI(params));  
  5.             var ret = AjaxTest(url);  
  6.             if(""!=ret){   
  7.                 document.write(ret+"<br>");  
  8.             }  
  9.               
  10.             document.write("异步调用2------------------------------<br>");  
  11.             var params = "?time="+new Date().getTime()+"&userid=lis&username=李四";  
  12.             var url = "Ajax4Public/execute2"+encodeURI(encodeURI(params));  
  13.             var ret = AjaxTest(url);  
  14.             if(""!=ret){   
  15.                 document.write(ret+"<br>");  
  16.             }  
  17.               
  18.             document.write("异步调用3------------------------------<br>");  
  19.             var params = "?time="+new Date().getTime()+"&userid=wangw&username=王五";  
  20.             var url = "Ajax4Comm/execute1"+encodeURI(encodeURI(params));  
  21.             var ret = AjaxTest(url);  
  22.             if(""!=ret){   
  23.                 document.write(ret+"<br>");  
  24.             }  
  25.               
  26.             document.write("异步调用4------------------------------<br>");  
  27.             var params = "?time="+new Date().getTime()+"&userid=zhaoq&username=赵七";  
  28.             var url = "Ajax4Comm/execute2"+encodeURI(encodeURI(params));  
  29.             var ret = AjaxTest(url);  
  30.             if(""!=ret){   
  31.                 document.write(ret+"<br>");  
  32.             }  
  33.  </script>  

 

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

Js代码  收藏代码
  1. function AjaxTest(url){  
  2. var xmlhttp=null;  
  3.   
  4. if (window.XMLHttpRequest){// code for Firefox, Opera, IE7, etc.  
  5.   xmlhttp=new XMLHttpRequest();  
  6.   if(xmlhttp.overrideMimeType){  
  7.         xmlhttp.overrideMimeType("text/html");  
  8.   }  
  9. }else if (window.ActiveXObject){// code for IE6, IE5  
  10.   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");  
  11. }  
  12.   
  13. if (xmlhttp!=null){    
  14.     xmlhttp.onreadystatechange=function(){};   
  15.     xmlhttp.open("GET","./servlet/com.borse.km.servlet.Dispatcher/"+url,false);  
  16.     xmlhttp.send(null);  
  17.     return xmlhttp.responseText;  
  18. }else{  
  19.     alert("Your browser does not support XMLHTTP.");  
  20.     return false;  
  21. }  
  22.    

 

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

Java代码  收藏代码
  1. public void doGet(HttpServletRequest request, HttpServletResponse response)  
  2.             throws ServletException, IOException {  
  3.         request.setCharacterEncoding("UTF-8");     
  4.         Object retparam = null//返回值参数  
  5.         try {  
  6.             System.out.println("------------------------------->>>params:"+request.getPathInfo());  
  7.             String [] path = request.getRequestURL().toString().split("/", -1);  
  8.             String methodName = path[path.length-1];  
  9.             System.out.println("------------------------------->>>methodName:"+methodName);  
  10.             String beanName = path[path.length-2];  
  11.             System.out.println("------------------------------->>>beanName:"+beanName);  
  12.             String ajaxpath = null;  
  13.             if(ajaxpath==null || ajaxpath.trim().length()<1){  
  14.                 ajaxpath="com.smartcom.km.ajaxObj";  
  15.             }  
  16.             System.out.println("------------------------------->>>ajaxpath:"+ajaxpath);  
  17.             //反射  
  18.             System.out.println("------------------------------->>>bean:"+ajaxpath+"."+beanName);  
  19.             Object bean = Class.forName(ajaxpath+"."+beanName).newInstance();  
  20.             BeanUtils.populate(bean, request.getParameterMap());  
  21.             retparam = MethodUtils.invokeMethod(bean, methodName, new Object []{});  
  22.               
  23.         } catch (Exception e) {  
  24.             System.out.println(e.getMessage());  
  25.         }  
  26.         response.setCharacterEncoding("UTF-8");  
  27.         response.setContentType("text/html");  
  28.         response.getWriter().write(retparam.toString());  
  29. }  

 

5. web.xml (servlet配置)

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. lt;web-app version="2.5"   
  3. xmlns="http://java.sun.com/xml/ns/javaee"   
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.  <servlet>  
  8.    <description>This is the description of my J2EE component</description>  
  9.    <display-name>This is the display name of my J2EE component</display-name>  
  10.    <servlet-name>Dispatcher</servlet-name>  
  11.    <servlet-class>com.smartcom.km.servlet.Dispatcher</servlet-class>  
  12.  </servlet>  
  13.   
  14.  <servlet-mapping>  
  15.    <servlet-name>Dispatcher</servlet-name>   
  16.     <url-pattern>/servlet/*</url-pattern>  
  17.  </servlet-mapping>  
  18.    
  19.  <welcome-file-list>  
  20.    <welcome-file>index.jsp</welcome-file>  
  21.  </welcome-file-list>  
  22. lt;/web-app>  

 

 

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

Java代码  收藏代码
  1. public class Ajax4Public {  
  2.     private String userid;  
  3.     private String username;  
  4.     public void setUserid(String userid) {  
  5.         this.userid = userid;  
  6.     }  
  7.     public void setUsername(String username) {  
  8.         try {  
  9.             this.username = java.net.URLDecoder.decode(username,"UTF-8");   
  10.         } catch (Exception e) {  
  11.             this.username = username;  
  12.         }  
  13.           
  14.     }  
  15.     public String execute1(){  
  16.         System.out.println("----------------------->>>userid:"+this.userid);  
  17.         System.out.println("----------------------->>>username:"+this.username);   
  18.         return  "["+this.username+"]调用[Ajax4Public.execute1()]成功!";  
  19.     }  
  20.       
  21.     public String execute2(){  
  22.         System.out.println("----------------------->>>userid:"+this.userid);  
  23.         System.out.println("----------------------->>>username:"+this.username);   
  24.         return  "["+this.username+"]调用[Ajax4Public.execute2()]成功!";  
  25.     }  
  26. }  

 

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

Java代码  收藏代码
  1. public class Ajax4Comm {  
  2.     private String userid;  
  3.     private String username;  
  4.     public void setUserid(String userid) {  
  5.         this.userid = userid;  
  6.     }  
  7.     public void setUsername(String username) {  
  8.         try {  
  9.             this.username = java.net.URLDecoder.decode(username,"UTF-8");   
  10.         } catch (Exception e) {  
  11.             this.username = username;  
  12.         }   
  13.     }  
  14.     public String execute1(){  
  15.         System.out.println("----------------------->>>userid:"+this.userid);  
  16.         System.out.println("----------------------->>>username:"+this.username);   
  17.         return  "["+this.username+"]调用[Ajax4Comm.execute1()]成功!";  
  18.     }  
  19.       
  20.     public String execute2(){  
  21.         System.out.println("----------------------->>>userid:"+this.userid);  
  22.         System.out.println("----------------------->>>username:"+this.username);   
  23.         return  "["+this.username+"]调用[Ajax4Comm.execute2()]成功!";  
  24.     }  
  25. }  

 

运行结果如下:


posted on 2012-10-22 17:05  针尖上的舞者  阅读(138)  评论(0)    收藏  举报