Java框架面试题总结_201104
Struts 篇
1. Struts的工作流程
当客户端向浏览器发送HTTP请求时,所有浏览器请求都被提交给ActionServlet处理。
如果用户提交表单,则会将表单中的数据放入到ActionForm中。ActionServlet根据struts_config.xml文件中预先配置好的设置选择将请求转发到哪个action对象,action对象从actionForm对象中获取数据,但后调用业务逻辑组件,完成业务功能。
2. Struts的工作流程分解
Web应用如果采用struts框架,在web应用启动时就会加载并初始化ActionServlet, ActionServlet从struts_config.xml文件中读取配置信息,基本执行步骤如下:
(1) 所有浏览器请求都被提交给ActionServlet处理
(2) ActionServlet根据struts_config.xml文件中预先配置好的设置,选择应该将请求转发到哪个action对象.
(3) 当用户提交表单时,一个配置好的ActionForm对象将被创建,并被填入表单中的相当
数据. (4) Action对象从ActionForm对象中获取数据. (5) Action对象调用业务逻辑组件完成业务功能.
3. Struts控制器组件的组成. 和控制器的主要功能 Struts控制器组件主要包括:
ActionServlet组件:充当Struts框架的中央控制器.
RequestRrocessor组件:充当每个子应用模块的请求处理器. Action组件:负责处理一项具体的业务.
Struts控制器组件主要完成以下任务: 接受用户请求.
根据用户请求,调用合适的模型组件来执行相应的业务逻辑.
获取业务逻辑执行结果.
根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户.
4. Struts中的几个关键对象的作用(说说几个关键对象的作用)
ActionServlet类控制导航流.
ActionServlet根据URI来决定哪个Action类被用于处理请求,Action可以校验输入,并访问业务层以便从数据库检索信息.
Action需要知道页面提交了哪些内容,所以由ActionServlet根据请求URI来决定将请求参数绑定到哪个ActionForm中并传入Action.
Action在完成业务逻辑后,返回一个ActionForward对象,ActionServlet根据ActionForward对象中的路径来调用页面完成响应.
Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping对应一个请求URI,当请求路径到达的时候,ActionServlet就会查询ActionMapping对象,ActionMapping对象将告诉ActionServlet哪个Action类会被调用,哪个ActionForm类被用于传递页面数据以及哪
1
作者: 孙星
Java框架面试题总结 2011-03-26
些ActionForward将被用于转向.
有关Action,ActionForm,ActionForward等信息,通过struts-config.xml配置文件来定义.
5. Struts工作流程图(用例图)
注: Servlet 容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类.
6. 说说MVC设计模式和它的优点
MVC是一种设计模式,.它强制性的把应用程序的输入,处理和输出分开.MVC把应用程序分成三个核心模块:模型(Model),视图(View)和控制器(Controller).他们分别处理不同的任
务.
视图是用户看到并与之交互的界面.视图向用户显示相关的数据,并能接受用户的输入数据,但是它不进行任何实际的业务处理.
模型是应用程序的主体部分.模型表示业务数据和业务逻辑.一个模型能为多个视图提供数据.由于同一个模型可以被多个视图重用,所以提高了应用的重用性. 控制器接受用户的输入并调用模型和视图去完成任务. MVC的处理逻辑如下:
首先控制器接受用户请求,并决定应该调用哪个模型来进行处理,然后模型根据用户请求进行相应的业务逻辑处理,并返回数据. 最后控制器调用相应的视图来格式化模型返回的诗句,并通过视图呈现给用户. MVC的优点:
(1) 在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它
们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性.
(2) MVC的三个模块相互独立,改变其中的一个不会影响其他两个,所以根据这种设计思
想能构造良好的松耦合的构件. (3) 控制器可以用来连接不同的模型和视图去完成用户的需求,也可以为构造应用程序
提供强有力的手段.给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行处理,然后选择适当的视图将结果显示给用户.
2
作者: 孙星
Java框架面试题总结 2011-03-26
7. 说说struts是如何实现MVC的 ?
Struts采用JSP作为MVC的视图, 控制器由ActionServlet和Action类来实现. 控制器负责视图和模型之间的交互. 模型由实现业务逻辑的JavaBean或EJB组件构成,
然后说说Struts的工作流程.
8. Struts优点与缺点
Struts是开源软件,使开发者能更深入的了解其内部实现机制。 Struts 优点:业界\"标准\"(很多成功案例),学习资源丰富。 Struts的优点主要集中体现在两个方面:Taglib和页面导航。 a、利用Struts提供的taglib可以大大节约开发时间。
b、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。 c、表现与逻辑分离
d、表单验证解决了请求数据的验证问题,增强了系统健壮性。 e、便于团队开发
Struts缺点:a、大量的使用标签,对于初学者难度较大。
b、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)
9 . strust的Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安 全?如果是,说明原因
不是. 为了确保action的线程安全, 最好的办法就是不要在action里定义实列变量.
10. Tiles框架是什么?
Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离。
11. struts1.x 和struts 2 的区别
本文将从Struts1和Struts2的各个方面进行比较 特征 Action类 Struts 1 Struts1的action需要去继承一个抽象基类。一个普遍问题就是Struts1是面向抽象类编程来代替接口编程 Struts 2 Struts2的action可以实现一个Action接口,也可以同时实现一些其他的接口来添置一些附加的,常用的服务。Struts2提供一个基类ActionSupport实现了一些常用的接口。虽然Action接口不是必须的。任何附带execute方法的POJO对象都可以作为Struts2的action对象。 线程模型 Struts1的action是单例的而且必须是线程安全的,因为该类会只有唯一一个引用来为action处理所有的请求。单例策略会限制Struts2的Action对象是针对每一个请求的,所以自然也就不存在线程安全问题了。(实际上,) 作者: 孙星
3
Java框架面试题总结 2011-03-26
Struts1的action的功能以及需要扩展的额外的功能(The singleton strategy places restrictions on what can be done with Struts 1 Actions and requires extra care to develop)。Struts1的action必须是线程安全的并且是同步的。 Servlet的依赖 Struts1的Action依赖于Servlet Struts2的Action和容器的连接API,因为当Action被调用的时候HttpServletRequest和HttpServletResponse对象是通过execute方法进行处理的。 并不紧密。通常servlet上下文被描绘成简单的Map映射,允许Action被单独测试。当然,如果需要的话Struts2的Action也可以通过访问初始的request和response来完成一些功能。然而,其他的一些架构元素导致降低或者删除了直接访问request和response的需求。 易测试性 测试Struts1的Action有一个大障碍就是execute方法是直接暴露于servlet API的。 Struts2的Action可以很容易的通过设置属性调用方法来进行测试。当然依赖注入的支持也使得测试变得简单。 输入处理 Struts1使用一个ActionForm对象所有的ActionForm都必须继承自一个基类。因为其他的javaBean不能被用作ActionForm,开发者通常要写一些多余的类来获取用户输入。DynaBean可以被用做生成ActionForm类的一个选择,但是开发者需要对现有的javaBean进行重写。 Struts2使用Action属性作为输求。输入属性可以是一个拥有他自己的属性的对象。Action属性是通过标签和web页面交互。Struts2也支持ActionForm模型,就是POJO的Form对象和POJO的Action。多数的对象类型,包括商业逻辑对象和领域对象都可以作为输入/输入对象。模式驱动特征简化了标签和POJO输入对象的关系。 除掉了对于输入对象的需来获取用户的输入。和action一样,入属性, 表达式语言 Struts1和JSTL结合,所以他可以使用JSTL的EL。 Struts2也支持JSTL,但是这个框架也支持更加强大的表达式语言OGNL Struts2使用”ValueStack”技术,所以标签不用将视图和表现的对象结合就可以得到值.ValueStack策 表现层和类型值的绑定 Struts1使用标准的JSP机制将对象绑定到page context来进行访问。 4 作者: 孙星
Java框架面试题总结 2011-03-26
略允许通过一系列可能具有相同属性名字但是不同属性类型的的类型来完成视图的重用, 类型转换 Struts1的ActionForm通常都是String类型。Struts1通过Commons-Beanutils实现类型转换。 Struts2使用OGNL实现类型转换,框架包含了对基础和公共类型的转换器。 Struts2也支持通过validate方法进行手工验证以及Xwork验证框架进行验证。Xwork验证框架支持将验证链接到子属性,子属性使用了为属性类型和验证上下文定义的验证。 验证 Struts1支持通过ActionForm中的validate方法实现手工验证。也可以通过扩展通用的验证框架进行验证。对于同一个类可以有不同的验证,但是不能关联到子对象的验证。 Action执行的控制 Struts1支持为每一个模块分配请求处理(生命周期),但是一个模块中的所有Action必须分享相同的生命周期。 Struts2支持通过拦截器栈为每个Action创建不同的生命周期。通常对于不同的Action根据需要都要有对应的栈被创建和使用。
12 . Struts 的常用标签库及用法
常见的struts标签库有struts html 标签库,struts bean标签库, struts Logic标签库,Struts Template 标签库, Struts Nested 标签库.
HTML 标签 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单
Bean 标签 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用 Logic 标签 管理条件产生的输出和对象集产生的循环
Template 标签 随着Tiles框架包的出现,此标记已开始减少使用 Nested 标签 增强对其他的Struts 标签的嵌套使用的能力
以下分别讲解struts标签库的用法. Struts html标签库