admin 管理员组

文章数量: 1086019


2024年4月17日发(作者:结束网页进程)

维普资讯

实用第一 智慧密集 

构建网站软件组合系列讲解 

用JSP+Apache+Tomcat+JavaBeans+Servlet+Oracle8i+Solaris 7构建网站 

谷和启

概述 

1 JSP简介 

马丽萍 

记,还可接受第三方开发的标记,从而可以方便使用第三方提 

供的功能组件 

2.JSP的开发运行环境 

JSP(JavaServer Pages)是由Sun Microsyslems公司倡导、许 

多公司参与一起建立的一种动态阿页技术标准 该技术为创建 

显示动态生成内容的Web页面提供了一个简捷而快速的方 

法 JSP技术的设计目的是使得构造基于Web的应用程序更加 

容易和快捷.而这些应用程序能够与各种Web服务器 应用 

(1)运行JSP最少需要三样东西:JSP引擎、Web服务器 

和JVM(J a虚拟机)。 

它们实现的功能是: 

●JSP引擎:主要完成对JSP代码的转换.把它转换戚 

SERVLET代码,并做出判断,判断是否要对SERVLE7代码进 

行重新编译,还是直接执行,然后向JVM发出通知= 

服务器、浏览器和开发工具共同工作 JSP规范是Web服务 

器、应用服务器、交易系统、以及开发工具供应商间广泛台作 

的结果。在传统的阿页HTML文件( hun, hind)中加^Ja— 

a程序片段(Scripdet)和JSP标记(t g),就构成了JSP两页( 

jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其 

中的程序片段,然后将执行结果以HTML格式返叫给客户。程 

●Web服务器:主要完成一个服务器最基本的功能,如 

接受客户端的请求,并把结果传回给客户端。还有,这个Web 

服务器必须是支持JSP服务的服务器,不然它将无法和3SP引 

擎进行沟通 

●JVM:主要完成对SERVLET代码的编译和对字节码的 

序片段可以操作数据库 重新定向网页以及发送email等等, 

这就是建立动态网站所需要的功能。所有程序操作都在服务器 

执行,它接受来自JSP引擎的通知 知道要干什么,然后用自 

己的命令完成动作,并把结果告知JSP引擎。 

1)现在能宴现JSP引擎功能的常见软件有: 

●Js帅K(JavaServer web Development Kit):JavaSoft是 

端执行,阿络上传送给客户端的仅是得到的结果、对客户浏览 

器的要求最低 

JSP特性: 

官方提供的一个JSP引擎,同时它也具有Web服务器的功 

能,是一个实现JSP非常好的软件,使用的人也最多.一般我 

们都以此为准。 

●Tomcat:又一个很多人使用的JSP引擎。 

1)可穆植性:Java se kt程序则具有Java程序的优点, 

可运行在任何平台之上,大多数Web及应用服务器都支持Ja- 

va及sePzlet API 

2】性能上:JSP每个程序装载一次,并驻留在服务器内存 

●Java web ser r:JavaSoft公司推出的又一JSP引擎 

●JRUN:一个不错的软件,它能让微软的IIS和PWS支 

持JSP服务 

2)支持JSP服务的web服务器有: 

Apache:一个垒球应用非常广泛的Web服务器 同时它 

现在也推出了支持JSP服务的版本。还有上面JSWDK,它不 

为以后请求服务。由于Java Sert,elt具有Java的所有优点,开 

发起来也相对容易,Java简化了对异常的处理;它的面向对象 

特性使开发^员的协作成为一件简单的事。 

JSP技术从三个方面加胰动态阿站开发: 

●将静态页面的开发和动态内容的生成分开 

JSP中通过使用HTML或XML标记来规划、设计web页 

的布局和风格;而用JSP标记来实现动态的内容.生成动态内 

容的部分被封装起来运行于服务器端;这样页面布局和风格可 

单独编辑与调试而不影响动态内容生成 

●组件的重用 

光是JSP引擎,同时还可作Web服务器,还有IIs和PWS结 

台了JRLN也能支持JSP服务。 

Weblogic:一个功能十分强大的服务器软件,配置比较简 

单,对JSP的扩展十分强大,附带数据库JDBC驱动程序,支 

持JHTML,是目前市场占有率最高的服务器。 

WebSphere:IBM的服务器软件,功能很强大,与DB2、Visual 

多数JSP页通过重用与平台无关的组件--JavaBeans来完 

成曼杂的要求 这些组件可在开发人员中重复使用一 

●通过标记来简化页面开发 

Age等IBM的开发工具相互配套,开发Web程序非常方便 

3)JVM有: 

通过JSP提供 标记,开发人员可以很容易使用Beans组 

件。设置和访问它们的属性。同时JSP也允许用户自定义标 

最常用的是JDK和JBuild 它们之间很大的不同就是JDK 

是DOS界面,而Jbuild是图形窗口界面;当然使用最多的要 

c衄|pmr 唧 m s s矗蛳№n№z00 ̄.3 5 

维普资讯

实用第一 智慧密集 

算JDK,它是JavaSofi提供的一个免费软件。由于JSWDK既 

有集成式web信息管理工具的数据库= 

能作JSP引辈,又可以允当Web服务器,所 应用广泛 = 

Oracle正在推动Java成为下一代应用的标准,它在各个层 

(2)JSP的开发工具 

次,包括Oracle8i服务器内的Java VM,均支持Java。Ora- 

JSP网页可 用FrontPage和D a 编辑,开发工具 

cle8i将强大的新型功能引入到了联机事务处 ̄(OLTP)和数据 

采用JRun Studio、Oracle Jdeveloper、UltraEdit、Jbuilder等。 库应用之中。OracleSi还对Oracle数据服务器的几乎所有方面 

3.Apache+Tomcat构成的Web服务器是当前在UNIX环 

都给予了增强,全面改进了质量、可用性、性能、可管理性、 

境下运行JSP的前提条件 

多媒体数据类型支持和复制功能 

Apache是目前世界lntemet网上经常使用的Web服务器。 

OracleSi特性: 

对于UNIX用户来说,也是最容易使用的w曲服务器实际 ●操作的简易性 

上,如果你仅仅是想要用Apache提供基本的Web页面服务, 

Oraele8i从根本上改进了Oracle应用的安装、配置和可管 

那,厶你可能根本不需要调整任何配置。但是,另一方面,A— 

理性。Oracle通用安装程序(Universal ln ̄aller)和数据库配置助 

pache是一个十分强大的Web服务器程序,能够提供许多专业 手fDatabase Configuration Assistant J都是基于Java的应用,它 

的功能,进行适当的配置,才能更好地发挥它的功能一 们通过探测硬件特征和提示信息来安装、预调整和配置Ora- 

●开始提供web服务 

cls8数据库环境。Oracle通用安装程序是针对簇的,它是在簇 

apache的服务有两种方式,即通过inetd的方式或者独立 的所有节点上进行软件分布和安装的。 

执行ht【pd的方式:在一般情况下我们使用独立执行方式。首 

●可扩展性 

先你必须安装Apache服务器,进行配置的修改,测试~下它 

OracleSi网络计算体系结构(Network Compudng Architecture 

的正确: 

NCA)引入了一个开放的、易于使用的方法,用来扩展具有多 

●利用Apache做web Proxy" 

媒体数据类型(称为插件cartridge)的数据库。Orcale8i为数据 

Proxy就是代理。Apache的Web代理是指可以让客户端服 

插件的开发人员提供了一组全面的API。它允许合作伙伴开发 

务器通过Apache来访问wⅣw.这样Apache服务器将接收来 的数据插件具有与Oracle开发的数据插件相同的内部访问机 

自客户机的请求,然后首先去目标站点取得内容,并将内容存 

制。 

储在Apache服务器上,然后再提交给客户,以后假如有另一 

●安全性改进 

个客户机需要访问同样的内容,Apache就会直接从服务器硬 

Omcle8i引入了细粒度化的访问控制,并改进了多层环境 

盘上取得内容并且提交蛤客户 

的安全模式。细粒度化的访问控制使用参数驱动的、可扩展 

