struts1处理原理

struts1处理原理



struts1处理原理_第1张图片


struts1处理原理_第2张图片

ActionServlet是如何传递请求的,如何和ActionForm、ActionMapping、Action交互

struts1处理原理_第3张图片





1.struts2.x  Action里面的属性什么时候实例化:
struts2  的action不是单例,默认都是每一个请求都会new 一个action。
所以action的javabean属性在每一次请求都有实例化一次,也是在这时候才实例化的。
原理:是在struts2调用完拦截器栈之后,调用响应Action的execute方法前
详细的说:struts2在接受一个请求之后,会建立相应请求的Action对象,同时生成管理其上下文的ActionContext对象,并将javabean(即Action对象)的属性放到Valuestack栈顶,将这些属性初始化,之后struts2会调用拦截器栈中的拦截器(注意这些拦截器会改变valuestack中属性的值,如params拦截器会完成将表单字段映射到valuestack属性上。。。),在调用结束后,struts2会将valuestack中的属性映射赋值给Action对象属性,最后调用action方法。


2.struts1.x  ActionForm什么时候实例化:
a.Tomcat启动--->先加载<param-name/>和<listener/>--->当<servlet/>里面的<load-on-startup>2</load-on-startup>就 初始化ActionServlet,加载<init-param>中所有的配置文件(struts-config.xml等)到内存
将applicationContext.xml中的DBresource、DAO、Service、Action注入好保存在上下文中,将struts-config.xml文件里面的beanform、action、jsp等的映射关系都保存在actionmapping中存入上下文中。

b.URL访问---> 实例化ActionServlet,ActionServlet实例对象拦截请求,截取URL--->去actionMapping中映射匹配此action---->找到相应的actionmapping保存到request中--->将表单数据保存到map<name,value>中,映射beanForm,循环将表单数据set()到beanForm中,保存到request或session中---->调用真正的action处理类,将beanForm装换为底层数据库的javaBean即Entity,service.save(entity) ;---->

c.HibernateTemplate.save(entity.class)---->Hibernate自动生成hql--->DB

d.action类里面,service.save(Entity)成功后,返回一个ActionForward给ActionServlet,控制跳转到相应action或jsp---->response响应用户请求,结束!






你可能感兴趣的:(struts1)