Struts2面试题_Struts2框架面试题及答案 - 极悦
面试题首页 > Struts2面试题

Struts2面试题

001谈谈你对MVC的理解?

MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。
模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性。
控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。然后根据处理的结果调用相应的视图来显示处理的结果。
MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。

002简单介绍一下Struts2?

Struts2框架是一个按照MVC设计模式设计的WEB层框架,是在Struts 1和WebWork的技术基础上进行了合并的全新的框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。
我们可以把Struts2理解为一个大大的Servlet,而这个Servlet就是ActionServlet。Struts2在处理客户端请求时,会先读取web.xml配置文件,根据前端控制器将符合条件的请求分给各个不同的Action处理。在此之前,ActionServlet会把数据封装成一个JavaBean。
Struts2框架提供了许多的拦截器,在封装数据的过程中,我们可以对数据进行一些操作,例如:数据校验等等。当Action执行完后要返回一个结果视图,这个结果视图可以跟据struts2的配置文件中配置,选择转发或者重定向。

003Struts2有哪些优点?

1.在软件设计上Struts2的应用可以不依赖于Servlet API和struts API。 Struts2的这种设计属于无侵入式设计; 
2.拦截器,实现如参数拦截注入等功能; 
3.类型转换器,可以把特殊的请求参数转换成需要的类型; 
4.多种表现层技术,如:JSP、freeMarker、Velocity等; 
5.Struts2的输入校验可以对指定某个方法进行校验; 
6.提供了全局范围、包范围和Action范围的国际化资源文件管理实现;

004Struts2是如何启动的?

1.Struts2框架是通过Filter启动的,即StrutsPrepareAndExecuteFilter,此过滤器为struts2的核心过滤器; 
2.StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件。

005Strust2如何访问Servlet API?

1)通过ActionContext可以获得request,application,session三个作用域(struts2实际上是通过适配器来把servlet的api转换为一个map,并把这些map放在ActionContext里面)。
2)通过ActionContext的子类ServletActionContext去获取原滋原味的API。
3)可以通过实现ServletRequestAware接口,重写里面的setServletRequest方法可以获得request,实际上是通过set的依赖注入。

006Struts2 如何定位action中的方法?

1)感叹号定位方法(动态方法)。
2)在xml配置文件中通过配置多个action,使用action的method指定方法。
3)使用通配符(*)匹配方法。

007result的type属性中有哪几种结果类型?

一共10种:   
dispatcher是默认的结果类型,把控制权转发给应用程序里的某个资源。
redirect把响应重定向到另一个资源(包括一个外部资源) 
redirectAction把响应重定向到另一个 Action 
freemarker、velocity、chain、httpheader、xslt、plainText、stream 

008ActionContext、ServletContext、pageContext的区别?

1.ActionContext是当前的Action的上下文环境,通过ActionContext可以获取到request、session、ServletContext等与Action有关的对象的引用; 
2.ServletContext是域对象,一个web应用中只有一个ServletContext,生命周期伴随整个web应用; 
3.pageContext是JSP中的最重要的一个内置对象,是JSP四个域对象中最小的。可以通过pageContext获取其他域对象的应用,同时它是一个域对象,作用范围只针对当前页面,当前页面结束时,pageContext销毁。

009Struts2常量的修改方式?

常量可以在struts.xml或struts.properties中配置,两种配置方式如下: 
1.在struts.xml文件中配置常量 
<constant name="struts.action.extension" value="do"/> 
2.在struts.properties中配置常量(struts.properties文件放置在src下): 
struts.action.extension=do

010关于Struts的描述中,不正确的是(D)

A. Struts 是一个基于JAVA EE的MVC
B. Struts2的框架配置文件是struts-configxml
C. Struts2的控制组建核心包括核心控制和业务控制器
D. 在Struts中解决中文乱码可以通过修改struts。I18n。encoding的值为GBK来实现

011Struts中数据验证失败时,通过( B )标签显示错误信息。

A <s:text>
B <s:error>
C <s:faild>
D <s:fielderror>

012以下属于struts2的控制器组件的是:(A)

A. Action 
B. ActionForm 
C. ActionServlet 
D. DispatchAction

013以下属于struts2的体系结构的是: (AB)

A. struts2控制器组件 
B. struts2配置文件 
C. FilterDispatcher 
D. Action

014以下属于struts2配置文件的配置元素是:( AB)

A. <package> 
B. <action> 
C. <form-bean> 
D. <action-mapping>

015关于struts1和struts2对比的说法正确的是:( A)

A. struts1要求Action类继承其框架中的Action父类,struts2则不一定需要继承,可以是POJO类
B. struts1的Action不是线程安全的,struts2的Action是线程安全的
C. struts1和struts2都使用ActionForm对象封装用户的请求数据
D. struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值

016以下关于ValueStack说法正确的是:( ACD)

A. 每个Action对象实例拥有一个ValueStack对象
B. 每个Action对象实例拥有多个ValueStack对象
C. Action中封装的需要传入下一个页面的值,这些值封装在ValueStack对象中
D. ValueStack会在请求开始时创建,请求结束时消亡

017关于struts2配置中用 (C)

A. 必须在WEB-INF/classes目录下
B. 名字必须为strutss.xml
C. 配置Action时,必须配置包信息
D. 使用<forward>元素配置转发

018在struts配置中用(C)元素配置常量

A. <const>
B. <constants>
C. <constant>
D. <constant-mapping>

019关于struts2包说法正确的是:(BCD)

A. struts2框架使用包来管理常量
B. struts2框架定义包时必须指定name属性
C. struts2框架中配置包时,必须继承自struts-default包,否则会报错
D. struts2框架中使用包来管理Action

020struts2中获取Servlet API的方法正确的是:(AD)

A. 使用ActionContext对象以解耦合的方式访问Servlet API
B. 使用ServletActionContext对象以解耦合的方式访问Servlet API
C. 使用ActionContext对象以耦合的方式访问Servlet API
D. 使用ActionContext对象以耦合的方式访问Servlet API

021如果要实现struts2的数据检验功能(C)

A. 普通的Action类可以实现
B. 继承自Action接口的可以实现
C. 继承自ActionSupport类可以实现
D. 继承自ActionValidate类可以实现

022如果要实现自定义处理结果,需要继承哪个类 (B)

A. Dispatcher
B. StrutsResultSupport
C. Support
D. Action

023实现动态返回结果,在配置<resule>元素时使用(A)指定视图资源

A. ${属性名}
B. @{属性名}
C. ${'属性名'}
D. ${"属性名"}

024用于实现国际化的struts2标签的是 (A)

A. <s:text> 
B. <s:message> 
C. <s:textfile> 
D. <s:resource>

025自定义拦截器类的方式有:(AD)

A. 实现Interceptor接口
B. 实现AbstractionInceptor接口
C. 继承Interceptor类
D. 继承AbstractionInceptor类

026在struts.xml文件中,使用(B)定义拦截器

A. <interceptor-ref>
B. <interceptor>
C. <intercep>
D. <defaull-interceptor-ref>

027在OGNL中?操作符的作用是(C)

A. 取出符合选择逻辑的第一个元素
B. 取出符合选择逻辑的第=最后一个元素
C. 取出符合选择逻辑的所有元素
D. 以上说法都不对

028以下哪个标签是struts2中用于循环迭代的(B)

A. <s:property> 
B. <s:iterator>
C. <s:logic>
D. <s:foreach>

029以下关于OGNL的说法正确的是(AC)

A. ActionContext是OGNL上下文环境
B. StackContext是OGNL上下文环境
C. ValueStack是OGNL根
D. ActionContext是OGNL根

目录

返回顶部