原文地址:https://javaee.github.io/tutorial/webapp003.html#BNADX
使用JavaServer Faces技术的Web模块:hello1示例
该hello1
应用程序是一个Web模块,它使用JavaServer Faces技术来显示问候语和响应。您可以使用文本编辑器查看应用程序文件,也可以使用NetBeans IDE。
此应用程序的源代码位于 tut-install/examples/web/jsf/hello1/
目录中。
这里讨论以下主题:
使用NetBeans IDE查看hello1 Web模块
要hello1
使用NetBeans IDE 查看Web模块,请执行以下操作:
-
从“文件”菜单中,选择“打开项目”。
-
在“打开项目”对话框中,导航至:
tut-install/examples/web/jsf
-
选择
hello1
文件夹并单击“打开项目”。 -
展开“Web页”节点,然后双击该
index.xhtml
文件以在编辑器中查看它。该
index.xhtml
文件是Facelets应用程序的默认登录页面。在典型的Facelets应用程序中,网页是在XHTML中创建的。对于此应用程序,页面使用简单的标记标记来显示带有图形图像,标题,字段和两个命令按钮的表单:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>Facelets Hello Greeting</title> </h:head> <h:body> <h:form> <h:graphicImage url="#{resource['images:duke.waving.gif']}" alt="Duke waving his hand"/> <h2>Hello, my name is Duke. What's yours?</h2> <h:inputText id="username" title="My name is: " value="#{hello.name}" required="true" requiredMessage="Error: A name is required." maxlength="25" /> <p></p> <h:commandButton id="submit" value="Submit" action="response"> </h:commandButton> <h:commandButton id="reset" value="Reset" type="reset"> </h:commandButton> </h:form> ... </h:body> </html>
页面上最复杂的元素是
inputText
字段。该maxlength
属性指定字段的最大长度。该required
属性指定必须填写该字段;requiredMessage
如果字段为空,则该 属性提供要显示的错误消息。该title
属性提供屏幕阅读器用于视觉禁用的文本。最后,该value
属性包含将由Hello
托管bean 提供的表达式 。Web页面
Hello
通过Expression Language(EL)值表达式连接到托管bean,该表达式从托管bean中#{hello.name}
检索name
属性的值。请注意使用hello
引用托管beanHello
。如果@Named
在托管bean 的注释中未指定名称,则始终使用小写的类名的第一个字母访问托管bean。Submit
commandButton
元素将操作指定为response
,表示单击按钮时,将response.xhtml
显示该页面。 -
双击该
response.xhtml
文件以查看它。出现响应页面。甚至比问候页面简单,响应页面包含一个图形图像,一个显示托管bean提供的表达式的标题,以及一个按钮,其
action
元素将您传回index.xhtml
页面:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>Facelets Hello Response</title> </h:head> <h:body> <h:form> <h:graphicImage url="#{resource['images:duke.waving.gif']}" alt="Duke waving his hand"/> <h2>Hello, #{hello.name}!</h2> <p></p> <h:commandButton id="back" value="Back" action="index" /> </h:form> </h:body> </html>
-
展开“源包”节点,然后展开
javaeetutorial.hello1
节点。 -
双击该
Hello.java
文件以查看它。在
Hello
类,称为管理bean类,提供了getter和setter方法name
中的Facelets页面表达式中使用属性。默认情况下,表达式语言引用类名,第一个字母为小写(hello.name
)。package javaeetutorial.hello1; import javax.enterprise.context.RequestScoped; import javax.inject.Named; @Named @RequestScoped public class Hello { private String name; public Hello() { } public String getName() { return name; } public void setName(String user_name) { this.name = user_name; } }
-
在“Web页”节点下,展开WEB-INF节点,然后双击该
web.xml
文件以进行查看。该
web.xml
文件包含Facelets应用程序所需的几个元素。使用NetBeans IDE创建应用程序时,将自动创建以下所有内容。-
指定项目阶段的上下文参数:
<context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param>
上下文参数提供Web应用程序所需的配置信息。应用程序可以定义自己的上下文参数。此外,JavaServer Faces技术和Java Servlet技术定义了应用程序可以使用的上下文参数。
-
一个
servlet
元素及其servlet-mapping
元素指定FacesServlet
。所有带.xhtml
后缀的文件都将匹配:<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping>
-
一个
welcome-file-list
元素指定着陆页的位置:<welcome-file-list> <welcome-file>index.xhtml</welcome-file> </welcome-file-list>
-
范围简介
在Hello.java
类中,注释javax.inject.Named
并 javax.enterprise.context.RequestScoped
使用请求范围将类标识为托管bean。范围定义应用程序数据如何保持和共享。
JavaServer Faces应用程序中最常用的范围如下:
-
Request(
@RequestScoped
):请求范围在Web应用程序中的单个HTTP请求期间保持不变。在类似的应用程序hello1
中,应用程序由单个请求和响应组成,bean使用请求范围。 -
Session(
@SessionScoped
):会话范围在Web应用程序中的多个HTTP请求中保持不变。当应用程序由需要维护数据的多个请求和响应组成时,bean使用会话范围。 -
Application(
@ApplicationScoped
):应用程序范围在所有用户与Web应用程序的交互中持续存在。
有关JavaServer Faces技术中的范围的更多信息,请参阅 使用Managed Bean Scopes。
打包和部署hello1 Web模块
在某些部署方案中以及每当您要分发Web模块时,必须将Web模块打包到WAR中。您可以使用Maven或使用您选择的IDE工具将Web模块打包到WAR文件中。本教程介绍如何使用NetBeans IDE或Maven构建,打包和部署hello1
示例应用程序。
您可以通过以下方式将WAR文件部署到GlassFish Server:
-
使用NetBeans IDE
-
使用
asadmin
命令 -
使用管理控制台
-
将WAR文件复制到
domain-dir/autodeploy/
目录中
在整个教程中,您将使用NetBeans IDE或Maven进行打包和部署。
使用NetBeans IDE构建和打包hello1 Web模块
hello1
使用NetBeans IDE 构建和打包Web模块:
-
启动GlassFish Server,如使用NetBeans IDE启动GlassFish Server中所述 (如果尚未执行此操作)。
-
从“文件”菜单中,选择“打开项目”。
-
在“打开项目”对话框中,导航至:
tut-install/examples/web/jsf
-
选择
hello1
文件夹。 -
单击打开项目。
-
在“项目”选项卡中,右键单击
hello1
项目,然后选择“生成”。此命令将项目部署到服务器。
使用Maven构建和打包hello1 Web模块
hello1
使用Maven 构建和打包Web模块:
-
启动GlassFish Server,如 使用命令行启动GlassFish Server中所述,如果您还没有这样做。
-
在终端窗口中,转到:
tut-install/examples/web/jsf/hello1/
-
输入以下命令:
mvn install
此命令生成任何必要的编译并在其中创建WAR文件
tut-install/examples/web/jsf/hello1/target/
。然后,它将项目部署到服务器。
查看已部署的Web模块
GlassFish Server提供了两种查看已部署的Web模块的方法:管理控制台和asadmin
命令。您还可以使用NetBeans IDE查看已部署的模块。
使用管理控制台查看已部署的Web模块
要使用管理控制台查看已部署的Web模块:
-
http://localhost:4848/
在浏览器中打开URL 。 -
选择Applications节点。
已部署的Web模块显示在“已部署的应用程序”表中。
使用asadmin命令查看已部署的Web模块
输入以下命令:
asadmin list-applications
使用NetBeans IDE查看已部署的Web模块
要使用NetBeans IDE查看已部署的Web模块:
-
在“服务”选项卡中,展开“服务器”节点,然后展开“GlassFish Server”节点。
-
展开“应用程序”节点以查看已部署的模块。
运行已部署的hello1 Web模块
现在已部署Web模块,您可以通过在Web浏览器中打开应用程序来查看它。默认情况下,应用程序部署到localhost
端口8080上的主机.Web应用程序的上下文根是hello1
。
要运行已部署的hello1
Web模块:
-
打开Web浏览器。
-
输入以下URL:
http://localhost:8080/hello1/
-
在该字段中,输入您的姓名,然后单击“提交”。
响应页面显示您提交的名称。单击“上一步”再试一次。
部署模块的动态重新加载
如果启用了动态重新加载,则在更改其代码或部署描述符时,不必重新部署应用程序或模块。您所要做的就是将更改的页面或类文件复制到应用程序或模块的部署目录中。名为context-root的Web模块的部署目录是 。服务器定期检查更改并自动和动态地重新部署应用程序。domain-dir/applications/context-root
此功能在开发环境中很有用,因为它允许快速测试代码更改。但是,不建议在生产环境中进行动态重新加载,因为它可能会降低性能。此外,每当发生重新加载时,当时的会话都将变为无效,并且客户端必须重新启动会话。
在GlassFish Server中,默认情况下启用动态重新加载。
取消部署hello1 Web模块
您可以使用NetBeans IDE或Maven取消部署Web模块和其他类型的企业应用程序。
使用NetBeans IDE取消部署hello1 Web模块
要hello1
使用NetBeans IDE 取消部署Web模块,请执行以下操作:
-
在“服务”选项卡中,展开“服务器”节点,然后展开“GlassFish Server”节点。
-
展开Applications节点。
-
右键单击该
hello1
模块,然后选择“取消部署”。 -
要删除类文件和其他构建工件,请返回“项目”选项卡,右键单击项目,然后选择“清理”。
使用Maven取消部署hello1 Web模块
要hello1
使用Maven 取消部署Web模块:
-
在终端窗口中,转到:
tut-install/examples/web/jsf/hello1/
-
输入以下命令:
mvn cargo:undeploy
-
要删除类文件和其他构建工件,请输入以下命令:
mvn clean