`
puppy117
  • 浏览: 52229 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

JSP2.0新特性

阅读更多
一、JSP定义
JSP 属性定义使用<jsp-property-group/>元素配置,主要包括如下四个方面。
·是否允许使用表达式语言:使用<el-ignored/>元素确定,默认值为false 。
·是否允许使用Java 脚本:使用<scripting-invalid/>元素确定,默认值为false 。
·声明JSP 页面的编码:使用<page-encoding/>元素确定。
·使用隐式包含:使用<include-prelude/>和<include-coda/>元素确定。
例:
<?xm1 version="1.0" encoding="ISO-8859-1"?>
<!-- Serv1et2.4 以上版本的Web 应用配置的根元素 -->
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org /2 001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	version="2.4">
	<!-- 关于JSP 的配置信息 -->
	<jsp-config>
		<jsp-property-group>
			<!-- 对哪个文件应用配置二 -->
			<url-pattern>/test1.jsp</url-pattern>
			<!-- 忽略表达式语言 -->
			<el-ignored>true</el-ignored>
			<!-- 页面编码方式-->
			<page-encoding>GBK</page-encoding>
			<!-- 不允许使用Java 脚本 -->
			<scripting-invalid>true</scripting-invalid>
			<!-- 隐式导入页面头-->
			<include-prelude>/inc/top.jspf</include-prelude>
			<!-- 隐式导入页面尾-->
			<include-coda>/inc/bottom.jspf</include-coda>
		</jsp-property-group>
		<jsp-property-group>
			<!-- 对哪个文件应用配置-->
			<url-pattern>/test2.jsp</url-pattern>
			<el-ignored>false</el-ignored>
			<!-- 页面编码方苯-->
			<page-encoding>GBK</page-encoding>
			<!-- 允许使用Java 脚本-->
			<scripting-invalid>false</scripting-invalid>
		</jsp-property-group>
	</jsp-config>
</web-app>

二、表达式语言
使用表达式语言可以以标记格式方便地访问JSP 的隐含对象和JavaBeans 组件
表达式语言的语法格式是:${expression}
(1)表达式语言使用算术和逻辑运算
表达式语言支持的算术运算符非常多,在Java 语言里支持的算术运算符,表达式语
言都可以使用。例:${6-5}输出1,而\${6-5}则直接输出${6-5}
注意:如需要在支持表达式语言的页面中正常输出"$"符号,则在"$"符号前加特义字符"γ' ,否则系统以为"$"是表达式语言的标记。
逻辑运算符也适用。
(2)表达式语言的内置对象
使用表达式语言可以直接获取请求参数,可获取页面中某个JavaBean 的属性值,获取请求头及获取session 属性值等,这些都得益于表达式语言的内置对象。
表达式语言包含如下11 个内置对象。
• pageContext: 代表该页面的pageContext 对象,与JSP 的pageContext 内置对象相同。
• pageScope: 用于获取page 范围的属性值。
• requestScope: 用于获取request 范围的属性值。
• sessionScope: 用于获取session 范围的属性值。
• applicationScope: 用于获取application 范围的属性值。
• param: 用于获取请求的参数值。
• paramValues: 用于获取请求的参数值,与param 的区别在于,该对象用于获取属
性值为数组的属性值。
• header: 用于获取请求头的属性值。
• headerValues: 用于获取请求头的属性值,与header 的区别在于,该对象用于获
取属性值为数组的属性值。
• initParam: 用于获取请求Web 应用的初始化参数。
• cookie: 用于获取应用的Cookie 值。
例:
<%@page contentType="text/html; charset=gb2312" language="java"%>
<html>
	<head>
		<title>表达式语言-内置对象</title>
	</head>
	<body>
		<h2>
			表达式语言-内置对象
		</h2>
		<hr>
		请输入你的名字:
		<!-- 通过表单提交请求参数 -->
		<form action="test.jsp" method="post">
			<!-- 通过${param[ 'name']} 获取请求参数 -->
			你的名字=
			<input type="text" name="name" value="${param['name']}">
			<input type="submit" value="提交">
		</form>
		<%
			session.setAttribute("user", "abc");
		%>
		<br>
		<table border="1" bgcolor="aaaadd">
			<tr>
				<td>
					<b>表达式语言</b>
				</td>
				<td>
					<b>计算结果</b>
				</td>
			<tr>
				<!-- 使用两种方式获取请求参数值-->
				<td>
					\${param.name}
				</td>
				<td>
					${param.name}&nbsp;
				</td>
			</tr>
			<tr>
				<td>
					\${param["name"] }
				</td>
				<td>
					${param["name"] }&nbsp;
				</td>
			</tr>
			<!-- 获取请求头信息-->
			<tr>
				<td>
					\${header.host}
				</td>
				<td>
					${header.host}
				</td>
			</tr>
			<tr>
				<td>
					\${header["accept"]}
				</td>
				<td>
					${header["accept"]}
				</td>
			</tr>
			<!-- 获取初始化参数-->
			<tr>
				<td>
					\${initParam["author"]}
				</td>
				<td>
					${initParam["author"] }
				</td>
			</tr>
			<!-- 获取sesslon 属性-->
			<tr>
				<td>
					\${sessionScope["user"]}
				</td>
				<td>
					${sessionScope["user"]}
				</td>
			</tr>
		</table>
	</body>
</html>

(3)表达式语言的自定义函数
下面介绍定义函数的开发过程。
(a)开发函数处理类:函数处理类就是普通类,这个普通类中包含若干个静态方法,
每个静态方法都可定义成一个函数。
public class Functions {
	// 对字符串进行反转
	public static String reverse(String text) {
		return new StringBuffer(text).reverse().toString();
	}
	// 统计字符串的个数
	public static int countChar(String text) {
		return text.length();
	}
}

(b)使用标签库定义函数,配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 标签库配置文件的根元素 -->
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/200l/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">
	<jsp-version>2.0</jsp-version>
	<tlib-version>l.O</tlib-version>
	<!-- 定义第一个函数-->
	<function>
		<!-- 定义第一个函数:reverse-->
		<name>reverse</name>
		<!-- 定义函数的处理类 -->
		<function-class>lee.Functions</function-class>
		<!-- 定义函数的对应的方法-->
		<function-signature>
			java.lang.String reverse( java.lang.String )
		</function-signature>
	</function>
	<function>
		<!-- 定义第二个函数: countChar -->
		<name>countChar</name>
		<!-- 定义函数的处理类 -->
		<function-class>lee.Functions</function-class>
		<!-- 定义函数的对应的方法 -->
		<function-signature>
			int countChar( java.lang.String )
		</function-signature>
	</function>
</taglib>

(c)与自定义标签库相同,在web.xml 文件中要增加标签库定义
(d)在JSP 页面中使用函数时也需要先导入标签库,然后再使用函数。下面是使用函数的JSP 页面片段:
<%@page contentType="text/html; charset=gb2312" language="java"%>
<!-- 导入标签库 -->
<%@taglib prefix="my" uri="/tags/mytag"%>
<html>
	<head>
		<title>表达式语言-自定义函数</title>
	</head>
	<body>
		<h2>
			表达式语言自定义函数
		</h2>
		<hr>
		请输入---个字符串:
		<form action="functions.jsp" method="post">
			字符串=
			<input type="text" name="name" value="S{param['name']}">
			<input type="submit" value="提交">
		</form>
		<table border="l" bgcolor="aaaadd">
			<tr>
				<td>
					<b>表达式语言</b>
				</td>
				<td>
					<b>计算结果</b>
				</td>
			<tr>
			<tr>
				<td>
					\${param["name"] }
				</td>
				<td>
					${param["name"]}&nbsp;
				</td>
			</tr>
			<!-- 使用reverse 函数 -->
			<tr>
				<td>
					\${my:reverse(param["name"])}
				</td>
				<td>
					${my:reverse(param["name"])}&nbsp;
				</td>
			</tr>
			<tr>
				<td>
					\${my:reverse(my:reverse(param["name"]))}
				</td>
				<td>
					${my:reverse(my:reverse(param["name"]))}&nbsp;
				</td>
			</tr>
			<!-- 使用countChar 函数 -->
			<tr>
				<td>
					\${my:countChar(param["name"])}
				</td>
				<td>
					${my:countChar(param["name"])}&nbsp;
				</td>
			</tr>
		</table>
	</body>
</html>

注意:函数处理类的方法必须是public static,因为这些方法是直接调用,无须实例化
自定义函数,也提供了类似于自定义标签库的作用,使用简单的指令就可以完成复杂的功能。与自定义标签库不同的是,可以在表达式语言中直接使用函数
三、简化的自定义标签
无须重写烦琐的doStartTag和doEndTag 等方法。即使是带标签体的标签,也与不带标签体的标签处理方式完全相同,无须重写doAfterBody 等方法,通常只需重写doTag 方法。
(1)书写标签处理类。
JSP 2.0 的标签处理类继承SimpleTagSupport 类,通常只需重写doTag 方法,即使是带标签体的标签,通常也只需重写doTag 方法。下面是标签处理类的代码:
// 简单标签处理类,继承SimpleTagSupport 类
public class MylteratorTag extends SimpleTagSupport {
	// 标签属性
	private String bean;
	// 标签属性必须的setter 和getter 方法
	public void setBean(String bean) {
		this.bean = bean;
	}
	public String getBean() {
		return bean;
	}
	// 标签的处理方法,简单标签处理类只需要重写doTag 方法
	public void doTag() throws JspException, IOException {
		// 从page scope 中获取名为bean 的集合属性
		Collection<String> itemList = (Collection<String>) getJspContext().getAttribute(bean);
		// 遍历集合
		for (String s : itemList) {
			// 将集合的元素设置到page 范围
			getJspContext().setAttribute("item", s);
			getJspBody().invoke(null);
		}
	}
}

(2) 编写标签库文件
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">
	<!-- JSP 版本 -->
	<jsp-version>2.0</jsp-version>
	<tlib-version>1.0</tlib-version>
	<!-- 定义第一个标签 -->
	<tag>
		<!-- 定义标签名  -->
		<name>helloWorld</name>
		<!-- 定义标签的处理类 -->
		<tag-class>lee.HelloWorldSimpleTag</tag-class>
		<!-- 定义标签体为空 -->
		<body-content>empty</body-content>
	</tag>
	<!-- 定义第二个标签 -->
	<tag>
		<!-- 定义标签名 -->
		<name>iterator</name>
		<!-- 定义标签处理类 -->
		<tag-class>lee.MylteratorTag</tag-class>
		<!-- 定义标签体,该标签体是不允许脚本的标签 -->
		<body-content>scriptless</body-content>
		<!-- 定义标签属性 -->
		<attribute>
			<name>bean</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

(3)在web.xml 文件中,定义了标签库URI
(4)在JSP 页面中使用标签时,同样也需要先导入标签库,然后使用标签
四、Tag File支持
Tag File 是自定义标签的简化用法,使用Tag File 可以无须定义标签处理类和标签库文件,甚至无须在web.xml 文件中定义标签库,但仍然可以在JSP 页面中使用自定义标签。
下面以Tag File 建立一个迭代器标签,其步骤如下。
(1)建立Tag 文件,在Tag File 的自定义标签中, Tag File 代理了标签处理类,它的格式类似于JSP 文件。可以这样理解:如使用JSP 代替Servlet 作为表现层一样, Tag File使用了更简单的Tag File 代替了标签处理类。
Tag File 具有以下5 个编译指令。
• taglib: 作用与JSP 文件中的taglib 指令效果相同,用于导入其他标签库。
• include: 作用与JSP 文件中的include 指令效果相同,用于导入其他JSP ,或静态页面。
• tag: 作用类似于JSP 文件中的page 指令,有pageEncoding 、body-content 等属性,用于设置页面编码等属性。
• attribute: 用于设置自定义标签的属性,类似于自定义标签处理类中的标签属性。
• variable: 用于设置自定义标签的变量,这些变量将传回JSP 页面使用。
下面是迭代器标签的Tag File ,这个Tag File 的语法与JSP 语法非常相似:
<%@ tag pageEncoding="GBK"%>
<!-- 使用JSTL 的标签 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
<!-- 定义了四个标签属性-->
<%@ attribute name="color"%>
<%@ attribute name="bgcolor"%>
<%@ attribute name="title"%>
<%@ attribute name="bean"%>
<table border="l" bgcolor="${color}" bordercolor="OOOOOO">
	<tr>
		<td>
			<b>${title}</b>
		</td>
	</tr>
	<c:forEach items="${bean}" var="var">
		<tr>
			<td bgcolor="${bgcolor}">
				${var}
				<ltd>
		</tr>
	</c:forEach>
</table>

这个Tag File 的命名必须遵守如下规则: tagName.tag。即Tag File 的文件名就是标签名,文件名后缀是tag。将该文件存放在某个路径下,这个路径就是标签库路径。
(2) 在页面中使用自定义标签时,需要先导入标签库,再使用标签。使用标签与普
通标签用法完全相似,只在导入标签时存在一些差异。由于此时的标签库没U有RI,只
有标签库路径。因此导入标签时,使用如下语法格式:
<%@ taglib prefix="tagPrefix" tagdir="path"%>

其中, prefix 与之前的taglib 指令的prefix属性完全相同,用于确定标签前缀:而tagdir标签库路径下存放很多Tag File,每个Tag File 对应一个标签。
下面是使用标签的JSP 页面代码:
<!-- 导入标签 -->
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags"%>
<%@ page contentType="text/html;charset=GBK" import="java.util.*"%>
<html>
	<head>
		<title>法代器tag file</title>
	</head>
	<body>
		<h2>
			迭代器tag file
		</h2>
		<hr>
		<%
			//创建集合对象,用于迭代
			List<String> a = new ArrayList<String>();
			a.add("hello");
			a.add("world");
			a.add("java");
			//将集合对象放入页面范围
			pageContext.setAttribute("a", a);
		%>
		//使用自定义标签
		<tags:iterator color="#99dd99" bgcolor="#9999cc" title="迭代器"
			bean="${pageScope.a}" />
	</body>
</html>

tags 表明该标签使用IWEB-INF/tags 路径下的Tag File 处理标签;而iterator 是标签名,对应在标签库路径下包含iterator.tag 文件,由该文件负责处理标签。
Tag File 是自定义标签的简化。事实上,就如同JSP 文件会编译成Servlet 一样, Tag File 也会编译成Tag 处理类,自定义标签的后台依然由标签处理类完成,而这个过程由容器完成
分享到:
评论

相关推荐

    Tag的使用<JSP 2.0新特性>

    本实例将深入探讨`Tag`的使用,以及如何通过JSP 2.0新特性来简化自定义标签的开发过程。 自定义标签的核心在于Tag Handler,这是处理特定标签行为的Java类。在JSP 2.0之前,创建自定义标签需要编写复杂的TLD(Tag ...

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

    JSP 2.0在JSP 1.2的基础上做了许多改进,引入了许多新特性和功能: - **表达式语言(EL, Expression Language)**:EL是一种轻量级的脚本语言,用于简化JSP页面中的数据访问。它提供了一种简洁的方式来获取和设置...

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

    通过覃华教授的JSP2.0教学PPT,学习者可以系统地学习JSP2.0的核心概念、新特性,以及如何利用这些特性进行实际的Web应用开发。通过实践项目,加深理解并提升技能,为将来从事Java Web开发打下坚实基础。

    jsp 2.0技术手册中文版

    总之,《jsp 2.0技术手册中文版》涵盖了JSP 2.0的核心概念、新特性和实践技巧,是学习和掌握这一技术的重要参考资料。通过深入阅读和实践,开发者可以更好地利用JSP 2.0构建高效、可维护的Web应用程序。

    《JSP2.0技术手册》

    1. **表达式语言(EL)**:EL(Expression Language)是JSP 2.0引入的新特性,用于简化页面中的数据绑定。它提供了一种简洁的语法,可以方便地访问JavaBean的属性,无需使用脚本let或JSP动作。 2. **标准标签库(JSTL)...

    jsp2.0基本语法

    9. **JSP 2.0新特性** - **内置对象**:如`pageContext`、`session`、`request`等,无需再通过`jsp:useBean`声明。 - **分离Java代码**:鼓励使用Servlet 2.4的MVC模式,将业务逻辑移至Java类中,JSP仅用于显示...

    JSP 2.0技术手册

    JSP 2.0新特性** - **标签文件(Tag Files)**:JSP 2.0引入了新的标签文件格式,允许将自定义标签的实现与声明分开,提高了可读性和可重用性。 - **EL(Expression Language)**:增强了表达式语言,使其更加强大...

    JSP2.0技术手册及光盘源码

    - **JSP 2.0 新特性**:详细介绍JSP 2.0相对于1.2版本的新特性,包括自定义标签的开发和使用。 - **开发实例**:提供丰富的示例代码,帮助读者理解和应用JSP 2.0技术。 **3. 光盘源码分析** 光盘源码通常包含与...

    jsp2.0技术手册

    **正文** ...综上,《JSP2.0技术手册》涵盖了JSP2.0的各个方面,包括核心概念、新特性和实战应用,是学习和进阶JSP技术的重要参考资料。通过深入学习,开发者能够构建高效、易于维护的Web应用程序。

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

    **二、JSP 2.0 的新特性** 1. **表达式语言(EL, Expression Language)**:EL简化了页面中的数据绑定,使得在JSP页面中获取和设置JavaBean属性变得更为方便。 2. **JSTL(JavaServer Pages Standard Tag Library)*...

    JSP2.0大学教程-覃华

    JSP 2.0是这个技术的一个重要版本,它引入了许多改进和新特性,使得开发Web应用程序更加便捷和高效。本教程由覃华编写,旨在为大学学习者提供全面的JSP 2.0知识,帮助他们掌握这一核心技术。 **JSP 2.0 的主要特性*...

    JSP 2.0开发指南或JSP 2.0技术详解手册

    此外,手册还深入探讨了JSP 2.0中的新特性,如表达式语言(EL)、JSP标准标签库(JSTL)以及JSP 2.0的自定义标签开发。这些新特性使得JSP页面开发更加简洁、高效和易于维护。 最后,手册通过一系列实战案例,展示了...

    JSP2.0 API chm

    **JSP 2.0 API 知识点详解** ...JSP 2.0是其一个重要版本,带来了许多改进和新特性,提升了开发效率...共享的“JSP2.0 API chm”帮助文档无疑是一个宝贵的资源,有助于开发者在实践中进一步探索和提升JSP 2.0的技术水平。

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

    JSP2.0技术手册中的源码可能包含了各种示例,涵盖了JSP2.0的新特性和最佳实践。通过学习这些源码,开发者可以深入理解JSP的工作原理,提升实际项目开发能力。 **七、JSP2.0技术手册的价值** 该手册提供了详尽的JSP...

    JSP2.0技术手册[含源码更新版].

    这些实例涵盖JSP基本元素的使用、EL和JSTL的实践以及JSP 2.0新特性的应用。 通过深入学习本手册,初学者不仅可以掌握JSP 2.0的基础知识,还能了解到如何利用这些知识构建实际的web应用程序。对于希望快速入门JSP和...

    JSP2.0 技术手册

    **JSP2.0新特性** 1. **表达式语言(EL)**:JSP2.0引入了EL,它是一种简洁的语法,用于在页面上获取和操作JavaBean的属性。EL简化了JSP页面中的脚本元素,提高了可读性和可维护性。 2. **JSTL(JavaServer Pages ...

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

    在本手册中,你将深入理解JSP2.0的关键特性、语法以及最佳实践。 ### JSP2.0的主要改进与特性 1. **表达式语言(EL)增强**:JSP2.0引入了更强大的EL,它允许开发者用简洁的语法访问JavaBean属性,减少了页面中的...

Global site tag (gtag.js) - Google Analytics