JSTL+学习笔记.docx

上传人:b****5 文档编号:4043385 上传时间:2022-11-27 格式:DOCX 页数:43 大小:54.19KB
下载 相关 举报
JSTL+学习笔记.docx_第1页
第1页 / 共43页
JSTL+学习笔记.docx_第2页
第2页 / 共43页
JSTL+学习笔记.docx_第3页
第3页 / 共43页
JSTL+学习笔记.docx_第4页
第4页 / 共43页
JSTL+学习笔记.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

JSTL+学习笔记.docx

《JSTL+学习笔记.docx》由会员分享,可在线阅读,更多相关《JSTL+学习笔记.docx(43页珍藏版)》请在冰豆网上搜索。

JSTL+学习笔记.docx

JSTL+学习笔记

JSTL学习笔记

JSPStandardTagLibrary(JSTL)的规范完成于2002年7月,随后ApacheTaglibsProjects在不久的几天中提交了一个参考实现。

JSTL的出现是为了解决程序员一直渴望有一个标准的标签库的需求,同时也为开发JSP带来了很大的便利。

JSTL1.0提供了一系列基于JSP1.2API的标签库,下表列举了一些标签库的信息:

Description

Prefix

DefaultURI

Core

c

XMLProcessing

x

I18N&Formatting

fmt

DatabaseAccess

sql

如果要使用JSTL,那么需要加入如下声明段:

<%@taglibprefix="c"uri="%>

除了标签库之外,JSTL1.0还定义了一个所谓的ExpressionLanguage(EL)表达式语言。

EL用于访问运行时数据而出现,如果学过JavaScript,你会发现EL在表达上与其很类似。

${myObj.myProperty}$

${myObj["myProperty"]}$

${myObj[varWithTheName]}$

以上的语句用来检索一个对象的内部值,都是等价的。

如果是访问一个数组或者列表:

${myList[2]}$

${myList[aVar+1]}$

EL的支持的操作符:

Operator

Description

.

Accessaproperty

[]

Accessanarray/listelement

()

Groupasubexpression

+

Addition

-

Subtractionornegationofanumber

/ordiv

Division

%ormod

Modulo(remainder)

==oreq

Testforequality

!

=orne

Testforinequality

Testforlessthan

>orgt

Testforgreaterthan

<=orle

Testforlessthanorequal

>=orgt

Testforgreaterthanorequal

&&orand

TestforlogicalAND

||oror

TestforlogicalOR

!

ornot

UnaryBooleancomplement

empty

Testforemptyvalue(null,emptystring,oranemptycollection)

支持的字面量:

LiteralType

Description

String

Enclosedwithsingleordoublequotes.Aquoteofthesametypewithinthestringmustbeescapedwithbackslash:

