自己总结的一些三大框架面试题.docx

自己总结的一些三大框架面试题.Struts谈谈你对Struts的理解。答:1.struts是一个按MVC

模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,

或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这

个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)

将各个请求分别分配给不同的action去处理。一个扩展知识点:struts的配置文件可以有

多个,可以按模块配置各自的配置文件,这样可以防止配置文件的过度膨胀;

2.ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象

(就是一个java类,这个类中的每个属性对应一个请求参数),封装成一个什么样的

formbean对象呢?看配置文件。3.要说明的是,ActionServlet把formbean对象传递给

action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通

过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,

这个错误页面由input属性指定,(看配置文件)作者为什么将这里命名为input属性,

而不是error属性,我们后面结合实际的运行效果进行分析。4.action执行完后要返回显示

的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通

过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-

config.xml配置文件为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp

页面名称的解耦。||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||自己的话简介Struts2

执行流程Struts2的工作流程与WebWork框架基本相同,所以说Struts2是WebWork的

升级版本。基本简要流程如下:1、客户端浏览器发出HTTP请求。2、根据web.xml配置,

该请求被FilterDispatcher接收。3、根据struts.xml配置,找到需要调用的Action类和方

法,并通过IoC方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑,

这一步包含表单验证。5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果

result,并跳转到相应页面。6、返回HTTP响应到客户端浏览器。

******************************************************************************

**********************Struts2的工作机制一个请求在Struts2框架中的处理大概分为以

下几个步骤:1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;2、这个请

求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可

选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如

:SiteMeshPlugin);3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper

来决定这个请求是否需要调用某个Action;4、如果ActionMapper决定需要调用某个

Action,FilterDispatcher把请求的处理交给ActionProxy;5、ActionProxy通过

ConfigurationManager询问框架的配置文件,找到需要调用的Action类;6、ActionProxy

创建一个ActionInvocation的实例。7、ActionInvocation实例使用命名模式来调用,在调

用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。8、一旦Action执行完

毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是

(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的

模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到

ActionMapper。

******************************************************************************

**********************Struts2的体系结构Struts2框架本身大致可以分为3个部分:核

心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制

器FilterDispatcher是Struts2框架的基础,包含了框架内部的控制流程和处理机制。业务

控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑

组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts2

的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是

Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务

逻辑控制器与ServletAPI分离。Struts2框架的大概处理流程如下:1、加载类

(FilterDispatcher)2、读取配置(struts配置文件中的Action)3、派发请求(客户端发送

请求)4、调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action)

5、启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)6、处理业务

(回调Action的execute()方法)7、返回响应(通过execute方法将信息返回到

FilterDispatcher)8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:

SUCCESS、ERROR,将跳转到哪个jsp页面)9、响应用户(jsp--->客户浏览器端显示)

10、struts2 标签库(相比 struts1 的标签库,struts2 是大大加强了,对数据的操作功能很强

大)***************************************************************************

*************************在Struts2 中怎样把请求分发给方法去处理?答:在

struts.xml 中就只需要配置一个action,在一个 Action类中分发Action 请求调用不同的方

法。 *********************************

*******************************************************************介绍一下

Struts 的ActionServlet 类ActionServlet 继承自javax.servlet.http.HttpServlet 类,其在

Strutsframework 中扮演的角色是中心控制器。它提供一个中心位置来处理全部的终端请求。

控制器 ActionServlet 主要负责将 HTTP 的客户请求信息组装后,根据配置文件的指定描述,

转发到适当的处理器。按照Servelt 的标准,所有得Servlet 必须在 web 配置文件

(web.xml)声明。同样,ActoinServlet 必须在WebApplication配置文件(web.xml)中描

述,有关配置信息如下。action

class>org.apache.struts.action.ActionServlet全部的请求 URI 以*.do

的模式存在并映射到这个servlet,其配置如下:

name>action*.do一个该模式的

请求URI 符合如下格式: 当用户向

服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获

得了请求,其就会将请求信息传交给一些辅助类(help classes)处理。这些辅助类知道如

何去处理与请求信息所对应的业务操作。在Struts 中,这个辅助类就是

org.apache.struts.action.Action。通常开发者需要自己继承 Aciton类,从而实现自己的

Action实例。Struts2 中常见的拦截器有哪些? 答:上传,重复提交,数字转换,表单认

证,国际化,等等

******************************************************************************

**********************请简述Struts2 中自定义拦截器的步骤? 答:1.首先要实现

Interceptor(拦截器)接口 2.在配置文件中定义自己的拦截器。 3.最后还要把系统提供的

