欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一个开发人员眼中的JSP技术(下)

程序员文章站 2024-02-26 08:17:46
使用定制化的标签   尽管你可以在jsp页面中植入java代码并在服务器方执行,但是,jsp也支持使用定制标签来插入动态内容,它有一种机制可以让你在jsp页面中插入你自己的...
使用定制化的标签
  尽管你可以在jsp页面中植入java代码并在服务器方执行,但是,jsp也支持使用定制标签来插入动态内容,它有一种机制可以让你在jsp页面中插入你自己的、与html类似的标签。换句话说,你的jsp网页能够使用插入java代码的简单标签语法产生动态的内容。但定制标签的用处不是很大。

  创建一个定制标签比在jsp网页中使用简单的scriptlet要复杂得多,因为定制标签需要用几个步骤来把你的java组件和jsp代码连接起来。不过,定制标签在分发和重复使用的时候就非常简单了。对定制标签的支持将在jsp创建工具中实现。

  在下面的例子中产生动态内容的jsp网页就使用了定制标签。注意,在这个例子中我们不再需要引入java类、声明变量或写任何java代码:

  

  

  

today's menu



  

lunch



  

  

our special of the day



  

  

  从上面的语句中我们可以看出,这个页面明显比前面的scriptlet例子要简单许多,因为它没有包含初始化对象和执行相应的方法。但是jsp网页代码仅仅只是一部分;对于每一个定制标签,还包括下面的三个组件:

  (1)包含定制标签的网页,比如说,上面的代码片断中就使用了insertcatchofday 的定制标签。在使用定制标签之前,页面必须指定taglib directive来提供标签库描述符(对标签定义)的位置。当执行定制标签的时候,网页还有代表性的定义了一个和多个标签属性(比如在这个例子中的“meal”)来确定动态内容。

  (2)标签库描述符。它是一个定义了定制化标签并把它和tag handler连接起来的xml文件。一个标签库描述符包含了标签的不同属性,相关tag handler的名称(位置)以及jsp引擎需要处理定制标签的其他信息。

  (2)tag handler。 它是一个与定制标签联合执行操作的java类。例如,在上面的insertcatchofday标签中,tag handler就是执行数据库查询得到相应菜单项的java类。

  我们已经看到了一个使用定制标签的jsp网页,下面让我们来看一看另外的两个组件。

  tag handler

  tag handler是一个与servlet比较相似的java类。但是servlet能够执行servlet接口,还能够被html get或post请求所执行。tag handler也能够执行一个标签接口(javax.servlet.jsp.tag)以及在定制标签被jsp引擎处理的时候执行。

  如果定制标签包含了属性,那么tag handler就必须定义这些属性以及每一个的get/set方法。例如,当定义上面insertcatchofday定制标签的tag handler的时候,我们必须定义“meal”属性和与它相关的get和set 方法:

  private string meal = null;

  public void setmeal(string s) {

  meal = s;

  }

  public string getmeal() {

  return meal;

  }

  tag library descriptor

  如果你所有的时间都在处理java技术而不知道关于 xml方面的东西,那么标签库描述符组件可能看起来会比较陌生。但是你也不需要担心,因为你不需要学习一门新的编程语言。标签库描述符仅仅使用与html相似的标签语法来定义定制标签的名字和属性,这更象定义一个对象。

  下面的标签库描述符定义了insertcatchofday标签。注意,这个文件定义了定制标签的名称,属性和相关的tag handler类:

   xml="" version="1.0"?>

  

  

  insertcatchofday

  com.sun.catchofdayhandler

  

  queries menu database for the catch of the day。

  


  

  meal

  

  


  


  与定义属性的名称一样,标签库描述符也能够定义数据类型并指定其属性(无论是否需要);在tag handler被执行之前,它允许jsp引擎去做某些错误检查。还有其他的信息,比如说为了使用jsp创建工具,库名和版本号也可以包含在标签库中。

更多的例子
  在下面的例子中,第一个例子在jsp页面中使用了http请求对象 (httpservletrequest) 来判断用户浏览器的版本并从三个html页面中的一个中返回相应的内容:

  

  

  

  

  

  
  agent = request.getheader("user-agent");

  if ( agent.startswith("mozilla/4.0") {

  %>

  

  

  
  }

  else if ( agent.startswith("mozilla/3.0") {

  %>

  

  

  
  }

  else {

  %>

  

  

  
  }

  %>

  

  

  注意:此页面无须声明或初始化http请求对象就可以直接对它进行访问。请求和响应(httpservletresponse)对象都能够隐含地在jsp 页面中使用。和servlet一样,jsp页面能够使用请求对象从html窗体中获得参数值。

  

  

  

  

  

  

  

  

here are your current selections:



  
  

  selections = request.getparametervalues("items");

  if (selections != null) {

  %>


      
      for(int x = 0; x
      %>


  •    :

      
      }

      %>

  }

  else {

  %>

  

(no items selected)



  
  }

  %>

  


  

  

  

  在这个例子中,当每一个参数值都被读取以后,javabean组件便查询所需要的信息。在jsp网页中使用bean这种方法可以容易地从数据库中返回动态web内容。

结论
  如果你正在寻找一种能简便建立连接服务器方java组件的web程序的方法,那么javaserver page正是你所需要的。除了ejb,rmi,jdbc和javabean外,分离html表述代码和web程序,也使得jsp网页组织起来运行变得更容易了。事实上,由于web设计人员几乎无须java开发人员的帮助就可以建立jsp页面,所以你再也不同担心创建web网页和写html代码了。

  <全文完>