java面试框架部分.docx

上传人:b****7 文档编号:26276940 上传时间:2023-06-17 格式:DOCX 页数:26 大小:36.09KB
下载 相关 举报
java面试框架部分.docx_第1页
第1页 / 共26页
java面试框架部分.docx_第2页
第2页 / 共26页
java面试框架部分.docx_第3页
第3页 / 共26页
java面试框架部分.docx_第4页
第4页 / 共26页
java面试框架部分.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

java面试框架部分.docx

《java面试框架部分.docx》由会员分享,可在线阅读,更多相关《java面试框架部分.docx(26页珍藏版)》请在冰豆网上搜索。

java面试框架部分.docx

java面试框架部分

一:

框架知识要点

1、如何理解MVC

MVC是Model-View-Controller的简写。

"Model"代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),

"View"是应用的表示面(由JSP页面产生),

"Controller"是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。

这些组件可以进行交互和重用

2、Struts框架的数据验证可分为几种类型?

表单验证(由ActionFormBean处理):

如果用户没有在表单中输入姓名,就提交表单,将生成表单验证错误

业务逻辑验证(由Action处理):

如果用户在表单中输入的姓名为“Monster”,按照本应用的业务规则,不允许向“Monster”打招呼,因此将生成业务逻辑错误。

3、在struts配置文件中action元素包含哪些属性和子元素?

path属性:

指定请求访问Action的路径

type属性:

指定Action的完整类名

name属性:

指定需要传递给Action的ActionFormBean

scope属性:

指定ActionFormBean的存放范围

validate属性:

指定是否执行表单验证

input属性:

指定当表单验证失败时的转发路径。

元素还包含一个子元素,它定义了一个请求转发路径。

4、.StrutsForward与Global-Forward的区别

Forward是根据Actionreturn的值找到对应的JSP页。

当多个Action共同return同一个值时,可将这个Forward元素写在Global-Forward中

5、叙述StrutsActionForm执行步骤

(1)检查Action的映射,确定Action中已经配置了对ActionForm的映射

(2)根据name属性,查找formbean的配置信息

(3)检查Action的formbean的使用范围,确定在此范围下,是否已经有此formbean的实例。

(4)假如当前范围下,已经存在了此formbean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。

(5)否则,就重新构建一个formbean的实例

(6)formbean的reset()方法备调用

(7)调用对应的setter方法,对状态属性赋值

(8)如果validatede的属性被设置为true,那么就调用formbean的validate()方法。

(9)如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行

6、简单叙述Struts里ActionFormBean的作用

1、ActionFormBean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。

2、Struts框架利用ActionFormBean来进行View组件和Controller组件之间表单数据的传递。

3、Struts框架把View组件接受到的用户输入的表单数据保存在ActionFormBean中,把它传递给Controller组件,Controller组件可以对ActionFormBean中的数据进行修改,JSP文件使用Struts标签读取修改后的ActionFormBean的信息,重新设置HTML表单。

7、简述StrutsFormBean的表单验证流程

1、当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionFormBean中。

2、接下来Struts框架会调用ActionFormBean的validate()方法进行表单验证。

3、如果validate()方法返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。

4、如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过

errors>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误

8、简述Struts框架响应客户请求的工作流程

1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。

2.如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。

3.根据配置信息决定是否需要表单验证。

如果需要验证,就调用ActionForm的validate()方法。

4.如果ActionForm的validate()方法返回null或返回一个不包含ActionMessge的ActionErrors对象,就表示表单验证成功。

5.ActionServlet根据AtionMapping实例包含的映射信息决定将请求转发给哪个Action。

如果应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。

6.Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。

7.ActionForward对象指向的JSP组件生成动态页面,返回给客户。

对于以上流程的步骤(4),如果ActionForm的validate()方法返回一个包含一个或多个ActionError的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件。

在这种情况下,不会再创建Action对象并调用Action的execute方法。

9、简述Struts框架的初始化流程

对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet

ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到ActionMappings对象中。

在Strutsframework中,Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。

其中,Action扮演了真正的控制逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向

2:

框架知识总结

1、谈谈你对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页面名称的解耦。

2、谈谈你对Hibernate的理解。

答:

1:

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

2:

Hibernate的核心接口一共有6个,分别为:

Session、SessionFactory、Transaction、Query、Criteria和Configuration。

这6个核心接口在任何开发中都会用到。

通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

Session接口:

Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。

)。

但需要注意的是Session对象是非线程安全的。

同时,Hibernate的session不同于JSP应用中的HttpSession。

这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。

•SessionFactory接口:

SessionFactroy接口负责初始化Hibernate。

它充当数据存储源的代理,并负责创建Session对象。

这里用到了工厂模式。

需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

•Configuration接口:

Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。

在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

•Transaction接口:

Transaction接口负责事务相关的操作。

它是可选的,可发人员也可以设计编写自己的底层事务处理代码。

•Query和Criteria接口:

Query和Criteria接口负责执行各种数据库查询。

它可以使用HQL语言或SQL语句两种表达方式。

