java

位置:IT落伍者 >> java >> 浏览文章

五步解释Struts处理请求的过程


发布日期:2022年08月13日
 
五步解释Struts处理请求的过程
Struts的核心控制组件是ActionServlet它是orgapachestrutsactionActionServlet类型的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的运行过程

上一篇:struts2 + spring + hibernate&

下一篇:在Eclipse中使用ANT灵活构建Web应用