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可以随时更换内容网页,因此可以重用版面配置文件。
框架配置:…。