struts2 面试题总结(含答案)

Posted Java圈子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2 面试题总结(含答案)相关的知识,希望对你有一定的参考价值。

1、描述Struts2的工作原理

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

2、Struts2中的拦截器有什么用?列举框架提供的拦截器名称?(至少3种,可用中文名)

1)拦截器是struts2核心组成部分,它提供了一种机制,使得开发者可以定义一个特定的功能模块,这个模块会在Action执行之前或者之后执行,也可以在Action执行之前阻止Action执行。 

 2)常用的拦截器有: 

chain:在不同请求之间将请求参数在不同名字件转换,请求内容不变 

fileUpload:提供文件上传。 

i18n:记录用户选择的区域环境 

logger:输出Action的名字

params:将请求中的参数设置到Action中去。

3、Struts2有哪些优点?

 1)在软件设计上Struts2的应用可以不依赖于Servlet API和struts API。Struts2的这种设计属于无侵入式设计; 

 2)拦截器,实现如参数拦截注入等功能;

 3)类型转换器,可以把特殊的请求参数转换成需要的类型; 

 4)多种表现层技术,如:JSP、freeMarker、Velocity等;

 5)Struts2的输入校验可以对指定某个方法进行校验;

 6)提供了全局范围、包范围和Action范围的国际化资源文件管理实现 

 7) 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现。有丰富的tag可以用,大大提高了开发效率。(简要)

4、什么是OGNL,有什么用途?如何访问存放在session中叫user的对象的username属性

OGNL是Object-Graph Navigation Language的缩写,也叫对象导航语言。它是Struts的一种功能强大的表达式语言列如:访问session中的user对象的username属性:注意的是:使用前需要在页面头部导入taglib prefix="s" uri="/struts-tags"

5、什么是国际化,struts2实现国际化的原理?

国际化是根据不同的国家和地区的语言文化的不同,所设计的适用于不同地区的编码格式。 

实现方法: 

1)首先在src目录下新建message_en.properties(英文); 

2)页面获取国际化信息或者使用 

原理:程序得到当前运行环境的国际/区域,语言环境并存放于Locale,ResourceBundle根据Locale中信息自动搜索对应的国际化资源文件并加载。

6、AJAX是什么?描述ajax的原理

Ajax又叫异步刷新,(javascript和xml)原理:使用HttpRequest向服务器发送异步请求,服务器返回处理结果

7、什么是反射?请用反射动态创建一个类的对象(写关键代码,其它可省略)

反射,程序运行时动态获取类型信息,完成对象创建,方法调用等。

例如:

Class myclass=Class.forNama("包名.类名");
Student stu=Factory.createInstance("stu1");

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

在struts.xml中配置type="redirect"(重定向);type="redirectAction"(转发)

9、Struts2中的type类型有哪些?至少写4种

chain,redirect,redirectAction,json,dispatcher

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

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

11、说下Struts的设计模式

MVC模式: 

1)web应用程序启动时就会加载并初始化ActionServler。

2)用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法. 

3)Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。

12、拦截器和过滤器的区别

 1)拦截器是基于java反射机制的,而过滤器是基于函数回调的。 

 2)过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。

 3)拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。 

 4)拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。 

 5)在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

13、请你写出struts2中至少5个的默认拦截器?

 fileUpload 提供文件上传功能 

 i18n 记录用户选择的locale 

 cookies 使用配置的name,value来是指cookies 

 checkbox 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的 checkbox。 

 chain 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用。

 alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变

14、ActionContext、ServletContext、pageContext的区别?

 1)ActionContext是当前的Action的上下文环境,通过ActionContext可以获取到request、session、ServletContext等与Action有关的对象的引用; 

 2)ServletContext是域对象,一个web应用中只有一个ServletContext,生命周期伴随整个web应用; 

 3)pageContext是JSP中的最重要的一个内置对象,可以通过pageContext获取其他域对象的应用,同时它是一个域对象,作用范围只针对当前页面,当前页面结束时,pageContext销毁, 生命周期是JSP四个域对象中最小的。

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

 1)每个拦截器都是实现了Interceptor接口的 Java 类; 

 2)init(): 该方法将在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化; 

 3)intercept(ActionInvocation invocation): 每拦截一个动作请求, 该方法就会被调用一次; 

 4)destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次; 

 5)struts2中有内置了18个拦截器。

16、用自己的话简要阐述struts2的执行流程。

Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。  

1)核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。 

2)业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 

Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。 

 基本简要流程如下:

 1)客户端浏览器发出HTTP请求。 

 2)根据web.xml配置,该请求被FilterDispatcher接收。 

 3)根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。 

 4)Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 

 5)Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

 6)返回HTTP响应到客户端浏览器。


- END -


​struts2 面试题总结(含答案)

  往期精彩  


◆  

◆  

◆  



​struts2 面试题总结(含答案)



关注下方二维码

每天推送优质文章

你会有意想不到的收获


以上是关于struts2 面试题总结(含答案)的主要内容,如果未能解决你的问题,请参考以下文章

java程序员面试题大全含答案(2018--2019)

阿里算法工程师——面试题总结(不含答案)

面试数十家Linux运维工程师,总结了这些面试题(含答案)

刚参加完阿里Java P6面试归来,6点面试经验总结!(含必考题答案)

刚参加完阿里Java P6面试归来,6点面试经验总结!(含必考题答案)

软件测试面试题汇总,(测试技术+人力资源+进阶规划)含2020面试题和答案总结