您的位置:首页 > 其它

反射机制的一个小实例

2014-12-10 06:53 190 查看
这两天看了别人写的一个框架的代码, 其中用到了反射机制来调用不同的方法, 自己也对这个不太熟悉, 所以就

学习了一下用法, 仿造了那个代码做了一个小实例, 主要是用到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来提交, 那么只会执行一次, 原因不明, 待我研究完后再补充
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: