126.Struts2中的拦截器有什么用?列举框架提供的拦截器名称?
)拦截器是struts2核心组成部分,
它提供了一种机制,使得开发者
可以定义一个特定的功能模块,
这个模块会在Action执行之前或者之后执行
也可以在Action执行之前阻止Action执行。
)常用的拦截器有:
chain:在不同请求之间将请求参数在不同名字件转换,
请求内容不变
fileUpload:提供文件上传。
i18n:记录用户选择的区域环境
logger:输出Action的名字
params:将请求中的参数设置到Action中去。
127.Struts2有哪些优点?
)在软件设计上Struts2的应用
可以不依赖于Servlet API和struts API。
Struts2的这种设计属于无侵入式设计;
)拦截器,
实现如参数拦截注入等功能;
)类型转换器,
可以把特殊的请求参数转换成需要的类型;
)多种表现层技术,
如:JSP、freeMarker、Velocity等;
)Struts2的输入校验
可以对指定某个方法进行校验;
)提供了全局范围、
包范围和Action范围的
国际化资源文件管理实现
) 实现MVC模式,结构清晰,
使开发者只关注业务逻辑的实现。
有丰富的tag可以用,
大提高了开发效率。(简要)
128.ActionContext和ValueStack什么时候创建?是否是线程安全的?
明确:
动作类是多例的,
每次动作访问,
动作类都会实例化。
所以是线程安全的。
与Struts1的区别是,
struts1的动作类是单例的。
在每次动作执行前,
核心控制器StrutsPrepareAndExecuteFilter
都会创建一个ActionContext和ValueStack对象。
且每次动作访问都会创建。
这两个对象存储了整个动作
访问期间用到的数据。
并且把数据绑定到了线程局部变量
ThreadLocal上了。
所以是线程安全的。
129.一个请求在Struts2框架中的处理大概分为几个步骤?
) 客户端初始化一个
指向Servlet容器(例如Tomcat)的请求
)这个请求经过一系列的过滤器Filter
这些过滤器中有一个叫做
ActionContextCleanUp的可选过滤器,
这个过滤器对于Struts2和
其他框架的集成很有帮助,
例如:SiteMesh Plugin)
)接着FilterDispatcher被调用,
FilterDispatcher询问ActionMapper
来决定这个请是否需要调用某个Action
)如果ActionMapper决定需要调用某个Action,
FilterDispatcher把请求的处理交给ActionProxy
)ActionProxy通过Configuration Manager
询问框架的配置文件,
找到需要调用的Action类
)ActionProxy创建一个ActionInvocation的实例。
)ActionInvocation实例使用命名模式来调用,
在调用Action的过程前后,
涉及到相关拦截器(Intercepter)的调用。
)一旦Action执行完毕,
ActionInvocation负责根据struts.xml中的配置
找到对应的返回结果。
返回结果通常是一个需要
被表示的JSP或者FreeMarker的模版。
在表示的过程中可以使用Struts2 框架中
继承的标签。
在这个过程中需要涉及到ActionMapper
130.介绍一下Struts的ActionServlet类
ActionServlet继承自
javax.servlet.http.HttpServlet类,
其在Struts framework中扮演的角色
是中心控制器。
它提供一个中心位置来处理全部的终端请求。
控制器ActionServlet主要
负责将HTTP的客户请求信息组装后,
根据配置文件的指定描述,
转发到适当的处理器。
按照Servelt的标准,
所有得Servlet必须在
web配置文件(web.xml)声明。
同样,ActoinServlet必须在
Web Application配置文件(web.xml)中描述
当用户向服务器端提交请求的时候,
实际上信息是首先发送到控制器ActionServlet,
一旦控制器获得了请求,
其就会将请求信息传交给一些辅助类(help classes)处理。
这些辅助类知道如何去处理与请求信息所对应的业务操作。
在Struts中,
这个辅助类就是org.apache.struts.action.Action。
通常开发者需要自己继承Aciton类,
从而实现自己的Action实例。