●做虚拟主机 

的应用上下文关系,从而允许应用根据用户属性控制用户的访 

Apache虚拟主机是一项不错的功能,它可 用一台Apache 

问。中间层,特别是Web服务器或应用服务器,常常可能设 

机器.一个『P来提供多十页面,设定非常简单。 

置在防火墙上或防火墙外,为此,Oracle8i提供了这样一种能 

mc吐是sun和Apache合作做出来的jsP Server,支持到 力,即限制一个中间层可以连接哪些用户,以及将中间层作为 

Set,let 2.2及JSP 1 1。Tomcat在j殳计上是 独立的Se ̄,er执 

个特殊用户进行审计。 

行,而不像Jserv是附在Apache中,这样就更可以发挥在 ●对象关系数据库 

servlet中,非HttlX ̄etvlet的能力 Tomcat是Java程序,所以只 对象类型的数据现在可以是分区表的列,并且可以使用 

要有JDK就可以使用,不需要考虑操作系统平台。 

SQL Loader来装载。并行查询可以利用对象类型或对象表在 

作为web服务器扩展的Tomcat服务器有一些问题需要说 

表上实施操作。在使用对象类型和LOB列的时候,许多方面 

明: 

都还有性能上的提高 在CLOB和NCLOB列中还支持变宽字 

●当处理静态页面时,Tomcat不如Apache迅速。 

符集。同时,对客户方对象Cache也进行了改进,允许跟踪和 

●Tomcat不像Apache一样可配置 

调试,以及支持优化加锁技术。 

●Tomcat不像Apache一样强壮。 

●网络功能 

基于以上原因,一个现实的网站使用一个Apache作为 Oraale8i提供了先进的同络特性和管理能力,并引入了()- 

web服务器,为网站的静态页面请求提供服务;并使用Tom- racle8i安全目录(Oracle Secure Directory—OSD)服务。网络管 

cat服务器作为一个Servlet/jsp插件.显示网站的动态页面。 理通过自动配置Net8,以及将管理功能集成至Oracle企业管 

4.Oracle8i是一个面向Intemet计算环境的数据库,它改 理器从而得到了大大简化。 

变了信息管理和访问的方式。OracleSi将新的特性融八到了传 

Oracle安全目录是一个遵循LDAPv3的层次数据仓储,可 

统的Oracle暇务器之中。从而成为一个面向web信息管理的 用来存储企业用户信息.包括X 509认证(cert ̄cate)、企业角 

数据库 Oracle8i支持Web高级应用所需要的多媒体数据,支 色和Oracle钱夹(Oracle Wallet) 

持Web繁忙站点不断增长的负载需求 Oracle8i是唯一一 拥 联机模式管理增强了模式,扩展已经扩展的预定义目录模 

