黄微、申刚玉
3.实现中间层
下面以bookservlet为例,说明如何实现中间层的servlet。
(1)初始化servlet
public class bookservlet extends httpservlet {
protected connection dbconnection;
protected preparestatement readquery;
protected preparestatement writequery;
protected string dbname=″jdbc:odbc:bookdatabase″;
protected string bookname;
protected string bookisbn;
public void init(servletconfig config) throws servletexecption
{
try {
class.forname(″sun.jdbc.odbc.jdbcodbcdriver″);
dbconnection=drivermanager.getconnection(dbname,″″,″″);
}
catch(exception e)
{
system.out.println(″can not initialize database″);
}
}
servlet的init()函数在servlet被初次激活时进行调用,对于bookservlet,在init()中我们创建其与图书数据库的连接(当然应该已经在odbc中定义bookdatabase),这里使用的是java jdbc api中的connection对象。
(2)实现service()操作
当客户端向servlet进行请求时,servlet的service()函数被调用,在service()中我们应该实现中间层的所有功能。
public void service(httpservletrequest request,httpservletresponse reponse)
throws servletexception,ioexception
{
bookname=request.getparameter(″bookname″);
bookisbn=request.getparameter(″bookisbn″);
if (bookname==null && bookisbn==null)
doquerybook(request,reponse);
else donewbook(request,reponse);
}
首先,我们通过参数httpservletrequest取得客户端的输入参数,这些参数是用户在html页面中的编辑框中输入的,然后我们根据用户的需要进行库查询或库更新的操作。
◆查询数据库信息并向浏览器返回结果页面
查询数据库信息首先应该根据查询条件,构建一个sql语句(本例仅简单地返回所有记录),然后设置prepaerstatement对象,通过运行其executequery()向后台数据库服务器请求结果。取得查询结果后,servlet通过httpservletresponse生成一个结果html页面返回给浏览器。
public void doquerybook(httpservletrequest request,httpservletresponse reponse)
{
try {
readquery=dbconnection.preparestatement(
″select?from booktable″);
string htmlhead=″〈html〉〈head〉〈title〉查询结果〈/title〉〈/head〉″;
string htmlbody=″〈body〉″+;
resultset readresult=readquery.executequery();
while(readset.next())
{
string name=readresult.getstring(″bookname″);
string isbn=readresult.getstring(″isbn″);
htmlbody+=name+″ ″+isbn+″″;
}
htmlbody+=″〈/body〉″+〈/html〉″
printwriter output=new printerwrite(response.getoutputstream());
response.setcontenttype(″text/html″);
output.println(htmlhead+htmlbody+htmltail);
}
catch(exception e)
{ … … … }
}
◆将数据写入数据库
将数据写入数据库的过程与查询类似,也是先构建一个sql语句,对于本例来说,其写入的sql语句为:
string writesql=″insert into booktable (bookname,isbn) values(″+bookname+″,″+bookisbn+″)″;
然后调用preparestatement::executeupdate();
4.利用servlet实现中间层的进一步讨论
通过上面的图书管理的例子,可以看出利用servlet技术实现中间层是十分方便的,其操作过程类似于cgi编写的
闽公网安备 35060202000074号