版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts面试题及详细答案(实战干货版)一、基础概念类1、什么是Struts?它的核心作用是什么?答:Struts是一款基于MVC设计模式的JavaWeb开源框架,主要用于规范Web层代码开发,早期是企业JavaWeb项目的主流框架。核心作用:彻底分离Web层的视图、控制器、模型,解决原生Servlet开发代码混乱、耦合度高、重复代码多的问题,让请求处理、业务调用、页面跳转逻辑标准化,提升项目可维护性和开发效率。2、Struts1和Struts2的核心区别是什么?答:两者是完全重构的两个版本,核心差异非常大,主流面试重点对比如下:核心底层:Struts1基于ServletAPI,重度依赖HttpServletRequest、HttpServletResponse;Struts2基于拦截器机制,脱离了原生Servlet依赖,通用性更强。Action设计:Struts1的Action是单例、线程不安全,必须保证线程同步;Struts2的Action是多例、线程安全,每次请求创建新实例,无并发问题。数据接收:Struts1必须继承Action父类,通过FormBean封装请求参数,配置繁琐;Struts2无需继承任何父类,直接通过属性接收参数,支持OGNL表达式,简洁高效。功能扩展:Struts1扩展能力弱,仅有少量内置功能;Struts2拥有完善的拦截器、全局异常处理、国际化、表单校验、文件上传等原生功能。配置文件:Struts1配置繁琐、标签冗余;Struts2配置简洁,支持零配置注解开发。3、简述MVC模式在Struts2中的具体体现答:Struts2严格落地MVC分层,各层职责清晰:M(Model模型层):对应业务逻辑Service、数据持久化DAO、实体类Bean,负责处理业务计算、数据库交互,不参与请求响应逻辑。V(View视图层):对应JSP、HTML、Freemarker等页面,负责数据展示、接收用户前端请求,不处理业务逻辑。C(Controller控制层):对应Struts2的Action、核心过滤器、拦截器,负责接收前端请求、分发请求、调用业务层、控制页面跳转,串联整个请求流程。二、核心原理与执行流程类4、详细描述Struts2的完整请求执行流程答:完整执行流程分为9个核心步骤,是面试高频核心考点:客户端浏览器发起HTTP请求,访问项目对应Action地址;请求首先被Struts2核心过滤器StrutsPrepareAndExecuteFilter拦截,这是所有请求的入口;过滤器创建Action上下文对象ActionContext,初始化请求、响应、会话等上下文数据;核心配置管理器读取struts.xml配置文件,匹配当前请求路径对应的Action;执行默认拦截器栈(参数封装、表单校验、文件上传、编码处理等内置拦截器),预处理请求数据;通过反射创建对应Action实例(多例),自动封装前端请求参数到Action属性中;调用Action中的业务方法(默认execute()方法),执行自定义业务逻辑,调用Service层处理业务;Action执行完成后返回逻辑视图字符串,框架根据struts.xml配置的视图映射,跳转至对应物理视图(JSP/页面);视图渲染完成后,响应数据返回浏览器,本次请求结束,销毁Action实例。5、Struts2核心过滤器StrutsPrepareAndExecuteFilter的作用是什么?答:该过滤器是Struts2的核心入口,所有请求必须经过它处理,核心作用有4点:拦截所有客户端请求,过滤静态资源(图片、JS、CSS),放行静态资源,拦截动态请求交由框架处理;初始化Struts2运行环境,加载核心配置文件、初始化拦截器、Action容器;创建ActionContext上下文,统一管理request、response、session、application等域对象;调度拦截器栈、Action、视图跳转,统筹整个请求的生命周期。6、Struts2的Action为什么是线程安全的?和Servlet、Struts1Action有什么区别?答:Struts2Action是多例模式,每次客户端请求都会通过反射创建一个全新的Action实例,请求结束后实例销毁,多个请求不会共用同一个Action对象,因此不存在并发竞争问题,线程安全。三者对比:Servlet:单例,容器启动时创建唯一实例,所有请求共用,线程不安全;Struts1Action:单例,全局唯一实例,所有请求共享成员变量,线程不安全,开发中必须避免定义成员变量;Struts2Action:多例,一请求一实例,成员变量独立,线程安全。三、核心组件与配置类7、Struts2有哪些核心组件?各自作用是什么?答:Struts2核心组件共5个,分工明确:StrutsPrepareAndExecuteFilter:核心过滤器,请求入口,负责请求拦截、环境初始化、流程调度;Action:控制器核心,处理具体业务请求,封装请求参数,返回视图结果;拦截器(Interceptor):AOP思想实现,在Action执行前后做预处理、后处理,如参数封装、校验、日志、权限控制;ValueStack(值栈):数据存储核心容器,存储Action属性、请求参数、域对象数据,供视图层OGNL取值;Result(视图结果):负责视图跳转,定义逻辑视图与物理视图的映射,支持转发、重定向、跳转页面、跳转Action等多种方式。8、什么是值栈(ValueStack)?值栈的存储结构和取值原理?答:值栈是Struts2专属的数据存储容器,贯穿整个请求生命周期,用于存储Action数据、请求数据,实现控制器与视图的数据传递。存储结构(两大区域):对象栈(Root栈):无键值存储,主要存储当前请求的Action实例,优先级别最高,视图取值优先从对象栈查找;上下文栈(Context栈):键值对存储,存储request、session、application、parameters等域对象数据,取值需要加#号。取值原理:视图层通过OGNL表达式取值,默认优先遍历对象栈,找不到数据再遍历上下文栈,无需手动传值,框架自动封装数据。9、Struts2常用的Result返回类型有哪些?各自适用场景?答:常用5种核心返回类型,适配不同跳转场景:dispatcher(默认):服务器内部转发,地址栏不变,共享请求数据,适用于跳转JSP页面,是最常用类型;redirect:客户端重定向,地址栏更新,不共享请求数据,适用于跳转静态页面、刷新页面场景;chain:转发跳转Action,服务器内部跳转,保留请求参数,适用于多个Action业务串联执行;redirectAction:重定向跳转Action,地址栏更新,不保留参数,适用于需要刷新Action状态的场景;stream:流返回,适用于文件下载、图片回显、导出数据等响应流场景。10、Struts2拦截器的作用?常用内置拦截器有哪些?答:拦截器基于AOP思想,在Action执行之前、之后进行功能增强,不修改Action核心代码,实现代码解耦、功能复用,是Struts2的核心特色。常用内置拦截器:params:自动封装前端请求参数到Action属性;validation:表单数据校验拦截器;fileUpload:文件上传拦截器,封装上传文件数据;encoding:统一请求编码,解决中文乱码;exception:全局异常捕获拦截器,统一处理Action异常;token:防表单重复提交拦截器。所有默认拦截器统一封装在defaultStack默认拦截器栈中,项目默认自动加载。四、实战问题与易错点类11、Struts2如何解决中文乱码问题?答:Struts2自带编码拦截器,默认提供统一乱码解决方案,两种常用方式:全局配置(推荐):在struts.xml中配置全局编码,统一为UTF-8,覆盖所有请求:
<constantname="struts.i18n.encoding"value="UTF-8"/>手动处理:针对特殊场景,通过request.setCharacterEncoding("UTF-8")手动设置编码,一般无需使用。该配置可以同时解决GET、POST请求的中文乱码问题,是项目标准配置。12、Struts2表单参数自动封装的原理?需要满足什么条件?答:封装原理:依靠params拦截器+OGNL表达式,拦截器拦截请求后,解析前端表单参数key,通过反射找到Action中对应的setter方法,自动将参数值注入Action属性中。必须满足2个条件:前端表单name属性值,与Action中的属性名完全一致;Action中必须提供对应属性的setter方法(lombok注解或手动生成均可)。13、Struts2如何实现表单数据校验?两种方式的区别?答:支持两种校验方式,适配不同开发场景:手动代码校验:Action继承ActionSupport,重写validate()方法,在方法中手动判断参数合法性,自定义错误信息,灵活性高,适合复杂校验逻辑。XML配置校验:编写ActionName-validation.xml校验文件,配置参数非空、长度、正则等规则,无需写代码,适合简单固定的校验规则。核心区别:简单校验用XML配置,减少代码冗余;复杂业务校验用代码实现,支持动态判断、联动校验。14、Struts2如何防止表单重复提交?答:依靠内置token拦截器实现,具体步骤:前端JSP页面引入struts标签,使用<s:token/>标签,自动生成唯一随机令牌存入session;在struts.xml中为对应Action配置token拦截器;首次提交时,拦截器校验令牌一致,正常执行业务逻辑,同时销毁session中的令牌;重复提交时,令牌不存在或不匹配,拦截器拦截请求,跳转指定错误页面,阻止重复提交。15、Struts2的全局异常处理如何配置?答:通过struts.xml配置全局异常映射,统一捕获项目所有Action异常,避免页面报错堆栈信息暴露,提升项目安全性。核心配置方式:在全局包下配置global-exception-mappings,指定异常类型和对应跳转页面,可区分系统异常、业务异常,统一兜底处理。五、进阶面试题16、拦截器和过滤器的区别?答:二者都是请求拦截机制,但底层、作用范围、执行时机完全不同,核心区别:底层依据:过滤器基于Servlet规范,依赖Web容器;拦截器基于Struts2框架AOP机制,仅框架内生效。拦截范围:过滤器拦截所有Web请求(静态资源、动态请求均可拦截);拦截器只拦截Struts2管理的Action请求,不拦截静态资源。执行时机:过滤器在请求进入容器后、Action执行前执行;拦截器在过滤器之后、Action执行前后执行。使用场景:过滤器多用于全局编码、跨域、权限过滤;拦截器多用于框架内部功能增强、业务预处理。17、Struts2中Action的三种取值方式?答:项目中常用三种取值方式,优先级和场景不同:属性驱动(常用):Action中定义与表单对应的属性,通过setter自动注入,代码简洁,适合普通参数接收;模型驱动:实现ModelDriven接口,直接返回实体对象,参数自动封装到实体类,适合表单参数对应实体类的场景,代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第七章 网络金融理论
- 安全演讲模板
- 安全应急讲课
- 安全隐患文案
- 安全与法制课
- 甘肃武威市某中学2025-2026学年第二学期高三学情调研(三)考试英语试卷
- 江西部分校2025-2026学年高一下学期期中素养训练数学试卷
- 2026年康复治疗技术操作与评估模拟题库
- 涉税服务相关法律法条精简背诵版
- 小学四年级道德与法治教学设计:这些事我来做第一课时责任启蒙实践
- 2026危险化学品行业安全隐患排查对标手册
- Unit4 A better me Speed up教学课件2026-2027外研版五上英语
- 2026语文新教材 六年级上册第3课 古诗词三首 教学课件
- 河南农商行审计考试试题及答案
- 启发式教学思想和其案例解读培训课件
- 2025年南宁市社区工作者招聘考试《综合能力》真题及答案
- JG/T 245-2009混凝土试验用振动台
- 《石油和化工设备检维修服务 评价规范》
- 手术患者手术风险评估制度
- 2024年中国水运报社有限公司招聘笔试参考题库附带答案详解
- (正式版)HGT 20593-2024 钢制化工设备焊接与检验工程技术规范
评论
0/150
提交评论