Loading...
服务热线:028-8970092 购物车(0)
您好,访客 请登陆注册
 

当前位置:资讯中心主页 >Linux >文章内容

  • Struts用户指南
  • 来源:linux宝库作者:linux宝库 发布时间:2007-09-30 08:00:00
    • 域名注册

    • 域名惊喜价格 cn域名1元注册
    • com域名39.9

      虚拟主机

    • 主机按月支付,低至19元/月
    • 超大流量,可开子站点

      VPS主机

    • 特惠VPS168元/月,4-8M独享带宽保证
    • 独立操作系统,无限开站点

      1. 介绍

      1.1 Model-View-Controller (MVC) 设计模式

      FIXME - 需要一个对该模式一般性的介绍。(译注:能参考机械工业出版社的《设计模式》。)

      1.2 将MVC概念映射到Struts组件中

      Struts 的体系结构实现了Model-View-Controller设计模式的概念,他将这些概念映射到web应用程式的组件和概念中,如下图所示:

      这一体系结构中每个主要的组件都将在下面做周详的讨论。

      1.3 Model: 系统状态和商业逻辑JavaBeans

      基于MVC的系统中的 Model 部分能细分为两个概念 -- 系统的内部状态, 能够改动状态的行为。用语法术语来说,我们能把状态信息当作名词(事物),把行为当作动词(事物状态的改动)。

      通常说来,你的应用程式将系统内部的状态表示为一组一个或多个的JavaBeans,使用属性(properties)来表示状态的细节。依赖于你的应用程式的复杂度,这些beans能是自包含的(以某种方式知道怎样永久地保存他们的状态信息),或能是正面的(facades),知道当被请求时怎样从外部数据源(例如数据库)中取得信息。Entity EJBs通常也用来表示内部状态。

      大型应用程式经常将系统可能的商业逻辑行为表示为能被维护状态信息的beans调用的方法。举个例子,你有一个为每个当前用户保存在session中的购物车bean,里面是表示当前用户决定购买物品的属性。这个bean有一个checkOut()方法用来验证用户的信用卡,将定单发给库房以选择货品和出货。别的系统分别地表示同样的行为,或许使用Session EJBs。

      在一些小型应用程式中,同样的行为又可能嵌入到作为Controller一部分的 Action 类中。这在逻辑非常简单或并不想要在其他环境中重用这些商业逻辑时是恰当的。Struts框架支持所有这些方法,但建议将商业逻辑(“做什么”)和 Action 类(“决定做什么”)分离开。

      1.4 View: JSP页面和表示组件

      基于Struts的应用程式中的 View 部分通常使用JSP技术来构建。JSP页面包含称为“模版文本”的静态HTML(或XML)文本,加上插入的基于对特别行为标记解释的动态内容。JSP环境包括了其用途由JSP规范来描述的一套标准的行为标记,例如 <jsp:useBean> 。另外,更有一个用来定义你自己标记的标准机制,这些自定义的标记组织在“制定标记库”中。

      Struts包括了一个广阔的便于创建用户界面,并且充分国际化的制定标记库,和作为系统 Model 部分一部分的ActionForm beans美妙地相互配合。这些标记的使用将在后面做周详讨论。

      除了JSP页面和其包含的行为及制定标记,商业对象经常需要能够基于他们在被请求时的当前状态将自己处理成HTML(或XML)。从这些对象处理过的输出能非常容易地使用 <jsp:include> 标准行为标记包括在结果的JSP页面中。

      1.5 Controller: ActionServlet和ActionMapping

      应用程式的 Controller 部分集中于从客户端接收请求(典型情况下是个运行浏览器的用户),决定执行什么商业逻辑功能,然后将产生下一步用户界面的责任委派给一个适当的View组件。在Struts中,controller的基本组件是个 ActionServlet 类的servlet。这个servlet通过定义一组映射(由Java接口 ActionMapping 描述)来设置。每个映射定义一个和所请求的URI相匹配的路径和一个 Action 类(一个实现 Action 接口的类)完整的类名,这个类负责执行预期的商业逻辑,然后将控制分派给适当的View组件来创建响应。

      Struts也支持使用包含有运行框架所必需的标准属性之外的附加属性的 ActionMapping 类的能力。这允许你保存特定于你的应用程式的附加信息,同时仍可利用框架其余的特性。另外,Struts允许你定义控制将重定向到的逻辑名,这样一个行为方法能请求“主菜单”页面(举例),而不必知道相应的JSP页面的实际名字是什么。这个功能极大地帮助你分离控制逻辑(下一步做什么)和显示逻辑(相应的页面的名称是什么)。

      2. 创建Model组件

      2.1 概述

      你用到的应用程式的需求文件非常可能集中于创建用户界面。然而你应该确保每个提交的请求所需要的处理也要被清晰的定义。通常说来,Model 组件的研发者集中于创建支持所有功能需求的JavaBeans类。一个特别应用需求的beans的精确特性依赖于具体需求变化会非常的大,不过他们通常能分成下面讨论的几种类型。然而,首先对“范围”概念做一个简短的回顾是有用的,因为他和beans有关。

      2.2 JavaBeans和范围

      在一个基于web的应用程式中,JavaBeans能被保存在(并从中访问)一些不同“属性”的集合中。每一个集合都有集合生存期和所保存的beans可见度的不同的规则。总的说来,定义生存期和可见度的这些规则被叫做这些beans的 范围 。JSP规范中使用以下术语定义可选的范围(在圆括号中定义servlet API中的等价物):

      page - 在一个独立的JSP页面中可见的Beans,生存期限于当前请求。(service()方法中的局部变量)

      request - 在一个独立的JSP页面中可见的Beans,也包括所有包含于这个页面或从这个页面重定向到的页面或servlet。(Request属性)

      session - 参和一个特定的用户session的所有的JSP和servlet都可见的Beans,跨越一个或多个请求。(Session属性)

      application - 一个web应用程式的所有JSP页面和servlet都可见的Beans。(Servlet context属性)

      记住同一个web应用程式的JSP页面和servlets共享同样一组bean集合是非常重要的。例如,一个bean作为一个request属性保存在一个servlet中,就象这样:

      MyCart mycart = new MyCart(...);

      request.setAttribute("cart", mycart);

      将即时被这个servlet重定向到的一个JSP页面使用一个标准的行为标记看到,就象这样:

      <jsp:useBean id="cart" scope="request"

      class="com.mycompany.MyApp.MyCart"/>

      2.3 ActionForm Beans

      Struts框架通常假定你已为每一个你的应用程式中请求的输入创建了一个 ActionForm bean(即一个实现了 ActionForm 接口的类)。如果你在你的 ActionMapping 设置文件中定义了这样的beans(见“创建Controller组件”),Struts的controller servlet在调用适当的 Action 方法前将自动为你执行如下的服务:

      用适当的关键字检查用户的session中是否有适当的类的bean的一个实例。

      如果没有这样的session范围的bean,自动建立一个新的bean并添加到用户的session中。

      对每个名字对应于bean中的一个属性的请求参数,调用相应的set方法。这个操作类似于当你以通配符“*”选择所有属性使用标准的JSP行为标记 <jsp:setProperty> 。

      更新的ActionForm bean在被调用时将被传递给Acton类的perform()方法,以使这些值能够即时生效。

      当你在写你的ActionForm beans时,记住以下的原则:

      ActionForm 接口本身不必特别的实现方法。他是用来标识这些特定的beans在整个体系结构中的作用。典型情况下,一个ActionForm bean只包括属性的get方法和set方法,没有商业逻辑。

      通常在一个ActionForm bean中只有非常少的输入验证逻辑。这样的beans存在的主要理由是保存用户为相关的表单所输入的大部分近期值 -- 甚至在错误被检测到时 -- 这样同样的页面能被重建,伴随有一组出错信息,这样用户仅仅需要纠正错误的字段。用户输入的验证应该在 Action 类中执行(如果是非常简单的话),或在适当的商业逻辑beans中执行。

      为每个表单中出现的字段定义一个属性(用相关的getXxx()和setXxx()方法)。字段名和属性名必须按照JavaBeans的约定相匹配。例如,一个名为 username 的输入字段将引起 setUsername() 方法被调用。

      你应该注意一个“表单”在这里讨论时的意义并不必须对应于用户界面中的一个独立的JSP页面。在非常多应用程式中一个“表单”(从用户的观点)延伸至多个页面也是非常平常的。想想看,例如,通常在安装新的应用程式时使用的导航安装程式的用户界面。Struts鼓励你定义一个包含所有字段属性的独立的ActionForm bean。不管字段实际上是显示在哪个页面上。同样的,同一表单的不同的页面应该提交到相同的Action类。如果你遵照这个建议,在大多数情况下,页面设计者能重新组织不同页面中的字段而不必改动处理逻辑。

      2.4 系统状态Beans

      系统的实际状态通常表示为一组一个或多个的JavaBeans类,其属性定义当前状态。例如,一个购物车系统包括一个表示购物车的bean,这个bean为每个独立的购物者维护,这个bean中包括(在其他事物之中)一组购物者当前选择购买的项目。分别地,系统也包括保存用户信息(包括他们的信用卡和送货地址)、可获得项目的目录和他们当前库存水平的不同的beans。

      对于小规模的系统,或对于不必长时间保存的状态信息,一组系统状态beans能包含所有系统原来经历的特定细节的信息。或经常是,系统状态beans表示永久保存在一些外部数据库中的信息(例如CustomerBean对象对应于表 CUSTOMERS 中的特定的一行),在需要时从服务器的内存中创建或清除。在大规模应用程式中,Entity EJBs也用于这种用途。

      2.5 商业逻辑Beans

      你应该把你的应用程式中的功能逻辑封装成对为此目的设计的JavaBeans的方法调用。这些方法能是用于系统状态beans的相同的类的一部分,或能是在专门执行商业逻辑的独立的类中。在后一种情况下,你通常需要将系统状态beans传递给这些方法作为参数处理。

      为了代码最大的可重用性,商业逻辑beans应该被设计和实现为他们不知道自己被执行于web应用环境中。如果你发目前你的bean中你必须import一个 javax.servlet.* 类,你就把这个商业逻辑捆绑在了web应用环境中。考虑重新组织事物使你的 Action 类(Controller任务的一部分,在下面描述)翻译所

  • 以上内容由 华夏名网 搜集整理,如转载请注明原文出处,并保留这一部分内容。

      “华夏名网” http://www.sudu.cn 和 http://www.bigwww.com 是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租用业务。公司创建于2002年,经过6年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构webhosting.info评价为25大IDC服务商之一。

    华夏名网网址导航: 虚拟主机 双线主机 主机 域名注册 cn域名 域名 服务器租用 酷睿服务器 vps vps主机

  • (阅读次数:176)
  • 上一篇: 如何使用Lucene对html文件进行索引    下一篇: Eclipse使用入门
  • [收藏] [推荐] [评论] [打印本页] [返回上一页][关闭窗口]
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。