您的位置:首页技术文章
文章详情页

JSP入门教程

【字号: 日期:2024-07-04 11:14:53浏览:11作者:猪猪

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 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:;

<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="200453092147.htm.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.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" %>;

<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安装目录下“classescomjguru目录中的“quotes.java文件中。请在此用JSDK中的Javac编辑器来编辑它。;

你的第一个JSP网页。;

创建了这两个JSP文件,建立了JavaBean资源文件并编辑了它后,你就可以从http://localhost:8080/quote.jsp加载“quote.jsp文件以查看结果,假设你没有更改JSWDK安装设置,转而使用别的端口。这个网页当然能做得更漂亮,但是它已实现了需要实现的功能,并且很好地展示了JSP的功能。

欢迎使用JavaServer Pages(以下简称JSP)技术—制作动态内容网页的方法。;

如果你希望学习这篇教程的话,我想你一定是这项技术的新手。你可能想成为一名利用JSP技术开发网络应用程序的程序员或者网页设计师。本教程中包含了一系列JSP的技巧和一些简单的代码的写法,每一步都举了一组例子来讲述原理。;

我建议你在学习本教程之前先去看一看FAQ,了解如果配置你的服务器好让他能支持并运行JSP。那样你就可以跳过前边的内容直接看你感兴趣的内容了。;

OK,费话少说,Let’s go!

第一课:真正的开始;

现在开始做我们的第一个JSP页面。图1-1展示了一个最简单的JSP页面,接下来是两段代码。;

[dukebanner.html];

<table border=0 width=400 cellspacing=0 cellpadding=0>;

<tr>;

<td height=150 width=150> &nbsp; </td>;

<td width=250> &nbsp; </td>;

</tr>;

<tr>;

<td width=150> &nbsp; </td>;

<td align=right width=250>;

<img src=duke.waving.gif></td></tr></table><br>;

helloworld.jsp;

<%@ page info="a hello world example" %>;

<html>;

<head><title>Hello, World</title></head>;

<body bgcolor="#ffffff" background="background.gif">;

<%@ include file="dukebanner.html" %>;

<table>;

<tr>;

<td width=150> &nbsp; </td>;

<td width=250 align=right> <h1>Hello, World!</h1> </td>;

</tr>;

</table>;

</body>;

</html>;

页面说明:;

在很多JSP文件中你都要写上这样的说明。在helloword.jsp中:;

<%@ page info="a hello world example" %>;

傻瓜也看得出来,这句话没什么大用,只是简要的说明一下这段代码的作用。;

你可以在JSP文件中的任何地方写这种代码,但是好的习惯是把他写在最前面,还有,因为他是JSP标签,记住一定要放在<html>前面,呵;

include说明:;

include用来在主JSP文件中调用本地的一个其他文件,通常是一些版权信息啦,脚本语言啦等其他任何你想在其他文件中重复使用的代码。在这个例子中就是调用了一个图片其实。大家明白这个意思就得了。;

随便说两句:;

在JSP中对写法非常敏感,不可以有一点错误。举个例子,把<jsp:useBean>写成<jsp:usebean>那样服务器会出现错误信息。一些如类名,包名,路径名还有其他的敏感的标签等千万不要写错。有一些JSP标签拿不准的话就去查一下JavaServer Pages语法卡片。;

代码写好了,如何试验一下呢?;

我这里写的UNIX下的方法,如果你用Windows,那么换一下路径就可以了;

1、 先建一个目录:../jswdk-1.0/examples/jsp/tutorial/helloworld;

2、 把这些文件拷过去background.gif, duke.waving.gif, dukebanner.html, and helloworld.jsp;

3、 cd ../jswdk-1.0,然后startserver;

4、 开一个浏览器,;

5、 http://yourMachineName:8080/examples/jsp/tutorial/helloworld/helloworld.jsp

第二课:用HTML表单;

大多数情况下,商业的网站都要有一些表单,比如说输入一下消费者的姓名啦,地址啦,或者敲一个词来用搜索引擎来查一下啦,或者市场人员从来访者处收集一些数据供参考什么的。;

那些表单传回的数据怎么处理的?;

来访者通过表单向JSP引擎输入了数据,并保存在了request对象中,那么接下来怎么办?;

