首页 > 开发 > JSP > 正文

新手入门:了解JSP动态网页制作技术

2020-02-05 13:50:18
字体:
来源:转载
供稿:网友

javaserver pages (jsp) 是一种结合了跨平台与跨网站服务器机制,以 java为主的技术来产生动态网页。 jsp与微软的asp(active server pages )相容,但它是使用类似html的标签以及java代码片段而不是vbscript。当你所使用的网站服务器没有提供本地asp支援,也就是apache或netscape服务器时,你可以考虑使用jsp。虽然你可以取得这些服务器的asp附加配备程序,但价格相当昂贵,而目前sun并没有对你所要的jsp组件收取费用(虽然sun未来有可能会收费)。对於solaris与linux以及windows,这些组件也都很容易取得。

请不要将jsp与服务器端的javascript混为一谈。网站服务器会自动将以jsp写成的java代码片段转换成java servlets。而许多先前必须以perl手写程式或服务器特定的api(如asp)控制的功能也都可透过jsp来自动化处理。

现在就让我们开始动手帮助你建立一个可执行jsp范例网站。

一、如何安装好你的机器来使用jsp

你将需要java 2软件开发工具(jsdk),它原来的名称是java开发工具(jdk)以及javaserver网站开发工具(jswdk),tomcat,或是其他支援jsp的网络服务器。sun免费提供jsdk与jswdk来供windows,solaris,以及linux平台使用。

如果你想要在你目前的网络服务器上使用jsp,但服务器本身并不支援jsp与java servlets,你可以试试看allaire的jrun, 它的作用就像是针对netscape企业版与fasttrack服务器、微软的网络资讯服务器(iis)与个人网络服务器(pws)、apache、以及其他服务器的网络服务器附加设备。你也可以使用apache网络服务器的java版本,最新的jswdk里有提供。

1、下载与安装你需要的组件

目前发表的1.2.2-001,jsdk可下载的版本是以可安装的压缩文档形式。下载的文件大约是20mb,可提供完整的java发展环境,让你能建立利用标准api为核心的java解决之道。然而,你的网络服务器需要应用到jsp的唯一一件事是java编译器。要让网络服务器知道编译器的位置,将环境参数java.home设到jsdk的安装目录。如果你是在windows上安装并且接受预设目录,将这行代码set java.home=c:/1.2.2加到你的autoexec.bat文件并且重新开机。

在安装好jsdk之後,下载并且安装jswdk或beta版的tomcat,以java为主的apache网络服务器。安装在哪里并不重要,重要的是你可以找到它。一般而言,它会放在上层目录,这种方式可以让你取代jswdk或 jsdk的网络服务器,不需要移动其他的网络服务器。在你安装好这个文件之後,你就可以准备使用jsp了。

在你正确的安装jswdk之後,执行startserver指令来启动网络服务器,预设通讯口为8080。要看你在启动服务器之後是否有正确的安装工具,你可以载入范例jsp文件中的任何一个(http://localhost:8080/examples/jsp/)。如果你能够成功的执行一个范例文件,你可以知道你已经正确的设定好软件了。如果你在启动服务器的控制台视窗看到错误讯息,那麽你需要解决这个问题。最常发生的问题是没有设定(或者不正确设定)环境参数java.home。 要检查目前的环境设定,在dos模式下键入set。

2、开始解释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下载此页.当你第一次参观这个网页时,网站服务器会将jsp翻译成java servlet代码,那你就会看到目前的日期与时间.

现在你已经下载,安装,并且架构好环境,你已经准备好要了解jsp语法与建立你自己的jsp为主的解决之道.

二、jsp语法的基本原理

安装之後,接下来我们要讨论jsp的语法.如果要偷懒,你可以下载语法卡,如果你不熟悉 java的程序设计,你可能会想要参考sun的使用手册;然而,网站建立者不应该做太多的java使用程序,除了几个函数式之外,出现在你jsp网页上的java程序码应该将它减到最少。

记住这点之後,现在让我们先来看看jsp的编译器指引与指令元件,之後我们将解释javabeans与内部物件. jsp编译器指引与指令元件有五种型态.jsp 1.0之後,大部分的jsp是包含在以<% 作为开始%>作为结束的单一标签里,新的 jsp 1.1规格已经发表了,它同时也与xml相容。

1、jsp的编译器指引与指令元件

编译器指引 <%@ 编译器指引 %>

预定义 <%! 预定义 %>

运算式 <%= 运算式 %>

程序码片段/小型指令 <% 程序码片段 %>

注解 <%-- 注解 --%>

2、编译器指引

jsp的编译器指引是针对jsp引擎。它们并不会直接产生任何看得见的输出;相反的,它们是在告诉引擎如何处理其他的jsp网页。它们永远包含在 <%@ ?%>标签里。两个主要的指引是 page与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" %>。

3、jsp预定义让你定义网页层的参数,来储存信息或定义支持的函数式,让jsp网页的其余部分能够使用。如果你发现自己有太多的程序码,你最好将它们放在不同的java类别里。你可以在 <%! ?%>标签里找到预定义。记住要在参数预定义的後面加上分号,就跟任何有效的java叙述的形式一样: <%! int i=0; %>。

4、jsp里有运算式,评估运算式的结果可以转换成字串并且直接使用在输出网页上。jsp运算是属於 <%= ?%> 标签里,并不包含分号,加引号字串的无用部分:

<%= i %>
<%= "hello" %>

5、jsp程序码片段或小型指令文件是包含在<% ?%> 标签里。当网络服务器接受这段请求时,这段java程序码会执行。小型指令文件可以是原始的html或xml,其内部的程序码片段可以让你建立有条件的执行程序码,或者只是一些使用另一块程序码的东西。举例来说,下列的程序码结合了运算式与小型指令文件,在h1,h2,h3,以及h4标签里显示字串"hello"。小型指令文件不限於一行的原始程序码 :

<% for (int i=1; i<=4; i++) { %>
<h<%=i%>>hello</h<%=i%>>
<% } %>。

注解.

最後一个主要jsp元件是嵌入式注解。虽然你可以在你的文件里包含html注解,如果使用者检视网页的原始码,他们也会看到这些注解。如果你不要让使用者看到你的注解,你可以将它放在<%-- ?--%>标签里:

<%-- 针对服务器端的注解 --%>。

三、jsp与javabean

虽然你可以在小型指令档里放入一大块的代码,但是大多数的java代码是属於可以重复使用的元件,称为javabean。javabean就跟activex控制项一样:它们提供已知的功能,并且是为了可随时重复使用的目的而设计的。

javabean的¤值在於它可以经由一组特性来使用,而这些特性则提供对javabean设定的存取。以人来作范例,此人就是javabean,而他的姓名,社会福利安全号码,以及住址可以是特性。对於jsp网站,基本上你是将'javabean'动态的连接到你的网站。

假设javabean是在建立网站之前建好的,你要做的第一件事是告诉jsp网页它所需要使用javabean,这工作可以用<jsp:usebean>标签来完成:

<jsp:usebean id="localname" class="com.jjj.person" scope="application" />.

<jsp:usebean>标签需要你以id 属性来辨识usebean.在这里,你提供一个名称让jsp网页来辨识usebean,除了id 属性之外,你也必须告诉网页要到哪里去找这个usebean,或者是它的java类别名称。类别属性提供如何在各式方法之中找到它,最後一个需要的元件是scope 属性。有了范围属性的帮助,你可以告诉usebean,要它为单一网页(预设)[scope="page"];为一个被请求的网页[scope="request"];为通话期[scope="session"]; 或为整个应用程式[scope="application"]来维护它自己的资源。对於通话期范围,你可以很容易的维护jsp网页里的项目,例如购物车: 一旦你宣告了javabean之後,你就可以存取它的特性来订购它。要取得一特性的值,使用<jsp:getproperty>标签。有了<jsp:getproperty>标签,你可以指定要使用的usebean名称(从usebean的id栏位),以及你要取得值的特性。接著,真正的值就会放在输出里:

<jsp:getproperty id="localname" property="name" />.

要更改javabean的特性,你需要使用<jsp:setproperty>标签.对这个标签,你也需要辨认usebean以及要修正的特性,除此之外,你还需要提供新值。如果命名正确,这些可以直接经由规定的格式取得:

<jsp:setproperty id="localname" property="*" />;

要从一参数取得,你必须直接命名此特性以及参数:

<jsp:setproperty id="localname" property="address" param="parametername" />;

或是直接以名称与值来设定:

<jsp:setproperty id="localname" property="serialnumber" value="string" /> or <jsp:setproperty id="localname" property="serialnumber" value= <%= expression %> />.

有关javabean的最後一点:要让网络服务器可以找到javabean,你 要将它们的类别文件放在特别位置。对jswdk而言,最简单的地方是在安装目录里的类别目录,例如 /jswdk-1.0.1/classes.

四、jsp的内部物件

最後一个与jsp语法有关的元件叫做内部物件.在jsp小型指令档内,你可以存取这些内部物件来与执行jsp网页的servlet环境相互作用。许多对内部物件的存取应该要简化。然而,这些是范例,它们的存取都是可接受的,要完整的利用内部物件设定则 要对最新的java servlet api有所了解。

有关内部物件说明:

request 用户端请求,此请求会包含来自get/post请求的参数

response 网页传回用户端的回应

pagecontext 网页的属性是在这里管理

session 与请求有关的通话期

application servlet正在执行的内容

out 用来传送回应的输出资料流

config servlet的架构物件

page jsp网页本身

exception 针对错误网页,未捕捉的例外

那麽,这些是做什麽的,而你应该如何使用它们呢?基本上,在你的小型指令档里,你可以使用它们来存取执行jsp代码的servlet。 为了避免谈论到太多servlet api 的细节,让我们来检验一些你可以利用它们来做的事: 不必使用运算式,你可以直接存取内部out物件来列印一些东西到response:

<% out.println("hello"); %>.

不必直接传送参数到javabean,你可以藉由请求物件来取得参数的值:

<% string name=request.getparameter("name"); out.println(name); %>。

当你以jsp写了许多的应用程式之後,如果你建立了javabeans或者发现你自己将太多的java原始码放入你的jsp档案,你需要建立支援的java类别,这样可以鼓励重复使用并且降低jsp网页转换时所需要的时间。当你需要建立java类别时,你必须: 将jdswk的安装目录/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代码分散各处。第6行是网页编辑器指引,指示将任何错误传送到errorpage.jsp档案。第13行到15行是小型指示码,基本上是说只有当"symbol"参数存在时才显示表格。这个if区段包含了第32行到34行的代码。第17行定义要使用的 javabean,而第18行从参数载入它的符号特性。第27行到29行指示显示usebean的特性。除了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使用雅虎的资源来取得股票。其原始码 要储存於 jswdk安装目录下classes/com/jguru目录里的quotes.java档案。从那里你可以使用jsdk的编译器来编译它。 一旦你建好两个jsp文件,建立了javabean原始文件并且编译好之後,你就可以由http://localhost:8080/quote.jsp载入quote.jsp文件来查看结果,假设你没有更改 jswdk安装,使用不同的通讯口> 此网页可以再加强,但它所呈现的功能,是jsp功能的良好示范。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表