1. Struts
的工作原理
在Struts 中,用户的请求一般以*.do 作为请求服务名,所有的*.do 请求均被指向ActionSevlet , ActionSevlet 根据Struts-config.xml 中的配置信息,将用户请求封装成一个指定名称的FormBean ,并将此 FormBean 传至指定名称的ActionBean ,由ActionBean 完成相应的业务操作,如文件操作,数据库操作等。每一个*.do 均有对应的 FormBean 名称和ActionBean 名称,这些在Struts-config.xml 中配置。
2. Struts
优点与缺点
Struts
是开源软件,使开发者能更深入的了解其内部实现机制。
Struts 优点:业界" 标准" (很多成功案例),学习资源丰富。
Struts 的优点主要集中体现在两个方面:Taglib 和页面导航。
a 、利用Struts 提供的taglib 可以大大节约开发时间。
b
、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。
c
、表现与逻辑分离
d
、表单验证解决了请求数据的验证问题,增强了系统健壮性。
e
、便于团队开发
Struts 缺点:a 、大量的使用标签,对于初学者难度较大。
b 、ActionForms 使用不便、无法进行单元测试(StrutsTestCase 只能用于集成)
3. Struts
提供了几个标签库?都是什么标签库?
Struts 提供了五个标签库,即:HTML 、Bean 、Logic 、Template 和Nested 。
HTML 标签 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单
Bean 标签 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用
Logic 标签 管理条件产生的输出和对象集产生的循环
Template 标签 随着Tiles 框架包的出现,此标记已开始减少使用
Nested 标签 增强对其他的Struts 标签的嵌套使用的能力
7. 你对MVC 的理解,MVC 有什么优缺点?结合Struts ,说明在一个Web 应用如何去使用?
答:
MVC
设计模式(应用观察者模式的框架模式)
M: Model(Business process layer) ,模型,操作数据的业务处理层, 并独立于表现层
(Independent of presentation)
。
V: View(Presentation layer) ,视图,通过客户端数据类型显示数据, 并回显模型层的执
行结果。
C: Controller(Control layer)
,控制器,也就是视图层和模型层桥梁,控制数据的流向,
接受视图层发出的事件,并重绘视图
MVC
框架的一种实现模型
模型二(Servlet-centric)
:
JSP+Servlet+JavaBean ,以控制为核心,JSP 只负责显示和收集数据,Sevlet ,连接视图
和模型,将视图层数据,发送给模型层,JavaBean
,分为业务类和数据实体,业务类处
理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC
的实现模式。
StrutsMVC 框架(Web application frameworks)
Struts 是使用MVC 的实现模式二来实现的,也就是以控制器为核心。
Struts 提供了一些组件使用MVC 开发应用程序:
Model :Struts 没有提供model 类。这个商业逻辑必须由Web 应用程序的开发者以
JavaBean 或EJB 的形式提供
8. 叙述Struts ActionForm 执行步骤
答案:(1)检查Action 的映射,确定Action 中已经配置了对ActionForm 的映射
(2)根据name 属性,查找form bean 的配置信息
(3)检查Action 的formbean 的使用范围,确定在此范围下,是否已经有此form bean 的实例。
(4)假如当前范围下,已经存在了此form bean
的实例,而是对当前请求来说,是同一种类型的话,那么就重用。
(5)否则,就重新构建一个form bean
的实例
(6)form bean 的reset() 方法备调用
(7)调用对应的setter
方法,对状态属性赋值
(8)如果validatede 的属性被设置为true ,那么就调用form bean 的validate() 方法。
(9 )如果validate ()方法没有返回任何错误,控制器将ActionForm 作为参数,传给Action 实例的execute ()方法并执行
9. 简单叙述Struts 里 ActionForm Bean 的作
答案:1 、ActionForm Bean 也是一种JavaBean ,除了具有一些JavaBean 的常规方法,还包含一些特殊的方法,用于验证HTML 表单数据以及将其属性重新设置为默认值。
2 、Struts 框架利用ActionForm Bean 来进行View 组件和Controller 组件之间表单数据的传递。
3 、Struts 框架把View 组件接受到的用户输入的表单数据保存在ActionForm Bean 中,把它传递给Controller 组件,Controller 组件可以对ActionForm Bean 中的数据进行修改,JSP 文件使用Struts 标签读取修改后的ActionForm Bean 的信息,重新设置HTML 表单。
10. 简述Struts Form Bean 的表单验证流程
答案:1 、当用户提交了HTML 表单,Struts 框架自动把表单数据组装到ActionForm Bean 中。
2 、接下来Struts 框架会调用ActionForm Bean 的validate() 方法进行表单验证。
3 、如果validate() 方法返回的ActionErrors 对象为null ,或者不包含任何ActionMessage 对象,就表示没有错误,数据验证通过。
4 、如果ActionErrors 中包含ActionMessage 对象,就表示发生了验证错误,Struts 框架会把ActionErrors 对象保存到request 范围内,然后把请求转发到恰当的视图组件,视图组件通过标签把request 范围内的ActionErrors 对象中包含的错误消息显示出来,提示用户修改错误
11. 简述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 方法。
12.Get 请求和Post 请求区别
答案:a 、Post 是通过Http 中的Post 机制将表单中的数据提交到Action 所制定的程序
Get 方法是通过Url 请求来提交表单数据的。
b.Get 适用于传输数据量小于1K 数据,执行效率高。Post 传输数据量较大,但也有限量