⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 71.html

📁 写给JSP初级程序员的书
💻 HTML
📖 第 1 页 / 共 2 页
字号:
      页面中:<BR>&lt;%@ page contentType="text/xml;charset=ISO-8859-1" 
      %&gt;&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;&lt;Flights&gt; 
      &lt;AirCarrier&gt;AA&lt;/AirCarrier&gt; 
      &lt;FlightNumber&gt;700&lt;/FlightNumber&gt; &lt;FlightSegment&gt; ... 
      <BR>  在这种情况下,页面编译器将除去第一行中的页面指令,并在 &lt;?xml...?&gt; 版本标记之前留下一个空行。在 XML 
      文档中,XML 版本标记必须位于第一行,所以这个示例将在 XML 
      分析程序中导致错误。要修正这个错误,请将此页面指令添加到第二行,或者将内容标记连接在 XML 
      版本标记之后。实际上将页面指令放在文档中的什么位置并不重要,因为页面编译器会将此指令添加到所生成的页面 servlet 的 service() 
      方法的开头,而不管它在页面中处在什么位置。尽管这样,为了具有较好的可读性,您可能希望将它添加为第二行,如下所示:<BR>&lt;?xml 
      version="1.0" encoding="ISO-8859-1"?&gt;&lt;%@ page 
      contentType="text/xml;charset=ISO-8859-1" %&gt;&lt;Flights&gt; 
      &lt;AirCarrier&gt;AA&lt;/AirCarrier&gt; 
      &lt;FlightNumber&gt;700&lt;/FlightNumber&gt; &lt;FlightSegment&gt; 
      ...<BR>添加 Java 代码 <BR>  现在剩下要做的事情就是添加 Java 代码来定制 XML 的某些内容。我们将 Java 
      代码添加到文件中的 scriptlet 标记 (&lt;%...%&gt;) 之间。页面编译器将把这两个标记之间的任何内容解释为纯 Java 
      代码,并不加修改地将它添加到所生成的页面 servlet 的 service() 方法中。<BR>  scriptlet 
      标记内的所有代码都被按它们在 JSP 页面出现的次序添加到 service() 方法中。添加的代码的作用域是整个页面,从而是整个 service() 
      方法。因此,如果您在文件开头的一对 scriptlet 标记之间定义一个变量,则以后您可以在文件中使用一对完全不同的 scriptlet 
      标记引用这个变量。可以通过在变量定义两侧添加您自己的一对花括号 ({...}) 来强加一个作用域。这两个花括号甚至可以在一对 scriptlet 
      标记之间开始,而在另一对 scriptlet 标记之间结束。<BR>  在下面的示例中,我用一些使用 Calendar 类的 Java 
      代码来替换原始 XML 文件中的几个静态日期。这段代码在为几个 XML 标记创建适当时间条目的同时,使用当前日期,并添加时和分。Java 
      代码用粗体表示。添加行号是为了便于以后引用。<BR>1. &lt;?xml version="1.0" 
      encoding="ISO-8859-1"?&gt;<BR>2. &lt;%@ page 
      contentType="text/xml;charset=ISO-8859-1" %&gt;<BR>3. &lt;% 
      java.util.Calendar cal = java.util.Calendar.getInstance(); %&gt;<BR>4. 
      &lt;Flights&gt;<BR>5. &lt;AirCarrier&gt;AA&lt;/AirCarrier&gt;<BR>6. 
      &lt;FlightNumber&gt;700&lt;/FlightNumber&gt;<BR>7. 
      &lt;FlightSegment&gt;<BR>8. &lt;DepartingInfo&gt;<BR>9. 
      &lt;City&gt;DFW&lt;/City&gt;<BR>10. &lt;Date&gt;30Mar&lt;/Date&gt;<BR>11. 
      &lt;Scheduled&gt;<BR>12. &lt;% out.print(cal.getTime().toString()); 
      %&gt;<BR>13. &lt;/Scheduled&gt;<BR>14. &lt;Status&gt;ON 
      TIME&lt;/Status&gt;<BR>15. &lt;% cal.add(java.util.Calendar.MINUTE, 
      10);<BR>16. out.print("&lt;Time&gt;" + cal.getTime().toString() +<BR>17. 
      "&lt;/Time&gt;"); %&gt;<BR>18. &lt;Gate&gt;C16&lt;/Gate&gt;<BR>19. 
      &lt;OffGateTime&gt;0644A&lt;/OffGateTime&gt;<BR>20. 
      &lt;OffGroundTime&gt;0632A&lt;/OffGroundTime&gt;<BR>21. 
      &lt;/DepartingInfo&gt;<BR>22. &lt;ArrivingInfo&gt;<BR>23. 
      &lt;City&gt;LGA&lt;/City&gt;<BR>24. &lt;Date&gt;30Mar&lt;/Date&gt;<BR>25. 
      &lt;Scheduled&gt;<BR>26. &lt;% cal.add(java.util.Calendar.HOUR_OF_DAY, 
      4);<BR>27. out.print(cal.getTime().toString());<BR>28. 
      cal.add(java.util.Calendar.MINUTE, 2); %&gt;<BR>29. 
      &lt;/Scheduled&gt;<BR>30. &lt;Status&gt;ON TIME&lt;/Status&gt;<BR>31. 
      &lt;Time&gt;&lt;%= cal.getTime().toString() %&gt;&lt;/Time&gt;<BR>32. 
      &lt;Gate&gt;D5&lt;/Gate&gt;<BR>33. &lt;Baggage&gt;B&lt;/Baggage&gt;<BR>34. 
      &lt;OnGroundTime&gt;1043A&lt;/OnGroundTime&gt;<BR>35. 
      &lt;/ArrivingInfo&gt;<BR>36. 
      &lt;/FlightSegment&gt;<BR>37.&lt;/Flights&gt;<BR><BR>下面是在这个代码段中所进行的操作:<BR>  第 
      2 行:添加页面指令来指明这个页面 servlet 生成的响应将包含 XML。<BR>  第 3 行:定义类型为 Calendar 的变量 cal 
      来包含当前日期和时间。<BR>  第 12 行:使用全局 out 
      对象,我们可以直接显示到正在作为响应发送的页面的当前位置。我们将当前的时间戳显示到页面上。请注意,当生成响应时,JSP scriptlet 
      标记将被时间戳结果取代。<BR>  第 15-17 行:在当前时间上加上 10 分钟,并将这个结果显示到页面上作为出发时间。<BR>  第 
      26-28 行:在当前时间上加上 4 个小时以得出航班的预定到达时间,然后使用 out 对象将这个结果显示到页面上。然后再加上 2 
      分钟来创建实际到达时间。<BR>  第 31 行:带有 scriptlet 标记的等号 (&lt;%=...%&gt;) 
      将导致将标记内所包含的任何结果显示到页面上。示例中的这一行等价于使用标准 scriptlet 标记的以下一行: <BR>  &lt;% 
      out.print(cal.getTime().toString()); %&gt;<BR>  请注意,cal 
      对象对整个页面都是全局的,尽管使用它的一对 scriptlet 标记并不是定义它的同一对 scriptlet 标记。如前所述,除非添加花括号 
      ({...}) 来强制使用作用域,否则变量声明从声明之处对于整个页面都是全局的。<BR>  同样,本例中的 Java 代码主要用来生成 XML 
      标记之间的数据。我们还可以使用 Java 代码生成一个 XML 文档中的整个标记树。代码除了显示数据之外,还必须简单地显示出标记。这正是第 
      15-17 行所完成的任务。<BR>添加 JavaBeans 组件 <BR>  JSP 语法支持将 JavaBeans 
      组件添加到页面中,并像访问任何其他 Java 对象一样访问它们。专用的 &lt;jsp:useBean&gt; 标记用来声明和实例化 
      bean。页面编译器将使用 &lt;jsp:useBean&gt; 标记的属性来构建页面 servlet 中的 Java 代码,这对于实例化 
      bean 以及将请求中的数据置入 bean 是必需的。<BR>  因为 JavaBeans 
      组件通常必须执行一项任务,所以很容易看出如何使用它们来执行或干预复杂的业务逻辑,同时也从 JSP 页面中移去复杂的 Java 代码。一个示例是 
      Integration Object JavaBean 组件。这个 bean 是使用 IBM WebSphere Host Publisher 
      构建的,它封装了与旧有数据源(如 3270 应用程序或数据库)的交互,并只是返回它们的数据。设想使用一个 Integration 
      Object,为了在我们示例中提供到达和出发信息,它与基于主机的航空调度应用程序对接。作为 Integration Object 
      的一个用户,您只须请求它的航线数据,而不会察觉到在后台发生的与主机应用程序之间的复杂通信和交互。 <BR>  下面是为了使用这样一个 bean 
      而重新编写的示例。<BR></SPAN></FONT></P>
      <P><FONT color=#386490><SPAN class=line>1. &lt;?xml version="1.0" 
      encoding="ISO-8859-1"?&gt;<BR>2. &lt;%@ page 
      contentType="text/xml;charset=ISO-8859-1" %&gt;<BR>3. &lt;jsp:useBean 
      id="flightInfo" class="IntegrationObject.FlightInfo"/&gt;<BR>4. &lt;% 
      flightInfo.doHPTransaction(request, response); %&gt;<BR>5. 
      &lt;Flights&gt;<BR>6. &lt;AirCarrier&gt;AA&lt;/AirCarrier&gt;<BR>7. 
      &lt;FlightNumber&gt;700&lt;/FlightNumber&gt;<BR>8. 
      &lt;FlightSegment&gt;<BR>9. &lt;DepartingInfo&gt;<BR>10. 
      &lt;City&gt;DFW&lt;/City&gt;<BR>11. &lt;Date&gt;30Mar&lt;/Date&gt;<BR>12. 
      &lt;Scheduled&gt;<BR>13. &lt;% 
      out.print(flightInfo.getScheduledDeparture()); %&gt;<BR>14. 
      &lt;/Scheduled&gt;<BR>15. &lt;Status&gt;ON TIME&lt;/Status&gt;<BR>16. 
      &lt;% out.print("&lt;Time&gt;" + flightInfo.getActualDeparture() + 
      \<BR>17. "&lt;/Time&gt;"); %&gt;<BR>18. 
      &lt;Gate&gt;C16&lt;/Gate&gt;<BR>19. 
      &lt;OffGateTime&gt;0644A&lt;/OffGateTime&gt;<BR>20. 
      &lt;OffGroundTime&gt;0632A&lt;/OffGroundTime&gt;<BR>21. 
      &lt;/DepartingInfo&gt;<BR>22. &lt;ArrivingInfo&gt;<BR>23. 
      &lt;City&gt;LGA&lt;/City&gt;<BR>24. &lt;Date&gt;30Mar&lt;/Date&gt;<BR>25. 
      &lt;Scheduled&gt;&lt;%= flightInfo.getScheduledArrival() %&gt;<BR>26. 
      &lt;/Scheduled&gt;<BR>27. &lt;Status&gt;ON TIME&lt;/Status&gt;<BR>28. 
      &lt;Time&gt;&lt;%= flightInfo.getActualArrival() %&gt;&lt;/Time&gt;<BR>29. 
      &lt;Gate&gt;D5&lt;/Gate&gt;<BR>30. &lt;Baggage&gt;B&lt;/Baggage&gt;<BR>31. 
      &lt;OnGroundTime&gt;1043A&lt;/OnGroundTime&gt;<BR>32. 
      &lt;/ArrivingInfo&gt;<BR>33. 
      &lt;/FlightSegment&gt;<BR>34.&lt;/Flights&gt;<BR>让我们进一步分析一下本例中进行的操作。<BR>  第 
      3 行包含 &lt;jsp:useBean&gt; 标记,它将 bean IntegrationObject.FlightInfo 定义并实例化为 
      flightInfo。下一行包含一个 scriptlet,它调用 flightInfo 的 doHPTransaction() 
      方法,使它连接到主机航班信息应用程序并检索相关的航班信息。第 13、16、25 和 28 行只是将结果插入到 XML 
      文档中。<BR>  您可以按完全相同的方式使用其他类型的 bean,也许以调用 doHPTransaction() 
      之外的某个其他调用方法完成这一操作。您甚至可以在同一个文档中添加多个 bean,并为来自多个数据源的数据创建一个复合的 XML 
      视图。<BR><BR><B>小结</B><BR><BR>  JavaServer Pages 技术成为一个开放标准已经几年了,并已广泛用于生成动态 
      HTML 文档。少数人已经认识到将实际的 Java 代码嵌在 HTML 文档中所具有的同等灵活性也适用于生成 
      XML。请考虑这种可能性。通过只动态构建那些变化的数据,您就能够改进企业对企业的通信。您可以构建来自一个数据源的数据的各种表示,不仅仅是 HTML 
      和 XML,还有用于无线协议的 WML 和 HDML,或者简单使用类似 WebSphere Transcoding Publisher 
      这样的产品将动态 XML 转换为适合设备的表示。<BR>  XML 无疑已成为数据交换的通用格式。使用 JavaServer Pages 技术为以 
      XML 格式在 Web 上快速而容易地发送数据提供了强有力的工具。</SPAN></FONT></P>
        </td>
      </tr>
    </td>
  </tr>
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -