Struts2_02_Action访问与Action方法调用

一、Action访问路径
Action的访问路径是由struts.xml文件中配置的Action所在包的命名空间,Action的名字和常struts.action.extension共同决定的
例如:

Xml代码   收藏代码
  1. <constant name="struts.action.extension" value="action, ," />  
  2. <package name="default"  namespace="/"  extends="struts-default">  
  3.    <action name="hello">  
  4.      <result>/1.jsp</result>  
  5.    </action>  
  6. </package>  
  7.   
  8. <package name="a"  namespace="/a"  extends="struts-default">  
  9.    <action name="hello">  
  10.      <result>/2.jsp</result>  
  11.    </action>  
  12. </package>  

 

访问default包下的名字叫hello的Action,须运行路径:/hello  或 /hello.action
访问a包下的名字叫hello的Action,须运行路径:/a/hello 或 /a/hello.action
 
 
如果将struts.action.extension的值修改成do

Xml代码   收藏代码
  1. <constant name="struts.action.extension" value="do,action" />  

 

 

访问a包下的名字叫hello的Action,须运行路径:/a/hello.do 或 /a/hello.action

 

包的命名空间
每个包的命名空间不同,包中的Action不能同名,不同包的Action可以同名
同一个Web应用有可能出现同名Action,把它们放在不同的命名空间下,可以避免访问冲突。
如果在某Action在该命名空间找不到,就在默认命名空间找,在默认命名空间还找不到就会报错

按照上面的配置
访问 /hello.action 则跳转  /1.jsp
访问 /a/hello.action 则跳转 /2.jsp
访问 /b/hello.action 则跳转 /1.jsp
访问 /b/hi.action 则找不到页面,报异常


二、Action方法调用与动态方法调用
Action接收请求默认调用execute方法,但这已经满足不了我们的需求。通常我们会把一个业务模块的所有请求定义在同一个Action类,这就需要Action类提供更多的方法处理不同的请求,而不仅仅是一个execute方法。
例如我们想定义一个用户模块的增删查改请求,就可以采取如下方式实现

Java代码   收藏代码
  1. package com.puckasoft.web.action;  
  2.   
  3. public class UserAction {  
  4.  public String saveUser() throws Exception{  
  5.   System.out.println("添加用户");  
  6.   return null;  
  7.  }  
  8.  public String updateUser() throws Exception{  
  9.   System.out.println("修改用户");  
  10.   return null;  
  11.  }  
  12.  public String deleteUser() throws Exception{  
  13.   System.out.println("删除用户");  
  14.   return null;  
  15.  }  
  16.  public String showUser() throws Exception{  
  17.   System.out.println("查询用户");  
  18.   return null;  
  19.  }  
  20. }  

 

配置方法一:action方法调用

Xml代码   收藏代码
  1. <package name="user"  namespace="/user"  extends="struts-default">  
  2.     <action name="save"  class="com.puckasoft.web.action.UserAction"    
  3.     method="saveUser"></action>  
  4.     <action name="update"  class="com.puckasoft.web.action.UserAction"    
  5.     method="updateUser"></action>  
  6.     <action name="delete"  class="com.puckasoft.web.action.UserAction"    
  7.     method="deleteUser"></action>  
  8.     <action name="show"  class="com.puckasoft.web.action.UserAction"    
  9.     method="showUser"></action>  
  10. </package>  

 

运行路径路径格式: 包的命名空间/Action的名字  

   用户添加 /user/save.action
   用户更新 /user/update.action
   用户删除 /user/delete.action
   用户查看 /user/show.acton
   
   
配置方法二:action动态方法调用DMI

Xml代码   收藏代码
  1. <constant name="struts.enable.DynamicMethodInvocation" value="true" />  
  2. <package name="user"  namespace="/user"  extends="struts-default">  
  3.      <action name="index"  class="com.puckasoft.web.action.UserAction"/>  
  4. </package>  

     
运行路径格式:包的命名空间/Action的名字!Action类中定义的方法名
   用户添加 /user/index!saveUser.action
   用户更新 /user/index!updateUser.action
   用户删除 /user/index!deleteUser.action
   用户查看 /user/index!showUser.acton
 
只用设置常量struts.enable.DynamicMethodInvocation为true才能执行动态调用,它默认是开启的。

 

配置方法三:使用通配符定义Action
使用通配符,将配置量降到最低。
在action元素的name属性中可以使用*通配符,它可以匹配除了/以外的多个连续字符,在action元素的class和method属性以及 result元素中可以引用*通配符在访问期间实际匹配的内容

Xml代码   收藏代码
  1. <package name="user"  namespace="/user"  extends="struts-default">  
  2.   <action name="*" class="com.puckasoft.web.action.UserAction" method="{1}User"/>  
  3. </package>  

 

运行路径路径格式: 包的命名空间/Action的名字

   用户添加 /user/save.action
   用户更新 /user/update.action
   用户删除 /user/delete.action
   用户查看 /user/show.acton

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值