JSF入门

1. 简介

  • JSF技术是Sun公司在2004年发布的用于开发Web应用的框架。当前版本是2.2,由JSR344规范定义。它是Java EE 7推荐的Web标准框架。Mojarra(https://javaserverfaces.java.net/)是Oracle官方采用的JSF的参考实现,其他的参考实现还有Apache基金的MyFaces(http://http://myfaces.apache.org/)。
  • 受到Sturts、Tapestry等开源框架的影响,JSF是采用了MVC架构。
  • 受到Swing组件模型的启发,JSF使得开发人员从组件、事件、模型的角度开发web应用,而不用再管http请求和响应等背后的事情。

2. Hello JSF

  • 环境:JDK7 or JDK8 + Netbeans 8 + Glassfish 4
  • 开发过程:
    • 新建Java Web项目,选择Web应用程序
    • 输入项目名称hello-jsf
    • 修改上下文路径为hellojsf
    • 选择JavaServer Faces框架,然后点击下面的配置标签,确认使用的页面语言为Facelets
    • 点击完成
    • 右击hello-jsf项目,选择运行,Netbeans会自动启动Glassfish服务器并部署项目,启动完毕后会自动打开浏览器,并显示Hello from Facelets,该页面的地址为localhost:8080/hellojsf
  • 添加功能
    • 将index.xhtml中的Hello from Facelets修改为Hello #{user.name}
    • 创建User类,代码如下:
    • package teaching.jsf;
      
      import javax.annotation.PreDestroy;
      import javax.enterprise.context.RequestScoped;
      import javax.inject.Named;
      
      @Named //等价于@Named("user")
      @RequestScoped
      public class User {
          private String name = "JSF";
      
          public String getName() {
              return name;
          }
      }

       

    •  保存代码后,Glassfish会对项目进行增量部署,或者你也可以再次运行项目。

    • 打开浏览器,输入localhost:8080/hellojsf,你将可以看到:Hello JSF
  • 代码解释
    • #{user.name}是一个EL表达式,用于或取user bean的name属性。
    • User类是一个CDI bean,它具备了CDI bean的一些特征:
      • Name为user,用来匹配页面中出现的EL表达式,如#{user.name}。默认情况下,Name为bean类的首字母小写后对应的名字,也可以通过@Named("myUser")来指定,这样页面中的EL表达式就要写成#{myUser.name}。
      • Scope为RequestScoped,表示服务器端的Web容器会在接收到http请求后,根据#{user.name}创建一个User实例,获取其name属性的值,生成html页面并发出http响应,然后销毁该user实例。
  • 项目配置文件
    • web.xml: 此项目的部署文件。为了使用JSF,必须声明一个类型为javax.faces.webapp.FacesServlet的Servlet,具体代码请参见web.xml。
      • 注意Faces Servlet的url-pattern为/faces/*,这样FacesServlet只接收来自匹配/faces/*的页面请求,也可以替换为*.xhtml、*.jsf或其他模式,但不能为/*或*。另外,faces只是个前缀,并不是物理文件夹。例如,在访问根据目录下的index.xhtml页面时,其对应的url为http://.../hellojsf/faces/index.xhtml,而不是http://.../hellojsf/index.xhtml。
      • 在web.xml中,还可以指定一个PROJECT_STAGE参数,表示你当前项目的状态。如果为Development,当出现错误时,JSF为显示更加详细的调试信息。当项目真正部署时,可以将此参数改为Production。
    • glassfish-web.xml: 定义与应用服务器相关的一些参数。在本例中,我们通过<context-root>指定项目根目录的名称。此文件由Netbeans自动生成,一般情况下不用修改。

3. 总结

  • 通过例1,我们可以知道JSF的工作原理:
    • 在服务器启动时,会启动一个Faces Servlet用来拦截用户请求。
    • 当我们请求index.xhtml页面时,相应的Http请求就会被FacesServlet所拦截,它会对此请求进行若干处理,其中一步就是创建一个User实例,并获取其name属性的值。处理结束后,生成对应的html页面,返回给客户端。然后销毁此User实例,因为其Scope为RequestScoped。当收到Http请求时被创建,当发送Http响应后被销毁,这就是User对象的生命周期。
    • 客户端(浏览器)接受由服务器端返回的Http响应并显示。
  • JSF是一个采用MVC架构的框架。在例1中,index.xhtml充当V的角色,FacesServlet充当C的角色,而User则充当M的角色。这三种角色划分得非常清楚,没有一点耦合。

 

JSF入门,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。