• Struts2之Action的配置


    一、Action的动态调用方法

    Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法:

    方法一:通过methed属性指定执行方法:

    <package name="user" extends="struts-default" namespace="/user">
        <!-- method="add"表明调用该action时是执行该action对象的add方法 -->
        <action name="userAdd" class="com.chongqing.action.UserAction" method="add">
            <result>/user_add_success.jsp</result>
        </action>
    </package>
    

    这样,只要在action的对象中有一个add的方法,并且返回类型为String就可以了。如果没有使用method属性,则默认执行execute方法

    package com.chongqing.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport {
    	public String add() {
    		return SUCCESS;
    	}
    	
    	
    }

    方法二:动态方法调用DMI(推荐)

    可以在URL地址中动态指定Action执行那个方法。URL地址如下:

    方法:action + ! + 方法名
    注:只要Action对象中有这个方法,并且返回类型为String就可以调用

    这样struts.xml配置文件中不需要配置methed属性。代码如下:

    <action name="user" class="com.chongqing.action.UserAction">
                <result>/user_add_success.jsp</result>
            </action>
    
     Action类:
    package com.chongqing.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport {
    	public String add() {
    		return SUCCESS;
    	}	
    }
    

    总结:推荐使用第二种动态方法调用DMI,因为第一种需要大量的Action配置,后者可以在URL中动态指定执行action中哪个方法。

    二、Action通配符(wildcard)的配置

    随着Web应用程序的增加,所需的Action也会更多,会导致大量的action映射,使用通配符可以减少action配置的数量,使一些具有类似行为的Action或者Action方法可以使用通用的样式来配置

    通配符即星号(*),用于匹配0个或多个字符,在配置action时,可以在action元素的name属性中使用星号(*)来匹配任意的字符。 

    不过,一定要遵守"约定优于配置"的原则

    用法:

    星号(*) :表示所有
    {数字}:表示第几个通配符
    例如:name="Student*": 那么{1}代表第一个星号(*)
             name="*_*"        : 那么{1}代表第一个星号(*) ,{2}代表第二个星号(*)

    例子:struts.xml文件代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
        <constant name="struts.devMode" value="true" />
        <package name="actions" extends="struts-default" namespace="/actions">
        <!-- 这个action将匹配所有Student*的名字,比如说星号可以是add,delete等等,对应的action调用方法为add,delete,对应的jsp为:Studentadd_success.jsp和Studentdelete_success.jsp--> <action name="Student*" class="com.chongqing.action.StudentAction" method="{1}"> <result>/Student{1}_success.jsp</result> </action>     <!-- 这个action将匹配所有*_*的名字,--> <action name="*_*" class="com.chongqing.action.{1}Action" method="{2}"> <result>/{1}_{2}_success.jsp</result> </action> </package> </struts>

    action类的代码:

    package com.chongqing.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class StudentAction extends ActionSupport {
    	public String add() {
    		return SUCCESS;
    	}
    	public String delete() {
    		return SUCCESS;
    	}	
    }
    
    package com.chongqing.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class TeacherAction extends ActionSupport {
    	public String add() {
    		return SUCCESS;
    	}
    	
    	public String delete() {
    		return SUCCESS;
    	}		
    }
    

     相应的jsp页面有:
    Course_add_seccess.jsp
    Course_delete_success.jsp
    Teacher_add_seccess.jsp
    Teacher_delete_success.jsp
    Studentadd_success.jsp
    Studentdelete_success.jsp

    解释:

    第一个Action的名称为name="Student*" method="{1}",表示所有Action以Student开始的都会执行这个Action(就此程序而言),并且执行Student后字符为方法名的方法,例如:访问的Action为Studentadd,会执行这个Action(Student*),并且执行add的方法.因为{1}在这里代表add,并且返回/Studentadd_success.jsp页面。

    第二个Action的名称name="*_*" method="{2}" class="action.{1}Action" ,表示所有Action中包含下划线("_")并与此格式匹配的都会执行这个Action(就此程序而言),例如:Teacher_add,那么会执行这个Action,并且Action对应的类为TeacherAction,且执行Action中的add方法,返回结果页面为/Teacher_add_success.jsp,因为在这里的{1}表示Teacher,{2}表示add

     匹配顺序:当匹配的Action有两个以上时,则会按匹配精确度高的那个Action,当有个相同的匹配精确度时,则按先后顺序进行。

    三、默认的action

    如果你请求一个不存在的action,那么结果将是HTTP 404错误,即页面没有发现错误。在Struts2中,你可以指定一个默认的action,当一个请求没有其他action匹配时,默认的action将被执行。

    默认的action使用default-action-ref元素来声明,如下:

    <struts>
        <constant name="struts.devMode" value="true" />
       
        <package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="index"></default-action-ref>
        <action name="index">
            <result>/default.jsp</result>
        </action>
        </package>
    </struts>
    

    当前访问namespace="/"下不存在的action时,则返回自动转到访问/default.jsp页面。

    注意:默认action只对action的访问有效。如果访问的是一个非action资源,例如/book.jsp,而该页面并不存在,那么依旧会看到HTTP 404错误。

  • 相关阅读:
    Elasticsearch--ES-Head--docker版安装
    springboot配置rabbitmq
    springboot开启多线程配置
    Hyper-v安装centos后的网络配置
    阿里云服务器centos7,docker部署mysql+Redis+vue+springboot+Nginx+fastdfs,亲测可用
    安装docker-compose
    装饰器
    数据类型操作中的坑 循环删除
    python数据类型:字典dict常用操作
    函数def
  • 原文地址:https://www.cnblogs.com/yzy-blogs/p/6696595.html
Copyright © 2020-2023  润新知