最新S2SH面试题.docx

上传人:1595****071 文档编号:47520984 上传时间:2022-10-02 格式:DOCX 页数:54 大小:131.64KB
返回 下载 相关 举报
最新S2SH面试题.docx_第1页
第1页 / 共54页
最新S2SH面试题.docx_第2页
第2页 / 共54页
点击查看更多>>
资源描述

《最新S2SH面试题.docx》由会员分享,可在线阅读,更多相关《最新S2SH面试题.docx(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateS2SH面试题S2SH面试题Struts2部分1. 说明Struts2框架的工作原理。解析 掌握一个框架,首先必须了解这个框架的工作原理,企业非常关注应聘者对常用框架的工作原理的理解程度。参考答案(1) 客户端向服务器端提交请求,容器初始化HttpServletRequest请求对象。(2) 请求对象被一系列的Servlet过滤器过滤,Struts2中的过滤器有三种。

2、(3) FilterDispatcher过滤器调用ActionMapper,决定该请求是否需要调用某个Action。(4) 如果请求需要调用某个Action,ActionMapper将通知FilterDispatcher过滤器把请求的对象交给ActionProxy来处理。(5) ActionProxy通过Configuration Manager 解析框架的配置文件struts.xml,找到需要调用的Action类。(6) ActionProxy创建一个ActionInvocation实例。(7) ActionInvocation实例使用命令模式回调Action中的execute()方法,Ac

3、tion调用业务逻辑类完成业务逻辑处理。在调用Action的前后,将调用该Action实际的相关拦截器(Interceptor)。(8) Action执行完毕,ActionInvocation根据struts.xml中的配置招待相应的返回结果(成为Result)。2.Struts2和Struts1有什么区别?解析 Struts2和Struts1在名字上看是版本升级问题,实际上必不是这样。Struts2是从另外一个优秀的框架WebWork的基础上发展起来的,与Struts1本质上没有太多的联系。参考答案 Struts1最初是Apache Jakarta项目的一部分,后来作为一个开源的MVC框架存

4、在。Struts1曾经被很多Web应用采用,作为构建MVC的基础构架使用。Struts1最大的特点是提供了JSP标记库以及页面导航,Struts2是从WebWork框架上发展起来的,与Struts1没有直接关系。WebWork是一个很优秀的MVC框架,然而,由于是一个新的框架,在一段时间内并没有被广泛使用。后来,Struts和WebWork社区决定将二者合并,推出Struts2框架。Struts2比起Struts1,新增了很多优点,例如:Struts2的Action与Servlet API解耦,能够进行单元测试,Struts2的视图可以支持多种形式,如JSP、Velocity等。3.Strut

5、s2中有哪三层控制器?分别有什么作用?解析 对于MVC框架来说,控制其往往都是核心部分,Struts2的控制器更是如此,共分为三个层次。理解控制器是进一步掌握MVC框架的必要前提。参考答案 (1) 过滤器:过滤器是Struts2控制器的最前端控制器,请求对象首先被过滤器过滤。(2) 拦截器:拦截器(Interceptor)是Struts2中第二个层次的控制器,能够在Action执行前后运行一些Action类需要的通用功能。(3) Action: Action 是 Struts2的第三个层次的控制器,需要程序员自行开发。Action是Struts2应用中使用数量最多的控制器, 调用业务逻辑,执行

6、业务操作,根据执行结果返回结果视图,实现页面导航,被称为业务控制器。4. 如何设置一个包的默认拦截器引用?解析 拦截器在Struts2中是非常重要的部分,如果一个包中的所有Action总是需要使用某些拦截器或者拦截器栈,那么就可以为这个包定义默认的拦截器引用、参考答案 为一个包指定默认拦截器引用,可以在struts.xml中进行如下配置: 其中default-interceptor-ref的name值可以是拦截器的名字,也可以是拦截器栈的名字。5.如何编写并配置自定义的拦截器?解析 API中定义了一系列的拦截器,可以直接配置使用。同时,Struts2也允许用户自定义拦截器,实现自定义的拦截功能

7、。参考答案 自定义拦截器的步骤如下: (1) 创建类实现Interceptor接口。 (2) 覆盖Interceptor接口中的方法,重点实现intercept方法,定义拦截功能。 (3) 在标签中使用元素定义拦截器,为拦截器类制定一个名字。 (4) 在需要使用该拦截器的Action中使用标签引用拦截器的名字即可使用。6.拦截器栈和拦截器有什么区别和联系?解析 拦截器栈和拦截器在使用上完全一样,是整体与部分的关系。参考答案 拦截器栈是若干个拦截器的集合,如果某些拦截器总是按照一定的顺序一起工作,那么就可以把这些拦截器组织成一个拦截器栈,通过引用拦截器栈,就可以使用到拦截器栈中的所有拦截器。7.

8、Action接口有什么作用?解析 Struts2的API中有一个Action接口,表面上看应该是Action类实现该接口,实际并不是这样。Action类可以实现这个借口,也可以不实现这个借口。参考答案 Action接口中定义了五个常量和一个方法。五个常量都是字符串类型,分别是ERROR、INPUT、LOGIN、NONE以及SUCCESS,方法的声明形式是public String execute().自定义的Action类可以实现这个接口,使用其中的常量作为execute方法的返回值,实现execute方法实现业务控制逻辑。8.Action类中进行业务控制的方法有什么编码规范?解析 Actio

9、n类可以实现Action接口,也可以不实现,但是其中进行业务控制的方法必须遵守一定的编码规范,才能被Struts2框架自动调用。参考答案 Action类中进行业务控制的方法必须遵守一定的编码规范,即返回值为String,权限为public,没有形式参数。方法的名字默认为execute,可以被自动调用,如果不是execute,则需要进行配置或指定才能使用。9.什么是动态方法调用(DMI)?解析 当Action类中的方法名不是execute时,有很多种方法可以调用,DMI就是其中的一种方法。参考答案 如果Action类中的方法不是execute,可以在JSP中调用Action时指定需要调用的方法名

10、,这种方式称做DMI,即动态方法调用。在JSP中调用Action的语法为:action=“Action的name!方法名字”,如action=“Account!save”,指定调用名字是Account的Action的save方法。10.如果Struts2应用中的一个表单,需要同时有两个提交按钮进行不同处理,如何解决?解析:实际应用中,很可能一个表单有两个提交按钮,例如某个表单对应“保存“,“放弃”两个按钮,每个按钮应该调用不同的方法进行处理。Struts2中的提交按钮提供了method属性,能非常方便地解决这个问题。 参考答案:可以使用提交按钮的method属性指定Action中的方法名字,就

11、可以调用到相应的方法。例如:上述代码中的表单将提交到名字为Customer的Action上,使用method=”login”将调用Action中的login方法,使用method=”register”将调用Action中的register方法。11.如果一个Action类中需要处理请求范围属性,使用什么方法实现可以与ServletAPI脱耦?解析:请求属性在web应用开发中经常被使用,在Struts2中,利用ActionContext类可以操作请求属性,同时Action与ServletAPI依然脱耦,可以进行单元测试。参考答案:如果要与ServletAPI脱耦,同时又要处理请求属性,那么可以使

12、用Struts2API中的ActionContext类实现。该类中的普通方法可以向请求范围存属性,该类中的get方法可以从请求范围返回属性。12.ActionContext类中的哪个方法可以用来处理会话范围内的属性?解析:会话属性是Web应用开发中常用的属性,Actioncontext类可以返回会话相关的Map对象,从而操作会话属性。参考答案:ActionContext中的getSession方法可以返回一个与会话对象相关的Map对象,通过使用该Map对象的put方法,可以往会话中存入属性,通过使用Map对象的get方法可以从会话中返回属性。13.ActionContext类中的哪个方法可以用

13、来处理上下文范围内的属性?解析:上下文属性是Web应用中可能会用到的属性,ActionContext类可以返回上下文相关的Map对象,从而操作上下文属性。参考答案 ActionContext中的getApplication方法可以返回一个与上下文对象相关的Map对象,通过使用该Map对象的put方法可以往上下文中保存属性,通过使用Map对象的get方法可以从上下文中返回属性。14 .如果一个Action类中需要获得 Servlet API 中的对象进行处理,如何解决?解析 如果一个Action类中只处理请求、会话。上下文中的属性,那么可以通过ActionContext类实现,与Servlet

14、API脱耦。然而,有时候Action类中可能必须直接出来Servlet API中的对象,这种时候就不能够脱耦,无法进行单元测试。 参考答案 如果Action 类中需要获得 Servlet API 中的对象,那么可以使用 ServletActionContext 类实现。该类中定义可以下四个方法:(1) public static PageContext getPageContext(): 获得PageContext对象。(2) public static HttpServletRequest getRequest(): 获得HttpServletRequest对象。(3) public sta

15、tic HttpServletResponse getResponse(): 获得HttpServletResponse对象。(4) public static Servloracleontext getServloracleontext(): 获得Servloracleontext对象(5)15. Struts2框架有哪两种封装请求参数的方式?解析 Web 应用中总是不可避免的需要处理请求参数,而队请求参数的封装是每个MVC框架都试图解决的问题,Struts2框架中有两种方式可以封装请求参数。参考答案 Struts2 中封装请求参数的方式有两种,即Field_Driven 和Model_Dr

16、iven。其中Field_Driven是域驱动,在Action类中定义域请求参数对应的属性,并为之提供getters和setters,Struts2框架将自动把请求参数封装到这些属性中。Model-Driven 是模型驱动,Action 类需要实现ModelDriven 接口,声明一个与表单对应的JavaBean属性,覆盖其中的getModel方法,回JavaBean实力,Struts2框架将自动把请求参数封装到 JavaBean 实例中。16.什么是OGNL?有什么作用?解析:OGNL是功能强大的表达式语言,是Struts2中使用的表达式语言。参考答案 OGNL是Object Graphic

17、 Navigation Language 的缩写,即对象图导航语言,是一种功能强大的EL.OGNL往往结合Struts2的标记使用,就像EL总结合JSTL使用一样。17. OGNL中的#有哪三种作用?解析: #在OGNL中经常使用,开发员应该熟练掌握。参考答案:(1) 访问非根对象: OGNL上下文的根对象是值栈,可以直接访问:当访问其他非根对象时,需要使用#,如#session.cust,可以获得绘画范围的cust属性;(2) 用于过滤集合:如list.?#this.age20,取出年龄大于20的集合元素;(3) 用来构造Map:如#“cust()”:cust(),“cust1”:cust1

18、,可以构建一个Map 对象,包含对键值的记录。18. OGNL中的%有什么作用?解析:当标记中某一个属性值不是具体的值,而是需要通过另外一个OGNL表达式进行计算获得,那么就可以使用%号。参考答案:%号用来计算OGNL表达式的值。19. OGNL中的$可以在那些场合使用?解析:$号在OGNL两个场合可以使用,不管在哪种场合,都是引用OGNL表达式。参考答案:(1) 国际化资源文件中使用:在国际花资源文件中,使用$引用OGNL表达式。(2) Struts2的配置文件中使用:使用$引用OGNL表达式。20. struts.properties文件有什么作用?解析: struts.propertie

19、s文件其实是可以不存在的,其中的配置完全可以在struts.xml中进行配置。然而,为了方便管理以及可读性更高,往往还是会单独配置struts.properties.参考答案: struts.properties 文件可以用来定义Struts2框架的属性,能够修改default.properties文件中的默认属性值。21. 如果一个Struts2应用中有多个模块,每个模块都有一个配置文件,如何处理?解析: 在实际应用中,往往每个模块至少存在一个配置文件,最终会和平岛应用的struts.xml中。参考答案:实际开发过程中,往往是多模块同时开发。可以对每个模块定义一个配置文件,最终在struts

20、.xml的根元素下使用包含即可,如下所示:22. ActionSupport类有什么所用?解析: 对输入进行校验是Web应用中必须实现的功能,ActionSupport类就是Struts2框架进行输入校验时至关重要的一个类。由于表单的域都封装到了Action中,所以输入校验应该在Action中进行。凡是需要进行输入校验的Action类,都必须继承ActionSupport类。参考答案:ActionSupport类定义了一系列与输入校验有关的方法,如果Action需要对输入进行校验,那么Action必须继承ActionSupport类。23. Struts2中有哪三种校验信息?分别有什么含义?解

21、析: 对输入进行校验是每个Web应用都必须实现的功能,进行输入校验后,腰包校验结果信息显示到客户端。Struts2框架中定义了不同类型的校验信息,并定义了不同的方法和标记进行处理。参考答案: Struts2中有以下三种校验信息:(1) Action错误:指的是Action级别的错误,不和某个域的输入直接相关。(2) Field错误:指的是域级别的错误,和某个输入域有关的校验错误。(3) Action消息:不是错误信息,而是一些友好的提示信息。24. 如果校验失败,Struts2将导航到什么视图上?解析 如果校验失败,Struts2框架将直接导航到当前Action中名字是input的结果视图上,

22、这点与Struts1类似。参考答案:如果校验失败,Struts2框架将导航到当前的Action中名字是input的结果视图上,如果Action中没有名字为input的结果视图,则查找名字为input的全局结果,如果依然没有,则发生错误。25. 如何使用校验器校验Struts2应用的输入信息?解析:输入校验对于Web应用来说非常重要。Struts2框架不仅可以使用编码方式进行输入校验,还能够使用校验器进行输入校验,开发员应该熟悉常用校验器的作用。参考答案:(1) Action类继承ActionSupport类,但是不需要覆盖validate方法(2) 在Action类所在包中定义XXX-vali

23、dation.xml文件,其中XXX是Action的类名。(3) 在XML文件中配置校验器的信息,一般需要制定需要校验的域名字、校验器的名字、校验器中的属性值等,如下所示:true其中custname是要进行校验的域名字,type=”requiredstring”指定的是校验器的名字,使用指定校验器的参数名和对应的值,指定校验错误时的显示信息。26.Strust2中的标签有什么作用?请使用代码说明。解析Struts2定义了功能强大的标记库,标记常常结合OGNL语言使用,开发员应该熟悉常用的标记的使用。参考答案 用来输出值栈中的值,代码如下:上述代码将输出会话范围内名字为customer属性的c

24、ustname值。27.如何在Strust.xml中配置异常处理页面?解析如果某些异常需要进行统一处理,而不是在代码中分别处理,那么可以在Strust.xml中进行异常配置。参考答案在Strust.xml中可以用配置异常处理页面,如下所示:/index.jsp/register.jsp/ register.jsp通过上面的配置,当发生了RegisterException却没有处理时,将自动跳动到结果视图进行处理,即register.jsp页面。28.全局异常映射与局部异常映射有什么区别?解析: Struts2中的结果试图以及异常映射都分全局和局部两种。全局指的是整个包中有效,局部指的是当前的A

25、ction有效。Struts2遵守就近原则,就是说只有当局部范围没有符合需要的配置时,才到全局范围查找。参考答案: 全局异常映射在中指定,而局部异常映射在中指定。Struts2框架总是先在局部范围查找有没有符合需要的配置,如果没有找到才到全局范围查找。Hibernate部分1.Hibernate框架主要解决什么问题?解析: 目前框架有特别多种,每种框架能够解决的问题都不相同,对于开发人员来说,首先需要清楚每种框架能够解决什么问题,才能够正确使用这个框架。参考答案: Hibernate框架是一个ORM框架,即对象关系映射框架。能够将Java类与关系数据表进行映射,同时提供面型对象的数据查询机制,

26、能够最大程度缩短程序员在SQL和JDBC上的编程时间,从大量的数据持久层编程中作中解脱出来。2.Hibernate属性文件主要包括哪些内容?解析:每个框架都离不开配置文件,Hibernate也是一样。虽然在实际工作中,很多配置都是由IDE生成,但是熟悉配置文件的内容非常必要。参考答案:数据库访问的相关信息需要在Hibernate属性文件中配置,如数据库驱动类、连接串、用户名、密码、连接池初始化大小等。也可以使用名字为hibernate.cfg.xml的xml文件配置属性。3.Hibernate应用中的映射文件(hbm.xml)主要包括哪些内容?解析:hbm.xml文件是Hibernate应用中

27、非常重要的部分,描述了对象和关系表的映射关系。参考答案:映射文件中所有元素都存在于根元素hibernate-mapping下,其中使用最多的元素是class。class元素下最常用的子元素有id、property、component、subclass、joined-subclass、union-subclass等。4.Hibernate中持久化对象有哪三种状态?每种状态有什么特征?解析:持久化类是Hibernate框架中用来映射数据库表的类,持久化对象与表中的记录对应。在不同的状态下,持久化对象有不同的特征。参考答案:1) 顺势状态(transient state):当通过new操作符实例化了