默认拦截器加上,否则系统默认拦截器不起作用

******************************************************************************

**********************怎样实现Struts2 自定义转换器? 答:实现 TypeCoverter 接口,

或者继承DefaultTypeConverter 实现类(该类实现了 TypeCoverter 接口),通过继承该实

现类来实现自己的类型转换器。重写convertValue 方法即可。说说struts1 与struts2 的区

别。1.都是MVC 的WEB框架,2struts1 的老牌框架,应用很广泛,有很好的群众基础,使

用它开发风险很小,成本更低!struts2 虽然基于这个框架,但是应用群众并多,相对不成

熟,未知的风险和变化很多,开发人员相对不好招,使用它开发项目的风险系数更大,用

人成本更高!3.struts2 毕竟是站在前辈的基础设计出来,它会改善和完善struts1 中的一些

缺陷,struts1 中一些悬而未决问题在struts2 得到了解决。4.struts1 的前端控制器是一个

Servlet,名称为 ActionServlet

,struts2 的前端控制器是一个 filter,在struts2.0 中叫FilterDispatcher,在struts2.1 中叫

StrutsPrepareAndExecuteFilter。5.struts1 的action需要继承 Action类,struts2 的action可以

不继承任何类;struts1 对同一个路径的所有请求共享一个 Action实例,struts2 对同一个路

径的每个请求分别使用一个独立Action实例对象,所有对于struts2 的Action 不用考虑线

程安全问题。6.在struts1 中使用 formbean 封装请求参数,在struts2 中直接使用action的

属性来封装请求参数。7.struts1 中的多个业务方法放在一个 Action中时(即继承

DispatchAction 时),要么都校验,要么都不校验;对于struts2,可以指定只对某个方法

进行校验,当一个 Action 继承了 ActionSupport 且在这个类中只编写了 validateXxx()方法,

那么则只对Xxx()方法进行校验。(一个请求来了的执行流程进行分析,struts2 是自动支

持分模块开发,并可以不同模块设置不同的url 前缀,这是通过package 的 namespace 来

实现的;struts2 是支持多种类型的视图;struts2 的视图地址可以是动态的,即视图的名称

是支持变量方式的,举例,论坛发帖失败后回来还要传递boardid。视图内容显示方面:

它的标签用ognl,要el 强大很多,在国际化方面支持分模块管理,两个模块用到同样的

key,对应不同的消息;)与Struts1 不同,Struts2 对用户的每一次请求都会创建一个

Action,所以Struts2 中的 Action是线程安全的。给我印象最深刻的是:struts 配置文件中

的redirect 视图的 url 不能接受参数,而struts2 配置文件中的redirect 视图可以接受参数。

Struts2 怎样整合spring?答:1.使用向导添加struts2 的组件; 2.使用向导添加spring2.5 的

组件; struts.properties --指定有Struts2 的action由 spring 容器管理web.xml --指定spring

容器配置文件 globalMessages.properties --非必须有 struts.xml --class 属性配置改成spring

容器内bean的 ID applicationContext.xml --action的作用域需要是原型

******************************************************************************

**********************Spring**************************************************

**************************************************spring 是什么?spring 是一个集

成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP

(面向切面编程)

******************************************************************************

**********************你对Spring的理解。1.Spring 实现了工厂模式的

工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是

一个接口),在程序中通常BeanFactory的子类 ApplicationContext。Spring相当于一个大

的工厂类,在其配置文件中通过元素配置用于创建实例对象的类名和实例对象的

属性。2.Spring提供了对IOC(控制反转)良好支持,IOC 是一种编程思想,是一种架构

艺术,利用这种思想可以很好地实现模块之间的解耦。IOC 也称为DI(Depency

Injection),什么叫依赖注入呢?譬如,Class Programmer{Computercomputer =

null;publicvoid code(){//Computercomputer = new IBMComputer();//Computercomputer =

beanfacotry.getComputer();computer.write();}publicvoid setComputer(Computer

computer){thisputer= computer;}}另外两种方式都由依赖,第一个直接依赖于目标类,

第二个把依赖转移到工厂上,第三个彻底与目标和工厂解耦了。在spring的配置文件中配

置片段如下:

class=”cn.itcast.interview.Computer”>

class=”cn.itcast.interview.Programmer”>

ref=”computer”>

3. Spring 提供了对AOP 技术的良好封装, AOP 称为面

向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统

功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。实

现AOP 功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目

标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接

口,二是作为目标的子类在,JDK 中采用Proxy类产生动态代理的方式为某个接口生成实

