??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品亚洲片在线va,亚洲一级毛片免费在线观看,亚洲欧洲日韩国产综合在线二区http://www.tkk7.com/kobe09/category/11880.html爪吐奕奕征?/description>zh-cnThu, 01 Mar 2007 22:14:37 GMTThu, 01 Mar 2007 22:14:37 GMT60Structs中基本配|入?/title><link>http://www.tkk7.com/kobe09/archive/2006/06/14/52749.html</link><dc:creator>氧气中毒</dc:creator><author>氧气中毒</author><pubDate>Wed, 14 Jun 2006 07:12:00 GMT</pubDate><guid>http://www.tkk7.com/kobe09/archive/2006/06/14/52749.html</guid><wfw:comment>http://www.tkk7.com/kobe09/comments/52749.html</wfw:comment><comments>http://www.tkk7.com/kobe09/archive/2006/06/14/52749.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/kobe09/comments/commentRss/52749.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kobe09/services/trackbacks/52749.html</trackback:ping><description><![CDATA[  1.为Structs应用配置Web.xml文g<br />  <br />  W一?配置ActionServlet<br />  <br />  <servlet><br />  <servlet-name>action</servlet-name><br />  <servlet-class>org.appache.structs.ActionServlet</servlet-class><br />  </servlet><br />  <br />  <servlet-mapping><br />  <servlet-name>action</servlet-name><br />  <uri-pattern>*.do</url-pattern><br />  </servlet-mapping><br />  <br />  注意:不管应用中包含多个子应?都只需配置一个ActionServlet,因ؓActionServlet支持多线E?目前的Structs框架只允许在应用中配|一个ActionServlet?br />  <br />  W二步:初始化参数对Servlet的运行环境进行初始化配置?br />  <br />  <servlet><br />  <servlet-name> action</servlet-name><br />  <servlet-class> org.appache.structs.ActionServlet </servlet-class><br />  <init-param><br />  <param-name>config</param-name><br />  <param-value>/WEB-INF/structs-config.xml</param-value><br />  </init-param><br />  </servlet><br />  <br />  ?-1. Struts1.1中用到的初始化参?br />  <br />  参数名       含义/默认?br />  config     以相对\径的方式指明Struts应用E序的配|文件位|。如不设|,则默认gؓ/WEB-INF/struts-config.xml?br />  config/sub1   以相对\径的方式指明子应用程序的配置文g位置Q一般来_很少用到子应用程序,在此不多描述?br />  debug      讄Servlet的debugU别Q控制日志记录的详细E度。默认ؓ0Q记录相Ҏ的日志信息?br />  detail     讄Digester的debugU别QDigester是Struts框架所使用的用来解析xml配置文g的一个框Ӟ通过该设|,可以查看不同详细{的解析日志。默认ؓ0Q记录相Ҏ的日志信息?br />  <br />  W三步:配置Ƣ迎清单<br />  <br />  当客戯问Web应用Ӟ如果仅仅l出Web应用的Root URLQ没用指定具体的文g名,Web容器会自动调用Web应用的欢q文件?br />  <br />  <welcome-file-list><br />  <welcome-file>welcome.jsp</welcome-file><br />  <welcome-file>index.jsp</welcome-file><br />  </welcome-fiel-list><br />  <br />  说明Q?lt;welcome-file-list>可以包含多个<welcome-file>子元素,首先查找W一?lt;welcome-file>文g?br />  <br />  ׃<welcome-file-list>元素中不能配|Servlet映射Q因此不能直接把Structs的Action作ؓƢ迎文gQ可以采用一U变通的Ҏ来实现在Ƣ迎文g中调用Structs Action。首先,在Structs配置文g中ؓ被调用的Action创徏一个全局的{发项Q例如:<br />  <global-forwards><br />  <forward name=”welcome?path=”HelloWord.do?><br />  </global-forwords><br />  <br />  创徏一个welcome.jsp的文?br />  <br />  最后在web.xml文g中把welcome.jsp文g配置为欢q文Ӟ代码如下Q?br />  <welcome-file-list><br />  <welcome-file>welcome.jsp</welcome-file><br />  </welcome-file-list><br />  <br />  W四步:配置错误处理<br />  <br />  <error-page><br />  <error-code>404</error-code><br />  <location>/commom/404.jsp</location><br />  </error-page><br />  <error-page><br />  <error-code>505</error-code><br />  <location>/commom/505.jsp</location><br />  </error-page><br />  <br />  也可以ؓWeb容器捕获的Java异常配置<error-page>,需要设|?lt;exception-type>子元素,它用于指定Java异常cRWeb容器可能捕获如下异常Q?br />  <br />  RuntimeException或Error  ServletException或它的子cRIOException或它的子c?br />  <br />  <error-page><br />  <exception-type>java.io.IOException</exception-type><br />  <location>/common/system_ioerror.jsp</location><br />  </error-page><br />  <br />  W五步:配置Structs标签?br />  <br />  使用客户化的标签库,要配|它?br />  <br />  <taglib><br />  <tag-uri>/WEB-INF/structs-html.tld<tag-uri><br />  <taglib-location>/WEB-INF/structs-html.tld</taglib-location><br />  </taglib><br />  <br />  <tag-uri>用于指定标签库的相对或者绝对URI地址QWeb应用Ҏq一URI来访问标{ֺ?br />  <br />  <taglib-location>指定标签描述文g在文件资源系l中的物理位|?br />  <br />  2.Structs配置文g<br />  <br />  Structs框架在启动时会读入其配置文gQ根据它来创建和配置各种Structslg?br />  <br />  1<Structs-config>元素<br />  <br />  <structs-config>元素是Structs配置文g的根元素Q?lt;structs-cofig>元素?个子元素。它的DTD定义如下Q?br />  <br />  <!ELEMENT structs-config(data-sources?,formbean?,global-exeception?,global-forward?,action-mapping,controller?,message-resources*,plug-in*)><br />  <br />  在Struts配置中,必须按照以上的DTD指定的先后顺序来配置<Structs-config>元素的各个子元素Q如果颠倒了q些元素的配|文件中的位|,在Structs应用启动时会生成错误?br />  <br />  <data-sources>元素<br />  <br />  <data-sources>元素包含零个、一个或者多?lt;data-sources>子元素,<data-sources>用于配置特定的数据源Q它可以包含多个<set-property>子元素,用于讄数据源的各种属性?br />  。。?br />  <br />  配置了数据源后,可以在ActioncM讉K数据源,在org.apache.structs.action.ActioncM定义了getDataSource(HttpRequrst)ҎQ它用于获取数据源对象的引用?br />  <br />  DataSource dataSource;<br />  Connection connection;<br />  dataSource =getDataSource(request);<br />  connection=dataSource.getConnection();<br />  <br />  也可以在配置文g中声明多个数据源Q此旉要ؓ每一个数据源分配唯一的key|通过改值来标识特定的数据源?br />  <br />  2<form-beans>元素<br />  <br />  <form-beans>元素用来配置多个ActionForm BeanQ?lt;form-beans>包含多个<forom-bean>子元素,,每个<from-bean>包含多个属性,ClassName , name,type<br />  <br />  <form-beans><br />  <form-bean name="HelloForm" type="hello.HelloForm"/><br />  </form-beans><br />  <br />  注意Q配|动态ActionForm BeanQ还必须配置<form-bean>元素?lt;form-property>元素?br />  <br />  <form-beans><br />  <form-bean name="HelloForm" type="hello.HelloForm"/><br />  <form-bean name="userForm" type="org.apache.structs.action.DynaAction"><br />  <from-property name="firstname" type="java.lang.String"/><br />  <form-property name="secondname" type="java.lang.String"><br />  <form-property name="age" type="java.Integer" initial="18"><br />  </form-beans><br />  <br />  3<global-exception>元素<br />  <br />  <global-exception>用于配置异常处理Q?lt;global-exception>元素可以包含零个或者多?lt;exception>元素?br />  <br />  <exception>元素用来讄java异常和异常处理类org.apache.structs.action,Exception Hander之间的映?br />  <br />  4<gloable-forwards>元素<br />  <br />  <global-forwards>元素用来声明全局的{发关p,<global-forwards>有零个或多个<forward>元素l成?lt;forward>元素用于把一个逻辑映射到特定的URL<br />  <br />  属性      描 q?br />  <br />  className  ?lt;forward>元素对应的配|类Q默认ؓorg.apache.structs.action.ActionForWard<br />  <br />  name     转发路径的逻辑名,此项时必ȝ<br />  <br />  path     指定或者重定向的URI。此Ҏ必须的,必须以?”开?br />  <br />  redirect   此项是trueQ表C是执行重定向的****作,此项是falseӞ表示h转发?br />  <br />  <global-forwards><br />  <forward name="forward1" path="/Action1.do"/><br />  <forward name="forward1" path="/Action2.do"/><br />  </global-forwards><br />  <br />  如果jsp1.jsp把请求{发给Action1,可以使用以下代码Q?br />  <br />  <html:link forward=”forward1?gt;<br />  <br />  或?lt;logic:forward name=”forward1?gt;<br />  <br />  如果Action1的executeQ)Ҏ把请求{发给JSP2.jspQ可以用一下代码:<br />  <br />  return(mapping.findForward(“forward2?)<br />  <br />  5<action-mapping>元素<br />  <br />  <action-mapping>元素包含零个或者多?lt;action>元素?lt;action>元素描述了从特定的请求\径到相应的Actioncȝ映射?br />  <br />  6<controller>元素<br />  <br />  <controller>元素用于配置ActionServlet?br />  <br />  7< message-resources>元素<br />  <br />  <message-resources>元素用于配置Resource BundleQResource Budle用于存放本地化消息文件?br />  <br />  Structs标签<br />  <br />  HTML标签<br />  <br />  标签名        描述<br />  base         包装HTML的base元素<br />  button        包装HTML?buttoncd的input元素<br />  cancel        包装HTML cancel 按钮<br />  checkbox       包装HTML checkbox cd的输入域<br />  errors        有条件地昄一些error消息Q显CActionErrors信息<br />  file         包装HTML文g上传输入?br />  form         定义HTML form 元素<br />  frame        包装HTML frame 元素<br />  hidden        包装HTML hidden 输入?br />  html         包装 HTML中的 html 元素<br />  image        包装 "image"cd的输入域<br />  img         包装HTML?img 元素<br />  javascript      包装ҎValidatorPlugIn提供的校验规则所提供的javascript校验脚本<br />  link         包装链?br />  messages       有条件地昄一些提CZ息,昄ActionMessages信息<br />  multibox       包装多选输入框<br />  option        包装一个选择输入?br />  options       包装一扚w择输入?br />  optionsCollection  包装一扚w择输入框集<br />  password       包装密文输入?br />  radio        包装单选输入框<br />  reset        包装“重|”功能的按钮<br />  rewrite       包装一个URL<br />  select        包装一个选择输入?br />  submit        包装一个提交按?br />  text         包装一个文本输入框<br />  textarea       包装一个备注输入框<br />  <br />  ActionForm<br />  ActionForm 的要?br />  <br />  创徏一个ActionForm q不困难Q但是你的类必须W合一些要求:<br />  <br />  ActionForm 必须扩展自org.apache.struts.ActionForm。基cActionForm 是不能实例化的?br />  <br />  ActionForm 必须为每个应该从h中收集的HTML控g定义一个公共属性?br />  <br />  (Struts 1.0 要求每个属性都要mutator 和accessor 。Struts 1.1 则没有如此严?<br />  <br />  ActionFormq可能要W合一些可选的要求:<br />  <br />  如果你要求ActionForm 在传递属性到Action之前校验它们Q你必d现validate<br />  <br />  ҎQ?br />  <br />  如果惛_l装前初始化属性,必须实现reset , 它在ActionForm l装前被调用Q?br />  <br />  动态ActionForm<br />  <br />  ActionForm 作ؓcd转换?br />  <br />  ActionForm的一个强制点是应该用String 和boolean属性。实际上Q这意味着属?br />  <br />  必须得从一U{换到另一U类型。大部分应用也需要一些属性,比如电话L或者数量,?br />  <br />  一U格式化的方式出现。核心Java 包提供一些工h做这U事情,但是要清楚地他们集<br />  <br />  成到应用中仍然是一个挑战?br />  <br />  Struts 开发h员经常在ActionForm中包含helperҎQ来q行cd转换。helper Ҏ<br />  <br />  可以有很多种实现方式Q这我们?.6U叙q?br />  <br />  5.2.6 ActionForm 作ؓ防火?br />  <br />  当请求提交时QActionServlet 使用一个自动组装机制来从请求参C讄h?br />  <br />  ActionForm属性。这让你可以通过控制哪个ActionForm 属性被暴露来控制哪个请求参?br />  <br />  是可接受的。这也意味着如果你的ActionForm 的粗心设计你可能失去控制哪个参数可以?br />  <br />  受的能力。ActionForm 一定不能包含看h像是一个JavaBean 属性,但不能从HTTP ?br />  <br />  求设|的属性方法?br />  <br />  5.3.4 ActionForm 可以嵌套其它bean<br />  <br />  因ؓStruts 标签扩展和自动组装机刉支持点号语法来从ActionForm讉K其它<br />  <br />  bean。这是一个方便的方式Q可以通过ActionForm来组装存在的bean。在JSP 面, 你可<br />  <br />  以象q样引用一个嵌套的beanQ?br />  <br />  <html:text<br />  propety="values.telephoneText"<br />  size="14"<br />  maxlength="14"/><br />  <br />  5.7.2 分发QDispatch Q?br />  <br />  Struts 开发h员通常使用同一个Action处理相关?***作。一个通常做法来选择****作是在HTML表单中用隐藏属性。BaseForm 的dispatch 属性也可用作这个目的:<br />  public void setDispatch(String dispatch);<br />  public String getDispatch();<br />  <br />  Struts 配置提供q个U别嵌套的ActionForward:<br />  <br />  Global Q全局Q?ActionForwardҎ个应用中的所有Action 对象均有效;<br />  <br />  Local Q局部) ActionForward 则在ActionMapping 元素中定义。仅寚w些在q个<br />  <br />  ActionMapping中调用的Action对象有效?br />  <br />  从Action 对象内部来看Qforward 通常像这h选择Q?br />  ActionForward forward = mapping.findForward("continue"); <img src ="http://www.tkk7.com/kobe09/aggbug/52749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kobe09/" target="_blank">氧气中毒</a> 2006-06-14 15:12 <a href="http://www.tkk7.com/kobe09/archive/2006/06/14/52749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate入门 - 包作用详?/title><link>http://www.tkk7.com/kobe09/archive/2006/06/14/52747.html</link><dc:creator>氧气中毒</dc:creator><author>氧气中毒</author><pubDate>Wed, 14 Jun 2006 07:11:00 GMT</pubDate><guid>http://www.tkk7.com/kobe09/archive/2006/06/14/52747.html</guid><wfw:comment>http://www.tkk7.com/kobe09/comments/52747.html</wfw:comment><comments>http://www.tkk7.com/kobe09/archive/2006/06/14/52747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kobe09/comments/commentRss/52747.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kobe09/services/trackbacks/52747.html</trackback:ping><description><![CDATA[Hibernate一共包括了23个jar包,令hD~ؕ。本文将详细讲解Hibernate每个jar包的作用Q便于你在应用中Ҏ自己的需要进行取舍?<br /><br />  下蝲HibernateQ例?.0.3E_版本Q解压羃Q可以看C个hibernate2.jar和lib目录下有22个jar包: <br /><br />  hibernate2.jar: <br />  Hibernate的库Q没有什么可说的Q必M用的jar?<br /><br />  cglib-asm.jar: <br />  CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库Q必M用的jar?<br /><br />  dom4j.jar: <br />  dom4j是一个Java的XML APIQ类gjdomQ用来读写XML文g的。dom4j是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的YӞ可以在SourceForge上找到它。在IBM developerWorks上面可以扑ֈ一文章,对主的Java XML APIq行的性能、功能和易用性的评测Qdom4j无论在那个方面都是非常出色的。我早在近两年之前开始用dom4jQ直到现在。如今你可以看到来多的Java软g都在使用dom4j来读写XMLQ特别值得一提的是连Sun的JAXM也在用dom4j。这是必M用的jar包,Hibernate用它来读写配|文件?<br /><br />  odmg.jar: <br />  ODMG是一个ORM的规范,Hibernate实现了ODMG规范Q这是一个核心的库,必须使用的jar包?<br /><br />  commons-collections.jarQ?<br />  Apache Commons包中的一个,包含了一些Apache开发的集合c,功能比java.util.*强大。必M用的jar包?<br /><br />  commons-beanutils.jarQ?<br />  Apache Commons包中的一个,包含了一些Bean工具cȝ。必M用的jar包?<br /><br />  commons-lang.jar: <br />  Apache Commons包中的一个,包含了一些数据类型工LQ是java.lang.*的扩展。必M用的jar包?<br /><br />  commons-logging.jar: <br />  Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本n包含了一个Simple LoggerQ但是功能很弱。在q行的时候它会先在CLASSPATH找log4jQ如果有Q就使用log4jQ如果没有,找JDK1.4带的java.util.loggingQ如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾Q当初Apache极力游说Sun把log4j加入JDK1.4Q然而JDK1.4目组已经接近发布JDK1.4产品的时间了Q因此拒l了Apache的要求,使用自己的java.util.loggingQ这个包的功能比log4j差的很远Q性能也一般?br /><br />  后来Apache开发出来了commons-logging.jar用来兼容两个logger。因此用commons-logging.jar写的logE序Q底层的Logger是可以切换的Q你可以选择log4jQjava.util.logging或者它自带的Simple Logger。不q我仍然强烈使用log4jQ因为log4j性能很高Qlog输出信息旉几乎{于System.outQ而处理一条logq_只需?us。你可以在Hibernate的src目录下找到Hibernate已经Z准备好了的log4j的配|文Ӟ你只需要到Apache |站M载log4j可以了。commons-logging.jar也是必须的jar包?<br /><br />  使用Hibernate必须的jar包就是以上的q几个,剩下的都是可选的?<br /><br />  ant.jar: <br />  Ant~译工具的jar包,用来~译Hibernate源代码的。如果你不准备修改和~译Hibernate源代码,那么没有什么用Q可选的jar?<br /><br />  optional.jarQ?<br />  Ant的一个辅助包?<br /><br />  c3p0.jarQ?<br />  C3PO是一个数据库q接池,Hibernate可以配置Z用C3POq接池。如果你准备用这个连接池Q就需要这个jar包?<br /><br />  proxool.jarQ?<br />  也是一个连接池Q同上?<br /><br />  commons-pool.jar, commons-dbcp.jar: <br />  DBCP数据库连接池QApache的Jakartal织开发的QTomcat4的连接池也是DBCP?<br /><br />  实际上Hibernate自己也实C一个非帔R常简单的数据库连接池Q加上上?个,你实际上可以在Hibernate上选择4U不同的数据库连接池Q选择哪一个看个h的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中用HibernateQ一定要用App Server的连接池Q不要用以上4U连接池Q否则容器管理事务不起作用?<br /><br />  connector.jar: <br />  JCA 规范Q如果你在App Server上把Hibernate配置为Connector的话Q就需要这个jar。不q实际上一般App Server肯定会带上这个包Q所以实际上是多余的包?<br /><br />  jaas.jar: <br />  JAAS是用来进行权限验证的Q已l包含在JDK1.4里面了。所以实际上是多余的包?<br /><br />  jcs.jarQ?<br />  如果你准备在Hibernate中用JCS的话Q那么必d括它Q否则就不用?<br /><br />  jdbc2_0-stdext.jar: <br />  JDBC2.0的扩展包Q一般来说数据库q接池会用上它。不qApp Server都会带上Q所以也是多余的?<br /><br />  jta.jarQ?<br />  JTA规范Q当Hibernate使用JTA的时候需要,不过App Server都会带上Q所以也是多余的?<br /><br />  junit.jar: <br />  Junit包,当你q行Hibernate自带的测试代码的时候需要,否则׃用?<br /><br />  xalan.jar, xerces.jar, xml-apis.jar: <br />  Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会带上QJDK1.4也包含了解析器,不过不是XercesQ是CrimsonQ效率比较差Q不qHibernate用XML只不q是d配置文gQ性能没什么紧要的Q所以也是多余的?img src ="http://www.tkk7.com/kobe09/aggbug/52747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kobe09/" target="_blank">氧气中毒</a> 2006-06-14 15:11 <a href="http://www.tkk7.com/kobe09/archive/2006/06/14/52747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts实践入门http://www.tkk7.com/kobe09/archive/2006/06/14/52745.html氧气中毒氧气中毒Wed, 14 Jun 2006 07:09:00 GMThttp://www.tkk7.com/kobe09/archive/2006/06/14/52745.htmlhttp://www.tkk7.com/kobe09/comments/52745.htmlhttp://www.tkk7.com/kobe09/archive/2006/06/14/52745.html#Feedback1http://www.tkk7.com/kobe09/comments/commentRss/52745.htmlhttp://www.tkk7.com/kobe09/services/trackbacks/52745.html    Struts是apache Jakarta的一个开攑օ码的目(
    http://jakarta.apache.org/struts/index.html)Qؓ开发web应用E序提供了一个框?framework)。Sturts我们使用MVC Model 2 的模式开发web应用E序。Sturts提供了Controller层组Ӟq些lg可以和多U已有Model层和View层技术集成用。Sturts也可以帮助你建立一个扩展的开发环境?br />
