荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: kid (努力), 信区: Java
标  题: [转载] [转贴]JSP技术简介                      SuperRat (转寄)
发信站: 荔园晨风BBS站 (Sun Dec  9 21:56:41 2001), 站内信件

【 以下文字转载自 kid 的信箱 】
【 原文由 waterid.bbs@bbs.xjtu.edu.cn 所发表 】
发信人: SuperRat (硕鼠), 信区: java
标  题: [转贴]JSP技术简介
发信站: 交通大学思源BBS (Mon Jun 19 18:36:30 2000), 转信

作 者 : 仙人掌工作室

一、 JSP 技术概述

   在 Sun 正式发布 JSP(JavaServer Pages) 之后,这种新的 Web 应用开发技
术很快引起了人们的关注。 JSP 为创建高度动态的 Web 应用提供了一个独特的开发
环境。按照 Sun 的说法, JSP 能够适应市场上包括 Apache WebServer 、 IIS4.0
在内的 85% 的服务器产品。即使您对 ASP “一往情深”,我们认为,关注 JSP 的
发展仍旧很有必要。

   ㈠ JSP 与 ASP 的简单比较

   JSP 与 Microsoft 的 ASP 技术非常相似。两者都提供在 HTML 代码中混合某
种程序代码、由语言引擎解释执行程序代码的能力。在 ASP 或 JSP 环境下, HTML
代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的 HTML
页面只依赖于 Web 服务器,而 ASP 和 JSP 页面需要附加的语言引擎分析和执行程
序代码。程序代码的执行结果被重新嵌入到 HTML 代码中,然后一起发送给浏览器。
ASP 和 JSP 都是面向 Web 服务器的技术,客户端浏览器不需要任何附加的软件支持。

   ASP 的编程语言是 VBScript 之类的脚本语言, JSP 使用的是 Java ,这是两
者最明显的区别。此外, ASP 与 JSP 还有一个更为本质的区别:两种语言引擎用完全
不同的方式处理页面中嵌入的程序代码。在 ASP 下, VBScript 代码被 ASP 引擎解
释执行;在 JSP 下,代码被编译成 Servlet 并由 Java 虚拟机执行,这种编译操作
仅在对 JSP 页面的第一次请求时发生。

   ㈡运行环境

   Sun 公司的 JSP 主页在 http://www.javasoft.com/products/jsp/index.html ,
从这里还可以下载 JSP 规范,这些规范定义了供应商在创建 JSP 引擎时所必须遵从的
一些规则。

   执行 JSP 代码需要在服务器上安装 JSP 引擎。此处我们使用的是 Sun 的
JavaServer Web Development Kit ( JSWDK )。为便于学习,这个软件包提供了大
量可供修改的示例。安装 JSWDK 之后,只需执行 startserver 命令即可启动服务器。
在默认配置下服务器在端口 8080 监听,使用 http://localhost:8080 即可打开缺省
页面。

   在运行 JSP 示例页面之前,请注意一下安装 JSWDK 的目录,特别是“ work ”
子目录下的内容。执行示例页面时,可以在这里看到 JSP 页面如何被转换成 Java 源文
件,然后又被编译成 class 文件(即 Servlet )。 JSWDK 软件包中的示例页面分为
两类,它们或者是 JSP 文件,或者是包含一个表单的 HTML 文件,这些表单均由 JSP
代码处理。与 ASP 一样, JSP 中的 Java 代码均在服务器端执行。因此,在浏览器中
使用“查看源文件”菜单是无法看到 JSP 源代码的,只能看到结果 HTML 代码。所有示
例的源代码均通过一个单独的“ examples ”页面提供。

   ㈢ JSP 页面示例

   下面我们分析一个简单的 JSP 页面。您可以在 JSWDK 的 examples 目录下创建
另外一个目录存放此文件,文件名字可以任意,但扩展名必须为 .jsp 。从下面的代码清
单中可以看到, JSP 页面除了比普通 HTML 页面多一些 Java 代码外,两者具有基本相
同的结构。 Java 代码是通过 < % 和 %> 符号加入到 HTML 代码中间的,它的主要功能
是生成并显示一个从 0 到 9 的字符串。在这个字符串的前面和后面都是一些通过 HTML
代码输出的文本。

  < HTML>
  < HEAD>< TITLE>JSP 页面 < /TITLE>< /HEAD>
  < BODY>
  < %@ page language="java" %>
  < %! String str="0"; %>
  < % for (int i=1; i < 10; i++) {
   str = str + i;
  } %>
  JSP 输出之前。
  < P>
  < %= str %>
  < P>
  JSP 输出之后。
  < /BODY>
  < /HTML>

   这个 JSP 页面可以分成几个部分来分析。

首先是 JSP 指令。它描述的是页面的基本信息,如所使用的语言、是否维持会话状态、
是否使用缓冲等。 JSP 指令由 < %@ 开始, %> 结束。在本例中,指令“ < %@ page
language="java" %> ”只简单地定义了本例使用的是 Java 语言(当前,在 JSP 规范
中 Java 是唯一被支持的语言)。

接下来的是 JSP 声明。 JSP 声明可以看成是定义类这一层次的变量和方法的地方。 JSP
声明由 < %! 开始, %> 结束。如本例中的“ < %! String str="0"; %> ”定义了一个
字符串变量。在每一项声明的后面都必须有一个分号,就象在普通 Java 类中声明成员变
量一样。

位于 < % 和 %> 之间的代码块是描述 JSP 页面处理逻辑的 Java 代码,如本例中的 for
循环所示。

最后,位于 < %= 和 %> 之间的代码称为 JSP 表达式,如本例中的“ < %= str %> ”所
示。 JSP 表达式提供了一种将 JSP 生成的数值嵌入 HTML 页面的简单方法。

二、会话状态管理

作 者 : 仙人掌工作室

   会话状态维持是 Web 应用开发者必须面对的问题。有多种方法可以用来解决这个
问题,如使用 Cookies 、隐藏的表单输入域,或直接将状态信息附加到 URL 中。 Java
 Servlet 提供了一个在多个请求之间持续有效的会话对象,该对象允许用户存储和提取
会话状态信息。 JSP 也同样支持 Servlet 中的这个概念。

   在 Sun 的 JSP 指南 中可以看到许多有关隐含对象的说明(隐含的含义是,这些
对象可以直接引用,不需要显式地声明,也不需要专门的代码创建其实例)。例如
request 对象,它是 HttpServletRequest 的一个子类。该对象包含了所有有关当前浏
览器请求的信息,包括 Cookies , HTML 表单变量等等。 session 对象也是这样一个
隐含对象。这个对象在第一个 JSP 页面被装载时自动创建,并被关联到 request 对象
上。与 ASP 中的会话对象相似, JSP 中的 session 对象对于那些希望通过多个页面完
成一个事务的应用是非常有用的。

   为说明 session 对象的具体应用,接下来我们用三个页面模拟一个多页面的 Web
 应用。第一个页面( q1.html )仅包含一个要求输入用户名字的 HTML 表单,代码如
下:

  < HTML>
  < BODY>
  < FORM METHOD=POST ACTION="q2.jsp">
 请输入您的姓名:
  < INPUT TYPE=TEXT NAME="thename">
  < INPUT TYPE=SUBMIT VALUE="SUBMIT">
  < /FORM>
  < /BODY>
  < /HTML>

   第二个页面是一个 JSP 页面( q2.jsp ),它通过 request 对象提取 q1.html
表单中的 thename 值,将它存储为 name 变量,然后将这个 name 值保存到 session
对象中。 session 对象是一个名字 / 值对的集合,在这里,名字 / 值对中的名字为
“ thename ”,值即为 name 变量的值。由于 session 对象在会话期间是一直有效
的,因此这里保存的变量对后继的页面也有效。 q2.jsp 的另外一个任务是询问第二个
问题。下面是它的代码:

  < HTML>
  < BODY>
  < %@ page language="java" %>
  < %! String name=""; %>
  < %
  name = request.getParameter("thename");
  session.putValue("thename", name);
  %>
 您的姓名是: < %= name %>
  < p>
  < FORM METHOD=POST ACTION="q3.jsp">
 您喜欢吃什么 ?
  < INPUT TYPE=TEXT NAME="food">
  < P>
  < INPUT TYPE=SUBMIT VALUE="SUBMIT">
  < /FORM>
  < /BODY>
  < /HTML>

   第三个页面也是一个 JSP 页面( q3.jsp ),主要任务是显示问答结果。它从
session 对象提取 thename 的值并显示它,以此证明虽然该值在第一个页面输入,但
通过 session 对象得以保留。 q3.jsp 的另外一个任务是提取在第二个页面中的用户
输入并显示它:

  < HTML>
  < BODY>
  < %@ page language="java" %>
  < %! String food=""; %>
  < %
  food = request.getParameter("food");
  String name = (String) session.getValue("thename");
  %>
 您的姓名是: < %= name %>
  < P>
 您喜欢吃: < %= food %>
  < /BODY>
  < /HTML>


