【IT168 专稿】
随着脚本语言的流行,它的优点也逐渐显现。大多数脚本语言都具有快速开发和易维护的特性。如果我们想在一天内建立一个动态的网站,一般只需要花数小时学习某种脚本语言就可以完成这些任务。象非常流行的PHP语言(一种类似C语法的脚本语言),就拥有公认的快速开发的能力。
虽然PHP的精彩特性很多,它也经常被认为是运行最快的脚本语言。但有时也会有些不尽人意的地方,如果这些方面累计起来,可以会造成不小的麻烦。如不加控制地写代码,将会使PHP代码激增,并可能增加维护和调试成本。而且和PHP语句混在一起的HTML标签以及其他的网页元素会大幅度地降低程序的可读性。这些情况在JSP代码中同样存在。因此,最近几年象Struts一样的框架大量涌现。这种框架使用MVC模式将应用程序代码和Web分开,这样可以将Web设计人员和开发人员分开,使他们各尽其职,避免发生冲突。
虽然PHP的精彩特性很多,它也经常被认为是运行最快的脚本语言。但有时也会有些不尽人意的地方,如果这些方面累计起来,可以会造成不小的麻烦。如不加控制地写代码,将会使PHP代码激增,并可能增加维护和调试成本。而且和PHP语句混在一起的HTML标签以及其他的网页元素会大幅度地降低程序的可读性。这些情况在JSP代码中同样存在。因此,最近几年象Struts一样的框架大量涌现。这种框架使用MVC模式将应用程序代码和Web分开,这样可以将Web设计人员和开发人员分开,使他们各尽其职,避免发生冲突。
象这些框架的做法虽然从表面上看更完美。但它却隐藏着另一个不足,就是增加了学习这些框架的成本。这些成本的增加使一些小型的公司增加的负担。而且对于不大的应用程序使用这些框架可能不切合实际。因此,我们需要找到一些可以快速开发小型应用程序的方法。这些方法之一就是JSP语言中的JSTL。下面我们就来看个究竟。
一、使用JSTL更容易实现Web应用程序
JSTL是JavaServer Standard Tag Library的缩写,它是JSP的一个超级,JSTL将一些常用且必须的功能封装在四个扩展的标签库中。JSTL的核心思想就是无需写Java代码就可以非常容易地快速建立Web应用程序。这主要是由于一般的Web应用功能被封装了起来。JSP有支持一种表达式语言(EL),这种语言允许非常容易地使用sessions和beans。如下面的表达式:
${sessionScope.driver}
上面的表达式从session中获得了driver属性。如果在JSP中没有EL,那么将会使用更多的java代码。如使用EL从一个bean中得到一个属性类似于${login.UID},而不使用EL,则代码如下:
<%= ((Login) pageContext.
getAttribute("login")).getUID () %>
需要注意的是虽然EL属于JSTL的一部分,但它却可以不依赖JSTL的标签库来运行。JSTL所支持的四个标签库是:内核库(core),这个库主要包含了一些基本的编程指令,如iterations等。用于国际化和格式化的库(internationalization and formatting):这个库允许程序读取和使用一些用于国际化的信息,以及格式化字符串。SQL库:这个库主要通过数据源来连接和操作数据库。XML库:这个库主要来操作XML数据。通过XML库还可以和现在非常流行的AJAX一起使用以达到更好的效果。
在PHP中也有类似的标签,PHP也正是通过这些技术才使生产率得到大幅度地提高。下面就让我们来看一个简单的PHP页代码。这段代码将大的数据区分成多页显示。代码如下:
需要注意的是虽然EL属于JSTL的一部分,但它却可以不依赖JSTL的标签库来运行。JSTL所支持的四个标签库是:内核库(core),这个库主要包含了一些基本的编程指令,如iterations等。用于国际化和格式化的库(internationalization and formatting):这个库允许程序读取和使用一些用于国际化的信息,以及格式化字符串。SQL库:这个库主要通过数据源来连接和操作数据库。XML库:这个库主要来操作XML数据。通过XML库还可以和现在非常流行的AJAX一起使用以达到更好的效果。
在PHP中也有类似的标签,PHP也正是通过这些技术才使生产率得到大幅度地提高。下面就让我们来看一个简单的PHP页代码。这段代码将大的数据区分成多页显示。代码如下:
<?php
include 'config.php';
include 'connection.php';
$query = 'select * from parts';
$result = mysql_query($query) or die(
'Sorry the query failed');
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$temp= "uid :{$row['uid']} <br>Name : {$row['name']}
<br>" .
"Description : {$row['description']} <br><br>";
echo $temp;
$message=$message.$temp;
}
$message=$top.$message.$bottom;
mail("$to", "$subject", "$message", "$headers");
include 'close.php';
?>
在上面的代码中,config.php包含了全局变量,connection.php打开一个MySQL数据库连接,close.php并数据加连接关闭。
从名子可以看出,$query表示一条SQL查询语言,我们可以根据需要将其变成其他的查询。如果想更灵活,可以将其保存在一个文本文件中,通过fopen()方法对其进行读取。通过配置文件还可以使数据库管理员无需修改源程序就可对查询进行操作。
在上面代码的开始处通过调用mysql_query方法执行了查询,并将结果返回给$result,这种方法使用了缓冲,只有当结果全总返回时才生成响应的HTML。当然,我们也可以不使用缓冲的方法。如果这个方法执行失败,我们也可以用PHP将程序引向错误页。PHP是一种支持iteration的语言,我们可以通过Mysql_fetch_array()方法得到结果集的行。$row就代表Mysql表中的每一行。而$message将得到mail的信息。头信息($headers)的内容如下:
在上面代码的开始处通过调用mysql_query方法执行了查询,并将结果返回给$result,这种方法使用了缓冲,只有当结果全总返回时才生成响应的HTML。当然,我们也可以不使用缓冲的方法。如果这个方法执行失败,我们也可以用PHP将程序引向错误页。PHP是一种支持iteration的语言,我们可以通过Mysql_fetch_array()方法得到结果集的行。$row就代表Mysql表中的每一行。而$message将得到mail的信息。头信息($headers)的内容如下:
$headers =
"From: $from\nReply-To:
$replyto\nContent-Type:
text/html;
charset=iso-8859-1";