??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV电影院在线观看,亚洲一级片免费看,国产AV旡码专区亚洲AV苍井空http://www.tkk7.com/yaominxi/category/11338.html心态决定行为,行ؓ军_习惯Q习惯决定命q? zh-cnTue, 27 Feb 2007 13:57:46 GMTTue, 27 Feb 2007 13:57:46 GMT60Struts深度体验之概q?/title><link>http://www.tkk7.com/yaominxi/archive/2006/05/20/47173.html</link><dc:creator>ymx</dc:creator><author>ymx</author><pubDate>Sat, 20 May 2006 06:49:00 GMT</pubDate><guid>http://www.tkk7.com/yaominxi/archive/2006/05/20/47173.html</guid><wfw:comment>http://www.tkk7.com/yaominxi/comments/47173.html</wfw:comment><comments>http://www.tkk7.com/yaominxi/archive/2006/05/20/47173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yaominxi/comments/commentRss/47173.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yaominxi/services/trackbacks/47173.html</trackback:ping><description><![CDATA[ <a class="bluekey" target="_blank">Struts</a>是基于Model 2实现的技术框ӞModel 2是经典的MVCQModelQ?a class="bluekey" target="_blank">View</a>QControlQ模型的Web应用变体Q这个改变主要由于HTTP协议的无状态性引L。Model 2的目的和MVC一P也是利用控制器来分离模型和视图,辑ֈ不同层间松散耦合的效果,提高pȝ灉|性、复用性和可维护性。在多数情况下,你可以将Model 2与MVC{同h?br /><br />  ?1表示一个基于Java技术典型的MVC|络应用Q从中可以看出M<a class="bluekey" target="_blank">VC?/a>的各个部分对应于J2EE哪些实现技术?br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img src="http://dev.yesky.com/imagelist/05/06/9n2f35z6mivd.jpg" border="0" /><br />?1 MVC和J2EE技?/div></td></tr></tbody></table><br />  在利用Model 2之前Q我们把所有的表示逻辑和业务逻辑都集中在一P如我们前两个专题中的<a class="bluekey" target="_blank">login</a>.jspQ,有时也称q种应用模式为Model 1QModel 1的主要缺点就是紧耦合Q复用性差Q维护成本高?br /><br />  ׃Struts是ZModel2实现的框Ӟ所以它底层的机制也是MVCQ我们通过?2描述Struts的具体实玎ͼ<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img src="http://dev.yesky.com/imagelist/05/06/rz5ob9gcgy18.jpg" border="0" /><br />?2 Struts MVC实现</div></td></tr></tbody></table><br />  1Q框架初始化<br /><br />  Struts框架L制器QActionServletQ完成所有初始化工作。L制器是一?a class="bluekey" target="_blank">Servlet</a>Q它通过web.xml配置?a class="bluekey" target="_blank">自动启动</a>?a class="bluekey" target="_blank">Servlet</a>Q读取配|文Ӟstruts-config.xmlQ的配置信息Qؓ不同的Struts模块初始化相应的ModuleConfig对象。配|文件中的Action映射定义都保存在ActionConfig集合中,配置文g中其他配|信息分别保存在ControlConfig集合、FormBeanConfig集合、ForwardConfig集合和MessageResourcesConfig{集合中?br /><br />  要特别指出的是,初始化动作在Web容器启动时自动完成,初始化完成后Q它通过URL匚w映射截获所有以.dol尾的URLh?br /><br />  2Q客L发送一个HTTPh<br /><br />  用户通过提交表单或调用URL向Web应用E序器提交一个请求,h的数据用HTTP协议上传lWeb服务器?br /><br />  3QL制器接截莯个请求ƈ实例化Form Bean<br /><br />  控制器接收HTTPhQƈ从ActionConfig中找出对应该h的Action子类Q如果没有对应的ActionQ控制器直接请求{发给JSP或者静态页面。如果有对应的Action且这个Action有一个相应的Action FormQActionForm被实例化q用HTTPh的数据填充其属性,然后保存在Servlet Context中(request?a class="bluekey" target="_blank">session</a>中)Q这样它们就可以被其它Action对象或者JSP调用?br /><br />  此外Q还可以在ActionForm填充数据后还可以调用validate()q行数据有效性自Qƈ且可以返回一个包含所?a class="bluekey" target="_blank">错误信息</a>的ActionErrors对象Q如果ActionErrors不空QL制器直接请求返回到入口面?br /><br />  4Q控制器请求{交给具体的Action处理<br /><br />  控制器根据配|信息将h切换到具体的ActionQ这个Form Bean也一q传l这个Action?a class="bluekey" target="_blank">execute</a>()Ҏ?br /><br />  5QAction完成具体的业务逻辑操作<br /><br />  Action很简单,一般只包含一个executeҎQ它负责执行相应的业务逻辑Q如果需要,它也可能q行相应的数据检查。执行完成之后,q回一个ActionForward对象Q控制器通过该ActionForward对象来进行{发工作?br /><br />  6QActionq回目标响应对象lL制器<br /><br />  ActionҎ业务处理的不同结果返回一个目标响应对象给L制器Q这个目标响应对象对应一个具体的JSP面或另外一个Action?br />  <br />  7QL制器HTTPh转换到目标响应对象中?br /><br />  L制器Ҏ业务功能Actionq回的目标响应对象,HTTPh转换到这个目标响应对象中Q一般情况下Q它是一个具体的JSP面?br /><br />  8Q目标响应对象将l果展现l用?br />  <br />  目标响应对象QJSPQ将l果面展现l用戗?br /><br />  客户端发送一个HTTPhQ通过Struts框架最后获得一个HTTP响应Q这一q程非常重要Q它是理解Struts框架的重炏V图 2描述了Struts框架的结构,而图 3通过一个活动图更具体描q接受请求直臌回响应的整个q程Q?br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img src="http://dev.yesky.com/imagelist/05/06/u9a67hlx63bg.gif" border="0" /><br />?3 Struts接受q返回响应的中间q程<br /><strong>Struts1.1新增功能<br /><br /></strong>  1、多模块的支?br /><br />  我们知道Q在Struts 1.0中,只能在web.xml中ؓActionServlet指定一个Struts配置文g(struts-config.xml)Q这对一个只需一两个人开发的系l当然没有Q何问题,但如果一个多人开发的大中型应用程序,问题׃生了。因多开发h员可能同旉需要修改Struts配置文gQ这栯定会造成一定程度的资源争夺Q可能会出现彼此覆盖的情况,q样势必会媄响开发效率ƈ引v开发h员的抱怨?br /><br />  在Struts 1.1中,Z解决q个q行开发的问题Q提Z两种解决ҎQ?br /><br />  ·多个配置文g<br /><br />  支持多个配置文gQ是指你能够为ActionServlet同时指定多个xml配置文gQ文件之间以逗号分隔Q请看下面web.xml中关于多个struts配置文g的声明示例:<br /><br />   代码清单 1 多个struts配置文g<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>1. QservletQ?br />2. Qservlet-nameQactionQ?servlet-nameQ?br />3. Qservlet-classQorg.apache.struts.action.ActionServletQ?servlet-classQ?br />4. Qinit-paramQ?br />5. Qparam-nameQconfigQ?param-nameQ?br />6. Qparam-valueQ?br />7. <b>/WEB-INF/struts-config.xml, /WEB-INF/book-struts-config.xml</b><br />8. Q?param-valueQ?br />9. Q?init-paramQ?<br />10. Qload-on-startupQ?Q?load-on-startupQ?br />11. Q?servletQ?/td></tr></tbody></table><br />  通过q种ҎQ你可以为每一个模块定义一个配|文Ӟ׃目一般按模块划分工作Q这样就大大地减了冲突的概率?br /><br />  ·独立的模?br /><br />  但是Q多个配|文件存在一个潜在的问题Q不同的配置文g之间会生冲H,因ؓ在ActionServlet初始化的时候多个配|文件还是要合ƈC赗比如,在struts-config.xml中配|了一个名为errorDbAccess的<exceptionQ,而在book-struts-config.xml中也配置了一个同LQexceptionQ,q样׃生冲H了?br /><br />  Zd解决q种冲突QStruts 1.1中引q了模块QModuleQ的概念。一个模块就是一个独立的子系l,对应一个独立的配置文gQActionServlet不同模块的配置文g保存在各自独立的ModuleConfig对象中的?br /><br />  下面是两个独立模块的配置方式Q?br /><br />  代码清单 2 多模块配|方?br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>1. ?br />2. Qinit-paramQ?br />3. Qparam-nameQconfigQ?param-nameQ?br />4. Qparam-valueQ?WEB-INF/struts-config.xmlQ?param-valueQ?br />5. Q?init-paramQ?br />6. Qinit-paramQ?br />7. Qparam-nameQconfig/bookQ?param-nameQ?<br />8. Qparam-valueQ?WEB-INF/book-struts-config.xmlQ?param-valueQ?br />9. Q?init-paramQ?br />10. ?/td></tr></tbody></table><br />  通过q种方式Q我们配|了两个模块Q一个模块名为configQ而另一个名为config/book?<br /><br />  ·动态ActionForm支持<br /><br />  ActionForm表示HTTP面表单的数据,可以其看成视图面数据的服务器映射Q它负责保存视图中的数据供控制器或者其他视图用。此外,它还负责数据有效性的验证Q所以Struts 1.1文把它比作HTTP和Action之间的防火墙Q这以体现ActionForm在视囑֒控制器之间的qo器作用?<br /><br />  ׃ActionForm对应于HTTP面表单Q所以随着面的增多,你的ActionForm会急聚增加。动态ActionFormQDynaActionFormQ即为减ActionForm的数目被设计出来Q利用它你不必创Z个个具体的ActionFormc,只需要在配置文g中配|出所需的虚拟ActionFormQ而由Struts框架通过配置文g动态创个ActionForm。例如,代码清单 3通过指定Qform-beanQ的type?org.apache.struts.action.DynaActionForm"来创Z个动态的ActionForm--loginForm?br /><br />  代码清单 3 配置一个动态ActionForm<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>1. Qform-beansQ?br />2. Qform-bean name="bookForm" type="<b>org.apache.struts.action.DynaActionForm</b>"Q?<br />3. Qform-property name="bookId" type="java.lang.String"/Q?br />4. Qform-property name="isbn" type="java.lang.String"/Q?<br />5. Qform-property name="bookName" type="java.lang.String"/Q?br />6. Qform-property name="author" type="java.lang.String"/Q?br />7. Q?form-beanQ?<br />8. Q?form-beansQ?/td></tr></tbody></table><br />  DynaActionForm属性保存在一个Map对象中,同时提供相应的get(name)和set(name,value)ҎQ其中参数name是要讉K的属性名Q而value是一个Object。例如要讉KDynaActionForm中bookName的|可以采用String bookName = (String)get("bookName")ҎQ由于bookName存储在Map中,所以要q行强制转换?br /><br />  ׃DynaActionForm通过配置文g产生Qƈ没有一个实体对象类Q如果要对动态ActionForm对象q行校验需要用DynaValidatorFormQ它是DynaActionForm的子c,它能够提供动态ActionForm和动态表单输入验证的功能。检验规则在validation.xml配置文g中定义,而这些规则的所对应的实现函数在validator-rules.xml文g中定义?br /><br />  ·通过配置方式实现异常处理<br /><br />  Struts1.1允许以配|方式进行异常处理,配置方式可以避免在Action中通过编码来处理异常Q从而提高应用程序异常处理的灉|性和可维护性。一般情况下Q一个异常处理对象可以通过以下步骤实现Q?br /><br />  1Q实现org.apache.struts.action.ExceptionHandler的子c,覆盖execute()ҎQ在该方法中处理异常q且q回一个ActionForward对象?br /><br />  2Q在配置文g中配|异常处理对象,你可以配|一个全局的处理类或者单独ؓ每个Action配置处理cR?br /><br />  代码清单 4定义了一个全局的处理类TestExceptionHandlerQ它被用来处理所有的异常?br /><br />  代码清单 4 一个全局宣告式异常处理的配置<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1"><tbody><tr><td>1. ?br />2. Qglobal-exceptionsQ?<br />3. Qexception <br />4. handler="com.superAbc.TestExceptionHandler" <br />5. key="error.message" <br />6. path="/fail.jsp" <br />7. scope="request" <br />8. type="java.lang.Exception"/Q?br />9. Q?global-exceptionsQ?br />10. ?/td></tr></tbody></table><br />  type属性定义了匚w的异常,path定义了异常发生后转发的地址Q而handler指定在{发前对异常的Ҏ处理Q如果没有提供handlerQ默认的处理corg.apache.struts.action.ExceptionHandler?br /></div></td></tr></tbody></table><img src ="http://www.tkk7.com/yaominxi/aggbug/47173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yaominxi/" target="_blank">ymx</a> 2006-05-20 14:49 <a href="http://www.tkk7.com/yaominxi/archive/2006/05/20/47173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用 Easy Struts 插ghttp://www.tkk7.com/yaominxi/archive/2006/05/20/47171.htmlymxymxSat, 20 May 2006 06:45:00 GMThttp://www.tkk7.com/yaominxi/archive/2006/05/20/47171.htmlhttp://www.tkk7.com/yaominxi/comments/47171.htmlhttp://www.tkk7.com/yaominxi/archive/2006/05/20/47171.html#Feedback0http://www.tkk7.com/yaominxi/comments/commentRss/47171.htmlhttp://www.tkk7.com/yaominxi/services/trackbacks/47171.html 如何使用 Easy Struts 插g

