Sturts2学习笔记
分类:
文章
•
2024-04-30 17:45:10
- struts框架的工作原理;
1.首先要经过Struts2框架的核心控制器StrutsPrepareAndExecuteFilter。
然后核心控制器依次查找ActionMapper来决定这个请求是否调用action。如果ActionMapper决定调用action,StrutsPrepareAndExecuteFilter就把请求的处理控制权委托给ActionProxy。
2.ActionProxy通过Configuration Manager查询Struts2框架的核心配置文件(struts.xml),找到所要调用的Action类。
接下来,ActionProxy创建一个ActionInvocation实例,该实例负责命令模式的实现,包括在**action本身之前调用配置的任意拦截器。
3.在action执行完成之后,ActionInvocation实例负责根据action的返回结果码在struts.xml配置文件中查找要输出的结果(Result)。该结果通常是JSP或者FreeMarker模板,也可能是action。在输出的时候,模板可以使用框架提供的Struts2标签。
然后,为action配置的拦截器将被再次执行(顺序和action被调用之前执行顺序相反)。
最后,服务器的响应将通过web.xml文件中配置的Struts2框架核心控制器返回。
- 配置struts.xml,配置文件的编写,理解各元素所包含的属性以及值的表示(如action的配置:如method);
1.web.xml
StrutsPrepareAndExecuteFilter
Struts2提供的核心控制器类
框架开始工作的入口
接管请求
2.struts.xml
该文件名称规定,只能位于src下
package
分模块管理,作用和java中的包类似
name:自定义但不能重复
namespace:命名空间,和url请求路径直接相关
extends:必须直接或间接继承struts-default
action
url和处理类的方法进行映射
name:为请求名,不加后缀
class:处理类的完全限定名称,如果不配置,由默认类来处理
method:处理请求的方法,默认为execute
result
result 结果集的配置
name 结果集名称,和处理方法的返回值匹配,默认为success,可以自定义
struts2提供了5个返回结果
type 指定响应结果类型
dispatcher 转发 默认
redirect 重定向
redirectAction 重定向到Action
result的值为跳转页面,不加/为相对于namespace的路径
- struts框架中内置的result类型及其功能;
- Action接口所定义的字符串常量
SUCCESS NONE ERROR INPUT LOGIN
- ActionSupport类的理解
ActionSupport类实现了Action接口,业务处理类也可以继承该类。
struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。
- 业务控制类的定义方式;
1.定义业务逻辑接口的对象 2.定义与表单元素或get请求参数对应的属性 3.定义默认处理请求的execute方法
- Struts控制类访问Servlet API(如session对象)的四种方法。
1.修改Action类,通过ActionContext 获取请求、会话和上下文对象相关联的Map 对象来实现存取属性的功能,代码片段
2.修改Action类,通过实现Struts 提供的接口:RequestAware、SessionAware和ApplicationAware,获取请求、会话和上下文对象相关联的Map 对象来实现存取属性的功能,
3.修改Action类,通过接口:ServletContextAware、ServletRequestAware、
ServletResponseAware 直接访问Servlet API
4.通过ServletActionContext 工具类直接访问Servlet API
- ognl的集合操作;
1.直接生成List类型集合的语法:{e1,e2,e3,e4…}
2.自己生成Map类型集合的语法:#{key1:value1,key2:value2,…}
OGNL取得子集时有如下3个操作符:
? :取出所有符合选择逻辑的元素
^ :取出符合选择逻辑的第一个元素
$ :取出所有符合选择逻辑的最后一个元素
- ognl应用示例(如实验题:创建业务控制类OgnlAction,测试基本属性、基本方法、类对象、静态属性、静态方法、List列表、Set集合、Map映射等各种类型参数采用OGNL表达式获取的办法。)





- 控制标签和数据标签分别有哪些?理解每一个标签的作用是什么?

debug标签会在页面中输出一个[Debug] 链接,单击链接可以查看值栈的内容,通常应用于web开发调试阶段。
property标签用于输出值,使用value属性来指定要输出的对象,如果没有指定value属性,那么默认输出栈顶对象。
set标签将一个值赋给指定范围内变量。如在页面中多次引用一个复杂的表达式,就可以将这个表达式赋给一个变量,然后直接引用变量。
push标签用于将值压入值栈。
bean标签用于创建JavaBean类的一个实例。
- 资源文件的后缀名;

- 什么是国际化,在Struts框架中如何应用国际化?

- 拦截器的工作原理;
Struts2拦截器是一种AOP设计思想的体现,以链式执行,对真正要执行的方法(execute)进行拦截,首先按照Action配置的拦截器顺序依次执行相应的拦截器,调用完后再执行Action及result跳转,然后再次执行拦截器(与先前调用相反的顺序),在此链式的执行过程中,任何一个拦截器都可以直接返回,从而终止余下的拦截器或Action及reuslt的执行.
- 拦截器的使用方法。
struts2的默认拦截器是定义在strus-default.xml中的。由于默认情况下,这些拦截器都是定义在struts-default包下的。所有在使用struts2时,定义的package需要直接或间接继承struts-default。提供struts2所有的功能。
使用内置拦截器时需要引用拦截器。
使用拦截器是通过在action的定义中使用<interceptor-ref …/>元素来实现的。其格式如下:
<package …>
…
自定义拦截器的步骤:
(1)创建拦截器类(两种实现方式:a)实现Interceptor接口 b)继承AbstractIntercepter类);
(2)注册拦截器;
(3)使用拦截器。
创建拦截器类需要实现Interceptor(com.opensymphony.xwork2.interceptor.Interceptor)接口。
Interceptor接口的定义中提供了init()、destroy()和intercept()3个方法。
AbstractInterceptor是Struts2框架提供的一个实现了Interceptor接口的抽象类,该抽象类提供了init()和destroy()两个方法的空实现。
通过继承AbstractInterceptor抽象类的方式创建拦截器类时,只需实现intercept()方法即可。
注册拦截器分为注册拦截器和注册拦截器栈。
1.注册拦截器
注册拦截器又称为定义拦截器,是通过在配置文件中使用元素和内嵌的子元素在包中实现的。
2.注册拦截器栈
拦截器栈的定义是通过使用元素和内嵌的子元素在包的元素中实现的。子元素用于指明拦截器栈中所要使用的已经注册的拦截器。拦截器栈中拦截器的顺序很重要,它会影响action的行为。
使用拦截器是通过在action的定义中使用<interceptor-ref …/>元素来实现的。其格式如下:
<package …>
…