图2-1向你展示了数据流是如何在服务器和客户之间传递的(至少在SUN的JSP reference implementation是这么做的,别的JSP引擎工作起来可能会有一点点的不同,其实大同小异,都差不多);

字儿太小了,可能看不大清吧?俺来解释一下了只好。;

首先,JSP引擎把存放在request对象中的数据发到JSP页面指定的服务器端的组件(JavaBeans组件, servlet,或者enterprise bean),组件收到这些个数据以后,有可能再存这些数据到数据库或者其他的地方存放起来,同时,返回一个response对象给JSP引擎。JSP引擎再把response对象传给JSP页面,这时的页面包含了定义好的格式和从服务器端得到的数据。这时JSP引擎和Web服务器再发送一个整理好的完整的页面给客户,也就是这们在浏览器上看到的结果。客户和服务器间的通信协议可以用HTTP,当然也可以用其他的。;

Request和Response对象在你制作的JSP原代码中起作用。到于request对象到底怎么用,我要在接下来详细的讲给你听。;

如何创建表单;

用HTML定义一些有代表性的表单做成一个JSP文件,然后用JSP标签在表单和服务器端对象(通常都用Bean)传递数据。一般情况下是这么干的:;

1、 写JSP原文件,创建一些HTML的表单并命名。;

2、 在Java文件里写Bean,定义属性,GET或者SET方法来配合已经被你指定好名字的表单。;

3、 回到JSP原文件中,增加<jsp:useBean>标签来创建一个或者调用一个现成的Bean。;

4、 增加<jsp:setProperty>标签设置HTML表单中需要SET方法的Bean的属性。;

5、 增加<jsp:getProperty>标签设置HTML表单中需要GET方法的Bean的属性。;

6、 如果需要处理更多的用户数据,用request对象。;

说了半天你可能看不懂,其实看一个例子你就懂了。;

先看一个简单的hello的例子吧:;

这段程序其实还是计算机程序里那个最经典的“hello,world的程序,只不过呢,我使他挠了一点弯儿,使他看起来比较智能和复杂。首先你输入你的名字,然后Duke跟你说:“hello!

看看代码吧:;

dukebanner.html;

<table border="0" width="400" cellspacing="0" cellpadding="0">;

<tr>;

<td height="150" width="150"> &nbsp; </td>;

<td width="250"> &nbsp; </td>;

</tr>;

<tr>;

<td width="150"> &nbsp; </td>;

<td align="right" width="250">;

<img src="duke.waving.gif"> </td>;

</tr></table><br>;

主JSP文件:hellouser.jsp;

<%@ page import="hello.NameHandler" %>;

<jsp:useBean id="mybean" scope="page" class="hello.NameHandler" />;

<jsp:setProperty name="mybean" property="*" />;

<html>;

<head><title>Hello, User</title></head>;

<body bgcolor="#ffffff" background="background.gif">;

<%@ include file="dukebanner.html" %>;

<table border="0" width="700">;

<tr><td width="150"> &nbsp; </td>;

<td width="550">;

<h1>My name is Duke. What's yours?</h1></td></tr>;

<tr><td width="150" &nbsp; </td><td width="550">;

<form method="get">;

<input type="text" name="username" size="25">;

<br>;

<input type="submit" value="Submit">;

<input type="reset" value="Reset">;

</td></tr>;

</form>;

</table>;

<%;

If ( request.getParameter("username") != null );

{;

%>;

<% @ include file="response.jsp" %>;

<% };

%>;

</body></html>;

回应文件:response.jsp;

<table border="0" width="700">;

<tr>;

<td width="150"> &nbsp; </td>;

<td width="550">;

<h1>Hello, <jsp:getProperty name="mybean" property="username" />!;

</h1>;

</td>;

</tr>;

</table>;

处理数据的Bean:(namehandler.java);

package hello;;

public class NameHandler;

{;

private String username;;

public NameHandler() {;

username = null;;

};

public void setUsername( String name ) {;

username = name;;

};

public String getUsername() {;

return username;;

};

};

建立HTML表单;

