javaEE官方文档上的hello1.java项目

原文地址: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模块,请执行以下操作:

  1. 从“文件”菜单中,选择“打开项目”。

  2. 在“打开项目”对话框中,导航至:

    tut-install/examples/web/jsf
  3. 选择hello1文件夹并单击“打开项目”。

  4. 展开“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引用托管bean Hello如果@Named在托管bean 注释中未指定名称,则始终使用小写的类名的第一个字母访问托管bean。

    Submit commandButton元素将操作指定为response,表示单击按钮时,将response.xhtml显示页面。

  5. 双击该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>
  6. 展开“源包”节点,然后展开javaeetutorial.hello1 节点。

  7. 双击该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;
        }
    }

    如果使用bean类的默认名称,则可以指定@Model 为注释,而不必同时指定@Named和 @RequestScoped@Model注释被称为刻板印象,对于封装等注解注释的术语。稍后将在CDI应用程序使用原型进行描述一些例子将@Model在适当的地方使用

  8. 在“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模块:

  1. 启动GlassFish Server,如使用NetBeans IDE启动GlassFish Server中所述 (如果尚未执行此操作)。

  2. 从“文件”菜单中,选择“打开项目”。

  3. 在“打开项目”对话框中,导航至:

    tut-install/examples/web/jsf
  4. 选择hello1文件夹。

  5. 单击打开项目。

  6. 在“项目”选项卡中,右键单击hello1项目,然后选择“生成”。此命令将项目部署到服务器。

使用Maven构建和打包hello1 Web模块

hello1使用Maven 构建和打包Web模块:

  1. 启动GlassFish Server,如 使用命令行启动GlassFish Server中所述,如果您还没有这样做。

  2. 在终端窗口中,转到:

    tut-install/examples/web/jsf/hello1/
  3. 输入以下命令:

    mvn install

    此命令生成任何必要的编译并在其中创建WAR文件tut-install/examples/web/jsf/hello1/target/然后,它将项目部署到服务器。

查看已部署的Web模块

GlassFish Server提供了两种查看已部署的Web模块的方法:管理控制台和asadmin命令。您还可以使用NetBeans IDE查看已部署的模块。

使用管理控制台查看已部署的Web模块

要使用管理控制台查看已部署的Web模块:

  1. http://localhost:4848/在浏览器中打开URL 

  2. 选择Applications节点。

    已部署的Web模块显示在“已部署的应用程序”表中。

使用asadmin命令查看已部署的Web模块

输入以下命令:

asadmin list-applications

使用NetBeans IDE查看已部署的Web模块

要使用NetBeans IDE查看已部署的Web模块:

  1. 在“服务”选项卡中,展开“服务器”节点,然后展开“GlassFish Server”节点。

  2. 展开“应用程序”节点以查看已部署的模块。

运行已部署的hello1 Web模块

现在已部署Web模块,您可以通过在Web浏览器中打开应用程序来查看它。默认情况下,应用程序部署到localhost端口8080上的主机.Web应用程序的上下文根是hello1

要运行已部署的hello1Web模块:

  1. 打开Web浏览器。

  2. 输入以下URL:

    http://localhost:8080/hello1/
  3. 在该字段中,输入您的姓名,然后单击“提交”。

    响应页面显示您提交的名称。单击“上一步”再试一次。

部署模块的动态重新加载

如果启用了动态重新加载,则在更改其代码或部署描述符时,不必重新部署应用程序或模块。您所要做的就是将更改的页面或类文件复制到应用程序或模块的部署目录中。名为context-root的Web模块的部署目录是 服务器定期检查更改并自动和动态地重新部署应用程序。domain-dir/applications/context-root

此功能在开发环境中很有用,因为它允许快速测试代码更改。但是,不建议在生产环境中进行动态重新加载,因为它可能会降低性能。此外,每当发生重新加载时,当时的会话都将变为无效,并且客户端必须重新启动会话。

在GlassFish Server中,默认情况下启用动态重新加载。

取消部署hello1 Web模块

您可以使用NetBeans IDE或Maven取消部署Web模块和其他类型的企业应用程序。

使用NetBeans IDE取消部署hello1 Web模块

hello1使用NetBeans IDE 取消部署Web模块,请执行以下操作:

  1. 在“服务”选项卡中,展开“服务器”节点,然后展开“GlassFish Server”节点。

  2. 展开Applications节点。

  3. 右键单击该hello1模块,然后选择“取消部署”。

  4. 要删除类文件和其他构建工件,请返回“项目”选项卡,右键单击项目,然后选择“清理”。

使用Maven取消部署hello1 Web模块

hello1使用Maven 取消部署Web模块:

  1. 在终端窗口中,转到:

    tut-install/examples/web/jsf/hello1/
  2. 输入以下命令:

    mvn cargo:undeploy
  3. 要删除类文件和其他构建工件,请输入以下命令:

    mvn clean
posted @ 2019-03-31 18:13  秋宝。  阅读(345)  评论(0编辑  收藏  举报