谈到Struts的工作原理就不得不提到MVC设计模式,MVC即Model-View-Controller的缩写,它是web应用当中的常用的设计模式。
具体如下图所示:
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化,Struts是MVC的一种实现。
1)控制(Controller)
在Struts中ActionServlet起着一个控制器(Controller)的作用,这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点,它截取和分发这些请求到相应的动作类,这些动作类都是Action类的子类。
另外控制组件也负责用相应的请求参数填充 Action Form,通常称之为FromBean,并传给动作类:通常称之为ActionBean。
动作类实现核心商业逻辑,所有这些控制逻辑利用Struts-config.xml文件来配置。
2)视图(JSP)
主要是由Jsp来控制页面输出的。它接收到Action Form中的数据,利用html,taglib,bean,logic等显示数据。
3)模型(JavaBean)
在Struts中,主要存在三种bean,分别是:Action,ActionForm,EJB或者Java Bean。ActionForm用来封装客户请求信息,Action取得ActionForm中的数据,再由EJB或者Java Bean进行处理。
Struts2的整个工作原理,流程如下图所示:
第一步:客户端请求一个HttpServletRequest的请求。
比如:在浏览器中输入http://localhost: 8080/getUsername.action就是提交一个HttpServletRequest请求。
请求会被Tomcat接收到,TomcatServer来选择处理这个请求的Web应用。
第二步:这个请求经过一系列的过滤器Filter。
这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器,比如:ActionContextCleanUp、其他过滤器SiteMesh等、 FilterDispatcher等。
注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器:Othter Filters、SiteMesh等,最后到FilterDispatcher(Struts2实现中控制层Controller的核心)。
第三步:接着FilterDispatcher被调用
FilterDispatcher是struts2框架的心脏,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个HttpServlet Request请求。
如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
第四步:ActionProxy通过struts.xml询问框架的配置文件
找到需要调用的Action类,例如:用户注册示例将找到UserReg类。
第五步:ActionProxy创建一个ActionInvocation实例
同时ActionInvocation通过代理模式调用Action,但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor拦截器。
第六步:根据struts.xml中的配置找到对应的返回结果
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。
第七步:返回结果
最后通过HTTPServletResponse返回客户端一个响应。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》