(\'inastringenclosedwithsinglequotes;\"inastringenclosedwithdoublequotes).Thebackslashcharactermustbeescapedas\\inbothcases.

Integer

Anoptionalsign(+or-)followedbydigitsbetween0and9.

FloatingPoint

Thesameasanintegerliteral,exceptthatadotisusedastheseparatorforthefractionalpartandanexponentcanbespecifiedaseorE,followedbyanintegerliteral.

Boolean

trueorfalse.

Null

null.

支持的内建对象:

Variable

Description

param

Acollectionofallrequestparametersasasinglestringvalueforeachparameter.

paramValues

Acollectionofallrequestparametersasastringarrayvalueforeachparameter.

header

Acollectionofallrequestheadersasasinglestringvalueforeachheader.

headerValues

Acollectionofallrequestheadersasastringarrayvalueforeachheader.

cookie

Acollectionofallrequestcookiesasasinglejavax.servlet.http.Cookieinstancevalueforeachcookie.

initParams

Acollectionofallapplicationinitparametersasasinglestringvalueforeachparameter.

pageContext

Aninstanceofthejavax.servlet.jspPageContextclass.

pageScope

Acollectionofallpagescopeobjects.

requestScope

Acollectionofallrequestscopeobjects.

sessionScope

Acollectionofallsessionscopeobjects.

applicationScope

Acollectionofallapplicationscopeobjects.

如果你要访问GET参数:

${param.listType}

如果你要访问HTTP头信息:

${header['User-Agent']}

访问Session或者Request内部包含对象:

${sessionScope.customer}

${requestScope.customer}

一些例子:

Firstname:

outvalue="${customer.firstName}"/>

outvalue="Firstname:

${customer.firstName}"/>

Firstname:

outvalue="<%=customer.getFirstName()%>"/>

都是等价的。

控制流程和迭代操作也是JSTL的一个特性,个人认为迭代标签是当Java1.5没出来之前对于Java语言的最好补充。

迭代操作使用的forEach标签:

forEachitems="${forecasts.rows}"var="city">

City:

outvalue="${city.name}"/>

Tomorrow'shigh:

outvalue="${city.high}"/>

Tomorrow'slow:

outvalue="${city.low}"/>

forEach>

Choose标签:

choose>

whentest="${param.first>0}">

first=

outvalue="${param.first-noOfRows}"/>">

PreviousPage

when>

otherwise>

PreviousPage

otherwise>

choose>

choose>

whentest="${param.first+noOfRows

first=

outvalue="${param.first+noOfRows}"/>">

NextPage

when>

otherwise>

NextPage

otherwise>

choose>

URL操作:

urlvar="previous"value="foreach.jsp">

paramname="first"value="${param.first-noOfRows}"/>

url>

特别提及的URL操作:

urlvalue="/images/logo.gif"/>

outvalue="${previous}"/>">PreviousPage

这里的"/images/logo.gif"不是从网站的根目录起始,而是自动调整到所对应的context根目录,非常实用。

发表于@2006年01月07日3:

40PM|评论(0)

编写"纯HTML"jsp应用--学会使用JSTL

刚开始用JSP做web应用的时候,象使用PHP,ASP一样用JSP,在HTML代码中夹杂着一大堆的 scriptlet---即java 代码段。

由于本人的“排版”技术还算可以,开始的时候觉得挺好,编写“效率”高,调试又方便!

到了后来才知道---这是一种极其愚蠢的做法儿----JSP诞生的时候就已经明确与ASP,PHP划清了界限,使用javaBean、Servlet可以有效的将HTML中夹杂的java 代码段剥离,然后包装成一个可在多个页面复用的“逻辑处理组件”---这是JSP相对于PHP,ASP的优越之处之一。

但有时即使使用javabean + servlet,我们也不得不将“极少量”的 java代码 嵌入到HTML中----的确,有时你必须这样:

因为在 javabean中,你无法使用JSP中的隐含对象,比如 request,session,response等.

使用Servlet虽然可以使用JSP的对象,但却不能象javaBean灵活地插入到 html 中--

所以,Tag(标签) 就出现了(可以使用所有的JSP隐含对象),它的出现彻底解决了这个问题,可以让你编写出“纯HTML”的JSP页码---由此带来的好处自然不言而喻:

更高的可维护性、更高的组件复用效率、更易维护的HTML页面````

小弟不才,刚刚开始学JSTL,觉得这个东东真的很不错!

很想让更多的 初学者 知道这个,并能应用到实际的web开发中。

下面,就开始编写我们的第一个 Tag!

**下面是使用了简单Tag的JSP文件,运行结果是显示当前时间:

<%@ page contentType="text/html;charset=gb2312" %>

<%@taglib uri="/tags" prefix="visa"%>

现在时间是:

date/>

很明显,使用了tag的JSP页清爽了许多---如果将数据库操作等一些复杂功能也封装进去的话,tag的优势就更明显了!

**环境:

win2000 server + Tomcat5.019 + j2sdk1.42 + SQLServer 2k

**开发一个Tag,需要编写2个主要文件:

1-标签处理器(一个类servlet的java类)

2-标签描述符(一个XML风格的tld文件)

完成这两个文件,就可以在WEB应用中部署、应用了。

好了,下面我们就开始做吧!

1-编写tag处理器:

datetag.java

它的作用就象一个Servlet,接受来自客户端的请求,但它却可以象javaBean一样在JSP中方便调用。

package tag;

import java.util.Date;

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

public class datetag extends TagSupport{

 public int doStartTag() throws JspException{

  Date dte=new Date();

  try{

  JspWriter out=pageContext.getOut();

  out.print(dte);

   }

   catch(java.io.IOException e)

   {throw new JspTagException(e.getMessage());}

 return SKIP_BODY;

}

}

用 javac编译之后,就得到了 datetag.class文件了,将其放在 xxx\WEB-INF\classes\tag 目录下。

2-编写tag库描述符:

tags.tld

比较容易看出,部分有点象servlet mapping的配置--这里配置的是tag的名字与tag类之间的映射。

xml version="1.0" encoding="ISO-8859-1"?

>

1.0

1.2

 date

 tag.datetag

 empty

将tags.tld保存在xxx\WEB-INF\ 目录下。

3-配置你的web.xml:

配置web.xml,注册你的标签库:

在web.xml的 之间添加:

在这里注册你的自定义标签符,在JSP中的引用名为:

/tags

/tags

/WEB-INF/tags.tld

4-开始在JSP中使用!

因为已经在web.xml中注册过,通过 /tags 引用你的标签库;

prefix的作用就象

useBean/>中的 id,只是作为一个标志(可任意定义)

date/> 很明显,通过调用date,就等于调用了 datetag.class :

<%@ page contentType="text/html;charset=gb2312" %>

<%@taglib uri="/tags" prefix="visa"%>

现在时间是:

date/>

**相信到了这里,有人就有了疑问了:

为了使用一个Tag,我就做了这么多的“多余”工作(编写tld,修改web.xml,还要重启tomcat),值得吗?

---答案是:

这是很值得的!

1、如果将比较复杂的逻辑功能封装进Tag,它就具有比Servlet,javaBean更高的灵活性,更多的优点,更易扩展,更易维护---彻底分离表示层与逻辑层!

2、因为Tag的功能并非只是这一些,还有更多高级功能---值得去学习!

****

这只是一个很简单的应用,当然,你会有很多的“迷惑点”,这是正常的---在TAG中有一些独有的特性,想完全学会TAG并不是件简单的事情。

--所以,在这里,我向大家推荐一本好书:

电子工业出版社的《jsp标志库编程指南》(英文名:

《Professional JSP Tag Libraries》)

PS:

使用JSTL配合javabean,servlet还可以有效保护你的源码哦 ---- 因为,你可以向你的客户交付不含有java源代码的web应用,因为,所有的 java代码 都已经被编译成 *.class了   *^_^*

[注意]:

针对 Tomcat 5.0x以下的版本----如:

Tomcat 4.0x:

要编译标签处理器,必须将你的 servlet.jar(在%TOMCAT_HOME%\common\lib下面) 放进环境变量 CLASSPATH 中---(如果是 tomcat5.0x 以上的版本,好象没这个要求)---否则,会提示编译错误。

发表于@2006年01月07日3:

38PM|评论(0)

JSTL(JSP标准标签库)介绍

前言

从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServerPagesStandardTagLibrary)的诞生。

