水上无线电覆盖性测试:Java 标准标签库的使用

来源:百度文库 编辑:偶看新闻 时间:2024/10/03 05:01:51
第15章 标准标签库 返回主页 上一章下一章
15.1 JSTL介绍和编程举例
15.2 一般用途的标签
15.3 条件标签
15.4 迭代标签
15.5 URL相关的标签
15.6 XML标签
15.7 SQL相关的标签
☆进入DOS状态 ☆写字版 ☆绘图板 ☆进入Editplus

15.1 JSTL介绍和编程举例本章开头下一节
从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生。JSTL支持通用的、结构化的任务,如迭代和条件、操作XML文档的标签、国际化标签以及以及用SQL访问数据库的标签。它还引入了表达式语言的概念以简化页面的开发。JSTL还提供了集成现有标签库与JSTL的框架。
JSTL通常被认为是一种单标签库。但JSTL实际上有4个标签库。这些标签库被概括为如下:
核心标签库—包含一些Web应用的必要的标签。核心标签库的实例包括循环,表达式赋值和基本输入输出。.
格式化/国际化标签库—包括被用来解析数据的标签库。这种标签会解析数据,比如日期,不同的场所区域等。
数据库标签库—包含被用来访问SQL数据库的标签。这些标签通常仅仅只创建原形(prototype)程序。这个是因为大多数程序不会直接从JSP页面中来处理数据库访问。数据库访问应该被嵌入到能够被JSP页面所访问的EJB中。
XML标签库—包含被用来访问XML元素的标签。因为XML广泛使用于Web开发,XML的处理是JSTL的一个重要的特征。
JSTL的优点:
1.在应用程序服务器之间提供了一致的接口,最大程序地提高了WEB应用在各应用服务器之间的移植。
2.简化了JSP和WEB应用程序的开发。
3.以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。
4.允许JSP设计工具与WEB应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。
如果要使用JSTL,则必须将jstl.jar和standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。这个zip文件可以从http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/jakarta-taglibs-standard-1.1.zip下载。
JSTL包含以下的标签:
1)一般用途的标签:如
2)条件标签:如
3)迭代标签:如
4)URL标签:如
5)XML标签:如
6)国际化输出标签:如
7)SQL标签:如
8)函数标签库:如fn:contains(string, substring)、fn:containsIgnoreCase等。
前4种标签统归核心标签库(Core),故前缀采用“c:”,JSTL与URI对照如下:
JSTL 前置名称URI 范    例
核心标签库chttp://java.sun.com/jsp/jstl/core
I18N格式标签库 fmthttp://java.sun.com/jsp/jstl/xml
SQL标签库 sqlhttp://java.sun.com/jsp/jstl/sql
XML标签库xmlhttp://java.sun.com/jsp/jstl/fmt
函数标签库fnhttp://java.sun.com/jsp/jstl/functions
教材例程15-1,simple.jsp,一个简单的JSTL应用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


<%@ page import="java.util.*"%>


JSTL: 这里是一个简单的JSTL应用


这里是一个简单的JSTL应用


<%
Collection customers=new ArrayList();
customers.add(new String("guest1"));
customers.add(new String("guest2"));
customers.add(new String("guest3"));
//设置customers为request的属性。
request.setAttribute("customers",customers);
%>

Customers in the request:









现在的时间是:



timeStyle="full"/>




15.2 一般用途的标签上一节下一节本章开头
一般用途的标签包括四个标签:,分别介绍如下:

标签用于在JSP中显示数据。
语法
语法1:没有本体(body)内容

语法2:有本体内容

default value

属性:
名   称
说   明
EL
类   型
必 须
默认值
value
需要显示出来的值
Y
Object


default
如果value的值为null,则显示default的值
Y
Object


escapeXml
是否转换特殊字符,如:< 转换成 <
Y
boolean

