一个简单的登录过程描述了一下Struts的业务流程,感觉挺容易懂的,摘出来大家分享:(1)用户的请求以HTTP方式传输到服务器上,接收请求的是ActionServlet。
(2)ActionServlet接收到请求后,会查找struts-config.xml文件来确定服务器上是否有用户请求的操作,此处用户请求的操作应为登录操作。如果没有,则返回一个用户请求无效的出错信息。
(3)当ActionServlet找到用户请求的Action后,首先将用户输入的表单参数打包成一个ActionForm对象,这个ActionForm对象其实也就是一个JavaBean,里面包含两个字段,分别是用户名和密码。接着ActionServlet再根据struts-config.xml中的配置信息决定是否要执行ActionForm对象中的Validate方法。若Validate方法执行有错,则返回;否则,继续下一步。
(4)系统生成一个用户所请求的Action的实例对象,将前面的ActionForm对象传递给它,运行它的execute()方法。这一步其实就是用户登录的控制器,在执行execute()方法时,可以调用后台模型验证登录名和密码是否正确等信息。
(5)execute()执行结束前会生成一个ActionForward类型的对象并将之返回给ActionServlet,该对象的作用是告诉ActionServlet下一步应该跳转到哪里,假如后台模型检验用户名和密码正确,则ActionForward就代表跳转到一个登录成功的界面。ActionServlet将对之进行分析,其实就相当于接收到一个新的请求,重复(2)~(5)的过程,直到将某个界面返回用户为止。
以上就是Struts的基本工作流程,可以看出struts-config.xml在整个流程中起到了一个类似站点地图的作用,它记录了所有可能的请求跳转。其实,在Web容器加载Struts应用程序后,struts-config.xml就被首先读入内存成为一个ActionMapping对象,前面所说的查找struts-config.xml文件,实际上是查找ActionMapping对象。对于初学者来说可以不必深究其中的细节……
摘自清华大学出版社出版的《Struts-Web设计与开发大全》
在应用服务器启动的时候,就会根据struts-config.xml配置文件在内存中创建相应的bean。这样,当用户访问例如x.do的时候,首先会将请求交给actionservlet,actionservlet把请求转发给RequestProcessor,由RequestProcessor根据请求的uri来转发请求给action,在请求到达action之前会做一个formbean的填充,如果配置了验证,还会在填充后调用验证方法,如果不成功直接返回到struts-config.xml中的<action>中配置的input配置的地方,如果成功,则执行action的execute方法。
<action
//Action类的相对路径,与其jsp表单上面的action保持一致
path="/login"
//链接到本映射的Action类的名称
type="com.test.action.LoginActionAction"
//与本操作相关联的Action bean的名称
name="loginForm"
//请求域或会话域的名称,ActionForm bean就存储在这个名称下
attribute="loginForm"
//输入表单的路径
input="/login.jsp"
//ActionForm bean的作用域(session/request)
scope="request"
//Action对象上的execute执行之前
//ActionServlet是否调用ActionForm bean的validate方法
validate="true">
<forward name="login" path="/login.jsp"></forward>
</action>