stripes快速入门.doc_第1页
stripes快速入门.doc_第2页
stripes快速入门.doc_第3页
stripes快速入门.doc_第4页
stripes快速入门.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Stripes 快速入门指南翻译说明:这是Stripes文档中的一篇叫Quick Start Guide的文章,看着顺眼,就翻译过来给大家看一下啦。 译者:lighter, 转载注明出于: Stripes 快速入门指南 tfenne于2006年八月27号作最后编辑 介绍: 这一篇指南编写的目的是为了让你尽可能地以最快的速度把Stripes运行起来.这里面包含了一些关于Stripes有开发Web应用程序时的配置说明,同时也让你快速地搭建第一个Stripes应用程序. 开发环境: Stripes充分利用了Java1.5中一些非常重要的特征,比如Annotations,还有泛型。同样它也很依赖一些Servlet2.4/JSP2.0的特征。所以你需要一个1.5版本的JDK(现在适用于大多数的平台),和一个可以支持Servlet2.4的Servlet容器,例如免费的Tomcat5.x和Caucho最新版本的、非常出色的Resin(对非商业用户免费提供) 这里希望读者有一定的JSP的开发经验,而且能理解一些常用的EL表达式,虽然没有必要去了解过于深入. Stripes配置: Stripes被设计成尽可能地只需要最少的配置文件。为了让其运行,你只需要在web应用程序的web.xml上简单地配置Stripes过滤器和Stripes Dispatcher。一个非常标准的配置文件如下所示: web.xml Java代码 1. 2. 7. 8. 9. StripesFilter 10. StripesFilter 11. net.sourceforge.stripes.controller.StripesFilter 12. 13. 14. 15. StripesFilter 16. *.jsp 17. REQUEST 18. 19. 20. 21. StripesFilter 22. StripesDispatcher 23. REQUEST 24. 25. 26. 27. StripesDispatcher 28. net.sourceforge.stripes.controller.DispatcherServlet 29. 30. 1 31. 32. 33. 34. StripesDispatcher 35. *.action 36. 37. Stripes Filter StripesFilter net.sourceforge.stripes.controller.StripesFilter StripesFilter *.jsp REQUEST StripesFilter StripesDispatcher REQUEST StripesDispatcher net.sourceforge.stripes.controller.DispatcherServlet 1 StripesDispatcher *.action 下一步你必须把stripes.jar放进classpath路径中去,通常放在/WEB-INF/lib目录下。在编译的时候必须依赖Stripes的开发包,在发布和运行的时候,同样也需要复制下面的lib文件放到你的classpath路径中去. 1、commons-logging.jar (1.1) - Apache Commons Logging通常被用来提供一个日志接口, 2、cos.jar - 是com.oreilly.servlets包,Jason Hunter的免费礼物,通常作为form提交、用来实现文件的上传功能。 上面的lib文件已全部在Stripes的分发包里提供好,而且都经过了Stripes的测试。用越新版本的lib包或许也会工作正常,但这可能偏离我们想达到的目的。 另外,可以看到Stripes的日志输出,这一点对我们非常有帮助。为了达到目的,你须提供一个给Log4J的工作环境,或者对其他的日志公用包供给一个适用环境。Log4J的jar文件,log4j-1.2.9.jar,是Stripes是一个分发包。一个Commons Logging样本和Log4J配置文件如下所示: perties Java代码 1. mons.logging.Log=mons.logging.impl.Log4JLmons.logging.Log=mons.logging.impl.Log4JLogger perties Java代码 1. #directlogmessagestostdout# 2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3. log4j.appender.stdout.Target=System.out 4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5. log4j.appender.stdout.layout.ConversionPattern=%dABSOLUTE%5p%c1:%L-%m%n 6. #directmessagestofile# 7. log4j.appender.file=org.apache.log4j.FileAppender 8. log4j.appender.file.File=/tmp/stripes.log 9. log4j.appender.file.layout=org.apache.log4j.PatternLayout 10. log4j.appender.file.layout.ConversionPattern=%dABSOLUTE%5p%c1:%L-%m%n 11. #setloglevels-formoreverboseloggingchangeinfotodebug# 12. log4j.rootLogger=INFO,stdout,file 13. .sourceforge.stripes=DEBUG# direct log messages to stdout # log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%dABSOLUTE %5p %c1:%L - %m%n # direct messages to file # log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=/tmp/stripes.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%dABSOLUTE %5p %c1:%L - %m%n # set log levels - for more verbose logging change info to debug # log4j.rootLogger=INFO, stdout, file .sourceforge.stripes=DEBUG 日志配置文件需要放在classpath路径中去,例如在/WEB-INF/classes 最后一件需要放置的是StripesRperties文件;你现在可以复制到/WEB-INF/classes中去。StripesRperties用来(默认)查找显示Stripes验证出错时提示的错误信息,同样这必须放在Classpath路径中。举一个例子的片段如下所如: 例如 StripesRperties Java代码 1. #ValidationerrormessagesusedbyStripesbuiltintypeconverters 2. converter.number.invalidNumber=Thevalue(1)enteredinfield0mustbeavalidnumber 3. converter.byte.outOfRange=Thevalue(1)enteredinfield0wasoutoftherange2to3 4. converter.short.outOfRange=Thevalue(1)enteredinfield0wasoutoftherange2to3 5. eger.outOfRange=Thevalue(1)enteredinfield0wasoutoftherange2to3 6. converter.float.outOfRange=Thevalue(1)enteredinfield0wasoutoftherange2to3 7. converter.enum.notAnEnumeratedValue=Thevalue1isnotavalidvalueforfield0 8. converter.date.invalidDate=Thevalue(1)enteredinfield0mustbeavaliddate 9. converter.email.invalidEmail=Thevalue(1)enteredisnotavalidemailaddress 10. .# Validation error messages used by Stripes built in type converters converter.number.invalidNumber=The value (1) entered in field0must be a valid number converter.byte.outOfRange=The value (1) entered in field0was out of the range2to3 converter.short.outOfRange=The value (1) entered in field 0was out of the range2to3 eger.outOfRange=The value (1) entered in field 0was out of the range2to3 converter.float.outOfRange=The value (1) entered in field 0was out of the range2to3 converter.enum.notAnEnumeratedValue=The value 1 is not a valid value for field0 converter.date.invalidDate=The value (1) entered in field 0 must be a valid date converter.email.invalidEmail=The value (1)entered is not a valid email address . 我的第一个Stripe: 作为第一个应用程序,我们会建立一个简单的页面,用来计算两个数,把它们加起来,在后面的描述中,可能添加其他的一些操作。首先,建立一个JSP文件用来显示界面。如下所示是一个简单的JSP页面代码。在web应用程序的根目录中,把以下文件放进一个名叫quickstart的目录下。 JSP文件:index.jsp Java代码 1. 2. 3. 4. 5. 6. MyFirstStripe 7. 8. StripesCalculator 9. 10. Hi,ImtheStripesCalculator.Icanonlydoaddition.Maybe,someday,aniceprogrammer 11. willcomealongandteachmehowtodootherthings? 12. 13. 14. 15. 16. Number1: 17. 18. 19. 20. Number2: 21. 22. 23. 24. 25. 26. 27. 28. 29. Result: 30. $actionBean.result 31. 32. 33. 34. 35. My First Stripe Stripes Calculator Hi, Im the Stripes Calculator. I can only do addition. Maybe, some day, a nice programmer will come along and teach me how to do other things? Number 1: Number 2: Result: $actionBean.result 在上面的页面中,第一个感兴趣的事物在第二行(标签% taglib .导入在这一个页面所需要的Stripes Tag Library。然后,再往下面几行,有一行显示: Java代码 1. 展开讨论一下stripes:form标签。Stripes form标签在背地里地为我们做了一些事情、但在这里暂不深入讨论,它最终解析生成一组规则的html form标签。同时focus=告诉Stripes自动地把焦点设置在第一个可见的域field(或者在发生错误的时候指向第一个出错的域) 下一步,我们再看两个标签,如下所示 Java代码 1. 这一个标签等同于,但可以提供prepopulating,re-populating等功能,同时在验证出错的时候可以改变显示的信息。如果字段numberOne的名字与ActionBean里面的属性名相对应,ActionBean就会接受其请求。 为了替代,我们可以用: Java代码 1. Stripes的submit标签有一个附加的实用功能就是在按钮上设置字符串的国际化显示,但我们可以做得更多,不止只有这一种需求,所以submit标签简单地运用了其值的属性。submit按钮的名字,addition,非常重要一点就是,当接受请求的时候会调用ActionBean里面的与之相绑定的方法。 最后,如果ActionBean里面存在result属性,这一条简单的EL表达式就把其结果打印出来 Java代码 1. $actionBean.result$actionBean.result我们现在准备演示一下页面!这时还不能提交页面, 因ActionBean还没有编写完毕(这不是简单地只用form标签做演示,我们现在也不会提交这一个表单)。 写完JSP文件后,看下面的Calculator例子的显示页面: img/upload/picture/pic/1629/ccd5db4b-b32c-4006-8562-e9b02a114586.png /img ActionBean类: ActionBean是一个接收请求提交数据的对象,处理用户的输入信息。它定义了表单form的属性,同时也进行逻辑处理。与Struts相比,ActionBean就像把ActionForm和Action结合在同一个类中。 这里需要提出的一点就是不需要任何额外的配置就可以让Stripes知道关于ActionBean在应用程序里的执行情况,也不用把JSP页面与ActionBean绑定在一起。所有必要的信息都在ActionBean自身。现在就让我们看一下简单的接受计算请求AcionBean: Java代码 1. packagenet.sourceforge.stripes.examples.quickstart; 2. 3. importnet.sourceforge.stripes.action.DefaultHandler; 4. importnet.sourceforge.stripes.action.Resolution; 5. importnet.sourceforge.stripes.action.ForwardResolution; 6. importnet.sourceforge.stripes.action.ActionBean; 7. importnet.sourceforge.stripes.action.ActionBeanContext; 8. 9. /* 10. *Averysimplecalculatoraction. 11. *authorTimFennell 12. */ 13. publicclassCalculatorActionBeanimplementsActionBean 14. privateActionBeanContextcontext; 15. privatedoublenumberOne; 16. privatedoublenumberTwo; 17. privatedoubleresult; 18. 19. publicActionBeanContextgetContext()returncontext; 20. publicvoidsetContext(ActionBeanContextcontext)this.context=context; 21. 22. publicdoublegetNumberOne()returnnumberOne; 23. publicvoidsetNumberOne(doublenumberOne)this.numberOne=numberOne; 24. 25. publicdoublegetNumberTwo()returnnumberTwo; 26. publicvoidsetNumberTwo(doublenumberTwo)this.numberTwo=numberTwo; 27. 28. publicdoublegetResult()returnresult; 29. publicvoidsetResult(doubleresult)this.result=result; 30. 31. DefaultHandler 32. publicResolutionaddition() 33. result=getNumberOne()+getNumberTwo(); 34. returnnewForwardResolution(/quickstart/index.jsp); 35. 36. package net.sourceforge.stripes.examples.quickstart; import net.sourceforge.stripes.action.DefaultHandler; import net.sourceforge.stripes.action.Resolution; import net.sourceforge.stripes.action.ForwardResolution; import net.sourceforge.stripes.action.ActionBean; import net.sourceforge.stripes.action.ActionBeanContext; /* * A very simple calculator action. * author Tim Fennell */ public class CalculatorActionBean implements ActionBean private ActionBeanContext context; private double numberOne; private double numberTwo; private double result; public ActionBeanContext getContext() return context; public void setContext(ActionBeanContext context) this.context = context; public double getNumberOne() return numberOne; public void setNumberOne(double numberOne) this.numberOne = numberOne; public double getNumberTwo() return numberTwo; public void setNumberTwo(double numberTwo) this.numberTwo = numberTwo; public double getResult() return result; public void setResult(double result) this.result = result; DefaultHandler public Resolution addition() result = getNumberOne() + getNumberTwo(); return new ForwardResolution(/quickstart/index.jsp); 在这里最明显的疑问是,这一个类是怎样绑定到这个URL路径中的。Stripes默认的设置会检查ActionBeans,同时依赖于它们的类与包名决定其URL路径。Stripes可以改变类名到URL路径的映射: 1、删除任何出现在包名路径中web,www,stripes和action之前的名称 2、如果在包名路径出现有Action和Bean(或者ActionBean),则把其删除 3、在包名的最后加上.action 根据上面的规则,net.sourceforge.stripes.examples.quickstart.CalculatorActionBean包变成: examples.quickstart.CalculatorActionBean examples.quickstart.Calculator /examples/quickstart/Calculator.action 从完整的类名中产生的URL路径与页面中的stripes:form标签特定的动作action相对应。这两种形式都与web应用程序根目录相关联的。你可以通过JavaDoc文档查找NameBasedActionResolver的相关资料,了解这是怎样处理的(和怎样改变其约定创建不同的URL路径)。 重新设置URL约定规则: 其URL路径是由Stripes默认产生的。重置ActionBean绑定设置的URL路径,你需要做的是在该类上用一个UrlBinding元数据来注解说明。例如,我们可以这样写UrlBinding(/qs/calc) public class CalculatorActionBean . 下一步,该类声明的特征: Java代码 1. publicclassCalculatorActionBeanimplementsActionBeanpublic class CalculatorActionBean implements ActionBeanActionBean是一个接口,而不是一个基本类。因此,你创建的ActionBeans可以继承任何你喜欢的类。ActionBean接口定义两个方法,我们可以看到在该类中: Java代码 1. publicActionBeanContextgetContext()returncontext; 2. publicvoidsetContext(ActionBeanContextcontext)this.context=context;public ActionBeanContext getContext() return context; public void setContext(ActionBeanContext context) this.context = context; 这些方法使得ActionBean有权访问使用ActionBeanContext,而ActionBeanContext提供了对HttpServletRequest和HttpServletResponse的访问使用当你需要它们的时候(希望不会太频繁)。同样,也可访问当前关于request请求的信息(例如,错误信息)。 那一些在ActionBean定义的关于属性的setter和getter方法,并不会令我们感兴趣,但在这应该指明一下的是他们是必须存在的(除非其properties被设置为public型的,但不鼓励这样做)。Stripes是通过标准的JavaBean的getter和setter方法来访问ActionBeans里的值的,如果他们不存在就会出现错误信息。在ActionBean的三个属性(和其成对getter/setter方法)与JSP页面的名称是相对应的。 看下一步,真正吸引目光的在: Java代码 1. DefaultHandler2. publicResolutionaddition() 3. result=numberOne+numberTwo; 4. returnnewForwardResolution(/quickstart/index.jsp); 5. DefaultHandlerpublic Resolution addition() result = numberOne + numberTwo; return new ForwardResolution(/quickstart/index.jsp);因为这一个方法被设置为public型且返回一个Resoulution,Stripes 会默认地把它当作一个处理的方法。当用户点击提交其名字为addition的按钮或自定的图像按钮,同时就有请求发送到CalculatorActionBean,然后该方法就会被调用。就像上面的URL描述类似,可以用HandlesEvent元数据来重置事件触发的时候该由哪一个方法来处理。 如果不清楚用户会点击其中的哪一个按钮(经常的情况是用户是直接敲回车键,而不是点击按钮),用DefaultHandler元数据来告诉Stripes在默认的情况下该方法会被调用。 你可能已经意识到在ActionBean接口里面没有execute(),do()或者其他的泛型的方法。所有类似execute()方式可以执行的方法都是正规的推荐使用的java方法(public类型,非抽象方法,返回Resolution),或者其他已经被注解过可以让Stripes知道其存在的方法。Stripes把这一些方法当作处理的Hanlder方法,一旦它们在处理浏览器发送过来的事件,Handler方法通常就会返回一个Resolution,来用告诉Stripes下一步该怎样做(它们可能返回任何对象,但如果返回的不是一个 Re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论