Struts2面试题

a511480568

贡献于2014-10-16

字数:0 关键词: 面试题目

struts2面试题 1 2010年07月10日15:14 Struts1与Struts2的区别 ,它们常 用到哪几个 类 , 以及工 作流程 ? Struts1: ActionServlet[process()], RequestProcessor[processPreprocess()], PlugIn, Action, ActionForm, ActionForward,ActionMapping ,struts-config.xml Struts2: FilterDispatcher, ActionSupport, ServletActionContext[getResponse()], ModelDriven[getModel()],MethodFilterInterceptor struts.xml,它是在 WebWork 基础上 发展起来的 . Struts 工作流 程 : struts1: 发布 Struts Web 服务时 ,根据 web.xml 初始化 ActionServlet,ActionContext 等内容 . 在接到 一个 HttpRequest 请求后 ,ActionServlet 根据 struts-config.xml 中的配 置内容 ,将请求 的 参 数传到对应 的 Formbean 中,并设置 session.然后根据请求 中 的 Action 参数 ,在struts-config.xml 中查找 指定的 Action,并调用此 Action 来处理 请求 .根据 Action 的处理 结果 ,会返回 一个 forward 变量 ,此时通过 mapping.findForward()查找出 对应的 forward 所标示的 Action 或者 JSP 页面 ,将 请求转 到下一个处 理 .如果是 forward 指向 JSP 页面 ,则输出 到前台 . Struts2: (1)客户端 提交一个 HttpServletRequest 请求 (.action 或JSP 页面 ) (2)请求被 提交到一系列 Filter 过滤器 ,如ActionCleanUp 和FilterDispatcher 等 (3)FilterDispatcher 是Struts2控制器 的核心 ,它通常 是过滤器链 中的最后一 个过滤器 (4)请求 发 到 FilterDispatcher 后,FilterDispatcher 询问 ActionMapper 是否 需 要 调 用 某 个 Action 来处理 这个 Request(一般根据 URL 后缀是 否为 .action 来判断 ) (5)如果 ActionMapper 决定需 要调用某个 Action,FilterDispatcher 则把请 求交到 ActioProxy,由其 进行处 理 . (6)ActionProxy 通过 Configuration Manager(它会访问 struts.xml)询问框 架的配置文 件 ,找到需 要 调用的 Action 类. (7)ActionProxy 创建一个ActionInvocation 实例,而ActionInvocation 通过代理模式调用 Action,(在调用 之前会根据 配置文件加 载相关的所有 Interceptor 拦截器 ) (8)Action 执行完 毕后 ,返回一个 result 字符串 ,此时再 按相反的顺 序通过 Interceptor 拦截器 . (9) 最后 ActionInvocation 负责根据 struts.xml 中配置的 result 元素 ,找到与 返回值对应的 result, 决定进 行下一步输 出 . ?Struts1和Struts2的区别 和对比 : Action 类: ? Struts1要求 Action 类继承 一个抽象基 类。 Struts1的一个 普遍问题是 使用抽象类 编程而不是 接 口。 ? Struts 2 Action 类可以 实现一个 Action 接口, 也可实 现其他接口 ,使可选 和定制的服 务成 为 可能。 Struts2提供一个 ActionSupport 基类去 实现 常用的 接口。 Action 接口不 是必须的, 任 何有 execute 标识的 POJO 对象都 可以用作 Struts2的Action 对象。 线程模 式 : ? Struts1 Action 是单例模式并且必须是线程安全的,因为仅有 Action 的一个实例来处理所有 的请求 。 单例策略 限制了 Struts1 Action 能作的 事, 并且要 在开发时特 别小心。 Action 资源 必 须是线 程安全的或 同步的。 ? Struts2 Action 对象为每一个请求产生一个实例,因此没有线程安全问题。 ( 实际上, servlet 容器给 每个请求产 生许多可丢 弃的对象, 并且不会导 致性能和垃 圾回收问题 ) Servlet 依赖 : ? Struts1 Action 依赖于Servlet API,因为当一个Action 被调用时HttpServletRequest 和 HttpServletResponse 被传递给 execute 方法。 ? Struts 2 Action 不依赖于容器,允许 Action 脱离容器单独被测试。如果需要, Struts2 Action 仍然可以访问初始的request 和response。但是,其他的元素减少或者消除了直接访问 HttpServetRequest 和HttpServletResponse 的必要 性。 可测性 : ? 测试 Struts1 Action 的一个 主要问题是 execute 方法暴 露了 servlet A PI(这使 得测试要依 赖 于 容器)。一个第三方扩展--Struts TestCase--提 供了一套 Struts1的模拟 对象 ( 来进 行测试 )。 ? Struts 2 Action 可以通过初始化、设置属性、调用方法来测试, “依赖注入 ”支持也使测试更 容易。 捕获输 入 : ? Struts1 使用 ActionForm 对象捕 获输入。所 有的 ActionForm 必须继 承一个基类 。因为其他 JavaBean 不能用作 ActionForm,开发者经常创建 多余的类捕 获输入。 动态 Bean(DynaBeans) 可以作为创建传统 ActionForm 的选择,但是,开发者可能 是在重新描 述 (创建 )已经存 在的 JavaBean(仍然 会导致有冗 余的 javabean)。 ? Struts 2直接使用 Action 属性作 为输入属性 ,消除了对 第二个输入 对象的需求 。输入属性 可 能是有 自己 (子)属性的 rich 对象类型。Action 属性能 够通过 web 页面上的 taglibs 访问。Struts2 也支 持 ActionForm 模式 。 rich 对象 类型,包括业务对象,能够用作输入/输出 对 象 。 这 种 ModelDriven 特性简 化了 taglib 对POJO 输入对 象的引用。 表达式 语言: ? Struts1 整合了 JSTL,因此 使用 JSTLEL。这种 EL有基本 对象图遍历 ,但是对集 合和索引 属性的 支持很弱。 ? Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL). 绑定值到页面 ( view):? Struts 1使用标准 JSP 机制把对象绑定 到页面 中来访问。 ? Struts 2 使用 "ValueStack"技术,使 taglib 能够访问值而不需要把你的 页面( view)和对象 绑定起 来。 ValueStack 策略允 许通过一系 列名称相同 但类型不同 的属性重用 页面( view)。 类型转 换: ? Struts 1 ActionForm 属性通常都 是 String 类型。 Struts1使用 Commons-Beanutils 进行类型转 换。每 个类一个转 换器,对每 一个实例来 说是不可配 置的。 ? Struts2 使用 OGNL进行类 型转换。提 供基本和常 用对象的转 换器。 校验: ? Struts 1支持在 ActionForm 的validate 方法中 手动校验, 或 者通过 Commons Validator 的扩 展 来校验 。同一个类 可以有不同 的校验内容 ,但不能校 验子对象。 ? Struts2支持通过 validate 方法和 XWork 校验框架来进行校验。 XWork 校验框架使用为属性 类类型 定义的校验 和内容校验 ,来支持 chain 校验子 属性 Action 执行的 控制: ? Struts1支持每一个模块有单独的 Request Processors(生命周期) , 但是模块中的所有 Action 必须共 享相同的生 命周期。 ? Struts2支持通过拦截器堆栈( Interceptor Stacks)为每一个 Action 创建不同的生命周期。堆 栈能够 根据需要和 不同的 Action 一起使 用。 Servlet,Filter 和Listener 实现的 接口 . Servlet 继承 HttpServlet 类 Filter 实现 Filter 接口 Listener 实现 HttpSessionListener,HttpSessionAttributeListener 接口 ------------------------------------------------------------------------------------ Java 面试中 ,最常被人 问到的几个 问题: 1. java.util.*包的 UML 结构图 。 2. Vector 和ArrayList、LinkedList 区别 ? Hashtable 和HashMap 之间的 区别 3. String、StringBuffer,StringBuilder 之间区 别。 --回答 -- 1. Collection ? | ? |_List ? |? |_LinkedList ? |? |_ArrayList ? |? |_Vector ? | |_Stack |? |_Set |_HashSet?? Map ? |? |_HashMap ? | ? | Dictionary ?|_ |_Hashtable Comparetor 2.? LinkedList 内部以 链表形式存 储数据 ?? ArrayList 内部以 数组形式存 储数据。 ? ? Vector 同ArrayList,不过 它与 ArrayList 比较起 来是 thread-safe 的。 ? ? Hashtable 是继承了 Dictionary,是线程安全的。 HashMap 实现了 Map 接口,不是线程安全 的。 ??? 如何保 证 线 程 安全 的 ? 每 个修 改 容 器 中数 据 的 操 作都 是 同 步 的( synchronized), 因此保 证了线程安 全。 3. String 是长 度 不 可 变 的 , StringBuffer 和StringBuilder 长度 都 是 可 以 变 化 的 。 StringBuffer 是线程 安全的, StringBuilder 不是线 程安全的。 ------------------------------------------------------------------------------==== 2、Anonymous Inner Class (匿名内部类) 是否可以extends( 继承)其它类,是否可以 implements(实现 )interface(接口 ) 答: 匿 名 的内部类是 没有名字的 内部类。 不能 extends(继承 ) 其它类 , 但 一 个内部类可 以作 为 一个接 口,由另一 个内部类实 现 3、Static Nested Class 和Inner Class 的不同 答:Nested Class (一般是 C++的说法),Inner Class (一般是 JAVA的说法 )。Java 内部类与 C++ 嵌套类 最大的不同 就在于是否 有指向外部 的引用上。 注 : 静态内 部类 ( Inner Class) 意 味着 1 创建一个 static 内部类的对象,不需要一个 外部类对象 , 2不能从一个 static 内部类的一个对 象访问 一个外部类 对象 4、&和&&的区别 答: &是位运 算符,表示 按位与运算 , &&是逻辑 运算符,表 示逻辑与( and) 5、Collection 和Collections 的区别 答: Collection 是集合 类的上级接 口, 继 承 与他的接口 主要有 Set?和List.Collections 是针对 集 合类的 一个帮助类 ,他提供一 系列静态方 法实现对各 种集合的搜 索、排序、 线程安全化 等操 作6、 什 么 时候用 assert 答:assertion(断言 )在软件 开发中是一 种常用的调 试方式, 很 多 开发 语 言中都 支持这种机 制。 在 实现中 , assertion 就是在 程序中的一 条语句, 它 对一个 boolean 表达 式进行 检查, 一 个正 确程序必须 保证这个 boolean 表达式 的值为 true; 如 果该 值为 false,说明 程序已经处于不正确 的状态下,系统将给出警告 或退出。一 般来说, assertion 用于保证程序 最基本、关键的正确性。 assertion 检查通常在开发和测试时开 启。为了提 高性能,在 软件发 布后, assertion 检查通 常是关闭的 7、String s = new String("xyz");创建了 几个 String Object 答:两 个,一个字 符对象,一 个字符对象 引用对象 8、Math.round(11.5)等於多 少 ? Math.round(-11.5)等於多 少 答:?Math.round(11.5)==12;Math.round(-11.5)==-11;round 方法返 回与参数最 接近的长整 数,参 数加 1/2后求其 floor 9、short s1 = 1; s1 = s1 + 1;有什么 错 ? short s1 = 1; s1 += 1;有什么 错 答:short?s1?=?1;?s1?=?s1?+?1;? (s1+1 运算结果是int 型,需要强制转换类型) short?s1?=?1;?s1?+=?1;(可以 正确编译) 10、Java 有没有 goto 答: java 中的保 留字,现在 没有在 java 中使用 11、数组 有没有 length()这个方 法 ? String 有没有 length()这个方 法 答:数 组没有 length()这个方 法,有 length 的属性 。 String 有有 length()这个方 法 12、Overload 和Override 的区别 。 Overloaded 的方法 是否可以改 变返回值的 类型 答: 方 法 的 重 写 Overriding 和重 载 Overloading 是Java 多态 性的不同表现。重写Overriding 是父类 与子类之间 多态性的一 种表现, 重载 Overloading 是一个 类中多态性 的一种表现 。 如 果 在子类 中定义某方 法与其父类 有相同的名 称和参数, 我 们 说该方法被 重写 ?(Overriding)。子类 的对象使 用 这个 方法 时 ,将 调用 子 类中 的定 义 ,对 它而 言 ,父 类中 的 定义 如同 被 "屏蔽 "了。 如果在 一个类中定 义了多个同 名的方法, 它们或有不 同的参数个 数或有不同 的参数类型 ,则 称为方 法的重载 (Overloading)。Overloaded 的方法 是可以改变 返回值的类 型 13、Set 里的元 素是不能重 复的, 那 么用 什么方法来 区分重复与 否呢 ? 是用 ==还是 equals()? 它 们有何 区别 答:Set 里的元 素是不能重 复的, 那 么用 iterator()方法来 区分重复与 否。 equals()是判读 两个 Set 是否相 等 ????equals()和==方法决 定引用值是 否指向同一 对象 equals()在类中 被覆盖, 为 的是 当 两个分 离的对象的 内容和类型 相配的话, 返回真值 15、error 和exception 有什么 区别 答: error?表示恢 复不是不可 能但很困难 的情况下的 一种严重问 题。 比 如说内存 溢出。 不 可 能 指望程 序能处理这 样的情况 ????exception?表示一 种设计或实 现问题。也 就是说,它 表示如果 程序运 行正常,从 不会发生的 情况 16、List, Set, Map 是否继 承自 Collection 接口 答: ?List,Set 是, Map 不是 17、abstract class 和interface 有什么 区别 答:声 明方法的存 在而不去实 现它的类被 叫做抽象类 ( abstract?class) , 它 用于要创建 一个体 现某些 基本行为的 类, 并 为该类 声明方法, 但 不 能在该 类中实现该 类的情况。 不 能创建 abstract ?类的实 例。 然 而可以 创建一个变 量, 其 类型是 一个抽象类 , 并 让它 指向具体子 类的一个实 例。 不能有抽象构造函数或抽象静态方法。 Abstract?类的子类为它们父类中的所有抽象方法提供 实现, 否则它们也 是抽象类为 。取而代之 ,在子类中 实现该方法 。知道其行 为的其它类 可以 在类中 实现这些方 法接口 ( interface) 是 抽 象类的 变体。 在 接 口中, 所 有方法 都是抽象的 。 多 继承性可通过 实现 这样的 接口 而获得 。接 口中的 所有 方法都 是抽 象的, 没有 一个有 程序 体。 接口只可以定义 static?final 成员变量。接口的实现与子类相似,除了该实现类不 能从接口定 义中继 承行为。当 类实现特殊 接口时,它 定义(即将 程序体给予 )所有这种 接口的方法 。然 后,它 可以在实现 了该接口的 类的任何对 象上调用接 口的方法。 由于有抽象 类,它允许 使用 接口名 作为引用变 量的类型。 通常的动态 联编将生效 。引用可以 转换到接口 类型或从接 口类 型转换 , instanceof?运算符 可以用来决 定某对象的 类是否实现 了接口 18、abstract 的method 是否可 同时是 static,是否可 同时是 native,是否 可同时是 synchronized 答:都 不能 19、接口 是 否 可 继承 接 口 ? 抽象类 是 否 可 实现 (implements)接口 ? 抽象类 是 否 可 继承 实 体类 (concrete class) 答: 接 口可以继 承接口。 抽 象类可以 实现 (implements)接口, 抽 象类是 否可继承实 体类, 但 前 提是实 体类必须有 明确的构造 函数 20、构造器 Constructor 是否可被 override 答:构 造器 Constructor 不能被 继承,因此 不能重写 Overriding,但可 以被重载 Overloading 21、是否 可以继承 String 类 答: String 类是 final 类故不 可以继承 22、try {}里有一个 return 语句,那么紧跟在这 个 try 后的 finally {}里的 code 会不会被执行, 什么时 候被执行,在 return 前还是 后 答:会 执行,在 return 前执行 23、用最 有效率的方 法算出 2乘以 8等於几 答: 2?< 它总是 会检查所含 文件中的变 化,适合用 于包含动态 页面,并且 可以带参数 ?? 静态 INCLUDE 用include 伪码实 现 ,定不会 检查所含文 件的变化, 适 用于包含 静态页面 ?? <%@ include file="included.htm" %> 73、两种 跳转方式分 别是什么 ?有什么 区别 ? 答:有两种,分别为:? ? 前者页 面不会转向 include 所指的 页面,只是 显示该页的 结果,主页 面还是原 来的页 面。 执行 完后还会回 来, 相当 于函数调用 。 并且可 以带参数 .后者完 全转向新页 面, 不 会再回 来。相当于 go to 语句。 74、JSP 的内置 对象及方法 。 答: request 表示 HttpServletRequest 对象。 它 包 含了有 关浏览器请 求的信息, 并 且提 供了几 个 用于获取 cookie,?header,?和session 数据的 有用的方法 。 ????? response 表示 HttpServletResponse 对象, 并 提 供了几 个用于设置 送回 ?浏览器的响应的方法(如 cookies,头信息 等) ????? out 对象是 javax.jsp.JspWriter 的一个实例, 并提 供了几 个方 法使你 能用 于向浏 览器 回送输出 结果。 ????? pageContext 表示一 个 javax.servlet.jsp.PageContext 对象。它 是 用于 方便 存 取各 种范 围 的名字 空间、 servlet 相关的 对象的 API,并且 包装了通用的 servlet 相关功 能的方法。 ????? session 表示 一 个 请 求 的 javax.servlet.http.HttpSession 对象 。 Session 可以 存 贮 用 户 的 状 态 信 息????? applicaton?表示一个 javax.servle.ServletContext 对象。 这 有助于 查找有关 servlet 引擎和 servlet 环境的 信息 ????? config 表示一个javax.servlet.ServletConfig 对象。该对象用于存取servlet 实例的初始化参 数。 ????? page 表示从 该页面产生 的一个 servlet 实例 ---------------------------------------------------------------------------

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档