因为工作中需要用到JSTL,但网上却苦于找不到有关JSTL的中文资料,所以就有了这篇文章。

JSTL简介

JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。

JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat4.x。

但是在即将推出的JSP2.0中是作为标准支持的。

JSTL目前的最新版本为1.02,最终发布版为1.0。

JSTL包含两个部分:

标签库和EL(ExpressionLanguage表达式语言)语言。

标签库目前支持四种标签:

标签

URI

前缀

示例

Core

c

tagname...>

XMLprocessing

x

tagname...>

I18Ncapableformatting

fmt

tagname...>

Databaseaccess(SQL)

sql

tagname...>

Core支持JSP中的一些基本的操作;

XMLprocessing支持XML文档的处理;

I18Ncapableformatting支持对JSP页面的国际化;

Databaseaccess(SQL)支持JSP对数据库的操作。

由于本人水平有限,本文仅介绍Core标签,如有兴趣,可一起探讨其它三种标签的使用与扩充。

EL语言介绍

EL语言是JSTL输出(输入)一个JAVA表达式的表示形式。

在JSTL中,EL语言只能在属性值中使用。

EL语言只能通过建立表达式${exp1}来进行调用。

在属性值中使用表达式有三种方式。

1、value属性包含一个表达式

tagvalue="${expr}"/>

在这种情况下,表达式值被计算出来并根据类型转换规则赋值给value属性。

比如:

outvalue="${username}"/>中的${username}就是一个EL,它相当于JSP语句<%=request.getAttribute(“username”)%>或<%=session.getAttribute(“username”)%>

2、value属性包含一个或多个属性,这些属性被文本分割或围绕

tagvalue="some${expr}${expr}text${expr}"/>

在这种情况下,表达式从左到右进行计算,并将结果转换为字符串型(根据类型转换规则),并将结果赋值给value属性

3、value属性仅仅包含文本

tagvalue="sometext"/>

在这种情况下,字符串型属性value将根据类型转换规则转换为标签所希望的类型。

EL语言的操作符

取得某个对象或集合中的属性值

为了获得集合中的属性,EL支持以下两种操作

1.使用.操作符来获得有名字的属性。

例如表达式${user.username}表明对象user的username属性

2.使用[]操作符来获得有名字或按数字排列的属性。

表达式${user["username"]}和表达式${user.username}含义相同

表达式${row[0]}表明row集合的第一个条目。

在这里user是一个类的对象,它的属性username必须符合标准JavaBean的规范,即必须为username属性定义相应的getter、setter方法。

Empty操作符(空值检查)

使用empty操作符来决定对象、集合或字符串变量是否为空或null。

例如:

${emptyparam.username}

如果request的参数列表中的username值为null,则表达式的值为true。

EL也可以直接使用比较操作符与null进行比较。

如${param.firstname==null}。

比较操作符

操作符

描述

==或eq

相等检查

!

=或ne

不等检查

<或lt

小于检查

>或gt

大于检查

<=或le

小于等于检查

>=或ge

大于等于检查

数字运算符与逻辑运算符均与JAVA语言相同,不再列表。

Core标签库

1、通用标签

out>

out>标签用于在JSP中显示数据,它有如下属性

属性

描述

是否必须

缺省值

value

输出的信息,可以是EL表达式或常量

default

value为空时显示信息

escapeXml

为true则避开特殊的xml字符集

true

例子:

您的用户名是:

outvalue=”${user.username}”default=”guest”/>

显示用户的用户名,如为空则显示guest

outvalue="${sessionScope.username

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1