struts框架的工作流程顺序,Struts的工作流程
struts框架的工作流程顺序,Struts的工作流程详细介绍
本文目录一览: struts框架响应客户端的工作流程是什么?
源于百度
1.客户端发出一个指向servlet容器的请求
2.这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器。
3.过滤器FilterDispatcher是struts2框架的心脏,在处理用户请求时,它和请求一起相互配合访问struts2的底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。如:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager 存有配置文件的一些基本信息,ActionMapper存有action的配置信息。在请求过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。过滤器会通过询问ActionMapper类来查找请求中需要用到的Action。
4.如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象。ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类。
5.ActionProxy创建一个ActionInvocation的实例。ActionInvocation在ActionProxy层之下,它表示了Action的执行状态,或者说它控制的Action的执行步骤。它持有Action实例和所有的Interceptor。
6.ActionInvocation实例使用命名模式来调用,1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。在调用Action的过程前后,涉及到相关拦截器(intercepetor)的调用。
7. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果
Struts框架,有两个版本,分别是Struts1和Struts2,目前,更流行的是Struts2,故本人主要是介绍Struts2的框架的工作流程:
(1)客户端提交一个HttpServletRequest请求(.action或JSP页面)
(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等 (3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器 (4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断)
(5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理.
(6)ActionProxy通过Configuration Manager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类.
(7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器)
(8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器.
(9) 最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出。
简述struts的工作流程?
大概逻辑如下(有些的可能不太全面,可以多看看书.):
struts1:
发布Struts Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容.
在接到一个HttpRequest请求后,ActionServlet 根据struts-config.xml中的配置内容,将请求的参数传到对应的Formbean中,并设置session.然后根据请求中的Action参数,在struts-config.xml中查找指定的Action,并调用此Action来处理请求.根据Action的处理结果,会返回一个forward变量,此时通过mapping.findForward()查找出对应的forward所标示的Action或者JSP页面,将请求转到下一个处理.如果是forward指向JSP页面,则输出到前台.
Struts2:
(1)客户端提交一个HttpServletRequest请求(.action或JSP页面)
(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等
(3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器
(4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断)
(5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理.
(6)ActionProxy通过Configuration Manager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类.
(7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器)
(8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器.
(9) 最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出.
Struts的工作流程
struts1: 发布Struts Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容. 在接到一个HttpRequest请求后,ActionServlet 根据struts-config.xml中的
Struts工作流程
Web应用启动时加载并初始化ActionServlet。ActionServlet从struts-config.xml中读取配置信息,把它们存放到各种配置对象中。当ActionServlet接收到一个请求时,流程如下:
1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
2.如果ActionForm实例不存在,就创建一个ActionForm对象,把提交的表单数据保存到ActionForm中。
3.根据配置,决定是否需表单验证,若需要,则调用ActionForm的validate方法。
4.如果ActionForm的validate方法返回null或返回不包含ActionMessage的ActionErrors对象,则表示验证成功。
5.ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action,如果Action不存在则先创建这个实例,然后调用Action的execute方法。
6.Action的execute方法返回一个ActionForward对象,ActionServlet再把请求转发给ActionForward对象指向的JSP组件。
7.ActionForward指向的JSP组件生成动态网页,返回给用户。
基于Struts框架Web应用的工作流程是怎样的?
【答案】:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象中, 当ActionServlet接收到一个客户请求时,将执行如下流程.
1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;
3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象, 就表示表单验证成功;
5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件;
7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
STRUTS的流程
假设现在在有以下情景:用户正在浏览一个用STRUTS的技术构建的网站主页,主页上有个登陆表单,用户填好登陆名和密码,单击“登陆”按钮,就激活了以下一系列过程:
(1)用户的请求以HTTP方式传输到服务器上,接受请求的是ActionServlet.
(2)ActionServlet接收到请求后,会查找Struts-config.xml文件来确定服务器上是否有用户请求的操作,此处用户请求操作应为登陆操作。如果没有,则返回一个用户请求无效的出错信息。
(3)当ActionServlet请求找到用户请求的Action后,首先将用户输入的表单参数打包成一个ActionFrom对象,这个ActionFrom对象其实也就是一个JavaBean,里面包含两个字段,分别是用户名和密码。接着ActionServlet再根据struts-config.xml中的配置信息决定是否要执行ActionFrom对象中的Validate方法。若Validate方法执行有错,则返回。否则,继续下一步。
(4)系统生成一个用户所请求的Action的实例对象,将前面的ActionFrom对象传递给它,运行它的Execute()方法。这一步其实就是用户登陆的控制器,在执行exectue()方法时,可以调用后台模型验证登陆名和密码是否正确等信息。
(5)execute()执行结束前会生成以和ActionForward类型的对象并将之返回给ActionServlet,该对象的作用是告诉ActionFroward就代表跳转到一个登陆成功的页面。ActionServlet将对之进行分析,其实就相当于接收到一个新的请求,重复(2)~(5)的过程,直到将某个界面返会给用户为止!
以上就是STRUTS的基本工作流程。
struts加载流程:
一.加载内部资源文件
initInternal(),org.apache.struts.action下面的ActionResources开头的两个文件。
二.加载配置文件路径及处理向后兼容
initOther()获取config参数指定的要加载的配置文件的名称(多个之间用逗号分开),系统默认给定的
config值为/WEB-INF/struts-config.xml,获取的config不为空则用这个值代替系统值并处理向后兼容的问题
三.加载ActionServlet的相关信息
initServlet()从web.xml中获取Action-servlet的配置信息(name,url-pattern等),解析的时候会调用addServletMapping()将url-pattern的值传给servletMapping并将servletMapping放入servletContext中(将/*.do放入了servletContext)
四.struts配置文件的初始化
1.ModuleConfig moduleConfig = initModuleConfig("", config);初ModuleConfig
2.获取ModuleConfig对象
五.加载国际化文件
initModuleMessageResources(moduleConfig)
首先取出MessageResourcesConfig对象MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs();.解析struts配置信息,将产相关配置对象放入moduleconfig对象之中
六.初始化数据源
initModuleDataSources(),从moduleconfig中取出所有的DataSourceConfig对象,根据里面的类型信息,用户,密码等产生datasource对象(这些信息存在一个hashmap中,用BeanUtils直接将值给弄进datasource对象).初始化plugin
initModulePlugIns(),(以ValidatorResources为例)根据className定义的类实例化Plugin对象,
将hashmap中的值进plugin,接着调用init方法,init方法默认取出property名字为pathnames的值,值按逗号进行分割,并加载分割后的路径的文件文件对应ValidatorResources。
顶楼主一个,JAVA第一帖,精神值得佩服
更加兴奋咱JAVA语言的问题数量比其他的都多
STRUTS,流程具体和 谦诚灵长 说的差不多
从服务器启动的时候就开始了,
服务器启动的时候加载配置,加载config方法,
解析WEB。XML和STRUTS-CONFIG。XML,
通过解析到的数据实例花了一些对象,FACTORY,ACTIONMAPING等
然后就是在客户端上,用户提交请求后
SERVLET收到请求的信息(PATH),就会通过ACTIONMAPING找到处理请求的类(ACTION),通过ACTION处理后,再返回ACTIONMAPING的FORWARD值
JSP页面提取到FORWARD后会自动产生动作跳转,并把ACTION里面的资源传到FORWARD的页面上去。
基本就这样。
jsp页面把表单信息提交给actionServlet,在根据strutsconfig.xml
,找到actionfrom把jsp页面的值传给它,然后在找到影射action,
执行execute()方法,在调用bean中的方法,
完毕后,return 到某一个页面
可以找MyEclipse-Struts-01名字的录像看看..
其实和JSP差不了太多.换汤不换药..
相差的就是XML和一些细节问题..
多练习才是最重要的..
说再多.也是晕的..
一练就明白..
struts的流程
Struts controller基本功能是
1. 截获用户的Http请求
2. 把这个请求映射到一个定义好的业务操作上
3. 获取业务操作结果,提供给客户端
4. 决定下一步应该显示哪一个页面
有几个部分共同组成了Struts 的Controller,用户的请求发送到ActionServlet中,ActionServlet调用RequestProssor开始处理用户请求的流程,在这个流程中,会查找ApplicationConfig,得到用户请求对应的Action,调用相应的Action来具体执行用户的请求,最后返回ActionForward,转向相应的流程。
================
org.apache.struts.action.ActionServlet 是Struts Controller中最主要的部分,所有用户请求都会被发送到这里,所有的其它处理也必须从这里经过。ActionServlet是从HttpServlet中继承过来的。
当ActionServlet接收到HTTP request的时候,不管是doGet()或者doPost()方法,都会调用process()方法。
protected void process(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { RequestUtils.selectApplication( request, getServletContext() ); getApplicationConfig(request).getProcessor().process( request, response );}
一般情况下,我们不需要自己实现或者修改ActionServlet类,仅仅使用就可以了。某些情况下,我们可以自己扩展ActionServlet类,从ActionServlet继承,实现自己的MyActionServlet类。覆盖其中的一些方法来达到你的特殊处理的需要。ActionServlet继承自javax.servlet.http.HttpServlet,所以在本质上它和一个普通的servlet没有区别,你完全可以把它当做一个servlet来看待,只是在其中完成的功能不同罢了。
================
RequestProssor具体处理用户的request,作为一个request handler存在。同样,处理request的时候,会执行RequestProcessor类中的process(execute)方法。
process中调用的方法都是可以重载的, 如果有需要,可以实现为自己特定的方法。比如,对于Locale问题,通常都是在系统最一开始加载的时候读取的,如果用户想在任何时刻都可以切换或者选择自己的Locale,我们就可以重载processLocale()方法。然后只需要在配置文件中加入段就可以了
================
Action类是实现整个体系的核心部分,它在客户请求、界面表示和业务逻辑之间起到一个桥梁的作用。每一个Action都用来处理某一项任务,或者进行一个业务操作。当然了,我们说一项任务不是说Action只实现一个业务操作方法,而是集中实现某一个功能单元。比如登录用的LogonAction、查找用的SearchAction等等。Action是在RequestProcessor中,由processActionPerform方法调用的
非常重要的一点:不要在Action中包含任何业务逻辑操作,而是应该调用一个Model层的JavaBean来实现你的业务逻辑操作。在某些情况下,可能包含少许表现逻辑。这样,就可以充分进行代码重用,比如上例中调用的IStorefrontService接口,这个接口在实现时完全可以不用考虑客户端的事情,所以它可以被其它部分或者其它系统所使用。否则的话,Action会变得非常难于理解,难于维护,代码也不能重用。
struts-example工程的设计就是一个bug,它把业务逻辑封装到了Action类中
===================
在Action的execute方法中,返回一个ActionForward类。ActionForward把配置文件中forward部分的信息包装起来,减少了应用程序和物理资源信息之间的耦合性。通过ActionMapping类,可以在配置文件中查找相应的forward信息。例如,对于一个LoginAction,它的配置信息可能是这样的:
返回的ActionForward就会包含段中的信息。在ActionMapping类的findForward方法中,首先会根据查找forward的name查找是否有相应的forward段,如果没有,则在配置文件中的段中进行查找,如果还没有就会抛出一个例外。
=====================
以前,页面上的输入数据都通过HTTP request提交,服务方检索出输入的数据,进行验证,然后将这些数据传递给其它组件进行业务处理。一切基本都需要手工编写代码进行操作,比较麻烦,也使代码变得复杂。
Actionform[org.apache.struts.action.Actionform]用来收集用户的输入,并且把这些信息传递给Action对象,然后,在Action对象中,Actionform中的数据被取出来传递给业务逻辑层进行处理。
Actionform一方面作为一个缓冲区,临时存储用户输入的数据;另一方面,可以把Actionform当成是HTTP和Action之间的一个防火墙,它可以验证输入数据的正确性,如果验证不通过,这个request是不会发送给Action进行处理的。
Actionform可以有两种Scope,request或者session。request就是只能在rquest到response,之后Actionform就不可见了;session可以保存时间长一点。
==================
在Actionform的Validate方法中返回的是ActionErrors对象。这个对象可以将错误信息都封装起来,并且自动把它们显示给用户。
在相应JSP页面上添加,可以自动将ActionErrors中的错误信息显示出来。包括,每一个具体的,通过add添加的错误信息,和一个ErrorHeader和一个ErrorFooter,这些都可以通过配置文件指定,并且可以包含HTML语法。
==========================
Struts提供了四种自定义Tag库:
bean:struts-bean taglib包含在访问bean和bean属性时使用的tag,也包含一些消息显示的tag。
html:struts-html taglib包含用来创建struts输入表单的tag,和其它通常用来创建基于HTML用户界面的tag。
logic:struts-logic taglib包含的tag用来管理根据条件生成输出文本,和其它一些用来控制的信息。
template:struts-template taglib包含的tag用来定义模板机制
Struts2的详细工作原理?
不是三言两语说的清楚的,给你推荐篇文章 http://blog.csdn.net/yezi77321660/article/details/3960771
Struts2工作流程:
1.客户端(Client)向Action发用一个请求(Request)
2.Container通过web.xml映射请求,并获得控制器(Controller)的名字
3.容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter
4. 控制器(Controller)通过ActionMapper获得Action的信息
5.控制器(Controller)调用ActionProxy
6.ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
7.ActionProxy把request请求传递给ActionInvocation
8.ActionInvocation依次调用action和interceptor
9. 根据action的配置信息,产生result
10.Result信息返回给ActionInvocation
11.产生一个HttpServletResponse响应
12.产生的响应行为发送给客服端。
struts2的主要工作流程,处理方式?
请求在Struts2框架中的处理大概分为以下几个步骤:
1 客户端初始化一个指向Servlet容器的请求;
2
这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh
Plugin)
3
接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可
能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2
框架中继承的标签。在这个过程中需要涉及到ActionMapper
给LZ说一下struts2的主要工作流程吧,你可以下载一下他的流程图,首先我们有个请求request进入,会首先走ActionContext Clearup 清空值栈等,但是会留下我们的session和setgetAttribute等,然后会走一下OtherFilter,其他的一些过滤器什么的,然后就会走到我们的filterDispathcer总控,会询问ActionMapping是否此请求需要struts2处理,如果需要,走到ActionProxy代理类,其次,根据ConfigurationManger配置管理找到struts配置文件,然后才是走到真正需要做事的地方,Action Invocation 会依次走我们的拦截器,拦截器走的时候回去值栈中取值,就是通过taglib放到页面上去,走action再走对应result,最后生成相应返回回去。
给LZ两个图吧,第一个图是具体的点击新增按钮后的一系列处理,第二个图是详细的struts2的流程
struts的工作流程?
1.客户请求匹配*.do(或其他url)的路径.
2.容器将请求传递给ActionServlet,ActionServlet 选择响应的模块。
3.ActionServlet 查询路径的映射。如果映射标明form bean,ActionServlet 看是否已经有一个实例,或者创建一个新的实例。如果已经有一个form bean,ActionServlet 重设它,并根据HTTP请求重新组装它。
3.如果 mapping 的 validate 属性设置为 true, 它将调用 form bean 的validate 方法.如果失败,Servlet 将控制转发到input 属性标明的路径,控制流终止。
4.如果mapping 标明一个Action 类型,如果它已经存在或已经实例化,它将被重用。Action的execute 方法被调用,并传递一个实例化的form bean (或者null)。
5.Action 可以组装form bean, 调用业务对象,以及其他需要做的事情。 Action 返回一个ActionForward 给ActionServlet
如果ActionForward 指向另一个 Action URI,重新开始; 否则,显示页面或者其他
资源,流程结束。通常,结果是一个JSP页面,或者Jasper, 或其它类似技术 (非 Struts)
我当初学struts的总结,希望对你有用