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标签等
定义和使用函数
-
表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类
中的public static
方法编写。同时要将文件映射到TLD标志库文件中。
- 为了说明函数的使用,我们举一个简单的例子,把两个数相加。首先要编写求两数之和的Java方法代码,如代码示例3所示,这里定义了一个静态方法,它接收两个字符串参数,把它们解析成整数并返回它们的和。
-
示例文件:Compute.java
- package jsp2.examples.el;
- import java.util.*;
- 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;
}
}
- 用javac把这段代码编译成功后,下一步就要把函数的签名映射到标签库。代码示例4说明了如何把add函数映射到包含函数实现和函数签名的类。后面将说明把这段代码添加到哪儿。
-
配置标记库描述文件
函数描述符
- <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>
- 现在我们就可以编写一个JSP页面来使用这个函数。代码示例5是包含两个字段的一个表单,用户输入两个数字并按下“求和”按钮,就会调用上面的函数并把两个数相加,结果在同一个页面中显示出来。
-
代码示例5
: math.jsp
- <%@ taglib prefix="my"
uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %>
- Functions
-
Add Numbers
X =
Y =
-
The sum is: ${my:add(param["x"],param["y"])}
分享到:
相关推荐
**JSP 2.0 学习笔记及完整源码详解** JSP 2.0(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者在HTML、XML或其他标记语言文档中嵌入Java代码,以实现服务器端的动态内容生成。本资料包包括了JSP 2.0...
这份完整的笔记和源码集合为学习JSP 2.0提供了丰富的实践材料。 1. **基本概念** JSP是一种服务器端脚本语言,允许开发者在HTML或XML文档中嵌入Java代码,以生成动态内容。JSP页面在服务器上被编译为Java Servlet...
EL 是 JSP 2.0 引入的一种简洁的表达方式,用于访问 JSP 页面中的数据。它简化了获取和设置页面上下文中的属性,例如 `${user.name}` 可以直接获取 `user` 对象的 `name` 属性,无需使用 `<%= %>` 或 `<jsp:...
本篇笔记将详细介绍如何在MyEclipse环境中配置Struts2.0,并逐步演示从创建运行环境到实现简单的验证和自定义类型转换的过程。 首先,我们需要准备运行环境。MyEclipse 6.0 和 Tomcat 5.5 是开发Struts2.0应用的...
通过阅读《Jsp笔记.pdf》,你将能够深入学习JSP 2.0的核心概念,了解如何使用JSP来创建动态Web应用,掌握JSP的各种元素、内置对象、动作标签和新特性,从而提升你的Web开发技能。结合实际项目实践,你可以更好地应用...
【韩顺平jsp九讲笔记】是一份详细记录了韩顺平老师关于JSP(Java Server Pages)技术的九次讲解的学习资料。这份笔记涵盖了JSP的基础知识、核心概念以及实际应用,旨在帮助学习者深入理解和掌握JSP编程。韩顺平老师...
5. **EL(Expression Language)**:它是JSP 2.0引入的一种轻量级表达式语言,用于访问JavaBean或其他Java对象的属性。 6. **JSTL(JavaServer Pages Standard Tag Library)**:一套标准的标签库,提供诸如流程...
本篇学习笔记主要关注JSP的标签应用以及四个基本范围的概念。 **JSP的四种范围** 1. **Page范围**:这是最小的范围,只存在于当前的JSP页面中。如果在Page范围内设置了一个属性,当该页面执行完毕,这个属性就会...
### 良葛格JspServlet学习笔记 #### 一、引言 在现代Web开发领域,特别是Java EE平台中,JSP (JavaServer Pages) 和 Servlet 技术扮演着非常重要的角色。这两种技术共同构成了Java Web应用的基础,分别侧重于用户...
【标题】:jsp学习笔记,不错的入门级资料 【描述】:这是一份在达内科技学习过程中编写的jsp学习笔记,旨在为初学者提供一个基础到深入的学习路径。笔记内容丰富,覆盖了jsp的基本概念、语法特性以及常用功能,...
"javaweb学习笔记和源码"这个压缩包文件提供了学习JSP(JavaServer Pages)的资源,这对于初学者理解Web开发概念以及实践编程至关重要。以下是围绕这个主题的详细知识点讲解: 1. **JSP简介**: JSP是Java平台上的...
JSP2.0引入了三种新的标签元素: 1. **声明标签(declaration tag)**:`!声明%>`,在翻译阶段生成Java代码,可以声明变量或方法。 2. **脚本标签(scriptlet tag)**:`内容%>`,内容会被放入_jspService()方法中...
总结,"魔乐在线jsp培训笔记"提供的内容涵盖了JSP的基础知识、核心概念以及实际应用,对于想要学习或提升JSP技能的IT从业者来说是一份宝贵的资源。通过深入学习并实践这些知识点,可以有效提高开发Web应用的能力。
### JSP小笔记知识点详述 #### JSP概论与历史背景 - **JSP**:全称为**JavaServer Pages**,是一种基于Java技术的服务器端动态网页开发技术。它结合了HTML、XML以及Java的强大功能,使得开发者能够创建出高度交互...
此外,你还会学到EL(Expression Language)和JSP 2.0以后引入的“自定义标签”(Tag Files),这些都极大地提高了JSP的可读性和可维护性。 SCWCD认证是Java Web开发者的权威证明,涵盖Servlet和JSP的相关知识。...
- EL是JSP2.0中的表达式语言,用于在页面中简便地访问和操作数据,如`${sessionScope.user.sex}`。 - JSTL是标准标签库,包含多种标签集合,如核心标签库`<c:...>`用于逻辑判断和迭代,XML解析标签`<x:...>`,国际...
JSTL 1.02是其最终发布的版本,但随着JSP 2.0规范的推出,JSTL已成为标准组件。 **JSTL的核心特性包括:** 1. **标签库**:JSTL提供了多个预定义的标签库,用于处理不同的任务,如Core、XML processing、I18N ...
3. **OGNL与EL的区别**:了解两者在数据绑定上的差异,EL(Expression Language)是JSP 2.0引入的标准,通常与Servlet 2.5及更高版本一起使用。 4. **JSTL与JDBC**:学习如何使用JSTL的JDBC标签执行数据库查询和操作...
这篇学习笔记将主要围绕JSP展开,探讨其基本概念、语法以及如何在实际开发中运用。 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码,从而实现服务器端的动态内容生成。JSP...
### JAVA学习笔记1:深入解析J2EE框架与关键技术 #### J2EE模式与Value Object概念 在JAVA学习之旅中,深入理解J2EE(Java 2 Platform, Enterprise Edition)框架是至关重要的一步。J2EE是专为开发企业级应用而...