java面试题全集84集系列--关于Struts2的相关笔记

此篇是关于java面试题全集84集系列–关于Struts2的相关笔记,分别包括了:

  1. Struts2 的执行流程或Struts2的原理
  2. Struts2的拦截器的作用和使用场景

1. Struts2 的执行流程或Struts2的原理
java面试题全集84集系列--关于Struts2的相关笔记
图片来源:https://blog.csdn.net/qq_37230121/article/details/80229927
以下介绍来源于:https://blog.csdn.net/wuwenxiang91322/article/details/11070513
Struts2请求响应流程:
java面试题全集84集系列--关于Struts2的相关笔记
在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组件如:Controller、ActionProxy、ActionMapping、Configuration Manager、ActionInvocation、Inerceptor、Action、Result等。下面我们来具体看看这些组件有什么联系,它们之间是怎样在一起工作的。
(1) 客户端(Client)向Action发用一个请求(Request)
(2) Container通过web.xml映射请求,并获得控制器(Controller)的名字
(3)容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或
FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用
StrutsPrepareAndExecuteFilter
(4) 控制器(Controller)通过ActionMapper获得Action的信息
(5) 控制器(Controller)调用ActionProxy
(6) ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
(7) ActionProxy把request请求传递给ActionInvocation
(8) ActionInvocation依次调用action和interceptor
(9) 根据action的配置信息,产生result
(10) Result信息返回给ActionInvocation
(11) 产生一个HttpServletResponse响应
(12) 产生的响应行为发送给客服端。
以下内容来源于观看java面试84题我所记录的关于Struts2 的笔记:
面试总结:
(1)浏览器发送请求,经过一系列的过滤器后,到达核心过滤器StrutsPrepareAndExecuteFilter
(2) StrutsPrepareAndExecuteFilter通过ActionMapper 判断当前的请求是否需要某个Action处理。如果不需要,则走原来的流程,如果需要则把请求交给 ActionProxy来处理
(3)ActionProxy 通过configuration Manager 询问框架的配置文件(Struts.Xml),找到需要调用的Action类
(4) 创建一个ActionInvocation实例,调用Action 的对应方法来获取结果集的name,在调用的前后会执行相关的拦截器。
(5) 通过结果集的name 知道对应的结果集来对浏览器进行相应
简单来说:拦截-判断-寻找-执行—响应
2. Struts2的拦截器的作用和使用场景
Java中的拦截器是动态拦截Action调用的对象,它提供了一种机制是开发者定义在一个action 执行的前后执行的代码,也可以在一个action执行前后阻止其执行,同时也提供了可以提取action中可重用部分的方式。

ps:
(1)java中conf.properties为什么能实现动态配置?
答:因为在后台有对这个文件进行加载和解析。把conf.properties这个文件里面的数据全部解析到一个对象里。
然后在其他地方就可以通过这个对象来获取配置属性。
等程序写好后,以后要修改数据,直接在配置文件里修改,程序就不用修改,也不用重新编译了。
(2) Java动态给类中配置常量赋值的三种方法?
https://blog.csdn.net/yyaf2013/article/details/17356813/

在AOP(Aspect-Oriented-Programming)中拦截器用于在某个方法或字段被访问之前,通过拦截,然后在之前或之后加入某些操作。
面试:
Struts中的功能(参数设置,文件上传,字符编码)都是通过系统拦截器完成的。
如果业务需要,当然我们也可以自定义拦截器,进行可插拔配置,在执行action方法前后,假如相关的逻辑完成业务。
使用场景:
A. 用户登录判断,在执行action的前面判断是否已经登录,如果没有登录的话就跳转到登录界面
B. 用户权限判断,在执行action的前面判断是否具有某种权限,如果没有权限就给出提示信息
C. 操作日志…
D. ….