一.struts工作原理:
struts的有两个控制器,分别是前端的ActionServlet中心控制器,和后端所有action都需要继承的Action控制器。真正的开发过程中,项目开发人员并不需要对ActionServlet有过多的了解就可以开发的很happy。但是如果要很好的使用struts框架,就很有必要了解一下,就像开汽车一样,没有必要了解汽车的工作原理,会开就行了,但是某天车出现故障,或者要组装一辆自己的车,那不了解工作原理的话,就会很被动,了解是为了更好的使用:
1). 读取配置(初始化ModuleConfig对象)
采用Struts框架的Web应用,在Web应用启动时就会加载并初始化ActionServlet,在ActionServlet初始化 ModuleConfig的候,调用initModuleConfigFactory()初始化配置工厂,然后由配置工厂通过 initModuleConfig("", config)获得ModuleConfig对象。通过ModuleConfig对象调用下列方法去初始化相关模块。
a.initModuleMessageResources(moduleConfig);
b.initModuleDataSources(moduleConfig);
c.initModulePlugIns(moduleConfig)
这些方法的功能就是:容器在加载Struts应用程序时,会先加载web.xml中与Struts相关的一些配置参数,找到struts-config.xml文件,然后通过循环来读取此文件和解析里面的内容,并初始化相关对象。
2). 用户请求
用户提交表单或调用url向Web应用程序服务器提交一个请求,请求的数据用HTTP协议上传给Web服务器。
3). 填充FormBean
填充FormBean的过程包括实例化、复位、填充数据、校验、保存等操作。根据*.do请求从ActionConfig中找出对应该请求的 Action子类,如有对应的Action且这个Action有一个相应的ActionForm,则ActionForm被实例化并用HTTP请求的数据 填充其属性,并保存在ServletContext中,这样它们就可以被其他Action对象或JSP调用。如果没有对应的Action,控制器则直接转 发给JSP或静态页面。
4). 转发请求
控制器根据配置信息ActionConfig将请求派发到具体的Action,与请求相应的FormBean将一并传给这个Action对象。
5). 处理业务
Action一般只包含一个execute()方法,它负责执行相应的业务逻辑。执行完毕后返回一个ActionForward对象,控制器通过该ActionForward对象进行转发工作。
6). 返回响应
Action根据业务处理的不同结果返回一个响应对象给总控制器,该目标响应对象对应一个具体的JSP页面或另一个Action。
7). 查找响应
总控制器根据业务功能Action返回的目标响应对象找到对应的资源对象,通常是一个具体的JSP页面。
8). 响应用户
目标响应对象将结果展现给用户目标响应对象,即具体的JSP页面,这样客户就得到响应的结果。
这里只是从使用 Struts的角度对它的工作原理作了分析,在后面的章节中还会深入分析ActionMapping对象、ActionForm对象及Action对象的初始化过程。