Struts的核心控制组件是
ActionServlet
它是org
apache
struts
action
ActionServlet类型的Servlet
他继承javaxServletHttpHttpServlet并实现了init()doGet()/doPost()destroy()等Servlet生命周期所用到的方法还添加了一个process()它本身不复杂但它会调用其他的复杂方法
和spring框架有一样web容器在启动的时候先是初始化webxml中配置的ActionServletActionServlet再加载配置文件(配置文件写明了不同的请求的不同的ActionMapping)
其它接受客户端请求的作出响应的过程如下
查找servlet并找到相应的action
Servlet容器在webxml文件中寻找urlpattern属性为*do的<servletmapping>元素
Servlet容器根据<servletmapping>元素的name属性在webxml文件中找到相应的servlet
查找相应的action
Servlet根据浏览器是post还是get请求调用doPost()doGet()方法在其中调用ActionServlet的process()方法
Process()获取RequestProcessor对象调用RequestProcessor对象的process()方法
RequestProcessor对象的Process()方法读取strutsconfigxml在其中查找<action>子元素查找的条件是用户请求的URI与action元素的path属性值一样找到后确定name属性根据name找到<formbean>元素再根据action元素的name匹配值找到相应的ActionForm bean
Actionform重设赋值验证
创建新的ActionFormc对象
保存ActionForm对象
保存为用户请求(request)或会话(session)的属性Actionform的作用域由ActionMapping配置中的scope属性值来决定名称为配置文件中的ActionMapping中的Attributte决定
调用ActinForm的reset()方法初始化ActionForm
调用reset方法的目的是为了对ActionForm中的值进行复位操作通常情况要覆盖reset()方法把ActionForm的值恢复为默认值
调用ActionForm bean的setter方法为AtionForm赋值
验证
如果validate属性为trueActionServlet会调用form对象的validate方法进行表达验证此方法返回ActionErros对象里面包含ActionMessage对象封装了错误消息通过标记库的errors标记可以将这里返回的错误信息显示在页面上Validate()没有返回任何异常那么就会继承进行下面的处理
用struts的Validator验证组件比较好用需求加两个文件validationxmlvalidatorrulesxml这个组件的使用我会在下一次说明
action进行真正的业务处理
ActionServlet查找这个XXaction实例是否存在不存在就创建一个实例然后调用他的excute方法进行业务处理
返回forward转到客户端
最后调用mappingfindForward(abc)方法从ActionMapping元素中查找name为abc的forward元素然后返回这个forward元素对应的页面其实就是查找ActionMapping本身的HashMap
到此对一个请求的处理完毕里面贯穿了struts的运行过程