struts2动态方法调用

struts2 动态方法调用

本来不想写关于struts2的学习笔记了,由于感觉关于struts2的理论知识比较简单,所以才打算不写,但是在学习过程中,特别是在Myeclipse中编码练习的时候,遇到的一些问题,因此,自己觉得有必要记录一下,所以,还是边学习边写博客吧。

动态方法调用指的就是为了解决一个Action对应多个请求的处理,以免Action太多。

动态方法调用有3中方法,分别为:

1、Action的method属性

2、感叹号方式 !

3、通配符方式

下面将分别进行介绍。

第一种:Action的method属性完成动态方法调用 不推荐使用

只需要改两个地方,第一个是在Action类中添加其他的方法。例如:在本例中就是添加了add()和sub()方法。

要更改的第二个地方为:更改struts.xml配置文件,例如本例中的struts.xml文件内容如下:

每个Action的结果文件自己添加即可,完成之后,就可以打开浏览器,并输入:http://localhost:8080/HelloWorld/addAction.action 就可以看到HelloWorldAction类执行add()方法了。

在实践过程中,遇到了一个问题:即按照这个流程走下来,原以为在浏览器中输入地址就可以看到结果,但是我刚开始并没有看到,原以为是哪里错了,检查了好久也没有错误,也参考了慕课网上关于struts2的视频,也查了相关blog资料,感觉流程一模一样,为什么会运行不出来了。

最后查找出来的原因是:要重新启动tomcat服务器,再运行就好了。

感叹号方式 ! 不推荐使用

这种使用method属性的方式来实现动态方法有一个不好的地方在于:如果只有几个方法需要被调用,这样还好,我们只需要在struts.xml文件中,写几个类似下面的代码段。但是,如果有几百个方法需要被动态调用,那么用这种方法可能就不适合了,这样代码冗余太大,也不便于管理。因此就有了下面的两种方法:!、通配符的使用,这里介绍第一种。

<action name="addAction"  method="add" class="com.struts.test.HelloWorldAction" >
        <!--  指定结果集 -->
        <result >/add.jsp</result>          
    </action>

使用感叹号来实现动态方法调用,有两个地方需要改动,如下:

第一个是Action类中,注意每个方法的返回值

第二个是struts.xml文件中:注意result标签下的name属性

在struts.xml文件中最下面一行代码特别要注意:这是开启感叹号可应用于动态方法调用。

<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

待上面更改完成之后,在重启服务器之后,就可以在浏览器中输入:http://localhost:8080/HelloWorld/helloworld!add.action来动态调用Action类中的add方法了。截图如下:


上面就是在浏览器中输出的url格式是错误的,正确的如下:

通配符方式 推荐使用

虽然上面两种方法都能够完成动态方法的调用,但是官方都不推荐使用,通配符这种方法是推荐使用的。下面来介绍介绍。

通配符我们一般都知道,即用 * 来获取内容。

下面还是看具体的例子。

Action类中的内容如下:

struts.xml文件中的内容如下:

上图代码中的

<action name="*Action"  class="com.struts.test.HelloWorldAction" 
method="{1}">

使用通配符在url地址中来取得要调用的方法的名称。
例如:当我们在浏览器中输出 http://localhost:8080/HelloWorld/addAction ,则就会调用Action类中的add()方法。

在浏览器中输入url后显示结果如下:

多个通配符的使用例子如下:动态的获取Action类名和方法名:

在浏览器中输入url=http://localhost:8080/HelloWorld_add.action.

使用通配符来进行动态方法的调用,你始终要保证你的url地址格式要与你在struts.xml文件中使用通配符的格式一致,即要保证使用通配符提取出来的结果是你想要的。

小结

无论是多么小的一个知识点,都需要我们去实践,这样我们的收获会更多,理解会更深。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值