一个HTML的窗分为三个部分:<form>标签,输入方法,提交按钮发数据到服务器。一般的HTML页面里,是这么写的<form method=get action=someurl>,在其他的页面里的action属性可能是其他特殊的CGI程序或者其他能处理数据的程序,那么在JSP里边是怎么用的呢,呵,如果你想把数据发到Bean里的话那么你可以省略action里边的东里了,直接写<jsp:useBean>标签或者其他特定的JSP文件了。接下来的那些表单和普通的HTML差不多了,<input>的方法,然后加一个提交按钮,可能还有一个Reset按钮,对了,别忘了,还得给每一个input表单加一个名字。;

这么写:<input type="text" name="username">;

使用GET和POST方法;

用GET和POST方法可以发数据到服务器,在JSP程序中GET和POST方法可以发数据到Bean、servlet、或者其他服务器端的组件。;

理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(query string)加到一个URL上,值和表单是一一对应的。比如说,name=John。在队列里,值和表单用一个&符号分开,空格用+号替换,特殊的符号转换成十六进制的代码。因为这一队列在URL里边,这样队列的参数就能看得到,可以被记录下来,或更改。通常GET方法还限制字符的大小。事实上POST方法可以没有时间限制的传递数据到服务器,用户在浏览器端是看不到这一过程的,所以POST方法比较适合用于发送一个保密的(比如信用卡号)或者比较大量的数据到服务器。;

写Bean;

如果JSP程序用到了Bean,你就得按照JavaBeans API的说明设计你的Bean。;

记住下面两个关键部分。;

如果JSP程序里用<jsp:getProperty>标签,那你就得在Bean里边配合的GET方法。;

如果JSP程序进而用 <jsp:setProperty>标签,那你就得在Bean里边配合的Set方法。;

设置参数到Bean或者从里边取参数将在以后的部分详细介绍。;

传数据到Bean;

把HTML表单的数据传到Bean里需要两个工作:;

· 用<jsp:useBean>标签创建或者定位到Bean;

· 在Bean里面用<jsp:serProperty>设置属性值;

第一步用<jsp:useBean>标签创建或者定位到Bean一定要用在<jsp:setProperty>之前,<jsp:useBean>首先按照你指定的名字查找Bean,如果没找到,会给你指定一个。允许在一个JSP文件中创建一个Bean,然后再另一个文件中调用,这就给了Bean一个很广泛的运行空间。;

第二步在Bean里面用<jsp:setProperty>设置属性值。最简单的方法是把值定义成与表单名相配合。举个例子,如果你把表单名定义成“username那么,你就在Bean里定义属性“username然后用方法getUsername和setUsername。;

当然也可以定义成不同的名字,只要你不认为麻烦。谁让你记忆力好呢!;

Request对象;

用户输入的数据用来存放在Request对象里,用javax.servlet.HttpServletRequest来执行(你也可以用其他不同的工具来执行,但他们其实都是javax.servlet.HttpServletRequest的子集);

你也可以直接用scriptlet来直接访问Request对象。Scriptlet将在下一讲里边详细的讨论,现在你只需要知道他是用脚本语言写的一段放在<% 和%> 之间的代码就足够了。在JSP 1.0中,你必须用JavaTM程序语言作为你的脚本语言。;

你经常会用到如下方法处理Request对象:;

方法;

说明;

执行结果;

getRequest;

Javax.servlet.jsp.PageContext;

返回当前Request对象;

getParameterNames;

javax.servlet.ServletRequest;

返回当前Request对象参数名;

getParameterValues;

javax.servlet.ServletRequest;

返回当前Request对象参数值;

你将会发现其他方法包括ServletRequest,HttpServletRequest或者其他任何ServletRequest的子集。;

JSP引擎经常在scenes之后使用Request对象,即使你没有明确地在JSP文件中调用。;

从Bean中调数据到JSP页面;

一旦用户的数据被传到Bean,你就想重新得到数据,然后在JSP面页中显示出来。想达到这一步,你就得用到<jsp:getProperty>标签。传Bean名和属性名:;

<h1>Hello, <jsp:getProperty name="mybean" property="username"/>!;

<jsp:useBean>, <jsp:setProperty>, 和 <jsp:getProperty>标签必须相配,举个例子:;

hellouser.jsp:;

