struts2的基本用法

来源:互联网 发布:python获取命令行参数 编辑:程序博客网 时间:2024/06/05 11:47

一、执行流程

这里写图片描述

二、配置文件加载顺序

  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

原创粉丝点击