岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> J2EE >> Servlet/Jsp >> Java正文
web开发框架——JSF开发实战一(图)
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 19:32:15

  JSF将是J2EE5.0中所包含的web开发框架,这应该是第一个成为jcp标准,并且随j2eesdk一起发布的web框架,可以看出sun对它的期望很高。JSF最大的竞争对手是tapestry,是apache的产品,但是apache又弄出了个myfaces,是对jsf标准的一个实现。也许你也和我一样,在jsf和tapestry之间犹豫很久,将来从apache的态度上应该可以看出二者的走向。在tss上有一篇比较jsf 1.0与tapestry 3.0的文章,内容很扎实到位:http://www.theserverside.com/articles/article.tss?l=JSFTapestry
  
  JSF的竞争对手不是struts/webwork之流,它们基本上已经是不同阶段上的东西了,放在一起比较意义不大。
  
  JSF的开发流程和asp.net中所倡导的code behind方式很相似,核心是事件驱动,组件和标签的封装程度非常高,很多典型应用已经不需要开发者去处理http。页面操作会被自动映射到对应的java bean中,后台逻辑只需要同java bean发生交互。整个过程是通过“依赖注入(DI)”来实现的,看来这是目前解偶合的最佳途径啊,spring的影响真是深远。不过正式因为jsf采用了这样的方式,导致开发工作和以前的jsp/struts等都有非常大的不同,需要一定的时间去学习。学习之前建议先对依赖注入有比较清楚的认识,可以参考我的learn Spring in spring系列的第一篇。
  
  本系列将以两个例子来讲解jsf的基本开发,第一个例子当然是hello world。目前可用的jsf ide不多,ibm要到06年才能放出支持jsf的wtp版本。所以我们的例子基本以手写为主,这样也能让我们有更清楚的认识,同时推荐目前最好的jsf开发工具:myeclipse 4.0 GA。后面的例子将会有jsf和hibernate的内容,它都能给予很好的支持。由于myeclipse并不免费,所以我们除了讲解在ide中如何操作外,还会叙述手动操作的具体内容,以免过于依赖开发工具。用什么服务器都可以,这里采用了jboss 4.0.2。如果你的服务器是高版本的tomcat(5.5+),那么必须要删除它自带的一些包才能很好的支持jsf,具体细节请查看它的文档。
  
  请自行下载jsf ri和JSTL 1.1。
  
  废话少说,开始了。
  
  在myeclipse 4.0GA中新建一个web项目,命名为hello,为项目增加对JSTL的支持:
  
 

  在JSTL的版本中选择1.1。
  
  该操作实际上是把jstl.jar和standard.jar加到工程中。
  
  采用类似的操作为项目添加对jsf的支持:myeclipse?add jsf capabilities
  
  如图:
  
 

  其中的jsf implementation是选择使用哪中JSF实现,我们采用的是sun的jsf ri
  
  JSF config path是配置文件的位置,保持不变
  
  URL pattern是jsf servlet的映射方式,有两种选择,具体细节后面说明。
  
  以上操作上是为项目加入了jsf需要的jar和tld文件,并且创建了一个faces-config.xml的配置文件。涉及到的jar有:commons-beanutils.jar  commons-collections.jar    commons-digester.jar  commons-logging.jar  jsf-api.jar    jsf-impl.jar
  
  涉及到了jsf中所有的tld文件。
  
  当前的faces-config.xml文件的内容是:
  
  
  
  
  
  

  
  环境已经建立好了,现在我们要建立一个程序,它的功能是让用户在表单中输入名字,提交后系统会返回一个问候。使用jsf的以后好处是,开发人员会很自然的把mvc各层分开,不会像使用strtus那样别扭,这一点在后面的开发中感觉得到。
  
  首先开发model层,它是个很简单的bean:
  package org.bromon.jsf.model.hello;
  
  public class SayHello {
  public String say(String name)
  {
  return "你好,"+name;
  }
  }
  
  在model层中你可以随意的实现业务的数据逻辑,不需要与web层有任何的关系。
  
  下面开发控制层,它负责存取web层的数据,并且调用model层的逻辑:
  /**
  * jsf的控制层方法
  * @author bromon
  */
  package org.bromon.jsf.control.hello;
  
  import org.bromon.jsf.model.hello.*;
  
  public class HelloDelegater {
  
  //------属性---------
  private String name;//表单中的文本框数据会传到这里
  private String result;//web页会从这里取得运行结果
  private SayHello sayHello;//model层的对象,并不事例化,由系统注入
  
  //-----set/get--------
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public SayHello getSayHello() {
  return sayHello;
  }
  public void setSayHello(SayHello sayHello) {
  this.sayHello = sayHello;
  }
  public String getResult() {
  return result;
  }
  public void setResult(String result) {
  this.result = result;
  }
  
  //-----逻辑方法---------
  public String say()
  {
  this.setResult(sayHello.say(this.getName()));
  return "ok";
  }
 

[1] [2] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    传世私服 传奇世界私服 天龙八部私服 bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365