3.Struts
3.1.为什么要用Struts2?
参考答案:
主流的开发技术,大多数公司在使用,Struts是基于MVC模式开发的,MVC结构是一个优秀的设计思想,可以提高程序结构的灵活性,便于日后的维护和扩展.
3.2.简述Struts的发展历史
参考答案:
最早出现的Struts1是一个非常著名的框架,它实现了MVC模式.Struts1简单小巧,其中最成熟的版本是Struts1.2.
之后出现了WebWork框架,其实现技术比Struts1先进,但影响力不如Struts1.
在框架技术不断发展过程中,有人在WebWork核心XWork的基础上包装了Struts1(算是两种框架的整合),由此,结合了Struts1的影响力和WebWork的先进技术,Struts2诞生了.
所以说,Struts2不是Struts1的升级,它更像是WebWork的升级版本.
3.3.请简述Struts2与Struts1的区别和联系
参考答案:
Struts2与Struts1差别巨大,不能理解为Struts1的升级版;Struts2以Xwork为核心,可以理解为WebWork的升级版.
3.4.Struts2如何实现MVC,与Spring MVC有什么不同?
参考答案:
Struts2采用filter充当前端控制器处理请求,filter会根据struts.xml的配置,将请求分发给不同的业务控制器Action,再由Action处理具体的业务逻辑.Action处理完业务之后,filter会根据其返回的字符串,从struts.xml中找到对应的result,最终由result将请求转发给页面.
这个实现的思路与Spring MVC基本一致.其差异如下:
1)Spring采用Servlet充当前端控制器,分发请求.
2)Spring采用RequestMapping配置请求与业务控制器的关系.
3)Spring采用Controller充当业务控制器.
4)Spring采用ViewResolver将请求转发给页面.
3.5.在Struts2中页面如何向Action传参?
参考答案:
Struts2中常用的传参方式有2中,分别是基本属性注入和域模型注入.
其中,基本属性注入是将表单中的数据,分别传给Action中声明的基本属性,要求这些属性有set方法,并且名称与表单中框体的name值一致.
域模型注入是将表单中的数据,传给Action中的一个实体对象,要求这个对象具有set方法,并且表单中框体的name中的表达式要有如下格式”对象.属性”.
3.6.什么是OGNL?
参考答案:
Object Graphics Navigation Language,对象图导航语言,属于表达式语言的一种,与EL表达式类似;Ognl技术是Struts2中的核心知识,它封装于ognl.jar中;Ognl.jar工具包提供一个引擎,该引擎可以按照提供的ognl表达式访问对象数据和方法.
3.7.OGNL工具的构成
参考答案:
OGNL工具由三部分构成:
1.OGNL引擎,负责解析执行OGNL表达式
2.Root存储区,负责存储一个Object类型的对象,该存储区数据访问时,OGNL表达式格式为”属性”
3.Context存储区,负责存储一个Map类型的对象,该存储区数据访问时,OGNL表达式格式为”#key”
3.8.OGNL表达式有哪些用法,你熟悉其中哪几种?
参考答案:
OGNL有8种用法,其中常用的有2种,不太常用的有6中.
我熟悉这2种常用的用法,其作用是:
1)可以给基本属性注入值
2)可以给实体对象注入值
另外6种用法也有所料及,作用是:
1)可以访问数组或集合
2)可以访问Map
3)可以在访问时进行一些基本的运算
4)可以在访问时调用返回对象的方法
5)可以直接创建一个临时的集合
6)可以直接创建一个临时的Map
3.9.请简述Struts2的Action的工作原理
参考答案:
Struts2的Action工作原理如下:
1.当客户端发出请求,请求到达控制器;
2.当控制器根据请求创建一个ValueStack对象,每个请求创建一个Action对象,Action对象存入到ValueStack对象的root栈顶.将ValueStack对象存入到request中.存储的key为”struts.valueStack”;
3.控制器调用Action对象接受请求参数,执行业务方法处理;
4.控制器根据Action返回值调用result视图组件处理;
5.请求处理完成后,将ValueStack对象和Action对象销毁.
3.10.请列出常用的至少五种Struts2的Result组件,并说明它们的作用
参考答案:
1.dispatcher(默认) 以请求转发方式调用一个JSP,生成响应视图;
2.redirect 以重定向方式调用一个Action;
3.redirectAction 以重定向方式调用一个Action;
4.chain 以请求转发方式调用一个Action
5.stream 以字节流方式响应,将Action中指定的一个InputStream类型属性输出,将Action中的InputStream属性以字节流方式输出;
6.json 以json字符串方式响应,将Action中指定的属性,拼成一个json字符串输出.