Howdy,China!:构建JSF Web Application第一篇

版权说明:本文书写过程中参照了红帽的技术文档;本系列文章中的部分测试代码为红帽公司版权所有,因此不能提供源码文件。

  • 本文的内容仅限于技术探讨,不能作为指导生产环境的素材;
  • 本文分为系列文章,将会有多篇,初步预计将有多篇。
  • 笔者鼓励读者购买红帽培训获得更多系统性的培训。

一、JavaServer Faces简介

Web应用程序,通常是从Web浏览器向服务器发出请求,由服务器处理请求以及生成发送回浏览器的响应。

上图中的请求处理器可以有以下几种:普通servlet、Struts、Spring MVC等等。 在本单元中,我们将探讨最近更新的框架JavaServer Faces version 2(JSF2)。

JavaServer Faces是用于创建基于Java的Web应用程序的服务器端组件框架。 JavaServer Faces框架包括:

  • 一个强大的API,包括:
  • 网页组件模型和状态管理
  • 事件通知和事件处理程序
  • 数据转换和验证
  • 页内导航
  • 国际化支持
  • 可访问性支持
  • 用于创建网页组件的标记库
  • 能够将网页组件绑定到服务器端对象
  • 完全支持上下文和依赖注入(CDI)

典型的JSF2应用程序包含以下内容:

  • Web Pages

带标签的XHTML页面定义绑定到服务器端对象的页面组件。

  • Managed Beans

一个或多个托管bean,提供对请求,会话或应用程序范围内的数据模型对象和应用程序逻辑的访问。

  • Faces Configuration File(s)

至少提供一个空的faces-config.xml文件。 可以在此文件中定义导航和bean,但从JSF2开始,这不是必需的。 此文件的存在(与CDI的beans.xml文件非常相似)可激活JSF行为。

  • Web Deployment Descriptor

如果需要非标准行为,则会提供web.xml文件,用于定义Web应用程序的大量配置设置。

二、JSF2 Web应用程序的剖析

所有Web应用程序都具有特定的目录结构。 这是一个简单的JSF应用程序的完整结构:

WebContent是Web应用程序的根。 如果Web应用程序的上下文(名称)是“xyz”,则在根文件名“xyz”之后,浏览器可以查找此根目录下的所有文件。 例如,您可以通过输入http://servername/xyz/index.html来显示index.html页面。 通常,所有面部页面都位于此根文件夹中,或者位于较大应用程序的子文件夹中。

文件夹META-INF和WEB-INF是特殊文件夹。 浏览器无法访问这些内容。 应用程序的服务器端组件可以完全访问这些文件夹。

特殊配置文件放在WEB-INF文件夹中,例如beans.xml(CDI)和faces-config.xml(JSF)。

WEB-INF / lib和WEB-INF / classes的内容由JBoss Developer Studio或Maven为您创建。 classes文件夹包含应用程序在Java源文件夹中定义的所有包和已编译的类。 lib文件夹包含项目中指定的所有依赖项。

三、JSF页面地址和映射

从Java EE 6开始不再需要web.xml文件。 JSF页面hello.xhtml可以引用如下:

/faces/hello.xhtml

/hello.jsf

这将映射到hello.xhtml。

欢迎文件列表包括index.html(和其他)。 欢迎文件列表是在Web地址不包含文件名时将尝试的文件名列表。 例如,给定http:// servername / xyz /,服务器将表现为输入了http://servername/xyz/index.html。 如果文件index.html不存在,它还会尝试其他一些文件名,但最好使用index.html作为欢迎文件。

四、实验展示:创建JSF项目的方法

在JBoss Developer Studio中创建JSF2应用程序

幸运的是,JBoss Developer Studio可以非常简单地启动一个新的JSF Web应用程序。 有几种选择,包括:

使用“新建项目”向导创建JSF项目

JSFBlankWithLibs:将JSF库依赖项添加到项目中的空JSF项目

JSFBlankWithoutLibs:一个没有库依赖项的空JSF项目 - 您将项目与JBoss EAP实例关联以查找所需的库

JSFKickStartWithoutLibs:一个没有库依赖项的示例JSF项目

建议使用运行时库,而不要在项目中包含依赖项。 这可确保应用程序针对将部署的相同库运行。

五、实验展示:Howdy, China!

我们导入一个已经存在的maven项目:

这个项目的类型是:Dynamic Web Project with CDI enabled

这个项目的两个核心代码:NameBean和hello.xhtml。

1. 首先创建托管Bean:NameBean

2.创建XHTML Facelet页面:hello.xhtml

3. 创建一个简单的重定向页面:index.html,其中的URL=hello.jsf,就是指向上面的hello.xhtml

源码分析:

hello.xhtml的代码的前台展示:

我们注意到上面的nameBean.message,实际上会调用NameBean中getmessage方法,代码如下:

我们继续分析hello.xhtml代码。下面代码的含义是,前台提示输入名字,会传递到NameBean中的name方法中:

下面代码的逻辑是:当name不等于空,且等于将输入字符串字符串头尾的空格去掉后值,在这种情况下,返回Howdy, name!

代码中rendered属性是用来控制该控件是否显示的,结果为ture时显示,false隐藏。

运行代码:

接下来,在EAP上运行代码:

我们先输入三个空格,再输入david:

点击提交:

我们会看到,返回正常。空格被消除,是因为代码中调用了trim

我们输入China,返回值如下:

原文发布于微信公众号 - 大魏分享(david-share)

原文发表时间:2018-10-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 16.04上安装和配置OrientDB

OrientDB是一个多模型NoSQL数据库,支持图形和文档数据库。它是一个Java应用程序,可以在任何操作系统上运行。它也完全支持ACID,支持多主复制,可轻...

1813
来自专栏JackieZheng

Spring Boot系列——如何集成Log4j2

上篇《Spring Boot系列——日志配置》介绍了Spring Boot如何进行日志配置,日志系统用的是Spring Boot默认的LogBack。

1482
来自专栏大魏分享(微信公众号:david-share)

干货分享:基于JBoss的七个Java应用场景

声明 本文主要是针对EAP7的相关实验的记录,本文仅供参考。仅代表作者的个人观点。 在实验过程中,笔者得到了舒服力和Kylin的大力帮助,很多代码的revie...

3605
来自专栏瞎说开发那些事

Linux 中的静态库和动态库简介及生成过程示例

2094
来自专栏CodeSheep的技术分享

Spring Boot日志框架实践

2307
来自专栏黑白安全

Kali Linux安装到U盘

虽然使用其他工具也能将Kali Linux安装到U盘,但是经测试,成功率很低。而且一般是刻录后还需要其他操作以避免刻录为Kali Linux安装盘。借助虚拟机将...

1822
来自专栏沈唁志

解决 IDEA 下的 Terminal 中文乱码(Unicode 编码)的方法

在使用 IDEA 进行开发的时候,经常会用到 Git 进行代码管理,如果再开一个 Docker 窗口的话,窗口切换来切换去的很不方便

3245
来自专栏Python

linux每日命令(29):chown命令

chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管...

1984
来自专栏惨绿少年

memcached 缓存数据库应用实践

1.1 数据库对比 缓存: 将数据存储到内存中,只有当磁盘胜任不了的时候,才会启用缓存       缺点:断电数据丢失(双电),用缓存存储数据的目的只是为了应付...

4330
来自专栏刘望舒

Gradle入门前奏

在文章为什么现在要用Gradle?中,我们学习了常见的构建工具,以及Gradle与这些构建工具相比有那些不同的特性。这一篇文章我们接着来学习Gradle入门需要...

1252

扫码关注云+社区

领取腾讯云代金券