1. 简述 Struts 框架的初始化流程。
答案:对于采用 Struts 框架的 Web 应用,在 Web 应用启动时就会加载并初始化控制器 ActionServlet ActionServlet 从 struts-config.xml 文件中读取配置信息,把它们存放到 ActionMappings 对象中。 在 Struts framework 中, Controller 主要是 ActionServlet,但是对于业务逻辑的操作则主要由 Action、ActionMapping、ActionForward 这几个组件协调完成(也许这几个组件,应该划分到模型中的 业务逻辑一块)。
其中,Action 扮演了真正的控制逻辑的实现者,而 ActionMapping 和 ActionForward 则指定了不同业务 逻辑或流程的运行方向。
2. 简述 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 方法。 3 Struts 框架的数据验证可分为几种类型?
表单验证(由 ActionForm Bean 处理):如果用户没有在表单中输入姓名,就提交表单,将生成表单验证 错误
业务逻辑验证(由 Action 处理):如果用户在表单中输入的姓名为“Monster”,按照本应用的业务规则, 不允许向“Monster”打招呼,因此将生成业务逻辑错误。 4 简述 Form Bean 的表单验证流程。
1、当用户提交了 HTML 表单,Struts 框架自动把表单数据组装到 ActionForm Bean 中。 2、接下来 Struts 框架会调用 ActionForm Bean 的 validate()方法进行表单验证。
3、如果 validate()方法返回的 ActionErrors 对象为 null,或者不包含任何 ActionMessage 对象,就表 示没有错误,数据验证通过。
4、如果 ActionErrors 中包含 ActionMessage 对象,就表示发生了验证错误,Struts 框架会把 ActionErrors 对象保存到 request 范围内,然后把请求转发到恰当的视图组件,视图组件通过
5 在 struts 配置文件中 action 元素包含哪些属性和子元素? path 属性:指定请求访问 Action 的路径 type 属性:指定 Action 的完整类名
name 属性:指定需要传递给 Action 的 ActionForm Bean scope 属性:指定 ActionForm Bean 的存放范围 validate 属性:指定是否执行表单验证 input 属性:指定当表单验证失败时的转发路径。
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 表单。 7 .叙述 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()方法并执行。 8.在下面的标签中哪些是 struts 标签 A、
答:FormBean 是一种 JAVABean,除了具有 JAVABean 的常规方法,还包含一些特殊方法,用于验证表单数 据,以及将其属性重新设置为默认值。 FormBean 用来进行 View 组件和 Controller 组件之间表单数据的 传递。View 组件接收到用户输入的表单数据,保存在 FormBean 中,把它传递给 Controller 组件, Controller 组件可以对 FormBean 中的数据进行修改。 10、Forward 与 Global-Forward 的区别
答:Forward 是根据 Action return 的值找到对应的 JSP 页。当多个 Action 共同 return 同一个值时,可 将这个 Forward 元素写在 Global-Forward 中。 11.问题:在 Struts 应用的视图中包含哪些组件? (A) JSP (B) Servlet (C) ActionServlet (D) Action
(E) 代表业务逻辑或业务数据的 JavaBean (F) EJB (G) 客户化标签
12 问题:在 Struts 应用的控制器中包含哪些组件? (A) JSP (B) Servlet(C) ActionServlet (D) Action
(E)代表业务逻辑或业务数据的 JavaBean (F) EJB (G) 客户化标签
13.在 struts 配置文件中 action 元素包含哪些属性和子元素? path 属性:指定请求访问 Action 的路径 type 属性:指定 Action 的完整类名
name 属性:指定需要传递给 Action 的 ActionForm Bean scope 属性:指定 ActionForm Bean 的存放范围 validate 属性:指定是否执行表单验证 input 属性:指定当表单验证失败时的转发路径。
(E) 代表业务逻辑或业务数据的 JavaBean (F) EJB (G) 客户化标签
15. 问题: struts 框架中,关于 FormBean,下列说法正确的是:
A FormBean 是一种数据 bean,主要用来封装表单提交上来的数据,并把这些数据传递给 Action B 在 FormBean 中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证 C 用户每次提交表单,都会产生一个新的 FormBean 实例 D 动态 FormBean 不能进行验证操作
16. 问题:struts 框架中,在一个 Action 的配置信息中,name 属性指的是: A 当前 action 实例的名字 B 当前 action 所在的类的名字
C 该 Action 中调用的 FormBean 的实例的名字 D 该 Action 中调用的 FormBean 的类的所在包名
17. 问题:关于 struts 项目中的类与 MVC 模式的对应关系,说法错误的是? A Jsp 文件实现视图 View 的功能
B ActionServlet 这一个类是整个 struts 项目的控制器 C ActionForm、Action 都属于 Model 部分 D 一个 struts 项目只能有一个 Servlet 18、问题:以下哪些说法是正确的?
选项:(A)每个 HTTP 请求对应一个单独的 ActionServlet 实例
(B)对于每个请求访问 HelloAction 的 HTTP 请求,Struts 框架会创建一个单独的 HelloAction 实例。 (C)每个子应用对应一个单独的 RequestProcessor 实例 (D)每个子应用对应一个单独的 web.xml 文件 19 ActionForm Bean 对象是由谁创建的? (A)
(C) RequestProcessor (D) Action
20、struts 框架,错误的是? A Struts 中无法完成上传功能 B Struts 框架基于 MVC 模式
C Struts 框架容易引起流程复杂、结构不清晰等问题 D Struts 可以有效地降低项目的类文件数目
21、问题:以下代码定义了一个变量,如何输出这个变量的值?
myBean=(String)pageContext.getAttribute(“stringBean”,PageContext.PAGE_SCOPE);%> <%=myBean%>
22、问题:把静态文本放在 Resource Bundle 中,而不是直接在 JSP 文件中包含这些静态文本,有什么优 点?
提高可维护性 提高可重用性 支持国际化
23. 问题:关于 struts 项目中的类与 MVC 模式的对应关系,说法错误的是? A Jsp 文件实现视图 View 的功能
B ActionServlet 这一个类是整个 struts 项目的控制器 C ActionForm、Action 都属于 Model 部分 D 一个 struts 项目只能有一个 Servlet 24. Struts 工作机制?为什么要使用 Struts? 工作机制: Struts 的工作流程:
在 web 应用启动时就会加载初始化 ActionServlet,ActionServlet 从 struts-config.xml 文件中读取配置信息,把它们存放到各种配置对象 当 ActionServlet 接收到一个客户请求时,将执行如下流程.
-(1)检索和用户请求匹配的 ActionMapping 实例,如果不存在,就返回请求路径无效信息; -(2)如果 ActionForm 实例不存在,就创建一个 ActionForm 对象,把客户提交的表单数据保存到 ActionForm 对象中;
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用 ActionForm 的 validate()方法; -(4)如果 ActionForm 的 validate()方法返回 null 或返回一个不包含 ActionMessage 的 ActuibErrors 对 象, 就表示表单验证成功;
-(5)ActionServlet 根据 ActionMapping 所包含的映射信息决定将请求转发给哪个 Action,如果相应的 Action 实例不存在,就先创建这个实例,然后调用 Action 的 execute()方法;
-(6)Action 的 execute()方法返回一个 ActionForward 对象,ActionServlet 在把客户请求转发给 ActionForward 对象指向的 JSP 组件;
-(7)ActionForward 对象指向 JSP 组件生成动态网页,返回给客户;
为什么要用:
JSP、Servlet、JavaBean 技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的 系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,
Struts 便应运而生。
基于 Struts 开发的应用由 3 类组件构成:控制器组件、模型组件、视图组件
25. Struts 的 validate 框架是如何验证的?
在 struts 配置文件中配置具体的错误提示,再在 FormBean 中的 validate()方法具体调用。
26. 说下 Struts 的设计模式
MVC 模式: web 应用程序启动时就会加载并初始化 ActionServler。用户提交表单时,一个配置好的 ActionForm 对象被创建,并被填入表单相应的数据,ActionServler 根据 Struts-config.xml 文件配置好 的设置决定是否需要表单验证,如果需要就调用 ActionForm 的 Validate()验证后选择将请求发送到哪 个 Action,如果 Action 不存在,ActionServlet 会先创建这个对象,然后调用 Action 的 execute()方 法。Execute()从 ActionForm 对象中获取数据,完成业务逻辑,返回一个 ActionForward 对象, ActionServlet 再把客户请求转发给 ActionForward 对象指定的 jsp 组件,ActionForward 对象指定的 jsp 生成动态的网页,返回给客户。
27、STRUTS 的应用(如 STRUTS 架构)
Struts 是采用 Java Servlet/JavaServer Pages 技术,开发 Web 应用程序的开放源码的 framework。 采用 Struts 能开发出基于 MVC(Model-View-Controller)设计模式的应用构架。 Struts 有如下的主要功 能:一.包含一个 controller servlet,能将用户的请求发送到相应的 Action 对象。二.JSP 自由 tag 库, 并且在 controller servlet 中提供关联支持,帮助开发员创建交互式表单应用。三.提供了一系列实用对 象:XML 处理、通过 Java reflection APIs 自动处理 JavaBeans 属性、国际化的提示和消息。
struts面试题



