学习啦>知识大全>方法百科>产品使用方法>

ajax调用java方法

时间: 陈哲凡673 分享

  ajax调用java后台的方法学习啦在线学习网,其实是通过url链接来访问。下面是学习啦小编为大家带来一篇ajax调用java方法,希望对大家有所帮助。

  ajax调用java方法(一)

  public void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException,java.io.IOException{

  //得到类名、方法名和参数

  String methodName=req.getParameter("methodName");

学习啦在线学习网   String className=req.getParameter("className");

  Object[] objs=req.getParameterValues("params");

学习啦在线学习网   Object targetObj;

  try {

  targetObj = Class.forName(className).newInstance();

学习啦在线学习网   Object obj=MethodUtils.invokeMethod(targetObj, methodName, objs);

  this.dealResp(resp, obj);

学习啦在线学习网   } catch (InstantiationException e) {

  e.printStackTrace();

  } catch (IllegalAccessException e) {

学习啦在线学习网   e.printStackTrace();

  } catch (ClassNotFoundException e) {

  e.printStackTrace();

  } catch (NoSuchMethodException e) {

学习啦在线学习网   e.printStackTrace();

  } catch (InvocationTargetException e) {

学习啦在线学习网   e.printStackTrace();

  }

  }

  private void dealResp(HttpServletResponse resp,Object obj) throws IOException{

学习啦在线学习网   resp.setContentType("text/xml;charset=GBK");

  PrintWriter pw=resp.getWriter();

  pw.write(""+deal(obj)+"");

  pw.flush();

  pw.close();

  }

学习啦在线学习网   private String deal(Object obj){

  String sbResult="";

  if(obj==null){

  sbResult="";

学习啦在线学习网   }else if(obj instanceof java.lang.String){

学习啦在线学习网   sbResult=dealString(obj);

  }else if(obj instanceof java.util.List){

  sbResult=dealList(obj);

学习啦在线学习网   }else if(obj instanceof java.lang.Boolean){

  sbResult=dealBoolean(obj);

学习啦在线学习网   }else if(obj instanceof java.lang.Double){

学习啦在线学习网   sbResult=dealDouble(obj);

学习啦在线学习网   }else if((obj instanceof java.lang.Integer) || (obj instanceof java.lang.Long)){

  sbResult=dealInteger(obj);

学习啦在线学习网   }else if(obj instanceof java.lang.Throwable){

学习啦在线学习网   sbResult=dealException(obj);

  }else if(obj instanceof java.util.Map){

  sbResult=dealMap(obj);

  }else if(obj instanceof java.util.Date){

  sbResult=dealDate(obj);

  }else if(obj instanceof java.util.Calendar){

  sbResult=dealDate(obj);

  }else if(obj instanceof org.w3c.dom.Document){

学习啦在线学习网   sbResult=dealXml(obj);

  }else{

学习啦在线学习网   sbResult=dealObject(obj);

  }

  return sbResult;

  }

学习啦在线学习网   //处理Date或Calendar类型,返回值为yyyy-MM-dd-HH-mm-ss-SSS格式的字符串

  private String dealDate(Object obj){

  Calendar cal=null;

  if(obj instanceof Calendar){

  cal=(Calendar)obj;

  }else{

学习啦在线学习网   cal=Calendar.getInstance();

学习啦在线学习网   cal.setTime((Date)obj);

  }

学习啦在线学习网   StringBuffer sb=new StringBuffer();

学习啦在线学习网   sb.append("");

  sb.append(cal.get(Calendar.YEAR));

  sb.append("-");

  sb.append(cal.get(Calendar.MONTH));

  sb.append("-");

  sb.append(cal.get(Calendar.DAY_OF_MONTH));

  sb.append("-");

学习啦在线学习网   sb.append(cal.get(Calendar.HOUR_OF_DAY));

学习啦在线学习网   sb.append("-");

  sb.append(cal.get(Calendar.MINUTE));

学习啦在线学习网   sb.append("-");

学习啦在线学习网   sb.append(cal.get(Calendar.SECOND));

  sb.append("-");

学习啦在线学习网   sb.append(cal.get(Calendar.MILLISECOND));

  sb.append("");

  return sb.toString();

  }

  private String dealMap(Object obj){

学习啦在线学习网   StringBuffer sb=new StringBuffer();

  Map map=(Map)obj;

  sb.append("");

学习啦在线学习网   Set entrys=map.entrySet();

  Iterator ite=entrys.iterator();

  Map.Entry entry=null;

  while(ite.hasNext()){

学习啦在线学习网   entry=(Map.Entry)ite.next();

学习啦在线学习网   sb.append("<");

学习啦在线学习网   sb.append(entry.getKey());

学习啦在线学习网   sb.append(">");

学习啦在线学习网   sb.append(deal(entry.getValue()));

学习啦在线学习网   sb.append(");

  sb.append(entry.getKey());

  sb.append(">");

  }

  sb.append("");

  return sb.toString();

  }

  ajax调用java方法(二)

学习啦在线学习网   public class Test {

  public static String sayHello(String name){

  return "hello, " + name;

  }

  }

  注意:必须是公开的静态方法。

  ajax分为同步、异步调用,如果没有传递回调函数,则是同步调用;如果传递回调函数,则是异步调用。

  同步调用

学习啦在线学习网   <script type="text/javascript">

  ......

  try{

  var obj = Test.sayHello('world!');

  ......

  }catch(e){

  //e.error 错误码

学习啦在线学习网   //e.message 错误描述

  }

  ......

  </script>

  不传递回调函数,以try…catch来处理错误。在同步调用模式下,如果有网络错误、业务逻辑错误等,会抛出一个异常。

  异步调用

  <script type="text/javascript">

  ......

学习啦在线学习网   Test.sayHello('world!',

  function(obj){ //success callback function

  ......

  },

  function(error, message){ //fail callback function

  }

  );

  ......

  </script>

  传递回调函数作为参数。如果只有一个回调函数, 则默认是成功的回调函数。

  AJAXRPC完整示例

  首先我们有一个服务端的类,和一些静态方法:

学习啦在线学习网   public class Test {

  //test Date

学习啦在线学习网   public static Date getTime(){

  return new Date();

  }

学习啦在线学习网   //test Number

学习啦在线学习网   public static int add(int a, int b){

  return a + b;

  }

  //test String

  public static String sayHello(String name){

  return "hello, " + name;

  }

学习啦在线学习网   //test Boolean

学习啦在线学习网   public static Boolean isTrue(Boolean b){

学习啦在线学习网   return b == true;

  }

学习啦在线学习网   //test Object

  public static String addUser(Map user){

学习啦在线学习网   String id = UUID.randomUUID().toString();

学习啦在线学习网   user.put("id", id);

  //insert to database

  //...

  return id;

  }

  //test Array

  public static List getUsers(String name){

  List users = new ArrayList();

  for(int i=0; i<20; i++){

学习啦在线学习网   Map user = new HashMap();

  user.put("name", name+i);

  user.put("gender", i%2);

  user.put("birthday", new Date());

学习啦在线学习网   users.add(user);

  }

学习啦在线学习网   return users;

  }

学习啦在线学习网   //test user defined class

  public static User updateUser(User user)

  {

学习啦在线学习网   user.birthday = new Date();

学习啦在线学习网   //update to database...

学习啦在线学习网   return user;

  }

  //test user defined class array

  public static User[] saveUsers(User[] users)

  {

学习啦在线学习网   for (int i = 0, l = users.length; i < l; i++)

  {

  User user = users[i];

  user.name = "Server" + i;

  user.birthday = new Date();

  //update to database...

  }

学习啦在线学习网   return users;

  }

  }

374678