Struts2 面试问题与答案

最近,我写了很多( / 社区 / 教程 / struts-2 - 教程 "Struts2 教程与示例项目")和在本文中,我正在列出一些重要的 ** Struts2 面试问题**与答案,以帮助你在面试中。

Struts2 面试问题

struts2 interview questions, struts interview questions, struts2 interview questions and answers for experienced, struts interview questions and answers for experienced

  1. 联合国 [Struts2是什么?] (#struts2-框架)( (英语). 2. Struts1和Struts2有什么区别,或者Struts2如何优于Struts1?
  2. [Struts2核心组件是什么?] (#struts2-组件
  3. [截取器在Struts2中是什么?] (#struts2-intercenters
  4. [由Struts2截取器执行哪种设计模式?] (#截取器-设计-pattern
  5. [在Struts2中创建动作课有什么不同的方法?] (# action-classes . [Struts2动作和拦截器是线上安全的吗?] (#struts2-thread-security)
  6. [哪个班是Struts2中的前置控制器?] (#struts2-前置控制器)( (英语). 9. [被拦截者在Struts2有什么好处?] (#被拦截者-好处)
  7. [什么是价值Stack和OGNL?] (#价值stack-ognl)
  8. [在Struts2中引入一些有用的说明?] (#struts2-notations)
  9. [提供您使用过的一些重要的Struts2常数?] (#struts2-constants)
  10. Struts2中的命名空间在动作映射中有何用? 14 (英语). [哪个拦截器负责将请求参数映射到动作类Java Bean属性?] (#struts2-param-interceptor
  11. [哪个拦截器负责i18n支持?] (#struts2-i18n
  12. [将Action 接口和ActionPassuplication类用于我们的行动类有什么区别,你喜欢哪个?] (#Action-vs-Actionslife)
  13. [如何将 Servlet API 请求,响应, HttpSession 等对象纳入动作类?] (#struts2-aware-interfaces
  14. [执行和等待拦截器有什么用?] (#执行和等待-拦截器)
  15. [Struts2中什么用途是代号截取器?] (#token-interceptor
  16. [如何在 Struts2 应用程序中集成log4j?] (#log4j-struts2-Institution) (- )21. [什么是不同的Struts2标记? (#struts2-tags) 22。 [Struts2中的自定义类型转换器是什么?] (#自定义类型转换器) 23 (英语). [我们如何写出自己的截取器并绘制地图以供行动?] (#Custom-interceptor
  17. [截取器的生命周期是什么?] (#截取-寿命-循环)
  18. [什么是拦截器堆栈?] (#interceptor-stack)
  19. [什么是struts-default 包,什么是好处?] (#struts-default-package)
  20. Struts2动作URI的默认后缀是什么,我们怎样才能改变它? 28 (英语). [结果页面的默认位置是什么,我们如何改变它?] (#struts2-result-path) 29。 [如何在 Struts2 应用程序中上传文件?] (# file-upload-interceptor
  21. [开发 Struts2 应用程序时可遵循哪些最佳做法?] (# struts2- best-practices )31. [如何处理 Struts2 中的应用程序所抛出的例外情形?] (# struts2- 例外-处理)

Struts2 面试问题和答案

  1. 联合国 ### 斯特鲁特是什么? Apache Struts2是一个开源框架,用于在Java中构建网络应用程序. Struts2基于OpenSymphony WebWork框架. 它从Struts1得到了高度的改进,这使得它更加灵活,易于使用和扩展. Struts2的核心组成部分是Action,截取器和结果页. Struts2提供了多种方法来创建Action类,并通过struts.xml或通过注释来配置. 我们可以创建自己的拦截器 共同的任务。 Struts2带有大量的标记并使用OGNL表达语言. 我们可以创建自己的类型转换器来渲染结果页面. 结果页面可以是JSPs和FreeMarker模板. ( (英语). ### Struts1和Struts2有什么区别,或者Struts2如何优于Struts1? Struts2旨在克服Struts1的缺点并让它更加灵活,可扩展. 一些明显的差别是: 组件 QQ Struts1 QQ Struts2 QX QQ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- * -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- QQ Struts2 动作课是灵活的, 我们可以通过执行 Action 接口, 扩展 Action Support 类或者仅仅通过执行方法来创建它们 。 QQ QQ Thread Sefety QQ Struts1 Action Class are Singleton and not three safe,这让开发者一方额外照顾以避免任何副作用,因为多线程. QQ Struts2 动作课会得到每个请求的即时处理,所以没有多行并使它们安全. QQ Servlet API 组合 QQ Struts1 API与Servlet API紧密相接,请求和响应对象被传递到动作类执行()方法. QQ Struts2 API与Servlet API松散相接,并自动将表豆数据映射到我们主要使用的动作类java豆属性. 然而,如果我们需要参考Servlet API 类,则有 * 智能接口。 QQ 由于Servlet API相接而难以测试. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我们可以通过即兴表演 和设定他们的属性来测试它们 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我们很方便的测试 QQ QQ请求参数映射 Struts1 要求我们创建 ActionForm 类以持有请求参数,我们需要在 struts 配置文件中配置它 。 QQ Struts2 请求参数映射在苍蝇上完成,我们需要的只是动作类中拥有java豆属性或执行ModelDriven接口,以提供java豆类名称用于映射. QQ QQ Tag Support QQ Struts1 使用 JSTL 标签,因此是有限的. QQ Struts2使用OGNL并提供了不同类型的UI,Control和数据标记. 更能多能多能多能方便用. ++ ++ 验证 ++ Struts1 通过人工验证方法支持验证 ++ Struts2 既支持人工验证,也支持验证框架整合. QQ QQ Views Rendering QQ Struts1使用标准JSP技术为JSP页面提供豆分值来取景. QQ Struts2 使用 valueStack 存储请求参数和属性,我们可以使用 OGNL 和 Struts2 标记来访问它们. QQ QQ 模块支持 QQ Struts1 模块是复杂的设计,看起来像是独立的项目 QQ Struts2 为软件包提供了"命名空间"配置,以方便创建模块. |
  2. Struts2的核心组件是什么? (_)

) Struts2 核心组件为:1. 动作类 . 2. 拦截器 3. 结果页面, FreeMarker 模板的 JSP 4. 价值数据库、 OGNL 和标签库

Struts 2 Architecture Diagram

  1. 联合国 ### Struts2的拦截器是什么? 截取器是Struts2框架的骨干. Struts2截取器负责框架完成的大部分处理,如将请求参数传递给动作类,使Servlet API请求,响应,会话提供给动作类,验证,i18n支持等. 行动召集负责封装行动课和拦截器,并按顺序发射. 在ActionIconference中使用的最重要的方法是用()方法来追踪拦截器链并引用下一个拦截器或动作. 这是Java EE框架中责任链模式的最好例子之一. () (英语). 9. ### Struts2拦截器采用了何种设计模式? () ) Struts2拦截器是基于拦截滤波器的设计模式. 在拦截器堆栈中引用拦截器与责任链设计模式非常相似。 (_) )10 (英语). ### 在 Struts2 中创建动作课有什么不同的方法( _) ? ) Struts2提供了不同的创建动作课的方法. 1. 通过执行动作接口( _) (英语). 2. 使用 Struts2@ 动作注释
  2. 通过扩展动作支持类
  3. 有执行()方法返回字符串的任何普通java类都可以配置为动作类. () )11 (英语). ### Struts2动作和拦截器是否安全? Struts2 动作课是线程安全的,因为一个对象被即时处理每个请求处理它. Struts2截取器是单通类,并创建了新线程来处理请求,因此它不安全,我们需要仔细执行它们来避免与共享数据发生任何问题. () )12 (英语). ### 在Struts2是哪个班的前线控制员? (_) )'org.apache.struts2. distpatcher.ng.filter.StrutsPrepareAndExecuteFilter'是Struts2中的前置控制器课程,每门请求的处理都从这个课程开始. 更早版本的Struts2使用"org.apache.struts2.dispatcher.Filter Dispatcher"作为前置控制器类. 13 (英语). ### Struts2中的拦截者有何好处? 截取器的一些好处是:-截取器在实现高水平地分离关切方面起关键作用. (-) ) - Struts2截取器可配置,我们可以配置它用于任何我们想要的动作.
  • 我们可以创建自己的自定义截取器来完成一些共同的任务,例如请求参数记录,认证等. 这有助于我们在一个地点处理共同的任务,实现低维护成本。
  • 我们可以创建截取器堆栈,用于不同的动作.
  1. 价值观和OGNL是什么? (_)

) ValueStack是Struts2存储应用程序数据的存储区域,用于处理客户端请求. 数据存储在 ActionContext 对象中,这些对象使用 Thread Local 具有特定请求线程的特有值。 Object-Graph 导航语言(OGNL)是一种强大的表达语言,用于操纵被存储在"ValueStack"上的数据. 在架构图中可以看到,截取器和结果页都可以使用OGNL. 15访问在ValueStack上存储的数据. ### 列出 Struts2 中引入的一些有用的说明吗 ? () ). Struts2中引入的一些重要说明有:1. @ 采取行动创建行动类 2. @ 为多个行动配置单一类别的行动( ) (英语). 3. @ Namespace和 @ Namespaces 用于创建不同的模块 4. @ 结果页 5. @ResultPath用于配置结果页面位置 16。 ### 提供您使用过的重要 Struts2 常数 ? () ),我曾经使用的一些Struts2常数是:1. struts.devMode,用于在开发模式下运行我们的应用程序. 此模式会重新装入属性文件,并提供额外的记录和调试功能. 它在开发我们的应用程序时非常有用,但我们应该在把代码移到生产时关掉它。 () (英语). 2. 设计结果页的位置。 默认情况下, Struts2 在 {WEBAPP-ROOT}/{Namespace} / 查找结果页面, 我们可以用这个常数更改位置 。 () (英语). 3. struts.custom.i18n.资源,用于定义i18n支持的全球资源捆绑。 ( (英语). 4. struts.action.extension 为Struts2应用程序配置URL后缀. 默认后缀是. action,但有时我们可能想要将其修改为.do或其他东西. () ) 我们可以像下面的struts.xml文件中配置在常数之上的.(- ) <恒定名='struts.devMode' 值="真" >< (- ) <恒定名="struts. action. extension" 值="行动",do" >< (- ) <恒定名="stuts.custom.i.i18n.resources" 值="全球" >< (- ) <恒定名="struts.convention.rest.rest.path"值=" (- ) (- 17). ### Struts2 中的命名空间在动作映射中有什么用? (_) ) Struts2 命名空间配置允许我们轻松创建模块. 我们可以使用命名空间来根据它们的功能来区分我们的动作类,例如管理员,用户,客户等 18. ### 哪个拦截器负责将请求参数映射到动作类Java Bean属性? (_) )'com.open symphony.xwork2.interceptor.Parameters Interceptor'截取器负责将请求参数映射到动作类java豆属性. 此截取器被配置在 struts- default 包中,其名称为"params". 此截取器是基本Stack和默认Stack截取器堆栈的一部分. 19. ### 哪个拦截器负责i18n支持? (_) )'com.opensymphony.xwork2.interceptor.I18nInterceptor'截取器负责在Struts2应用中的i18n支持. 此截取器被配置在 stuts-default 包中,其名称为"i18n",是i18nStack和默认Stack的一部分. 20 (英语). ### 将Action 界面和Action 支持类用于我们的行动类有何不同, 您喜欢哪个? (_) (英语). 我们可以实施"行动"接口来创建行动课. 此接口有一个我们需要执行的单一方法执行() 。 使用这个接口的唯一好处是它包含了一些我们可以用于结果页的常数,这些常数是SUCCESS,ERROR,NOE,INPUT和LOGIN. ActionSupport类是Action接口的默认执行,它也执行与验证和i18n支持相关的接口. ActionSupport Class 执行 Action, 校验, 校验Aware, TextProvider 和 LocaleProvider 接口. 我们可以推翻ActionPack类的验证()方法,将实地一级的验证登录纳入我们的行动类. 根据要求,我们可以使用任何方法来创建Struts 2 动作类,我最喜欢的是Action Support类,因为它有助于在动作类中轻松地写入验证和i18n逻辑. 21 (英语). ### 如何将 Servlet API 请求、响应、 HttpSession 等对象纳入动作类? (_) ) Struts2动作类不提供直接访问Servlet API组件,例如请求,响应,和会话. 然而,有时我们需要在诸如检查HTTP方法或设置cookie以回应等动作类中进行这些访问. 因此,Struts2 API提供一串能被我们用来访问这些对象的*智能接口. Struts2 API使用依赖性注射在动作类中注入Servlet API组件. 一些重要的感知界面有SessionAware,应用程序Aware,ServletArequestAware,以及ServletResponseAware. 您可以在` 如何获得 Servlet API 会话在 Struts2 动作类中` (/ community/touritions/ get- servlet- session- request- responservation-context-atimes- struts-2- action) 教程中读取更多关于它们的内容 。 22。 ### 执行和等待拦截器有什么用? Struts2为长期运行的动作课提供ExecAnd等截取器. 我们可以使用这个截取器将中间响应页还给客户端,处理完成后,最后响应会返回客户端. 此截取器在 starts-default 套件中被定义,执行则在"Execute And Wait Interceptor"类中被显示. 请检查access-date=中的日期值 (帮助) [Struts2 Execut And Wait 截取例] (/community/tutorys/struts2-exectand-inter-exect-exect-exect-exect- for-long-run-running-actions]) 以了解更多关于这个截取器和如何使用. 23. ### Struts2 中信使截取器的用法是什么? 网络应用程序的主要问题之一是双重格式提交. 如果不加以注意,提交双重表格可能导致向客户收取双重金额或两次更新数据库值。 我们可以使用符号截取器来解决双重形式提交问题. 这个截取器在struts-default包中被定义了,但它不是任何截取器堆栈的一部分,所以我们需要将它手动列入我们的动作类. 更多信息,请查阅[Struts2 令牌截取器](/community/tourises/struts2-token-interceptor-example) )24 (英语). ### 如何在 Struts2 应用程序中整合log4j ? (_) ) Struts2为日志目的提供了log4j API的简单集成,我们需要的只是WEB-INF/类目录中的log4j配置文件. 您可以在[Struts2 Log4j集成](/community/tutors/struts2-和-log4j-集成-实例-项目)查看样本项目。 (_) )25 (英语). ### 什么是不同的Struts2标签? 我们如何使用它们? Struts2提供了很多自定义标记,我们可以在结果页面中用于创建客户端请求的视图. 这些标签大致分为三类 - 数据标记,控制标记和UI标记. 我们可以通过使用taglib指令在JSP页面中添加这些标记来使用. <%@ (taglib uri="/struts-tags"前缀="s") %> ``` (一些重要的数据标记是属性,设置,推出,豆,动作,包括,i18n和文本标记. 更多信息,请查阅Struts2数据标记。 控制标记用于对收集的数据进行操纵和导航。 一些重要的控制标记有:if-elseif-else,迭代器,附件,合并,排序,子集和生成器标记. 更多信息,请查阅[Struts2 Control Tags] (/community/tourises/struts-2-control-tags-example-turology). Struts2 UI标记用于生成HTML标记语言,将HTML形式数据绑定到动作类属性,类型转换,验证,以及i18n支持. 一些重要的UI标记有形式,文本字段,密码,文本区,复选框,选择,收音机和提交标记等. 在[Struts2 UI Tags] (/community/tutorys/struts-2-ui-tags-form-checkbox-radio-select-sumit)查阅更多关于它们的信息. (). MKBR1)26 (英语). ### Struts2 中的自定义类型转换器是什么( ) MKBR1) Struts2支持OGNL表达语言,它执行Struts 2中的两个重要任务-数据传输和类型转换. OGNL是灵活的,我们可以轻松地扩展它以创建我们自己的自定义转换器类. 创建和配置自定义类型转换器类非常容易. 第一步是固定自定义类的输入格式. 第二步是实施转换器类. 类型转换器类应实施"com.opensymphony.xwork2.conversion.TypeConverter"接口. 由于在web应用程序中,我们总是以字符串的形式获得请求,并以字符串的形式发送回复,Struts 2 API提供了Type Converter接口的默认执行. StrutsType Converter. StrutsType Converter 包含两种抽象方法 — 转换 从字符串转换为对象并转换 将对象转换为字符串 。 实施细节改为:Struts2 OGNL 实例教程。 (_ MKBR1_)27 (英语). ### 我们怎样才能写出自己的拦截器并绘制出行动地图? (_ MKBR1_ (英语). 我们可以实施`com.opensymphony.xwork2.interceptor.Interceptor'接口来创建我们自己的拦截器. 一旦拦截器课准备好,我们需要在图克特.xml包中定义我们想要使用的地方. 我们还可以使用自定义的截取器和默认的Stack截取器来创建截取器堆栈. 之后,我们可以配置它 用于动作课 我们想要使用我们的拦截器。 使用自定义截取器的一个最佳例子是验证会话,在Struts2 截取器教程上读取更多关于它的内容. () MKBR1)28 (英语). ### 拦截器的生命周期是什么? () MKBR1) 截取器接口定义了三种方法-init (), destroy ()和截取 (. 进入和摧毁是拦截器的生命周期方法。 拦截器为Singleton类,Struts2初始化了一款新线程来处理每个请求. init () 方法在创建截取器实例时被调用, 我们可以在此方法中初始化任何资源 。 当应用程序关闭时, destroy () 方法被调用, 我们可以在此方法中释放任何资源 。 截取 () 是每次客户端请求通过截取器时被调用的方法. () MKBR1)29 (英语). ### 什么是拦截器堆栈? (_ MKBR1_) 一个截取器堆栈帮助我们将多个截取器组合在一个包中,供进一步使用. struts-default 软件包创建一些最常用的截取器堆栈 - BasicStack和默认Stack. 我们可以在软件包开始时创建自己的截取器堆栈,然后配置我们的动作类来使用. 30. ### 什么是 struts-default 软件包, 有哪些好处( _ MKBR1_)struts-default是一个抽象包,它定义了所有的Struts2截取器和常用的截取器堆栈. 最好在配置我们的应用程序包的同时扩展这个软件包,以避免再次配置拦截器. 提供此功能是为了帮助开发者消除在我们的应用程序中配置截取器和结果页面的琐碎任务. 31 . ### Struts2 动作 URI 的默认后缀是什么, 我们如何改变它 ? () MKBR1) Struts2 动作的默认URI后缀为. action,在 Struts1 默认后缀为.do. 我们可以在 Struts2 配置文件中定义 struts. action.extension 常数值来更改此后缀 :\ <恒定名="struts. action.extension' value="action, do" / constant > _ 32. ### 结果页面的默认位置是什么? 我们如何修改它( _ MKBR1_) 默认 Struts2 在 {WEBAPP-ROOT}/{Namespace}/ 目录中查找结果页面, 但有时我们希望将结果页面保存在另一个位置, 我们可以在 Struts2 配置文件中提供 struts.convention.result.path常数来更改结果页面位置 。 另一种方法是在动作类中使用@ResultPath注释来提供结果页位置. 33. ### 如何在 Struts2 应用程序上传文件 ? (_ MKBR1_) 文件上传是网络应用程序中常见的任务之一. 因此Struts2通过FileUploadInterceptor为文件上传提供内置支持. 此截取器被配置在struts-default包中,并提供选项来设置一个文件和文件类型的最大大小,可以上传到服务器. 更多信息,请访问 FileUpload 截取器 at [Struts2 文件上传例] (/community/tutoris/struts-2-file-upload-example). (). MKBR1) 34 (英语). ### 在开发Struts2应用时可遵循哪些最佳做法? () MKBR1) 开发Struts2应用时的一些最佳做法有:1. 总是尝试扩展 struts-default 软件包,同时创建您的软件包以避免配置截取器中的代码冗余. (_ MKBR1_ (英语). 2. 对于整个应用程序的共同任务,例如伐木请求参数,尝试使用拦截器。 () MKBR1 (英语). 3. 始终将动作类java豆属性保存在一个单独的豆中,用于代码再用,并落实ModelDriven接口. (_ MKBR1_ 4. 如果您有将在多个动作中使用的自定义截取器,请为此创建截取器堆栈,然后使用. 5. 尝试将您的应用程序分到不同的模块中,根据功能区域进行命名空间配置. (_ MKBR1_) 6. 在结果页中尝试使用 Struts2 标记来澄清代码, 如果需要的话, 请创建自己的类型转换器 。 () MKBR1 (英语). 7. 使用开发模式来加快开发,但要确保生产代码不会在dev模式中运行。 () MKBR1 8. 使用 Struts2 i18n 支持资源捆绑并支持本地化. (_ MKBR1_ (英语). 9. Struts2提供了很多可以拥有资源捆绑的地方,但试图保留一个全球资源捆绑和一个用于动作类以避免混淆. (_ MKBR1_) 10. struts-default 包配置了所有的截取器并创建了不同的截取器堆栈. 尝试只使用需要的东西,例如如果没有本地化要求,可以避免i18n截取器. (_ MKBR1_ (英语). 35. ### 如何处理 Struts2 中应用的例外? () MKBR1) Struts2为例外处理提供了非常强大的框架. 我们可以在软件包中指定全球结果,然后绘制这些结果页的具体例外。 可以在全球一揽子计划一级和行动一级进行例外绘图。 当出现一些未被应用程序处理的出乎意料的例外时,有一个例外结果页面来向用户提供一些信息是一个好主意. struts.xml文件中的样板配置外观如下:
<package name="user" namespace="/""扩展"="struts-default" >(-MKBR1_) (MKBR1_) <result name=""例外" <exult name="运行时间"/运行时间".jsp <result name="errr.jsp"/result (-MKBR1_) <例外-mappingings="java.lang. 例外"结果="例外"+"例外-映射" <例外-映射例外="java.lang.Error"结果="error"+"例外-映射" <例外-映射例外="java.lang.Runtime Exception"结果="运行时间-映射" </Global-映射-映射' <行动名称="我的动作"类=".com.journal.struts2.unition.My Action" MKBR1_) <action name="我的特效"类="com.journaldev.struts2.unition. My Special Action" (_ MKBR1_) <例外-映射例外="java.io.IOException' result="login"> <结果名="login" >/error.jsp

在 [Struts2例外处理例] > (/communities/tures/struts2-ext-example-turn) >

这就是Struts2采访问题和答案,如果你遇到我错过的任何重要问题,请通过评论告诉我。

Published At
Categories with 技术
comments powered by Disqus