﻿<?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-Hello Miracle!</title><link>http://www.blogjava.net/miracle/</link><description>...</description><language>zh-cn</language><lastBuildDate>Tue, 21 Apr 2026 16:57:51 GMT</lastBuildDate><pubDate>Tue, 21 Apr 2026 16:57:51 GMT</pubDate><ttl>60</ttl><item><title>Struts学习笔记-1</title><link>http://www.blogjava.net/miracle/archive/2005/11/23/miracle.html</link><dc:creator>miracle</dc:creator><author>miracle</author><pubDate>Wed, 23 Nov 2005 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/miracle/archive/2005/11/23/miracle.html</guid><wfw:comment>http://www.blogjava.net/miracle/comments/21190.html</wfw:comment><comments>http://www.blogjava.net/miracle/archive/2005/11/23/miracle.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/miracle/comments/commentRss/21190.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/miracle/services/trackbacks/21190.html</trackback:ping><description><![CDATA[<P>Servlet的演变：在常规的 JSP，Servlet，JavaBean三层结构中，JSP实现View的功能，Servlet实现Controller的功能，JavaBean实现Model的实现。<BR><BR>在Struts中，将常规情况下的Servlet拆分与ActionServlet、FormBean、ActionBean三个部分。ActionServlet配合Struts-config.xml，专职完成页面导航，而不再负责具体的数据获取与相应逻辑，这两部分功能由FormBean和ActionBean来完成。<BR><BR>Struts的核心是Controller，即ActionServlet，而ActionServlet的核心就是Struts-config.xml，Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目，通过此配置文件即可迅速把握其脉络，这不管是对于前期的开发，还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。<BR><BR>&lt;struts-config&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&lt;data-sources /&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&lt;form-beans &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form-bean <STRONG>name</STRONG>="systemForm" <STRONG>type</STRONG>="com.gdglc.survey.form.SystemForm" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form-bean name="FindMemberForm" type="org.apache.struts.validator.DynaValidatorForm"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form-property name="findName" type="java.lang.String"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form-bean&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/form-beans&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&lt;global-exceptions /&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&lt;global-forwards&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;forward <STRONG>name</STRONG>="showMsg" <STRONG>path</STRONG>="/msg.jsp" /&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/global-forwards&gt;<BR><BR>&nbsp;&nbsp; &lt;action-mappings&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>path</STRONG>="/list"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>type</STRONG>="com.gdglc.survey.action.ListAction"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;forward <STRONG>name</STRONG>="list" <STRONG>path</STRONG>="/list.jsp"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attribute="systemForm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input="/admin/System_Base_List.jsp"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <STRONG>name</STRONG>="systemForm"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <STRONG>path</STRONG>="/systemBaseModify"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>type</STRONG>="com.gdglc.survey.action.SystemAction"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope="request"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validate="false"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&lt;/action-mappings&gt;<BR><BR>&nbsp;&nbsp;&nbsp;&lt;message-resources parameter="com.gdglc.application" /&gt;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/&gt;<BR>&nbsp;&nbsp;&nbsp;&lt;/plug-in&gt;<BR><BR>&lt;/struts-config&gt;</P>
<P>每一个FormBean 都必须继承ActionForm类，FormBean是对页面请求的封装。即把HTTP request 封装在一个对象中，<STRONG>需要说明的一点就是多个HTTP request可以共用一个FormBean</STRONG>，便于维护和重用。<BR></P><BR>public <STRONG>final</STRONG> class RegUserForm extends <STRONG>ActionForm</STRONG>{<BR><BR>&nbsp;&nbsp;&nbsp;<STRONG>private</STRONG> String logname;<BR>&nbsp;&nbsp;&nbsp;private String password;<BR>&nbsp;&nbsp;&nbsp;private String email;<BR><BR>&nbsp;&nbsp;&nbsp;public RegUserForm(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logname = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;email = null;<BR>&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;......<BR><BR>&nbsp;&nbsp;&nbsp;<STRONG>public void reset(ActionMapping mapping, HttpServletRequest request)<BR></STRONG>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logname = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;email = null;<BR>&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;<STRONG>public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)</STRONG>&nbsp;<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionErrors errors=new ActionErrors();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(this.password==null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("password is null!!"));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;......<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return errors;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR>FormBean的产生是为了提供数据给ActionBean，在ActionBean中可以取得FormBean中封装的数据，经相应的逻辑处理后，调用业务方法完成相应业务要求。<BR><BR>public <STRONG>final</STRONG> class RegUserAction extends <STRONG>Action</STRONG><BR>{<BR><STRONG>&nbsp;&nbsp;&nbsp;public ActionForward execute(ActionMapping mapping,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionForm form,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest request,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse response)</STRONG><BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;......<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(true)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>return mapping.findForwad("list");</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionErrors errors=new ActionErrors();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("...."));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.saveErrors(request,errors);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>return new ActionForward(mapping.getInput());</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR><STRONG>Struts优缺点<BR>优点：</STRONG><BR><BR>Struts跟Tomcat、Turbine等诸多Apache项目一样，是开源软件，这是它的一大优点。使开发者能更深入的了解其内部实现机制。<BR><BR>除此之外，<STRONG>Struts的优点主要集中体现在两个方面：Taglib和页面导航。</STRONG>Taglib是Struts的标记库，灵活动用，能大大提高开发效率。另外，就目前国内的JSP开发者而言，除了使用JSP自带的常用标记外，很少开发自己的标记，或许Struts是一个很好的起点。<BR><BR>关于页面导航，我认为那将是今后的一个发展方向，事实上，这样做，使系统的脉络更加清晰。通过一个配置文件，即可把握整个系统各部分之间的联系，这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时，这种优势体现得更加明显。<BR><BR><B>缺点：</B><BR><BR>Taglib是Struts的一大优势，但对于初学者而言，却需要一个持续学习的过程，甚至还会打乱你网页编写的习惯，但是，当你习惯了它时，你会觉得它真的很棒。<BR><BR>Struts将MVC的Controller一分为三，在获得结构更加清晰的同时，也增加了系统的复杂度。<BR><BR>Struts从产生到现在还不到半年，但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点，但它是一种非常优秀的J2EE MVC实现方式，如果你的系统准备采用J2EE MVC架构，那么，不妨考虑一下Struts。<BR><BR><STRONG>Struts实施经验：<BR><BR></STRONG>1)、基于Struts架构的项目开发，首先需要有一个很好的整体规划，整个系统中包括哪几个模块，每个模块各需要多少FormBean和ActionBean等，而且最好有专人负责Struts-config.xml的管理。开发基于Struts的项目的难点在于配置管理，尤其是对Struts-config.xml的管理。<BR><BR>2)、如果你的项目非常紧，并且项目组中又没有富有经验的Struts开发人员，建议不要冒然采用Struts。Struts的掌握需要一个过程，对于一个熟练的JSP程序员，自学大概需要半个月左右的时间。如果结合titls，则需要更长的时间。<BR><BR>3)、如果你在网页中大量运用taglib，那么你的美工将做出部分牺牲。当你结合Tiles，功能增强的同时，这种牺牲尤为明显。当然，你对功能和美观的取舍由你自己决定。<BR><BR>4)、Taglib是一个好东西，但灵活运用它却需要一个过程，如果你不想在Taglib上花太多的时间，那么只需理解与FORM有关的几个标记，其它的标记就放着吧，以后再看，先去研究ActionServlet和Struts-config.xml，你会觉得很有成就感。<BR><BR>5)、Struts是否只适合于大型项目呢？No！Struts适合于各种大小的项目，当然，对于大型项目，它所体现出来的优势更加明显。 <BR><BR><A href="http://www.chinaitlab.com/www/news/article_show.asp?id=33092">http://www.chinaitlab.com/www/news/article_show.asp?id=33092</A><img src ="http://www.blogjava.net/miracle/aggbug/21190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/miracle/" target="_blank">miracle</a> 2005-11-23 23:10 <a href="http://www.blogjava.net/miracle/archive/2005/11/23/miracle.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>