基本信息
文件名称:Struts2面试题及答案.docx
文件大小:37.5 KB
总页数:8 页
更新时间:2025-09-25
总字数:约5.9千字
文档摘要

Struts2面试题及答案

1.Struts2的核心组件有哪些?它们之间如何协作?

答案:核心组件包括Action、Interceptor(拦截器)、Result(结果)、ValueStack(值栈)、OGNL表达式、StrutsPrepareAndExecuteFilter(核心过滤器)。

协作流程:

客户端请求先经过StrutsPrepareAndExecuteFilter,过滤器解析请求路径;

找到对应的Action后,先执行该Action关联的拦截器链(如参数封装、验证拦截器);

拦截器执行完后,调用Action的业务方法(默认execute());

Action返回结果码(如success),Struts2根据struts.xml配置找到对应的Result;

Result通过ValueStack和OGNL获取数据,渲染页面并响应客户端。

2.Struts2的配置文件有哪些?加载顺序是怎样的?

答案:常用配置文件有4类:

struts-default.xml(框架自带,定义默认拦截器、Result类型等);

struts-plugin.xml(插件配置,如struts-spring-plugin.jar里的配置);

struts.xml(项目自定义,配置Action、Result、拦截器等,核心配置文件);

perties(可选,用于覆盖框架默认属性,如编码、OGNL开关);

web.xml(配置Struts2核心过滤器StrutsPrepareAndExecuteFilter)。

加载顺序:struts-default.xml→所有struts-plugin.xml→struts.xml→perties(后加载的配置会覆盖前加载的同名配置)。

3.Struts2的Action有几种实现方式?实际项目中常用哪种?为什么?

答案:3种实现方式:

普通POJO类(无任何接口/父类,只需定义execute()方法);

实现com.opensymphony.xwork2.Action接口(重写execute(),获取预定义结果码如SUCCESS);

继承com.opensymphony.xwork2.ActionSupport类(最常用)。

实际项目优先选第3种,因为ActionSupport内置了:

表单验证方法(validate()、validateXxx());

国际化消息处理(getText());

错误信息存储(addFieldError()、addActionError());

预定义结果码(SUCCESS、ERROR等),无需手动定义。

4.拦截器(Interceptor)和过滤器(Filter)的区别是什么?如何自定义Struts2拦截器?

答案:核心区别:

维度

拦截器(Interceptor)

过滤器(Filter)

作用范围

Struts2Action级别的拦截

Servlet容器级别的拦截(所有请求)

生命周期

随Struts2容器创建/销毁

随Servlet容器创建/销毁

访问对象

可访问ActionContext、ValueStack

仅能访问ServletRequest/Response

配置位置

struts.xml

web.xml

自定义拦截器步骤:

写拦截器类:继承AbstractInterceptor,重写intercept(ActionInvocationinvocation)方法;

示例(登录验证拦截器):

publicStringintercept(ActionInvocationinvocation)throwsException{

HttpSessionsession=ServletActionContext.getRequest().getSession();

if(session.getAttribute(user)==null){

returnlogin;//未登录则跳登录页

}

returninvocation.invoke();//已登录则执行后续拦截器/Action

}

在struts.xml配置拦截器和拦截器栈:

package...

!--定义拦截器--

interceptors

interceptorname=loginInterceptorclass=erceptor.LoginInterceptor/

!--自定义拦截器栈(需包含默认拦截器栈,否