true
注意
表格中的EL字段,表示此属性的值是否可以为EL表达式,例如:Y表示 attribute = "${表达式}" 为符合语法的,N则反之。
例:
你的用户名是:
显示用户的用户名,如为空则显示guest。

指定从session中获取username的值显示。

显示username的值,默认是从request(page)中取,如果request中没有名为username的对象则从session中取,session中没有则从application(servletContext)中取,如果没有取到任何值则不显示。
教材例程15-2,c_out.jsp,标签的应用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL: c:out的使用




<% session.setAttribute("test_session","testValue_session");%>
<% request.setAttribute("test_request","testValue_request");%>
<% application.setAttribute("test_application","testValue_application");%>
<% request.setAttribute("test_all","testValue_request");%>
<% session.setAttribute("test_all","testValue_session");%>
<% application.setAttribute("test_all","testValue_application");%>

输出一个字符串:


带有body的c:out标签,但是body不输到客户端。
<% for(int i=0;i<5;i++)
{
%>

<% out.println("i");
i++;
%>

<% }%>





获得session中的属性:


获得request中的属性:


获得application中的属性:


测试表达式语言优先获得哪个属性:


输出一个默认值:




标签用于保存数据。
语法1:将value的值储存至范围为scope的varName变量之中:

语法2:将本体内容的数据储存至范围为scope的varName变量之中:

… 本体内容

语法3:将value的值储存至target对象的属性中:
c:set value="value" target="target" property="propertyName" />
语法4:将本体内容的数据储存至target对象的属性中:

… 本体内容

它有如下属性属性描述是否必须缺省值:
名  称
说   明
EL
类型
必须
默认值
value
要被储存的值
Y
Object


var
欲存入的变量名称
N
String


scope
var变量的JSP范围
N
String

page
target
为一JavaBean或java.util.Map对象
Y
Object


property
指定target对象的属性
Y
String


如果指定了target属性, 那么property属性也必须指定。
例:

将test.testinfo的值保存到session的test2中,其中test是一个javabean的实例,testinfo是test对象的属性。

将对象cust.address的city属性值保存到变量city中。
教材例程15-3,c_set.jsp,标签的应用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>



JSTL:的使用c:set




设置userName的属性为hellking,然后输出这个属性值:



设置password的属性,属性值在body中,然后输出这个属性值:

xcsdkjf234dfsgs234234234



设置javaBean的属性,然后输出这些属性值:


sdf234sdfd

userName=,
password=.

设置不同的属性,并且指定它们的范围:






语法:

标签用于删除数据,它有如下属性:
名  称
说   明
EL
类型
必须
默认值
var
欲移除的变量名称
N
String


scope
var变量的JSP范围
N
String

page
scope范围,包括page、request、session、application等;
例:

从session中删除test2变量。
教材例程15-4,c_remove.jsp,标签的应用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:c:remove的使用






在没有调用c:rmeove之前,有这些参数:
maxUser=
maxIdelTime=
accountId=
nextPage=

调用c:remove...




调用了c:remove后,这些参数值为:
maxUser=
maxIdelTime=
accountId=
nextPage=



主要用来处理产生错误的异常状况,并且将错误信息储存起来。
语法:

… 欲抓取错误的部分

的属性为var,用来储存错误信息的变量。
名  称
说   明
EL
类型
必须
默认值
var
用来储存错误信息的变量
N
String


说明
主要将可能发生错误的部分放在之间。如果真的发生错误,可以将错误信息储存至varName变量中,例如:

://可能发生错误的部分

另外,当错误发生在之间时,则只有之间的程序会被中止忽略,但整个网页不会被中止。
例,写一个简单的范例,文件名为core_catch.jsp,来体会的使用方式。
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>


CH7 - Core_catch.jsp




<%
String eFormat = "not number";
int i = Integer.parseInt(eFormat);
%>




教材例程15-5,c_catch.jsp,标签的应用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用



<%
int i=0;
int j=10/i;
%>


异常:


异常exception.getMessage=


异常exception.getCause=




