跟之前写的.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);
}
代码比较零散,但很容易组装。在此也不做太多解释。