struts的流程

原创 2004年02月26日 14:49:00
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用来定义模板机制。

struts请求走向流程

一.流程图框架往往封装了太多的东西,一次struts请求在其内部的流程如下图所示: 二、流程详解 web.xml:http请求(可以说url链接也可以是form表单)首先会被web.xml里的Str...
  • napoay
  • napoay
  • 2016年01月27日 21:40
  • 1678

深入浅出了解Struts的处理流程(有图有真相)

Struts框架在java web开发中很常用。最近我也在逐步摸索和学习。今天就来说说Struts的处理流程。       先上一幅时序图:...
  • xiaoxian8023
  • xiaoxian8023
  • 2013年09月14日 08:11
  • 4066

Struts初始化过程

导读:   Sturts初始化过程取决于在web.xml文件中配置的初始化参数,servlet容器在首次启动或servlet的第一次请求到达时加载Struts ActionServlet。在这两种情况...
  • turkeyzhou
  • turkeyzhou
  • 2008年02月28日 20:15
  • 949

Struts2的运行流程及其工作原理

Struts2是一套非常优秀的Web应用框架,实现优雅、功能强大、使用简洁。可以说是Struts2是一款非常成熟的MVC架构。 在我们学习Struts2时,最好是先学习它的运行流程、核心概念,从...
  • lijia791541916
  • lijia791541916
  • 2015年12月09日 16:42
  • 3073

Struts2学习第一天——struts2基本流程与配置

struts2框架 struts2快速入门 Struts2 处理流程 模仿struts2流程完成入门程序 struts2的流程分析以及工具配置 struts2配置(重点) 1.struts2配置文件加...
  • lutianfeiml
  • lutianfeiml
  • 2016年06月14日 14:48
  • 18689

Struts运行流程解释

  此图为Struts运行流程图例如现在用一个登录页面做例子来解释:1.用户请求登录。2.调用ActionForm 填充FormBean,其实就是调用ActionBean的set()方法。控制器代码:...
  • yellowen170161599
  • yellowen170161599
  • 2008年04月05日 16:51
  • 2483

Struts1的工作流程

Struts1的工作流程图如下所示:其工作流程如下: 当Web服务器启动的时候,根据web.xml文件加载并初始化ActionServlet,根据配置ActionServlet的config参数信息,...
  • zhuxinquan61
  • zhuxinquan61
  • 2016年08月31日 15:56
  • 957

struts入门----HelloWorld程序开发步骤

struts入门----HelloWorld程序开发步骤 1.在MyEclipse中新建一个Web Project,命名为struts-helloworld 2.引入struts2支持,右键工程名,选...
  • ZZ2713634772
  • ZZ2713634772
  • 2016年07月07日 08:52
  • 321

struts2工作流程(请求响应流程)

Struts2工作原理 Struts2请求响应流程:   在struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组件如:Controller、ActionProxy、Ac...
  • lgstudyvc
  • lgstudyvc
  • 2015年03月27日 15:22
  • 2223

Java Web - Struts2基本执行流程

一 前台测试页面 "> h3{f
  • bcbobo21cn
  • bcbobo21cn
  • 2015年06月01日 14:44
  • 571
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts的流程
举报原因:
原因补充:

(最多只允许输入30个字)