28、一个对象,而这个对象没有被Session对象操作,也就是该对象没有与一个Session对相关联时,那么这个对象就称为瞬时状态对象。瞬时状态的对象不能被持久化到数据库中,也不会被赋予持久化标识(Identifier)。2) 持久状态(persistent state):如果一个对象与某一个Session对相关联,例如被Session对象刚加载的、刚保存的、刚更新的,那么该对象就称为持久状态对象。持久状态的对象与数据库中一条记录对应,并拥有持久化标识(Identifier)。当持久状态对象有改变时,当前事务提交后,Hibernate会自动检测到对象的变化,并持久化到数据库中。3) 脱管状态(det

29、ached state):当与持久状态对象关联的Session关闭后,该对象就变成脱管状态(detached state)。脱管状态的对象引用依然有效,可以继续使用。当脱管状态的对象再次与某个Session关联后,脱管状态对象将转变为持久状态对象,脱管期间进行的修改将被持久化到数据库中。5.HQL语言与SQL语言有什么区别?解析:HQL语言从形式上虽然与SQL语言有些类似,甚至许多关键字也完全相同,但是本质上却有很多区别。HQL语言是针对类和属性进行操作,而SQL语言是针对边和字段进行操作。开发员要理解这些区别,以避免混淆。参考答案:主要有以下三点区别:1) HQL语言中出现的是类名、属性名;

