利用Stripes实现Java Web开发
来源:网络 更新时间:2014-12-16
Stripes是一个以让程序员的Web开发简单而高效为准则来设计的基于动作的开源Javaweb框架。本文将介绍Stripes与其它如Struts之类基于动作的框架的区别和其提供的一些存在于RubyonRails之中的简单性。
Stripes是一个以让程序员的web开发简单而高效为准则来设计的基于动作的开源Javaweb框架。传统的Javaweb开发着眼于借去耦(Decoupling)来实现其灵活性,但导致多个的配置文件,额外的对象,和其他资源的分散。这些困难造成相当多的程序员的更高的学习时间和低下的效率。其结果是有些Java程序员被一些非Java的框架所吸引去了:RubyonRails或者Django。一些Javaweb框架,如Stripes,正在开始从这些非Java框架中汲取其成功经验:简单而高效的开发。本文将介绍Stripes与其它如Struts之类基于动作的框架的区别和其提供的一些存在于RubyonRails之中的简单性。
图1是典型的用Stripes写的应用程序中的正常事件流程和组件。
图1典型Stripes流程
如你所见,其流程基本上就是一个MVC框架。Stripes和其他的基于动作的框架的一个主要的区别是没有一个外部的配置文件。我们随后将看到,Stripes用annotation和约定而非配置来提高产出和减少杂乱。
编写你的第一个Stripe动作(Action)
让我们现在就开始通过创建HelloWorld例程来了解Stripes框架和理解其运作。HelloWorldAction类将提示用户输入姓氏和名字然后在另一个View里面显示,首先我们来编写controller类。
publicclassHelloWorldActionimplementsActionBean
{
@ValidateNestedProperties(
{
@Validate(field="firstName",required=true,on={"hello"}),
@Validate(field="age",required=true,minvalue=13,on={"hello"})
})
privatePersonperson;
privateActionBeanContextcontext;
@DefaultHandlerpublicResolutionindex()
{
returnnewForwardResolution("Hello.JSP");
}
publicResolutionhello()
{
returnnewForwardResolution("SayHello.jsp");
}
publicvoidsetPerson(Stringperson){this.person=person;}
publicStringgetPerson(){returnperson;}
publicvoidsetContext(ActionBeanContextc){this.context=c;}
publicActionBeanContextgetContext(){returncontext;}}
Controller类是一个实现了Stripes特有接口ActionBean的POJO(PlainOldJavaObject,译注:读破粥)。所有的Stripes动作类都要实现这一接口以让StripesDispatcherServlet在运行服务时为其注入一个ActionBeanContext对象。ActionBeanContext对象可以让你存取的对象如request、response、和servletcontext等servletAPI。大多数时候在Stripes应用中是不用读取这些底层API对象的。
ActionBeanContext类还提供当前动作的状态并可以添加信息消息和错误消息到当前动作中。ActionBeanContext的变量和其读写方法可以放在一个基类里面,因为所有的Stripes动作都要实现之。
Controller类的其他部分对于任何Java程序员来说都是很面熟的。有一个Person对象和其读写方法是用来读写用户的姓名给view的。虽然这仅仅是一个简单的嵌套对象,Stripes可以通过Java集合、泛型支持、和下标化的属性来实现更复杂完善的数据捆绑。因为Stripes可以处理复杂数据捆绑,你的领域对象(DomainObject)可以在其他需要它们的层重用。例如:通过Stripes你可以很容易的收集一个领域对象的信息,然后用其他的POJO框架,如Hibernate或者EJB3来对其进行持久化。