三、引用 JavaBean 组件
作 者 : 仙人掌工作室 编译

   JavaBean 是一种基于 Java 的软件组件。 JSP 对于在 Web 应用中集成
JavaBean 组件提供了完善的支持。这种支持不仅能缩短开发时间(可以直接利用经测
试和可信任的已有组件,避免了重复开发),也为 JSP 应用带来了更多的可伸缩性。
JavaBean 组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据提取等。
如果我们有三个 JavaBean ,它们分别具有显示新闻、股票价格、天气情况的功能,
则创建包含所有这三种功能的 Web 页面只需要实例化这三个 Bean ,使用 HTML 表
格将它们依次定位就可以了。

   为说明在 JSP 环境下 JavaBean 的应用,我们创建了一个名为 TaxRate 的
Bean 。它有两个属性,即 Product (产品)和 Rate (税率)。两个 set 方法分
别用来设置这两个属性,两个 get 方法则用于提取这两个属性。在实际应用中,这种
Bean 一般应当从数据库提取税率值,此处我们简化了这个过程,允许任意设定税率。
下面是这个 Bean 的代码清单:

  package tax;
  public class TaxRate {
   String Product;
   double Rate;
   public TaxRate() {
      this.Product = "A001";
      this.Rate = 5;
   }
   public void setProduct (String ProductName) {
      this.Product = ProductName;
   }
   public String getProduct() {
      return (this.Product);
   }
   public void setRate (double rateValue) {
      this.Rate = rateValue;
   }
   public double getRate () {
      return (this.Rate);
   }
  }

   在 JSP 页面中应用上述 Bean 要用到 < jsp:useBean> 标记。依赖于具体使
用的 JSP 引擎的不同,在何处配置以及如何配置 Bean 的方法也可能略有不同。本
文将这个 Bean 的 .class 文件放在 c:\jswdk-1.0\examples\WEB-INF\jsp\beans\tax
目录下,这里的 tax 是一个专门存放该 Bean 的目录。下面是一个应用上述 Bean
的示例页面:

  < HTML>
  < BODY>
  < %@ page language="java" %>
  < jsp:useBean id="taxbean" scope="application" class="tax.TaxRate" />
  < % taxbean.setProduct("A002");
   taxbean.setRate(17);
  %>
 使用方法 1 : < p>
 产品 : < %= taxbean.getProduct() %> < br>
 税率 : < %= taxbean.getRate() %>
  < p>
  < % taxbean.setProduct("A003");
   taxbean.setRate(3);
  %>
  < b> 使用方法 2 : < /b> < p>
 产品 : < jsp:getProperty name="taxbean" property="Product" />
  < br>
 税率 : < jsp:getProperty name="taxbean" property="Rate" />
  < /BODY>
  < /HTML>

   在 < jsp:useBean> 标记内定义了几个属性,其中 id 是整个 JSP 页面内该
Bean 的标识, scope 属性定义了该 Bean 的生存时间, class 属性说明了该 Bean
的类文件(从包名开始)。

   这个 JSP 页面不仅使用了 Bean 的 set 和 get 方法设置和提取属性值,还用到了
提取 Bean 属性值的第二种方法,即使用 < jsp:getProperty> 标记。
< jsp:getProperty> 中的 name 属性即为 < jsp:useBean> 中定义的 Bean 的 id ,
它的 property 属性指定的是目标属性的名字。


   事实证明, Java Servlet 是一种开发 Web 应用的理想构架。 JSP 以 Servlet
技术为基础,又在许多方面作了改进。 JSP 页面看起来象普通 HTML 页面,但它允许嵌
入执行代码,在这一点上,它和 ASP 技术非常相似。利用跨平台运行的 JavaBean 组件,
 JSP 为分离处理逻辑与显示样式提供了卓越的解决方案。 JSP 必将成为 ASP 技术的有
力竞争者。


--
------------------------(\,/)----------SuperRat2000--
  老鼠怕猫,这是谣传.    oo   '''//,,       _
  一只懒猫,有啥可怕.  ,/_;~,         \,   / '
  壮起鼠胆,把猫打翻.   '   \      (   \   !
  千古谣言,一定推翻!        ',|    \   |_.'
----------------------------'~ --'~---'' --千禧硕鼠--
※ 来源:·交通大学思源BBS[WWW-POST]bbs.xjtu.edu.cn·[FROM: 155.69.4.53]
--
※ 转寄:·交大兵马俑BBS站 bbs.xjtu.edu.cn·[FROM: 202.119.32.102]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.32.248]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店