6电脑缡{莹技巧与维护・2oo2.3i 

维普资讯

实用第一 

式。OSD支持授权访问和数据加密,实现r安全接口层 

(SSL)。OSD还与Oracle家族产品紧密集成,这些产品包括0一 

racle应用服务器(Applicatiort Server)和[nternet消息传输 

(Internet Messaging) 

智慧密集 

jsp:setPr0pe啊——设置JavaBeart的属性。 

j p:gelPmpe r-将JavaBeat ̄的属性插入到输出中。 

jsp:f0rward——引导请求者进入新的页面。 

J p:pll n——向客户端浏览器插入Java插件来运行一个 

Applet或Bean的对象 

●注释和字符引用 

有许多在不同情况下插入注释和字符的专门结构,说明如 

下 

OracleSi连同Net8允许站点最大限度地利用现有应用的投 

资,同时开拓了Intemet的主要标准,如Java、IIOP和SSL 

5.Solaria 7(SPARC平台版)亚洲版发行简介 

Suu Solaria系统是由Sun公司开发,固化于Sun的服务器 

或工作站的一套UNIX操作系统 目前的版本已经发展到 

8 0。现在,有许多大学、科研机构、政府部门和公司都采用 

了Sun的服务器或工作站.以Sun Solaris系统作为网络操作系 

统。 

该产品的名称是Solaria 7,但代码和路径或文件包的路径 

名称可以使用Solaris 2 7或SunOS 5 7: 

Sdaris 7版本有INTEL和SPARC平台版两种,这主要取 

决于服务器的CPU的种类(INTEL或SPARC芯片):有汇编 

程序的32位或64位Solaris支持。 

Solarls系统实际上是AT&T系统版本4(SVR4)和BSD 

UNIX的台并,再增加了OpenWindows图形界面 

二、JSP的有关说明 

1 JSP语法简介 

J 元素 语 法 解 群 

P表选式 (%=表选式%’ 表达式是经过运算然后输出的 

形式 

P脚奉 (% t码%> 嵌^… 方 巾的代码 

P声明 <%’代码%> 嵌^SERV[ET中.定戈f鲫- 

Yice方浩25Yr 

ISP丽面指々 (%@阻 … ”%> 在载凡是指向SEHVl e g引擎 

ISP ioclmie指辛 一十在蛭过转译战SF# ̄Vl ET 

之后蔫包音进来的 件 

P往释 (% 注释一一%> 在将 P韩译戚SERVLET时 

将蔫忽略 

(】一p: ̄dude page=“ 『日h URL 当页面碍到请求时.所包古的 

h=‘t e”/> 文件 

…sp:eBB (1sp:u ̄Bean atl rat・/)0r 找到井建立JI’aH 日n 

‘1 D:u ̄Bean atl ) 

(/j ̄o:u ̄eBean> 

jsp:setPmpe (1sp: ̄eLP ropercym1=val / 设置Ben的属性 

jsp; m nY ‘J — =。pmpert;., 慨复或者输出Bean的属性 

Name” 日『 = Ⅵ【”/> 

Jap:f ̄ard ‘lsg,‰ 日 page= 『日1IYe URL /> 指向后一面 

Jsp:plugln ‘1sp:plUSh日I b…  ̄'alue” > 产生OBJECT或者嵛^标眷 

怍为浏览器的告适类型在 

《 sp: 『u n> , ̄LET运行时请求此PLI ̄N 

●JSP动作语法 

应用XML语法结构来控制Servlet引擎的行为 你可以动 

态插入文件、重用JavaBean控件、导向另一十页面或产生 

va HTML插件(PLUGIN) 可用的动作有: 

J sp:include一在页面得到请求时包含一个文件 

j :useBean——应用JavaBeart控件 

语法 作用 

(%一一conmmm一一%> 一个JSP注释,任何嵌入其中的 

脚本元素、指令语法、动作语法都 

将教忽略 

(!~一comment一一> 一个html注释,嵌^其中的JSP 

脚本元素、指令语法、动作语法将 

会正常执行。 

(、% 在模板文本(静态网页)中,如果 

想应用“<%”。 

%、> 在脚本元素中如果想应用 

“%>”。 

、’ 在属性中应用单引号 

属性中应用双引号 

%、> 属性中应用%> 

(、% 属性中应用<% 

●JSP隐含对象 

与JSF语法相关的最后的元素是一些叫做“隐含对象”的 

东西。在JSP代码片段中,你可以利用这些隐含对象与JSP页 

面的代码片段执行环境产生互动。应尽量少访同这些内置隐古 

对象 但是,在某些情况下,访问隐古对象是可被接受的 若 

要充分利用隐古对象,就需了解最新的Java Servlet API: 

隐古对象说明 

唧e ——客户端请求,包括从GET/POST请求传递过来 

的参数 

啷ponse——网页传回客户端的反应 

p gec0_T【exI——在此管理网页属性 

se鞫i。n——与请求关联的会话 

印plic i0n——代码片段的运行环境 

ouI 传送响应的输出流 

c0n6g——代码片段配置对象 

pa ——JsP网页本身 

excepn0n——有错的网页中未被捕获的例外 

2.JavaBean 

JavaBean是一种基于Java的组件。在JSP中,对于在Web 

应用程序中集成JavaBean组件提供了完善的支持。JavaBeart组 

件可以用来执行复杂的计算任务,或负责与数据库的交互以及 

数据提取等: 

JavaBean是一种Java类(class),通过封装属性和方法成 

cDⅢpu1曲Programmh ̄g s4mb&:M衄忸岫∞聋呻2.3 7 

维普资讯

实用第一 智慧密集 

为具有某种功能或者处理某个业务的对象 JavaBean被绀织成 

同时得到服务 一般来说,Servlet进程只是在Web ̄ct'er卸载 

为package(数据包) 便进行管理,实际f一就是把一组Ja ̄,a— 

时被卸载 

Bcan一起放在“某某”目录中,每个娄的定义前加上pat:kagc Senlet是使用Java Sen,let应用程序设计接口(AlP/)及相 

某某”.目录“某某”必颁放在系统环境CI ASSPAIH包含 

关类和方法的Java程序 除了Java eSct.1et API,Se ̄let还可 

的目录下,系统才能找到其中的JavaBean 它应当具有 

使用用 扩展和添加到API的Java类软件包。Semlet在启 

XXX.181,,a和XXX. ̄:lass两个文件,具体的Ja ̄aBean使用在后 用Java的Web服务器上或应用服务器上运行并扩展了该服务 

面的例子再详细介绍 

器的能力 Java Sect,let对于Web服务器就好像Java Applet对 

3 sen'lct 

于Web浏览器。Sect'let装入Web服务器并在Web服务器内执 

Servlet是用Ja,,a编写的Se ̄er端程序.它与协议和 F台尢 行,而applel装入web浏览器并在Web浏览器内执行=Java 

关 Sen,let运行于Java—enabled Web Sect,er中 Java Ser ̄let可 

Servlet API定义了一个Servlet和Java使能的服务器之间的一 

动态地扩展Sen,er的能力,并采用请求一响应模式提供Web 

个标准接El,这使得Sect,lets具有跨服务器平台的特性。 

服务 

●Sect ̄let的基本结构 

摄早支持Sect,let技术的是Javaseft的Java Web Server此 

一,

Servlet de基本 构 

后,一些其它的基于Ja ̄,a的Web Set.'e/"开始支持向 准的 

i--port JaVa io 

impo t Java ̄servlet}. 

Sen,let API。Servlet的主要功能在于交互式地浏览和修改数 

import lavax se r,Aez nttp  .

据,生成动态Web内容~这个过程为: 

public class SomeServlet extends HttpSe rvlet{ 

客户端发送请求至服务器端; 

publio VOid doGet c HttpSe VIetReouest req Lles ̄ 

服务器将请求信息发送至Servlet; 

HnpSe rvletResp0nse response) zh rows Se rv etE×cept 01 

l0Exception{ 

Servlet生成响应内容并将其传给Server 响应内容动奄生 

成,通常取决于客户端的请求; 

月匪务器将响应返回给客户端; 

用 reuuest 可 读取输,、的值(e g cookies 

}[表鱼提主 数据 

Servlet看起来像是通常的Java程序 Servlet导人特定的属 

response 返回输出的同吝 

于Java Sect,let API的包:因为是对象字节码,可动态地从网络 

PrintWriter OUt;response getW riterll 

加载,可 说Ser',let对Selwer就如同Applet对Clie r,t一样但 

out 司浏览器写内番 

是、由于Sert,let运行于Se ̄-er中,它们并不需要一个旧形用 

户界面 从这个角度讲.Sen,let也被称为Faceless Object 

eSct.1et都是有Httpservlet继承下来的。 

Sen,let可 和其他资源I文件、数据库、Applet、Java应用 

●Ser'det开发环境 

程序等1交互, 生成返回给客户端的响应内容~如果需要, 

进行Servlet开发所需要的基本环境是JSDK以及一个支持 

还可 保存请求~响应过程中的信息。 

Set,let的Web服务器。 

采用Sen,let,服务器可 完全授权对本地资源的 疔问l加 

●JSDKfJava Sect,1et Development Kit1 

数据库),并且Servlet自身将会控制外部用户的访问数量及访 

JSDK包含了'编译Sect,let应用程序所需要的Java类库 及 

问性质 

相关的文档资料。 

eSct'let可被链接(chain) 一个Setcdet可 调用另一个或 

●支持Servlet的Web服务器 

系列Servlet、即成为它的客户端 

eSct'let需要运行在支持Set-,let的Web服务器上。 

采用Sect,let Tag技术,可 在HTML贞面中动态调用 

【1)Apache Tomcat 

Sendel 

(2l JSWDK(JavaServer Web Development Kk) 

Sect,let API与协议无关 它并不对传递它的协议仃任何假 

(3) laire Jrun 

设. 

(4)New Atlanta的servletExec 

像所有的Ja ̄,a程序一样、Set.1et拥有卣向对象Java语青 

f51 Gefion的LiteWebServer【LWS) 

的所有优势 

{61 Sun的JavaWebSect,er 

Sect'let提供厂J a应用程序的所有优势——口r移植 稳 

4 JDBC 

健、易开发:使用Ser ̄let的lag技术,Sect'let能够牛成嵌于 

JDBC是Java的开发者——sun的JavaS,oft公司制定的Java 

静态HTML页面中的动态内容: 

数据库连接{Java Data Base Connectitdty】技术的简称,是为各 

个Sen'let被客户端发送的第一个请求激活.然后它将 

种常用数据库提供无缝联接的技术。JDBC在Web和Internet 

继续运行于后台.等待以后的请求每个请求将生成一个新的 

应用程序中的作用和ODBC在Windows系列平台应用程序中的 

线程,而不是一个完整的进程 多个客户能哆在同 个进样中 

作用类似一ODBC(OpenData Base Connectivity),称为开放式数 

8 电略编程技巧与维护,2002 3 

维普资讯

实用第一 

据库互联技术,是由Micro ̄fl公司倡导并得到业界普遍响应 

智慧密集 

Statement statemt.=conn createStatement 

SQL语 玎雾 

NAME=R0M book“。 

刮建一 

的--I']数据库连接技术,如果读者有使用ODBC编程的经验. 

就会发现JDBC与ODBC很类似。JDBC现在可 连接的数据 

库包括:xhase、Oracle、Sybase、Aceess 及paradox等。 

JDBC定义了Java语言同SQL数据之间的程序设计接口。 

JDBC有一个非常独特的动态连接结构,它使得系统模块化。 

使用JDBC来完成对数据库的访问包括 下四个主要组件:Ja— 

v,K的应用程序、Jlmc驱动器管理器、驱动器和数据源: 

用JDBC来实现访问数据库记录可以采用下面的几个步 

qesuItSet rsltset=s:atemt execLiteQuery{ SELECT USER— 

执 互淘 果辱顶_芏Resu tSet中.book是一i、table 

While{rsl:set nextI}) 

Syste'-"out pri tinI rs Jtset getS:lincI]I. 时碍: 针移 

到ResultSet蓑再口豹T 彳.i1半ResultSet中有鼓据_l读.则 

退回TRUE 至 返回FALSE 

●JDBC瘦驱动程序 

瘦驱动程序是一种JDBC驱动程序.该程序允许从Java小 

骤: 

①通过驱动器管理器获取连接接口: 

⑦获得Statement或它的子娄 = 

④限制Statement中的参数。 

④执行S ̄tement。 

⑤查看返回的行数是否超出范围。 

⑥关闭S ̄tement 

⑦处理其它的Statement 

⑧关闭连接接13。 

在JSP中与数据库连接编程需要JDBC驱动程序.本文中 

数据库采用Oracle8i 

JDBC的Oracle版本有两个驱动程序 “瘦”驱动程序是 

针对于Java小应用程序的,用于将它连接到Oracle数据库一 

Oracle还提供了另一个OCI(Oracle Call Interface,Oracle调用 

接口)驱动程序。 

三种主要JDBC与Oracle8i数据库连接编程: 

●JDBC OCI驱动程序 

OCI驱动程序是一十JDBC驱动程序,它允许从Java应用 

程序中连接并查询Oracle数据库 在查询数据库以前Java程 

序必须执行三个步骤。 

①驱动程序娄导人到程序中 

,Ierport the JDBC d rive rs 

import ava sql{. 

ja 包包含了创建并执行SQL语句所需要的所有娄和 

接口 

②注册驱动程序 

在Oracle中注册OCI驱动程序,Driver Manager娄允许动态 

地注册驱动程序。 

/.,registe she oracle Jdbc d r ve r 

DriverManage registe Dri ̄,erf FleVV oracle Jdbc d rive r O rac e 

Driver1)): 

③连接到数据库 

System out prindn I Connectlng to the Oa:abase 

Conoection conn=DriverMa, ̄ager getConnecUon I doc:ora 

cle:oda:@ghe system manager | 

,,将连接手碍吕传退给还十万兰l 建立引敦据厍的运接乏接 

手符串中的黄一个值指明OCI8 JDBC驱动程序.]亘(SQL 

Netf用的是@符号}连接一十各为ghq TNSNAMES服毒连 

接的用p名是system 口令是manage r 

④执行查询并且打印输出结果 

应用程序连接并查询Oracle数据库一在查询数据库之前Java 

小应用程序也必须执行三个步骤: 

①将驱动程序类装八到程序中 

//impo rt the JDBC drive rs 

mpor:java sql . 

mport Jeva math{. 

java.sql包包含了创建并执行SQL语句所需要的所有类和 

接口,java math包包括数学处理对象。 

②注册驱动程序 

在Oracle中注册驱动程序Ddver Manager类允许动态地注 

册驱动程序。 

/,."registe r the 0 ac e Jdbc d rive r 

DriverManage r reg;ste rDriverf new oracle Jdbc d river O rac e 

Drive r()J 

③连接到数据库 

System OJ:println f Connecting:0:he database } 

Connectioq conn=DriverManage r getConqection( -dbc:ora 

cle thin:@ghc 1521:book. system manage r }. 

将连接字符串传递给这个方法 建立到数据库的连接 连 

接字符串中的第一十值指明thin JDBC驱动程序,(用的是@ 

符号)连接一个名为ghq的Hostname(或连接IP地址),端口 

是1521.数据库的Oracle SID是book.连接的用户名是system. 

口令是manager: 

④执行查询并且打印输出结果 

Statement statemt=conn createStatemen:{1. 它建一1’ 

SQL 吾日 复 

ResuItSet rsltset=sta:e ̄"t executeQde ry c SELECT USER 

'IAM E FROM book)。 

, 执行亘询结果存藏在ResultSet中book是一个table 

WhIle{rsltset next I 1) 

System out p rin:l"I rstset getString{’J,一/N用时 £指针移 

ResultSe:缓互中 一行.如早ResultSet中有数据可诿.nl 

退回TRUE.否则退巨FALSE 

●JDBC—ODBC桥 

JDBC—ODBC桥是一一个JDBC驱动程序.它通过将JDBC 

操作转换为ODBC操作来实现JDBC操作 

要魁使 JDBC—ODBC桥之前.必须选择Oracle ODBC 

Driver来创建一个OracleSi数据源.配置Oracle数据源时在数 

据源名称中填入Oracle.在描述中填人OracleSi.在Service 

Ftalne中填人ghq.在UserID中填入system。 

选择Oracle8i数据库的SQL{Net中Microsotf odlx.test来 

c。tapmer Programming驯k&M面 nance 2帕日2.3 g 

维普资讯

实用第一 

测试ODBC配置连接正确与否。 

¥make 

智慧密集 

①加载驱动程序 

Class forNameI sun ldbc odbc Jdbc0dbcDf ver l 

③安装 

¥su 

#make mstail 

②与Oracle81数据库建立连接 

String Jrl= jdbc:odbc:oracle . /oracle是DNS名 

Cennection 

co rl=D riverManager getCOnnectJ0n:Jr1 system .manag 

(2)编译与安装modjk插件 

①解包 

¥/uar/local/bin/gzip—dc lakarta—tomcat一3 2 1一s rc ta r 

ef): 

/, system , manager J是用尸若和口令 

③执行查询一个JDBC声明 

Statement stat=COn createStatement¨: 

String que ry= SELECT USERNAME FROM book 

ResultSet ra:stat executeQuery c query). 

@打印辅出结果 

W le{rS next{i} 

System out priqtlnI rs getStri ̄g c1)): 

三、在Solaris 7下用JSP构建网站的安装和配 

置运行 

安装配置Web服务软件Apache和应用服务软件Tomcat 

I包括JDK)。 

(一)应用环境 

操作系统为Solaris 7,应用环境为Java 1 2.2(假定安装 

在/usr/javal 2.2目录下)、perl 5 005(假定安装在/usr/lo— 

cal/bin目录下)和 _p(假定安装在/usr/local/bin目录下) 

(二)软件包的下载、编译与安装 

1.下载地址 

在hltp://wv,3*'apache org可下载最新的Apache源代码软 

件包apacheJ 3.22 lar.gz。 

在hltp://j ̄aa.apache.org/builds/lomeal/release/v3.2 

1/src/可下载Tomcal源代码软件包jakarta—tomcat一3 2 1一 

sJX2 lar- 。 

在hltp://jakarta.apache.org/builds/jakarta—tomcat/relea— 

so/v3.2 1/bin/可下载已编译的Tomcat应用软件包jakarta— 

tomcat一3.2 1. gz 

2.编译与安装 

假设各软件包已下载到当前的某个工作目录(如:/ 

home/tarp)下,Apache和Tomcat将安装在/home目录下 在 

当前目录我们可以进行如下操作 

(1)编译和安装Apache应用服务 

①解包 

¥/usr/local/bin/gzip—dc./'apache__.3 22 ta r gzlta r xf一 

②编译 

¥cd apache__.3 22 

¥/configu re一一prefix:,home/apache一1 3 22 

一一

with—pe rl:/usr/local/bin/'pe r J一一enable—mooule= 

So 

假设per1的解释命令安装在/usr/local/bin目录下.A. 

pache服务安装在/home/apache一1 3.22目录下。 

1 0 电鲢龋舞技l巧每维护 2∞2 3 

gz【ta r xf一 

②编译 

¥cd Iaka rta—tomcat一3 2 1一arc/src/native,/apache1 3 

¥/home/apache一1 3 22/bin/apxs—o modjk so—DSO 

LARIS—l/k一{/ 

us "java1 2.".include—1 usr,"java1 2 include/ 

so ̄aris—Jposix4一c c k/ c 

假定Java安装在/usr/javal 2目录下。 

⑤安装 

¥su 

# home/apacse一1 3 22 bin.,apxs一【一a—n Ik modjk 

so 

当屏幕显示如下内容时,表示安装成功。 

cp modjk so/home/apache一1 3 22/libexec/modjk so 

chmod 755/home/apache一1 3 22/Iibexec/mod Ik so 

 Iactivating module lk in/home./apache一1 3 22./conf./' 

httpd conf】 

(3)安装Tomcat服务 

用超级用户身份把已编译的Tomcat 3 2.1解包到/home 

目录下即可。 

S su 

#/us r/Ioca!/bin/gzip—dc Iaka ̄a—tomcat一3 2 1 ta gz 

fcd home.伯r xf一) 

3参数配置 

(1)配置Apache服务 

用vi命令打开Apache的配置文件httpd cord" 

#cd,/home,/apache一1 3 22/conf 

#vi httpd conf 

在末尾添加以下内容: 

JkWorkefsFile/home./Iaka rta—tomcat一3 2 1/conf/work— 

ors properties 

JkLogFiie/home."apache一1 3 22.,'logs/mod tk log 

注意:日志文件可根据具体情况调整 

JkLogLevel wa rn 

JkMo,Jnt, Jsp alp1 3 

JkMoJnt,".se rvlet," lsp alp1 3 

(2)配置Tomcal服务 

首先,修改server xml文件 

这里假定存放Apache的Web网页的根目录为/home/ht— 

does。 

#cd/home/jaka rta—tomcat一3 2 1/'conf 

#vi serve r xmI 

然后,在Conneclors部分嵌^如下内容: 

<Connector cla ssName: org apache tomcat service 

POOlTcDCOnnectOr ><Pa rame:e r name= handle r 

value:o rg apache tomcat service connector Alp 

维普资讯

实用第一 

1 3C0nnect10nHand}e r/> 

(Pa rameter name= poR ,caIue=8007 > 

智慧密集 

111o k”插件,它很好地弥补了modj serv的缺点,而且能支 

持Apache以外的多种Web服务:关于这种Apaehe/Jk方式的 

实现原理,请参考有关资料。 

《三)有关Solaris 7和Oracle8i的安装配置,由于篇幅有 

限,在此不能展开,请读者参考有关软件说明。 

为了使大家更具体地了解这种组合网站建站的实际应用, 

下面通过几个实例的讲解,希望大家能将理论和实际相结合, 

进一步提高自己椅建动态同站的水平 注:所有源程序可以在 

网站( comprg coin cn)下载 

< Connector> 

接着,在Special Webapps部分嵌入如下内容 

<Context path= 

docBase= /home/htdocs 

debug= 0 

</Context> 

修改wotke ̄.properties文件。 

#V1 wo rkers properties 

wo rkers tomcat home=,home/iaka rta—tomcat一3 2 

worke rs lavaj1ome=/us r/]ava 1 2 2 

ps=/ 

四、JSP的实例 

l jsP与JavaBean结合构造一个简单计数器的例子 

该侧子包含有3个文件:counter Java是一个JavaBean的文 

件, nler.class是counter java文件经过JDK1.2.2编译生成 

随后,修改Tomcat启动和关闭命令文件。 

#cd n 

#vi sta rtup Sh 

的类;c ̄unt jsp是一个JavaServer Page(JSP)的文件。 

nter java主要用来进行计数器的计数操作,count.j p 

文件主要用来显示网页的计数。 

counter 1日 的源程序如下: 

package COUnt. 

再在“BASEDIR=‘diruame 8O”。语句前嵌人如下内容 

PATH=/uer/lava1 2 2/b n。¥PATH。 

JAVA h0ME=/us r lava1 2 2 

TOMCAT H0ME=/home laka rta~tomcat一3 2 1 

PubIIc cIass goJnter f 

export P H JAVA HOME TOMCAT_HOME 

#vi shutclown Sh 

/ 始一(JavaBean 成员互量 

nt COUnt=0 

最后.在“BASEDIR=‘dirname¥0 语句前嵌人如下内容 

PATH= usr/'java1 2 2 bln:¥PATH. 

JAVA OME=/uer."java1 2 2 

TOMCAT OMB=/卜10me./jaka rta—tomcat一3 2 1 

export PATH JAVAHOME TOMCAT H0ME 

_

//Class构造器 

PJbl c SOUnte r{I【 

属 兰Count Get万法 

public int getCo ̄nt()f 

4测试 

计数搀作.每一次请求看I过行计数罪加一 

retJ rn this coJnt 

分别启动Apache和Tomcat 

home/apache 1 3 22 bin/apacnectl star 

#,'home./jaka rta tomcat一3 2 1/bIn,staRup sh 

#vi.,'home./apache 1 3 22 htoocs/Hello Isp 

<%page lauguage= java %> 

,,属性Count Set万巷 

public vo d setCount f int count 

this couqt=COunt 

<HTML> 

<HEAD> 

<TiTLE>Hello wo rld 0<.,'TITLE> 

</HEAD> 

(BODY> 

<% 

} 

} 

count.Jsp的源程序如下: 

< 一m}> 

<head 

<title>couqte r<,title> 

Out printf Hello world 0) 

%> 

( head> 

(booy> 

<,BODY> 

</HTML> 

<1sp:useBean ia= ghq scope=application class= COUnt 

COante r ) 

打开浏览器,访问Hello.jsp文件:http://loealhast/Hel— 

lo jsp。如能显示正确的内容(Hero world!),表示运行正常 

至此就可以正常运行JSP动态网页文件了 

5说明 

//韧始化counte r这个Bean 买1;戈ghq 

<CENTER> 

<FONT SIZE=5 COLOR=BLUE>… 

}一¨ <,F0NT> 

(/CENTEB> 

<县R> 

<HR) 

<BR> 

<CENTER> 

简单计数器 

Apache与Tomcat结台支持JSP动态网页开始是通过一个 

名为 Inodjser ̄r”的插件来实现的。采用这种Apache/Jser',方 

式配置参数十分复杂,运行效率很低,而且对ss L(一种加密 

传输方式)的支持也不理想.因此Jaka ̄a工作组新近开发了 

<FONT SIZE=6 COLOR=BLUE face=隶书>您好l欢迎 

c0皿叩ll1eT ramruing:Sbm&Mai卿 :29 3 1 1 

维普资讯

实用第一 

’王 来I您是第</FONT> 

<FONT S1ZE=6 COL0R=BLUE face 

F0NT> 

智慧密集 

ava io P rin:Write ̄OJr=new Java io PrintWrite rf resp get 

素书> 

。。>< 

0dtputStreamI)), 

<lsp:getPrope rty qame= gnq p roper:y= COU r『 

输出HTML 邵 

oJt printIn{ <htm ) } 

使用Jsp:getP rope rty 簦得到coiJlf* ̄属I¥ff谴 _±就是]一 

数器的筐 

(FONT SIZE=6 COLOR=BLUE face= 景书>。互吾人(- 

, 

out print n c<heap> } 

out println( <t tie ava Servlets Sample 十 0Jr 

dengiibiao(,."title>I: 

F0NT> 

< CENTER> 

< body> 

< m’) 

程序说明: 

JSP和JavaBean应用的一般操作方法 

(1)在JSP页面中要声明并初始化JavaBeart.这个JavaBean 

有一个唯一的-d标志.还有_一个生存范围scope(设置为appli- 

cation是为了实现多个用户共享一个计数器的功能,如果要实 

现单个用户的计数功能.可以修改scope为session).最后还 

要制定JavaBean的class来源couttt.coanter: 

<lsp:useBean id= ghq scope= applicatioq class= 

COUnt counter /> 

f 2 J可以使用JavaBean提供的public方法或者直接使用 

<jsp:getProaprty> ̄签来得到JavaBean中属性的值: 

ghq getCeunt()或<jsp:getPl-Oparty n ̄rtle:“ghq proper- 

ty= ‘count”/> 

注意:ghq是Id的值,getPmperb"的name值要和useBeaJl 

的-d值相同 

r3)在浏览器IE上运行…下程序,刷新几次,注意看计数 

器的变化。(每刷新一次,计数器加1) 

最后要注意counter j a编译后的文件cotmte ̄class放在 

<Se ̄er Root>、WEB—INF\CIASSES\count\counter cla ̄s

一 

2一叶、简单Servlet的例子 

该例子包含有2个文件:DengjiBiao javs.是 个Servlet文 

件,Ocngji.Biao class是Den ̄[Bi.ao j &文件经过编译生成的 

Selwlet类 De ̄gjiBiao iavlt运行于服务器端.主要功能是输出 

张登记表,表的内容是姓名(Baltic).性别I sex)和年龄 

(age)。 

DengjiBiao】ava的源程序如下 

impo t Javax se rv:et- . /3^、Iav'Bx servlet中所有的娄 

impo rt aVBX servlet http 。 导 avax servlet http中所 

有 娄 

public class DengjiBiao extenos HEpSe rvlet 

{ 

用doGet万舌进行HTTP GET操作 参数req 为害口端 

request请 .爹数resp作为se rv!et服务器端翱response 

响应 

publ c'void doGet f Htt0Se rv etRe0uest req HttpServle:Re- 

sponse resp) 

th rows Se rvIe:E×cept10n.Java io 1OExcept:on 

]{置明匝自] ContentType 蓼 

resp setC0ntentTv0e c text,htmI J。 

生一^ 1twme . Oo: 向丑览器写门菩 

1 2 电妇编程技巧与维护.2002.i 3 

ou:println(</heao> ) 

OUt printlnf<h2><center> } 

out priqtln f 0 r dengjibiao<."center></h2>一1 

out printlnf<br) ) 

