`
115893520
  • 浏览: 140292 次
  • 性别: 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"])}
    分享到:
    评论

    相关推荐

      基于百度地图实现的定位功能.zip

      android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

      加载本地图片,绝对不会出现OOM.zip

      android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

      2015年中国移动电子竞技游戏发展趋势报告(1).zip

      2015年中国移动电子竞技游戏发展趋势报告(1).zip

      CKplayer-v6.8.zip

      ckplayer是一款在网页上播放视频的免费的播放器,功能强大,体积小巧,跨平台,使用起来随心所欲。 CKplayer播放器主要以adobe的flash(所使用的版本是CS5)平台开发,所以在支持flash插件的平台和浏览器上都可以使用,而无需下载其它插件,如果你需要修改完整版里提供的相关的flash源文件,请使用adobe的flash cs5以上版本打开源文件修改。 ckplayer同时也支持

      46.书籍学习平台的设计与实现-Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)论坛

      46.书籍学习平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)论坛,公告,付费专区,免费专区,销售,会员办理,书籍分类 详细设计文档链接:http://t.csdnimg.cn/GSeDN 内容概要: 全套项目源码+详尽文档,一站式解决您的学习与项目需求。 适用人群: 计算机、通信、人工智能、自动化等专业的学生、老师及从业者。 使用场景及目标: 无论是毕设、期末大作业还是课程设计,一键下载,轻松部署,助您轻松完成项目。 项目代码经过调试测试,确保直接运行,节省您的时间和精力。 其他说明: 项目整体具有较高的学习借鉴价值,基础能力强的可以在此基础上修改调整,以实现不同的功能。

      密码学实验报告2.docx

      密码学实验报告2.docx

      各种旋转动画的ImageView(1).zip

      android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

      S7200基本编程指令.ppt

      S7200基本编程指令.ppt

      基于python+OpenCV的火车票识别源码+使用文档+全部资料(优秀项目).zip

      【资源说明】 基于python+OpenCV的火车票识别源码+使用文档+全部资料(优秀项目).zip基于python+OpenCV的火车票识别源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

      WordPress.zip

      android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

      移动机器人机械臂的设计小论文.doc

      移动机器人机械臂的设计小论文.doc

      基于Python+OpenCV+tinker的指纹识别系统,使用的硬件为AS608源码+使用文档+全部资料(优秀项目).zip

      【资源说明】 基于Python+OpenCV+tinker的指纹识别系统,使用的硬件为AS608源码+使用文档+全部资料(优秀项目).zip基于Python+OpenCV+tinker的指纹识别系统,使用的硬件为AS608源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

      xiuno模板知乎蓝魔改版源码附多个插件.zip

      xiuno模板知乎蓝魔改版源码附多个插件

      2022年 【24页】从孪生到融生,AIGC成为长期方向.zip

      2022年 【24页】从孪生到融生,AIGC成为长期方向.zip

      [信息与通信]使用EMIF将Xilinx_FPGA与TI_DSP平台接口.pdf

      [信息与通信]使用EMIF将Xilinx_FPGA与TI_DSP平台接口.pdf

      基于Opencv+Filterpy实现YOLOV3-SORT车辆跟踪与车流统计算法源码+使用文档+全部资料(优秀项目).zip

      【资源说明】 基于Opencv+Filterpy实现YOLOV3-SORT车辆跟踪与车流统计算法源码+使用文档+全部资料(优秀项目).zip基于Opencv+Filterpy实现YOLOV3-SORT车辆跟踪与车流统计算法源码+使用文档+全部资料(优秀项目).zip基于Opencv+Filterpy实现YOLOV3-SORT车辆跟踪与车流统计算法源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

      仿QQ消息列表(ListView)滑动删除效果源码.zip

      android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台

      最新招标流程图.pdf

      1.招标投标活动不受地区或者部门的限制。任何单位和个人不得违法限制或者排斥本地区、 本系统以外的法人或者其他组织参加投标,不得以任何方式非法干涉招标投标活动。 2.招标人设有标底,标底必须保密 3.可以不招标的情况之一都可以不招标:①不可替代②采购人自行建设、生产或提供③已通 过招标方式特许的④需要向原中标人采购的,否则影响配套要求的,但是不得超过合同金额 的10%⑤国家规定的其他特殊情况

      C++基于自实现OpenCV图像处理函数的静态车道线检测项目源码+使用文档+全部资料(优秀项目).zip

      【资源说明】 C++基于自实现OpenCV图像处理函数的静态车道线检测项目源码+使用文档+全部资料(优秀项目).zipC++基于自实现OpenCV图像处理函数的静态车道线检测项目源码+使用文档+全部资料(优秀项目).zipC++基于自实现OpenCV图像处理函数的静态车道线检测项目源码+使用文档+全部资料(优秀项目).zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

      基于单片机的遥控机械臂设计.doc

      基于单片机的遥控机械臂设计.doc

    Global site tag (gtag.js) - Google Analytics