使用通配符在Struts2配置文件中可以方便地定义多个相似的Action或者Interceptor,以及进行全局的配置。
在Struts2的配置文件中,有三种形式可以使用通配符,分别如下:
-
使用“”号通配符
例如:<package name="default" extends="struts-default">
<action name="show*"
class="org.example.ShowAction"
method="execute">
</action>
</package>
在上述配置中,使用了名为“show”的Action来匹配以“show”开头的所有URL请求,例如“/showOne”、“/showTwo”等都会被匹配到该Action中。 -
使用“**”号通配符
例如:`<interceptor-stack name="myStack"> <interceptor-ref name="myInterceptor"/> </interceptor-stack> <package name="default" extends="struts-default"> <interceptors> <interceptor-stack name="myStack"> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <action name="**/modify*" class="org.example.ModifyAction" method="execute"> <interceptor-ref name="myStack"/> </action> </package>`
上述配置中,使用了名为“*/modify”的Action来匹配以任意数目的子目录开头,且以“modify”开头的所有URL请求,例如“/user/modifyInfo”、“/product/modifyPrice”等都会被匹配到该Action中。同时,该Action中也使用了自定义的拦截器栈“myStack”。
-
使用“{}”号通配符
例如:<package name="default" extends="struts-default">
<action name="{id}"
class="org.example.ShowAction"
method="execute">
</action>
</package>
在上述配置中,使用了名为“{id}”的Action来匹配任何一段URL请求,并将该段请求作为参数传递给ShowAction的execute()方法中,例如“/user/1”、“/product/2”等都会被匹配到该Action中。在此例中,可以通过在Action中配置的get/set方法获取到URL请求传递的参数值。
示例1:
假设在Struts2应用中,有很多以“show”开头的URL请求,对应的Action都是ShowAction类,如果我们不想为每一个Action都单独定义一个name属性,而是使用通配符,则配置文件可以如下修改:
<package name="default" extends="struts-default">
<action name="show*"
class="org.example.ShowAction"
method="execute">
</action>
</package>
上述配置即可匹配到所有以“show”开头的请求,并转发到ShowAction中处理。
示例2:
假设在Struts2应用中,有多个类似于“/user/1”,“/product/2”这样的请求,需要传递请求的路径作为参数给相应的Action类。这时候,我们可以使用{ }通配符来捕获这些请求,并将其传递给Action处理,配置文件可以如下修改:
<package name="default" extends="struts-default">
<action name="{id}"
class="org.example.ShowAction"
method="execute">
</action>
</package>
在这个配置中,“{id}”用来匹配URL请求中的任何一段,该段的值会被传递给对应的Action类处理。例如,URL请求为“/user/1”,则该请求会被匹配到这个配置中的Action,并被转发到ShowAction中,ShowAction可以通过getter方法获取到路径参数值“1”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2配置文件中使用通配符的方法(三种形式) - Python技术站