struts框架、运行机制



 Struts框架是MVC模式的一种实现,框架提供的是一种"半成品",使用框架可以让我们快速构建应用程序
Struts概览
如图: 



1、客户端浏览器发出http请求,当我们通过客户端浏览器向web应用程序发送请求时,web服务器首先读取struts-config.xml,struts-config.xml指定了哪一个servlet充当中心控制器。所有的请求都交给中心控制器Controller servlet处理。我们可以在中心控制器中添加判断、过滤等功能。Controller Servlet属于Controller层。
2、接下来根据用户的请求,可能需要一些业务逻辑的处理。在Struts架构中Business Logic Action就充当了业务逻辑代理。比如客户的请求包括存款、取款、余额查询等业务,这些业务由一个一个单独的业务逻辑类来处理。这些业务逻辑处理类由中心控制器来分派。具体的业务逻辑处理类可以由javabean,ejb,webservice等来具体处理。Business Logic Action实际上时作为业务逻辑处理类的前端,作为业务代理。Business Logic Action不实现具体的业务逻辑,而是由Business Logic Action去调度另外的具体业务逻辑处理类(javabean,ejb,webservice)。一个Action代表一个业务逻辑,中心控制器Servlet只能看到Action,根据不同的客户请求转发(Dispatch)给不同的Action,而不同的Action创建不同的javabean或者ejb的对象,调用其业务方法来响应客户的请求。Business Logic Action也是属于Controller层。
3、Model Application State,这是业务逻辑组件。相应的业务逻辑组件可以修改相应的数据,访问数据库,接受用户数据填充到javabean中等。
4、业务逻辑处理完后,控制权回到中心控制器Controller Servlet,由它导航到某个jsp页面,由jsp页面(通过getProperty标签获取相应的数据)响应到客户端浏览器。
Struts组成部分介绍
控制(Control):由ActionServlet实现:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类),再由这些动作类调用不同的业务逻辑组件。另外,控制组件也负责用相应的请求参数填充Action Form(通常称之为ActionBean),并传给动作类(通常称之为FormBean)。动作类实现核心商业逻辑,它可以访问java bean或调用EJB。最后动作类把控制权传给后续的JSP文件,后者生成视图。所有这些控制逻辑利用Struts-Config.xml文件来配置。
视图(View):由JSP实现:主要由JSP生成页面完成视图,在这里JSP最好仅仅完成显示的工作就好了。Struts提供丰富的JSP标签库:Html,Bean,Logic,Template等,这有利于区分开表现逻辑和程序逻辑。也可以不使用Struts标签库,而采用JSTL标准标签库,而且行业趋势是采用JSTL标准标签库,因此Struts标签库我们可以不用花时间去理会它。
模型(Model)模型以java bean的形式存在。这些bean分为三类:Action Form、Action(可以认为Action控制层)、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户信息,如表单信息。Action通常称之为ActionBean,获取从ActionServlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。(建议不要直接再Action内实现FormBean或者JavaBean或者EJB的工作,这样做模块化比较弱,不适合更新维护)。
Struts应用程序执行过程
在Struts中,用户的请求一般以*.do作为请求服务名(而*.do不是一个实际的文件而是一个虚拟的东西),所有的*.do请求均被指向ActionServlet,ActionServlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。
根据上面的分析得出:
Struts的核心是ActionServlet,ActionServlet的核心是Struts-config.xml。
Struts框架的组成部分
struts-config.xml --------------------- Struts配置文件
ActionServlet     --------------------- 控制器
Action Class      --------------------- 包含事务逻辑(Action类,每一个Action类对应一个业务逻辑组件(javabean、ejb))
ActionForm        --------------------- 显示模块数据
以上就是Struts已经架构好了的一个“半成品”框架
另外在Struts框架中还有
ActionMapping     --------------------- 帮助控制器将请求映射到操作(也就是在struts-config.xml中配置将哪一个*.do请求映射到哪一个action类)
ActionForward     --------------------- 用来指示操作转移的对象(比如成功的情况转到成功页面,失败的情况转到失败页面)
ActionError       --------------------- 用来存储和回收错误
Struts标记库
***struts-config.xml***
struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握struts-config.xml是掌握struts的关键所在。
struts-config.xml的FormBean部分
<struts-config>
  <!--Form Bean Definitions-->
  <form-beans>
     <form-bean name="testform" type="com.cjea.test.TestForm" />
  </form-beans>
struts-config.xml的全局转发部分
<!--Global Forward Definitions-->
   <global-forwards>
      <forward name="failure"  path="bad.jsp" />
      <forward name="success"  path="/good.jsp" />
   </global-forwards>
struts-config.xml的action部分
<action-mappings>
   <action path="/test/test" type="com.cjea.test.testAction" name="testform" scope="request">
   <!--(注意,这里是一个test.do,在jsp页面中的action请求维test.do,实际上在struts-config.xml中将其映射到type="com.cjea.test.testAction"这个实际的action类中处理,name指代的是formbean。也就是说ActionServlet将客户请求的表单数据转发给action类testAction之前,先将jsp表单中的数据填充到testform这个FormBean中,再将请求转发给testAction这个action类)-->
   <forward name="success" path="/test/good.jsp" />
   </action>
</action-mappings>
</struts-config>
ActionServlet的基本功能
1、截获用户的Http请求
2、把这个请求映射到相应的Action类
3、创建一个ActionForm bean实例,将form请求放入formbean的实例中
另外还有
调用Action实例的perform()方法
将ActionForm bean,Action Mapping对象,request和response对象传给Action的perform()方法
perform返回一个ActionForword对象,根据方法执行情况转到相应的jsp页面
Action Classes
Action类是业务逻辑的一个包装。Action类的用途是将HttpServletRequest转换为业务逻辑。
ActionForm
ActionForm维护Web应用程序的会话状态。
ActionForm是一个抽象类,必须为每个输入表单模型创建该类的子类。
基本思路:
1、继承Action类创建子类
2、继承ActionForm创建FormBean
3、修改struts-config.xml
反复强调:Struts控制流
1、表单提交数据给一个带.do后缀的URL
2、该地址被struts-config.xml映射到一个Action object,该Action object的execute方法处理请求:execute有一个参数为Form Bean,它自动填充表单数据
3、Action object然后调用业务逻辑和数据访问逻辑,把结果放到Result Bean中,并且把Bean对象存储为request,session,or application范围:Action使用mapping.findForward返回一个条件,并且这个条件被struts-config.xml映射到不同的jsp页面。
4、系统跳转到合适的jsp页面:bean:write标签用来输出Form Bean和Result Bean;可以使用bean:message标签输出定义在系统属性文件中的国际化消息。

 

 

出处:http://user.qzone.qq.com/10710121/blog/59

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值