2、安?br />
2.1.下蝲struts 源代码和支持?br />    在本文中使用的是Struts 1.1 beta1 版。下?jakarta-struts-1.1-b1-src.zipQjakarta-struts-1.1-b1-lib.zip

2.2.软g需?br />
    安装StrutsQ尤其是使用源代码build Struts旉要大量的支持软g?br />    
    安装Struts是所需要的软g
    JDKQ?.2版本或更?http://java.sun.com/j2se)
    
    Servlet ContainerQ支持servlet规范2.2或更高、jsp规范1.1或更高;是用Tomcat 3.2(http://jakarta.apache.org/tomcatQ以上?br />    
    XML ParserQ支持JAXP规范1.1或更高;推荐使用jaxp的参考实玎ͼhttp://java.sun.com/xmlQ。当然也可以是Xercers(http://xml.apache.org/xerces-j)?br />
    以下Z源代码build Struts所需要的软g
    Ant Build systemQ?大名鼎鼎的antQ?.4版本以上。(http://jakarta.apache.org/antQ?br />    Servlet API classesQ?http://jakarta.apache.org/builds/jakarta-servletapi
    JDBC 2.0 Optional Package Classes QStruts 支持javax.sql.DataSource  Qhttp://java.sun.com/products/jdbc/download.htmlQ?br />    
    Jakarta Commons PackagesQStruts使用了Jakarta Common Project的一些包Q?br />        Beanutils (Version 1.0 or later)Q提供了易用的java反射和内省api?br />        Collections (Version 1.0 or later)Q提供了一套与java Collections Framework 兼容和扩展的cR?br />        DBCP(version 1.0 or later)Q数据库q接和对象池.
        Logging(version 1.0 or later)Q日?br />        POOL(version 1.0 or later)Q?br />        SERVICES(version 1.0 or later)
        VALIDATOR(version 1.0 or later)Q?br />        Digester (Version 1.0 or later)Qxml-java对象映射工具Q通常用于解析xml配置文g?
    (http://jakarta.apache.org/commons)
    Xalan XSLT Processor Q你可以使JAXP 1.1所带的xalan.jarQ也可以使用Xalan 1.2或更高版本(http://xml.apache.org/xalanQ?br />

2.3用原码build Struts
    以如下运行环境ؓ?
        OS:windows2000Q?br />        jdk:j2sdk1.3Q?br />
        ant:ant1.4.1Q?br />        XML Parser:Xalan2.3.1Q?br />        Xalan XSLT Processor:Xereses2.0.1
        保ant,Xalan,Xereses工作正常
        注意事项:1.ant ?style{Q务可以运?br />
    2.3.1.解压jakarta-struts-1.1-b1-src.zip到D:\jakarta\struts-1.1-b1-src目录?br />      解压jakarta-struts-1.1-b1-lib.zip到D:\jakarta\struts-1.1-b1-src\lib目录?br />      解压后的目录l构如下Q?br />        D:\jakarta
        |-struts-1.1-b1-src     -->struts源码根目?br />            |-conf
          |-contrib
          |-doc
          |-legacy
          |-lib            -->struts的支持库
          |-src
          |-target
          |-web
      D:\jakarta\struts-1.1-b1-src是struts源码根目录,下文?struts表示“D:\jakarta\struts-1.1-b1-src"?
      D:\jakarta\struts-1.1-b1-src\lib是struts的支持库目录Q下文用$struts_lib表示"D:\jakarta\struts-1.1-b1-src\lib"。该目录下包含commons-beanutils.jar,commons-collection.jar...{javacdQ这些jar是build Struts所必需的。虽然你可以?.2中给出的地址下蝲安装q些jarQ但可能会很ȝQ有些只有srcQ你q需要buildQ?br />
    2.3.2建立build.properties
      $struts\build.properties.sample另存?struts\build.properties修改下列属性:
        catalina.home - 你的tomcat 4.0路径Q当你希望用build中deploy.catalina的target时才需要配|)

        
        commons-beanutils.jar - BeanUtils package JAR 路径        commons-beanutils.jar=$struts_lib/commons-beanutils.jar(一定用l对路径Q因为在Struts有多个buildQ如使用相对路径Q一些build会失败。以下相?

        commons-collections.jar - Collections package JAR 路径
        commons-collections.jar=$struts_lib/commons-collections.jar

        commons-dbcp.jar - DBCP package JAR 路径
        commons-dbcp.jar=$struts_lib/commons-dbcp.jar

        Digester package JAR 路径
        commons-digester.jar=$struts_lib/commons-digester.jar

        Logging package JAR 路径
        commons-logging.jar=$struts_lib/commons-logging.jar

        POOL package JAR 路径        
        commons-pool.jar=$struts_lib/commons-pool.jar

        SERVICES package JAR 路径
        commons-services.jar=$struts_lib/commons-services.jar

        VALIDATOR package JAR 路径
        commons-validator.jar=$struts_lib/commons-validator.jar

        Jakarta Regexp package JAR 路径
        regexp.jar=D:/jakarta/regexp-1.2/jakarta-regexp-1.2.jarQ如果没有这个jar,可以到http://jakarta.apache.org/下蝲Q?br />
        JDBC 2.0 Optional Package JAR 路径
        jdbc20ext.jar=$struts_lib/jdbc2_0-stdext.jar

        Servlet API classes (either version 2.2 or 2.3) JAR 路径
        servlet.jar=D:/j2sdkee1.2.1/lib/j2ee.jar        

        tomcat.home - Tomcat 3.2 Q当你希望用build中deploy.tomcat的target时才需要配|)
        xerces.home - Xerces parser, version 1.2 or 1.3 (reQ当你希望用build中deploy.catalina的target时才需要配|)

        2.3.3.build Struts
        在DOS命oW下q行:ant dist
        D:\jakarta\struts-1.1-b1-src>ant dist

        build 成功后得到Struts 1.1 beta1 的二q制发行版:
        
        D:\jakarta
        |-struts-1.1-b1-src     -->Struts源码根目?br />          |-dist                -->Struts 1.1 beta1 的二q制发行版根目录?br />          | |-lib        -->Struts应用工程的支持库
          | |-webapps        -->Struts的一些应用工E?br />          |-target    

        lib目录下是一些Struts的应用工E的支持库文Ӟ
        lib/commons-*.jar - Jakarta Commons project jar        
        (weblogc6.1 sp2 下不把commons-logging.jar攑֜wl ?classpath,会出?郁闷ing?

        lib/jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes        
        lib/struts.jar - This JAR file contains all of the Java classes included in Struts. 你必Lstruts.jar拯到每一个基于Struts的web application的WEB-INF/lib目录下。一定不要用讄classpath的方式包含这些jarQ会出现 ClassNotFoundException的异常?br />        
        lib/struts-*.tld - Struts 标签库描q文件。需要拷贝到web application的WEB-INF目录下?br />        
        webapps目录下是一些web application的war文g
        webapps/struts-blank.war - 创徏ZStruts的应用程序的要指?br />        webapps/struts-documentation.war - Struts 文档。       ?br />        webapps/struts-example.war - 展示大部分Struts特点的例子。   ?br />        webapps/struts-exercise-taglib.war - 一些用Struts标签库和试?br />        webapps/struts-template.war - Struts 模板标签介绍和示例?br />        webapps/struts-upload.war - 用Struts框架写的文g上传?br />
2.4在appserver上发布基于Struts的web应用E序
    
    如果你的appserver是WebLogic 6.0+Q那么你可以向用标准war一样用上面的war。我的appserver是WebLogic 6.1 sp2。在其他的appserver上发布Struts的web应用E序参见http://jakarta.apache.org/struts/userGuide/installation.html?installing Struts with your servlet container"一节?br />    启动webLogicQ进入控制台Q配|一个新的web applicationQ\径指?struts\dist\webapps

氧气中毒 2006-06-14 15:09 发表评论
]]>
Spring MVC框架的高U配|?http://www.tkk7.com/kobe09/archive/2006/06/14/52737.html氧气中毒氧气中毒Wed, 14 Jun 2006 07:05:00 GMThttp://www.tkk7.com/kobe09/archive/2006/06/14/52737.htmlhttp://www.tkk7.com/kobe09/comments/52737.htmlhttp://www.tkk7.com/kobe09/archive/2006/06/14/52737.html#Feedback0http://www.tkk7.com/kobe09/comments/commentRss/52737.htmlhttp://www.tkk7.com/kobe09/services/trackbacks/52737.html本文ؓ您提供关于Spring MVC框架的配|技巧,以帮助管理基于Spring的web应用E序的多个实例。本配置理主题常被学术界所忽略Q但是,q对于现实的web开发尤为重要。本主题q不直接兌M具体的技术,因此Q我们将从最基本的概念开始对q个问题q行说明。下面,我们根据Spring MVC框架QؓZ本技术开发的目提供一pd的解x案?/p>

Spring配置

  Zl常会在一C上的L上配|一UWeb应用E序。例如,在生产中Q一个网站可能只有一个实例。除了此实例外,开发h员可以在用于开发的机器上配|其他的Q开发)实例。也可以在公司(机构Q内部的本地开发服务器上维护其他应用程序装|,q将让您受益匪浅。该实例的目的是使Web设计者可以获得有质量保证的材料,qؓ需要ؓ应用E序提供文g资料的h提供准入?/p>

  大家都知道,即是最单的场景Q也需要安装、配|和l护三个实例。而对于位于不同地理位|的团队来说Q要从事q样的项目便更加困难。对于Q何不是特别简单的Web应用E序目Q都需要多名开发h员来安装目装置和本地设|以及运行单元测试的装置{?/p>

  很多l织都将自己开发的产品作ؓWeb应用E序。我们可以在很多产品中发现这U情况,例如电子商务pȝ?a target="_blank">内容理pȝQCMSQ,以及博客发布q_{。这cM品可在多个服务器中进行部|Ӏ对于成功的多用途Web应用E序来说Q他们的开发h员必要保证他们的应用程序便于安装,q且能够与其他Web应用E序完美集成。经q上q讨Z后,我们应该明了Q作为本文主题的应用E序配置是通用Web应用E序目开发h员所需要解决的重要问题之一?/p>

  诸如CVS或Subversion之类的版本控制系l是开发组l用的一U标准工兗这U工具代表了一些组l的中心源代码版本库Q它们被用于保持源代码的有序。用户可以跟t应用程序源代码的变化,昄不同版本的区别,q可以确定项目分支。而且Q它们得在应用E序部v中进行部分更新成为可能?/p>

  很明显,版本控制pȝ软g是跟t源代码所必需的,它对于解军_用程序配|问题有非常大的帮助。在本文中,我们不会把重点攑֜版本控制pȝ上,因ؓq方面已l有很多相关的材料了。在此,我们关注版本控刉题中的一个小话题Q如何Web应用E序的配|更加便P其是用Spring MVC框架~写的Web应用E序Q?/p>

  问题是:我们在此讨论的是一U什么样的配|?MWeb应用E序都需要一些资源,q些资源通常都是其所q行的服务器所Ҏ的,例如数据库URL、发送电子邮件的SMTP服务器,以及包含专用软g文g的文件夹{。这L讄应该集中Q从而应用E序配置更加单?/p>

  但是Q这只是q个问题最单的一U版本。有时候,在应用程序开发中需要更加复杂的配置。这意味着Q必d各次部v中的不同Beanq接hQ而这会问题更加复杂?/p>

  q些应用E序配置问题的解x案有诸多优势Q包括:化应用程序的安装和配|过E,使源代码版本控制更加便,减少源代码版本库中的冲突现象。下面,我们通过CZ详细讨论q个话题?/p>

问题

  我们首先来演CZ下上文所提到的最单的版本。在q一场景中,我们希望在应用程序部|中改变的是单的配置参数Q例如链接、密码等。如果您曄使用Spring MVC框架开发过Web应用E序Q那么您应该知道q里用到的两个配置文gQ?/p>

  • /WEB-INF/applicationContext.xmlQ它让您可以配置BeanQ或者显C应用程序上下文。通过q个文gQ您可以定义自己的业务逻辑Bean、资源以及其他可以与Web端口相关联的所有Bean?
  • /WEB-INF/[servlet-name]-servlet.xmlQ它被用于配|Web层、视图解析器、控制器、校验器以及其他所有MVC框架中必需的Bean?strong>[servlet-name]指的是在web.xml部v描述W中定义?strong>Spring dispatcher servlet的名U?

  那么问题在哪儿呢Q问题就出在applicationContext.xml中将包括一些特定于L的Bean定义。其中,最明显的一个示例就是包含了JDBCq接信息的beanQ但是Q何一U稍微复杂些的应用程序都有十几个cM的Bean。看一下下面的CZQ?/p>

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName">
       <value>org.postgresql.Driver</value>
   </property>
   <property name="url">
       <value>jdbc:postgresql://localhost/test</value>
   </property>
   <property name="username">
       <value>postgres</value>
   </property>
   <property name="password">
       <value></value>
   </property>
</bean>

  q个解决Ҏ的问题在于对applicationContext.xml文g的维护。对于初学者来_设想一下,目攑֜源代码版本控制系l中Q例如CVS。下面,假设您希望在|站中添加新的功能,那么需要在应用E序上下文定义中d额外的Bean定义。问题是如何在生产服务器上体现这些改变?/p>

  通常情况下,应用E序的本地实例不会与zd站点使用同样的数据库Q因此applicationContext.xml文g包括让您能够访问本地数据库的设|。当您想提交在源代码版本库中的改变时Q就需要注意这些特定于L属性的同步性。版本库中的文g最l可能用本地设|中的配|。如果想在生产服务器上更新配|,必L动同步这些属性的倹{这是非常枯燥的dQ而且q非常容易出错?/p>

  对于应用E序的每个实例来_q个问题更加重要。假如有三位开发h员正在用代码段基址Q而且他们使用的是本地的数据库。当您提交更改的时候,他们每个人在本地服务器上更新源代码的时候都必须非常谨慎。他们会手动同步q些更改Q然后提交他们的工作。这样一来,版本控制pȝ对于q些配置文g来说已经毫无用处。如果曾l用过Spring MVCQ那么您应该知道applicationContext.xml是应用程序中的关键组Ӟ因ؓ是它所有的东西_合在一赗所以,我们需要一U机制来帮助使应用程序中各项保持有序Q这炚w帔R要?/p>

  正如前面所提到的,q是您可能遇到的较简单的配置问题。更隄问题出现在当需要在不同服务器中q行不同的Beanq接的时候。这c问题常会出现在日常软g开发Q务中。例如,假如您的产品有一个客戯n份验证模块,可以Ҏ自关pL据库或LDAP服务器中的用戯行n份验证。自Ӟq一w䆾验证模块可以使用抽象了特定版本库的Beanq行配置。如果您x变不同应用程序部|中验证用户的方式,需要在applicationContext.xml文g中进行不同的Beanq接。这U配|问题常见于在部|中有可配置Ҏ的所有应用程序?/p>

  在下文中Q我们将讨论q两U配|问题。首先我们会x同步的Bean属性问题及其解x案,接下来,我们会讨论更加复杂的同步Beanq接问题?/p>

解决Ҏ

同步Bean属?/h3>

  q个问题的一U可行的解决Ҏ是将所有特定于L的参数都攑ֈ普通的Java属性文件中Q用Spring的PropertyPlaceHolderConfigurerc,这些参数写入Bean属性中?/p>

  使用q一解决ҎQ我们可以生成如下的属性文Ӟ/WEB-INF/jdbc.propertiesQ:

jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost/test
jdbc.user=postgres
jdbc.password=

  我们的Bean配置如下Q?/p>

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
       <value>/WEB-INF/jdbc.properties</value>
    </property>
</bean>

<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
         <value>${jdbc.driver}</value>
    </property>
    <property name="url">
         <value>${jdbc.url}</value>
    </property>
    <property name="username">
         <value>${jdbc.user}</value>
    </property>
    <property name="password">
         <value>${jdbc.password}</value>
    </property>
</bean>

  如上所qͼ我们定义了一个PropertyPlaceholderConfigurercȝ实例Qƈ其位置属性设|ؓ我们的属性文件。该c被实现为Bean工厂的后处理器,q将使用定义在文件中的属性来代替所有的占位W(${...}valueQ?/p>

  利用q种技术,我们可以从applicationContext.xml中移除所有特定于L的配|属性。通过q种方式Q我们可以自由地文gd新的BeanQ而不必担心特定于L属性的同步性。这样可以简化生产部|和l护?/p>

同步性连?/h3>

  上面的技术解决了W一个问题,可是如果您计划修改不同应用程序部|之间的Beanq接Q这一技术便不很适合。针对这一问题的一个解x案便是额外创Z个名为applicationContext-[hostname].xml 的XML定义文g。其?strong>[hostname]是部|应用程序的L的名U。例如,在本地的机器上,q个文g通常名ؓapplicationContext-localhost.xmlQ而在部vӞ它可能更名ؓapplicationContext-somehost.com.xml?/p>

  可以猜测Q这一文g必须包括特定于某一L的所有配|Bean。在本文中,我们假设dataSource bean定义位于这cL件中Q而不是通用的applicationContext.xml定义。当Ӟq种机制与前者ƈ非冲H,但是Z更加单明了,我们只xq种Ҏ?/p>

  既然我们已经有了特定的配|,下面我们来讨论一下如何将其整合到整个Spring MVC配置概念中。要辑ֈq一目的Q可以有许多ҎQ我们将详细C一说明。但首先Q我们应该注意到Q由于有些Bean可能位于独立的配|文件中Q因此在applicationContext.xml中,所有对它们的局部引用都必须更换成全局名称?/p>

  例如Q如下引用:

 <property name="someProperty">
   <ref local="someBean"/>
</property>

  应更改ؓQ?/p>

 <property name="someProperty">
   <ref bean="someBean"/>
</property>

  在这之后Q我们有很多可以d额外的资源以用于配置的方式。其中最明显的就是?lt;import>标签这一额外资源包含在applicationContext.xml配置文g中。用时Q要该标签攑֜applicationContext.xml文g开头。例如:

				
 <import resource="applicationContext-somehost.com.xml"/>

  现在Q在独立的XML定义文g和普通的应用E序上下文定义文件中的所有通用Bean定义都有了特定于L的连接。由于大多数的Bean都不是特定于L的,因此我们可以像处理Web应用E序中的其他资源一栯由地处理applicationContext.xml文gQƈ可以通过合适的版本控制pȝ与其q行同步?/p>

  但是Q上q方法也有一定的弊端。如果您想保留不同XML文g的不同配|,׃然必L心applicationContext.xml的同步性,因ؓ资源的名U必L据不同服务器q行更改。虽然与原有的解x案相比有了很大提高,只需更改文g名,但是q还是需要开发h员的手动协助?/p>

  ׃与applicationContext.xml相比Q主机配|不需如此频繁地进行更改,因此下一步便是将L配置Ud到web.xml文g中(如果可能的话Q。幸q的是,我们有一个可用的解决Ҏ。看一下下面关于web.xml配置的片断:

 <listener>
   <listener-class>
    org.springframework.web.context.ContextLoaderListener
   </listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/applicationContext.xml
       /WEB-INF/applicationContext-somehost.com.xml
    </param-value>
  </context-param>

  正如您所看到的,除了web.xml文g中常有的ContextLoaderListener之外Q我们还d了contextConfigLocation上下文参数配|。这一参数用于指示框架查找q些配置文g的位|。如果这一参数被省略,则Spring只能到applicationContext.xml中查找。这里我们也定义了特定于L的配|文件来使用?/p>

  利用q种ҎQ我们将所有特定于L的配|从applicationContext.xml文g中移除,q样便减M其在不同应用E序部v中的同步性?/p>

  如果q种Ҏ成ؓ您的C惯,您还可以使其更加灉|。通过遵守下列指oQ也可以特定于L的配|从web.xml文g中移除?/p>

  为此Q需要创建特定于我们的应用程序上下文的类Q?/p>

 package net.nighttale.spring.util;

import java.net.InetAddress;

import org.springframework.web.context.support.XmlWebApplicationContext;

public class PerHostXmlWebApplicationContext
extends XmlWebApplicationContext {
       
    protected String[] getDefaultConfigLocations() {
            String hostname = "localhost";
            try {
                hostname = InetAddress.getLocalHost().getHostName();
            } catch (Exception e) {
            }
           
            String perHostConfiguration = DEFAULT_CONFIG_LOCATION_PREFIX
                 + "applicationContext-"
                 + hostname
                 + DEFAULT_CONFIG_LOCATION_SUFFIX
                 ;
   
            logger.debug(
                 "Adding per host configuration file: "
                 + perHostConfiguration
                 );
           
            if (getNamespace() != null) {
                    return new String[] {
              DEFAULT_CONFIG_LOCATION_PREFIX
                + getNamespace()
                + DEFAULT_CONFIG_LOCATION_SUFFIX
             , perHostConfiguration};
            }
            else {
                    return new String[] {
             DEFAULT_CONFIG_LOCATION
              , perHostConfiguration};
            }
    }
}

  q个cL展了Spring中常被作为默认g用的XmlWebApplicationContext。XmlWebApplicationContextcdWeb应用E序的配|从XML定义文g中复制过来。默认情况下Q它可以配置来自applicationContext.xml?strong>[servlet-name]-servlet.xml文g中的应用E序。这个类执行的惟一一w外Q务便是获取它所在的L名称QƈapplicationContext-[hostname].xml文gd到配|文件列表中?/p>

  Z使用q个c,我们需要对其进行编译,其包含在类途径中,q指CSpring框架使用它。前两步非常单,我们׃在此赘述。我们可以指CSping通过contextClass上下文参数来使用它。除了web.xml文g中的原有配置Q我们还可以d下列内容Q?/p>

 <context-param>
   <param-name>contextClass</param-name>
  <param-value>
   net.nighttale.spring.util.PerHostXmlWebApplicationContext
  </param-value>
</context-param>

 如果我们使用q一配置片断Q将会有三个文g被用于初始化q个框架Q?strong>[servlet-name]-servlet.xml、applicationContext-[hostname].xml以及applicationContext.xml?/p>

  正如您所看到的,applicationContext.xml和web.xml文g已经完全摆脱了Q何特定的配置l节Q而且您也不必担心会在更新应用E序时破坏配|?/p>

  但是Q这U方法有一个不之处。因为,不论是否会用,都需要在应用E序部v中有W三个配|文件。在q种情况下,便不需要特定于L的配|。例如:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans></beans>

  最后,需要知道应用程序上下文c需要查扄特定L名。检查主机名U的最单的Ҏ是在机器上运行下列代码:

 System.out.println(InetAddress.getLocalHost().getHostName())

  可以其作ؓJava代码执行Q也可在喜欢使用的脚本语aQ如BeanShell或GroovyQ中作ؓ一个具有Java风格语法的脚本执行。在获取了主机的名称之后Q应该创Z个默认的/WEB-INF/applicationContext-[hostname].xmlI文件夹Q如我们上面所定义的)Q然后便可以开始了?/p>

l束?/h3>

  在本文中Q我们提供了一pd的配|技巧,让您在用Spring MVC框架完成日常工作的时候更加轻松。如果您希望知道如何l护各种Web应用E序部vQ可以试着扑և最适合您的开发过E的解决Ҏ。您的生zM更ؓL?/p>

氧气中毒 2006-06-14 15:05 发表评论
]]>Struts学习W记Q一Q?struts概念和体pȝ?/title><link>http://www.tkk7.com/kobe09/archive/2006/06/04/50304.html</link><dc:creator>氧气中毒</dc:creator><author>氧气中毒</author><pubDate>Sun, 04 Jun 2006 10:00:00 GMT</pubDate><guid>http://www.tkk7.com/kobe09/archive/2006/06/04/50304.html</guid><wfw:comment>http://www.tkk7.com/kobe09/comments/50304.html</wfw:comment><comments>http://www.tkk7.com/kobe09/archive/2006/06/04/50304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kobe09/comments/commentRss/50304.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kobe09/services/trackbacks/50304.html</trackback:ping><description><![CDATA[ <p> <font color="#000000"> <strong>一?/strong> </font> <a name="_Toc65638969"> <span lang="EN-US"> <font face="Arial" color="#000000"> <strong>Struts</strong> </font> </span> </a> <span style="mso-bookmark: _Toc65638969"> <font color="#000000"> <strong> <span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的与</span> <span lang="EN-US"> <font face="Arial">Web App</font> </span> </strong> </font> </span> <span style="mso-bookmark: _Toc65638969"> <span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial"> <font color="#000000"> <strong>的关p?br /></strong> </font> </span> </span> <br style="mso-ignore: vglayout" clear="all" /> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">     <span lang="EN-US">struts</span>叫做<span lang="EN-US">web framework</span>Q其主要Z<span lang="EN-US">web</span>层的应用pȝ开发。按?span lang="EN-US">J2EE Architecture</span>的标准,<span lang="EN-US">struts</span>应当?span lang="EN-US">jsp/servlet</span>一P存在?span lang="EN-US">web container</span>一层?br /></span> </p> <p align="center"> <img title="struts与WebApp的关p? height="306" alt="3.jpg" src="http://www.tkk7.com/images/blogjava_net/kobe09/Framework/Struts/3.jpg" width="405" border="0" /> </p> <p> <br /> <strong>二?/strong> <a name="_Toc65638970"> <strong> <span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Struts</span> <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的体pȝ?/span> </strong> </a> <br />       <span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><font color="#000000">我们?span lang="EN-US">struts framework</span>?span lang="EN-US">MVC </span>模式的体玎ͼ下面我们׃分别从模型、视图、控制来看看<span lang="EN-US">struts</span>的体pȝ构(<span lang="EN-US">Architecture</span>Q。下图显CZ<span lang="EN-US">struts framework</span>的体pȝ构响应客戯求时候,各个部分工作的原理?br /></font></span></p> <p align="center"> <img title="struts体系l构" height="216" alt="2.jpg" src="http://www.tkk7.com/images/blogjava_net/kobe09/Framework/Struts/2.jpg" width="435" align="center" border="0" /> </p> <p style="MARGIN: 13pt 0cm"> <strong> <font size="2"> <font face="Times New Roman">1?/font> </font> </strong> <a name="_Toc65638971"> <font face="Times New Roman"> <strong> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从视图角度(</span> <span lang="EN-US">View</span> </font> </strong> </font> </a> <span style="mso-bookmark: _Toc65638971"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> <font face="Times New Roman" size="2"> <strong>Q?/strong> </font> </span> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先Q?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">Struts</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">Java</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">c?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">org. apache.struts.action.ActionForm</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">Java</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发者将该类l分来创?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">bean</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。在q行Ӟ?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">bean</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有两U用法:<br /></span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">?span style="mso-spacerun: yes">  </span></font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">JSP</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">准备相关?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">HTML</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q表单以q行昄Ӟ</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">JSP</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问该</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 76.45pt; mso-para-margin-left: 7.28gd"> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">bean(</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它保存要攑օ表单中的?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">)</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。那些值是从业务逻辑或者是从先前的用户输入来提供的?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 78.75pt; TEXT-INDENT: -78.75pt; mso-char-indent-count: -7.5"> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman"> <span style="mso-spacerun: yes">          </span>?span style="mso-spacerun: yes">  </span></font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当从</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">Web</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">览器中q回用户输入Ӟ?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">bean</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">验证ƈ保存该输入以供业务逻辑?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">(</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果验证p|的话</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">)</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后箋重新昄使用?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 31.5pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其次Q?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">Struts</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供了许多定?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">JSP</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标记Q它们的使用单,但是它们在隐藏信息方面功能强大。例如,除了</span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">bean</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">名称和给?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">bean</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中每个段的名UC外,面设计者不需要知道有兌?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">bean</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的更多信息?/span> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p style="MARGIN: 13pt 0cm"> <strong> <font size="2"> <font face="Times New Roman">2?/font> </font> </strong> <a name="_Toc65638972"> <font face="Times New Roman"> <strong> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从模型角度(</span> <span lang="EN-US">Model</span> </font> </strong> </font> </a> <span style="mso-bookmark: _Toc65638972"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> <font face="Times New Roman" size="2"> <strong>Q?/strong> </font> </span> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"> <span lang="EN-US" style="mso-bidi-font-size: 10.5pt"> <font face="Times New Roman">Struts</font> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然不直接有助于模型开发?/span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">?span lang="EN-US">Struts</span>中,pȝ</span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模型</span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">的状态主要由<span lang="EN-US">ActiomForm Bean</span>和值对象体现?span lang="EN-US"><o:p></o:p></span></span> </p> <p style="MARGIN: 13pt 0cm"> <strong> <font size="2"> <font face="Times New Roman">3?/font> </font> </strong> <a name="_Toc65638973"> <font face="Times New Roman"> <strong> <font size="2"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从控制器角度Q?/span> <span lang="EN-US">Controller</span> </font> </strong> </font> </a> <span style="mso-bookmark: _Toc65638973"> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> <font face="Times New Roman" size="2"> <strong>Q?/strong> </font> </span> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"> <span style="mso-tab-count: 1">    </span> </span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">?span lang="EN-US">Struts framework</span>中,<span lang="EN-US"> Controller</span>主要?span lang="EN-US">ActionServlet</span>Q但是对于业务逻辑的操作则主要?span lang="EN-US">Action</span>?span lang="EN-US">ActionMapping</span>?span lang="EN-US">ActionForward</span>q几个组件协调完成(也许q几个组Ӟ应该划分到模型中的业务逻辑一块)。其中,<span lang="EN-US">Action</span>扮演了真正的控制逻辑的实现者,?span lang="EN-US">ActionMapping</span>?span lang="EN-US">ActionForward</span>则指定了不同业务逻辑或流E的q行方向?span lang="EN-US"><o:p></o:p></span></span> </p> <p> <br /> <br /><strong>三、基本组件包</strong></p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">整个<span lang="EN-US">struts</span>大约?span lang="EN-US">15</span>包,q?span lang="EN-US">200</span>个类所l成Q而且数量q在不断的扩展。在此我们不能一一介绍Q只能列丑և个主要的要的介绍一下。下表说明了目前<span lang="EN-US">struts api</span>中基本的几个lg包,包括<span lang="EN-US">action,actions,config,util,taglib,validator</span>。下囑ֈ昄了这几个lg包之间的关系。其?span lang="EN-US">action</span>是整?span lang="EN-US">struts framework</span>的核?span lang="EN-US"><o:p></o:p></span></span> </p> <div align="center"> <table class="MsoNormalTable" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 41.4pt; BORDER-LEFT: medium none; WIDTH: 385pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" width="513" border="1"> <tbody> <tr style="HEIGHT: 7.5pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 7.5pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">org.apache.struts.action</span> </b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">基本上,控制整个<span lang="EN-US">struts framework</span>的运行的核心cR组仉在这个包中,比如我们上面提到的控制器<span lang="EN-US">ActionServlet</span>。已l?span lang="EN-US">Action,ActionForm,ActionMapping</span>{等?span lang="EN-US">struts1.1</span>?span lang="EN-US">1.0</span>多了<span lang="EN-US"> DynaActionForm </span>cR增加了动态扩展生?span lang="EN-US">FormBean</span>功能<span lang="EN-US"><o:p></o:p></span></span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">org.apache.struts.actions</span> </b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">q个包是主要作用是提供客L<span lang="EN-US">http</span>h和业务逻辑处理之间的特定适配器{换功能,?span lang="EN-US">1.0</span>版本中的部分动态增?span lang="EN-US">FromBean</span>的类Q也?span lang="EN-US">struts1.1</span>中被<span lang="EN-US">Action</span>包的<span lang="EN-US">DynaActionForm</span>lg所取代<span lang="EN-US"><o:p></o:p></span></span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">org.apache.struts.config<o:p></o:p></span> </b> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">提供寚w|文?span lang="EN-US">struts-config.xml</span>元素的映。这也是<span lang="EN-US">sturts1.1</span>中新增的功能<span lang="EN-US"><o:p></o:p></span></span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">org.apache.struts.util</span> </b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">Strtuts</span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">Z更好支持<span lang="EN-US">web application</span>的应用,体统了一个些常用服务的支持,比如<span lang="EN-US">Connection Pool</span>?span lang="EN-US">Message Source</span>。详l信息请参?span lang="EN-US"><o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">http://jakarta.apache.org/struts/api/org/apache/struts/util/package-summary.html<o:p></o:p></span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">org.apache.struts.taglib</span> </b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">q不是一个包Q而是是一个客h{的集合。下面包?span lang="EN-US">Bean Tags</span>Q?span lang="EN-US">HTML Tags</span>Q?span lang="EN-US">Logic Tags</span>Q?span lang="EN-US">Nested Tags</span>Q?span lang="EN-US">Template Tags</span>q几个用于构建用L面的标签cR?span lang="EN-US"><o:p></o:p></span></span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">org.apache.struts.validator</span> </b> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> </td> </tr> <tr style="HEIGHT: 15.75pt; mso-yfti-lastrow: yes"> <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 385pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="513"> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> <span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">Struts1.1 framework</span> <span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">中增加了<span lang="EN-US">validator framework</span>Q用于动态的配置<span lang="EN-US">from</span>表单的验证。详l信息请参阅 <span lang="EN-US">http://home.earthlink.net/~dwinterfeldt/<b><o:p></o:p></b></span></span> </p> </td> </tr> </tbody> </table> </div> <p align="center"> <img title="struts基本lg关系? height="256" alt="1.jpg" src="http://www.tkk7.com/images/blogjava_net/kobe09/Framework/Struts/1.jpg" width="358" align="center" border="0" /> </p> <p> <br /> </p> <p> </p> <img src ="http://www.tkk7.com/kobe09/aggbug/50304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kobe09/" target="_blank">氧气中毒</a> 2006-06-04 18:00 <a href="http://www.tkk7.com/kobe09/archive/2006/06/04/50304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://8mav950.com" target="_blank">AV˾þԭ</a>| <a href="http://szmazida.com" target="_blank">츾AVһ˳</a>| <a href="http://5aa6.com" target="_blank">߹ۿ˳Ƶ</a>| <a href="http://fenxue520.com" target="_blank">߿Ƭ˳Ƶ</a>| <a href="http://023npxyy.com" target="_blank">պ޲ƵĻ߹ۿ </a>| <a href="http://whknd.com" target="_blank">ǴýƵѹۿ</a>| <a href="http://liuxilife.com" target="_blank">ɫͼƵ߹ۿ</a>| <a href="http://bjgjjrxy.com" target="_blank">þþ뾫Ʒպ </a>| <a href="http://langse3.com" target="_blank">㽶Ʒ鶹</a>| <a href="http://fenglibin.com" target="_blank">99þù뾫Ʒ</a>| <a href="http://606059.com" target="_blank">Ļһ</a>| <a href="http://gxshenquan.com" target="_blank">ҹ޹Ʒ</a>| <a href="http://dzhyyy.com" target="_blank">þ޹ӰԺ</a>| <a href="http://sdshfengji.com" target="_blank">Aһ</a>| <a href="http://chenglide.com" target="_blank">Ƶһ</a>| <a href="http://xingqiu1.com" target="_blank">þþþѹۿ</a>| <a href="http://dqmovie.com" target="_blank">ѾƷԲ߹ۿͼƬ</a>| <a href="http://sky233.com" target="_blank">AƬƵ߹ۿ</a>| <a href="http://fjwkjx.com" target="_blank">AVרAV</a>| <a href="http://my94ok.com" target="_blank">һþþþþþþ</a>| <a href="http://as5566.com" target="_blank">޾Ʒmv߹ۿ</a>| <a href="http://zz4466.com" target="_blank">AVպƷþþþþ</a>| <a href="http://kdp44.com" target="_blank">˳ӰԺۿ</a>| <a href="http://38miao.com" target="_blank">һѰ</a>| <a href="http://0515zs.com" target="_blank">ëƬƵ</a>| <a href="http://ycjs999.com" target="_blank">AAѹۿ1000Ӱ</a>| <a href="http://lidajc.com" target="_blank">Ƶ߿</a>| <a href="http://bjbanjia01.com" target="_blank">޾ƷƵ</a>| <a href="http://600c28.com" target="_blank">99reȾƷƵ</a>| <a href="http://732r.com" target="_blank">ɫҹƵ˵</a>| <a href="http://chandou8.com" target="_blank">鶹һƷһAVһ</a>| <a href="http://367316.com" target="_blank">ɫҳѹۿ</a>| <a href="http://ww99w.com" target="_blank">Ʒhdѹۿ</a>| <a href="http://hbjpxnyqckj.com" target="_blank">þþWWW˳ɾƷ</a>| <a href="http://xsxdsb.com" target="_blank">ƷۺרĻѲ</a>| <a href="http://woaisouluo.com" target="_blank">һ</a>| <a href="http://wwwtoutoulu.com" target="_blank">ӰԺ</a>| <a href="http://kanzhelu23.com" target="_blank">ۺվ</a>| <a href="http://singbomb.com" target="_blank">޺ϼԭƷ </a>| <a href="http://scjcled.com" target="_blank">**˹ëƬ</a>| <a href="http://583s.com" target="_blank">ƵѲ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>