JavaWeb用MV模式C实现简单的图书管理系统报告资料.docx
《JavaWeb用MV模式C实现简单的图书管理系统报告资料.docx》由会员分享,可在线阅读,更多相关《JavaWeb用MV模式C实现简单的图书管理系统报告资料.docx(15页珍藏版)》请在冰豆网上搜索。
![JavaWeb用MV模式C实现简单的图书管理系统报告资料.docx](https://file1.bdocx.com/fileroot1/2023-1/7/4a2c1ea3-43c2-4a30-bbb6-0cf53a832a6b/4a2c1ea3-43c2-4a30-bbb6-0cf53a832a6b1.gif)
JavaWeb用MV模式C实现简单的图书管理系统报告资料
《软件开发基础(Java)》
综合性实验报告
题目:
MVC实验图书管理系统
班级:
学生学号:
学生姓名:
指导老师:
提交时间:
2016年1月14日
数学与信息学院
一、实验目的
掌握基于MVC的三层架构。
二、实验题目
通过数据源和DAO对象访问数据库.其中JavaBeans实现模型,访问数据库,Servlet实现控制器,JSP页面实现视图。
∙模型包括2个JavaBean:
BookBean用于存放图书信息,BookDAO用于访问数据库。
∙控制器包括2个Servlet:
BookQueryServlet根据请求参数查询图书信息、BookInsertServlet用来向数据库中插入数据。
∙视图包括4个JSP页面:
bookQuery。
jsp显示查询页面、bookInsert.jsp显示插入页面、display.jsp显示查询结果页面和errorPage.jsp显示错误页面.
三、具体实现
1.设计数据库
CREATETABLEbooks(
bookidvarchar(20)PRIMARYKEY,
titlevarchar(50)
authorvarchar(30),
publishervarchar(40),
priceFloat);
2.程序流程
查询图书信息
插入图书信息
3.代码实现
(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;
publicclassBookDAO{
privatestaticContextcontext=null;
privateDataSourcedataSource=null;
publicBookDAO(){
try{
if(context==null){
context=newInitialContext();
context=(Context)context。
lookup(“java:
comp/env");
//连接的是在context。
xml下面配置的数据库连接池
dataSource=(DataSource)context。
lookup(”databasePool”);
}
}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(5,book。
getPrice());
pstmt.executeUpdate();
pstmt.close();
returntrue;
}catch(SQLExceptionse){
returnfalse;
}finally{
try{
conn。
close();
}catch(SQLExceptionse){}
}
}
}
(3)JSP页面bookQuery.jsp实现根据书号查询图书信息
〈%@pagecontentType="text/html;charset=UTF—8"%〉
〈html〉
BookQuery
〈/head>
请输入一个书号:
〈/form〉
(4)JSP页面bookInsert。
jsp实现向数据库中插入数据
〈%@pagecontentType="text/html;charset=UTF-8”%>
〈head〉
BookInsert〈/title>
〈/head〉
〈h3〉请输入图书信息:
<%if(request.getAttribute(”result")!
=null)
out.print(request。
getAttribute("result”));
%〉
〈formaction=”bookinsert。
do"method="post”〉
书号〈/td>〈td> |
〈td〉〈inputtype="text"name="title”> |
作者〈/td> |
〈td〉出版社〈td>〈inputtype="text”name=”publisher">
〈/tr〉 〈tr〉 | 〈/td〉 〈td〉 |
〈/form〉
(5)显示查询结果的JSP页面display。
jsp
〈%@pagecontentType="text/html;charset=UTF-8”%>
〈jsp:
useBeanid=”book”class=”com.beans.BookBean"scope="session”/〉
书号:
〈jsp:
getPropertyname="book”property="bookid"/>
书名:
〈jsp:
getPropertyname=”book"property="title”/〉
作者:
〈jsp:
getPropertyname="book"property=”author"/>
出版社:
〈jsp:
getPropertyname=”book"property="publisher"/>
价格:
getPropertyname="book”property="price”/〉
〈/body〉〈/html〉
(6)错误页面errorPage.jsp
〈%@pagecontentType="text/html;charset=UTF—8"%〉
〈html>
对不起,您查的图书不存在!
〈/body〉〈/html>
(7)从数据库中查找该书,最后根据查询结果将请求转发到显示页面(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("UTF—8”);
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="插入记录错误!
";
}
request。
setAttribute("result”,message);
RequestDispatcherview=request。
getRequestDispatcher("/bookInsert。
jsp");
view。
forward(request,response);
}
}
(9)配置context文件
<?
xmlversion=”1。
0”encoding=”UTF—8"?
>
type="javax。
sql.DataSource”
auth=”Container"
driverClassName="com。
mysql。
jdbc。
Driver”
url="jdbc:
mysql:
//localhost:
3306/library?
useUnicode=true&amp;characterEncoding=UTF-8"
username=”root"
password=”zzhao"
maxTotal=”8"
maxIdle=”2"
maxWaitMillis=”60000”/〉
(10)在web。
xml文件中部署Servlet和context资源
xmlversion=”1。
0"encoding=”UTF—8”?
〉
xsi="http:
//www.w3。
org/2001/XMLSchema-instance”xmlns=”http:
//java。
xsi:
schemaLocation="http:
//java。
http:
//java。
id=”WebApp_ID"version=”3.0"〉
SimpleBookManager〈/display—name〉
〈welcome—file>index。
htm
〈welcome-file〉index.jsp
〈welcome-file>default.htm〈/welcome-file>
〈welcome-file>default。
jsp〈/welcome-file>
〈/welcome-file—list〉
〈res—ref—name>databasePool
〈res-type>javax.sql.DataSource〈/res-type>
〈res-auth〉Container〈/res-auth〉
〈/resource—ref>
bookQuery
control。
BookQueryServlet〈/servlet—class>
〈/servlet〉
〈servlet-name〉bookQuery〈/servlet—name〉
〈/servlet—mapping〉
〈servlet〉
〈servlet-class>control。
BookInsertServlet〈/servlet—class〉
〈/servlet>
〈servlet-mapping>
〈servlet-name>bookInsert〈/servlet—name>
〈url-pattern>/bookinsert.do
〈/servlet—mapping>
〈/web—app>
4.测试与结果
首页
查询操作
当数据库中有这个图书的编号时
当数据库中没有这个图书的编号时
插入操作
查询刚才插入的书,是否已经保存到数据库中
四、感想和总结
这次实验,给自己一个机会系统的复习下自己以前学习的知识,加深对MVC框架的理解,以及对数据库的操作,再者就是Tomcat环境下的数据库链接池的使用,如何配置使用等,还有在试验中遇到了字符编码插入数据库时乱码的问题,在扩展了自己对字符编码乱码的处理。
总的来说,是学习到了一些东西。