版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts高频面试题及详细答案(实战版)一、基础概念类1、简单说说你对Struts2的理解,它的核心作用是什么?Struts2是一款基于MVC设计模式的开源JavaWeb分层框架,主要用于解决传统Servlet开发的弊端,简化Web请求处理流程。传统Servlet开发中,每个请求需要单独写一个Servlet,配置繁琐、代码冗余,参数接收、数据封装、跳转控制、异常处理都需要手动实现。而Struts2统一封装了这些通用逻辑,让开发者只需要专注业务代码开发。其核心作用:接收前端请求、封装请求参数、调用业务逻辑、控制页面跳转,实现视图、控制器、业务逻辑的解耦,提升Web项目的开发效率和可维护性。2、Struts2和Struts1的核心区别是什么?1)设计架构不同:Struts1基于传统ServletAPI,核心是ActionServlet;Struts2基于Filter实现,核心是StrutsPrepareAndExecuteFilter,不依赖Servlet原生API,耦合度更低。2)Action特性不同:Struts1的Action是单例模式,线程不安全,必须保证代码无状态;Struts2的Action是多例模式,每次请求创建新对象,线程安全,开发更简单。3)参数封装不同:Struts1需要手动获取、转换、封装参数;Struts2自动完成参数接收、类型转换、数据封装,支持OGNL表达式取值赋值。4)拦截机制不同:Struts1无原生拦截器,只能通过过滤器实现拦截;Struts2内置强大的拦截器体系,权限、日志、参数校验等通用功能可通过拦截器统一处理。5)配置方式不同:Struts1配置繁琐;Struts2配置简洁,同时支持XML配置和注解配置。3、Struts2的优缺点有哪些?优点:1)分层清晰,严格遵循MVC架构,代码解耦性强;2)自动参数封装、类型转换,减少重复代码;3)内置丰富拦截器,可灵活扩展通用功能;4)支持OGNL表达式、值栈,数据存取便捷;5)多例Action,线程安全,规避并发问题。缺点:1)框架层级较多,请求执行链路复杂,新手入门成本高;2)相比SpringMVC,启动速度、请求响应速度稍慢;3)存在经典安全漏洞(远程代码执行),版本老旧安全性差;4)目前行业使用率逐年降低,逐渐被SpringMVC替代。二、核心原理与执行流程4、详细说一下Struts2的完整执行流程这是面试高频核心考点,完整执行流程分为8步,贴合源码执行逻辑:1)客户端浏览器发起HTTP请求,被Web容器(Tomcat)接收;2)请求被核心过滤器StrutsPrepareAndExecuteFilter拦截,这是Struts2的入口;3)过滤器创建ActionContext上下文、ValueStack值栈,初始化环境参数;4)通过请求URL匹配struts.xml配置文件,定位到对应的Action;5)执行默认拦截器栈(参数封装、类型转换、校验、文件上传等拦截器依次执行);6)拦截器执行完毕,调用目标Action的业务方法(默认execute方法);7)Action执行完成,返回逻辑视图字符串(success/error/login等);8)框架根据逻辑视图匹配struts.xml中的物理视图,跳转对应页面,渲染视图响应客户端。5、Struts2核心三大组件是什么?各自作用?1)Action(控制器)核心业务处理器,用于接收请求参数、调用Service业务层、处理业务逻辑、返回视图结果。Struts2中Action是普通Java类,无需继承特定父类(也可继承ActionSupport简化开发)。2)ValueStack(值栈)存储整个请求生命周期数据的容器,是Struts2数据交互的核心。所有请求参数、Action属性、域对象数据都会存入值栈,页面通过OGNL表达式直接取值,实现前后端数据交互。3)Interceptor(拦截器)AOP思想的实现,用于对请求进行预处理和后处理。通用功能如参数封装、数据校验、文件上传、权限控制、日志记录、异常处理,全部通过拦截器实现,不侵入业务代码。6、值栈的存储结构是什么?分为哪两部分?值栈整体分为对象栈(Root栈)和上下文栈(Context栈)两部分。1)对象栈(Root):本质是ArrayList集合,存储当前请求的Action对象、Action的成员属性数据。页面取值时直接写属性名即可,无需前缀,优先级最高。2)上下文栈(Context):本质是Map集合,存储web域对象数据,包括request、session、application、parameters等。页面取值需要加前缀,如#session、#request。三、Action相关考点7、Struts2中Action的实现方式有几种?三种实现方式,开发中常用第二种:1)原生POJO类:自定义普通Java类,包含execute()无参方法,无继承无实现,最简单,功能有限;2)实现Action接口:实现com.opensymphony.xwork2.Action接口,重写execute方法,接口提供了固定的视图常量(SUCCESS/ERROR等),规范统一;3)继承ActionSupport类:开发最常用,ActionSupport实现了Action、校验、国际化、消息提示等多个接口,自带数据校验、获取国际化信息、添加错误提示等方法,功能最全。8、Action为什么是多例的?是否线程安全?Struts2每次接收一个新的请求,都会创建一个全新的Action对象,请求处理完毕后对象销毁,所以Action是多例模式。因为每个请求的Action对象独立,不存在共享成员变量的情况,因此线程绝对安全,开发中可以直接在Action中定义成员变量接收参数,无需担心并发问题。对比:Struts1的Action是单例,线程不安全,禁止使用成员变量存参数。9、Action中如何接收前端参数?三种方式1)属性驱动(基础):在Action中定义与前端参数名一致的成员变量,生成get/set方法,框架自动封装参数。适合简单参数,使用最广泛。2)属性驱动(模型对象):单独定义实体类封装参数,Action中定义实体类对象,前端参数名与实体类属性对应,自动封装。适合参数较多的场景。3)模型驱动(ModelDriven):Action实现ModelDriven接口,重写getModel方法,返回实体对象。框架自动将参数封装到实体中,无需get/set,代码更简洁,适合表单数据较多的场景。四、拦截器核心考点10、拦截器和过滤器的区别?(必考题)1)拦截范围不同:过滤器(Filter)拦截所有web请求,包括静态资源(css、js、图片);拦截器(Interceptor)只拦截Struts2管理的Action请求,不拦截静态资源。2)依赖环境不同:Filter基于Servlet容器,依赖ServletAPI;Interceptor是Struts2框架组件,不依赖ServletAPI,框架独立实现。3)执行时机不同:请求流程:过滤器预处理→拦截器预处理→Action执行→拦截器后处理→过滤器后处理。4)粒度不同:Filter是web层级的拦截,粒度粗;Interceptor是框架业务层级的拦截,粒度细,可精准控制Action执行前后逻辑。5)生命周期不同:Filter项目启动初始化一次,单例;Interceptor随框架初始化,可配置多实例,支持递归调用。11、Struts2默认拦截器栈包含哪些常用拦截器?各自作用?默认拦截器栈是struts-default.xml中定义的核心拦截器组合,常用核心拦截器:1)params:自动接收前端请求参数,封装到Action属性中;2)conversionError:捕获参数类型转换异常,封装错误信息;3)validation:执行数据校验,校验表单参数合法性;4)workflow:流程拦截,校验失败则直接跳转错误视图,不执行Action;5)fileUpload:文件上传拦截器,处理文件上传请求、限制文件大小格式;6)exception:全局异常拦截,统一捕获Action执行异常,跳转异常页面。12、如何自定义拦截器?使用场景是什么?自定义步骤:1)自定义类继承MethodFilterInterceptor或实现Interceptor接口;2)重写doIntercept方法,编写拦截逻辑,放行调用invocation.invoke();3)在struts.xml中注册拦截器,配置拦截器栈;4)在对应Action中引用自定义拦截器。常用场景:登录权限拦截、接口请求日志记录、请求参数脱敏、防重复提交、接口限流等通用业务。五、配置与跳转、数据交互13、struts.xml中package标签的作用及常用属性package用于模块化管理Action配置,实现配置复用和继承,类似Java的包和类继承。常用属性:1)name:包名,唯一标识;2)extends:继承其他包,默认继承struts-default,获取默认拦截器栈、视图常量;3)namespace:命名空间,区分不同模块的请求路径,避免URL冲突;4)abstract:是否为抽象包,抽象包不能配置Action,仅用于被其他包继承。14、Struts2有几种跳转方式?区别是什么?共四种常用跳转方式:1)服务器内部转发(dispatcher):默认方式,服务器内部跳转,地址栏URL不变,一次请求,共享request数据,只能跳转页面,不能跳转Action。2)重定向(redirect):客户端二次请求,地址栏URL改变,不共享request数据,可跳转页面。3)转发Action(chain):服务器内部转发到其他Action,一次请求,共享数据,用于多Action业务联动。4)重定向Action(redirectAction):重定向到其他Action,二次请求,地址栏改变,项目中最常用的Action跳转方式。15、OGNL表达式的作用是什么?OGNL是Struts2默认的对象图导航语言,核心作用是简化值栈数据的存取。可以快速获取值栈、域对象、集合数据,支持对象属性调用、方法调用、集合遍历,配合标签库使用,大幅简化JSP页面代码,替代繁琐的EL表达式和Java脚本。六、安全漏洞与问题排查(面试重点)16、说说Struts2经典的远程代码执行漏洞(S2-045、S2-046)这是企业面试高频安全考点,老旧Struts2版本存在严重远程代码执行漏洞。漏洞成因:文件上传拦截器对请求头参数解析不当,未过滤恶意OGNL表达式,攻击者可以构造特殊的Content-Disposition请求头,注入恶意OGNL代码,服务器解析时执行任意系统命令。影响版本:Struts22.3.5~2.3.31、2.5~2.5.10修复方案:升级Struts2到最新安全版本;关闭危险的OGNL表达式解析配置;添加请求参数过滤拦截。17、Struts2出现参数接收不到的常见原因?1)Action参数未生成get/set方法,框架无法封装赋值;2)前端参数名与Action属性名大小写、名称不一致;3)自定义拦截器未放行,中断了请求流程;4)struts.xml路径配置错误,请求未匹配到对应Action;5)参数类型不匹配,触发类型转换异常,被拦截器拦截。七、进阶对比考点18、Struts2和SpringMVC的核心区别?为什么现在不用Struts2了?核心区别:1)核心控制器:Struts2是Filter,SpringMVC是Servlet;2)实例模式:Struts2Act
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年山西省高级技工学校生产车间管理基础知识测试卷及答案
- 2026广西南宁市第二十四中学招聘高中英语顶岗教师1人考试参考题库及答案解析
- 2026年苏教版八年级英语第8章阅读理解专项训练习题及答案
- 2026年大兴安岭林业集团公司公开招聘工勤岗位工作人员149人笔试备考题库及答案解析
- 2026年江汉油田人员招聘考试模拟试题及答案
- 2026年湖北建筑法规与合同管理同步练习题及答案
- 2026年绥化明水县人民医院公开招聘临床医生10人笔试备考题库及答案解析
- 2027福建省港口集团有限责任公司秋季校园招聘251人起笔试模拟试题及答案解析
- 2026年安徽黄山弘星户外用品有限公司招聘14名笔试模拟试题及答案解析
- 2026年中国烟草总公司湖南省公司人员招聘考试备考试题及答案
- 2026-2027学年八年级上学期生物 期中测试卷(人教版)
- 2026年新教材人教版九年级上册英语期中素养综合评价测试卷(含答案)
- 落地式双排脚手架连墙件布置及验收方案
- 实验室生物安全风险评估报告
- 2026年老年人考驾照三力测试题库及答案
- ISO9001-2026 DIS标准条款解读-内审员培训课件
- 资产评估师企业价值评估题库(含评分标准)
- IEC 60601-1-112015Amd 12020 医用电气设备.第1-11部分基本安全和基本性能的一般要求.辅助标准家庭医疗环境中使用的医用电气设备和医用电气系统的要求.修改件1标准立项发展报告
- 智能矿山无人化
- 湖南省2026年高考招生计划-历史类
- 2026年四川省党政领导干部政治理论水平考试复习题及答案
评论
0/150
提交评论