15.3 条件标签上一节下一节本章开头
条件标签分类中包含四个标签:,现在依此顺序依次说明这四个标签的使用。

标签有如下属性:
的用途就和我们一般在程序中用的if一样。
语法
语法1:没有本体内容(body)

语法2:有本体内容

本体内容

属性
名 称
说   明
EL
类  型
必  须
默认值
test
如果表达式的结果为true,则执行本体内容,false则相反
Y
boolean


var
用来储存test运算后的结果,即true或false
N
String


scope
var变量的JSP范围
N
String

page
说明
标签必须要有test属性,当test中的表达式结果为true时,则会执行本体内容;如果为false,则不会执行。例如:${param.username == 'admin'},如果param.username等admin时,结果为true;若它的内容不等于admin时,则为false。
例:

ADMIN您好!! //body部分

教材例程15-6,c_if,标签的应用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>




JSTL:c:if的使用



对不起,你还的年龄过小,不能范围这个网页◎!




这个标签不接受任何属性
本身只当做的父标签。
语法

本体内容( )

限制
的本体内容只能有:
·空白
·1或多个
·0或多个
教材例程15-7,c_choose.jsp,标签的应用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>




JSTL:c:choose的使用













你的年龄是:



的用途就和我们一般在程序中用的when一样。
语法

本体内容

属性
名  称
说   明
EL
类型
必须
默认值
test
如果表达式的结果为true,则执行本体内容,false则相反
Y
boolean


限制
必须在之间
在同一个中时,必须在之前
说明
必须有test属性,当test中的表达式结果为true时,则会执行本体内容;如果为false时,则不会执行。

这个标签同样不接受任何属性
在同一个中,当所有的条件都没有成立时,则执行的本体内容。
语法

本体内容

限制
必须在之间
在同一个中时,必须为最后一个标签
说明
在同一个中,假若所有的test属性都不为true时,则执行的本体内容。
例:

user.wealthy is true.

如果user.wealthy值true,则显示user.wealthy is true.


user.generous is true.


user.stingy is true.


user.generous and user.stingy are false.


只有当条件user.generous返回值是true时,才显示user.generous is true.
只有当条件user.stingy返回值是true时,才显示user.stingy is true.
其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and user.stingy are false.
由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用标签共同来完成了。
教材例程15-8,customer_logic.jsp,自定义逻辑的应用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>






JSTL:自定义逻辑















你作为管理员登录






15.4 迭代标签上一节下一节本章开头
forEach标签可以对一组对象进行迭代。通过items属性指定集合,通过由item属性命名的作用域变量可以得到当前项。
forEach支持很多种集合类型,包括java.util.Collection and java.util.Map的所有实现。
为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行的本体内容。
语法
语法1:迭代一集合对象之所有成员
[begin="begin"] [end="end"] [step="step"]>
本体内容
/c:forEach>
语法2:迭代指定的次数

本体内容

属性
名  称
说   明
EL
类型
必须
默认值
var
用来存放现在指到的成员
N
String


items
被迭代的集合对象
Y
Arrays
Collection
Iterator
Enumeration
Map
String


varStatus
用来存放现在指到的相关成员信息
N
String


begin
开始的位置
Y
int

0
end
结束的位置
Y
int

最后一个成员
step
每次迭代的间隔数
Y
int

1
限制
·假若有begin属性时,begin必须大于等于 0
·假若有end属性时,必须大于begin
·假若有step属性时,step必须大于等于0
支持对象数组以及基本类型(如int)数组。对于基本类型数组,迭代的当前项自动用其包装器类包装(例如,对于int是Integer,对于float是Float,等等)
支持java.util.Iterator and java.util.Enumeration的实现,但是必须小心使用。Iterator和Enumeration对象是不可重设的,所以不应该在多个迭代器标签中使用它们。最后,如果字符串包含一组由逗号分隔的值(如:Monday、Tuesday、Wednesday、Thursday、Friday),则可以迭代java.lang.String对象。
下面是用forEach标签对前一节中的购物车迭代:

