扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在html页面中,使用js调用java类要使用ajax,具体方法步骤如下:
创新互联公司是一家集网站建设,巴彦淖尔企业网站建设,巴彦淖尔品牌网站建设,网站定制,巴彦淖尔网站建设报价,网络营销,网络优化,巴彦淖尔网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
1、将要调用的类名和方法名作为参数传给某个servlet.这一步的方法有许多种,用框架,或者直接用xmlHttpRequest对象;
2、要调用的类名和类的完整包路径最好写在配置文件里,这里假设类名为Hello,方法名为sayHello,并且sayHello方法不带参数,类路径为com.demo.Hello。
3、配置文件AjaxConfig.properties
Hello = com.demo.Hello
4、传入的参数设置为 class=Hellomethod=sayHello
在servlet中作如下处理:
String className=request.getParameter("classname");
String methodName=request.getParameter("method");
String classPath=null;
5、读取配置文件,取出className所对应的值放入classPath变量中,
Class c=Class.forName(classPath);//加载你所指定的类
Class param[]=new Class[0];//方法的参数为0个
Method m=null;
String returnValue=null;//返回值
try {
m = c.getMethod("sayHello",param);//获取你所指定的类中的指定方法
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
returnValue=(String)m.invoke(c.newInstance(), new Object[0]);//调用你所指定的方法
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
6、将returnValue的值返回给客户端即可
类Hello.java
public class Hello
{
public String sayHello()
{
return "hello";
}
}
应该是用struts作的吧,a.java是一个action类,在action类中将获得值保存到request或session中,也就是request.setAttribute("xxx",xxxx);在c.jsp中获得request或session中的值,%=request.getAttribute(xxx);% 这样就把后面的xxxx的值获得了。
Java中要用到反射,首先就必须要获取到对应的class对象,在Java中有三种方法获取类对应的class对象。
1、通过类的.class属性
2、通过类实例的getClass()方法获取
3、通过Class.forName(String className)方法获取
现在比如在package下有个类Calculator
public class Calculator{
public double add(double score1,double score2){
return score1 + score2;
}
public void print(){
System.out.println("OK");
}
public static double mul(double score1,double score2){
return score1 * score2;
}
}
public class CalculatorTest {
public static void main(String[] args) throws Exception {
//通过类的.class属性获取
ClassCalculator clz = Calculator.class;
//或者通过类的完整路径获取,这个方法由于不能确定传入的路径是否正确,这个方法会抛ClassNotFoundException
// ClassCalculator clz = Class.forName("test.Calculator");
//或者new一个实例,然后通过实例的getClass()方法获取
// Calculator s = new Calculator();
// ClassCalculator clz = s.getClass();
//1. 获取类中带有方法签名的mul方法,getMethod第一个参数为方法名,第二个参数为mul的参数类型数组
Method method = clz.getMethod("mul", new Class[]{double.class,double.class});
//invoke 方法的第一个参数是被调用的对象,这里是静态方法故为null,第二个参数为给将被调用的方法传入的参数
Object result = method.invoke(null, new Object[]{2.0,2.5});
//如果方法mul是私有的private方法,按照上面的方法去调用则会产生异常NoSuchMethodException,这时必须改变其访问属性
//method.setAccessible(true);//私有的方法通过发射可以修改其访问权限
System.out.println(result);//结果为5.0
//2. 获取类中的非静态方法
Method method_2 = clz.getMethod("add", new Class[]{double.class,double.class});
//这是实例方法必须在一个对象上执行
Object result_2 = method_2.invoke(new Calculator(), new Object[]{2.0,2.5});
System.out.println(result_2);//4.5
//3. 获取没有方法签名的方法print
Method method_3 = clz.getMethod("print", new Class[]{});
Object result_3 = method_3.invoke(new Calculator(), null);//result_3为null,该方法不返回结果
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流