30、SQL语言中出现的是表名、字段名。2) HQL语言严格区分大小写;SQL语言不区分大小写。3) HQL语言理解继承、多态等面向对象的概念。6. 一对一/多对一关联主要有哪两种实现方式? 解析:Hibernate中能够对多表的关联关系进行映射,这是Hibernate的亮点,也是难点,尤其当表的关系比较复杂时,要做到正确有效地映射需要对Hibernate有深入理解和实践才可以。开发员应该在映射关联表方面多投入精力。参考答案:一对一/多对一关联主要有以下两种实现方式:(1) 基于主外键的一对一/多对一关联:这种关联指的是从表通过外键参考主表的主键,从而实现关联。(2) 基于连接表的一对一/多对一关联

31、:这种关联指的是两个表之间不直接关联,而是把各自的主键存放到关联表中,维护二者的关联关系。7、什么是Hibernate中的TPS?解析 Hibernate中不仅能够实现关联关系的映射,还能够实现继承关系的映射,TPS是实现继承关系映射的一种策略。参考答案 TPS(Table Per Subclass ) 是Hibernate中一种实现继承映射的策略,即每个子类对应一张表,TPS使用元素配置子类映射关系。8 。什么是Hibernate中的TPH?解析 Hibernate中不仅能够实现关联关系的映射,还能够实现继承关系的映射。TPH是实现继承关系映射的一种策略。参考答案 TPH(Table Per

32、 Class Hierarchy)是Hibernate中一种实现继承映射的策略,即每个子类对应的是表的一个分层结构。TPH策略中,使用来配置子类指定子类的区分字段值,同时配置子类扩展的属性。9.什么是延迟加载?如何设置是否使用延迟加载?解析:延迟加载是Hibernate保证性能的一种策略,建议默认都使用延迟加载。参考答案:延迟加载的意思是。当查询某个实例时,默认情况下不查询其关联的实例。使用属性lazy可以设置是否使用延迟加载,lazy=“true”表示使用延迟加载,lazy=“false”表示不使用延迟加载。Spring部分1.什么是IOC?IOC有什么作用?解析:IOC是Spring框架的

