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. <package name="a"  namespace="/a"  extends="struts-default">
  8. <action name="hello">
  9. <result>/2.jsp</result>
  10. </action>
  11. </package>
    <constant name="struts.action.extension" value="action, ," />
    <package name="default"  namespace="/"  extends="struts-default">
       <action name="hello">
         <result>/1.jsp</result>
       </action>
    </package>

    <package name="a"  namespace="/a"  extends="struts-default">
       <action name="hello">
         <result>/2.jsp</result>
       </action>
    </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" />
<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. public class UserAction {
  3. public String saveUser() throws Exception{
  4. System.out.println("添加用户");
  5. return null;
  6. }
  7. public String updateUser() throws Exception{
  8. System.out.println("修改用户");
  9. return null;
  10. }
  11. public String deleteUser() throws Exception{
  12. System.out.println("删除用户");
  13. return null;
  14. }
  15. public String showUser() throws Exception{
  16. System.out.println("查询用户");
  17. return null;
  18. }
  19. }
package com.puckasoft.web.action;

public class UserAction {
 public String saveUser() throws Exception{
  System.out.println("添加用户");
  return null;
 }
 public String updateUser() throws Exception{
  System.out.println("修改用户");
  return null;
 }
 public String deleteUser() throws Exception{
  System.out.println("删除用户");
  return null;
 }
 public String showUser() throws Exception{
  System.out.println("查询用户");
  return null;
 }
}

配置方法一: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>
    <package name="user"  namespace="/user"  extends="struts-default">
      	<action name="save"  class="com.puckasoft.web.action.UserAction"
      	method="saveUser"></action>
      	<action name="update"  class="com.puckasoft.web.action.UserAction"
      	method="updateUser"></action>
      	<action name="delete"  class="com.puckasoft.web.action.UserAction"
      	method="deleteUser"></action>
      	<action name="show"  class="com.puckasoft.web.action.UserAction"
      	method="showUser"></action>
    </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>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="user"  namespace="/user"  extends="struts-default">
     <action name="index"  class="com.puckasoft.web.action.UserAction"/>
</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>
<package name="user"  namespace="/user"  extends="struts-default">
  <action name="*" class="com.puckasoft.web.action.UserAction" method="{1}User"/>
</package>

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

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

时间: 2024-11-05 13:30:36

Action方法调用的相关文章

Struts2学习之路(三)—— Action方法调用

上一篇(http://www.cnblogs.com/denisechen/p/4644275.html)提到,action执行的时候并不一定要执行execute方法.那么该如何决定要调用的方法?有以下三种方式: 1.使用method属性指定具体方法 这种方法会使得创建的action非常多. 1 <action name="order" class="com.action.Order" method="add"> 2 <resu

struts2.5动态方法调用和默认Action

在动态方法调用中,使用通配符方法出现问题,参考了http://www.cnblogs.com/jasonlixuetao/p/5933671.html 这篇博客,问题解决了. 这个是helloworld.xml: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Co

Struct2_使用Ajax调用Action方法并返回值

一.Login.jsp 1.<head>引入jquery: <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.js"></script> 2.界面控件: 用户名: <input type="text" id="userName"> <input typ

struts2学习笔记(4)---------action中的方法调用

系统需要使用Action的不同方法来处理用户请求,这就需要让同一个Action里面包含多个控制处理逻辑. 1)动态方法调用 即DMI(dynamic method invocation),使用actionName!methodName的形式来指定想要调用的方法,如果想使用DMI,需要在struts.xml里面加入这句话: <constant name="struts.enable.DynamicMethodInvocation" value="true" /&

Struts2的动态调用action方法

动态调用action方法,是指用 action!method 格式的请求来请求后台的逻辑处理 前提条件:在struts.xml或者struts.properties中配置 struts.enable.DynamicMethodInvocation常量为true ,否则动态调用不可用 查看源码:      在org.apache.struts2.dispatcher.mapper.DefaultActionMapper中 protected ActionMapping parseActionNam

Struts2中使用execAndWait后,在 Action中调用getXXX()方法报告java.lang.NullPointerException异常的原因和解决方法

使用 Struts2 编写页面,遇到一个要长时间运行的接口,因此增加了一个execAndWait ,结果在 Action 中调用 getContext()的时候报告异常 1 ActionContext context = ActionContext.getContext(); 2 ServletContext servletContext = (ServletContext) context.get(ServletActionContext.SERVLET_CONTEXT); //抛空指针异常

Struts2 Action中动态方法调用、通配符的使用

一.Struts2执行过程图: 二.struts2配置文件的加载顺序 struts-default.xml---struts-plugin.xml---struts.xml 具体步骤: 三.Action中动态方法调用<Dynamic Method Invocation> DMI 第一种方式: 自定义DMIAction类,使它继承ActionSupport类,该类无需手动重写execute(),底层有默认实现.因此我们也可以自定义方法list. struts.xml中的action元素植入met

第三章Struts2 Action中动态方法调用、通配符的使用

01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问ServletAPI时实现用户会话跟踪,其简单的程序运行流程图如下 Struts2框架是基于MVC模式.基于MVC模式框架的核心就是控制器对所有请求进行统一处理.Struts2的控制器StrutsPrepareAndExecuteFilter由ServletAPI中的Filter充当,当web容器的接收到登录

Struts2.5动态方法调用action和使用通配符访问action

[原帖地址]http://blog.csdn.net/leafage_m/article/details/54577687 动态方法调用Action. 这种方法,需要在struts.xml中对其进行支持: [html] view plain copy print? <!-- 是否开启动态方法调用 --> <constant name="struts.enable.DynamicMethodInvocation" value="true" />