{Q中U?/p>

Nancy Chen Junhua/FONT> (nancy_chenjunhua@yahoo.com)
软gN和开发?br />2004 q?5 ?/p>

本文向您介绍了如何在 Eclipse IDE 中?Easy Struts 插g开?Struts 应用E序。本文首先对 Easy Struts 及其安装配置步骤q行了简介,q过一个@序渐q的例子介绍了如何构Z个基本的 Struts 应用E序。本文还介绍了增?Struts 应用E序的各U方法,例如q接数据库,对应用程序进行模块化Q内容的国际化和本地化,异常处理和创定义插g{等。最后,您将学习如何自q Struts 应用E序部v?Tomcat Web 服务器上?/blockquote>

׃ Easy Struts 插g可以理所有的复杂配置文gQ因此您可以精力集中在E序逻辑的开发上。现在让我们先来看一?Easy Struts 中可以帮助您构徏一个完整的应用E序?10 个功能:

  1. Add Easy Struts support。向目?classpath 中添加所有必需?Struts 库,q创建配|文件和默认的资源属性文件?
  2. Easy Form。创Z个具有表单属性的 JSP 文gQ以及一个具有表单属性的 getter Ҏ?setter Ҏ?Form beanQƈ向配|文件中d一?Form bean 的定义?
  3. Easy Action。创Z?Action c,q向配置文g中添加一个操作映的定义?
  4. Easy Action associated with a form。创Z个具有表单属性的 JSP 文gQ一个具?getter Ҏ?setter Ҏ?Form bean c,以及一?Action c;q向配置文g中添加一?Form bean 的定义和一个操作映的定义?
  5. Easy Forward。创建局部{发和全局转发Q它们定义了控制应该转向何处?
  6. Easy Exception。处理异常?
  7. Easy Message resources。创源属性文Ӟq对于内容的国际化和本地化特别重要?
  8. Easy Plug-in。创建插件?
  9. Easy Datasource。将应用E序q接C个数据源上?
  10. Easy Module。模块化应用E序?

在本文中Q我们将介绍q?10 个功能中?8 个(我们不会介l功?2 ?3Q。在开始开?Struts 应用E序之前Q您应该首先安装好所有必需的程序和插gQƈ要了解有?Java ~程、HTML、JSP 脚本以及 XML ?XSLT 的基本知识?/p>

安装和配|准?/span>
您需要安?Eclipse 2.1、Struts 1.1、Tomcat Web 服务器和 Easy StrutsQ同时还要安?Sysdeo Tomcat plug-ins for Eclipse、MySQL 数据库服务器以及 JDBC driver for MySQL。Eclipse 是一?IDE 开发环境。Struts 1.1 提供了运?Struts 应用E序所需要的库。Tomcat 是宿d用程序的 Web 容器。Sysdeo Tomcat 插g可以让开发h员在 Eclipse 环境中启动或停止 Tomcat Web 服务器。JDBC driver for MySQL 可以?JDBC 调用转换?MySQL 所使用的网l协议。安装好q些软g之后Q还需要ؓ Eclipse 配置两个插g?/p>

安装
关于在哪里下载以下Y件的链接Q请参阅 参考资?/font> 部分Q?/p>

  1. ?Eclipse ?Web 站点上下?Eclipse v2.1。您可以通过其解压CQ何一个选定的目录(q个目录在本文中UCؓ eclipse_homeQ中来安装它?
  2. ?Apache ?Web 站点上下?Struts 1.1。您可以通过其解压CQ何一个选定的目录(q个目录在本文中UCؓ struts_homeQ来安装它?
  3. ?Apache ?Web 站点上下?Tomcat Web 服务器。您可以通过其解压CQ何一个选定的目录(q个目录在本文中UCؓ tomcat_homeQ中来安装它。本文假?Tomcat 的版本是 v4.1.18?
  4. ?Sysdeo ?Web 站点上下载最新的 Tomcat for Eclipse 插g。您可以通过其解压?eclipse_home/eclipse/plugins 目录中来安装它。本文假?Tomcat for Eclipse 插g的版本是 v2.2?
  5. ?SourceForge 上下?Easy Struts for Eclipse 插g v0.。您可以通过其解压?eclipse_home/eclipse/plugins 目录中来安装它?
  6. ?Sun ?Web 站点上下?J2SE SDK。您可以其安装CQ何一个选定的目录(q个目录在本文中UCؓ java_homeQ中。本文假?J2SE SDK 的版本是 v1.4.2?
  7. ?MySQL ?Web 站点上下?MySQL 数据库。您可以其安装CQ何一个选定的目录中?
  8. ?MySQL ?Web 站点上下?JDBC driver for MySQL。您应该先解压下载的文g包,q将 mysql-connector-java-x.x.xx-stable/mysql-connector-java-x.x.xx-stable-bin.jar 拯到您的项目工作空间中。后面还需要回到这个步骤。本文假?JDBC driver for MySQL 的版本是 v3.0?

配置
配置 Sysdeo Tomcat 插g

要配|?Sysdeo Tomcat 插gQ执行以下步骤:

  1. 启动 Eclipse?
  2. 配置 Tomcat 插g。要实现q个功能Q请单击“Window”菜单,然后选择“Preferences”菜单项Q然后在弹出的菜单中选择“Tomcat”。然后执行以下步骤:
    • “Tomcat version”设|成 Tomcat 的版本号?
    • “Tomcat home”设|成 tomcat_home/jakarta-tomcat-4.1.18?
    • “Perspective to switch when Tomcat is started”设|成 Java?
    • 在“Tomcat”选项的子选项“JVM Settings?-> “Classpath”中Q添?Jar/Zip for tools.jarQ该值应该是 java_home/lib/。这用于~译 JSP 文g?
  3. 为项目的 classpath 引用讄 classpath 变量 TOMCAT_HOME。要完成q一dQ请在与步骤 2 相同的弹单中选择“Java”选项Q然后选择“Classpath Variables”子选项Qƈd一个新的变量“TOMCAT_HOME”,其\径是 tomcat_home/jakarta-tomcat-4.1.18?
  4. 保“Tomcat”菜单和 3 个工h按钮可用。到现在为止Q我们应该在 Java 视图中可以看C个“Tomcat”菜单和 3 ?Tomcat 工具栏按钮(?a trackclick="no">?1 所C)。如果您没有看到q些内容Q回到“Window”菜单中Q选择“Customize Perspective...”项Q打开选项树,选中“Other”项q中“Tomcat”子选项?
  5. 保 Sysdeo Tomcat 插g可以正常工作。要验证q一点,请用菜单或工具条来启动/停止 Tomcat?

?1. Tomcat 工具栏按?/b>
Tomcat 工具栏按? src=

配置 Easy Struts 插g

要配|?Easy Struts 插gQ请参??2 的内容,q执行以下步骤:

  1. 选择一?Struts 版本。要完成q步操作Q请单击“Window”菜单,选择“Preference”项Q选择“Easy Struts”选项Qƈ选择“Struts 1.1”选项卡?
  2. d JARs。应该ؓ struts_home\jakarta-struts-1.1\lib 目录中的所有的 .jar 文g都添加“Add JARs”?
  3. d TLDs。接下来Qؓ struts_home\ jakarta-struts-1.1\lib 目录中的所?.tld 文gd“Add TLDs”?

?2. 配置 Easy Struts 插g
配置 Easy Struts 插g

开?Struts 应用E序
在本节中Q我们将介绍使用 Easy Struts 插g构徏 Struts 应用E序的基本步骤。首先,您将创徏一?Tomcat 目。然后,您将d Easy Struts ?Tomcat 目的支持。接下来Q您可以体验一下“Easy Action associated with a form”的功能。之后,您将对前一个步骤中自动生成的源代码q行必要的修攏V再之后Q您可以试一下应用程序在 Tomcat Web 服务器上的运行情c最后,您可以体验一下“Easy Forward”功能?/p>

创徏 Tomcat 目
要创Z?Tomcat 目Q回到“File”菜单,选择“New”项Qƈ在子菜单中选择“Project”。然后执行以下步骤:

  1. q入“Java”选项Q选择“Tomcat Project”ƈ单击“Next”(参见?3Q?
  2. 填上目名,q单几ZNext”(参见?4Q?
  3. 选中“Can update server.xml file”。系l会自动更新 Tomcat Web 服务器的 server.xml 文g。现在单几ZFinish”就可以完成d了(参见?5Q?

创徏 Tomcat 目的结果如 ?6 所C?/p>

?3. 创徏 Tomcat 目 - 步骤 1
创徏 Tomcat 目 - 步骤 1

?4. 创徏 Tomcat 目 - 步骤 2
创徏 Tomcat 目 - 步骤 2

?5. 创徏 Tomcat 目 - 步骤 3
创徏 Tomcat 目 - 步骤 3

?6. 创徏 Tomcat 目 - 最l结?/b>
创徏 Tomcat 目  - 最l结? src=

d Easy Struts 支持
要添?Easy Struts ?Tomcat 目的支持,执行以下两个步骤Q?/p>

  1. 单击“New”工h按钮Q在“Java”选项下面选择“Easy Struts”自选项Q选择“Add Easy Struts support”ƈ单击“Next”,转入下一个步骤(请参??7 -- 在本文的后文中我们将q个视图UCؓ Easy Struts 功能视图Q?
  2. 讄??8 所C的配置。确保选中“Copy Struts binary”和“Copy Struts TLD”?

d Easy Struts 支持的结果如 ?9 所C?/p>

?7. Easy Struts 功能视图
Easy Struts 功能视图

在图 8 中:
通过h容器转发它们到活?servletQURL 模式块告?Struts 处理所有匹配模?*.do 的请求?所有其他模式的h都不?Struts 处理的?/p>

Default 应用E序资源在 WEB-INF/classes/base package/ 目录中创建?/p>

?8. d Easy Struts 支持
d Easy Struts 支持

?9. d Easy Struts 支持 - 最l结?/b>
d Easy Struts 支持 - 最l结? src=

?7 昄?Easy Struts 所提供?10 个功能。我们已l看q了“Add Easy Struts Support”的功能。在本文的其余部分中Q我们将介绍一下剩下的 7 个功能(“Easy Action??“Easy Form”功能不介绍)。在本节的后l部分中Q我们将使用“Easy Action associated with a form”功能和“Easy Forward”功能来构徏一个简单却又完整的 Struts 应用E序。下一节将介绍“Easy Message resources”、“Easy Plug In”、“Easy Datasource”、“Easy Exception”和“Easy Module”功能?/p>

使用 Easy Action Associated with a Form 功能
回到 Easy Struts 功能视图Q选择“Easy Action associated with a form”,q执行以下步骤来配置表单Q?/p>

  1. ?Use case 中输入内容;Form 名和 Form cd都会Ҏpȝ?Use case 自动生成。您可以手工修改 Form 名和 Form cdQ参??10Q?
  2. ?Form 属性部分中单击“Add”;使用?a trackclick="no"> ?11 所C的视图d表单属性。例如,我们按照图中所C的一栯图添加一个文本输入域Q该域名为“tel”,gؓ“tel”,cd?int。我们将“tel”的初D|ؓ 0。在讄“Type”时Q我们可以直接输入,也可以用“Browse”功能来选择。对于“JSP input type”的讄Q我们也是既可以直接输入Q也可以从下拉列表中选择。Struts pȝ会在 Form bean cM为每个表单属性生成一对getter Ҏ和setter Ҏ。因此,对于一个选择列表来说Q您应该只创Z?
  3. ׃您正在开发一?Web 应用E序Q因此请选中前两个检查框?
  4. 单击“Next”l?

?10. 配置表单
配置表单

注意

  • 表单属性名不能以大写字母开头。否则,pȝ׃警告您在调用操作时找不到 getter Ҏ?
  • 表单属性名不能重复。如果您真想使用两个相同的属性名Q可以用空g为前~或后~来解册个问题?

?11. 关系的图形化表示
关系的图形化表示

到现在ؓ止,您应该会看到一些非常类g ?12 的内宏V默认情况下Q输入的值是?form/owner.jsp”,q意味着 JSP 文g被放在“easyStruts/form”文件夹中。您可以手工修改 JSP 文g的位|,或?preference 的设|。要修改 preference 的设|,q入“Window”菜单,选择“Preferences”,单击“Easy Struts”选项Q选择“Style”选项卡,q将“JSP form location”设|ؓI。例如,在本文中Q我们們֐于将q些 JSP 文g直接保存?easyStruts Q项目名Q文件夹中。因此,请将其修改ؓ?owner.jsp”,??12 所C?/p>

?12 中所昄的操作映的属性如下:

  • Path。所提交h的相对\径。\径名必须以?”开头而且唯一?
  • Type。这?ActionMapping 正在描述?Action cȝ名字?
  • Attribute。可以访问这?Form bean 的请求范围或会话范围的属性名Q条件是名字与这?bean 指定的名字不同?
  • Scope。规定与q个映射相关?Form bean 的值应该可以保存多位?
  • input。规定如果碰到验证错误时控制程应该q回到输入表单的相对路径?
  • Validate。如果这个属性被讄?trueQ就会对与这个映关联的表单调用 ActionForm.validate() Ҏ?
  • Parameter。可用于向由q个映射选择?Action 传递其他信息?

?12. 配置操作
配置操作

单击“Next”,您应该可以看到类g??13 所C的内容?a xmlns:dw="http://www.ibm.com/developerWorks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" trackclick="no">?13 中所昄的是操作映射属性,如下Q?/p>

  • Forward。指定要处理q个h?servlet ?JSP 资源的相对\径。ActionMapping 可以使用 findForward() 控制流E{换到q个 servlet ?JSP 资源上?
  • Exception。与q个映射相关?ExceptionHandlers?

此处的{发和异常都是本地的,E后我们会讨论全局转发和全局异常?/p>

?13. 配置转发
配置转发

局部{发属性:

  • name 是唯一的标识符Q在操作映射?findForward() Ҏ中可以用它来q回q个路径?
  • contextRelative 标签告诉 Struts 以下信息Q?
    • 如果该D讄?trueQ那么\径就被认为是相对于整?Web 应用的相对\径?
    • 如果该D讄?falseQ那么\径就被认为是相对于一个模块化应用E序的这个模块的相对路径?
  • 如果 redirect ?trueQ那么控制流E就会被转到一个重定向的页中,而不是一个{发的中。这意味着创徏一个新h?

在单几ZFinish”之后(参见?14Q,pȝ会在 easyStruts/WEB-INF/src/ 目录中生?com.asprise.struts.form.OwnerForm.java ?com.asprise.struts.action.OwnerAction.java。同时还会生成另外一个文ӞeasyStruts/owner.jsp。在接下来的几节中,您将对这三个文gq行一些修改,从而完成整个表单,d用户输入的验证方法ƈ处理验证错误?/p>

?14. d转发
d转发

修改 ActionForm c?
?ActionForm.java 中的所有“Integer”修改ؓ“int”,q是因ؓ您刚才创建的表单属性“tel”的cd?java.lang.Integer。然后编?validate() Ҏ的代码,对用戯入的表单属性进行验证。validate() Ҏ的完整代码如 清单 1 所C?/p>

ActionErrorQ“error.noEmail”)中的“error.noEmail”是资源属性文件中定义的一个关键字Q它{h于?/p>

  • Enter your email ”。在资源属性文件中Q可以?代码。ActionErrors ?add(java.lang.String property, ActionError error) Ҏ的参?property 是一个表单属性名。这?ActionError 只能与一个指定的表单属性相兟뀂例如,如果 email 地址为空Q或者只包含I格字符Q那么在对表单进行验证时׃昄“Enter your email”消息。如果在 email 地址中没有“@”字W,那么׃昄“Correct your email”消息,q是在资源属性文件中使用“error.wrongEmail”关键字定义的。这两个错误都只与表单属性“email”有养I参见清单 1Q。我们稍后再回来介绍?

    清单 1. OwnerForm.java

    
    package com.asprise.struts.form;
    
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    
    public class OwnerForm extends ActionForm {
    
       private String email;
       private String greet = "Mr.";
       private String address;
       private int tel = 0;
       private String name;
    
       public ActionErrors validate(
          ActionMapping mapping,
          HttpServletRequest request) {
    
          ActionErrors errors = new ActionErrors();
          if (greet == null || greet.trim().equals("")) {
             errors.add("greet", new ActionError("error.greet"));
          }
          if (name == null || name.trim().equals("")) {
             errors.add("name", new ActionError("error.name"));
          }
          if (address == null || address.trim().equals("")) {
             errors.add("address", new ActionError("error.address"));
          }
          if (email == null || email.trim().equals("")) {
             errors.add("email", new ActionError("error.noEmail"));
          }
          else if (email.indexOf("@")==-1) {
             errors.add("email", new ActionError("error.wrongEmail"));
          }
          if (tel==0) {
             errors.add("tel", new ActionError("error.tel"));
          }
          return errors;
          }
          ...
    
       public String getEmail() {
          return email;
       }
    
       public void setEmail(String email) {
          this.email = email;
       }
       ...
    }
    

    在资源属性文件中可以使用 代码。资源属性文件的内容是一些键-值对Q参?a xmlns:dw="http://www.ibm.com/developerWorks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" trackclick="no">清单 2Q。在源代码文件中可以调用q些关键字。在每个资源属性文件中pȝ都需?errors.header ?errors.footer q两个关键字?/p>清单 2. ApplicationResources.properties
    
    errors.header=

    Validation Error(s)

      errors.footer=

    error.greet=
  • Choose your greet error.name=
  • Enter your name error.address=
  • Enter your address error.tel=
  • Enter your contact number error.wrongEmail=
  • Correct your email error.noEmail=
  • Enter your email
  • 修改 Action c?
    OwnerAction cM在局部{发\径“success”中单地昄一条诸如“Thank you, Miss Nancy Chen”之cȝ消息。请修改 OwenerAction cȝ execute() Ҏ来实现您的逻辑Q(每个 action c都必须实现 execute() ҎQ。参?a xmlns:dw="http://www.ibm.com/developerWorks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" trackclick="no">清单 3Q它会将控制程转向 success.jsp?/p> 清单 3. OwnerAction.java
    												
    public class OwnerAction extends Action {
    
       public ActionForward execute(
          ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response)
          throws Exception {
    
          OwnerForm ownerForm = (OwnerForm) form;
          
          String greet = ownerForm.getGreet();
          String name = ownerForm.getName();
          request.setAttribute("name", name);
          request.setAttribute("greet", greet);
    
          // Forward control to the specified success target
    
    										

    - 作者: desertapple 2005q?4?? 星期?20:08



    ymx 2006-05-20 14:45 发表评论
    ]]>我的struts开发工兗插?http://www.tkk7.com/yaominxi/archive/2006/04/05/39345.htmlymxymxWed, 05 Apr 2006 04:33:00 GMThttp://www.tkk7.com/yaominxi/archive/2006/04/05/39345.htmlhttp://www.tkk7.com/yaominxi/comments/39345.htmlhttp://www.tkk7.com/yaominxi/archive/2006/04/05/39345.html#Feedback0http://www.tkk7.com/yaominxi/comments/commentRss/39345.htmlhttp://www.tkk7.com/yaominxi/services/trackbacks/39345.html所谓工Ʋ成其事,必先利其器。罗列一下本人在实际开发中所使用到的和struts有关的东东:
    1.IDE - Eclipse2.1.2 + 语言?/font>。偶比较怀?也可以说是懒)Q新版本一直没有去download.
    2.tomcatPlugin_v3.0(2003.7.27) 在tomcat下Jsp或Servlet的图形化调试插g。它的调试原理针对jsp文g所?生的java文gQ?不要qL可以对jsp文g直接debug了,q样的东东我q没见过?首选的tomcat版本?.x,对于 4.x 得加一个补?jasperDebugPatch) ?/common/classesQ才能正常调试?全面支持eclipse的各版本?http://www.sysdeo.com/eclipse/tomcatPlugin.html
    3.easystruts 0.7,当然是方便struts的开发了,好象不支持eclipse3.0, http://sourceforge.net/projects/
    4.struts-console-4.7 又一个辅助开?Struts 的工P可以单独作ؓ Swing q行Q也可以嵌入到多个流行的 Java IDE q行无缝集成Q当然少不了eclipse了。它的功能ؓQ可视化地编?JSP 标签、Struts/Validator/Tiles 配置文gQ特别是 struts-config.xml q个配置文g?br />  http://www.jamesholmes.com/struts/console/index.html
    5.RBManager 0.7 用来理 Struts 中国际化资源文g的一个工兗原?IBM 开源的Q现在归?ICU ( International Components for Unicode)?比较大的目Q资源文件用q种工具来管理非常必要了?br />  那个bat文g的内Ҏ改ؓQjava -classpath RBManager.jar;lib\xerces.jar com.ibm.rbm.RBManager(土法)   IBM DW 中国有一文章谈到这个工L使用Q我是看了q篇文章才找到这个好帮手的?br />  http://oss.software.ibm.com/icu4j/demo_tools/RBManager.html
    6.StrutsTestCase v2.1.2 sf.net 的一个开源项目,Struts 试框架Q用?Struts E序的测试?br />  支持 Cactus 1.6.1 、JUnit 3.8.1Q别告诉我你q不知道什么是Junit哟?br />  http://strutstestcase.sourceforge.net/
     
    7.几个开源例子?/font>q个不是工具啦,http://struts.sourceforge.net/ 
      作ؓ sf.net 的一个开源项目,有一?Struts 的示?推荐Struts Spring), 以及一些扩展与补充。入门的同学可以ȝI一下,一斚w通过CZ来学习,另一斚w有些扩充可以用到实际目中,以提高效率?

    后记Q构架一个良好的Web应用Qstruts仅仅是一部分Q它是属于表C层(The Presentation Layer) ?在持久层(persistence Layer),可供使用的framework?hibernate、iBatis(q个我实践过一个项?,在业务组件层(business Layer),有spring(强烈推荐)和PicoContainer可以用来以Ioc的方式组lbeanQ减依赖关pR?br />      设计良好的分层更有利于维护和单元试(大牛们大都这么说??br />



    ymx 2006-04-05 12:33 发表评论
    ]]>
    վ֩ģ壺 ɫˬƵ| Ů޾Ʒþþۺ| ҹ뾫Ʒѿ| ޾ƷGVͬ| һ| ޸avվ| ƬAëƬ鴤| þ㽶߿| ؼëƬaaaaѹۿ| 츾͵ŷ| 97seۺ| ھƷþþþþþ| һVR| ߹ۿ | ԻƵs| ƬӰԺۿ| ˳ɫ߹ۿ| һ| þ޾Ʒavվ| 77777ҹþö| ղƷϵ| վ߹ۿ| ˳վѲ| վɫƵѹۿ| ˳Ƶ߹ۿվ| ĻþƷƵ| 㽶Ƶѿ| ߿Ƭ˳Ƶ| yellowվ| պ߹ۿ| ѹվ߿| պɫպƵվ| Ʒһþ | ۺɫһ| ۺϼС˵| ձҺ| Ůһ| պƷ˳߹ۿ| 91һ߹ۿ| þþþavר| ߹ۿ|