web软件技术实验五.docx
《web软件技术实验五.docx》由会员分享,可在线阅读,更多相关《web软件技术实验五.docx(15页珍藏版)》请在冰豆网上搜索。
web软件技术实验五
《web软件技术》实验报告(9)
学号:
10123568姓名:
李智斌班级:
计123成绩:
实验名称:
JDBC访问数据库
实验地点:
信息楼215
所使用的工具软件及环境:
tomcat,MySQL,navicat,JCreator
一、实验目的:
1.掌握使用传统的方法访问数据库;
2.掌握使用数据源的方法访问数据库。
二、实验内容:
(一)使用传统方法通过JSP页面访问数据库
【步骤1】创建数据库。
假设在MySQL建立了一个名为bookstore的数据库,在其中建立books表,代码如下:
CREATETABLEbooks(
bookidcharacter(5)PRIMARYKEY,--书号
titletext,--书名
authorcharactervarying(20),--作者
publishercharactervarying(40),--出版社
pricereal--价格
);
向books表中插入几条记录,代码如下:
INSERTINTObooksVALUES
('204','HeadFirstServlets&JSP','BryanBasham','中国电力出版社',98.00);
INSERTINTObooksVALUES
('201','Servlets与JSP核心教程','HallMarty','清华大学出版社',45);
INSERTINTObooksVALUES
('202','Tomcat与JavaWeb开发技术祥解','孙卫琴','机械工业出版社',45);
INSERTINTObooksVALUES
('203','JSP应用开发技术','柳永坡','人民邮电出版社',52);
INSERTINTObooksVALUES
('205','J2EE1.4编程指南','SpielmanSue','电子工业出版社',68);
注意:
需要将数据库的JDBC驱动程序安装到应用程序的WEB-INF\lib目录中。
【步骤2】使用下面JSP页面displayBooks.jsp访问books表中的数据。
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
DatabaseAccessTest<%
try{
Class.forName("com.mysql.jdbc.Driver");
Stringdburl="jdbc:
mysql:
//localhost:
3306/bookstore";
Connectionconn=DriverManager.getConnection(dburl,"bookstore","bookstore");
Statementstmt=conn.createStatement();
Stringsql="SELECT*FROMbooks";
ResultSetrs=stmt.executeQuery(sql);
out.println("");
out.println("
书号 | 书名 | 作者 | 价格 |
");
while(rs.next()){
out.println("
"+rs.getString (1)+" | "+rs.getString (2) +" | "+rs.getString(3) +" | "+rs.getString(5)+" |
");
}
out.println("");
rs.close();
stmt.close();
conn.close();
}catch(Exceptione){
out.println(e.getMessage());
}
%>
结果如下:
(二)通过数据源访问数据库
注意:
需要将数据库的JDBC驱动程序安装到Tomcat安装目录的\lib目录中,并重新启动Tomcat服务器。
【步骤1】建立局部数据源
在Web应用程序中建立一个META-INF目录,在其中建立一个context.xml文件,内容如下:
xmlversion="1.0"encoding="utf-8"?
>
name="jdbc/bookDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="bookstore"
maxWait="5000"
driverClassName="org.postgresql.Driver"
password="bookstore"
url="jdbc:
postgresql:
//localhost/bookstore"/>
【步骤2】使用下面的JSP页面displayBooks.jsp访问数据库
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*,javax.sql.*,javax.naming.*"%>
DataSourceTest
<%
try{
Contextcontext=newInitialContext();
DataSourceds=(DataSource)context.lookup("java:
comp/env/jdbc/bookDS");
Connectionconn=ds.getConnection();
Statementstmt=conn.createStatement();
ResultSetrs=stmt.executeQuery("SELECT*FROMbooks");
out.println("");
out.println("
书号 | 书名 | 作者 | 价格 |
");
while(rs.next()){
out.println("
"+rs.getString (1)+" | "+rs.getString (2) +" | "+rs.getString(3) +" | "+rs.getString(5)+" |
");
}
out.println("");
rs.close();
stmt.close();
conn.close();
}catch(Exceptione){
out.println(e.getMessage());
}
%>
结果如下:
(三)综合应用。
本实验采用MVC设计模式,通过数据源和DAO对象访问数据库。
其中JavaBeans实现模型,访问数据库,Servlet实现控制器,JSP页面实现视图。
∙模型包括2个JavaBean:
BookBean用于存放图书信息,BookDAO用于访问数据库。
∙控制器包括2个Servlet:
BookQueryServlet根据请求参数查询图书信息、BookInsertServlet用来向数据库中插入数据。
∙视图包括4个JSP页面:
bookQuery.jsp显示查询页面、bookInsert.jsp显示插入页面、display.jsp显示查询结果页面和errorPage.jsp显示错误页面。
【步骤1】存放图书信息的JavaBeans代码BookBean.java,它也是一个传输对象。
packagecom.beans;
importjava.io.*;
publicclassBookBeanimplementsSerializable{
privateStringbookid=null;
privateStringtitle=null;
privateStringauthor=null;
privateStringpublisher=null;
privatefloatprice=0.0F;
publicBookBean(){}
publicBookBean(StringbookId,Stringauthor,
Stringtitle,Stringpublisher,floatprice){
this.bookid=bookId;
this.title=title;
this.author=author;
this.publisher=publisher;
this.price=price;
}
publicStringgetBookid(){returnthis.bookid;}
publicStringgetTitle(){returntitle;}
publicStringgetAuthor(){returnthis.author;}
publicfloatgetPrice(){returnprice;}
publicStringgetPublisher(){returnpublisher;}
publicvoidsetBookid(Stringbookid){this.bookid=bookid;}
publicvoidsetTitle(Stringtitle){this.title=title;}
publicvoidsetAuthor(Stringauthor){this.author=author;}
publicvoidsetPrice(floatprice){this.price=price;}
publicvoidsetPublisher(Stringpublisher){this.publisher=publisher;}
}
【步骤2】下面的BookDAO是一个简单的JavaBeans,它实现数据库的访问。
packagecom.beans;
importjava.sql.*;
importjavax.sql.*;
importjavax.naming.*;
importjava.util.ArrayList;
importcom.beans.BookBean;
publicclassBookDAO{
privatestaticInitialContextcontext=null;
privateDataSourcedataSource=null;
publicBookDAO(){
try{
if(context==null){
context=newInitialContext();
}
dataSource=(DataSource)context.lookup("java:
comp/env/jdbc/bookDS");
}catch(NamingExceptione2){
}
}
//根据书号查询图书信息
publicBookBeansearchBook(Stringbookid){
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrst=null;
BookBeanbook=newBookBean();
try{
conn=dataSource.getConnection();
pstmt=conn.prepareStatement("SELECT*FROMbooksWHEREbookid=?
");
pstmt.setString(1,bookid);
rst=pstmt.executeQuery();
if(rst.next()){
book.setBookid(rst.getString("bookid"));
book.setTitle(rst.getString("title"));
book.setAuthor(rst.getString("author"));
book.setPublisher(rst.getString("publisher"));
book.setPrice(rst.getFloat("price"));
returnbook;
}else{
returnnull;
}
}catch(SQLExceptionse){
returnnull;
}finally{
try{
conn.close();
}catch(SQLExceptionse){
}
}
}
//插入一本图书记录
publicbooleaninsertBook(BookBeanbook){
Connectionconn=null;
PreparedStatementpstmt=null;
try{
conn=dataSource.getConnection();
pstmt=conn.prepareStatement(
"INSERTINTObooksVALUES(?
?
?
?
?
)");
pstmt.setString(1,book.getBookid());
pstmt.setString(2,book.getTitle());
pstmt.setString(3,book.getAuthor());
pstmt.setString(4,book.getPublisher());
pstmt.setFloat(3,book.getPrice());
pstmt.executeUpdate();
pstmt.close();
returntrue;
}catch(SQLExceptionse){
returnfalse;
}finally{
try{
conn.close();
}catch(SQLExceptionse){}
}
}
}
【步骤3】下面的JSP页面bookQuery.jsp实现根据书号查询图书信息
<%@pagecontentType="text/html;charset=gb2312"%>
BookQuery请输入一个书号:
【步骤4】下面的JSP页面bookInsert.jsp实现向数据库中插入数据
<%@pagecontentType="text/html;charset=gb2312"%>
BookInsert请输入图书信息:
<%if(request.getAttribute("result")!
=null)
out.print(request.getAttribute("result"));
%>
【步骤5】显示查询结果的JSP页面display.jsp:
<%@pagecontentType="text/html;charset=gb2312"%>
useBeanid="book"class="com.beans.BookBean"scope="request"/>
书号:
getPropertyname="book"property="bookid"/>
书名:
getPropertyname="book"property="title"/>
作者:
getPropertyname="book"property="author"/>
出版社:
getPropertyname="book"property="publisher"/>
价格:
getPropertyname="book"property="price"/>
【步骤6】错误页面errorPage.jsp代码如下:
<%@pagecontentType="text/html;charset=gb2312"%>
对不起,您查的图书不存在!
【步骤7】下面的Servlet实现从请求参数获得书号,然后从数据库中查找该书,最后根据查询结果将请求转发到显示页面(display.jsp)或错误页面(errorPage.jsp)。
packagecom.control;
importjava.io.*;
importjava.sql.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importcom.beans.BookBean;
importcom.beans.BookDAO;
publicclassBookQueryServletextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
Stringbookid=request.getParameter("bookid");
BookDAObookdao=newBookDAO();
BookBeanbook=bookdao.searchBook(bookid);
if(book!
=null){
request.getSession().setAttribute("book",book);
RequestDispatcherview=request.getRequestDispatcher("/display.jsp");
view.forward(request,response);
}else{
RequestDispatcherview=request.getRequestDispatcher("/errorPage.jsp");
view.forward(request,response);
}
}
}
【步骤8】下面的Servlet实现向数据库插入数据,并将控制请求的转发到bookInsert.jsp页面。
packagecom.control;
importjava.io.*;
importjava.sql.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importcom.beans.BookBean;
importcom.beans.BookDAO;
publicclassBookInsertServletextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding("gb2312");
Stringmessage=null;
BookBeanbook=newBookBean(
request.getParameter("bookid"),request.getParameter("title"),
request.getParameter("author"),request.getParameter("publisher"),
Float.parseFloat(request.getParameter("price"))
);
BookDAObookdao=newBookDAO();
booleansuccess=bookdao.insertBook(book);
if(success){
message="成功插入一条记录。
";
}else{
message="插入记录错误