【07】框架学习—Struts2中域对象/页面跳转/数据封装/拦截器技术

来源:互联网 发布:热力学数据库建库情况 编辑:程序博客网 时间:2024/06/14 10:03

1.Struts2框架中使用Servlet的API

1.1 完全解耦合的方式

static ActionContext getContext():获取ActionContext对象实例。java.util.Map<java.lang.String,java.lang.Object> getParameters():获取请求参数,相当于Servlet中request.getParameters()。java.util.Map<java.lang.String,java.lang.Object> getSession():获取session的Map集合。java.util.Map<java.lang.String,java.lang.Object> getApplication():获取代表application域中Map集合。void put(java.lang.String key, java.lang.Object value):向request域中存入值。

这里写图片描述

1.2 使用原生Servlet的API的方式

getPageContext()getRequest()getResponse()getServletContext()

这里写图片描述

2.结果页面的跳转

2.1 结果页面跳转有两种方式

全局结果页面条件:如果<package>包中有多个action返回值相同,且跳转到同一个页面,可以配置全局的结果页面。示例:

这里写图片描述

局部结果页面属于action的子标签,有name和type两个重要属性,用于页面跳转。示例:

这里写图片描述

注意:全局与局部的name值相同的,优先局部结果页面。

2.2 结果页面的类型

name:逻辑视图的名称。type:跳转的类型,常见的结果类型可见于struts-default.xml。

这里写图片描述

3.数据封装

3.1 Struts2中两种数据封装的方式

3.1.1 属性驱动

提供对应属性的set方法进行数据的封装:    在Action类中提供所需封装属性的setter,表单提交数据后,会通过对应Action类中的setter将数据封装到全局变量中。    注意:    Struts2采用拦截器的方式完成数据的封装。    获取到的数据需要手动存入对象中,这种情况下,Action类既是控制器又是JavaBean,没有体现MVC思想,耦合性较高。    示例:

这里写图片描述

使用OGNL表达式进行数据封装:    在Action类中定义Javabean对象,并提供getter、setter。表单提交数据的name值也采用OGNL的方式。    示例:

这里写图片描述
这里写图片描述

3.1.2 模型驱动(常用)

在Action类中实例化JavaBean对象。Action类须实现ModelDriven<T>接口,实现getModel()方法,返回Javabean对象。示例:

这里写图片描述

3.2 将数据封装到集合中

3.2.1 将数据封装到Collection中

Collection接口都采用下标值的形式封装。提交表单页面如:<input type=”text” name=”list[0].username” />Action中如:提供list的集合,并提供其getter和setter。

3.2.2 将数据封装到Map中

Map集合都采用键值对的形式封装。提交表单页面如:<input type=”text” name=”map[‘key1’].username” />Action中如:提供map的集合,并提供其getter和setter。

4.拦截器技术

4.1 概述

拦截器是AOP(Aspect-Oriented Programming)的一种实现。过滤器:过滤从客户端发送到服务器端的请求。

4.2 拦截器和过滤器的区别

拦截器是基于Java反射机制的;而过滤器是基于函数回调的。拦截器不依赖于Servlet容器;过滤器依赖于Servlet容器。拦截器只对Action请求起作用(Action中的方法);过滤器几乎对所有请求有效。(css\jsp\js…)拦截器采用责任链模式:在责任链模式里有多个对象,每个对象对其下家的引用而连接形成一条链,责任链的每一个节点可以控制下一个节点是否执行。

4.3 Struts2的运行流程

这里写图片描述

0:启动服务器的时候Configuration解析struts.xml的配置文件,获取配置信息。1:页面发出请求。2:解析请求返回一个ActionMapper的实例。

这里写图片描述

3:

这里写图片描述

4:通过代理对象获取ActionInvocation对象,管理所有的拦截器。

这里写图片描述

5:代理对象开始执行,通过一层层的拦截器

这里写图片描述

intercept方法是进行拦截器的执行,其内部采用递归的方式。

这里写图片描述

6:

这里写图片描述

7:8:9:
原创粉丝点击