面试篇——Struts2
1.Struts工作原理
(1)请求发给StrutsPrepareAndExecuteFilter
(2)StrutsPrepareAndExecuteFilter判定该请求是否是一个Struts2请求
(3)若该请求是一个 Struts2 请求,则 StrutsPrepareAndExecuteFilter把请求的处理交给 ActionProxy
(4)ActionProxy 创建一个 ActionInvocation 的实例,并进行初始化
(5)ActionInvocation 实例在调用 Action 的过程前后,涉及到相关拦截器(Intercepter)的调用。
(6)Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果。调用结果的 execute 方法,渲染结果。
(7)执行各个拦截器 invocation.invoke() 之后的代码
(8)把结果发送到客户端Struts执行流程
2.Struts有什么优缺点
优点:
(1)实现MVC模式,结构清晰;
(2)丰富的Struts的标记库,利用好能大大提高开发效率;
(3)全局结果与声明式异常;
(4)可使用OGNL进行参数传递
(5)各个类方便使用的拦截器
缺点:
(1)转到表现层时,需要配置结果页面;页面多了比较繁杂;
(2)对Servlet的依赖性过强;
(3)Struts标签稍微比el表达式繁重
3.常用拦截器
conversionError:类型转换错误拦截器
exception:异常拦截器
fileUpload:文件上传拦截器
i18n:国际化拦截器
logger:日志拦截器
params:解析请求参数拦截器
validation:校验拦截器
timer:这个拦截器负责输出Action的执行时间,以分析该Action的性能瓶颈。
token:避免重复提交的校验拦截器。
modelDriven:Action执行该拦截器时候可以将getModel方法得到的result值放入值栈中
roles:进行权限配置的拦截器,如果登录用户拥有相应权限才去执行某一特定Action。
4.拦截器执行流程
每个拦截器都是需要实现 Interceptor接口
→ init():在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化;
→ intercept(ActionInvocation invocation):每拦截一个动作请求,该方法就会被调用一次;
→ destroy:该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次;
5.数据封装方式
(1)jsp表单数据填充到action中的属性
(2)jsp表单数据填充到action的对象中的属性
(3)ModelDriven模型驱动(推荐)
6.OGNL表达式
(1) OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。
(2)Ognl的类中包含的很方便的方法实现OGNL表达式的赋值。实现这个功能需要两步,解析一个表达式使之称为一种内部的形式然后再用这种内部的形式对属性赋值或取值;
(3)Struts框架默认就支持Ognl表达式语言。(struts必须引用包ognl.jar)
作用:页面取值用。
El表达式语言,用于页面取值,jsp页面取值的标准。(默认直接可以使用)
Ognl表达式语言, struts标签默认支持的表达式语言。
缺点:必须配置struts标签用,不能离开struts标签直接用。