﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-魏杰的技术专栏-随笔分类-Spring/Hibernate/Struts</title><link>http://www.cnitblog.com/jackmisweijie/category/7503.html</link><description>共同交流学习</description><language>zh-cn</language><lastBuildDate>Wed, 28 Sep 2011 14:47:31 GMT</lastBuildDate><pubDate>Wed, 28 Sep 2011 14:47:31 GMT</pubDate><ttl>60</ttl><item><title>Struts框架详解</title><link>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47758.html</link><dc:creator>魏杰</dc:creator><author>魏杰</author><pubDate>Thu, 07 Aug 2008 12:45:00 GMT</pubDate><guid>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47758.html</guid><wfw:comment>http://www.cnitblog.com/jackmisweijie/comments/47758.html</wfw:comment><comments>http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47758.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/jackmisweijie/comments/commentRss/47758.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/jackmisweijie/services/trackbacks/47758.html</trackback:ping><description><![CDATA[<div><strong><span>1</span></strong><strong><span>、<span>Struts</span>应用框架介绍</span></strong></div>
<div><strong><span><font size=3>（<span>1</span>）框架</font></span></strong></div>
<div><span><font size=3>框架最简单的形式是指已开发过并已测试过的软件的程序块，这些程序块可以在多个软件开发工程中重用。框架提供了一个概括的体系结构模版，可以用这个模板来构建特定领域中的应用程序。</font></span></div>
<div><font size=3><span>Framework</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>概念并不是很新了，伴随着软件开发的发展，在多层的软件开发项目中，可重用、易扩展的，而且是经过良好测试的软件组件，越来越为人们所青睐。这意味着人们可以将充裕的时间用来分析、构建业务逻辑的应用上，而非繁杂的代码工程。</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>于是人们将相同类型问题的解决途径进行抽象，抽取成一个应用框架。这也就是我们所说的</span><span>Framework</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>。</span><span>Framework</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的体系提供了一套明确机制，从而让开发人员很容易的扩展和控制整个</span><span>framework</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>开发上的结构。</span></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>2</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）</span></strong><strong><span>为什么会出现应用框架</span></strong></font></div>
<div><span Times Roman?; mso-hansi-font-family: ?Times New Roman??><font size=3>您只要细心地研究真实的应用程序，就会发现程序大致上由两类性质不同的组件组成，一类与程序要处理的具体事务密切相关，我们不妨把它们叫做业务组件；另一类是应用服务。</font></span></div>
<div><span Times Roman?; mso-hansi-font-family: ?Times New Roman??><font size=3>比如说：一个税务征管系统和一个图书管理系统会在处理它们的业务方面存在很大的差异，这些直接处理业务的组件由于业务性质的不同不大可能在不同的系统中重用，而另一些组件如决定程序流向的控制、输入的校验、错误处理及标签库等这些只与程序相关的组件在不同的系统中可以很好地得到重用。</font></span></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>人们自然会想要是把这些在不同应用程序中有共性的一些东西抽取出来，做成一个半成品程序，这样的半成品就是所谓的程序框架，再做一个新的东西时就不必白手起家，而是可以在这个基础上开始搭建。实际上，有些大型软件企业选择自己搭建这样的框架。</span><strong></strong></font></div>
<div><strong><span><font size=3>（<span>3</span>）为什么要用框架？</font></span></strong></div>
<div><span><font size=3>因为软件系统发展到今天已经很复杂了，特别是服务器端软件，设计到的知识，内容，问题太多。在某些方面使用别人成熟的框架，就相当于让别人帮你完成一些基础工作，你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟，稳健的，他可以处理系统很多细节问题，比如，事物处理，安全性，数据流控制等问题。还有框架一般都经过很多人使用，所以结构很好，所以扩展性也很好，而且它是不断升级的，你可以直接享受别人升级代码带来的好处。</font></span></div>
<div><span><font size=3>框架一般处在低层应用平台（如<span>J2EE</span>）和高层业务逻辑之间的中间层。<strong></strong></font></span></div>
<div><strong><span><font size=3>（<span>3</span>）</font></span></strong><span><strong><span>Struts </span></strong></span><font size=3><strong><span>Web</span></strong><strong><span>应用框架</span></strong></font></div>
<div><span><span>Struts </span></span><span><span>是<span> Apache </span>软件基金会（<span>Apache Software Foundation</span>）资助的一个</span></span><span><font size=3>为开发基于<span>MVC</span>模式应用架构的开源框架，是利用<span>Java Servlet</span>和<span>JSP</span>、<span>XML</span>等方面的技术来实现构建<span>Web</span>应用的一项非常有用的技术，它也是基于<span>MVC</span>模式的<span>Web</span>应用最经典框架。<span> </span></font></span></div>
<div><font size=3><span>Struts</span><span>框架的主要架构设计和开发者是<span>Craig R.McClanahan</span>。<span>Struts </span>是目前<span>Java Web MVC</span>框架中不争的王者。经过长达五年的发展，<span>Struts</span>已经逐渐成长为一个稳定、成熟的框架，并且占有了<span>MVC</span>框架中最大的市场份额。</span></font></div>
<div><font size=3><span>Struts</span><span>把<span>Servlet</span>、<span>JSP</span>、自定义标签和信息资源<span>(message resources)</span>整合到一个统一的框架中，主要</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>由一系列的框架类、辅助类和定制的</span><span>JSP</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>标记库构成。</span><span>开发人员利用其进行开发时不用再自己编码实现全套<span>MVC</span>模式，极大的节省了时间。</span></font></div>
<div><span><span><font size=3>&nbsp;</font></span><a name=OLE_LINK1><font size=3> </font></a><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200807/200807101215677739921.gif" border=0></span></div>
<div><span><font size=3>&nbsp;</font></span></div>
<div><strong><span>2</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、框架的组成</span></strong><strong></strong></div>
<div><span Times Roman?; mso-hansi-font-family: ?Times New Roman??><font size=3>一个设计良好的框架一般分为三层：</font></span></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>1</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）接口层</span></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>这一层要尽量使用</span><span>interface</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>，在这一层中你要考虑到你现在的、将来的可能支持的功能，但不需要去实现它，只定义到接口层次就可以了。如</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中的插件接口</span><span>PlugIn</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>。</span></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>2</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）抽象层</span></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>这一层要针对你当前的需求做定制，对你的需求中的通用逻辑做实现。这一层应该出现大量的抽象类。如</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中的</span><span>ActionServlet</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、</span><span>Action</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>和</span><span>ActionForm</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>等类。</span></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>3</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）实现层</span></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>不用说了，把前面两层没有做掉的事情在这一层都做了吧。如</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中后台实现的各种功能</span><strong></strong></font></div>
<div><strong><span>3</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、为什么要提出</span></strong><strong><span>Struts</span></strong></div>
<div><strong><span><font size=3>（<span>1</span>）背景</font></span></strong></div>
<div><span><strong><span>由于我们开发<span>Web</span>应用的复杂度随着系统的复杂度的要求越来越来复杂。特别是在代码重用，代码移植、代马可插扒等问题上出现了许多重复开发、维护困难等</span></strong></span><span><span>。从而提出了</span></span><span><font size=3>Struts</font></span><span><span>开发框架。</span></span><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>它的设计目的是从整体上减轻构造企业</span><span>Web</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>应用的负担，并提供国际化和数据库连接池支持。</span><span></span></font></div>
<div><font size=3><span>Struts </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>是一组相互协作的类、</span><span>servlet </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>和</span><span> JSP </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>标记，它们组成一个可重用的</span><span> MVC 2 </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>设计。这个定义表示</span><span> Struts </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>是一个框架，而不是一个库，但</span><span> Struts </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>也包含了丰富的标记库和独立于该框架工作的实用程序类。</span></font></div>
<div><span><font size=3>&nbsp;</font></span></div>
<div><strong><span><font size=3>（<span>2</span>）采用<span>Struts</span>的优点</font></span></strong></div>
<div><font size=3><span>在实际开发中，<span>MVC</span>框架开发相当费时，<span>Struts </span>实现了<span>MVC</span>这种框架，但又扩充了该<span>MVC</span>框架。这样使得系统的开发就像&#8220;填空&#8221;一样进行，相当快速。</span><strong></strong></font></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>采用<span>Strust</span>可以加快开发速度、增强系统的灵活性、降低系统的藕合性（</font></span><span>&nbsp;</span></span><span><font size=3>分工明确：业务层与表示层分开，使得管理人员可以在小组内分配责任。网页设计人员与<span>JAVA</span>程序员各司其职。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>简化页面：使用标记，把逻辑处理的代码分离开来。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>通过将问题划分为更小的组件，当技术空间或问题空间中出现变化时，您就有更多的机会重用代码。</span></font></div>
<div><strong><span><font size=3>（<span>3</span>）<span>Struts</span>的缺点</font></span></strong></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>有限的适用范围：<span>Struts </span>是一种基于<span> Web </span>的<span> MVC </span>解决方案，所以必须用<span> HTML</span>、<span>JSP </span>文件和<span> Servlet </span>来实现它。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><font size=3><span>J2EE </span><span>应用程序支持</span></font></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>复杂性：在将问题分为几个部分的同时也引入了复杂性（在强健性增强的同时，也意味着复杂性的增加）。<strong><span> </span></strong></font></span></div>
<div><font size=3><strong><span>4</span></strong><strong><span>、</span></strong><strong><span>Struts</span></strong><strong><span>压缩包内容</span></strong></font></div>
<div><span><font size=3>下载后的<span>*.zip</span>包文件包含两个目录，<span>lib</span>和<span>webapps</span>。在<span>lib</span>目录中有使用<span>struts</span>创建应用程序是所需的文件：</font></span></div>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=157>
            <div align=left><strong><span>文件</span></strong></div>
            </td>
            <td vAlign=top width=487>
            <div align=left><strong><span>描述</span></strong></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=157>
            <div align=left><span>jdbc2_0-stdext.jar</span></div>
            </td>
            <td vAlign=top width=487>
            <div align=left><span>包含<span>JDBC2.0 Optional Package API</span>类。如果我们要使用<span>struts</span>提供的数据资源，就需要将这个文件拷贝到<span>WEB-INF\lib</span>下</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=157>
            <div align=left><span>Struts.jar</span></div>
            </td>
            <td vAlign=top width=487>
            <div align=left><span>包含<span>struts</span>中所有的<span>java</span>类。同样也需要拷贝到<span>WEB-INF\lib</span>下</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=157>
            <div align=left><span>*.tld</span></div>
            </td>
            <td vAlign=top width=487>
            <div align=left><span>标记库描述器文件，描述了多个<span>struts</span>标记库中的自定义标记。同样要拷贝到<span>WEB-INF\lib</span>下</span></div>
            </td>
        </tr>
    </tbody>