33、基础模块,其他功能都是构建于IOC之上的,理解IOC是掌握Spring框架的必备基础。参考答案:IOC即控制反转,也被称为DI,即依赖注入。IOC的意思是,将对象的创建以及装配过程交给容器实现,而不再使用代码进行。使用IOC创建并装配对象,能够使得应用可以不管将来具体实现,完全在一个抽象层次进行描述和技术架构,使得应用的可扩展性提高。2.什么是AOP?AOP有什么作用?解析:AOP并不是Spring框架提出的概念,Spring框架只是对AOP进行了支持。参考答案:AOP(Aspect Oriented Program)编程能够将通用的功能与业务模块分离,是OOP编程的延续和补充。在企业应用中,

34、很多模块可能需要实现相同的功能,如多个模块都需要日志功能、权限校验功能、事务管理功能等,这些相同的功能就被称为“切面”。使用AOP编程,可以单独对“切面”编程,然后将这些切面动态织入到功能模块中。3.Spring框架整合JDBC时,主要使用哪个类简化JDBC的操作?解析:在实际应用中,常常使用Spring框架整合其他技术或框架。Spring框架对JDBC提拱了整合方案,能够大大简化JDBC编程。参考答案: 使用JdbcTemplate类简化JDBC操作。4.Spring框架整合Hibernate时,主要使用哪个类简化Hibernate操作?解析 在实际应用中,常常使用Spring框架整合其他技

35、术或框架。Spring框架对Hibernate框架提供了整合方案,能够大大简化Hibernate编程。参考答案: 使用HibernateTemlate类简化Hibernate操作。5.Spring框架整合Struts2框架时主要需要哪些步骤?解析 :在实际应用中,常常使用Spring框架整合其他技术或框架,Spring框架对Struts2框架提供了整合方案,能够将Struct2的Action使用IOC进行管理,从而能够使用Spring框架的其他服务。参考答案 (1) web.xml中增加listener以及context_param的配置;(2) struts.properties中指定struts.objectFactory的常量值为spring;(3) struts.xml文件中的Action的class属性可以进行简化;(4) applicationContext.xml中将Action进行IoC装配;(5) 完善Action类,声明Action需要关联的属性并提供setter方法。-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