zoukankan      html  css  js  c++  java
  • 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>

         

  • 相关阅读:
    Apple Swift编程语言入门教程
    网络请求错误
    Mac使用大全
    MPMovieplayerController添加新控件
    ios9 新变化
    UITableView总结
    UINavigationController的简单学习
    HTML
    谓词(NSPredicate)
    NSString字符串
  • 原文地址:https://www.cnblogs.com/hjiongjiong/p/4540779.html
Copyright © 2011-2022 走看看