﻿<?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-SevenDays-随笔分类-Struts技术</title><link>http://www.blogjava.net/SevenDays/category/37519.html</link><description>新生活，新气象！</description><language>zh-cn</language><lastBuildDate>Tue, 10 Feb 2009 03:17:46 GMT</lastBuildDate><pubDate>Tue, 10 Feb 2009 03:17:46 GMT</pubDate><ttl>60</ttl><item><title>Struts详解</title><link>http://www.blogjava.net/SevenDays/archive/2009/02/10/254008.html</link><dc:creator>SevenDays</dc:creator><author>SevenDays</author><pubDate>Tue, 10 Feb 2009 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/SevenDays/archive/2009/02/10/254008.html</guid><wfw:comment>http://www.blogjava.net/SevenDays/comments/254008.html</wfw:comment><comments>http://www.blogjava.net/SevenDays/archive/2009/02/10/254008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SevenDays/comments/commentRss/254008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SevenDays/services/trackbacks/254008.html</trackback:ping><description><![CDATA[Struts框架详解<br />
struts-config.xml&nbsp;&nbsp; &nbsp;Struts配置文件<br />
ActionServlet&nbsp;&nbsp;控制器<br />
Action Class&nbsp;&nbsp;包含事务逻辑<br />
ActionForm&nbsp;&nbsp;显示模块数据<br />
ActionMapping&nbsp;&nbsp;帮助控制器将请求映射到操作<br />
ActionForward&nbsp;&nbsp;用来指示操作转移的对象<br />
ActionError&nbsp;&nbsp;用来存储和回收错误<br />
Struts标记库&nbsp;&nbsp;可以减轻开发显示层次的工作
<p>struts框架的优势<br />
1.良好的架构和设计<br />
2.可重用，模块化，扩展性好<br />
3.Open source</p>
<p>struts-config.xml</p>
<p>Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目，通过此配置文件即可迅速把握其脉络，这不管是对于前期的开发，还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。 </p>
<p>FormBean部分</p>
<p>&lt;struts-config&gt;<br />
&nbsp; &lt;!--&nbsp; Form Bean Definitions --&gt;<br />
&nbsp; &lt;form-beans&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form-bean name=&#8220;testform" type="com.cjea.test.TestForm" /&gt;<br />
&nbsp; &lt;/form-beans&gt;&nbsp; </p>
<p>全局转发部分</p>
<p>&lt;!-- Global Forward Definitions --&gt;<br />
&nbsp; &lt;global-forwards&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;forward&nbsp;&nbsp; name="failure"&nbsp;&nbsp;&nbsp;&nbsp; path="bad.jsp"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;forward&nbsp;&nbsp; name="success"&nbsp;&nbsp;&nbsp;&nbsp; path="/good.jsp" /&gt;<br />
&nbsp; &lt;/global-forwards&gt; </p>
<p>action部分</p>
<p>&lt;action-mappings&gt;<br />
&nbsp;&nbsp; &lt;action path=&#8220;/test/test.jsp" type=&#8220;com.cjea.test.testAction" name="testform" scope="request"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forward name="success" path="/test/good.jsp" /&gt;<br />
&nbsp;&nbsp; &lt;/action&gt;<br />
&lt;action-mappings&gt;&nbsp; <br />
&lt;/struts-config&gt;</p>
<p>&nbsp;ActionServlet</p>
<p>ActionServlet 是struts框架 MVC 实现的 controller 部分，它是这一框架的核心。<br />
ActionServlet 创建并使用 Action、ActionForm 和 ActionForward。</p>
<p>ActionServlet的基本功能</p>
<p>截获用户的Http请求<br />
把这个请求映射到相应的Action类。<br />
创建一个ActionForm bean实例,将form请求放入formbean的实例中<br />
调用Action实例的perform()方法<br />
将ActioForm bean,Action Mapping对象,request和response对象传给Action的perform()方法<br />
perform返回一个ActionForword对象，根据方法执行情况转到相应的jsp页面.</p>
<p>&nbsp;</p>
<p>Action Classes</p>
<p><br />
Action 类是业务逻辑的一个包装。Action 类的用途是将 HttpServletRequest 转换为业务逻辑。</p>
<p>ActionForm</p>
<p>ActionForm 维护 Web 应用程序的会话状态。<br />
ActionForm 是一个抽象类，必须为每个输入表单模型创建该类的子类。</p>
<p><br />
ActionForm的使用</p>
<p>假定有一个由 HTML 表单设置的 TestActionForm。Struts 框架将执行以下操作：<br />
检查 TestActionForm是否存在；如果不存在，它将创建该类的一个实例。<br />
Struts 将使用 HttpServletRequest 中相应的域设置 TestActionForm的状态。<br />
Struts 框架在将 TestActionForm传递给TestAction 之前将更新它的状态。 <br />
struts-config.xml 文件控制 HTML 表单请求与 ActionForm 之间的映射关系。<br />
可将多个请求映射到 TestActionForm 。</p>
<p>Struts标记库<br />
Struts框架包括自定义标签库，它可以用 在很多方面。尽管这些库并不要求用框 架，但使用它们会有助于程序的开发。</p>
<p>Struts标记库<br />
struts-bean taglib：包含在访问bean和bean属性时使用的tag，也包含一些消息显示的tag。<br />
struts-html taglib：包含用来生成动态HTML用户界面和窗体的tag。<br />
struts-logic taglib ：包含的tag用来管理根据条件生成输出文本，和其它一些用来控制的信息。<br />
struts-template taglib包含的tag用来定义模板机制。</p>
<p>Bean Taglib<br />
用于定义新bean、访问bean及其属性的标记<br />
在struts-bean.tld中定义了它的标记库描述器<br />
Bean Taglib主要功能<br />
创建和复制bean的标记<br />
脚本变量定义标记<br />
bean翻译标记<br />
消息国际化标记<br />
Bean复制标记 (&lt;bean:define&gt;)<br />
可定义新bean，可复制现有bean，还可从现有bean复制属性。<br />
定义新字符串常数<br />
将现有的bean复制到新定义的bean对象<br />
复制现有bean的属性来创建新的bean<br />
&lt;bean:define&gt;标记属性：<br />
Id&nbsp;新定义的bean脚本变量名称，必须设置<br />
Type&nbsp;定义引入脚本变量的类<br />
Value&nbsp;为id属性定义的脚本变量分配一个新的对象<br />
&lt;bean:define&gt;标记属性：<br />
Name&nbsp;目标bean的名称。若value属性没有设置，这个属性就必须设置<br />
property&nbsp;Name属性定义的bean的属性名称，用来定义新的bean<br />
Scope&nbsp;源bean的作用域。若没有设置，搜索范围是从页作用域到应用程序作用域<br />
toScope&nbsp;目标bean的作用域。若没有设置，默认值是页作用域<br />
举例<br />
定义一个bean:<br />
&lt;bean:define id="test" value="this is a test"/&gt;<br />
源bean在页作用域中被拷贝到请求作用域中的另一个bean:<br />
&lt;bean:define id="targetBean" name="sourceBean"<br />
scope="page" toScope="request"/&gt;<br />
脚本变量的标记<br />
从多种资源中定义和生成脚本变量，这些资源包括cookie,请求参数，HTTP标头等等。<br />
脚本变量的标记属性：<br />
Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 脚本变量和要定义的页作用域&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;属性的名称<br />
Name&nbsp;&nbsp;&nbsp; cookie/标头/参数的名称<br />
Value&nbsp;&nbsp;&nbsp; 如果没有匹配的cookie或&nbsp;&nbsp;&nbsp;&nbsp;数值，就返回这个属性指&nbsp;&nbsp;&nbsp;&nbsp;定的默认值</p>
<p>脚本变量的标记属性：<br />
multiple&nbsp;如果这个属性设置了任意一个数值，所有匹配的cookie都会被积累并存储到一个Cookie[](一个数组)类型的bean里&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若无设置，指定cookie的第一个值将作为Cookie类型的值<br />
举例<br />
&lt;bean:cookie id="myCookie" name="userName"/&gt;<br />
脚本变量名称是myCookie，用来创建这个属性的cookie的名称是userName。<br />
&lt;bean:header id="myHeader" name="Accept-Language"/&gt;<br />
脚本变量名称是myHeader,请求标头的名称是Accept-Language.</p>
<p>举例<br />
&lt;bean:parameter id="myParameter" name="myParameter"&gt;<br />
脚本变量名称是myPatameter,它保存的请求参数的名称也是myParameter<br />
逻辑标记<br />
Struts逻辑标签库包含的标记能够有条件地产生输出文本<br />
在对象集合中循环从而重复地产生输出文本，以及应用程序流程控制<br />
它也提供了一组在JSP页中处理流程控制的标记<br />
逻辑标记封装在文件名为struts-logic.tld的标记包中<br />
逻辑标记库的功能<br />
条件逻辑<br />
重复<br />
转发/重定向响应<br />
条件逻辑标记<br />
第一类可以比较下列实体与一个常数的大小<br />
第二类在计算标记体之前判断特定的项目是否存在<br />
第三类根据模板匹配的结果检查标记体的内容<br />
第一类条件逻辑标记<br />
&lt;equal&gt;&nbsp;&nbsp;如果常数与被定义的实体相等，返回true<br />
&lt;notEqual&gt;&nbsp;如果常数与被定义的实体不相等，返回true<br />
&lt;greaterEqual&gt;&nbsp;如果常数大于等于被定义的实体，返回true<br />
第一类条件逻辑标记<br />
&lt;lessEqual&gt;&nbsp;如果常数小于等于被定义的实体，返回true<br />
&lt;lessThan&gt;&nbsp;如果常数小于被定义的实体，返回true<br />
&lt;greaterThan&gt;&nbsp;如果常数大于被定义的实体，返回true<br />
举例<br />
判断名为"name"的请求参数的值是否是"SomeName"。<br />
&lt;logic:equal parameter="name" value="SomeName"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The entered name is SomeName<br />
&lt;/logic:equal&gt;<br />
举例<br />
判断在页的作用域中是否有一个名为"bean"的bean，它有一个prop属性，这个属性的值是否大于7。<br />
如果这个属性能够转化为数值，就进行数值比较，否则就进行字符串比较。<br />
&lt;logic:greaterThan name="bean" property="prop" scope="page" value="7"&gt;<br />
The value of bean.Prop is greater than 7<br />
&lt;/logic:greaterThan&gt;<br />
第二类条件逻辑标记<br />
&lt;logic:present&gt;<br />
&lt;logic:notPresent&gt;<br />
第三类条件逻辑标记<br />
&lt;logic:match&gt;<br />
&lt;logic:notMatch&gt;<br />
重复标记&lt;logic:iterate&gt;<br />
它能够根据特定集合中元素的数目对标记体的内容进行重复的检查<br />
集合的类型<br />
java.util.Iterator<br />
java.util.Collection<br />
java.util.Map<br />
java.util.List<br />
数组<br />
举例<br />
Strlst是一个包含字符串的List，现在要将他内部的字符串全都显示在浏览器里<br />
&lt;logic:iterate id="element" name="strlst"&nbsp; indexId="index"&gt;<br />
&lt;%＝(String)element)%&gt;<br />
&lt;/logic:iterate&gt;<br />
转发标记<br />
&lt;logic:forward&gt;标记能够将响应转发给重定向到特定的全局ActionForward上<br />
ActionForward的类型决定了是使用PageContext转发响应，还是使用sendRedirect将响应进行重定向<br />
此标记只有一个"name"属性，用来指定全局ActionForward的名称，例如：<br />
&lt;logic:forward name="myGlobalForward"/&gt;<br />
重定向标记<br />
&lt;logic:redirect&gt;标记是一个能够执行HTTP重定向的强大工具。<br />
根据指定的不同属性，它能够通过不同的方式实现重定向。<br />
它还允许开发人员指定重定向URL的查询参数。<br />
HTML标记<br />
Struts HTML标记可以大致地分为以下几个功能：<br />
显示表单元素和输入控件<br />
显示错误信息<br />
显示其他HTML元素<br />
模板标记<br />
Struts模板标记可以大致地分为以下几个功能：<br />
插入标记&lt;template:insert&gt;<br />
放置标记&lt;template:put&gt;<br />
获得标记&lt;template:get&gt;</p>
<script type="text/javascript">
//<![cdata[ Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);
//]]&gt;
</script>
<img src ="http://www.blogjava.net/SevenDays/aggbug/254008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SevenDays/" target="_blank">SevenDays</a> 2009-02-10 10:27 <a href="http://www.blogjava.net/SevenDays/archive/2009/02/10/254008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 初始化处理流程</title><link>http://www.blogjava.net/SevenDays/archive/2009/02/10/254007.html</link><dc:creator>SevenDays</dc:creator><author>SevenDays</author><pubDate>Tue, 10 Feb 2009 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/SevenDays/archive/2009/02/10/254007.html</guid><wfw:comment>http://www.blogjava.net/SevenDays/comments/254007.html</wfw:comment><comments>http://www.blogjava.net/SevenDays/archive/2009/02/10/254007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SevenDays/comments/commentRss/254007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SevenDays/services/trackbacks/254007.html</trackback:ping><description><![CDATA[Struts 初始化处理流程 <br />
&nbsp;&nbsp; 根据在web.xml中配置的初始化参数，Servlet容器将决定在在容器的第一次启动，或第一次客户请求ActionServlet 的时机加载ActionServlet ，不管哪种方式加载，和其它Servlet一样，ActionServlet 的init( )方法将被调用，开始初始化过程。让我们来看看在初始化过程中将发生些什么，理解了这些，对于我们debug和扩展自己的应用更加得心应手。 <br />
&nbsp;&nbsp; 1&nbsp;&nbsp; 初始化框架的内部消息绑定，这些消息用来输出提示，警告，和错误信息到日志文件中。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts.action.ActionResources用来获取内部消息； <br />
&nbsp;&nbsp; 2&nbsp;&nbsp; 加载web.xml中定义的不同参数，用以控制ActionServlet 的不同行为，这些参数包括&nbsp;config, debug, detail, and convertNull ； <br />
&nbsp;&nbsp; 3&nbsp;&nbsp; 加载并初始化web.xml中定义的servlet 名称和servlet映射信息。通过初始化，框架的各种DTD被注册，DTD用来在下一步校验配置文件的有效性； <br />
&nbsp;&nbsp; 4、为默认应用加载并初始化Struts配置文件，配置文件即初始化参数config指定的文件。默认配置文件被解析，&nbsp;产生一个ApplicationConfig对象存于ServletContext 中。可以通过关键字&nbsp;org.apache.struts.action.APPLICATION 从ServletContext 中获取ApplicationConfig； <br />
&nbsp;&nbsp; 5&nbsp;&nbsp; Struts配置文件中指定的每一个消息资源都被加载，初始化，并存在ServletContext 的合适区域(基于每个message-resources元素的key 属性)，如果key 属性没有设置，则为org.apache.struts.action.MESSAGE； <br />
&nbsp;&nbsp; 6&nbsp;&nbsp; Struts配置文件中声明的每一个数据源被加载并且初始化，如果没有配置数据源，这一步跳过； <br />
&nbsp;&nbsp; 7&nbsp;&nbsp; 加载并初始化Struts配置文件中指定的插件。每一个插件的init()方法被调用； <br />
&nbsp; 8&nbsp;&nbsp; 当默认应用加载完成，init()方法判断是否有应用模块需要加载，如果有，重复4—7完成应用模块的加载。 <script type="text/javascript">
//<![cdata[ Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);
//]]&gt;
</script>
<img src ="http://www.blogjava.net/SevenDays/aggbug/254007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SevenDays/" target="_blank">SevenDays</a> 2009-02-10 10:26 <a href="http://www.blogjava.net/SevenDays/archive/2009/02/10/254007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>