Struts2 -action处理业务请求

struts2与mvc

                   view层:应用程序输出页面或者界面:jsp、html等

                  controller层   :Struts2 :1、核心控制器strutsPrepareAndExecuteFiler(通过web.xml配置)

                    2、业务控制器(action)

                   model层:应用程序的业务逻辑和业务数据,由封装数据的和处理业务的javabase组成

Action的作用

                   1、控制业务逻辑:如果业务逻辑很复杂,可以把业务逻辑构建为业务类,在Action中调用业务类

      2、返回结果字符集

      3、方便的处理数据:比如在Action中以属性方法接受用户数据

          Action接受参数的方式一:属性方式(参数字段不是少的时候应用)

<struts>
    <!-- 设置开发者模式 -->
    <constant name="struts.devMode" value="true"></constant>
    <!-- 设置 struts2编码格式-->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <package name="default" namespace="/" extends="struts-default">
        <action name="hello" class="action.HelloAction">
            <result>/hello.jsp</result>
        </action>
    </package>
</struts>

                      taglib标签库

                     <%@taglib uri="/struts-tags" prefix="s" %>     引用<s:property value="属性名">   表示引用Action类属性的值

           Action接受参数的方式二:JavaBase方式,将模型数据从Action中分离了出来,使Action结构更加清晰

                      1、定义实体类并,为实体添加属性和setter及getter方法

        2、为Action类添加实体属性和setter及getter方法。例如 private User user;

        3、修改表单参数name为实体对象名.属性名 。例如:name=“user.username”

        4、取值通过<s:property name="实体对象名.属性名"/>的方式。

    Action接受参数的方式三:ModeDriven方法(较少用)

                       1、定义实体类并,为实体添加属性和setter及getter方法

        2、创建Action类,实现ModelDriven接口,重写getModel()方法,该方法返回值为实体属性。例如  public User getModel() return user

        3、为Action类添加JavaBase类型属性,并需要实例化,不需要setter及getter方法。例如 private User user=new User();

        4、form表单项的name属性,以及页面的取值时通过<s:property value="属性名"/>方式,

               ModeDriven与前2者区别(三种方式可以混合使用):

            相同点:与JavaBase方式定义Action属性的方式类似,与属性方式在jsp页面中的方式相同。

            不同点:ModeDriven方式一个Action对应一个Model用于接受参数。而JavaBase方式一个Action可以对应多个Model

                                            ModeDriven方法与属性方式同时存在Action时,对于相同的属性,ModeDriven方式优先被赋值。

   在<action>标签中使用method属性调用Action中的指定业务方法

       访问Action时,默认调用的execute方法,可以在Action中定义多个业务方法,方法签名要和public String execute()相同,例如 public String add()

                    可以使用method属性配置指定调用的方法,例如<action method=“add”/〉

       一个Action可以配置多个<action>来对应Action中的多个方法,使用不同的name属性值和method属性值配置

          例如

<struts>
    <!-- 设置开发者模式 -->
    <constant name="struts.devMode" value="true"></constant>
    <!-- 设置 struts2编码格式-->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <package name="default" namespace="/" extends="struts-default">
        <!-- 配置多个action对应一个Action中的多个方法 -->
        <action name="hello" class="action.HelloAction" method="execute">
            <result>/hello.jsp</result>
        </action>
        <action name="hello2" class="action.HelloAction" method="add">
            <result>/success.jsp</result>
        </action>
        <action name="hello3" class="action.HelloAction" method="updata">
            <result>/success2.jsp</result>
        </action>
    </package>
</struts>  

        〈include〉标签:需要配置的〈action〉过多时,可以使用〈include〉标签按照模块包含多个xml配置文件

                              使struts.xml结构清晰直观,减少各个模块内容的互相干扰,各司其职。

                             1、按照模块在不同的xml中配置〈action〉

             例如  struts_user.XML:

                    <package.....> <action....></action> </package>

          2、在struts.xml中使用〈include〉标签包含多个xml文件

             例如:struts.xml:

                   <include file="struts_user.xml" />

   动态方法调用 :   在Action中调用指定业务方法 (有安全隐患,会暴露一些方法给用户) 

      1、只需要配置一个<action>标签,也不需要使用method属性

      2、调用时指出Action名和指定方法: 

        例如  在form的action=“actionname!methodname”  

          <!-- 设置 禁用动态方法调用 -->

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

   使用通配符简化〈action〉配置

         用*号匹配到内容替换对应的大括号位置上的内容,一般使用1个*号

<!-- 使用通配符配置action -->
        <action name="*_*" class="action.{1}Action" method="{1}">
            <result>/{1}_{2}.jsp</result>
        </action>
<!--等价于-->
      <action name="user_add" class="action.userAction" method="{add}">
            <result>/user_add.jsp</result>
        </action>

                     当有多action 匹配时的顺序  :1、优先使用完全匹配,其次才使用通配符。

       当有多个通配符匹配时:1、优先写在前面的通配符    

       默认Action:当访问的Action找不到的时候,会访问默认Action

      <default-action-ref  name="user" />     ----表示找不到Action时,访问名为user的Action

      <action name="user">  <result>/index.jsp</result></action>

     

原文地址:https://www.cnblogs.com/hjiongjiong/p/4540779.html