`
115893520
  • 浏览: 140558 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JSP2.0标签学习笔记

阅读更多

JSP2.0标签学习笔记 说明
本文档是学习tomcat中例子的笔记,并没有参考相应的说明文档,因此不能保证本文观点的正确性。

1. JSP2.0标签使用方法
JSP2.0中标签的使用由多个部分组成:

(1) WEB_INF/web.xml中添加标签引用

(2) 标签的实现,可能是class也可能是web templet

(3) 在jsp文件中添加引用

在实际使用中,分析jsp2.0标签可以先从jsp文件入手,然后再分析web.xml及相应的标签库文件。

1.2 基本标签的使用方法
1.2.1 jsp文件中的标签引用及使用方法
以下是一个简单的jsp文件:

<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>

<html> <body> <mytag:helloWorld/> </body></html>

说明:

(1) 首先以<%@ taglib prefix="mytag" uri="…" %>说明标签前缀及该前缀引用的标签所在路径,在这个例子中uri值是一个相对路径(本地路径),即当前项目根目录下WEB-INF/ jsp2/ jsp2-example-taglib.tld。如果使用的是本地路径就不需要在web.xml中配置路径映射了;

(2) 指定了标签前缀后,在jsp页面的body内就可以使用这个前缀来引用标签库中的指定标签了,如<mytag:helloWorld/>,就是引用mytag所指定的标签库中的helloWorld标签。

1.2.2 web.xml中的配置
如果在上述例子中使用的不是本地路径,那么就需要在web.xml中配置路径转换,如使用:<%@ taglib prefix="mytag" uri=" http://mytaglib/myTestTags1 " %>来引用标签库,那么就需要在web.xml文件的jsp-config节点中添加如下配置:

<taglib>

<taglib-uri>http://mytaglib/myTestTags1</taglib-uri>

<taglib-location>/WEB-INF/jsp2/jsp2-example-taglib.tld </taglib-location>

</taglib>

JSP解释器会将http://mytaglib/myTestTags1 根据web.xml中的配置转化为本地路径。当然<taglib- uri>中文本可以是任何值,但不能和其它的配置冲突,所以在规划时最好加上前缀,如:http://mytaglib 等。

1.2.3 标签库中的配置
在标签库中的配置实际上就是配置对实现类的引用,JSP解释器会根据jsp文件中对标签的引用,在标签库中找到相应的标签,然后再根据标签中的定 义调用具体的实现类,本例中在jsp文件中对标签的引用:<mytag:helloWorld/>,即引用了helloWorld这个标签, 这个标签在标签库中的定义如下:

<tag>
<description>Outputs Hello, World</description>
<name>helloWorld</name>
<tag-class>jsp2.examples.simpletag.HelloWorldSimpleTag</tag-class>
<body-content>empty</body-content>
</tag>
该标签由四个部分组成:

(1) description:描述该标签的作用

(2) name:标签的名字,该名字在jsp文件使用,相当由类名;

(3) tag-class:标签的实现索引,相当于类的实现;本例索引指定 jsp2.examples.simpletag.HelloWorldSimpleTag,是一个java的类文件,应放在 WEB_INF/classes/jsp2/examples/simpletag目录下的HelloWorldSimpleTag.class文件;

(4) body-content:在jsp文件中使用标签时,标签中的内容类别,本例的值是empty,表示helloWorld这个标签中没有内容。如果在 jsp页面中在该标签中加入了内容,如<mytag:helloWorld>hell</mytag:helloWorld>, 页面会报错,当然<mytag:helloWorld></mytag:helloWorld>是不会错的(注意不能有空格 式)。

1.2.4 类的实现
类HelloWorldSimpleTag实现如下:

package jsp2.examples.simpletag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class HelloWorldSimpleTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
getJspContext().getOut().write( "Hello, world!" );
}}
说明:

(1) jsp标签调用的类一般继承于SimpleTagSupport

(2) SimpleTagSupport中实现了getJspContext()这个方法,这个方法可以获取指向jsp页面的输出流。

(3) getJspContext().getOut().write( "Hello, world!" ):输出Hellow,World!

1.3含有变量的tag配置
1.3.1 jsp文件中的标签引用及使用方法
以下是引用了带有变量标签的jsp页面:

<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/my_taglib.tld" %>
<html><body>
<mytag:repeat num1="15">
Invocation ${count} of 5<br>
</mytag:repeat>
</body>
</html>
说明:

(1) <mytag:repeat num="15">,输入参数的传入方法:即在标签中将要传入的参数做为标签的一个属性,并指定其属性值,本例中传入参数num1,它的值为15;

(2) ${count},在页面中显示输出参数的值,count是输出参数的名字

1.3.2 标签库中的配置
标签库中的相应配置如下:

<tag>
<description>Repeats the body of the tag 'num' times</description>
<name>repeat</name>
<tag-class>jsp2.examples.simpletag.RepeatSimpleTag</tag-class>
<body-content>scriptless</body-content>--标签内容是脚本
<variable>
<description>Current invocation count (1 to num)</description>
<name-given>count</name-given> --输出参数说明
</variable>
<attribute>
<name>num</name> --输入参数说明
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
该标签由六个部分组成:

(1) description:见上文

(2) name:见上文

(3) tag-class:见上文

(4) body-content:这个例子的值是scriptless,表示标签中的内容是脚本

(5) variable:输出参数,在jsp中使用${count}来引用这个输出变量的值,输出参数名并不是强制性的,这里只是一个约定,即要求repeat实现类最后有count这个输出参数,以便在jsp页中方便引用,如果没有也不会报错;

(6) attribute:输入参数,在jsp中使用< mytag:repeat num="5">来设置这个输入参数num,这个参数名是强制性的,即要在repeat实现类中有setNum这个方法,如果没有相应的方法jsp页面会报错;

1.3.3 类的实现
package jsp2.examples.simpletag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.util.HashMap;
import java.io.IOException;

public class RepeatSimpleTag1 extends SimpleTagSupport {
private int num;

public void doTag() throws JspException, IOException {
for (int i=0; i<num; i++) {
getJspContext().setAttribute("count", String.valueOf( i + 1 ) );
getJspBody().invoke(null);
} }

public void setNum(int num) {
this.num = num; }}
说明:

(1) getJspContext().setAttribute定义了输出到jsp页面的输出参数count,这里的count是一个字符串,它的值可以不与 标签库中variable定义相同,如,它可以是len,当然在jsp引用时应以这里为准,即使用${len}引用;

(2) setNum(int num)方法:接收输入参数,这个方法命名规则为set+输入参数名,该方法带一个参数,用于接收输入参数的值。

2.4 函数标签的定义方法
2.4.1 jsp文件中函数标签引用及使用方法
<%@ taglib prefix="my" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>
<html>
<body><span>${my:caps(“HELLO WORLD”)}</span></body>

</html>

说明:

(1) 函数标签的引用比其它标签的引用都要简单,它的引用与高级语言中的函数调用方法类似,直接在函数名后的括号后面输入相应的参数值即可,不需要另加用标签的其它属性来说明输入参数。

1.4.2 函数标签在标签库中配置
<function>
<description>Converts the string to all caps</description>
<name>caps</name>
<function-class>jsp2.examples.el.Functions</function-class>
<function-signature>java.lang.String caps( java.lang.String )</function-signature>
</function>
说明如下:

(1) 这种方法的定义包含在function元素中;

(2) name:函数名

(3) function-class:该函数真正的实现class,本例中,caps函数是由WEB_INF/classes/ jsp2/examples/el路径中的Functions类来实现的;

(4) function-signature:说明函数的输入及输出参数类型,不用指明参数名。

1.4.3 类的实现
package jsp2.examples.el;
import java.util.*;

public class Functions {
public static String caps( String text ) {
return text.toUpperCase();
}}
说明:

(1) 函数标签实现类就是普通的类,它不需要从某个父类继承;

(2) 函数标签实现类中必须有相应的方法与标签库中相应的函数字义相同(包括函数名,输入参数个数及输入参数类型,函数的返回值);

 

1.5 标签模板
标签模板的特点:

(1) 没有tld文件,在jsp中通过<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>引用,即使用tagdir代替了uri,这里的tags是一个文件夹,不是文件,在该文件夹中包含了所需的标签模板;

(2) 标签模板以.tag作为后缀,放在WEB-INF/目录下,可以新建目录把标签模板添加在里面,方便区分.

(3) 通过以下方式传入参数值:

<%@ attribute name="urlpath"  type="java.lang.Integer" required="true" rtexprvalue="true"%>

(4) name需要的参数名字,type是参数的类型,required 表示参数是否必须要传值,rtexprvalue是否使用正则表达式

(5) 标签模板是一个纯文本文件,类似于html文件,而不需要通过java的类来实现标签的定义;

(6) 个人认为标签模板的主要作用重在排版,而其它标签的作用重在功能的实现. 

 例子

   ex.tag

    <%@ tag body-content="scriptless" isELIgnored="false" pageEncoding="UTF-8"%>
    <%@ attribute name="say" required="true" rtexprvalue="true" type="java.lang.String"%>

    <%@ attribute name="who" required="true" rtexprvalue="true" type="java.lang.String"%>

       <div >
               who:${who}:say${sqy}<br>

       </div>

 

在JSP中用标签方法

    hillo.jsp

      <%@ taglib prefix="my" tagdir="/WEB-INF/tags"%>

              <my:ex say="helloword " who="Tom" ></my:ex>

说明

    标签中可以是用是bean,标签嵌套,JSTL标签等

 

  • 定义和使用函数

    1. 表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类 中的public static 方法编写。同时要将文件映射到TLD标志库文件中。
    2. 为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和的Java方法代码,如代码示例3所示,这里定义了一个静态方法,它接收两个字符串参数,把它们解析成整数并返回它们的和。
    3. 示例文件:Compute.java
    4. package jsp2.examples.el;
    5. import java.util.*;
    6. public class Compute {
           public static int add(String x, String y) {
              int a = 0;
              int b = 0;
              try {
                  a = Integer.parseInt(x);
                  b = Integer.parseInt(y);
              }catch(Exception e) {}
                  return a + b;
           }
      }
    7. 用javac把这段代码编译成功后,下一步就要把函数的签名映射到标签库。代码示例4说明了如何把add函数映射到包含函数实现和函数签名的类。后面将说明把这段代码添加到哪儿。
    8. 配置标记库描述文件 函数描述符
    9.     <function>

                  <description>add x and y</description>

                  <name>add </name>

                  <function-class>jsp2.examples.el.Compute
                          </function-class>

                  <function-signature>int
                          add(java.lang.String,java.lang.String)
                                  </function-signature>

          </function>
    10. 现在我们就可以编写一个JSP页面来使用这个函数。代码示例5是包含两个字段的一个表单,用户输入两个数字并按下“求和”按钮,就会调用上面的函数并把两个数相加,结果在同一个页面中显示出来。
    11. 代码示例5 : math.jsp
    12. <%@ taglib prefix="my"
              uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %>
    13. Functions
    14. Add Numbers

           X = 
           Y =



    15. The sum is: ${my:add(param["x"],param["y"])}
    分享到:
    评论

    相关推荐

      jsp2.0 学习笔记+完整源码

      jsp2.0 学习笔记+完整源码,包含了JSP开发中要用到的知识.

      JSP2.0技术手册(中文版)

      JSP2.0技术手册(中文版) JSP2.0技术手册(中文版)

      JSP 2.0 技术手册.rar

      《JSP 2.0 技术手册》图文并茂,以丰富的实例为引导,全面介绍了主流的Java Web开发技术——JSP2.0,重点介绍JAVA在展示层的两项重要技术:Java Servlet 与JavaServer Pages。它们是最重要的Java核心技术。对这两项...

      《JSP2.0技术手册》

      《JSP2.0技术手册》林上杰、林康司 ,电子工业出版社,适合初学者用。chm格式

      JSP自定义标签学习笔记

      本人自行研究JSP自定义标签的学习笔记 目录如下: 目录 一、概述 1 1.1 使用简单标签机制 2 1.2 使用标签文件 3 二 、自定义标签简介 3 2.1 自定义标签概念 3 2.2 标签相关概念 3 2.3 如何创建自定义标签 3 三、自...

      JSP2.0技术手册part1

      本书图文并茂,以丰富的实例为引导,全面介绍了主流的Java Web开发技术——JSP2.0,重点介绍JAVA在展示层的两项重要技术:Java Servlet 与JavaServer Pages。它们是最重要的Java核心技术。对这两项技术的深入了解,...

      JSP2.0技术手册完整版附源码.rar

      JSP2.0技术手册完整版附源码.rar JSP2.0技术手册完整版附源码.rar JSP2.0技术手册完整版附源码.rar JSP2.0技术手册完整版附源码.rar

      jsp2.0 自定义标签和自定标签函数

      文件包括jsp2.0 自定义标签的配置,和使用说明。 一看就明白。希望对你有用

      JSP2.0大学教程 覃华 教学PPT

      JSP2.0大学教程 覃华 教学PPT JSP2.0大学教程 覃华 教学PPT JSP2.0大学教程 覃华 教学PPT

      JSP2.0技术手册

      JSP2.0技术手册

      jsp 2.0技术手册中文版

      中文版jsp 2.0技术手册和Jstl标签

      JSP2.0技术手册 JSP2.0技术手册

      JSP2.0技术手册 JSP2.0技术手册 JSP2.0技术手册

      JSP 2.0 完整笔记+源码

      我在学习JSP 2.0 时作的完整笔记+源码,希望能对JSP的学习者有所帮助.

      JSP2.0技术手册完整版+源码

      JSP2.0技术手册完整版+源码 JSP2.0技术手册完整版+源码

      JSP 2.0技术手册 光盘

      本书图文并茂,以丰富的实例为引导,全面介绍了主流的Java Web开发技术——JSP 2.0,重点介绍Java在展示层的两项重要技术:Java Servlet与JavaServer Pages。它们是最重要的Java核心技术。对这两项技术的深入了解,...

      JSP2.0大学教程-覃华

      JSP2.0大学教程-覃华 JSP的基础教程,希望能够帮到大家!

      jsp2.0 技术手册

      《jsp2.0 技术手册》包括简介Servlet和JSP、Session Tracking、等 从入门到高级

      Jsp 2.0 大学教程

      Jsp 2.0 大学教程Jsp 2.0 大学教程Jsp 2.0 大学教程Jsp 2.0 大学教程Jsp 2.0 大学教程Jsp 2.0 大学教程

      JSP2.0 API chm

      JSP2.0的帮助文档,共享一下大家一起提高提高自己!~~

      JSP2.0技术手册pdf(带示例源码).zip

      书名:JSP 2.0 技术手册(电子书) 格式:PDF 出版:电子工业出版社 作者:林上杰、林康司 本书图文并茂,以丰富的实例为引导,全面介绍了主流的 Java Web 开发技术—— JSP 2.0,重点介绍Java在展示层的两项重要技术...

    Global site tag (gtag.js) - Google Analytics