...




...

用forEach标签对由分隔符分隔的一组标记(token)进行迭代。

例:



相当于java语句 for (int i=0;iout.println(vectors.get(i));
}
在这里vectors是一个java.util.Vector对象,里面存放的是String数据,vector是当前循环条件下String对象。实际上这里的vectors可以是任何实现了java.util. Collection接口的对象。

count=


输出:
count=0
...
count=100
教材例程15-9,c_forEach1.jsp,最简单的迭代。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%@ page import="java.util.*,com.jspdev.ch3.TestBean"%>
<%
Collection users=new ArrayList();
for(int i=0;i<5;i++)
{
TestBean user=new TestBean();
user.setUserName("guest"+i);
user.setPassword("guest1"+i);
user.setAge(20+i);
users.add(user);
}
session.setAttribute("users",users);
%>


JSTL:c:forEach的使用


User list











用户名密码年龄



教材例程15-10,c_forEach2.jsp,迭代固定次数。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:c:forEach的使用


第二种迭代:1 to 10



-->

第二种迭代:1 to 10,step=3



-->




教材例程15-11,c_forEach3.jsp,指定集合中迭代的范围。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%@ page import="java.util.*,com.jspdev.ch3.TestBean"%>


JSTL:c:forEach的使用


User list











用户名密码年龄




教材例程15-12,c_forEach4.jsp,获得迭代的状态。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%@ page import="java.util.*,com.jspdev.ch3.TestBean"%>


JSTL:c:forEach的使用


User list















用户名密码年龄indexcountfirst?last?








教材例程15-13,c_forEach5.jsp,迭代不同类型数据。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page import="java.util.*"%>


JSTL: Iterator Support -- Data Types Example


Data Types


<%
int[] myIntArray=new int[]{1,2,3,4,5,65,34};
String[] myStringArray=new String[]{"I ","am ","a ","Java","fans"};
Vector v=new Vector();
v.add("this");
v.add("is");
v.add("myEnumeration");
v.add("!");
Enumeration myEnumeration=v.elements();
HashMap myNumberMap=new HashMap();
myNumberMap.put("hellking","23");
myNumberMap.put("guest","23");
myNumberMap.put("guest2","223");
myNumberMap.put("guest3","232");
request.setAttribute("myIntArray",myIntArray);
request.setAttribute("myStringArray",myStringArray);
request.setAttribute("myEnumeration",myEnumeration);
request.setAttribute("myNumberMap",myNumberMap);
%>

Array of primitives (int)



?

Array of objects (String)






myEnumeration (warning: this only works until myEnumeration is exhausted!)






Properties (Map)



=


String (Common Separated Values)









用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
语法
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
本体内容

属性
名  称
说   明
EL
类  型
必 须
默认值
var
用来存放现在指到的成员
N
String


items
被迭代的字符串
Y
String


delims
定义用来分割字符串的字符
N
String


varStatus
用来存放现在指到的相关成员信息
N
String


begin
开始的位置
Y
int

0
end
结束的位置
Y
int

最后一个成员
step
每次迭代的间隔数
Y
int

1
限制
·假若有begin属性时,begin必须大于等于 0
·假若有end属性时,必须大于begin
·假若有step属性时,step必须大于等于0
例:



这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。
教材例程15-14,c_forTokens.jsp,迭代不同类型数据。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>


JSTL: Iterator Support -- forTokens Example



使用 '|' 作为分割符


delims="|">
©

使用 '|'和',' 作为分割符


delims="|,">
©

使用 '-' 作为分割符


delims="--">
©




15.5 URL相关的标签上一节下一节本章开头
JSTL包含三个与URL操作有关的标签,它们分别为:。它们主要的功能是:用来将其他文件的内容包含起来、网页的导向,还有url的产生。笔者将依序介绍这三个标签。