3、AOP的作用。

意为:

面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的前提下给程序动统一添加功能的一种技术。

Struts2中的拦截器,就是使用AOP的思想。

使用AOP思想编写程序,会是程序更加灵活。

一般而言,使用Spring框架的主要作用:

我们会使用IoC整合组件(各种Bean),使用AOP来管理事务。

4、你对Spring的理解。

1.Spring实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationContext。

Spring相当于一个大的工厂类,在其配置文件中通过元素配置用于创建实例对象的类名和实例对象的属性。

2.Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦。

IOC也称为DI(DepencyInjection),什么叫依赖注入呢?

譬如,ClassProgrammer

{

Computercomputer=null;

publicvoidcode()

{

//Computercomputer=newIBMComputer();

//Computercomputer=beanfacotry.getComputer();

computer.write();

}

publicvoidsetComputer(Computercomputer)

{

puter=computer;

}

}

另外两种方式都由依赖,第一个直接依赖于目标类,第二个把依赖转移到工厂上,第三个彻底与目标和工厂解耦了。

在spring的配置文件中配置片段如下:

3.Spring提供了对AOP技术的良好封装,AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。

实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类在,JDK中采用Proxy类产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLIB。

在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice对象进行提供,显然要创建出代理对象,至少需要目标类和Advice类。

spring提供了这种支持,只需要在spring配置文件中配置这两个元素即可实现代理和aop功能,例如,

5、谈谈Struts中的Actionservlet。

struts的控制器有:

ActionServlet,RequestProcessor,还有就是具体的Action

struts最重要的类ActionServlet继承于HttpServlet。

所以说所谓的struts不过是一个servlet.

首先web配置文件

这个配置文件告诉我

所谓ActionServlet就是一个servlet。

在这里名字叫作action.

任何以.do结束的URL都去会访问这个叫做action的servlet.

这个叫action的servlet在服务器装载的时候会以最高优先级被初始化。

初始化时struts-config.xml等init-param信息会被封装到一个ServletConfig中

并调用这个servlet的init方法。

具体strtus的init方法的内容比较复杂这里省略。

至此Struts启动初始化工作完成。

6、Struts优缺点

优点:

1.实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现.

2.有丰富的tag可以用,Struts的标记库(Taglib),如能灵活动用,则能大大提高开发效率

3.页面导航

使系统的脉络更加清晰。

通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。

尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

4.提供Exception处理机制.

5.数据库链接池管理

6.支持I18N

缺点

一、转到展示层时,需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器

二、二、Struts的Action必需是thread-safe方式,它仅仅允许一个实例去处理所有的请求。

所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。

三、测试不方便.Struts的每个Action都同Web层耦合在一起,这样它的测试依赖于Web容器,单元测试也很难实现。

不过有一个Junit的扩展工具StrutsTestCase可以实现它的单元测试。

四、类型的转换.Struts的FormBean把所有的数据都作为String类型,它可以使用工具Commons-Beanutils进行类型转化。

但它的转化都是在Class级别,而且转化的类型是不可配置的。

类型转化时的错误信息返回给用户也是非常困难的。

五、对Servlet的依赖性过强.Struts处理Action时必需要依赖ServletRequest和ServletResponse,所有它摆脱不了Servlet容器。

六、前端表达式语言方面.Struts集成了JSTL,所以它主要使用JSTL的表达式语言来获取数据。

可是JSTL的表达式语言在Collection和索引属性方面处理显得很弱。

七、对Action执行的控制困难.Struts创建一个Action,如果想控制它的执行顺序将会非常困难。

甚至你要重新去写Servlet来实现你的这个功能需求。

八、对Action执行前和后的处理.Struts处理Action的时候是基于class的hierarchies,很难在action处理前和后进行操作。

九、对事件支持不够.在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:

在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为applicationevent,applicationevent和componentevent相比是一种粗粒度的事件

7、STRUTS的应用(如STRUTS架构)

Struts是采用JavaServlet/JavaServerPages技术,开发Web应用程序的开放源码的framework。

采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。

Struts有如下的主要功能:

一.包含一个controllerservlet,能将用户的请求发送到相应的Action对象。

二.JSP自由tag库,并且在controllerservlet中提供关联支持,帮助开发员创建交互式表单应用。

三.提供了一系列实用对象:

XML处理、通过JavareflectionAPIs自动处理JavaBeans属性、国际化的提示和消息。

8、说说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视图可以接受参数。

10、简述Hibernate和JDBC的优缺点?

如何书写一个onetomany配置文件.

11、iBatis与Hibernate有什么不同?

相同点:

屏蔽jdbcapi的底层访问细节,使用我们不用与jdbcapi打交道,就可以访问数据。

jdbcapi编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐。

ibatis的好处:

屏蔽jdbcapi的底层访问细节;将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;提供了自动将实体对象的属性传递给sql语句的参数。

Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,ibatis需要我们自己在xml配置文件中写sql语句,hibernate要比ibatis功能负责和强大很多。

因为hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。

对于一些不太复杂

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1