,,

辅出一十特殊 用表过愿器se rvlet 表格形 

, the Table lIter servlet 

out printlnf<i—tab e columqs=3 heade r~yes>)

. 

/,输出三列表格 

out p rintlq I name.sex.age) 

OUt p r ntln{ gnq boy,28》 

out p r,ntln{ ggg gir1.25 1. 

out printIn{ hhh,boy 23 }. 

oJt print n c qqq.gi r1.26 J. 

OUt print n( <I—eRe table 一) ) 

/,结束过崔 

out printlnf<,t1tm> j 

out flush『). 

OUt c 4oseI}. 

) 

/ 初始化se rvlet.售用Se rv etConfig对象作为参数 

public void init(ServletConfig cfg) 

th rows Se rvIetE×ceDtIOn 

, 用Dest roy卸载se rv et 

public"re1d destrc ̄y{1 

supe r destroy c1. 

程序说明: 

在编写好一个Servlet程序后,编译成.class,然后运行之 

前,体一定要确认下面的工作已经完成。 

(1,某个版本的Java Developer’s kit(JDK)已经安装好 

本网站配置安装的是Jdk1.2 2 

(2)Servlet API类文件 在编译Den ̄iBiao va时还需 

要一些Servlet API类文件。如本例中就用到了javax.servlet} 

