一、 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 是一种基于 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.0examplesWEB-INFjspeans ax 目录下,这里的 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 技术的有力竞争者。


JSP技术简介的更多相关文章

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. swift皮筋弹动发射飞机ios源码

    这是一个款采用swift实现的皮筋弹动发射飞机游戏源码,游戏源码比较详细,大家可以研究学习一下吧。

  5. 10.5 Swift类方法

    /**类型方法通过类名称来调用的方法,就像类型属性一样。

  6. Swift与Js通过WebView交互

    开发环境:Swfit2.3XCode8.2基础概念jscontext,jscontext是代表JS的执行环境,通过-evaluateScript:方法就可以执行一JS代码JSValue,JSValue封装了JS与ObjC中的对应的类型,以及调用JS的API等JSExport,JSExport是一个协议,遵守此协议,就可以定义我们自己的协议,在协议中声明的API都会在JS中暴露出来,才能调用Swif

  7. JSCore swift

    如果双方相互引用,会造成循环引用,而导致内存泄露。以上是Jscore的基本使用,比较简单

  8. Swift WKWebView的js调用swift

    最近项目需求,需要用到JavaScriptCore和WebKit,但是网上的资源有限,而且比较杂,都是一个博客复制另外一个博客,都没有去实际敲代码验证,下面给大家分享一下我的学习过程。

  9. Swift WKWebView的swift调用js

    不多说,直接上代码:在html里面要添加的的代码,显示swift传过去的参数:这样就实现了swift给js传参数和调用!

  10. 在 Swift 專案中使用 Javascript:編寫一個將 Markdown 轉為 HTML 的編輯器

    你有強烈的好奇心,希望在你的iOS專案中使用JavaScript。jscontext中的所有值都是JSValue對象,JSValue類用於表示任意類型的JavaScript值。因此,我們既需要寫Swift代碼也要寫JavaScript代碼。此外,我們還會在JavaScript中按照這個類的定義來創建一個對象并對其屬性進行賦值。從Swift中呼叫JavaScript就如介紹中所言,JavaScriptCore中最主要的角色就是jscontext類。一個jscontext對象是位於JavaScript環境和本

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部