struts2面试题分析

一、简述struts2的执行流程

  1. 请求发给StrutsPrepareAndExecuteFilter
  2. StrutsPrepareAndExecuteFilter判断该请求是不是一个struts请求
  3. 若是struts请求,则StrutsPrepareAndExecuteFilter将请求的处理交给ActionProxy
  4. ActionProxy创建一个ActionInvocation实例,并进行初始化
  5. ActionInvocation实例在调用action的过程前后,涉及到相关拦截器的调用
  6. Action执行完毕后,ActionInvocation负责根据struts.xml中的配置找到相应的返回结果。调用结果的execute方法,渲染结果
  7. 执行各个拦截器invocatioin.invoke()之后的代码
  8. 把结果发送到客户端
二.struts2拦截器和过滤器的区别
  1. 过滤器依赖于servlet容器,拦截器不依赖于servlet容器
  2. struts2拦截器只对action请求起作用,而过滤器则可以对几乎对所有请求起拦截作用
  3. 拦截器可以访问Acion上下文(ActionContext)、值栈里的对象(ValueStack),而过滤器不能
  4. 在Action的生命周期中,拦截器可以被多次调用,而过滤器只能在容器初始化时被调用一次
三、struts2的优点
  1. 基于MVC架构,框架结构清晰
  2. 使用OGNL:OGNL可以快捷的访问值栈中的数据、调用值栈中的对象的方法
  3. 拦截器:struts的拦截器是一个Action级别的AOP,struts2中的许多特性都是通过拦截器实现的,例如异常处理,文件上传,验证等。拦截器是可配置和重用的
  4. 多种表现层技术:如JSP、FreeMarker、Velocity等
四、struts2如何访问HttpServletRequest、HttpSession、ServletContext三个域对象
  1. 与servlet API解耦的方式
  • 通过ActionContext访问域对象对应的Map对象
  • 通过实现Aware接口使struts2注入对应的Map对象
         2.与Servlet API耦合的方式
  • 通过ServletActionContext直接获取Servlet API对象
  • 通过实现ServletXxxAware接口方式使struts2注入对应的Map对象
五、struts2默认的struts-default包有什么作用
  1. struts-default包是struts内置的,它定义了struts2内部的众多拦截器和Result类型,而struts2很多核心的功能都是通过这些内置的拦截器实现,如;从请求中吧请求参数封装到action、文件上传和数据验证等都是通过拦截器实现的。当包集成了struts-default包才能使用struts2为我们提供的这些功能。
  2. struts-default包是在struts-default.xml中定义,struts-default.xml也是struts2 的默认配置文件。struts2每次都会自动加载struts-default.xml文件。
  3. 通常每个包都应该继承struts-default包。
六、说出struts2中至少5个默认的拦截器
exception;fileUpload;i18N;modelDriven;params;prepare; token;tokenSession;validation等

七、谈谈ValueStack
  1. ValueStack贯穿Action的整个生命周期,保存在request域中,所以ValueStack和request的生命周期一样。当struts2接受一个请求是,会迅速创建ActionContext,ValueStack,Action。然后把Action存放进ValueStack,所以Action的实例变量可以被OGNL访问。请求来的时候,Action、ValueStack的生命开始;请求结束,Action、ValueStakc的生命结束。
  2. 值栈是多实例的,因为Acion是多例的(和Servlet不一样,Servlet是单例的),而每个Action都有一个对应的值栈,Action对象默认保存在栈顶。
  3. ValueStack本质上就是一个ArrayList(查看源代码得到);
  4. 使用OGNL访问值栈的内容是,不需要#好,而访问request、session、application、attr时,需要加#号;
  5. struts2重写了request的getAttribute()方法,所以可以使用EL直接访问值栈中的内容

八、ActionContext、ServletContext、PageContext的区别
  1. ActionContext是struts2的API:是当前的Action的上下文环境
  2. ServletContext和PageContext是Servlet的API
九、struts2有那就中结果类型
参看struts-default.xml中的相关配置:dispatcher、chain、redirect等。

十、拦截器和生命后期与工作过程

每个拦截器都需要实现Interceptor接口
  • init():在拦截器被创建后立即被调用,它在拦截器的声明后期内只被调用一次。可以在该方法中对相关资源进行必要的初始化;
  • intercept(ActionInvocation invocation):每拦截一个动作请求,该方法就会被调用一次;
  • destroy():在方法将在拦截器被销毁之前被调用,它在拦截器的生命周期内也只被调用一次。
十一、如何在struts中使用Ajax 功能
  1. JSON plugin
  2. DOJO plugin
  3. DWR plugin
  4. 使用Stream结果类型














































  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值