2010-07-26 19:22
我们新建一个struts2测试工程
假设有这样一个action,ActionTest.java
然后里面实现对用户User的crud,增删改查功能add(),del(),modify(),query(),按照一般的方法,我们可以,在struts.xml中配置4个action
<package name="test1" extends="struts-default">
<action name="addUser" class="com.action.ActionTest" method="add">
<result name="success">/User/addUser.jsp</result>
</action>
<action name="delUser" class="com.action.ActionTest" method="del">
<result name="success">/User/delUser.jsp</result>
</action>
<action name="modifyUser" class="com.action.ActionTest" method="modify">
<result name="success">/User/modifyUser.jsp</result>
</action>
<action name="queryUser" class="com.action.ActionTest" method="query">
<result name="success">/User/queryUser.jsp</result>
</action>
</package>
然后再一个jsp页面中请求这四个action
<body>
User:
<a href="addUser.action">add</a>
<a href="delUser.action">del</a>
<a href="queryUser.action">query</a>
<a href="modifyUser.action">modify</a>
</body>
这种请求方法很令人纠结,设想一下如果有很多很多action,那配置文件就会变得很大很臃肿。。
有没有更好的办法???
我们注意到如上所示,所有文件都采用统一的命名规范操作+User
所以我们可以找一个通用的符号代替这些操作------通配符* 0-n ,这给我们带来很大的方便
对于这个例子我们可以将struts.xml文件配置如下
<package name="test1" extends="struts-default">
<action name="*User" class="com.action.ActionTest" method="{1}">
<result name="success">/User/{1}User.jsp</result>
</action>
</package>
只需这样就可以满足4个action请求,很方便很强大。。。*表示一个通配符,{1}表示第一个通配符代表的含义
这是一个简单的例子,加入还有一种对象,这里我们可以用Mp3也有add(),del(),modify(),query()功能
和User一样,在页面请求
<body>
User:
<a href="addUser.action">add</a>
<a href="delUser.action">del</a>
<a href="queryUser.action">query</a>
<a href="modifyUser.action">modify</a>
<br>
<br>
Mp3:
<a href="addMp3.action">add</a>
<a href="delMp3.action">del</a>
<a href="queryMp3.action">query</a>
<a href="modifyMp3.action">modify</a>
</body>
我们可以仿照User的方法配置Mp3的4个操作的action
<package name="test1" extends="struts-default">
<action name="*User" class="com.action.ActionTest" method="{1}">
<result name="success">/User/{1}User.jsp</result>
</action>
<action name="*Mp3" class="com.action.ActionTest" method="{1}">
<result name="success">/Mp3/{1}Mp3.jsp</result>
</action>
</package>
但是这样看着仍然感觉有点臃肿。。。。。
呵呵,我们可以用两个通配符
不过两个通配符要慎用啊,对这个例子估计一般人都会想到这样配置
<package name="test1" extends="struts-default">
<action name="**" class="com.action.ActionTest" method="{1}">
<result name="success">/{2}/{1}{2}.jsp</result>
</action>
</package>
这样配置能不能请求成功,我告诉你不能。。。。。不信你自己可以去试一下,两个*在一块很容易引起混乱。。。
正确的配置是中间用特殊符号如_隔开
<package name="test1" extends="struts-default">
<action name="*_*" class="com.action.ActionTest" method="{1}">
<result name="success">/{2}/{1}{2}.jsp</result>
</action>
</package>
然后页面请求统一改成*_*.action就可以了如下
<body>
User:
<a href="add_User.action">add</a>
<a href="del_User.action">del</a>
<a href="query_User.action">query</a>
<a href="modify_User.action">modify</a>
<br>
<br>
Mp3:
<a href="add_Mp3.action">add</a>
<a href="del_Mp3.action">del</a>
<a href="query_Mp3.action">query</a>
<a href="modify_Mp3.action">modify</a>
</body>
由于实训时间有限,对struts2通配符的研究只能皮毛而已
有时间的话,我们可以尝试多个通配符