和Javax sere,let http. 类文件;或者第三方厂商提供的Servlet 

引擎.Servlet API的JAR文件一定要加人到CLASSPATH中 

(3)一个支持Servlet的Web服务器。它们包括Java Web 

服务器、Apache 及其他一些带有Servlet引擎附件的Web服 

务器 本例中就用到Apache和Tomcat服务器。 

编写响应HTML请求的Servlet只需两步: 

(】)创建一个扩展了jasqtx.serdet.http HttpServlet接口的 

Servlet类。 

(2)重写doGet和doPost方法之一或全部 这是servkt 

实际需要完成工作的地方一本例中就重写doGet部分: 

维普资讯

实用第一 

Servlet也可 重写init和destroy方法以实现Serdet特殊 

的初始化和析构 重写init和destroy的典型例子就是在init方 

法中建立数据库连接并在destroy方法中断开它。 

本例DengjiBiao.java和DengjiBiao.class应放在examples、 

WEB—INF\classes中,在浏览器IE上路径为h廿p://localhost: 

8007/既锄pks/se k【/De” Biao 

注意:DengjiBiao中的大小写字母,Sen'let后面没有 

s ,本机的端口号为8007fTomcat1: 

本铡用浏览器IE看到的输出是元格式的数据,如将格式 

化表格输出则可以采用两种方法:由表过滤器 f也是 