<jsp:useBean id="mybean" scope="session" class="hello.NameHandler" />;

<jsp:setProperty name="mybean" property="*" />;

response.jsp:;

<h1>Hello, <jsp:getProperty name="mybean" property="username"/>!;

在这个例子里,标签被放在两个文件中,但是指定的名字都是相同的,如果不同的话,那么系统会返回一个错误信息。;

如何运行例子;

我用的是UNIX主机,如果你用windows,那么改相应的路径即可。;

创建路径../jswdk-1.0/examples/jsp/tutorial/hellouser.;

把文件background.gif, duke.waving.gif, dukebanner.html, hellousr.jsp和response.jsp文件放进去。;

创建一个目录,../jswdk-1.0/examples/WEB-INF/jsp/beans/hello;

把文件NameHandler.java和NameHandler.class放进去。;

cd../jswdk-1.0然后startserver;

打开浏览器http://计算机名:8080/examples/jsp/tutorial/hellouser/hellouser.jsp

使用脚本;

在有些地方,你大概要加一些好的,成熟的程序到你的JSP页里,JSP的标签虽然很强大,但是完成某些工作还是比较费力的困难的。这时你可以使用脚本语言段来补充JSP标签。;

使用的JSP引擎是支持脚本语言的,SUN的JSP参考文说明,必须使用Java程序语言来编写脚本,但是其他第三方的JSP引擎允许使用其他语言来写脚本程。;

如何增加脚本;

首先,你必须了解一些增加脚本元素到JSP页中的一些基本规则;

1、 在JSP页面里用Page指令定义脚本(默认值是Java,一般不需要定义);

2、 声明语法<%!……%>声明变量和方法(函数)。;

3、 表达式语法<%=……%>定义脚本语言表达式;

4、 脚本语法〈%……%>可以操作声明、表达式和其他类型合法的代码段在页脚本语言。;

5、 一定要在结尾加%>标签;

声明、表达式、脚本使用起来有一些相似,但也有一些不同让我们用一些例子来讲述一下相同点和不同点吧。

声明<%!……%>包含了一个或多个变量和方法,结尾以分号分隔。;

例:<%! Int I=0 ; %>;

<%! Int a, b ; double c ; %>;

<%! Circle a = new circle(2.0) ; %>;

在页面中使用变量和方法之前必须声明;

声明的范围通常是JSP页,但如果页面中使用INCLUDE指令包含其他页面,范围应变得扩展到被包含的页面。;

表达式<%=……%>可以在页面中包含任何合法的语言表达式,不用分号。;

例:<%= Math.sqrt(2) %>;

<%= item[I] %>;

<%= a+b+c %>;

<%= new java.util.date() %>;

表达式和脚本的一个关键的不同点就是不需要分号。如果你需要在脚本中使用表达式就必须加分号。;

脚本<%……%>允许你写的任何数量的脚本语言;

例:<% String name=null ;;