现类,如果要为某个类生成子类,则可以用CGLI B。在生成的代理类的方法中加入系统

功能和调用目标类的相应方法,系统功能的代理以Advice 对象进行提供,显然要创建出

代理对象,至少需要目标类和Advice 类。spring 提供了这种支持,只需要在spring 配置文

件中配置这两个元素即可实现代理和aop 功能Spring流程请求的分发请求首先到达

DispatcherServlet,应用服务器会根据Web 应用中 web.xml 文件定义的 url 映射将相应的请

求分发到DispatcherServlet 中请求的处理 DispatcherServlet 会查找相应的HandlerMapping

接口的实现类,调用其中的方法:HandlerExecutionChaingetHandler(HttpServletRequest

request) throws Exception,该方法会返回一个 HandlerExecutionChain。返回的

HandlerExecutionChain 中包含了零个或者是多个Interceptor 和一个处理请求的 Handler。

DispatcherServlet 会调用Interceptor 中的preHandle() 方法。然后处理Handler,这个

Handler 相当于Struts 中 Action,在SpringMVC 中

默认的实现是Controller 接口,是具体处理请求的代码所驻留的地方。事实上

HandlerExecutionChain 中的 getHandler()返回的是一个Object 类型。DispatcherServlet 不会

直接调用getHandler()返回对象中的方法,DispatcherServlet 会查找相应的

HandlerAdapter,然后具体通过 HandlerAdapter 来调用 getHandler()返回的 handler 对象中

的方法。就是说我们可以实现自己的HandlerAdapter 然后通过 IoC 注入到

DispatcherServlet 中,从而可以实现一套自定义的控制器。随后 DispatcherServlet 会调用

Interceptor 中的postHandle()方法。Spring 容器基本的接口是什么? 答:beanfactory(容

器),applicationContext(应用上下文)什么是Spring的 AOP,它的功能是什么? 答:AOP

是面向方面,相当于拦截器,可以在需要的地方插入逻辑,所谓的面向方面就是把相同的

功能抽象出来,

******************************************************************************

**********************AOP 中的术语1.通知(Advice):通知定义了切面是什么以及何时

使用。描述了切面要完成的工作和何时需要执行这个工作。2.连接点(Joinpoint):程序能够

应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。

3.切入点(Pointcut)通知定义了切面要发生的“故事”和时间,那么切入点就定义了“故事”发

生的地点,例如某个类或方法的名称,Spring中允许我们方便的用正则表达式来指定4.切

面(Aspect)通知和切入点共同组成了切面:时间、地点和要发生的“故事”5.引入

(Introduction)引入允许我们向现有的类添加新的方法和属性(Spring提供了一个方法注入的

功能)6.目标(Target)即被通知的对象,如果没有AOP,那么它的逻辑将要交叉别的事务逻

辑,有了AOP 之后它可以只关注自己要做的事(AOP 让他做爱做的事)7.代理(proxy)应

用通知的对象,详细内容参见设计模式里面的代理模式8.织入(Weaving)把切面应用到目

标对象来创建新的代理对象的过程,织入一般发生在如下几个时机:(1)编译时:当一个类

文件被编译时进行织入,这需要特殊的编译器才可以做的到,例如AspectJ 的织入编译器

(2)类加载时:使用特殊的ClassLoader 在目标类被加载到程序之前增强类的字节代码(3)运

行时:切面在运行的某个时刻被织入,SpringAOP 就是以这种方式织入切面的,原理应该

是使用了JDK 的动态代理技术

******************************************************************************

**********************请阐述Spring的IOC,有几种类型。 答:有setter 注入(即类中

设置一个全局属性,并对属性有setter 方法,以供容器注入),接口注入和 构造器注入

Spring 的依赖注入

是什么意思? 给一个 Bean 的 message 属性, 字符串类型, 注入值为 "Hello" 的 XML 配置文

件该怎么写?依赖注入是Spring IOC 的主要作用,依赖就是指属性,意思就是说将属性利

用Spring注入到程序中,而非 new。

amp;$lt;/property>Spring 管理事务

有哪几种方式? ? 答: 有两种方式:基于XML配置文件的方式;另一个是在业务方法上

进行@Transactional 注解,将事务规则应用到业务逻辑中。

******************************************************************************

**********************Spring的作用域有哪些? 答:singleton(单例) ,prototype(原

型) ,request,session,

globalsessionHibernate***********************************************************

*****************************************Hibernate 工作原理流程?原理: 1.读取并

解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享