Struts2 官方教程:通用方法选择

介绍

本篇教程会介绍,如何在struts.xml配置文件中对一个动作结点进行配置,让动作结点可以被用于关联到几个不同的动作URL,以对应动作类的方法。这会减少我们在struts.xml中必须写入的动作结点数量。

示例应用

(截图略)
本篇教程的示例应用展示了如何使用Struts2的通用方法选择这种办法。示例应用很简单,列出一些用户并且让读者编辑它们,删除它们,并且添加一个新用户到列表中。每一个要对模板类Person执行的动作,是被Struts2 ActionSupport类控制的PersonAction。而PersonAction类有几个不同的方法(例如create,edit,delete)可以被调用,依赖于读者希望做什么。

通用方法选择

如果不使用通用方法选择,就必须在Struts2的配置文件里, 为每一个希望调用的不同动作写一个action结点。例如:

Struts.xml 动作类配置

<action name="createPerson" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="create">
    <result name="input">input.jsp</result>
    <result name="success">view.jsp</result>
</action>

<action name="editPerson" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="edit">
    <result name="input">input.jsp</result>
    <result name="success">view.jsp</result>
</action>

这样,即使是个简单的应用,也必须在配置文件中书写四个动作结点(create,edit,delete,saveOrUpdate)。所以很显然,更复杂的应用会有大量的动作结点。
为了实现通用方法选择器技术,来让Struts2框架在运行时动态地选择正确的方法调用,只需要在name取值处使用通配符“*”,在method取值处放置{1}。例如:

使用通用方法选择的Struts.xml动作类配置

<action name="*Person" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="{1}">
    <result name="success">view.jsp</result>
    <result name="input">input.jsp</result>
</action>

“*”即是通配符。任何以“Person”结尾的动作名称,会被这个动作匹配所处理。无论在Person前面的值是什么,都会是作为方法属性({1}这里会被这个值所代替)的取值。例如下面这个链接:
http://localhost:8080/wildcard-method-selection/createPerson.action
就会被上述的动作匹配所处理,并且PersonAction类的create方法会被调用。而一下这个URL
http://localhost:8080/wildcard-method-selection/deletePerson.action
会导致PersonAction类的delete方法被调用。
如果我们访问Person前面没有任何字符的URL呢?例如
http://localhost:8080/wildcard-method-selection/Person.action
如果Person前面没有字符,Struts2框架会调用PersonAction类的execute方法。

动态方法调用

上面结束的通用方法选择器技术不应与“动态方法调用”技术所混淆。Struts2文档解释了这个技术(在动作类名称中使用感叹号“!”操作符),并且不推荐使用“动态方法调用”技术,出于安全原因,及其它关于这项技术如何在内部被实现的原因。
Struts2文档也推荐,通过在Struts的配置中设置struts.enable.DynamicMethodInvocation为FALSE,来关闭使用动态方法调用的选项。

总结

通过使用上述的通用方法选择器技术,读者可以明显减少在Struts2 XML 配置文件中需要书写及管理的动作匹配结点数量。

猜你喜欢

转载自blog.csdn.net/u010930289/article/details/77159579