可以把其他静态或动态文件包含至本身JSP网页。它和JSP Action的最大的差别在于:只能包含和自己同一个web application下的文件;而除了能包含和自己同一个web application的文件外,亦可以包含不同web application或者是其他网站的文件。
语法
语法1:

本体内容

语法2:
[charEncoding="charEncoding"]>
本体内容

属性
名    称
说   明
EL
类 型
必须
默认值
url
一文件被包含的地址
Y
String


context
相同Container下,其他 web站台必须以“/”开头
Y
String


var
储存被包含的文件的内容(以String类型存入)
N
String


scope
var变量的JSP范围
N
String

Page
charEncoding
被包含文件之内容的编码格式
Y
String


varReader
储存被包含的文件的内容(以Reader类型存入)
N
String


说明
首先中必须要有url属性,它是用来设定被包含网页的地址。它可以为绝对地址或是相对地址,使用绝对地址的写法如下:

就会把http://java.sun.com 的内容加到网页中。
另外也支持FTP协议,假设现在有一个FTP站台,地址为ftp.javaworld.com.tw ,它里面有一个文件data.txt,那么可以写成如下方式将其内容显示出来:

如果是使用相对地址,假设存在一个文件名为Hello.jsp,它和使用的网页存在于同一个webapps的文件夹时,的写法如下:

如果以“/”开头,那么就表示跳到web站台的根目录下,以Tomcat为例,即webapps目录。假设一个文件为hello.txt,存在于webapps/examples/images里,而context为examples,可以写成以下方式将hello.txt文件包含进我们的JSP页面之中:

接下来如果要包含在同一个服务器上,但并非同一个web站台的文件时,就必须加上context属性。假设此服务器上另外还有一个web站台,名为others,others站台底下有一个件夹为jsp,且里面有index.html这个文件,那么就可以写成如下方式将此文件包含进来:

另外,可以在的本体内容中使用,它的功用主要是:可以将参数传递给被包含的文件,它有两个属性name和value,如下表所示:
名   称
说   明
EL
类   型
必   须
默认值
name
参数名称
Y
String


value
参数的值
Y
String

本体内容
这两个属性都可以使用EL,所以我们写成如下形式:



这样的做法等于是包含一个文件,并且所指定的网址会变成如下:
http://java.sun.com?test=1234
教材例程15-15,c_import.jsp,标签的使用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:c:import的使用


绝对路径 URL







相对路径 URL







encode:


>-->

string exposure Absolute URL:








string exposure relative URL:








传递参数到指定的URL









教材例程15-16,被调用的jsp页面beimport.jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


,
userName=



可以将客户端的请求从一个JSP网页导向到其他文件。
语法
语法1:没有本体内容

语法2:本体内容代表查询字符串(Query String)参数



属性
名  称
说   明
EL
类 型
必须
默认值
url
导向的目标地址
Y
String


context
相同Container下,其他 web站台必须以 “/” 开头
Y
String


说明
url就是设定要被导向到的目标地址,它可以是相对或绝对地址。例如:我们写成如下:

那么网页将会自动导向到http://www .javaworld.com.tw。另外,我们也可以加上context这个属性,用来导向至其他 web站台上的文件,例如:导向到 /others下的 /jsp/index.html时,写法如下:

的功能不止可以导向网页,同样它还可以传递参数给目标文件。在这里我们同样使用来设定参数名称和内容。
例:

将请求重新定向到http://www.yourname.com/login.jsp页,相当于response.setRedirect("http://www.yourname.com/login.jsp");
可以用标签用来传递参数给一个重定向或包含页面。
例:



表示将参数888以id为名字传递到login.jsp页面,相当于login.jsp?id=888
教材例程15-17,c_redirect.jsp,标签的使用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用






教材例程15-18,c_redirect2.jsp,标签传递参数给目标。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用








主要用来产生一个URL。
语法
语法1:没有本体内容

语法2:本体内容代表查询字符串(Query String)参数
[scope="{page|request|session|application}"] >
标签

