Struts2的控制组件

struts2的控制组件类型:
核心控制器:过滤器(Struts2提供的一个过滤器,由web.xml的filter和filter-mapping元素来设置)
业务逻辑控制器:Action
创建业务逻辑控制器步骤:
创建Action类
创建struts.xml配置包、动作等内容

创建Action类

创建Action类方法:

  • POJO
  • 实现Action接口
  • 扩展ActionSupport类(扩展ActionSupport类,可以使我们创建的Action更简单、更规范)

扩展ActionSupport类创建动作类语法

  • 扩展ActionSupport类
  • 根据需保存的数据声明成员变量
  • 定义对应传入参数的属性的setter和getter方法。
  • 动作类通过属性的setter方法获取客户端传来的数据,并保存在动作类成员变量中,客户端则通过属性的getter方法获取动作类的数据
  • 动作被访问后默认执行execute()方法:
    public String execute() throws Exception
  • 按照execute()的语法规范创建其他action业务方法。
  • 动作处理客户端请求后会返回一个字符串,这个字符串称为逻辑视图
  • 当动作类继承了ActionSupport后,通常使用以下一些常量作为动作执行后的返回值: INPUT 、SUCCESS、LOGIN、NONE和ERROR
    **ERROR:**表示动作类执行失败
    **SUCCESS:**表示动作类执行成功,并将由相关的视图页面显示结果
    **LOGIN:**表示需要先登录才可以执行动作
    **INPUT:**表示需要输入全部数据才能执行动作或数据输入无效需重新输入
    **NONE:**表示动作类执行成功,但不显示任何页面

在struts.xml中配置包和动作

配置包:使用package标记,可以包含多个动作,常用属性如下:
name:定义包的名字,唯一性
namespace:定义包的运行路径,防止动作名冲突
extends:配置继承的父包
例如:

<package name="lab" namespace="/hello" extends="struts-default"> 
       ……
</package>

定义动作:使用action标记,在动作标记内包含定义结果、拦截器引用、异常等内容的子标记,常用属性如下:
name:指定客户端发送请求的地址映射名称
class:指定进行业务逻辑处理的动作类全限定性名称
method:指定动作类中进行业务处理的具体方法名称

<action name="userAction" class="com.sise.UserAction" method="addUser">
     ……
</action>

定义动作结果:使用result标记,可以在一个标记对中使用一个或多个result标记为动作指定一个或多个结果映射,常用属性如下:
name:指定结果的逻辑视图名字,默认值为“success”
type:指定结果类型,默认值为“dispatcher”

<action name="userAction" class="com.sise.UserAction" method="addUser">
     <result name="input">/input.jsp</result>
     <result name="success"  
                  type="redirect">/admin.jsp</reslut>
</action>

常用结果类型:

  • dispatcher:默认结果类型,将请求转发给视图页面。使用的视图技术是JSP。
  • redirect:重定向到其他视图页面或动作,参数不能传递
  • redirectAction:动作转向结果类型,表示将访问转到其他动作,参数不能传递
  • chain:动作链结果类型,表示请求将转到一系列的其他动作进行处理,参数不能传递
    在这里插入图片描述

Action处理请求参数方法:

属性驱动:通过属性进行数据传递。
-属性为基本数据类型
-属性为域对象
模型驱动:通过Action实现ModelDriven接口来接
收请求参数。

1.属性为基本数据类型:
语法:
-请求参数为基本数据类型。
-Action类中声明存储客户端参数的变量。
-在Action类中定义与客户端参数名以及类型一致的属性的setter和getter方法。
在这里插入图片描述
在这里插入图片描述
2.属性为域对象
语法:
-创建域对象类,其中属性为基本数据类型。
-Action类中声明存储域对象的变量。
-在Action类中定义与域对象类型和名字一致的属性的setter和getter方法。
-请求参数格式为:域对象.基本数据类型属性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.模型驱动处理请求参数
语法:
-客户端参数是基本数据类型。
-创建域对象类,其中属性名字及类型和客户端参数一致。
-Action类实现ModelDriven接口,实例化域对象,并重写getModel()方法返回域对象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

执行动作中不同的方法

1.使用通配符*号。通过在struts.xml中对动作名使用通配符可以在不同请求情况下执行不同动作方法。例如:

<package name="methodDemo" namespace="/user" extends="struts-default">
<action name="*Action"  method="{1}" class=“…" >
   <result name=...>/insertUser.jsp</result>
   <result name=...>/editUser.jsp</result>
  <allowed-methods>insertUser,editUser</allowed-methods>
</action>

2.动态方法调用(DMI),格式:在URL中使用:动作名!方法名.action来调用动作的不同处理方法。例如:

<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<package name=“MethodDemo" namespace="/user" extends="struts-default">
<action name=“userAction"  class=“…" >
    <result name=...>/insertUser.jsp</result>
   <result name=...>/editUser.jsp</result>
   <allowed-methods>insertUser,editUser</allowed-method>
</action>
</package>

Action访问Servlet API

常用方式:
-使用ActionContext类来访问
-使用ServletActionContext类来访问
-通过实现xxxAware接口访问

示例:

https://download.csdn.net/download/weixin_43906969/13203846

pom.xml导入的依赖:

<dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.ow2.asm/asm-commons -->
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-commons</artifactId>
            <version>7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.ow2.asm/asm-tree -->
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-tree</artifactId>
            <version>7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.12.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ognl/ognl -->
        <dependency>
            <groupId>ognl</groupId>
            <artifactId>ognl</artifactId>
            <version>3.1.26</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.22</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一峰说

坚持价值输出

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值