个TableFiher Servlet程序)或者编写两用5en,1el的HTML文 

件 当然web服务器要作相应的配置,对此感 趣的读者ar 

参考有关Servlet编程的书籍。 

3 个JSP通过JDBC访问Omele8i数据库的铡了 

本例子共包含4个JSP文件,它们是indexj 

Queo.j p、Inse ̄.jsp、Delete jsp 主要的功能是图书管理 实 

现简单的查询、添加和删除图书功能 index jsp是个图书 

管理维护界面,它的作用主要是链接查询图书(Queo J印)、 

添加图书(Inserl Jsp) 删除图书(Delete jsp】 Qu ry J p 

是一个实现查询图书的功能 Il18 .1sp是个实现添加图书 

的功能,Delete JsP是个实现删除图书的功能 

在数据库Oracle8i建个数据库表为book.表的结构 字 

段含义如下所示 

ID varehar2f8) 编号 

title varchar2f501 书名 

varchar2f401 作者 

pnee varchar2l8) 价格 

varchar2《1001 备注 

数据库的Oracle SID是book.]-Iostnam ̄是g】】q,用户名为 

system,密码为manager。 

下面分别介绍一下源程序: 

(1)index jsp的源程序如下所示: 

<lit 1) 

<head> 

<title>丑书管理< title> 

</head> 

<body) 

<table width=280 border:O a ign=center > 

<tr) 

<td width=650)<foot color= #004080)<O alig ̄ 

center ></font><f0m size=5 

+ace= 宋体 color= ̄O4080)<st roqg> 

stronc>< fO n1><font size: 十1></p> 

( font)<hr> 

<b ) 

</tO> 

</tr) 

<tr> 

<td><P align: ,cente r><dig><font color=#O00OFF) 

智慧密集 

<strong><8 h ref=Query Jsp >查词图之.请任此连 </a> 

< st rong></fOnt><,b岣></p> 

P align= center >(./td> 

</zr> 

<tr) 

<td><P align= cente r><big><font color=#0O00F ) 

<strong><a h ref=Insert jsp )番!口匿书请在此进^<,a> 

</strong></fOnt></b岣></p> 

<P align= cente r ></td> 

</tr> 

<:r) 

<td><0 align=cente r >(big><font color=#O000FF’> 

<strong><a href= Delete sp>删踪图书 请在此进 、< a) 

< strong>< :ant>< blg></p> 

P align= cente r > ( > 

< ”) 

(table 

(body> 

< html> 

(2 QuerY.Jsp(查询图书)的源程序如下所示: 

<%@page contentTVpe= text html cha rset=GB231 2 

%> 

<%@pageimpo rt= lava sql}: %)/¥}将茎装 程 

f 口一. 

<%@page impo rt= oracle ldbc d river} %) 

(%@page language= java %) 

(H ML> 

<HEAD) 

<TITLE>查壹图j‘."TITLE> 

<,HEAD> 

<BODY) 

<CENTER> 

<FONT SIZE=5 COLOq=blae碴询图书</FONT> 

< CENTE同> 

<BODY) 

<BR) 

<HR) 

<BR> 

<% 

St r:ng lD=request getParameterf ID】:/,冀碍图 厍中书 

骗寻 

if(ID=:null】, 如果书自乞垌号 至 

%> 

<FONT Size=4 Color=red><B>Lq有博查找白勺习半晤昱‘ 

请你巨到<A h ref:index Jsp >图书管理一番加臣书‘< 

A)</B><,/z FONT> 

<% 

eise 

%> 

<=0NT Size=4 Color=reo>(B>图书管葚信思如T.( 

B><,FONT> 

<% 

/ }在O racle口注册驱 程序.Driver Manage r娄芜许昔吝 

差册驱动程序 

Drive Manage r registerDrive (new oracle Jdbc driver Oracle- 

Drive ()I. 

… 童强引数据库 一- 

Connection con’1=D r verManage r getC0nnectIOn l ldbc e ra 

Compuler Pr。舭 嘴啦ms&Maime e.29 .3 1 3 

维普资讯

实用第一 

cle:thin:@ghq:1 521:book system manager ). 

(BR> 

<%I 

智慧密集 

/ j芎连接字符吕传递冶这千方击 建互至1数据库自]连接连萎 

宝符串中的第一i筐指明thin JDBC驱动程1予.1 是@符 

号)莲接一1、若1_ghq HostnameI或连接lP地址).端]是 

1 521.数据库 Oracle SID是book.连接的用F各兰system. 

public String GBK2UNI(String s)th rows Exception 

String temp:new Stnng c s getBytes( GBK 1. IS08859 1 

口令是manager 

Statement stmt=conn s reateStatement{ResultSet TYPE

— 

SCR0LUNSENS VE.ResutSet CONCUR READ_。NLY), 

, 建互Statement要量.#设定记录指标粪型为_l 后琴 

ResultSet rs=stmt execu:eQueryl select fr0m book J 

/ 孔行查 羔舌果存放在ResultSet中 

%) 

<TABLE bgcolor=Blue> 

<TR> 

<TD)编号<,1。D> 

(TD 若<sTD> 

<TD 乍看</TD> 

<TD> ̄di桔<./TD> 

<TD>备注</TD> 

</TR> 

<% 

whl e{rs Bex {i) 

//利用while循 配合qext万法,垮ResultSet要量中 记 

录 出 

%) 

<TR> 

<TD><%=rs getSt riqg¨)%></TD> 

