struts2框架是如何应用反射的

本文通过一个简单示例展示了Struts2框架如何利用反射机制根据用户请求动态加载类并执行相应方法。具体包括解析配置文件获取类路径、实例化对象、通过反射调用setter方法注入参数以及执行核心业务逻辑。

         在实际开发中很少用到反射,但在许多框架,像struts2等,下面我就用个简单的例子解释反射在struts2中的应用过程

       

// 根据用户请求的action名,从配置文件找到该action结点得到class路径及调用的action方法名,以以下片断为例
        /**
         * <action name="testAction" class="com.action.StrutsTest" method="execute"> <result
         * name="success">/WEB-INF/jsp/userManage/login.jsp</result> </action>
         */
        String actionClass = "com.action.StrutsTest";// action的执行class
        String actionMethod = "execute";// 要执行的action方法

        // 对应表单里的参数,调用action对应参数的setter方法来注入
        Map<String, String> paramMap = (Map<String, String>) request.getParameterMap();// 在这里我假设所有action的属性都是String类型的

        Class class1 = Class.forName(actionClass); // 得到action的class对象

        Object object = class1.newInstance();// 构造一个action实例

        // 将表单里的所有参数值设置到action中
        for (Entry<String, String> entry : paramMap.entrySet())
        {
            // 得到每个参数的setter方法
            Method method =
                class1.getMethod(new StringBuffer("set").append(entry.getKey().substring(0, 1).toUpperCase())
                    .append(entry.getKey().substring(1))
                    .toString(), entry.getKey().getClass());

            // 调用action中每个参数的setter方法来给action属性注入值
            method.invoke(object, entry.getValue());
        }

        // 得到处理action请求的函数入口
        Method method2 = class1.getMethod(actionMethod);

        String returnSuccess = String.valueOf(method2.invoke(object));//处理请求,得到返回值

        // 实际上这里应该是根据returnSuccess去对应action下取出jsp路径的,这里我就写死
        String jspPath = "index.jsp";

        request.getRequestDispatcher(jspPath).forward(request, response);// 类似struts1跳到指定页面


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值