使用反射简化ajax中的处理代码(Java版)

跟之前写的.NET版本对应,这个是java版本;但因为时间紧迫,手头工作忙,所以没有做太多修整,没有使用真正参数,只是定死了两个参数,如果需要的可以自己修改使用。代码如下:

项目层次图:

层次图

web.xml:

<servlet>
  <servlet-name>DemoAction</servlet-name>
  <servlet-class>com.bill.servlet.DemoAction</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>DemoAction</servlet-name>
  <url-pattern>/DemoAction</url-pattern>
 </servlet-mapping>

 

Demo.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>测试</title> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script src="js/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
        <!--
        $(function(){          
            var url = "DemoAction";
            var t="TestOther";
            var pt = ["i","f"];
            var pv = ["1","1223.234"];
            $.post(url,{t:t,pt:pt,pv:pv},function(data){
                alert(data);
            });
           
        });
        -->
    </script>
  </head>
 
  <body>
    
  </body>
</html>

DemoAction.java:两个主要方法:

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  String mothod = request.getParameter("t");
  //========以下参数暂时未使用,需要时可以自行修改=========
  String pt = request.getParameter("pt");
  String pv = request.getParameter("pv");
  //================================================
  String retValue = "";
  if (pt != null && pv != null && pt != "" && pv != "" && pt != "null"
    && pv != "null") {
   String[] pta = pt.split(",");
   String[] pva = pv.split(",");   
   if (pta.length == pva.length) {
    Class[] parameterTypes = {int.class, float.class}; 
    Object[] parameterValues = new Object[]{23,12.23f};   //当是float类型时,要注意在数值后加f,否则会出现异常:argument type mismatch。因为不加时候默认是double
    
    retValue = ReflectMethod(mothod, parameterTypes, parameterValues);
   } else {
    // 参数个数不相等
    retValue = "参数个数不相等";
   }
  } else {
   // 参数为空
   retValue = ReflectMethod(mothod, null, null);
  }
  out.print(retValue);
  out.flush();
  out.close();
 }

 /*
  * 反射程序集中的方法 "mothod" 方法名 "pt" 参数类型数组 "pv" 参数值数组
  */
 private String ReflectMethod(String mothod, Class[] pt, Object[] pv) {
  String retValue = "";
  // 读取选择指定的dll文件
  try {
   String className = "com.bill.dao.DemoDao";   
   Class componentClass = Class.forName(className);
   Method concatMethod = componentClass.getMethod("TestOther", pt);
   retValue ="result:"+ (String)concatMethod.invoke(componentClass.newInstance(), pv);
  } catch (Exception ex) {
   retValue += "error:"+ex.getMessage();
  }
  return retValue;
 }

 

DemoDao.java:主要方法

public String TestOther(int arg1, float arg2)
    {
        return "int:"+String.valueOf(arg1)+";float:"+String.valueOf(arg2);
    }

 

代码比较零散,但很容易组装。在此也不做太多解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值