<TD><%=rs getString《2)%></TD> 

<TD><%=rs getString《3)%></TD> 

<TD><%:rs getS:ring{4I%></TD> 

<TD><%:rs getStbng【5I%>(,IrD> 

</TR> 

</TABLE> 

<% 

rs close(), /,关-=-】ResultSet要量 

stmt close1)./夭 Statement变量 

conn close():/ 丢】习Connection变量 

%> 

<% 

%> 

</BODY> 

</HTML> 

(3)[nsert j叩(添加图书1的源程序如下所示: 

<%@page contentTvpe= text,t1tm{cha rset:GB23’2 

% 

<%@page impo rt: java sql} %> 

<%@page impo rt= oracle ldbc driver %> 

<%@page language:java%> 

<HTML> 

<HEAD> 

<TITLE>添 臣书<,"TITLE> 

</HEAD> 

<BODY> 

<CENTER> 

<FONT SIZE:5 COLOR=blue>: ̄q图书< FONT> 

(/CENTER> 

<BR> 

<HR> 

14 龟隧蝻程技巧与维护‘2O02・ 

retu re temp, 

】 

%> 

/,声明:幅GDK转换 Unicode 代码 

<% 

String pause:request getPa rameter( submit 】://取得指 

令按钮悸出的数据 

if{pause==qull】// 断是否取得指令按钮传出的数据 

( 

session setAttifbute{ Done “”),//重设变数值 

%> 

<FORM action= Inse rt lsp method=POST> 

<TABLE 

<TR COLSPAN=2 align:center> 

<FONT SIZE=4 COLOR=red><B>请添加新图书<,B) 

</FONT> 

</TR) 

<TR)<TD><B>编号</B)</TD> 

<TD><INPUT type= text name=lD size= 20 max— 

Length= 8)</TD></TR> 

<TR)<TD><B>书名</B></TD> 

<TD><lNPUT type= text name=Tit1e size= 2O max— 

Length: 50 ></TD>(/TR> 

<TR><TD><B>I乍者</B></TD><TD> 

(INPUT type: text name:Author size: 20 maxLength 

= 

40 ></TD></TR> 

<TR><TD><B>f,lf榷</R></TD> 

<TD><INPUT type=text r]ame=Price size= 2O value 

O 0 maxLength= 8 ></TD></TR> 

<TR><TD><B墙注</B></TD></TR> 

<./TABLE> 

<TEXTAREA rOWS=5 C01S=40 name=Memo> 

<, TEXTAREA><P></P> 

<INPUT type= submit va ue= 添加数据 name:submit> 

</FORM 

<% 

else 

/{}在O rac!e中注册驱动程序,D rive r Manage r娄艽许动态 

地注册;E动程序一/ 

D r ve rManager registe rD rive r(new oracle Jdbc driver O racle— 

D rive r{1 1. 

/ 连接到数据库 / 

Connection conn=D rive rManager getC0nnectIOn J Jdbc:ora— 

c e thin@ghq:1 521:book . system . manager 1. 

,/:t7-莲接字符吕传退给这十万未以建互至 数据库的连接连接 

!符丰中的第一个值指明thin JDBC驱动程序,l用的是@符 

号)连接一个名为gha的Hostname{或连接lP地址】,端口是 

I 521,数据库9t1 O racle s1D是book,连接的用尸名是system. 

口令是manage r 

Statement sturt:conn createStatement J ResuItSet TYPE 

SCROLLjNSENSITI'vE,Resu JtSet CONCUR READ ONLY). 

/,建互Statement变量.开设定记录指标类型 可前后移 

String【D=GBK2UNI(request getParameterI lD)t rim{J J: 

维普资讯

实用第一 

Stnng Title=GBK2UNI(request getPa ramete r( Tit e J t r m 

¨) 

String Author=GBK2UNI(request getPa ramete r( Author) 

ml11 

%> 

智慧密集 

</BODY> 

</HTML> 

String Price:GBK2UNI【request getParameter( Price)…m 

String Memo=GBK2UNI{request getParameter{ Memo ) 

t rim{I}. 

(4)Delete j印(删除图书)的源程序如下所示: 

<%@page contentType= text/n1m cha rset:GB2312 

%> 

/一对取得亩:参数数据进行转码.去掉空r苦,为了中文 正常显专 

St ring st rSQL; 

<%@page import: java sq!★ %> 

<%@page import=oracle 1dbc-k- %> 

if《session getAttribute《 Done J I= yes ) 

<%@page language= java %> 

(HTML> 

<HEAD> 

判断Done要数的值.避免使用“重新整理” 安钮重要嚣 :数据 

/ 建互匿书数据增z]引数据库刍勺SQL 

st rSQL:】HSERT INT0 Bookl ID Tit e +Author Price 

Memc-】Values f + f0 + + Title + 十 

Author + +Price + + Meme + I 

s t execufeupdafe J st rSQL) 碍图书数据 增z]至 

数据库表book中 

session setAttribute(Done . yes) 

,/ 0 sess on变量中的Done设 yes时避免重要 I]数琚 

%> 

<P)己jz-新图书增虾到图书竟料中 匿 信息内客如下:</ 

P> 

<% 

ResuItSet rs:stmt executeQuery l SELECT FROM 

Book J 

,/捷行SQL毂连.,_^数据库甲取得Book数据表中的数据 

%> 

<CENTER> 

<TABLE bgco o r=Btue) 

<TR> 

<TD)(B蝻号</B)</TD> 

<TD>(B>书名(/B)</TD> 

<TD)(B 乍者( B)</TD) 

</TR) 

<% 

/利用while循 配合next声法将数据表中 记录利出 

while c rs next¨l 

{ 

%> 

<TR> 

<TD><B><%=rs getString c ID )%)</B>< TD) 

<TD)(B><%=rs getString c Title }%>(/B></_ D> 

<TD><B>(%=rs getString{ Autho r )% </B)(,.rD) 

(/TR> 

<% 

%) 

<1,]_ABLE> 

</CENTER) 

<% 

rs dose¨ 关 司ResultSet 量 

stmt ctosef) / 天闭Statement变量 

conn close(). 关闭Connection变量 

%) 

<口)<A H ref=lnse rt lsp >要新增图书</A>还吊回 

引<A href:index Jsp )图 管理 < A)</P> 

<% 

<TITLE>剩脖臣书< TITLE> 

< HEAD> 

<BeDY> 

<CENTER> 

<FONT SIZE=5 COLOB=blue> ̄J院臣书</FONT> 

(,CENTER> 

<BR> 

<HR> 

<BR) 

<%I 

/ 谭用一个JSP肓 

Connection coen:nulI. 

Sta ̄ement stmt=null; 

ResultSet rs=nulI 

pubi c void』splnit¨ 

{ 

t ry 

{ 

Class fo rName l o racle ldbc d river O racleD river J. 

//载A驱动程式美别 

DriverManage r getConnection f”ldbe:oracle:thin:@ghq: 

1 521 book . system , manage r J, 

//将连接字符串传递给这个方法 建立到热据库的连接连接 

字符串中的第一A值指明thin JDBC驱动程序,l用 是@符 

号)连接一十芒 ghq的Hostname【或连接lP地址},端[是 

1521.数据库 Oracle aID是book.连接的用尸名是system, 

口令是manager 

stmt:conn createStatement c只esu ̄tSet TYPE SCROLL 

INSENSITIVE ResultSet CONCUR READ

0NLY), 

//建立Statement变量 并设定记录指标类型 可前后移 

) 

catch(Exception e} 

{ 

System out println l e toSt ring J]). 

} 

public void JspDestroy  lJ 

{ 

try 

stmt closeI}., 关司Statement变量 

conn close() 关闭Connection变量 

ra close().//关闭ResultSet变量 

catch f Exception e) 

f 

System Out prietlofe toStringl1) 

Computer 略 越&弛却 晒睁29 .3 15 

、 

维普资讯

