JSP Standard Tag Library 1.0 Public Draft 发布 (0分)

  • 主题发起人 主题发起人 yysun
  • 开始时间 开始时间
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
JSTL 1.0 Spec Public Draft
http://jcp.org/aboutJava/communityprocess/review/jsr052
JSTL 1.0 reference implementation
http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard
 
孙老师应该经常给我们上上课 。。。。。。
 
JSP 1.0 玩 JavaBean
JSP 1.1 玩 Tag Lib
JSP 1.2 ...
JSP 1.3 玩 Standard Tag Lib
Standard Tag Lib 将会包括在 JSP 1.3 中,它将使得目前很多基于 servlet 的
Template 黯然失色,使得实现 MVC 结构更加容易。
 
我觉得没有说的这么神吧?
我不怎么喜欢这个JSTL.刚刚翻了一遍spec.
感觉反而不如用struts这类的framework清晰。
 
JSTL 优点不完全统计:
1、把 Scripting 彻底清除出 JSP,完全变成用 xml 的 Tag 来编程,
这种风格非常象 XSLT 的基于Tag 的编程。
2、JSP 和 JavaBean 之间的数据转换非常容易。
3、<c:import> 可以把任何自己和其他网站的内容囊括进来,塞到变量里慢慢分析,
或者直接输出。
4、XML 分析、XSLT 转换,在一个网页里可以用 XPath 提取数据,用 XSL 转换片断 ...
 
关于“JSP 和 JavaBean 之间的数据转换非常容易”的解释。
JSP 的数据分成:
- 页面里的 scripting-language-expression
- 保存在 application,session,page 的数据
- JavaBean 的数据。
JSTL 引入 Expression Language 的概念使得处理和输出这些数据到网页很方便。
例1:就可以象 PHP 那样方便地直接用变量名来取 querystring 了。[8D]
<c:out value="${param.foo}"/> 等价于:<%=request.getParameter("foo")%>
例2:JavaBean 创建了 customers 对象,存入 session 后,就能这么用:
<c:forEach var=”customer” items=”${customers}”>
<c:out value=”${customer.address.country}”/>
</c:forEach>
估计用到了 reflection,所以可以一层层对象、属性调用下去 [:D]
例3:把 yahoo 装进变量:<c:import url="http://yahoo.com" var="yahoo"/>
试想从 yahoo 得到 xml,然后配上 XSLT 会如何呢? - My Yahoo!
先举着些吧。我再次推荐 JSTL, 它是一套非常好的工具。JSTL 不是 Jakarta Taglib。
JSTL 是 JSR52 的产物,是个标准,Jakarta Taglib 是大杂烩,又杂又乱。
不过 JSTL 1.0 的实现版本,却是由 Jakarta Taglib 那帮人实现的,因为他们做了一大堆
Taglib 了,精简出 JSTL 比较顺手。
 
孙老板
struts是什么意思呀,能解释一下么?
JSTL和Jakarta Taglib 又是什么呀
呵呵,小弟不知道,所以问一下了
从技术上来说,它们又各有什么缺点呢?
 
最近在用webwork,但那东西没什么资料。只能自己摸索。
目前的使用感觉,还是很有一些价值.
在google上看到 曹晓钢 贴过篇相关的文章。
但URL已经失效,能不能请曹兄再贴一次。
目前的JSP应用中,一般应用已经没什么可多说的了。
进一步的发展重点应该是类 webwork的 jsp web application framework.
sturts只听说过,具体不清楚。
 
曹晓钢 关于 webwork 的贴子在这里:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1000165
 
