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的角色。这三种角色划分得非常清楚,没有一点耦合。

 

转载于:https://www.cnblogs.com/tcurjgc/p/JSF-intro-1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nyist 488 素数环

有一个整数n&#xff0c;把从1到n的数字无重复的排列成环&#xff0c;且使每相邻两个数&#xff08;包括首尾&#xff09;的和都为素数&#xff0c;称为素数环。 为了简便起见&#xff0c;我们规定每个素数环都从1开始。例如&#xff0c;下图就是6的一个素数环。 这题在进行判断…

Android System分区大小异常

平台&#xff1a;Freescale &#xff0f; Android 4.2.2 问题描述&#xff1a; 用 df 命令&#xff0c;看到/system分区大小275M。 用 busybox fdisk -l /dev/block/mmcblk0p5&#xff0c;看到 536M。 Freescale的刷机工具是Mfgtool&#xff0c;分区的动作在mksdcard-android.s…

python数据库连接池使用

在转载|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0这一篇中&#xff0c;我使用了方法一。接下来试试方法三&#xff0c;方法三和方法二其实意义差不多&#xff0c;但是对于数据库的连接并不是交由程序员管理而是交由连接池管理了&#xff0…

.Net入门-部署问题

学习一门新的语言难免会遇到各种各样的问题&#xff0c;总结一下。 测试环境&#xff1a;windows2008serverIIS7 开发环境: vs2010 问题1&#xff1a;"Unrecognized attribute targetFramework. Note that attribute names are case-sensitive. " 分析&#xff1a; 开…

pymysql.err.OperationalError: (1203, “User root already has more than ‘max_user_connections‘ active

max_connections 是指MySQL服务器的最大连接数。即所有用户最大连接数的和。 max_user_connections 是指MySQL中单个用户的最大连接数。 这里说明当前用户的连接数大于了单个用户的最大连接数&#xff0c;需要扩大连接数&#xff1a; mysql> show variables like %connect%…

北京行——JSP入门与Servlet精通

Servlet技术 用来动态生成 网页数据资源Servlet生成HTML 页面数据时&#xff0c;所有内容都是通过 response.getWriter response.getOutputStream 向浏览器输出的 <html> <head> </head> <body> Hello </body></html> 用Servlet 输出流打印…

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

可以参考一波&#xff1a;https://stackoverflow.com/questions/16573332/jsondecodeerror-expecting-value-line-1-column-1-char-0 1、json格式不对引起的错误 加上if json_rep.content:判空操作 json_rep requests.post(url monitor_url, headers monitor_header,json …

WINDOWS系统Eclipse+NDK+Android + OpenCv

WINDOWS系统EclipseNDKAndroid OpenCv 参考文档博客 1 NDK环境搭建 http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html 2 官方文档 Android.mk与Application.mk如何编写&#xff0c;OpenCV库如何调用 http://docs.opencv.org/trunk/doc/tutorials/introduction…

ural 1910. Titan Ruins: Hidden Entrance(Titan Ruins系列题目)

这是Titan Ruins系列第一道题&#xff0c;以后慢慢更新。 赤裸裸滴阅读理解题&#xff0c;大意就是找到三个连在一起的数&#xff0c;使其之和最大&#xff0c;输出的第一个数是这三个数的和&#xff0c;第二个数是中间那个数所在的位置。水题一道&#xff0c;很简单。 1 #incl…

python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host=‘‘, port=80): Max retries e

对于问题&#xff1a;python OSError: [Errno 24] Too many open files 原因:超出了进程同一时间最多可开启的文件数. 解决方案P: 使用ulimit -n查看进程同一时间最多可开启的文件数 mac默认是256&#xff0c;linux是1024 修改 sudo vim /etc/security/limits.conf 这个文件的最…

Android 之视频监控

Android 视频监控已经有示例了&#xff0c;如http://www.open-open.com/lib/view/open1346400423609.html完全可以实现简单的监控功能。但是&#xff0c;如果想要在手机上监控另外一个手机就需要做一些改动了。 其中&#xff0c;手机A实现的功能和上文中的一样&#xff0c;主要…

Max retries exceeded with url 解决方案

目录问题解决方案keep alive 与close使用场景问题解决方案 在上一篇问题解决中&#xff1a;python OSError: [Errno 24] Too many open files | HTTPConnectionPool(host‘‘, port80): Max retries e 有提到修改本地进程最大文件数来避免Max retries exceeded with url 报错&…

正确理解JavaScript

过去几年我注意到技术圈一个很奇怪的现象&#xff0c;有太多程序员将那些他们只是有过非常浅显的了解&#xff0c; 但其实根本就不懂的技术写到他们的简历中&#xff0c;这个现象几乎每种语言都有&#xff0c;但这其中最严重的就要数javascript了。 你不知道你不懂 出现这种状况…

医疗机构远程视频监控集中管理,贝锐蒲公英提供一站式解决方案

上海某企业专业致力于医疗软件、家居智能化研发、设计、销售、集成及实施&#xff0c;企业主营业务之一为医疗软件&#xff0c;涉及PACS/RIS/WEB/HIS、示教系统等方面的医院信息化建设。 在实际应用、部署过程中&#xff0c;需要实现各地区分院与总院间的数据库互相访问、视频数…

py脚本:linux系统下定时清理文件

linux清空文件内容的三种方法&#xff1a; 1.使用vi/vim命令打开文件后&#xff0c;输入"%d"清空&#xff0c;后保存即可。但当文件内容较大时&#xff0c;处理较慢&#xff0c;命令如下&#xff1a; vim file_name :%d :wq2.使用cat命令情况&#xff0c;命令如下&a…

Process类:启动和停止本地系统进程

Process.Start 方法 (String, String) 通过指定应用程序的名称和一组命令行参数来启动一个进程资源。&#xff08;并将该资源与新的 Process 组件相关联&#xff09; 如果没有启动资源&#xff0c;则返回null Process.Start("d:\\0.jpg"); Process.StartInfo 属性 获…

NYOJ2括号配对问题

括号配对是最基本的栈的问题&#xff0c;它是栈入门的经典题目&#xff0c;思路是&#xff0c;如果是左括号直接进栈&#xff0c;如果是右括号&#xff0c;这时就要比较栈顶的元素与他是否匹配&#xff0c;如果匹配则出栈&#xff0c;否则进栈&#xff0c;下面是代码的实现&…

SVC编码简单了解

基本概念 可伸缩视频编码 SVC&#xff08;Scalable Video Coding&#xff09; 作为 H.264 标准的一个扩展,可用于生成不同帧率、分辨率和质量等可分层的视频流。 基本层编码最低层的时域、空域和质量流&#xff1b; 增强层以基本层作为起始点&#xff0c;对附加信息进行补充&a…

程序集系统重构机房收费系统——起步

这段间时一直在查找程序集系统之类的问题,在现正好有机会和大家同享一下. 开始机房收费系统重构也半个月过去了。但看自己的系统连一个简略的登录还没有实现。自己不免有些羞愧了。近来自己的习学态状总的说来还是不错的。但是由于自己对来原的识知把握的欠好所以致导了自己不知…

ie下的透明度,用滤镜filter:alpha

.box{ width:100px; height:100px; background-color:#000; filter:alpha(Opacity50); opacity: 0.5; } 转载于:https://www.cnblogs.com/liujinyu/p/3931087.html