您所在的位置: 首页>>开发>>JAVA>>

基于Stripes框架进行Java Web开发(4)

http://developer.51cto.com  2007-03-23 18:36  Mark Eagle/朱先忠编译  51CTO.com  我要评论(0)
  • 摘要:Stripes框架是一个新型Java web 2.0开发框架,与JSF等新型框架可形成比较(类似于STRUTS之于SPRING)。本文是一篇简单案例分析文章,通过一个具体例子来分析新型Stripes Web开发框架如何区别于其它框架而形成自己的优势。
  • 标签:Stripes  Web  框架  Java

StripesDispatcher的一个任务就是解析一个到一个Stripes ActionBean类的URL。当用户调用URL http://host/uri/example/HelloWorld.action时,该Stripes调度器servlet将认真检查此URL绑定映射以发现com.myco.web.stripes.action.example.HelloWorldAction类,并且创建它的一个实例。最后,调用index方法,因为它被定义为(注解为)缺省的处理器并且该URL中没有指定一个事件。

如果我们想直接执行HelloWorldAction类中的hello方法会怎么样呢?如果这样的话,URL中需要包括事件名—作为一个请求参数形式提供:http://host/uri/example/HelloWorld.action?hello=&firstName=Mark&age=13

【注意】在此,我们并没有为该hello请求参数指定一个值。在本文示例中,StripesDispatcher负责识别匹配hello请求参数名和一个方法名(该方法名位于HelloWorldAction类中,并且方法签名为“public Resolution hello()”)。为了提高性能,方法名在初始化时通过一个单独的Map进行缓冲。

现在,我们已经了解了Stripes的基本知识以及如何创建简单的Action。其实,还有许多关于此框架操作的细节。通过在web.xml中进行一些初始的配置,我们可以成功地避免再引入一个单独的XML配置文件来绑定我们的描述组件。这是很重要的,因为:第一,你可以查找一个URL并且立即知道要查找什么类—如果你需要进行任何修改的话;第二,当配置文件变得相当巨大和不可管理时,我们不需要使用一个单独的工具来帮助我们。通过消除了这个配置文件,我们不必再浪费大量的元数据来填充框架。最后,我们不需要继续维护一个单独的文件来描述我们的组件彼此之间的关系。

五、 基于Prototype JavaScript库集成Ajax技术

从现在开始,让我们来探讨Stripes是如何处理Ajax相关问题的。我们将使用一个更新适当内容的Ajax调用来修改上面的Hello世界示例。这个示例将展示如何使用Prototype以便为Stripes行为提供Ajax调用。这个示例的完整源码可以从本文提供的下载源码中获取。首先,让我们修改该Hello.jsp以便包括对Prototype JavaScript库的参考。我们还将添加一个相应于该Ajax调用的JavaScript函数,并且把原先的提交按钮改变为绑定了一个onclick事件的新按钮:

<%@ taglib prefix="stripes"
uri="http://stripes.sourceforge.net/stripes.tld" %>
<html>
<head>
<title>Stripes Hello World</title>
<script
src="${pageContext.request.contextPath}/js/prototype.js"
type="text/javascript"></script>
<script type="text/javascript">
function sayHelloAjax() {
var myAjax = new Ajax.Updater('hello',
"<stripes:url
beanclass="com.
myco.
web.
stripes.
action.
example.
HelloWorldAction"
event="sayHelloAjax"/>",
{
method: 'get',
parameters: Form.serialize('helloForm')
});
}
</script>
</head>
<body>
<stripes:errors/>
<stripes:form
beanclass="com.
myco.
web.
stripes.
action.
example.
HelloWorldAction"
id="helloForm">
Say hello to: <br>
First name: <stripes:text
name="person.firstName"/><br>
Age:<stripes:text name="person.age"/><br>
<stripes:button
name="helloAjax"
value="Say Hello"
onclick="sayHelloAjax()"/>
<div id="hello"></div>
</stripes:form>
</body>
</html>

在此,stripes:button拥有一个onclick事件,该事件将调用HelloWorldAction类中的sayHelloAjax方法并且把相应的结果返回到称为hello的div标签中。接下来,我们来看一下要在HelloWorldAction类中引入的另一个新的方法:

public Resolution sayHelloAjax(){
return new ForwardResolution("SayHelloAjax.jsp"); 
}

这个方法没有做多少工作,因为其涉及的前后绑定工作都由Stripes负责实现了。因此,这个方法的唯一责任就是把当前控制转发到一个称为SayHelloAjax.jsp的页面。下面是此SayHelloAjax.jsp的内容:

<h2>Hello ${actionBean.person.firstName} your age is ${actionBean.person.age}!</h2>

六、与Spring框架的集成

Stripes还提供了与Spring框架的内置集成。你可以把Spring beans或服务自动地注入到你的行为中。在Stripes框架中,实现这一点并不要求外部配置—除了你的Spring上下文配置之外。例如,如果我们在我们的Spring配置中存在一个如下所定义的bean:

<bean id="personService" parent="abstractTxDefinition">
<property name="target">
<bean class="com.myco.service.impl.PersonServiceImpl"/>
</property>
</bean>

那么,为了实现把此personService注入到一个Stripes行为中,需要添加一个属性和匹配该Spring bean名字的setter。Stripes提供了@SpringBean注解来定位合适的Spring bean以注入到行为类中。下面是一个需要包括到Stripes行为中的示例:

private PersonService personService;
@SpringBean
public void setBlogService(BlogService blogService) {
this.blogService = blogService;
}

请注意:仅靠本文是无法涉及Stripes所有高级特征的;然而,Stripes参考文档中已经提供了比较综合性的相应资料。Stripes框架中还包括一个类似于Tiles的省略了外部配置的布局管理器。另外,Stripes框架中引入的拦截器(interceptor)还可以用于跨生命周期事件,文件上传,以及更多的内容上。

七、结论

从本文中我们可以看到,Stripes的确是一种强有力然而却十分简单的Java web框架。这个框架充分利用了Java 5中注解和泛型等特征,从而使Java开发者不必维护外部配置文件而提高了生产效率。

【责任编辑:火凤凰 TEL:(010)68476606-8007】


共4页: 上一页 [1] [2] [3] 4
【内容导航】
企业级Web2.0 你准备好了么?
WebSphere 实现SOA的利器
Web安全云时代
企业Web安全威胁在线评估系统
Java实用开发全集
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有