</table>
<div><span><font size=3>在<span>webapps</span>目录下有如下文件：</font></span></div>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=210>
            <div align=left><strong><span>Web</span></strong><strong><span>应用程序</span></strong></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><strong><span>描述</span></strong></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-blank.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>一个简单的<span>web</span>应用程序</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-documentation.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>包含<span>struts</span>站点上所有<span>struts</span>文档</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-example.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>Struts</span><span>很多特性的示范</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-exercisetaglib.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>主要用于对自定义标签库进行增加而使用的测试页，但也可以示范如何使用<span>struts</span>标记</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-template.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>包含<span>struts</span>模板标记的介绍和范例</span></div>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=210>
            <div align=left><span>Struts-upload.war</span></div>
            </td>
            <td vAlign=top width=434>
            <div align=left><span>一个简单的例子，示范如何使用<span>struts</span>框架上传文件</span></div>
            </td>
        </tr>
    </tbody>
</table>
<div><strong><span><font size=3>&nbsp;</font></span></strong></div>
<div><strong><span>5</span></strong><strong><span>、<span>Struts</span>的整体框架</span></strong></div>
<div align=left><span><font size=3>（<span>1</span>）<span>Struts</span>框架的<span>MVC</span>组件结构图</font></span></div>
<div align=left></div>
<div align=left><span><span><img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200807/200807101215678207718.jpg" border=0></span></span></div>
<div align=left><span><span>在<span>struts</span>框架中，模型分为两个部分：系统的内部状态和可以改变状态的操作（事务逻辑）。内部状态通常由一组<span>ActinForm JavaBean</span>表示。根据设计或应用程序复杂度的不同，这些<span>Bean</span>可以是自包含的并具有持续的状态，或只在需要时才获得数据（从某个数据库）。</span></span></div>
<div align=left><span><span>大型应用程序通常在方法内部封装事务逻辑（操作），这些方法可以被拥有状态信息的<span>bean</span>调用。比如购物车<span>bean</span>，它拥有用户购买商品的信息，可能还有<span>checkOut()</span>方法用来检查用户的信用卡，并向仓库发定货信息。</span></span></div>
<div align=left><span><span>小型程序中，操作可能会被内嵌在<span>Action</span>类，它是<span>struts</span>框架中控制器角色的一部分。当逻辑简单时这个方法很适合。建议用户将事务逻辑（要做什么）与<span>Action</span>类所扮演的角色（决定做什么）分开。</span></span></div>
<div align=left><span><span>Struts</span></span><span><span>为<span>Model</span>部分提供了<span>Action</span>和<span>ActionForm</span>两种<span>Bean</span>对象：所有的<span>Action</span>处理器对象都是开发者从<span>Struts</span>的<span>Action</span>类派生的子类。<span>Action</span>处理器对象封装了具体的处理逻辑，调用业务逻辑模块，并且把响应提交到合适的<span>View</span>组件以产生响应。</span></span></div>
<div align=left><span><span>Struts</span></span><span><span>提供的<span>ActionForm</span>组件对象，它可以通过定义属性描述客户端表单数据。开发者可以从它派生子类对象，利用它和<span>Struts</span>提供的自定义标记库结合可以实现对客户端的表单数据的良好封装和支持，<span>Action</span>处理器对象可以直接对它进行读写，而不再需要和<span>request</span>、<span>response</span>对象进行数据交互。</span></span></div>
<div align=left><span><font size=3>（<span>2</span>）</font></span><span><span>Struts</span></span><span><span>框架的处理流程</span></span></div>
<div align=left><span>&nbsp;<img onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" + this.src)' alt="" src="http://weijie.blog.51cto.com/attachment/200807/200807111215736791156.gif" border=0></span></div>
<div align=left>&nbsp;</div>
<div align=left></div>
<div><span><span><span>l&nbsp;</span></span></span><font size=3><span>首先，控制器（<span>ActionServlet</span>）进行初始化工作，读取配置文件（<span>struts-config.xml</span>），为不同的<span>Struts</span>模块初始化相应的<span>ModuleConfig</span>对象。比如配置文件中的<span>Action</span>映射定义都保存在<span>ActionConfig</span>集合中。相应地有<span>ControlConfig</span>集合、<span>FormBeanConfig</span>集合、<span>ForwardConfig</span>集合和<span>MessageResourcesConfig</span>集合等。</span><span></span></font></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><span>Struts</span></span><span><span>框架的处理流程清楚的体现了<span>MVC</span>系统的特点，</span></span><span><font size=3>所有的页面请求都将发送到<span>Struts</span>的前端控制器<span>ActionServlet</span>中（因此如果要进行前置处理，可以继承<span>ActionServlet</span>并重写<span>process()</span>方法），同时<span>ActionServlet</span>也将根据<span>struts-config.xml</span>配置文件中的设置（<strong><span>&lt;action&gt;</span>标签</strong>）来决定转向到那个后端控制器<span>Action</span>类。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><span><font size=3>当页面中的<span>Form</span>表单被提交时，<span>ActionForm</span>将自动地封装和处理该<span>Form</span>表单中的数据。同时在<span>Action</span>的子类中可以存取存储在<span>ActionForm</span>中的<span>Form</span>表单数据。</font></span></div>
<div><span><span><font size=3>l</font>&nbsp;</span></span><font size=3><span>Action</span><span>的子类将处理所获得的存储在<span>ActionForm</span>中的<span>Form</span>表单数据，</span></font><span><span>处理和响应客户请求，它还调用后台的</span></span><span><font size=3>JavaBean</font></span><span><span>组件</span></span><span><font size=3>完成具体的业务逻辑。同时也按照在<span>struts-config.xml</span>文件内的<span>forward</span>标签内容（如<span>&lt;forward name="sayHello" path="/sayHello.jsp"/&gt;</span>），将结果交由某个<span>JSP</span>页面显示。</font></span></div>
<div><font size=3><strong><span>（<span>3</span>）</span></strong><strong><span>Struts</span></strong><strong><span>体系组成</span></strong><strong></strong></font></div>
<div><font size=3><strong><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>体系可以看成两个相对独立的部分：</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>第一个部分是</span><span>Struts API</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>，用于编写支持</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的应用组件；</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>第二部分是</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的</span><span>JSP</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>标记库，由</span><span>html</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、</span><span>bean</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、</span><span>logic</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>和</span><span>template</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>四个标记组成。</span></font></div>
<div><font size=3><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的两个部分有着各自不同的用户。对于规模较小的项目，同一个用户可能同时使用这两个部分；但对于规模较大的项目，通常开发者使用</span><span>API</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>组件，而负责</span><span>HTML</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>页面布局的人使用标记库。</span><strong></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（</span><span>4</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>）</span></strong><span>struts-config.xml</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置文件</span><strong></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>框架中的模型</span><span>(M)</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、视图</span><span>(V)</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>、控制器</span><span>(C) </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>三个部分是通过</span><span>struts-config.xml</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置文件将其联系在一起。一个标准的</span><span>struts-config</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>文件包含如下结构，有一点要引起大家的注意的，就是，</span><span>struts-config.xml</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>中配置的各个项目是有一定的顺序要求的，几个主要项目的顺序大致是这样的：</span> </font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>?xml version="1.0" encoding="UTF-8"?</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" </span></font></div>
<div>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <div><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>注意：</span><span>各个标签项目是有一定的顺序要求的</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>！</span></div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<font size=3><span>"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd </span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>struts-config</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>data-sources /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义数据源</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>form-beans /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义</span><span>ActionForm</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>global-exceptions /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义全局异常</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>global-forwards /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义全局转向</span><span>url</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>action-mappings /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>定义</span><span>action</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>controller /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置</span><span>Controller</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>message-resources /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置资源文件</span></strong></font></div>
<div><font size=3><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>plug-in /</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span><span> // </span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>配置资源文件</span></strong></font></div>
<div><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＜</span><span>/struts-config</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>＞</span></font></div>
<div><font size=3><strong><span>（<span>5</span>）<span>Struts</span>与其它</span></strong><strong><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>框架的不同</span></strong><strong></strong></font></div>
<div><strong><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><font size=3><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>在</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>应用中，有一个称为</span><span>ActionServlet</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的主调度程序（或称为分配器）。不过，并非所有的请求都必须通过</span><span>ActionServlet</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>（以</span><span>&#8220;*.do&#8221;</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>结尾的</span><span>URL</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>都是</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>请求）。用户的请求目标可以是非</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>的页面，也可以是那些使用了</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>标记库但不使用</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>请求分配服务的页面。这正是</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>体系的优点之一：按需使用。许多编程框架要求你要么不用，要么全部使用，而且一旦你决定使用，以后要悔改从前的错误就会付出高昂的代价。</span><span>Struts</span><span Times Roman?; mso-hansi-font-family: ?Times New Roman??>按需使用的优点与这类系统形成了强烈对比。</span></font></div>
<img src ="http://www.cnitblog.com/jackmisweijie/aggbug/47758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/jackmisweijie/" target="_blank">魏杰</a> 2008-08-07 20:45 <a href="http://www.cnitblog.com/jackmisweijie/archive/2008/08/07/47758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>