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文件中使用通配符的格式一致,即要保证使用通配符提取出来的结果是你想要的。
小结
无论是多么小的一个知识点,都需要我们去实践,这样我们的收获会更多,理解会更深。