struts2的基本用法

本文详细介绍了Struts2框架的基本概念,包括执行流程、配置文件加载顺序、Action类的创建方式、访问Servlet API的方法、ContextMap及拦截器等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、执行流程

这里写图片描述

二、配置文件加载顺序

  1. default.properties struts2-core-2.3.15.3.jar\org\apache\struts2 不能修改
  2. struts-default.xml struts2-core-2.3.15.3.jar 不能修改
  3. struts-plugin.xml 在struts2提供的插件jar包中 不能修改
  4. struts.xml 我们的应用中 我们修改的:推荐
  5. struts.properties 我们的应用中 我们修改的
  6. web.xml 我们的应用中 我们修改的,可以给过滤器配置参数

三、action类的三种 创建方式

第一种:无侵入式创建(实际开发中基本不用)

/**
 * 我们的第一个动作类
 * 动作类的第一种创建方式:
 *  无侵入式的创建。
*/
public class HelloAction {
    /**
     * @return
     */
    public String sayHello(){
        System.out.println(this);
        System.out.println("HelloAction中的sayHello方法执行了。。。。");
        return "success";
    }
}
<action name="hello" class="wb.web.action.HelloAction" method="sayHello">
        <result name="success" type="dispatcher">/success.jsp</result>
</action>

第二种:实现Action接口的定义方式 (实际开发中用的也不多)

/**
 * 动作类的第二种创建方式:
 *  实现Action接口
 */
public class Hello2Action implements Action{

    @Override
    public String execute() throws Exception {
        System.out.println("Hello2Action的execute方法执行了............");
        return ERROR;
    }   
}
默认的动作方法是:execute(),所以可以不指定method属性
<action name="hello2" class="com.itheima.web.action.Hello2Action">
        <result name="success" type="dispatcher">/success.jsp</result>
</action>   
Action接口中的常量
    SUCCESS:一般多用于成功
    ERROR:一般多用于动作方法执行失败
    LOGIN:一般多用于返回登录页面
    NONE:一般用于不返回任何结果视图,和return null作用是一样的
    INPUT:一般多用于数据回显,也是struts2中数据回显时的默认返回值。  

第三种:继承ActionSupport (实际开发中采用的方式)

/**
 * 动作类的第三种创建方式:
 *  继承ActionSupport
*/
public class Hello3Action extends ActionSupport{
}                   
<action name="hello3" class="com.itheima.web.action.Hello3Action">
    <result name="success" type="dispatcher">/success.jsp</result>
</action>

四、访问Servlet的API的两种方式

1、使用ServletActionContext
* static HttpServletRequest getRequest():获取Web应用的HttpServletRequest对象。
* static HttpServletResponse getResponse():获取Web应用的HttpServletResponse对象。
* static ServletContext getServletContext():获取Web应用的ServletContext对象。
* static PageContext getPageContext():获取Web应用的PageContext对象。

2、通过实现接口的方式
- ServletRequestAware:实现该接口的Action可以直接访问Web应用的HttpServletRequest实例。
- ServletResponseAware:实现该接口的Action可以直接访问Web应用的HttpServletResponse实例。
- SessionAware:实现该接口的Action可以直接访问Web应用的HttpSession实例。
- ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例。

五、ContextMap概述

它是OGNL上下文对象,是struts2中封装数据最大的对象。我们一次请求中所有用到的信息都可以在它里面找到。它是一个Map结构的对象,其中key是字符串,value是一个Object。
这里写图片描述
这里写图片描述

1、ActionContext

ActionContext就相当于对ContextMap进行了一次再封装,是对ContextMap进行操作的,而ContextMap中封了我们一次请求的所有数据,所以它的创建应该是每次请求访问Action时,即核心控制器(StrutsPrepareAndExecuteFilter)的doFilter方法执行时。

2、ValueStack

ValueStack是Struts的一个接口,字面意义为值栈,OgnlValueStack是ValueStack的实现类,客户端发起一个请求struts2架构会创建一个action实例同时创建一个OgnlValueStack值栈实例,OgnlValueStack贯穿整个 Action 的生命周期。它是ContextMap中的一部分,里面的结构是一个List,是我们可以快速访问数据一个容器。它的封装是由struts2框架完成的。

六、拦截器

拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者在定义的action执行的前后加入执行的代码,也可以在一个action执行前阻止其执行。也就是说它提供了一种可以提取action中可重代码,统一管理和执行的方式。
拦截器链 (Interceptor Chain),在Struts 2中称为拦截器栈Interceptor Stack, 在不修改源码的基础上,已有的方法进行动态增强。
在访问struts2核心内部时,在动作方法执行之前先正序执行,然后执行动作方法,执行完动作方法和结果视图之后,再倒序执行。所以它是先进后出,是个栈的结构。
执行原理:
①接口中的init()方法,在拦截器被创建后立即被调用,它在拦截器的生命周期内只被调用一次,可以在该方法中对相关资源进行必要的初始化;
②每拦截一个请求,intercept()方法就会被调用一次;
③destory()方法将在拦截器销毁之前被调用。
实现拦截器的三种方式:
①定义一个类,实现Interceptor接口
②定义一个类,继承AbstractInterceptor
③定义一个类,继承MethodFilterInterceptor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值