专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 程序员必会的10道struts2面试题

程序员必会的10道struts2面试题

更新时间:2020-10-14 17:14:11 来源:动力节点 浏览1216次

Struts2用于接受页面信息然后通过内部处理,将结果返回,是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet。在java程序员的面试中,会有很大的概率出现,因此struts2面试题是大家在参加java面试前需要学习的内容,这篇文章盘点了常考的基础struts2面试题,一起来学习吧!

image.png

1、Struts2与Struts1的联系与区别,为什么要用Struts2?

答:二者之间的联系:struts1与struts2都是mvc框架的经典实现模式。

Struts2不是从Struts1升级而来,而是有WebWork改名而来,而WebWork只是Xwork加了很多WEB拦截器而已。

区别:(1)核心控制器改成了过滤器(过滤器比Servlet的级别要高,因为程序运行时是先进入过滤器再进入Servlet);(2)struts1要求业务类必须继承Action或dispatchAction,struts2不强制这么做,只需要提供一个pojo类;(3)管理Action时struts1是单例模式,struts2是每个请求产生一个实例;(4)在表达式的支持上struts2不仅有jstl,还有功能更加强大的ognl表达式;(5)struts2支持多种视图类型,如:jsp,freemaker,velocity,源代码等。


2、Struts2的核心是什么?体现了什么思想?

答:Struts2的核心是拦截器,基本上核心功能都是由拦截器完成,拦截器的实现体现了AOP(面向切面编程)思想。


3、Struts2是怎样进行值封装的?

答:struts2的值封装实际上是采用了ognl表达式。struts2的拦截器经过模型驱动时会先判断action是否实现了ModelDriven,如果是则拿到模型的实例放在了栈的顶部,到属性驱动的时候会从栈里面把栈顶的实例给取出来,从页面传进来的值放在一个map集合当中,通过map集合进行迭代会通过ognl技术把值封装到实例中。


4、谈谈Struts2 的国际化?

答:在struts2中是使用了拦截器来实现国际化。struts2的国际化分为三部分:(1)Action范围,这种范围是用Action的实现类的类名来作为前缀__语言名称_国家地区名(大写).properties;(2)包范围,包范围是用package作为前缀__语言名称_国家地区名(大写).properties;(3)全局范围,全局范围的前缀默认的是application,可以通过xml配置文件配置常量(使用constant标签注册i18l拦截器)来指定前缀,前缀__语言名称_国家地区名(大写).properties。

国际化实现的原理:通过i18n拦截器获得请求参数request——locale的值(zh或者是en)并把当前的值转化为locale对象,把locale对象存在ww_trans_i18n_locale的session作用域中,根据struts2的请求处理流程,拦截器只会在进入action的时候才会调用,所有我们一般把对jsp的访问转化为对action的访问。


5、Strust2如何访问Servlet API?

答:(1)通过ActionContext可以获得request,application,session三个作用域(struts2实际上是通过适配器来把servlet的api转换为一个map,

并把这些map放在ActionContext里面);(2)通过ActionContext的子类ServletActionContext去获取原滋原味的API;(3)可以通过实现ServletRequestAware接口,重写里面的setServletRequest方法可以获得request,实际上是通过set的依赖注入。


6、什么是Struts2中的拦截器?

答:拦截器是Struts2 Framework的支柱。Struts2拦截器负责框架完成的大部分处理,例如将请求参数传递给动作类,使Servlet API请求,响应,会话可用于Action类,验证,i18n支持等。

ActionInvocation负责封装Action类和拦截器并按顺序触发它们。在ActionInvocation中使用的最重要的方法是invoke()方法,它跟踪拦截器链并调用下一个拦截器或动作。这是Java EE框架中责任链模式的最佳示例之一。


7、列举Struts2中引入的一些有用的注释?

答:Struts2中引入的一些重要注释是:

@Action创建动作类

@Actions为多个动作配置单个类

@Namespace和@Namespaces用于创建不同的模块

@Result用于结果页面

@ResultPath用于配置结果页面位置


8、怎样能在动作类中获得Servlet API请求,响应,HttpSession等对象?

答:Struts2操作类不提供对Servlet API组件的直接访问,例如Request,Response和Session。但是,有时我们需要在操作类中进行这些访问,例如检查HTTP方法或设置响应中的cookie。

这就是为什么Struts2 API提供了一堆* Aware接口,我们可以实现这些接口来访问这些对象。Struts2 API使用依赖注入在操作类中注入Servlet API组件。一些重要的Aware接口是SessionAware,ApplicationAware,ServletRequestAware和ServletResponseAware。


9、Struts2中令牌拦截器的用途是什么?

答:Web应用程序的主要问题之一是双表单提交。如果不注意,双重表单提交可能会导致向客户收取双倍金额或两次更新数据库值。我们可以使用令牌拦截器来解决双表格提交问题。这个拦截器是在struts-default包中定义的,但它不是任何拦截器堆栈的一部分,所以我们需要在我们的动作类中手动包含它。


10、开发Struts2应用程序时要遵循哪些最佳实践?

答:开发Struts2应用程序时的一些最佳实践是:

(1)在创建程序包时始终尝试扩展struts-default程序包,以避免在配置拦截器时出现代码冗余;

(2)对于整个应用程序中的常见任务,例如记录请求参数,请尝试使用拦截器;

(3)始终将动作类java bean属性保存在单独的bean中以便重用代码并实现ModelDriven接口;

(4)尝试使用基于功能区域的命名空间配置在不同模块中划分应用程序;

(5)尝试在结果页面中使用Struts2标记进行代码说明,如果需要,可以创建自己的类型转换器;

(6)使用开发模式可以加快开发速度,但请确保生产代码不以dev模式运行;

(7)Struts2提供了许多可以拥有资源包的地方,但是尝试保留一个全局资源包,一个用于动作类以避免混淆;

(8)Struts2提供了许多可以拥有资源包的地方,但是尝试保留一个全局资源包,一个用于动作类以避免混淆。


上面就是对struts2面试题的整理,并相应的附上了总结好的答案。Struts2是一种重量级的框架,是位于MVC架构中的controller,是java程序员需要掌握的技能。希望大家可以通过这10道struts2面试题来对自己进行一下检验,更多的面试题请到java面试题栏目查看,遇到不会或者模糊的知识点及时的通过看java视频教程或者专业书的方式来查漏补缺。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>