JavaServer Pages (JSP)是基于Java的技术,用于创建可支持跨平台及跨Web
服务器的动态网页。
JSP可与
微软的Active Server Pages (ASP)相媲美,但JSP使用的是类似于HTML的标记和Java 代码片段而不是用VBScript。当你使用不提供ASP本地支持的Web
服务器(例如 Apache或Netscape
服务器)时,你就可以考虑使用JSP了。你虽然也可以为这些
服务器弄一个ASP附加
软件模块,但是太昂贵了。现在Sun公司并不会因你使用JSP向你收费(虽然将来可能要收),况且用于Solaris、 Linux以及Windows
系统的
组件都很容易获得。
不要把JSP与
服务器端的JavaScript语言搞混了。Web
服务器自动将通过JSP生成的Java代码片段转换成Java 片段(servlets)。 JSP也可自动控制许多功能,如过去用Perl脚本编写功能程序或像ASP这样的
服务器专用API(应用编程接口)。
我们马上就要开始帮助你建立一个使用JSP 技术的网站范例了。
准备好计算机以使用JSP
你需要Java2
软件开发工具箱(J2SDK),过去称之为
java开发工具箱(
jdk)、JavaServer 网络开发工具箱(JSWDK)、Tomcat,或者其它能支持JSP的Web
服务器。升阳公司为Windows、Solaris以及 Linux平台提供免费的J2SDK和JSWDK。
如果你想在现有的Web
服务器上使用JSP,而此
服务器本身不支持JSP和Java 代码片段,可以
试用Allaire公司的Jrun。它可以为Netscape的Ent
ERPrise Server和Fasttrack Server、
微软的Internet Information Server(IIS)和Personal Web Server(PWS)、Apache以及其他
服务器充当Web
服务器附件。你也可以使用Apache
服务器的Java版,其中包含最新的JSWDK。
下载并安装所需的
软件 目前,版本号为1.2.2-001的J2SDK可下载版以可安装的归档文件形式出现。这个大约20MB的下载量
软件可提供一个彻底的Java开发环境,让你
创造任何基于Java并且利用了而标准核心API的解决方案。其实,你的Web
服务器使用JSP的唯一条件是要有Java
编辑器。要让Web
服务器知道编辑器的位置,需要JAVA_HOME 环境变量设置为J2SDK安装目录。如果你已经在Windows系统中进行了安装并且接受了默认目录, 请将“set JAVA_HOME=C:1.2.2”添加到你的“autoexec.bat”文件中,然后重新启动。
安装J2SDK后,下载并安装JSWDK或者是Tomcat β版,即基于Java的Apache Web
服务器的β版。你把JSWDK放在什么地方是无关紧要的,只要你以后能找到它就行。通常,将其放在顶层目录中,这样你在替换JSWDK或JSDK时无需删除另一个
软件。安装好这个文件后,准备工作已经就绪,你可以开始JSP开发工作了。
正确地安装JSWDK后,请运行“startserver”脚本程序,以启动Web
服务器,使其按照默认情况监听8080端口。你要在启动
服务器之后查看您是否已正确地安装了此工具,请加载一个JSP样本文件(http://locahost:8080/examples/jsp/)。如果你能成功地运行这些样本文件,说明你已经正确地安装了这个
软件。如果你在用来启动
服务器的控制台窗口中看到报错信息,你就需要做些修改。最经常发生的问题是没有设置或不正确地设置了JAVA_HOME环境变量。要看到当前环境变量设置情况,要请在DOS提示符下键入“set”设置。
开始
在解释 JSP语法前,创建一个快捷网页,显示目当前的日期和
时间,并然后将之其保存为sample.jsp:
First Page Today is:
<%= new java.util.Date() %>
.
把这个文件以及你所有的HTML 和 JSP 页面放在JSWDK安装目录下的网页目录里。你可以从http://localhost:8080/sample.jsp加载此网页。该网页首次被访问时,Web
服务器会把JSP编译成Java代码片段,这样你就能够看到当前的日期和
时间了。
你已经下载、安装并配置好了开发环境,你可以开始
学习JSP语法并创建自己的基于JSP的解决方案了。
JSP基本语法
讲完安装问题后,现在进入来讨论JSP语法。一个投机取巧的办法是下载语法卡片。如果你不熟悉
java编程,也许你想看一下Sun的指南 。然而网页创建者并不需要进行太多的Java开发。除了一些方法调用,在你的JSP网页里应尽可能少用Java代码。
记住以上提示,我们首先来看一看JSP指令和脚本元素,之后我们会解释JavaBeans和隐含对象。共有五种JSP指令和脚本元素。在JSP 1.0版中,大部分JSP被一个以“<%” 开头和以“%>”结尾的的标记括在其中。在更新的JSP 1.1规范出台后,就有了与XML兼容的版本。
JSP指令和脚本元素
Directives <%@ directive %>
Declarations <%! declaration %>
Expressions <%= expression %>
Code Fragment/Scriptlet <% code fragment %>
Comments <%-- comment --%>
指令
JSP指令是为JSP引擎而
设计的。他们并不直接产生任何可见输出,而只是告诉引擎如何处理其余JSP页面。这些指令始终被括在 “<%@ ?%>”标记中。两个最重要的指令是“pagePage”和“Include”。“Taglib”指令不在讨论之列,但是在用JSP1.1创建自定义标记可以使用它。
几乎在所有JSP页面顶部都会看到“Page”指令。尽管不是必须的,但它可以让你指定:
到何处查找起支持作用的Java类别:
<%@ page import="java.util.Date" %>,
出现Java运行问题时,将网上
冲浪者引向何处:
<%@ page errorPage="errorPage.jsp" %>,
还有你是否需要管理用户的会话级信息,这些信息可能来自多个网页(在下面的JavaBeans一节将对此做进一步讲)述:
<%@ page session="true" %>.
“Include”指令可以把你的内容分成更多可管理的元素,比如包括一个普通页面页眉或页脚的元素。包含的网页可以是一个固定的HTML 页面或更多的JSP内容:
<%@ include file="filename.jsp" %>
声明
JSP声明用来让你定义页面级变量,以保存信息或定义JSP页面的其余部分可能需要的支持方法。如果你发现代码太多,通常最好把它们写成一个独立的Java类别。声明一般都在“<%! ?%>”标记中。一定要以分号(;)结束变量声明,因为任何内容都必须是有效的Java语句:
<%! int i=0; %>。
表达式
有了JSP表达式,表达式评估结果会被转换成一个字符串,并且被直接包括在输出页面之内。JSP 表达式包含在“<%= ?%>” 标记中,没有分号,除非在加引号的字符串部分使用分号。
<%= i %>
<%= "Hello" %> .
代码片段/脚本片段
代码片段/脚本片段(Scriptlets) JSP代码片段或脚本片段是嵌在“<% ?%>”标记中的。这种Java代码在Web
服务器响应请求时就会运行。在脚本片段周围可能是原始的HTML或XML语句,在这些地方,代码片段可以使你创建条件执行代码,或要用到另外一段代码的代码。例如,以下的代码组合使用表达式和代码片段,显示H1、H2、H3和H4标记中的字符串“Hello”。代码片段并不局限于一行源代码:
<% for (int i=1; i<=4; i++) { %>
>Hello>
<% } %>.
注释
最后一个主要的JSP元素是嵌入式注释。尽管你始终可以在文件中加入HTML注释,但用户在查看页面源代码时会看到这些注释。如果你不想让用户看到它,你就应该将其嵌入“<%-- ?--%>” 标记中:
<%-- comment for server side only --%>.
带JavaBean 的JSP
虽然你可以把大段的代码放在脚本片段(scriptlet)内,但是绝大多数的Java代码属于可重复使用的名为JavaBea的
组件。JavaBean类似于ActiveX
控件:他们都能提供常用功能并且可以重复使用。
JavaBean的值是通过一些属性获得的,你可通过这些属性访问JavaBean设置。以一个人来打比方,这个人就是一个JavaBean,这个人的名字、身份证号码以及住址就是其属性。在JSP网站,你基本上就是通过玩“Connect the beans)”来使你的网站动态化。
假设JavaBean先于网站被创建出来,你需要做的第一件事就是告诉JSP页面它将要用到一个“Bean”。你可以用“
”标记来做到这一点:
。
“”标记要求你用“id”属性来识鉴别Bean。这里你提供一个名字来JSP页面其余部分的Bean。除了“id”属性,你还须告诉网页面从何处查找Bean,或者它的Java类别名是什么。这种类别属性提供确 认Bean的功能,其他一些方法也可以做到这一点。最后一个必需的元素是“scope”属性。有了“scope”属性的帮助,你就能告诉Bean为单一页面(默认情况)[scope="page"]、为[scope="request"]请求为会话[scope="session"],或者为整个应用程序[scope="application"]保持留信息。有了会话范围,你就能非常容易地在JSP网页面上维护购物车等项目。
一旦你声名了一个JavaBean,你就可以访问它的属性来定制它。要获得属性值,请用“”标记。有了这个标记,你就能指定将要用到的Bean名称(从useBean的"id"字段得到)以及你想得到其值的属性。实际的值被放在输出中:
。
要改变JavaBean属性,你必须使用“”标记。对这个标记,你需要再次识别Bean和属性,以修改并额外提供新值。如果命名正确,这些值可以从一个已提交的表中直接获得:参数获得:
;
可以从一个参数获得,但你必须直接命名属性和参数:
或者直接用一个名字称和值来设置: />.
关于JavaBean 的最后一件事: 为了Web服务器能找到JavaBean,你需要将其类别文件放在一个特殊位置。用JSWDK,最 方便的位置是安装目录下的类别目录,如jswdk-1.0.1classes。
JSP隐含对象
与JSP语法相关的最后的元素是一些叫做“隐含对象”的东西。在JSP代码片段中,你可以利用这些隐含对象与JSP页面的代码片段执行环境产生互动。应尽量少访问这些内置隐含对象。但是,在一某些情况下,访问隐含对象是可被接受的。若要充分利用隐含对象,就需了解最新的Java Servlet API。
下表列出可用的隐含对象集合。
隐含对象说明
request 客户端请求,包括从GET/POST请求传递过来的参数
response 网页传回客户端的反应
pageContext 在此管理网页属性
session 与请求关联的会话
application 代码片段的运行环境
out 传送响应的输出流
config 代码片段配置对象
page JSP网页本身
exception 有错的网页中未被捕获的例外
这些都是用来做什么的,你又如何来使用它们呢?基本上说,在你的脚本片段里,你可以用它们进入执行JSP代码的代码片段。用不着深入了解太多的Servlet API细节,我们来看看能用它们来做到的某些事情:
你可以不用表达式,直接进入“Out”隐含对象,将某些内容输出到响应中:
<% out.println("Hello"); %>。
用不着把一个参数直接送到JavaBean,你可以从请求对象获取参数值:
<% String name=request.getParameter("name"); out.println(name); %>.
在你用JSP进行开发的过程中,进行更多的开发的过程中,如果创建了JavaBeans或发现jsp文件中加入了太多的Java源代码,你就需要创建起支持作用的Java分类(class)了,它可以协助你重复利用源代码并减少JSP网页编译时间。当你需要创建Java分类文件时,你必须:
将JDSWK installationin目录添加到PATH中。在autoexec.bat文件PATH行的末尾,加入“C:1.2.2/bin”。
用这个命令将jar文件复制到“jrelibext:”目录中: copy c:jswdk-1.0.1libservlet.jar c:jdk1.2.2jrelibext.
创建一个JSP网站
现在该是把所有这些JSP语法派上用场的时候了。我们将创建一个网页,它有一个输入表单,可以使用户输入一个股票代号以获得出当前股价(有20分钟)。如果输入有误,则显示报错网页。
quote.jsp
首先,用 这个代码 创建一个quote.jsp网页并将其保存在JSWDK安装目录下的网页目录中。大多数的网页是标准的HTML,其间散布着JSP代码。第六行是一个网页指示,表示将把所有错误发送到“errorPage.jsp”文中。第13到15行是一个脚本片段,主要说明只有提供“符号”参数才会显示表格。“If”代码段在32到34行结束。第17行定义了要用的JavaBean,第18行从参数加载JavaBean的符号属性。第27行到29行显示Bean的属性。除了"if "代码段,实际上并不涉及其它Java代码。
errorPage.jsp
下一步,将下列JSP源代码保存到网页目录中的“errorPage.jsp”文件中。“这是一个错误网页”的提示为第一行,它将isErrorPage网页提示属性设置为真。上一页说了明错误网页的位置,本页则说明这就是错误网页。其它JSP文件中的JSP专用代码只有访问隐含例外对象才用到。网页只显示其值:
<%@ page isErrorPage="true" %>
Error Page
Our Error Page
We got ourselves an exception:
<%= exception %>
Restart
。
Quotes.java
Quotes JavaBean 利用Yahoo资源来获得股票价格。需要将此 资源保存到JSWDK安装目录下“classescomjguru”目录中的“quotes.java”文件中。请在此用JSDK中的Javac编辑器来编辑它。
你的第一个JSP网页。
创建了这两个JSP文件,建立了JavaBean资源文件并编辑了它后,你就可以从http://localhost:8080/quote.jsp加载“quote.jsp”文件以查看结果,假设你没有更改JSWDK安装设置,转而使用别的端口。这个网页当然能做得更漂亮,但是它已实现了需要实现的功能,并且很好地展示了JSP的功能。