反射机制的一个小实例
2014-12-10 06:53
190 查看
这两天看了别人写的一个框架的代码, 其中用到了反射机制来调用不同的方法, 自己也对这个不太熟悉, 所以就
学习了一下用法, 仿造了那个代码做了一个小实例, 主要是用到struts的知识
1. 首先是jsp页面. 页面由两个链接组成
2. 接着是Action类, 通过Action类的execute方法来调用不同的方法
在配置Action的时候, 指定了一个method参数, url必须附带method参数来指定方法
这里利用了ActionMapping来获取参数名, ActionMapping的作用会在另外的文章中说明
3. 以下是配置Action
指定参数是method
接着运行页面, 点击链接分别会调用method1和method2方法
getMethod: 是通过所调用方法所在对象的类来获取要调用的方法的Method对象
在getMethod方法中, 第一个参数是方法的名字, 第二个参数是所调用方法的参数的类型数组,
由于在这里没有参数, 所以数组为空(或者null)
invoke方法中, 第一个参数是所调用的方法所对应的对象(当所调用的方法为静态方法的时候, 可以为null, 但是如果为null的时候
调用了为静态方法的时候, 会报错), 第二个参数是所盗用方法的参数数组
由于在这里没有参数, 所以数组为空(或者null)
注: 在程序中, 发现有个问题, 当点击链接的时候, 方法会被执行两次(eclipse内置浏览器执行一次, 火狐执行两次)
如果将链接换成form来提交, 那么只会执行一次, 原因不明, 待我研究完后再补充
学习了一下用法, 仿造了那个代码做了一个小实例, 主要是用到struts的知识
1. 首先是jsp页面. 页面由两个链接组成
<body> <a href="testAction.do?method=method1">method1</a><br/> <a href="testAction.do?method=method2">method2</a><br/> </body>两个链接都用同一个Action来处理, 但是用method参数来区分不同的处理方法
2. 接着是Action类, 通过Action类的execute方法来调用不同的方法
public class TestAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String param = mapping.getParameter(); String methodName = request.getParameter(param); Method method = this.getClass().getMethod(methodName, new Class[]{}); method.invoke(this, new Object[]{}); return null; } public void method1(){ System.out.println("========method1========"); } public void method2(){ System.out.println("========method2========"); } }
在配置Action的时候, 指定了一个method参数, url必须附带method参数来指定方法
这里利用了ActionMapping来获取参数名, ActionMapping的作用会在另外的文章中说明
3. 以下是配置Action
<action-mappings> <action path="/testAction" parameter="method" type="com.action.TestAction"> <forward name="success" path="/WebContent/welcome.jsp"></forward> </action> </action-mappings>
指定参数是method
接着运行页面, 点击链接分别会调用method1和method2方法
getMethod: 是通过所调用方法所在对象的类来获取要调用的方法的Method对象
在getMethod方法中, 第一个参数是方法的名字, 第二个参数是所调用方法的参数的类型数组,
由于在这里没有参数, 所以数组为空(或者null)
invoke方法中, 第一个参数是所调用的方法所对应的对象(当所调用的方法为静态方法的时候, 可以为null, 但是如果为null的时候
调用了为静态方法的时候, 会报错), 第二个参数是所盗用方法的参数数组
由于在这里没有参数, 所以数组为空(或者null)
注: 在程序中, 发现有个问题, 当点击链接的时候, 方法会被执行两次(eclipse内置浏览器执行一次, 火狐执行两次)
如果将链接换成form来提交, 那么只会执行一次, 原因不明, 待我研究完后再补充
相关文章推荐
- 关于Java反射机制的一个实例
- 关于Java反射机制的一个实例
- 反射机制与系统耦合实例详解
- 一个APACHE重写机制实例的两点细节
- 使用反射机制 来把一个具体的bean 处理成一个map。并且获得其中的field和值
- 理解Java异常处理机制——Java异常处理的一个综合实例
- 一个反射的实例
- 利用反射机制得到一个类的方法,变量,以及构造函数
- java中的类的反射机制以及经典实例
- 一个关于CallBack机制的实例(C#)
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 一个新的对象创建机制的思考--C++下实现类似于Java的对象管理机制及反射
- 反射机制与系统耦合实例详解
- 使用反射机制用一个类实例的值为DataTable添加一行
- 使用反射机制将DataTable某行数据赋给一个类
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 反射的一个实例
- 反射机制与系统耦合实例详解
- [转载]如何在MDI中使子窗体只保留一个实例(反射方法)
- 理解Java异常处理机制——Java异常处理的一个综合实例