If (request.getParmeter("name")==null{;

%>;

记住在脚本中必须使用分号结尾。;

猜数字游戏;

猜数字游戏非常的有趣,而且从这里你还可以学到很多表达式的用法。;

代码;

显示用的主屏幕(numguess.jsp);

<!--;

Number Guess Game;

Written by Jason Hunter, CTO, K&A Software;

jasonh@kasoftware.com, http://www.servlets.com;

Copyright 1999, K&A Software;

Distributed by Sun Microsystems with permission;

-->;

<%@ page import = "num.NumberGuessBean" %>;

<jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session" />;

<jsp:setProperty name="numguess" property="*" />;

<html>;

<head><title>Number Guess</title></head>;

<body bgcolor="white">;

<font size=4>;

<% if (numguess.getSuccess() ) { %>;

Congratulations! You got it.;

And after just <%= numguess.getNumGuesses() %>tries.<p>;

<% numguess.reset(); %>;

Care to <a href="numguess.jsp">try again</a>?;

<% } else if (numguess.getNumGuesses() == 0) { %>;

Welcome to the Number Guess game.<p>;

I'm thinking of a number between 1 and 100.<p>;

<form method=get>;

What's your guess? <input type=text name=guess>;

<input type=submit value="Submit">;

</form>;

<% } else { %>;

Good guess, but nope. Try <b><%= numguess.getHint() %></b>.;

You have made <%= numguess.getNumGuesses() %> guesses.;

<p>I'm thinking of a number between 1 and 100.;

<p><form method=get>;

What's your guess? <input type=text name=guess>;

<input type=submit value="Submit">;

</form>;

<% } %>;

</font>;

</body>;

</html>;

操作程序(NumberGuessBean.java);

// Number Guess Game;

// Written by Jason Hunter, CTO, K&A Software;

// jasonh@kasoftware.com, http://www.servlets.com;

// Copyright 1999, K&A Software;

// Distributed by Sun Microsystems with permission;

package num;;

import java.util.*;;

public class NumberGuessBean {;

int answer;;

boolean success;;

String hint;;

int numGuesses;;

public NumberGuessBean() {;

reset();;

};

public void setGuess(String guess) {;

numGuesses++;;

int g;;

try {;

g = Integer.parseInt(guess);;

};

catch (NumberFormatException e) {;

g = -1;;

};

if (g == answer) {;

success = true;;

};

else if (g == -1) {;

hint = "a number next time";;

};

else if (g < answer) {;

hint = "higher";;

};

else if (g > answer) {;

hint = "lower";;

};

};

public boolean getSuccess() {;

return success;;

};

public String getHint() {;

return "" + hint;;

};

public int getNumGuesses() {;

return numGuesses;;

};

public void reset() {;

answer = Math.abs(new Random().nextInt() % 100);

+ 1;;

success = false;;

numGuesses = 0;;

};

};

在JSP文件中使用脚本;

numguess.jsp是一个非常有趣儿的用脚本写的例子,你看他的结构其实是一个很大的IF……ELSE结构,但是很一个从句又都是用HTML写的,看起来象一个大的程序段。;

不过你也不一定非得象numguess.jsp那样用HTML和JSP标签一起来写脚本。在<%和%>标签之间,你可以写任意多行的脚本代码,在通常情况下,尽量少用脚本来处理程序,而尽可能的使用servlets或者Beans,这样你的程序看起来会非常的清析,明了。话又说回来,怎么写JSP还得根据你的习惯和爱好,我不强迫非得使用任何一种方法,SUN的JSP详细说明书不规定脚本的长度。;

用标签组合脚本;

使用HTML和JSP标签来写脚本的时候,注意前后的标签不要忘记,一定要“封好。说的不明白,举个例子吧:;

<% } else { %> <!-- 用JSP标签的时候先关上 -->;

... 这时候用JSP标签吧 ...;

<% } %> <!-- 这样你应该看懂了吧?! -->;

开始的时候这种做法看起来可能有一点奇怪,但它以确保你JSP文件编译的时候脚本的成功转换。;

那么,脚本什么时候执行呢?;

一个JSP原文件的处理分为两个阶段:一个是HTTP的编译时候,一个是请求的处理时间。;

HTTP编译的时候,当用户第一次读JSP页面的时候,JSP的原代码被编译成CLASS,通常是servlet。HTML标签和JSP标签在这个时候同时被处理了,这之前用户还没有任何的请求被提交。;

请求处理时间是当用户在JSP页面中提交了一个请求,这时请求由客户端被request对象传到了服务器端,JSP引擎根据用户提交的值执行编译过的JSP文件或者servlet。;

当你在JSP页中使用脚本的时候,你必须知道他们什么时候被执行。声明在HTTP编译阶段就已经被处理了,其他脚本,表达式在编译JSP文件的时候也可用。表达式在HTTP编译的时候也被执行了。表达式的值被转换成了字符串被插入到JSP文件中一块儿被编译。其实在请求阶段,脚本也是可以利用的。;

如何运行例子;

我现在给出的都是在UNIX风格下的路径,如果你用Windows,那么改成Windows风格路径;

1、猜数字游戏在装TOMCAT或者JSWDK的时候就已经装好了。;

2、.jsp和.html文件在../jswdk-1.0.1/examples/num中;

3、.java和.class文件在../jswdk-1.0.1/examples/WEB-INF/jsp/bean/num中;

4、开浏览器,http://机器名/examples/jsp/num/numguess.jsp;

标签: JavaScript
相关文章: