struts专题

Struts2面试题

  1. 什么是Struts2
    Apache Struts2的是一个在Java中构建Web应用程序开源框架。 Struts2是基于OpenSymphony的WebWork的框架。它是Struts1的提高,它更加灵活,易于使用和扩展。 Struts2的核心组成部分是Action,拦截器和结果页。

    Struts2提供了许多方法来创建Action类,并通过struts.xml中或通过注释进行配置。我们可以创建自己的拦截器实现常见任务。 Struts2中自带了很多的标签,并使用OGNL表达式语言。我们可以创造我们自己的类型转换器来呈现的结果页面。结果页面可以JSP和FreeMarker的模板。

  2. Struts1和Struts2的区别是什么?

    组件 Struts1 Struts2
    Action 类 需要强迫继承一个类,不灵活 只要实现Action接口, 完成execute()
    线程安全 Action类是单例的,非线程安全,编程时要注意多线程副作用 action类每次请求一个(性能降低) 。
    Servlet API 耦合 Struts1 API 与Servlet API 紧紧耦合,Request和Response 对象直接传入execute() 方法(虽然很方便) Struts2 API 和Servlet API松耦合,自动将表单bean数据映射到action类的javabean属性(struts1也可以通过ActionForm实现)。
    测试 Struts1 action类因为和Servlet API 耦合难于测试 Struts2 Action 类是一个正常Java类,易于测试。

    Request

    参数映射

    Struts1 需要我们创建 ActionForm 类来 hold request 参数,还需要配置 Struts2 request参数映射是自动的,我们只要有相应的java bean属性在action类中,或实现 ModelDriven接口提供java bean 类名用于映射。
    标签支持 Struts1 使用 JSTL 和自己的表情。 Struts2 使用 OGNL
    校验 Struts1 支持validate() 方法手动 Struts2 支持手动和验证框架整合。
    视图输出 Struts1 使用标准JSP 输出 Struts2 使用 ValueStack 存储请求参数和属性,使用OGNL 和 Struts2 标签访问



  3. Struts2的核心组件?
    Action 类
    Interceptors拦截器
    结果页面, FreeMarker 模板的JSP
    ValueStack, OGNL 和 Tag库


  4. 创建Action类有几种方法?
    s实现Action 接口
    使用Struts2 @Action 元注解
    继承ActionSupport类
    必须实现 execute() 方法,返回一个可配置的字符串

  5. Action和拦截器线程安全吗?
    Struts2的Action类是线程安全的,因为每个请求一个实例。
    Struts2的拦截器是单例,所以它不是线程安全的,我们需要仔细地实现它们,以避免与共享数据的任何问题。

  6. Struts2的拦截器执行什么模式?
    过滤器decorator模式职责链模式

  7. Struts2的前端控制器是什么?
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 每次请求处理从这里开始。

  8. 什么是ValueStack和OGNL?
    ValueStack是一个用来处理客户端请求的数据存储区,数据存储在ActionContext中,这是用ThreadLocal为每个请求线程创建的,生命周期是请求级别。

    对象图导航语言Object-Graph Navigation Language (OGNL) 是用户将储存在valuestack中的数据导出,使用OGNL拦截器和结果页面都能访问到ValueStack的数据。

  9. Struts2有用的标签有哪些?
    @Action创建action
    @Actions 配置一个类为多个Action
    @Namespace 和 @Namespaces 用于创建不同的模块
    @Result 用于结果页面
    @ResultPath用于配置结果页面的定位。

  10. Struts2重要的常量?
    struts.devMode 是运行在开发调试模式,提供日志和调试功能,提交生产环境需要关闭。
    struts.convention.result.path 配置结果页面的位置,缺省Struts2在 {WEBAPP-ROOT}/{Namespace}/下寻找结果页面, 用这个常量能够改变这个位置。
    struts.custom.i18n.resources 用来定义 i18n 支持.
    struts.action.extension
     用来配置应用程序的URL后缀. 缺省是后缀 .action。
    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.action.extension" value="action,do"></constant>
    <constant name="struts.custom.i18n.resources" value="global"></constant>
    <constant name="struts.convention.result.path" value="/"></constant>

  11. Struts2的名称空间namespace 有什么用?
    我们能使用名称空间基于功能分离我们的Action类,如admin user和客户等模块。

  12. 什么拦截器负责将请求参数映射到action类的java bean属性?
    com.opensymphony.xwork2.interceptor.ParametersInterceptor 配置在struts-default包中,名称是"params"。这是basicStack和 defaultStack一部分。

 

Spring面试问题和答案

Java Collection集合面试题

.AngularJS专辑

MVC模式

前端框架