<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>我的FAQ !</title>
</head>
<body>
<p><b>这是我的FAQ!</b></p>
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="workM" scope="page" class="test.faq" />
<%
ResultSet RS = workM.executeQuery("SELECT * FROM faqs");
String tt;
while (RS.next()) {
tt = RS.getString("Answer");
out.print("<LI>" + RS.getString("Subject") + "</LI>");
out.print("<pre>" + tt + "</pre>");
}
RS.close();
%>
在浏览器的地址栏中键入http://localhost:8080/test/faq.jsp,faq.jsp调用JavaBean,从数据库中读出内容并输出,得到结果如图5所示. 限于篇幅,本文不能列举JSP-JavaBean-JDBC/ODBC-数据库的复杂例子,读者能够从本文最后所推荐的网址中找到并下载到数据库连接范例。
八、 技术分析
Microsoft 公司的 ASP 技术也是动态网页研发技术。JSP和ASP从形式上很相似,ASP程式员一眼就能认出<% %>连同<%= %>。但是深入探究下去会发现他们很多的差别,其中最主要的有以下三点:
1、 JSP的效率和安全性更高
ASP以源码形式存放,以解释方式运行,每次ASP网页调用都需要对源码进行解释,运行效率不高。另外,IIS的漏洞曾使得许多网站源程式大曝光,包括笔者以前用ASP研发的网站,ASP程式全部被人下载了去。 JSP在执行以前先被编译成字节码 (bytecode),字节码由Java虚拟机(Java Virtual Machine)解释执行,比源码解释的效率高;服务器上更有字节码的Cache机制,能提高字节码的访问效率。第一次调用JSP网页可能稍慢,因为他被编译成Cache,以后就快得多了。同时,JSP源程式不大可能被下载,特别是
JavaBean程式完万能够放到不对外的目录中。
2、 JSP的组件 (Component) 方式更方便 ASP通过COM来扩充复杂的功能,如文档上载、发送email连同将业务处理或复杂计算分离出来成为单独可重复利用的模块。JSP通过JavaBean实现了同样的功能扩充。 在研发方面,COM的研发远比JavaBean复杂和繁琐,学会ASP不难,但学会研发COM可不简单。而JavaBean就简单多了,从本文上述示例中能够看出研发JavaBean很方便。 在维护方面,COM必须在服务器上注册,假如修改了COM程式,就必须重新注册,甚至必须关机和重新启动。JavaBean则无需注册,放在CLASSPATH包含的目录中就行了。假如JavaBean进行了修改,则JSWDK和Tomcat现在还需要关闭和重新运行(但不是关机),但研发者已许诺将在以后的版本中做到无需关闭服务器。 另外JavaBean是完全的OOP,能够针对不同的业务处理功能方便地建立一整套可重复利用的对象库,例如用户权限控制、email自动回复等等。
3、 JSP的适应平台更广
ASP现在仅适用于NT和IIS。虽然Unix下有ChiliSoft的插件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的组合来扩充,Unix下的COM实现起来很困难。 JSP则不同,几乎任何平台都支持Java,JSP+JavaBean能够在任何平台下通行无阻。NT下IIS通过一个插件,例如JRUN(http://www3.allaire.com/products/jrun/)或ServletExec(http://www.newatlanta.
com/),就能支持JSP。著名的Web服务器Apache已能够支持JSP。由于Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的运行平台。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的Linux更是来势不小。 从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的和平台无关的。笔者将在NT下实验的JSP网页原封不动地拿到Linux下就运行起来了,感觉很满意。
九、 结论
综上所述,JSP可谓是构建动态网站的一个利器,故推荐给读者,祝愿您们掌控JSP,研发出优秀的网站。ASP程式员也请试一下,JSP里也有session、request、response/out等对象,亲自试试看怎样。
附文
这里是关于JSP的重要参考资料,有兴趣的读者能够进一步阅读。
http://java.sun.com/products/jsp/faq.html
http://www.esperanto.org.nz/jsp/jspfaq.html
http://www.zdnet.com/pcweek/stories/news/0,4153,410709,00.html
http://developer.netscape.com/viewsource/kuslich_jsp
/kuslich_jsp.html
http://web2.java.sun.com/products/jsp/jsp-asp.html
http://www.asptoday.com/articles/19991022.htm
欢迎光临www.dukejava.com!
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的Enterprise Server和Fasttrack Server、微软的Internet Information Server(IIS)和Personal WebServer(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:
<html>
<head>
<title>First Page</title>
</head>
<body>
<H3>Today is:
<%= new java.util.Date() %>
</H3>
</body>
</html>.
把这个文档连同您任何的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++) { %>
<H<%=i%>>Hello</H<%=i%>>
<% } %>.
注释
最后一个主要的JSP元素是嵌入式注释。尽管您始终能够在文档中加入HTML注释,但用户在查看页面源代码时会看到这些注释。假如您不想让用户看到他,您就应该将其嵌入“<%-- ?--%>” 标记中:
<%-- comment for server side only --%>.带JavaBean 的JSP 虽然您能够把大段的代码放在脚本片段(scriptlet)内,但是绝大多数的Java代码属于可重复使用的名为JavaBea的组件。JavaBean类似于ActiveX控件:他们都能提供常用功能并且能够重复使用。 JavaBean的值是通过一些属性获得的,您可通过这些属性访问JavaBean配置。以一个人来打比方,这个人就是个JavaBean,这个人的名字、身份证号码连同住址就是其属性。在JSP网站,您基本上就是通过玩“Connect the beans)”来使您的网站动态化。 假设JavaBean先于网站被创建出来,您需要做的第一件事就是告诉JSP页面他将要用到一个“Bean”。您能够用“<jsp:useBean>”标记来做到这一点:
<jsp:useBean id="localName" class="com.jguru.Person" scope="application" />。“<jsp:useBean>”标记需要您用“id”属性来识鉴别Bean。这里您提供一个名字来JSP页面其余部分的Bean。除了“id”属性,您还须告诉网页面从何处查找Bean,或他的Java类别名是什么。这种类别属性提供确认Bean的功能,其他一些方法也能够做到这一点。最后一个必需的元素是“scope”属性。有了“scope”属性的帮助,您就能告诉Bean为单一页面(默认情况)[scope="page"]、为[scope="request"]请求为会话[scope="session"],或为整个应用程式[scope="application"]保持留信息。有了会话范围,您就能很容易地在JSP网页面上维护购物车等项目。 一旦您声名了一个JavaBean,您就能够访问他的属性来定制他。要获得属性值,请用“<jsp:getProperty>”标记。有了这个标记,您就能指定将要用到的Bean名称(从useBean的"id"字段得到)连同您想得到其值的属性。实际的值被放在输出中:
<jsp:getProperty id="localName" property="name" />。
要改变JavaBean属性,您必须使用“<jsp:setProperty>”标记。对这个标记,您需要再次识别Bean和属性,以修改并额外提供新值。假如命名正确,这些值能够从一个已提交的表中直接获得:参数获得:
<jsp:setProperty id="localName" property="*" />;
能够从一个参数获得,但您必须直接命名属性和参数:
<jsp:setProperty id="localName" property="serialNumber" value="string" />
或直接用一个名字称和值来配置:
<jsp:setProperty id="localName" property="serialNumber" value= <%= expression %> .
关于JavaBean 的最后一件事: 为了Web服务器能找到JavaBean,您需要将其类别文档放在一个特别位置。用JSWDK,最 方便的位置是安装目录下的类别目录,如\jswdk-1.0.1\classes。
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 installation\bin目录添加到PATH中。在autoexec.bat文档PATH行的末尾,加入“C:1.2.2/bin”。
用这个命令将JAR文档复制到“\jre\lib\ext:”目录中: copy c:\jswdk-1.0.1\lib\servlet.jar
c:\jdk1.2.2\jre\lib\ext.
创建一个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" %>
<html>
<head>
<title>Error Page</title>
</head>
<body>
<h1>Our Error Page</h1></font>
<!-- Print Exception -->
We got ourselves an exception:
<%= exception %>
<a href="quote.jsp">Restart</a>
</body>
</html>。
Quotes.java
Quotes JavaBean
利用Yahoo资源来获得股票价格。需要将此 资源保存到JSWDK安装目录下“classes\com\jguru”目录中的“quotes.java”文档中。请在此用JSDK中的Javac编辑器来编辑他。
您的第一个JSP网页。
创建了这两个JSP文档,建立了JavaBean资源文档并编辑了他后,您就能够从http://localhost:8080/quote.jsp加载“quote.jsp”文档以查看结果,假设您没有更改JSWDK安装配置,转而使用别的端口。这个网页当然能做得更漂亮,但是他已实现了需要实现的功能,并且很好地展示了JSP的功能。