为什么我看不到内容???[:(!][:(][:(!]
 
孙老师:
看完JSTL的draft,写了一篇文章,发到您的信箱,请您帮忙看一下,
谢谢您!
 
delphiasp, 没有收到您的文章,没有附件,请再发一次。
我找到篇介绍 JSTL 的文章:
JSP Standard Tag Libraries, Part 2
http://www.onjava.com/pub/a/pub/a/onjava/2002/05/08/jstl.html
(3月份出的 Part 1 有些过时了,这年头 ...)
 
上面一开始我没有想出来 JSP 1.2 玩什么,现在看了下面的那篇文章就可以说:
JSP 1.2 玩 XML (用 XML 的语法来写 JSP)。
请看:Writing JSPs in XML using JSP 1.2
http://www.onjava.com/pub/a/onjava/2001/11/28/jsp_xml.html
 
Writing JSPs in XML using JSP 1.2 中例子:
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="1.2">
<jsp:text>
<html>
<head>
<title> Simple JSPdo
cument </title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
</jsp:text>
</jsp:root>
竟然已经能在 Tomcat 4 中运行!赶紧翻一年前就下载的 JSP specification 1.2。
果真是有 XML 表达定义,于是再试:
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="1.2">
<jsp:declaration>int i;</jsp:declaration>
<hello>
<jsp:scriptlet>i=3;</jsp:scriptlet>
<jsp:text> hi you all</jsp:text>
<jsp:expression>i</jsp:expression>
</hello>
</jsp:root>
也成功运行了。
各位,JSP 1.2 的这个“用 XML 的语法来写 JSP”概念非常重要。它是 JSTL 语法的基础。
不了解这个概念,会觉得 JSTL 很奇怪。甚至一年后,也许就再也看不懂 JSP 了。
 
孙老师:
我发到您人yiyisun@yahoo.com中,您的yysun@263.net不能收到,
不知现在发到哪里去?
我使用的是delphiasp@yahoo.com.cn,您能不能发一个邮件给我。
谢谢您!
 
孙老师:
已经再发过去了,请您帮忙收一下!谢谢您!
 
http://developer.java.sun.com/developer/community/chat/JavaLive/2001/jl1023.html
Struts is an MVC that uses tag libraries, they have already committed to use
JSPTL 1.0 when it comes out. They also are participating in JSR-127,
so we expect them to integrate well with them.
 
意味着struts会放弃它原有的一些taglib了?
 
谢谢 delphiasp 送来的文章
用JSTL构建纯标记动态网站
林志伟1 许力1 (福建师范大学 计算机科学系 福建 福州 350007)
摘要:JSTL是由apache组织推出的,JSP与XML技术结合的标准的Tag Library。本文通过对基于JSTL编程与传统JSP动态网页编程的比较,着重介绍了JSTL在动态网页开发中常用的标记,并简要指出了它的优势。
Abstract:
关键字:JSTL Tag Library 标记 动态网页
Key words:JSTL Tag Library tag active web
XML(eXtensible Markup Language)技术的应用日益广泛,它作为一种通用的数据描述语言,可以实现数据交换、定义文档类型等功能。将XML与JSP(Java Server Pages)技术结合的JSP Tag Library,应用于动态网页的设计,可以把商业逻辑与应用层完全分离、实现代码的可重用和提高网页开发的效率等。JSTL(JSP Standard Tag Library)是标准的JSP Tag Library,是apache软件基金会设立了Jakarta项目的重要组成部分,它是JCP(Java Community Process)制定的开放的规范。
ASP、PHP或传统JSP编程为了达到动态网页的效果,通过在HTML代码中插入包含在<%…%>的代码来实现,这样具有开发方式效率低,容易出错,不易维护,难于扩充等缺点。比如在修改某个功能时误删了<%或包含在内的代码而导致整个页面出错。使用JSTL完全可以避免这些情况的发生,JSTL把包含在<%…%>中的scripting彻底清除出JSP,使得动态网站开发的代码纯标记,如变量的定义和提取、循环判断、数据库连接等动态操作都在<….>和</>的标记中完成,与HTML语言基本相同。打个比方,如果HTML语言是W3C制定的静态网页标准,那么JSTL就是JCP制定的用于动态网页设计的另一个标准。
本文从笔者开发实践中提取动态网页开发的一些重要问题,着重介绍在动态网站开发中如何使用JSTL。
一、 运行平台设置
JSTL的实现是基于JDK1.2(JavaTM 2 SDK, Standard Edition, v 1.2.2)+Tomcat4.0,JDK1.2和Tomcat4.0可以分别从 http://java.sun.com/jdk/和http://jakarta.apache.org/网站下载到。
从http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard下载JSTL1.0 reference implementation,这是一个名为jakarta-taglibs-standard-beta2.zip的压缩包。将其解开后,把lib目录下所有的.jar文件放复制到应用程序的web-inf/lib目录下,这里假设放到/tomcat4/webapps/examples/WEB-INF/lib中。
jakarta-taglibs-standard-beta2.zip解压包中还有standard-examples.war压缩文件,用winzip就可以解压,解压文件中有很多关于JSTL的例子,把文件解压后当中的文件复制到/tomcat4/webapps/examples中。然后,启动Tomcat,在IE中输入http://localhost:8080/examples/index.html,再逐个运行这些例子,可以看到运行结果。查看它们的代码,都是用基于JSTL的标记来实现的。
二、 流程控制
程序设计中最常碰到的就是变量的定义,条件的判断,JSTL提供了流程控制的标记。为了在设计的动态页面中使用JSTL提供的标记,必须在JSP程序中加入<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>以定义一个前缀c,后面将使用这个前缀来实现流程控制的标记。
1、数据提取
在网页的设计中,常常需要将表单<form> ….</form>中的数据传到另外一个页面中去,传统的JSP编程是在<%%>中加入脚本request.getParameter()来逐个获取。如常见的用户名和密码输入框:
<form action="in.jsp" method="post">
用户名:<input type="text" name="name">
密 码:<input type="password" name="pwd">
<input type="submit" name="确定">
</form>
传统的脚本方式是用:
<%
name=request.getParameter(“name”);
password=request.getParameter(“pwd”) ;
%>
来提取用户名和密码输入框中的数据,并把它赋给变量name和password。使用JSTL后,上面的这段代码变成了标记:
<c:set var="Tname" value="${param.name}"/>
<c:set var="Tpassword " value="${param.pwd}"/>
<c:set...>很像HTML中的标记,它用于定义变量,如上定义了两个变量Tname和Tpassword,而var和value就是<c:set…>标记的属性了。
2、输出数据
JSP中用<%out.println(name+”<br>”);%>来输出变量name的值并换行,现在只要用<c:out …>标记配合HTML语言中的<br>就可以实现了,如:
<c:out value="${Tname}"/>
<br>
3、条件判断
在验证用户的合法性时,要判断密码是不是正确的,原来使用如下语句:
<%
if(password==”******”)
out.print(name+”是合法的用户!”+”<br>”);
%>
现在可以替换成:
<c:if test="${Tpassword=='******'}">
<c:out value="${Tname}"/>
<c:out value="是合法的用户!"/>
<br>
</c:if>
<c:if…>…..</c:if>是进行条件判断的标记,表达式Tpassword=='******'返回一个真或假的值给test属性。
4、循环控制
JSTL中使用<c:forEach…>….. </c:forEach>标记来实现程序设计的循环。如实现从1开始到10为止,步长为2的循环:
<c:forEach var="i" begin
="${1}" end="${10}" step="${2}">
<c:out value="${i}"/>
</c:forEach>
将输出1 3 5 7 9这5个数。
<c:forEach…>….. </c:forEach>标记还有另外一种表示方式,它将Blue,Red和Green保存在items中,通过循环逐个取出items中的值。如:
<c:forEach var="color" items="Blue,Red,Green">
<c:out value="${color}"/><br>
</c:forEach>
而且,items还可以是Enumeration等其他类型的赋值。
5、文件包含
动态网页设计为了实现“分而治之”的方法以及文件的共享,常把网页分成几个部分,放在不同的网页文件中,然后在一个文件中把它们包含进来。JSTL中使用<c:import url="includedfile"/>就可以包含一个文件,如:
<c:import url="inc.jsp"/>包含了inc.jsp这个网页
<c:import url="http://www.yahoo.com" >就把yahoo的主页面也包含进来了。
6、重定向
<c:redirect url="redir.jsp"/>将当前程序转向redir.jsp上执行。
<c:redirect url=" http://www.yahoo.com"/>重定向到yahoo网站。
三、 数据库访问
数据库访问是动态网页的重要组成部分,它可以实现页面数据与后端数据库的交互。比如,新用户注册时需要将用户输入的信息保存到数据库,而用户登录时需要从数据库端提取数据对用户身份进行校验,等等。采用JSTL标记进行数据访问的优势在于,开发者只需关注要与哪一个数据库连接,获得什么样的结果就可以了,而具体的连接细节交给后端的Java代码来执行,这比在页面中加入Java脚本,显得更为简单方便,而且更易于排除错误。使用JSTL进行数据连接等操作之前,也同样也在程序中加入<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>,以定义一个进行数据库操作的前缀sql。
1、 建立连接
在对数据库进行操作之前,要先对数据库建立一个连接,以后每次标准SQL操作都建立在这个连接之上进行的。比如,在JSP脚本中是这样建立连接:
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//设置驱动器
Connection conn=DriverManager.getConnection("jdbc:odbc:xml");
//通过JDBC-ODBC与xml数据库别名建立连接
%>
采用JSTL的<sql:setDataSource…/>标记后,就变成如下的代码:
<sql:setDataSource
var="conn"
driver="sun.jdbc.odbc.JdbcOdbcDriver"
url="jdbc:odbc:xml"
/>
这里也是建立一个conn连接,以后的查询操作都可以采用conn来进行。
2、 进行查询
<sql:query…>标记中有两个关键属性var和dataSource,下面代码在执行中var属性声明了查询返回的数据集rs,dataSource属性说明了所执行的操作是在conn连接基础上进行的:
<sql:query var="rs" dataSource="${conn}">
SELECT * FROM t1
</sql:query>
只要把要执行操作的SQL语句写在<sql:query…>……</sql:query>之间就可以生成查询的数据集rs,下面对查询的结果rs进行输出:
<c:forEach var="r" items="${rs.rows}">
<c:out value="${r.ID}"/><
<c:out value="${r.NAME}"/>
</c:forEach>
假如执行查询的表中含有id和name两个字段,在循环输出的过程中,把rs的数据集合存放在items中,通过r把items中的数据逐个取出。
3、 数据库更新
JSTL通过把SQL语句包含在<sql:update…>….</sql:update>标记中,实现数据库内容
的更新。使用update标记可以实现除查询以外的所有标准SQL操作,包括create、update、insert、drop等。程序开发人员只要设置标记中的属性,把想要实现的SQL放在标记中就可以了。举个创建表格newTable的例子:
<sql:update dataSource="${conn}">
create table newTable(
nameid int primary key,
name varchar(80)
)
</sql:update>
4、 使用参数
动态网页设计中与数据库的交互,数据往往是以参数形式传送的。比如,要把页面上
FORM中输入框的数据保存(insert)到数据中,根据用户的请求动态查询(select)数据库,等等。下面是使用参数向数据库插入数据的例子:
<sql:update dataSource="${conn}">
INSERT INTO xml (id,name)VALUES (?,?)
<sql:param value="3"/>
<sql:param value="${newName}"/>
</sql:update>
在insert语句中,使用了两个问号(?),说明有两个参数要传入,再使用<sql:param …/>
标记把动态数据有顺序地传入。
四、 总结
本文对JSTL在动态网页编程中常见的应用作介绍,其实,通过JSTL不仅可以实现上面的这些功能,还可以实现对XML文档的解析,我们就可以把数据表示成XML形式,用JSTL来解析,这样更发挥出XML技术的强大优势。JSTL是XML与JSP两大技术结合的产物,它的出现简便了JSP动态网页编程,将推动JSP动态网页编程的进一步流行和发展。
参考文献:
[1] 大富翁论坛:http://www.delphibbs.com/delphibbs
[2]JSTL1.0 Spec-Public Draft:http://jcp.org/aboutJava/communityprocess/review/jsr052
 
对于一项新技术来说,不经过广泛的工程实践,
很难判断其实际价值。
 
后退
顶部