关闭

浅析Struts2中的sturts.xml配置文件(2)

标签: struts2.0struts配置文件struts.xml标签
455人阅读 评论(0) 收藏 举报
分类:

一、如何在sturts.xml文件中修改请求扩展名?

在org.apache.struts2包下default.properties文件配置了Struts2应用的一些常量默认值。通过查找default.properties文件可知,对应的扩展名的常量名是struts.action.extension,其默认值是.action和没有扩展名。我们如果要修改只需在struts.xml配置文件中添加constant标签进行配置就能够解决。配置代码如下:

<constant name="struts.action.extension" value="action,do"></constant>

以上配置struts2就能够检测以.action和.do为结尾的请求。

二、关于ActionSupport类的补充说明

ActionSupport是默认的Action类:若某个action节点没有配置class属性,则ActionSupport即为待执行的Action类,而execute方法即为要默认执行的Action方法

<action name="testActionSupport"  >
<result>testActionSupport.jsp</result>
</action>
等同于
<action name="testActionSupport" class="com.opensymphony.xwork2.ActionSupport" method="execute"  >
<result>testActionSupport.jsp</result>
</action>


在手工完成字段验证,显示错误消息,国际化等情况下,推荐继承ActionSupport方法

三、动态方法调用

动态方法调用就是直接使用URI的方式直接调用action中的方法运行。例如:URI:/struts-app2/Product.action:Struts该URI含义是调用Product类的execute方法

实现动态方法调用步骤:

第一步:在struts.xml配置文件中添加一个constant标签打开动态方法调用,通过查找default.properties文件可知,对应的动态方法调用名称为struts.enable.DynamicMethodInvocation。因为struts2中动态方法调用默认是关闭的。配置如下:

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

第二步:引用URI实现调用。示例代码如下:

URI:/struts-app2/Product.action:Struts调用Product类的execute方法

URI:/struts-app2/Product!save.action:Struts调用Product类的save方法


在什么时候使用动态方法呢?倘若我们的工程允许动态方法调用的话,就会造成一些安全隐患。个人建议开启动态方法调用用来测试程序运行。


四、通配符

一个Web应用可能有成百上千个action声明。可以利用struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系

没有使用通配符配置方法如下
<!-- 
<action name="TestAction-save" class="com.lizhenhua.action.TestAction" method="save">
<result name="save-success">success.jsp</result>
</action>

<action name="TestAction-update" class="com.lizhenhua.action.TestAction" method="update">
<result name="update-success">success.jsp</result>
</action>
<action name="TestAction-delete" class="com.lizhenhua.action.TestAction" method="delete">
<result name="delete-success">success.jsp</result>
</action>
<action name="TestAction-query" class="com.lizhenhua.action.TestAction" method="query">
<result name="query-success">success.jsp</result>
</action>
-->
使用统配符后,与上面效果是一样的,但是能够减少很多时间
<action name="TestAction-*" class="com.lizhenhua.action.TestAction" method="{1}">
<result name="{1}-success">success.jsp</result>
</action>

通配符映射规则

若找到多个匹配,没有统配符的那个将胜出

若指定的动作不存在,Struts将会尝试把这个URI与任何一个包含着通配符*的动作名进行匹配

被通配符匹配到的URI字符串的子串可以用{1},{2}来引用,使用{1}第一个子串,。。。

{0} 匹配整个URI

若Struts找到的带有通配符的匹配不止一个,则按先后顺序进行匹配

*可以匹配零个或多个字符,但不包括/字符。如果想把/字符包括在内,需要使用**,如果需要对某个字符进行转义,需要使用\。





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:70543次
    • 积分:1338
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:2篇
    • 译文:0篇
    • 评论:19条
    博客专栏
    最新评论