S2SH面试题.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《S2SH面试题.docx》由会员分享,可在线阅读,更多相关《S2SH面试题.docx(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Struts2部分1. 说明Struts2框架的工作原理。解析 掌握一个框架,首先必须了解这个框架的工作原理,企业非常关注应聘者对常用框架的工作原理的理解程度。参考答案(1) 客户端向服务器端提交请求,容器初始化HttpServletRequest请求对象。(2) 请求对象被一系列的Servlet过滤器过滤,Struts2中的过滤器有三种。(3) FilterDispatcher过滤器调用ActionMapper,决定该请求是否需要调用某个Action。(4) 如果请求需要调用某个Action,ActionMapper将通知FilterDispatcher过滤器把请求的对象交给ActionPr
2、oxy来处理。(5) ActionProxy通过Configuration Manager 解析框架的配置文件struts.xml,找到需要调用的Action类。(6) ActionProxy创建一个ActionInvocation实例。(7) ActionInvocation实例使用命令模式回调Action中的execute()方法,Action调用业务逻辑类完成业务逻辑处理。在调用Action的前后,将调用该Action实际的相关拦截器(Interceptor)。(8) Action执行完毕,ActionInvocation根据struts.xml中的配置招待相应的返回结果(成为Resul
3、t)。2.Struts2和Struts1有什么区别?解析 Struts2和Struts1在名字上看是版本升级问题,实际上必不是这样。Struts2是从另外一个优秀的框架WebWork的基础上发展起来的,与Struts1本质上没有太多的联系。参考答案 Struts1最初是Apache Jakarta项目的一部分,后来作为一个开源的MVC框架存在。Struts1曾经被很多Web应用采用,作为构建MVC的基础构架使用。Struts1最大的特点是提供了JSP标记库以及页面导航,Struts2是从WebWork框架上发展起来的,与Struts1没有直接关系。WebWork是一个很优秀的MVC框架,然而,
4、由于是一个新的框架,在一段时间内并没有被广泛使用。后来,Struts和WebWork社区决定将二者合并,推出Struts2框架。Struts2比起Struts1,新增了很多优点,例如:Struts2的Action与Servlet API解耦,能够进行单元测试,Struts2的视图可以支持多种形式,如JSP、Velocity等。3.Struts2中有哪三层控制器?分别有什么作用?解析 对于MVC框架来说,控制其往往都是核心部分,Struts2的控制器更是如此,共分为三个层次。理解控制器是进一步掌握MVC框架的必要前提。参考答案 (1) 过滤器:过滤器是Struts2控制器的最前端控制器,请求对象
5、首先被过滤器过滤。(2) 拦截器:拦截器(Interceptor)是Struts2中第二个层次的控制器,能够在Action执行前后运行一些Action类需要的通用功能。(3) Action: Action 是 Struts2的第三个层次的控制器,需要程序员自行开发。Action是Struts2应用中使用数量最多的控制器, 调用业务逻辑,执行业务操作,根据执行结果返回结果视图,实现页面导航,被称为业务控制器。4. 如何设置一个包的默认拦截器引用?解析 拦截器在Struts2中是非常重要的部分,如果一个包中的所有Action总是需要使用某些拦截器或者拦截器栈,那么就可以为这个包定义默认的拦截器引用
6、、参考答案 为一个包指定默认拦截器引用,可以在struts.xml中进行如下配置: 其中default-interceptor-ref的name值可以是拦截器的名字,也可以是拦截器栈的名字。5.如何编写并配置自定义的拦截器?解析 API中定义了一系列的拦截器,可以直接配置使用。同时,Struts2也允许用户自定义拦截器,实现自定义的拦截功能。参考答案 自定义拦截器的步骤如下: (1) 创建类实现Interceptor接口。 (2) 覆盖Interceptor接口中的方法,重点实现intercept方法,定义拦截功能。 (3) 在标签中使用元素定义拦截器,为拦截器类制定一个名字。 (4) 在需要
7、使用该拦截器的Action中使用标签引用拦截器的名字即可使用。6.拦截器栈和拦截器有什么区别和联系?解析 拦截器栈和拦截器在使用上完全一样,是整体与部分的关系。参考答案 拦截器栈是若干个拦截器的集合,如果某些拦截器总是按照一定的顺序一起工作,那么就可以把这些拦截器组织成一个拦截器栈,通过引用拦截器栈,就可以使用到拦截器栈中的所有拦截器。7.Action接口有什么作用?解析 Struts2的API中有一个Action接口,表面上看应该是Action类实现该接口,实际并不是这样。Action类可以实现这个借口,也可以不实现这个借口。参考答案 Action接口中定义了五个常量和一个方法。五个常量都是
8、字符串类型,分别是ERROR、INPUT、LOGIN、NONE以及SUCCESS,方法的声明形式是public String execute().自定义的Action类可以实现这个接口,使用其中的常量作为execute方法的返回值,实现execute方法实现业务控制逻辑。8.Action类中进行业务控制的方法有什么编码规范?解析 Action类可以实现Action接口,也可以不实现,但是其中进行业务控制的方法必须遵守一定的编码规范,才能被Struts2框架自动调用。参考答案 Action类中进行业务控制的方法必须遵守一定的编码规范,即返回值为String,权限为public,没有形式参数。方法
9、的名字默认为execute,可以被自动调用,如果不是execute,则需要进行配置或指定才能使用。9.什么是动态方法调用(DMI)?解析 当Action类中的方法名不是execute时,有很多种方法可以调用,DMI就是其中的一种方法。参考答案 如果Action类中的方法不是execute,可以在JSP中调用Action时指定需要调用的方法名,这种方式称做DMI,即动态方法调用。在JSP中调用Action的语法为:action=“Action的name!方法名字”,如action=“Account!save”,指定调用名字是Account的Action的save方法。10.如果Struts2应用
10、中的一个表单,需要同时有两个提交按钮进行不同处理,如何解决?解析:实际应用中,很可能一个表单有两个提交按钮,例如某个表单对应“保存“,“放弃”两个按钮,每个按钮应该调用不同的方法进行处理。Struts2中的提交按钮提供了method属性,能非常方便地解决这个问题。 参考答案:可以使用提交按钮的method属性指定Action中的方法名字,就可以调用到相应的方法。例如:上述代码中的表单将提交到名字为Customer的Action上,使用method=”login”将调用Action中的login方法,使用method=”register”将调用Action中的register方法。11.如果一个
11、Action类中需要处理请求范围属性,使用什么方法实现可以与ServletAPI脱耦?解析:请求属性在web应用开发中经常被使用,在Struts2中,利用ActionContext类可以操作请求属性,同时Action与ServletAPI依然脱耦,可以进行单元测试。参考答案:如果要与ServletAPI脱耦,同时又要处理请求属性,那么可以使用Struts2API中的ActionContext类实现。该类中的普通方法可以向请求范围存属性,该类中的get方法可以从请求范围返回属性。12.ActionContext类中的哪个方法可以用来处理会话范围内的属性?解析:会话属性是Web应用开发中常用的属性
12、,Actioncontext类可以返回会话相关的Map对象,从而操作会话属性。参考答案:ActionContext中的getSession方法可以返回一个与会话对象相关的Map对象,通过使用该Map对象的put方法,可以往会话中存入属性,通过使用Map对象的get方法可以从会话中返回属性。13.ActionContext类中的哪个方法可以用来处理上下文范围内的属性?解析:上下文属性是Web应用中可能会用到的属性,ActionContext类可以返回上下文相关的Map对象,从而操作上下文属性。参考答案 ActionContext中的getApplication方法可以返回一个与上下文对象相关的M
13、ap对象,通过使用该Map对象的put方法可以往上下文中保存属性,通过使用Map对象的get方法可以从上下文中返回属性。14 .如果一个Action类中需要获得 Servlet API 中的对象进行处理,如何解决?解析 如果一个Action类中只处理请求、会话。上下文中的属性,那么可以通过ActionContext类实现,与Servlet API脱耦。然而,有时候Action类中可能必须直接出来Servlet API中的对象,这种时候就不能够脱耦,无法进行单元测试。 参考答案 如果Action 类中需要获得 Servlet API 中的对象,那么可以使用 ServletActionContex
14、t 类实现。该类中定义可以下四个方法:(1) public static PageContext getPageContext(): 获得PageContext对象。(2) public static HttpServletRequest getRequest(): 获得HttpServletRequest对象。(3) public static HttpServletResponse getResponse(): 获得HttpServletResponse对象。(4) public static Servloracleontext getServloracleontext(): 获得Serv
15、loracleontext对象(5)15. Struts2框架有哪两种封装请求参数的方式?解析 Web 应用中总是不可避免的需要处理请求参数,而队请求参数的封装是每个MVC框架都试图解决的问题,Struts2框架中有两种方式可以封装请求参数。参考答案 Struts2 中封装请求参数的方式有两种,即Field_Driven 和Model_Driven。其中Field_Driven是域驱动,在Action类中定义域请求参数对应的属性,并为之提供getters和setters,Struts2框架将自动把请求参数封装到这些属性中。Model-Driven 是模型驱动,Action 类需要实现Model
16、Driven 接口,声明一个与表单对应的JavaBean属性,覆盖其中的getModel方法,回JavaBean实力,Struts2框架将自动把请求参数封装到 JavaBean 实例中。16.什么是OGNL?有什么作用?解析:OGNL是功能强大的表达式语言,是Struts2中使用的表达式语言。参考答案 OGNL是Object Graphic Navigation Language 的缩写,即对象图导航语言,是一种功能强大的EL.OGNL往往结合Struts2的标记使用,就像EL总结合JSTL使用一样。17. OGNL中的#有哪三种作用?解析: #在OGNL中经常使用,开发员应该熟练掌握。参考答
17、案:(1) 访问非根对象: OGNL上下文的根对象是值栈,可以直接访问:当访问其他非根对象时,需要使用#,如#session.cust,可以获得绘画范围的cust属性;(2) 用于过滤集合:如list.?#this.age20,取出年龄大于20的集合元素;(3) 用来构造Map:如#“cust()”:cust(),“cust1”:cust1,可以构建一个Map 对象,包含对键值的记录。18. OGNL中的%有什么作用?解析:当标记中某一个属性值不是具体的值,而是需要通过另外一个OGNL表达式进行计算获得,那么就可以使用%号。参考答案:%号用来计算OGNL表达式的值。19. OGNL中的$可以在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- S2SH 试题
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内