Strtus
工作原理
Made By Zhangxu
08.4.27
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
传统的
MVC
架构:
Jsp----->
view(
视图
)
Servlet------>
Cotroller(
控制
)
JavaBean------->
Model(
模型
)
传统的流程图:
客户端的Request请求到达Servlet,然后获取用户输入,Set到Model中
由Model负责赋值,再有View层get数据 Response到Client(客户端)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Struts
架构
Jsp+Struts标签库 ------
View
ActionBean
-------
Model
ActionFormBean
ActionServlet
---------
Cotroller
ActionMapping
Struts的流程图:
Controller作为接受所有来自客户端请求的入口点,由ActionServlet来决定需要哪个动作来执行相应的操作,同时通知ActionFormBean来封装用户的表单输入,同时提交给ActionBean来执行相应的业务逻辑,通过ActionMapping来决定需要反馈给Client什么!
1. 首先在Tomcat启动的时候 ,自动检查web应用程序内是否有web.xml的配置文件,若没有找到的话就去找Tomcat下的web.xml配置文件,读取struts-config.xml配置信息然后将其加载到内存中!
ActionServlet
从
struts- config.xml
文件中读取配置信息将form-beans,action-formward等配置对象实例化!
注:s-c:struts-config.xml
AM:ActionMapping
2. 当ActionServlet接受一个来自客户端的请求时:
(1) 检索和用去请求向匹配ActionMapping实例,如果不存在则返回请求路径无效500错误信息。匹配则进入下一步创建ActionForm.
(2) 检查是否有ActionFrom实例存在,如果ActionFrom实例不存在,就创建一个ActionForm 对象,把用户提交的表单数据保存到ActionFrom中!
(3) 根据配置决定是否进行表单验证(validate),若需要验证就调用
就调用
ActionForm
的
validate()
方法。如果
ActionForm
的
validate()
方法返回
null
或者返回一个不包含
ActionMessage
的
ActionErrors
的对象,说明验证成功,继续进行下一步,不成功返回错误信息!
(4) ActionServlet根据ActionMapping实例所包含的映射信息决定将请求转发给哪个Action,若没有知道相应的Action实例存在,则首先创建这个Action实例,然后调用Action的execute()方法!
(5) Action的execute()方法返回一个ActionForward对象。ActionServlet把转发给ActionForward对象指向的jsp组件。
(6) ActionForward对象指向的jsp组件生成的动态网页 返回给客户端
Struts-config.xml内action-mappings解释:
<action-mappings>
<action
name
=
"aFBug" //
要传给
Action
的
ActionForm
path
=
"/aBug" //
访问
Action
的路径
input
=
”/error.jsp” //
失败后要跳转的页面
scope
=
"request" //
这个
Action
的有效范围
parameter
=
"act"
type
=
"net.pcedu.bugsys.bug.web.ABug"
validate
="false" //
是否验证
>
<forward name
=
"list"
path
=
"/ListBug.jsp"
/>
//
要转向的页面
</action>
</action-mappings>