■ 

编 } 与匝¨一 H 

Strine D r4: 

request ge:Pa ameterI]D )./ 取碍10# 

J亏出自]数据 

lf DH::_IJ 

l 是苫 『 襄罩口;譬寺 置锃F 传 1直 

s:strut e×e I【lte0 Jery{ SELECT l FROM Book) 

开后Resu ̄tSet 量 

诧> 

<CENTER> 

<TABLE bgcclor=B ue> 

<TR) 

<TD><B>镐 </B)<TD> 

<TD><暑>书芒</B><TD> 

< TR> 

<% 

刊目whle话耳! i next 圭牦数难表甲的记录列 

w l e{rs nextI I i 

{ 

: ) 

<T ) 

<TD><B><%: s!le:St r ngI D I%)< B>< TD> 

< D)<B><%:fs getSt ring Title 1%)</B)<TD> 

</TR> 

<% 

} 

%) 

<一TABLE> 

</CENTER) 

<BR> 

<CENTER) 

<D)(FONT SIZE:4 CO_OR:red>请辅A欹删除 编号 

<,FONT></P) 

(FORM action=De ere Isp method:POST name:form2> 

<INPUTtype=tex:name=D) 

<INPUTtype: submit vahe=跚险name=B2> 

</FORM 

</CENTER> 

<% 

S 

{ 

建王壹词圈 垂 SQL宇串 

S:riqg strSQL:SELECT-一=R0M Book WhERE ID: 一 

lDH+ 

ra:sturt executeQ e ry(s:rSQL}./建王ResuhSet妄量 

lffI 1ext《lI 

%> 

(CEN 一{一> 

<P  :l书 

<FON S ZE=4 C0L0R:reo> 

<%=)H%) 

</FO!JT 穑j芒去进1彳习书删译 (P) 

<% 

16 电曲编程技巧与维护.2002:3 

智慧密集 

删际习书数据 SQL语 

String strDel= DELETE FROM BoOk WHERE ID: + 

DH十 

stmt ecuteupdateI strDel J 行 豫 作 

rs:s:mt execu=eQuery SELECT¥FROM Book I 

重新开届记录集要量印呈Book数据表中的蠡据 

% 

<CENTER> 

<TABLE bgcolor=Blue) 

<TR) 

<TD><B 昙< B)(,1。D> 

<TD><8>t4名< B><,TD) 

<TD><B 乍考<,B)< TD> 

</TR> 

<% 

0用while循环配自next万硅牡赶据表中的记录列出 

whilef rs next1)) 

%> 

<TR> 

<TD)<B)<%:ra getString(ID )%></B></TD) 

<TD)<B><%=rs getString{ Title }%)</B></TD> 

<TD><B><%:rs getString(Au:hor }%></B></TD> 

</TR> 

<% 

</TABLE> 

</CENTER> 

%> 

<P><A HR EF 

Delete lsp>要删陈习字</A>还是回到<A 

ref= lqdex Isp 

>图书管理 < A></P)(/CENTER) 

<% 

%> 

</BODY> 

</HTM L> 

关于上面的三个程序(Queq ̄.Jsp.Insert jsp.Delete j叩)的 

有关说明: 

●上面的图书管理在实际应用中还必须进一步完善 JSP 

通过JDBC访问OraeleSi数据库可以采用三种方法之一.本例 

中采用Oracle8i瘦驱动程序,从Java小应用程序连接并查询 

Oracle数据库,这种方法是JDBC访问Oracle数据库最常用 

的、效果最好的。如果要用JDBC—ODBC桥的方法访问Oracle 

数据库的话,就要像ASP访问数据库一样也要配置ODBC。 

●为了JSP程序的简洁,可以将JDBC访问OracleSi数据 

库的程序公共部分f或<%!xⅡ%>中x垃程序)做成一十Java— 

Bean.就像上面的第一个例子一样.通过调用Bean的方式来 

操作: 

●在Insert.J。p中用到se&sion对象存取的说明如下: 

将数据保存到sessien对象的语法如下: 

session setAttributeIStirng数据名称,Object数值) 

(下转第27页】 

维普资讯

实用第一 

B00L bRecving 

b reak 

——

. 

编 

0VERLAPPED read os: 

OVERLAPPED write

os; 

_

J 

OVERLAPPED OS; 

COMSTAT comStat; BOOL bSending=TRUE 

Clea rCommE rro r I hComm,Dev&dwE r ro r=lag&corn— 

Stat 

HWND m hWnd;,/调 王窗伍句 

HANDLE hCommDev 

HANDLE postRecvEvent; 

HANDLE 00stSendEve n1 

HANDLE rethread. 

_

DWORD ISendSt'Len:comStat cb0utQue 

FILE十fpSeno:fopeqIflename rb ) 

//又件小于5K 

int t=fread{st rSendData十30 1 5120 3O佃SeRe 

f fISendStrLen::0) 

DWORD dwThreadID1 

将以下代码添加到实现文件中 

nclude<crtdbg h> 

#nclude<stdio h> 

f 

if(bSending) 

W r;teFile I hCommDev,st rSendData,t+30.&dwBytesW r t 

ten.8Lw riteos) 

1O将以下代码写在头文件中 

extem C void stdcaI ISendFile{char filename__) 

将以下代码写在输出库定义文件中 

SendEile

SetEvent f D0stSendEven 

@2 、 

fcloseI:fpSend J: 

bSending=FALSE. 

11代码编写的任务已经完成,现在只需编译执行即可生 

成一个输人库文件和一个动态链接库文件。 

注意所要发送的文件必须以字母a且结尾,如果文件尾不 

是a且.应手动添加。 

9舔加所需的变量和所需的文件。 

三、结束语 

本文从实际应用的角度对申口通信的实现方法给出了较为 

详细的说明,所给出的实例是作者在实际的软件程序中摘录出 

来的,具有较强的实用性。由于篇幅所限,实际软件中许多详 

细内容还没有完全展示出来,读者只需将部分代码完全拷贝, 

即可实现所需功能。如果读者对程序还有其他方面的要求,请 

发E』nail:pekingmxl@sina COrn en 

将以下定义添加到头文件中 

unsigned long combaud rate: 

unsigned long dwBytesW ritten 

unsigned long dwE r rorFlag; 

unsigned long dwTransfer; 

unsigned long iRecvStrLen; 

unsigned long dwEvtMask 

串口波特率 

参考文献 

1.席庆、张春林编蓍. 

Visual C++6.0实用编程技术 

中国才利水电出版社,1999 

2陈坚、孙志月编著 

Modem通信编程技术.西安电子 

科技大学出 杜 1999 

(收稿目期:2001年l2月22日) 

cha r strSendData【51 2O1. 发送缓冲区为5K 

cha r strRecvDataI 51 20】 /接嘘缓冲区7j 5K 

cha r strRecvBuffI 51 20】,,,串口接嘘缓冲区 5K 

cha r endcode【2】 结束字符 

Int 

int count; ,接嘘数据 十数 

f上接第l6面) 

取得保存在 ̄ession对象的数据语法如下: 

Object对象变量:session getAttribute(String数据名称) 

●JSP中文显示的说明: 

在JDBC Driver对数据库中的数据的暴加和显示时,会涉 

及到IS08859_1和GBK字符集的转换同题,即encode和Uni— 

code的代码转换,只有处理好字符集的转换同题.中文才能 

正常显示。 

public String GBK2UN ̄(String s1throws Exception 

{ 

String temp:new String(s getBytes{ GBK ) IS08859 1 

return temP. 

} 

或 

/ 将Unicode转换无GBK的代码 

public String UNI2GBK(String s Jthrows Exception 

{ 

String temp:new Stringfs ge:Bytes c S08859

1 ) GBK 

_

下面是字符集的转换的一段源程序,根据具体情况进行处 

理。 

} 

retu rn temp; 

叫£GBK转换 dnicode的代码 

(牧稿E期:2002年1月4粤) 

coⅢ|,mr Pr0 商她 &M赫 啦 27 


本文标签: 连接 数据 数据库 服务器