Struts工作原理和Struts内部工作流程

随着MVC模式的广泛应用,催生了MVC框架的产生。在所有的MVC框架中,出现最早应用最广的就是Struts框架。 

Struts环境配置:…。

 

Struts工作原理和Struts内部工作流程:

MVC Model2:

采用Struts的Web应用程序:当Web应用程序启动的时候,就会初始化ActionServlet, 

 [ 在初始化ActionServlet的时候就会加载struts-config.xml这个配置文件,加载成功后会把这些URL和控制器的映射关系存放在ActionMapping对象或者其它对象中 ] 

ActionServlet:是Struts中的中央控制器,专门收集用户请求信息(一般配置为接收*.do的请求),这样所有以.do结尾的用户请求都会被ActionServlet截取处理。

 [ActionServlet中调用doGet或doPost方法,doPost/doGet再调用process,实现struts内部处理]

 [process是ActionServlet的核心流程方法]

struts-config.xml:是Struts中的核心配置文件,在这个文件中配置了用户请求URL和控制器Action的映射关系

 [ ActionServlet就是通过struts-config.xml配置文件把用户请求发送到对应的控制器中的。] 

 [ 配置:先配ActionForm的<form-bean>,再配Action的<action-mapping>(path路径以/开头)]

ActionMapping(<action-mapping>):保存Action与ActionForm的映射信息。

 (Map中包含键值对,<action-mapping>内包含了name---<action>---<forward>。)

 [ActionMapping通过process内部处理--->RequestProcessor获取URL--->获取配置文件中action的标签信息] 

ActionForm:其属性字段对应JSP页面中的表单。当用户提交表单时Struts会把表单的内容保存在对应的ActionForm中。

Action:控制器处理用户请求,每个ActionMapping对应以Action,每个Action用来处理对应ActionForm的用户请求

(如:LoginActionForm.java 对应LoginAction.java,如果action不收集数据则action可以不用配置ActionForm)

ActionForward:转向信息,每个Action的execute ()方法都会返回一个ActionForward对象,ActionForward对象指定转向的JSP页面

 

 

当ActionServlet接收到用户请求的时候,就会按照下面的流程对用户请求进行处理:

1.ActionServlet接收到用户的请求以后,会根据请求URL寻找匹配的ActionMapping对象。

 如果不存在匹配的示例,说明用户请求的URL路径信息有误,所以返回“请求路径无效”的信息,

 当匹配到ActionMapping对象的时候,就会进入下一步的操作。

2.当ActionServlet找到匹配的ActionMapping对象的时候,会根据ActionMapping中的映射信息判断对应的ActionForm对象是否存在,

 如果不存在则创建一个新的ActionForm对象,并且把用户提交的表单内容保存到这个新的ActionForm对象中。

3.在struts-config.xml这个配置文件中,同样可以配置表单是否需要验证,

 如果表单需要验证,就调用ActionForm中的validate()方法对用户输入的表单信息进行验证。

4.如果ActionForm的validate()方法返回了ActionErrors对象,说明表单验证没有通过,

 这时ActionServlet会把页面返回到用户输入页面,提示用户重新输入;

 如果validate()方法返回“null”,就说明表单验证已经通过,可以进入下一步处理过程。

5.ActionServlet可以根据ActionMapping对象中查找把用户请求转发给哪个控制器Action,

 如果对应的Action对象不存在,就创建这个对象,并调用这个Action的execute()方法。

6.控制器Action的execute ()方法会返回一个ActionForward对象,

 ActionServlet把控制器处理的结果转发到ActionForward对象指定的JSP页面。

7.ActionForward对象指定的JSP页面根据返回的处理结果生成动态网页,把服务器处理的结果返回给客户。

这样,一个客户请求的整个过程就处理完毕了。

 

 一个简单的Struts应用示例:

Struts开发步骤:

1.创建JSP页面。 

2.创建ActionForm:

4.创建Action控制器:

3.创建模型组件,JavaBean或EJB。

5.创建资源文件,统一描述页面要显示的内容,国际化处理。

6.在struts-config.xml文件中描述用户请求与控制器的映射关系。

7.在JSP页面中展示控制器返回的处理结果。

 

 

-------------------------------------------------------------------------

struts-config.xml配置文件:

一般主要包括以下几个部分:
  (1)data-sources
  (2)form-bean
  (3)global-forwards
  (4)action-mapping
  (5)message-resource

 

ActionForm:

ActionForm提供了表单字段保存功能,表单数据缓冲,数据验证的功能: 对应JSP页面中的表单。当用户提交表单时Struts会把表单的内容保存在对应的ActionForm中。

传统表单处理:

<input type="text" name="password">

request.getParamete("password");

ActionForm表单处理:

<html:text property="password">-------ActionForm.

创建ActionForm:

1.每个ActionForm都要继承org.apache.struts.action.ActionForm这个类,并且为每一个表单提供一个ActionForm.

2.ActionForm中的每个属性都要与表单中的输入项一一对应.

3.ActionForm的每个属性都要提供getter和setter方法.Struts就是根据这些方法调用保存表单数据的.

4.如果表单需要验证,则在ActionForm中要提供validate()方法。

 

Struts中的控制器Action:

在开发Action的时候,需要继承org.apache.struts.action.Action类,在子类中加入所需的业务逻辑处理,

这些子类会返回ActionForward对象,ActionServlet接收这个对象,把页面转发到指定页面,从而把用户请求的结果发送到对应的页面。

当完成Action代码的编写后还要在struts-config.xml中进行配置。

org.apache.struts.action.Action:只提供一个execute()方法,一个用户请求URL只能对应一个Servlet。

org.apache.struts.actions.DispatchAction:可以编写自己需要的方法,在不同方法中处理不同的动作,

这时候只能通过URL调用控制器,控制器根据用户提交的参数决定调用哪个方法来处理用户的请求,这种情况下不能通过表单提交用户的请求信息。

org.apache.struts.actions.LookupDispatchAction:增加了Struts资源文件的功能,这样在用户提交表单的时候,LookupDispatchAction可以判断用户单击的是哪个提交按钮,然后通过查询Struts资源文件确定调用哪个方法来处理用户提交的请求信息,在同一个表单中处理不同的动作。

因为LookupDispatchAction中可以接收用户提交的表单,所以在这里可以把表单的验证工作放在ActionForm中进行处理。而LookupDispatchAction子类中的getKeyMethodMap()方法定义了提交按钮与处理方法的映射关系,LookupDispatchAction会根据这个方法找到提交按钮与处理方法的对应关系。另外,LookupDispatchAction还要在struts-config.xml中进行配置。

 

 Struts中的页面转发控制:

Struts提供了ActionForward和ActionMapping这两个类来控制页面转发。

 

Struts标签库:

 html标签:

bean标签:

logic标签:

 

在Struts中使用validator验证框架:

在使用ActionForm时,可以把验证用户表单输入的工作放在ActionForm的validate()方法中,在Struts中可以整合Validator验证框架进行表单的输入验证。

框架配置:…。

 

 在Struts中使用Tiles:

Tiles提供一个类似桌面应用程序版面管理的机制,通过配置文件可以定义版面配置,以及其中需要插入的内容网页。在Tiles中内容网页可以和配置文件相分离,通过Tiles可以随时更换内容网页,因此可以重用版面配置文件。

 框架配置:…。

posted @ 2013-01-18 15:47  一直向北  阅读(322)  评论(0编辑  收藏  举报