专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 15道经典struts2面试题(附答案)

15道经典struts2面试题(附答案)

更新时间:2020-10-30 10:49:06 来源:动力节点 浏览2711次

框架一直都是java编程技术学习中的重点,Struts2是个非常优秀的开源框架,一名java程序员要求能用Struts2框架进行开发,所以在java面试题中也会经常出现对struts2知识的考察,下面整理了经典struts2面试题,这些题目中包含的是常考struts2框架知识点,有面试需要的朋友们可以看看下面总结的struts2面试题。

image.png

1、描述Struts2的工作原理是怎样的?

答:客户端发送请求→请求经过一系列过滤器→FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action→FilterDispatcher把请求的处理交给ActionProxy→通过ConfigurationManager询问Struts配置文件(Struts.xml),找到需要调用的Action类→ActionProxy创建一个ActionInvocation的实例→调用Action→执行完毕,返回结果


2、Struts2有哪些优点?

答:(1)在软件设计上Struts2的应用可以不依赖于Servlet API和struts API,Struts2的这种设计属于无侵入式设计;(2)拦截器,实现如参数拦截注入等功能;(3)类型转换器,可以把特殊的请求参数转换成需要的类型;(4)多种表现层技术,如:JSP、freeMarker、Velocity等;(5)Struts2的输入校验可以对指定某个方法进行校验;(6)提供了全局范围、包范围和Action范围的国际化资源文件管理实现;(7)实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现,有丰富的tag可以用,大大提高了开发效率。


3、在struts2中如何实现转发和重定向?

答:在struts.xml中配置type="redirect"(重定向);type="redirectAction"(重定向);type="dispatcher";type="chain";(请求转发)


4、Struts2中的type类型有哪些?

答:chain、redirec、,redirectAction、json、dispatcher。


5、struts2默认能解决get和post提交方式的乱码问题吗?

答:不能。struts.i18n.encoding=UTF-8属性值只能解析POST提交下的乱码问题。


6、拦截器和过滤器的区别有哪些?

答:(1)拦截器是基于java反射机制的,而过滤器是基于函数回调的;(2)过滤器依赖于servlet容器,而拦截器不依赖于servlet容器;(3)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用;(4)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能;(5)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。


7、ActionContext、ServletContext、pageContext的区别?

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


8、Struts2中Action配置的注意事项有哪些?

答:需要注意的是(1)name包名称,在struts2的配置文件中,包名不能重复,name并不是真正包名,只是为了管理Action;(2)namespace和 的name属性,决定Action的访问路径 (以/开始 ) ;(3)extends继承哪个包,通常开发中继承struts-default包(struts-default包在 struts-default.xml 中定义 )。

image.png

9、Struts2的封装方式有哪些?

答:一是属性封装:(1)在action中设置成员变量,变量名与表单中的name属性值相同;(2)生成变量的set方法。

二是模型驱动(常用):(1)action实现ModeDriven接口;(2)在action 里创建实体类对象;(3)实现接口的getModel方法并返回所创建的对象。

三是表达式封装:(1)在action中声明实体类;(2)生成实体类的set和get方法;(3)在表单输入项的name属性值里面写表达式。


10、Action和拦截器线程安全吗?

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


11、Struts2的名称空间namespace 有什么用?

答:我们能使用名称空间基于功能分离我们的Action类,如admin user和客户等模块。


12、什么拦截器负责将请求参数映射到action类的java bean属性?

com.opensymphony.xwork2.interceptor.ParametersInterceptor 配置在struts-default包中,名称是"params"。这是basicStack和 defaultStack一部分。


13、简述Struts2工作流程

答:(1)客户端浏览器发出HTTP请求;(2)根据web.xml配置,该请求被FilterDispatcher接收;(3)根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton;(4)Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证;(5)Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面;(6)返回HTTP响应到客户端浏览器


14、拦截器的生命周期与工作过程?

答:(1)每个拦截器都是实现了Interceptor接口的java类;(2)init(): 该方法将在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化;(3)intercept(ActionInvocation invocation): 每拦截一个动作请求, 该方法就会被调用一次;(4)destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次;(5)struts2中有内置了18个拦截器。


15、Struts2中拦截器有哪些好处?

答:拦截器的一些好处是:拦截器在实现高度分离关注方面起着至关重要的作用。Struts2拦截器是可配置的,我们可以为我们想要的任何动作配置它。我们可以创建自己的自定义拦截器来执行一些常见任务,例如请求参数记录,身份验证等。这有助于我们在一个位置处理常见任务,从而降低维护成本。我们可以创建拦截器堆栈以用于不同的操作。


Struts2 是一个相当强大的javaweb开源框架,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程,是java程序员必须会使用的框架,所以上面的Struts2面试题大家要认真学习,都是关于Struts2相关的基本知识,在java面试题中出现的几率很大。希望这15道Struts2面试题对大家的面试可以有所帮助,并通过java教程中对Struts2框架的学习,可以掌握快速搭建好一个Struts2框架的技能。


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

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