﻿<?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>BlogJava-~~-文章分类-strut 学习</title><link>http://www.blogjava.net/java-blog/category/27000.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 31 Oct 2007 07:39:44 GMT</lastBuildDate><pubDate>Wed, 31 Oct 2007 07:39:44 GMT</pubDate><ttl>60</ttl><item><title>Struts 学习笔记1 －Struts  Framework  概览</title><link>http://www.blogjava.net/java-blog/articles/157158.html</link><dc:creator>一步一步努力向上爬</dc:creator><author>一步一步努力向上爬</author><pubDate>Wed, 31 Oct 2007 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/java-blog/articles/157158.html</guid><wfw:comment>http://www.blogjava.net/java-blog/comments/157158.html</wfw:comment><comments>http://www.blogjava.net/java-blog/articles/157158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/java-blog/comments/commentRss/157158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/java-blog/services/trackbacks/157158.html</trackback:ping><description><![CDATA[<table bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="100%">
    <tbody>
        <tr>
            <td colspan="3" align="center" bgcolor="#eeeeee" height="40" width="100%"><strong>Struts&nbsp;学习笔记1&nbsp;－Struts&nbsp;&nbsp;Framework&nbsp;&nbsp;概览</strong></td>
        </tr>
        <tr>
            <td align="center" bgcolor="#eeeeee" width="100%">
            <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#117;&#111;&#99;&#104;&#97;&#110;&#103;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">bruce</a> 原创&nbsp;&nbsp;&nbsp;更新：2002-11-20 16:22:28&nbsp;&nbsp;版本: 2.0
            &nbsp;&nbsp;
            </td>
        </tr>
    </tbody>
</table>
<br />
struts开始于2000年３月，1.0在2001年7月发布。采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。MVC设计模式把一个系统分成3个相互协调的部分：<br />
<br />
<strong>Model（模型）</strong><br />
模型用于封装系统的状态<br />
<br />
<strong>View（视图）</strong><br />
是模型的表示，提供用户交互界面。当模型状态发生变化时，视图应该得到通知，以便更新视图。<br />
<br />
<strong>Controller（控制器）</strong><br />
接受来自视图的请求，修改模型的状态。<br />
<br />
在
基于JSP/Servlet的Web应用中要使用MVC模式，需要解决一个问题。我们知道，HTTP的底层是TCP/IP协议，而TCP/IP是一种无状
态连接的协议，那么如果我们的模型发生了变化，就无从通知视图。Struts采用了在&#8220;JSP规范&nbsp;v0.92&#8221;中提到的MVC&nbsp;Model&nbsp;2，这是对
MVC在Web上应用的修订版。图示如下：<br />
<br />
<img src="http://www.javaresearch.org/images/bruce/mvc2.gif"  alt="" /><br />
图表&nbsp;1：MVC&nbsp;Model&nbsp;2（From&nbsp;Malcolm&nbsp;Davis）<br />
<br />
Struts
应用有3个主要部件：一个Servlet&nbsp;Controller（由Struts提供，
org.apache.action.ActionServlet，以下简称controller）及负责具体业务处理的Action类
（org.apache.action.Action的基类）；Jsp页面（viewer）；应用的业务逻辑封装（model）。Struts&nbsp;的中心控
制器（ActionServlet）接受所有来自客户端的请求，并根据系统的配置（Struts-config.xml）路由HTTP请求到其他
Action对象（开发者实现的org.apache.struts.action.Action的子类），在这些Action对象中会进行所有的业务操
作，比如插入一条订单，修改一条记录。处理完毕，由Struts的ActionServlet转向到JSP页面，将处理结果返回给客户端。从这儿可以看出
在Struts中ActionServlet担任了重要的角色，由它控制所有的程序流转，是MVC三个相对独立的部分协调工作，提供系统的完善功能。从下
图可见Struts是MVC&nbsp;Model&nbsp;2的一个典型应用。<br />
&nbsp;<br />
<img src="http://www.javaresearch.org/images/bruce/struts.gif"  alt="" /><br />
图表&nbsp;2：Struts工作机理（From&nbsp;Malcolm&nbsp;Davis）<br />
<br />
在Struts启动时，controller会读入一个配置文件struts-config.xml，其中定义了前端请求的url与相应的Action类及使用的Form类的映射关系，下面是一个struts-config.xml中的片断：<br />
<div>
<ol>
    <li>
    <br />
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&nbsp;&nbsp;&nbsp;&nbsp;path=<font color="#ff33ff">"/logon"</font>
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=<font color="#ff33ff">"org.apache.struts.webapp.example.LogonAction"</font>
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=<font color="#ff33ff">"logonForm"</font>
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope=<font color="#ff33ff">"request"</font>
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input=<font color="#ff33ff">"/logon.jsp"</font>&gt;
    </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/action&gt;
    </li>
</ol>
</div>
<br />
<br />
从中可以看出，这个action会响应url类似于/logon的请求（在后面我们会看到，这儿的实际
的url要根据在web.xml中配置，比如可能为/logon.do或/logon.other之类的带后缀的url），负责处理这个请求的
action类是org.apache.struts.webapp.example.LogonAction，使用的FormBean是
logonForm，scope界定了这个FormBean存在的范围是只在当前request中存在。<br />
struts会读入这些设置，生成相应的org.apache.action.ActionMapping对象。controller正是使用这些mapping来把HTTP请求转发到应用的actions。一个ActionMapping指定了<br />
<ul>
    <li>一个请求URI<br />
    </li>
    <li>对应的类（Action的子类）<br />
    </li>
    <li>需要的属性<br />
    </li>
</ul>
<br />
对于一个DB应用，<br />
<ul>
    <li>一个商业逻辑Bean用于连接、查询数据库<br />
    </li>
    <li>这个Bean返回结果到Action<br />
    </li>
    <li>Action将这些结果存储到request的form&nbsp;bean中<br />
    </li>
    <li>Jsp显示</li>
</ul>
<img src ="http://www.blogjava.net/java-blog/aggbug/157158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/java-blog/" target="_blank">一步一步努力向上爬</a> 2007-10-31 12:01 <a href="http://www.blogjava.net/java-blog/articles/157158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>