struts2配置文件元素(Package,Action)

本文介绍了如何在Struts2配置文件中使用分包管理和抽象包,以实现模块化的动作类配置,并详细讲解了action的命名、类定义、方法调用方式和通配符的使用。同时,讨论了默认action执行类的设定和动态方法调用的配置。
摘要由CSDN通过智能技术生成

package

在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。

<package name="p1" extends="struts-default" abstract="true" namespace="/hh">
</package>
  • name:包名,在struts.xml中不能有相同的包名 包名是唯一的
  • extend:继承,固定struts-default(struts2-core.jar/struts-default.xml中)
  • abstract:抽象包,被用于继承,一般在抽象包中不声明action
  • namespace:命名空间,访问路径,默认为空字符串,可用于模块划分http://localhost:8080/struts2_01/hh/hello

    namespace 查找规则: 如命名空间(/h1/h2/h3)先找/h1/h2/h3命名空间 没有再找/h1/h2命名空间 没有再找/h1命名空间 如果找到 在当前名称空间中找对应name的action执行,找不到则在默认名称空间(空)中找action执行

action

配置动作,处理请求路径

		<package name="p1" extends="struts-default">
		   <action name="hello" class="org.ccit.com.web.action.HelloAction" method="sayhello">
		        <result name="success">/success.jsp</result>
		    </action>
		 </package>

action中定义的常量
在这里插入图片描述

  • name:动作名称
  • class:动作类全名
  • method:动作中的方法名称。默认是public String execute(){}
    方法要求:
    1.public 2.返回值必须是String(可以是void 表示不跳转任何页面) 3.没有参数
    public  class HelloAction {
        public String sayhello() throws Exception {
            System.out.println("sayhello方法被调用");
            return "success";}}
    

三种Action写法

  •   public  class HelloAction {
      		   public String sayhello() throws Exception {
      		       System.out.println("sayhello方法被调用");
      		       return "success";}}
    
  • 写个Action类实现Action接口,然后实现excute方法 在xml文件中不指定method 默认访问excute方法

    <action name="login2" class="org.ccit.com.web.action.login02">
              <result name="success">/success.jsp</result>
    </action>
    
    public class login02 implements Action{
    
        @Override
        public String execute() throws Exception {
            return SUCCESS;
        }
    }
    
  • 写个Action类继承ActionSupport,如果action中没有指定method 在其父类ActionSupport中有execute方法。

     <action name="login3" class="org.ccit.com.web.action.login03" method="sayhello">
            <result name="success">/success.jsp</result>
     </action>
    
    public class login03 extends ActionSupport
    	  public String sayhello() throws Exception {
    	       System.out.println("sayhello方法被调用");
    	       return "success";
    	   }
    	}
    

默认的action执行类及修改

  • 默认的action执行类 如果在action中不指定类处理 默认类为ActionSupport
    配置在(struts-default.xml)<default-class-ref class=“com.opensymphony.xwork2.ActionSupport” />

     <action name="login3" >
                <result name="success">/success.jsp</result>
     </action>
    

    修改默认的动作类(在struts.xml中)

    <package name="p1" extends="struts-default"
        <default-action-ref name="login2"></default-action-ref>
    </package>
    

通配符使用

在这里插入图片描述

public class UserAction extends ActionSupport {
    public String add(){
        return SUCCESS;
    }
    public String delete(){
        return SUCCESS;
    }
    public String update(){
        return SUCCESS;
    }
    public String find(){
        return SUCCESS;
    }
}

未使用:

   <package name="p2" extends="struts-default" namespace="/user">
        <action name="add" class="org.ccit.com.web.action.UserAction" method="add">
            <result name="success">/userJSP/add.jsp</result>
        </action>
        <action name="find" class="org.ccit.com.web.action.UserAction" method="find">
            <result name="success">/userJSP/find.jsp</result>
        </action>
        <action name="delete" class="org.ccit.com.web.action.UserAction" method="delete">
            <result name="success">/userJSP/delete.jsp</result>
        </action>
        <action name="update" class="org.ccit.com.web.action.UserAction" method="update">
            <result name="success">/userJSP/update.jsp</result>
        </action>
    </package>

使用:

在2.5版本中加<global-allowed-methods>regex:.*</global-allowed-methods>
打开动态方法调用 可以使用多个* 一次类推 {1} {2}

http://localhost:8080/struts2_01/user/add

<constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <package name="p3" extends="struts-default" namespace="/user">
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="*" class="org.ccit.com.web.action.UserAction" method="{1}">
            <result name="success">/userJSP/{1}.jsp</result>
        </action>
    </package>

http://localhost:8080/struts2_01/user/add_user

<constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <package name="p3" extends="struts-default" namespace="/">
        <global-allowed-methods>regex:.*</global-allowed-methods>
        <action name="*_*" class="org.ccit.com.web.action.UserAction" method="{1}{2}">
            <result name="success">/{2}JSP/{1}.jsp</result>
        </action>
    </package>

动态方法的调用(不常用)

加!加方法名
http://localhost:8080/struts2_01/user!add
开启动态方法调用
<constant name=“struts.enable.DynamicMethodInvocation” value=“true” />
在高版本中需要规定允许调用的动态方法
<global-allowed-methods>find,add,delete,update</global-allowed-methods>

 <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <package name="p3" extends="struts-default">
        <global-allowed-methods>find,add,delete,update</global-allowed-methods>
        <action name="user" class="org.ccit.com.web.action.UserAction">
            <result name="success">/success.jsp</result>
        </action>
    </package>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值