属性
名称
说   明
EL
类型
必 须
默认值
value
执行的URL
Y
String


context
相同Container下,其他 web站台必须以 “/” 开头
Y
String


var
储存被包含文件的内容(以String类型存入)
N
String


scope
var变量的JSP范围
N
String

Page
例:



也可以搭配使用,上面执行结果将会产生一个网址为http://www.javaworld.com.tw?param=value,我们更可以搭配HTML的使用,如下:


">台湾 Java 技术论坛
另外还有三个属性,分别为context、var和scope。context属性和之前的相同,可以用来产生一个其他web站台的网址。如果有var属性时,则网址会被存到varName中,而不会直接输出网址。
哪些状况下才会去使用?例如:当我们须动态产生网址时,有可能传递的参数不固定,或者是需要一个网址能连至同服务器的其他web站台之文件,而且更可以将产生的网址储存起来重复使用。另外,在以前我们必须使用相对地址或是绝对地址去取得需要的图文件或文件,现在我们可以直接利用从web站台的角度来设定需要的图文件或文件的地址,如下:
" />
如此就会自动产生连到image文件夹里的code.gif的地址,不再须耗费精神计算相对地址,并且当网域名称改变时,也不用再改变绝对地址。
例:

将url http://www.url.com/edit.js包含到当前页的当前位置,并将url保存到newsfeed变量中。
"/>
在当前页的当前位置输出
,http://www.yourname.com是当前页的所在的位置。
教材例程15-19,c_url.jsp,标签的使用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用









教材例程15-20,c_param.jsp,标签的使用。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用







hellking





15.6 XML标签上一节下一节本章开头
处理XML文档的一个关键方面是能够容易地访问它们的内容。Xpath是W3C1999年提出的一个建议,它提供了一种指定和选择XML文档内容的方便符号。在下表中列出的JSTL XML标签集基于XPath。
领域
功能
标签
TLD
前缀
XML 核心 out
parse
set
/jstl-x x
流程控制 choose
when
otherwise
forEach
if
转换 transform
param
XML标签使用XPath作为local表达式语言,总是用select属性指定XPath表达式。这意味着只有为select属性指定的值是用XPath表达式语言判断的。所有其他属性都是用与全局表达式语言相关的规则判断的。
XML核心动作有:



x:out和x:set动作可以输出一个JspTagException。如果他们没有成功的话(极有可能因为XPath表达式指向并不存在的标记),你的页,像在所有其他情况下一样,应该智能的处理这些异常(要么通过传统的JSP errorPage指令,要么使用JSTL的c:catch动作).
语法1:解析由String或者Reader对象组成的XML文档。
{var="var" [scope="scope"]|varDom="var" [scopeDom="scope"]}
[systemId="systemId"]
[filter="filter"]/>
语法2:解析由在Body中指定的XML文档。
{var="var" [scope="scope"]|varDom="var" [scopeDom="scope"]}
[systemId="systemId"]
[filter="filter"]>
XML Document to parse

教材例程15-21,x_parse.jsp,标签的使用,解析XML文档。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:x:parse的使用






test1



test2









jsp 应用开发详解
59






教材例程15-22,x_out.jsp,标签的使用,编程举例。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用





jsp 应用开发详解
59













教材例程15-23,x_set.jsp,标签 应用举例。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用





jsp 应用开发详解
59


陈亚强
xxxx










教材例程15-24,x_flowcontrol.jsp,XML流程控制综合举例。
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL: XML Support --综合实例


Parse / ForEach





JSP应用开发详解
电子工业出版社
xxx
计算机
JSP开发最新的书


asiapower
address:xxxx1



hellking
address:xxxx2







->






->









->


author id=2,


no author's id=2








15.7 SQL相关的标签上一节下一节本章开头
JSTL SQL标签是为快速建立原型和简单应用程序设计的。对于生产应用程序,数据库操作通常封装在JavaBeans组件中。sql标签可以实现包括查询、更新、事务处理和设置数据源等强大的功能。下面分别讲述。





领域
函数
标签
TLD
前缀
数据库   setDataSource /jstl-sql sql
SQL query
dateParam
param
transaction
update
dateParam
param

语法:
用来设置数据源,可以通过scope设置使用范围,如page、application、session等。有两种方式可以设置数据源,一种是直接使用在web中配置的数据源,只要指定jndi名就可以了(这个就不要我多讲了吧,呵呵),第二种是指定所有的连接属性。
{dataSource="dataSourceName" |   url="jdbcurl"
[driver="driverClassName"]
[user="userName"]
[password="password"]
[var="varName"]
[scope="{page|session|request|application}"]/>
教材例程15-25,sql_datasource.jsp,标签应用举例。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用


创建普通的数据源:

var="example1"
driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev"
user="bn"
password="bn"
/>
创建普通的数据源,把用户名和密码写在url中:

var="example2"
driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev;user=bn;password=bn"
/>
从jndi名称空间中获得一个数据源。

var="example3"
dataSource="jdbc/bn"
/>


使用第一个数据源:


SELECT * FROM contact








Name: Value:

使用第二个数据源:


SELECT * FROM contact








Name: Value:

使用第三个数据源:


SELECT * FROM contact








Name: Value:




作用:数据库操作中最频繁的查询。
语法1:没有body
Var=”varName” [scope=”{page|session|request|application}”]
[dataSource=”dataSourceName”]
[maxRows=”maxRows”]
[startRow=”startRow”] />
语法2:有一个body ,并在body 中指定了查询需要的参数
Var=”varName” [scope=”{page|session|request|application}”]
[dataSource=”dataSourceName”]
[maxRows=”maxRows”]
[startRow=”startRow”] >
actions

语法3:有body,并且可以指定可选的参数(< sql:param >在后面讲述)
Var=”varName” [scope=”{page|session|request|application}”]
[dataSource=”dataSourceName”]
[maxRows=”maxRows”]
[startRow=”startRow”] >
query
optional actions

教材例程15-26,sql_query.jsp,标签应用举例。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用


创建普通的数据源:

var="example"
driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev"
user="bn"
password="bn"
scope="session"
/>
第一种查询:


SELECT * FROM contact








Name: mobile:



第2种查询:











Name: mobile:



第3种查询:


SELECT * FROM contact where userName=?









Name: mobile:



数据库更新,采用标签可以很方便地实现。
教材例程15-27,sql_update.jsp,标签应用举例。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:的使用

第1种更新:更新记录值1


update contact set mobile='13688888' where userName='asiapower'



第2种更新:更新记录值2







第3种更新:更新记录值3


update contact set mobile=? where userName=?



第4种更新:创建表


第5种更新:增加记录

第6种更新:删除记录


第7种更新:删除表




使用事务和执行更新一样也很简单。例如,我们建立一个事务,并执行几个更新,那就是下面教材实例代码:
教材例程15-28,sql_tansaction.jsp,标签应用举例。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:sql:transaction的使用


var="example"
driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev"
user="bn"
password="bn"
/>

使用事务处理方式创建一个表:




create table usertable (
nameid int primary key,
name varchar(80)
)


DONE: 创建表完成




使用事务处理往表里插入数据:




INSERT INTO usertable VALUES (1,'hellking')


DONE: 插入数据完成




SELECT * FROM contact


查询数据记录:








nameid: name:


drop table usertable



在更新数据库记录时,若有参数(各字段值),可以采用赋值。
教材例程15-29,sql_param.jsp,标签应用举例。
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%@ page contentType="text/html; charset=gb2312" language="java" %>


JSTL:sql:param的使用


var="example"
driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev"
user="bn"
password="bn"
/>
执行数据添加操作:


insert into  contact (userName,mobile,phone,mail)values(?,?,?,?)
wyy
13634234
010213423434
wyy@xtom.com

执行更新操作: