javaWeb课程设计图书管理系统.docx
《javaWeb课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《javaWeb课程设计图书管理系统.docx(14页珍藏版)》请在冰豆网上搜索。
javaWeb课程设计图书管理系统
1系统设计关键技术及开发工具
收发室邮件管理系统主要采用JSP,Servlet、Struts、AJAX,CSS/XML,javascript等相关技术、采用oracle数据库、ApacheTomcat5.5作为web服务器、开发工具为Myeclispe集成软件开发环境。
整体设计遵循软件工程的方法,经过需求分析、系统设计、详细设计、文档和代码的编制、模块测试和系统实现这几个阶段,下面就对这几种技术和方法做一个概述。
1.1Struts技术
Web应用分为交互层(InteractionLayer),表现数据,收集数据,也就是视图层,接受请求,通过处理层完成相应的响应。
(V,C)和处理层(ProcessingLayer),完成数据的处理,也就是业务层(M)。
MVC的设计模式(应用观察者模式的框架模式)表现为M层:
Model(Businessprocesslayer),模型层,操作数据的业务处理层,并独立于表现层(Independentofpresentation)。
V层:
View(Presentationlayer),视图层,通过客户端数据类型显示数据,并回显模型层的执行结果。
C层:
Controller(Controllayer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图。
正如上文所讲,MVC框架的实现模型有两种:
模型一(Page-centric):
JSP+JavaBean,JSP既充当控制,又充当视图,以页面为核心,JSP使用jsp:
useBean,它不能够实现不同的页面,显示不同的数据,需要借助于中间类来调用JavaBean的方法才能实现。
模型二(Servlet-centric):
JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC的实现模式。
Struts框架是使用MVC的实现模式二来实现的,也就是以控制器为核心。
它提供了一些组件使用MVC开发应用程序:
Model:
Struts没有提供model类。
这个商业逻辑必须由Web应用程序的开发者以JavaBean或EJB的形式提供
View:
Struts提供了actionform创建formbean,用于在controller和view间传输数据。
此外,Struts提供了自定义JSP标签库,辅助开发者用JSP创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中。
Controller:
Struts提供了一个核心的控制器ActionServlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器Action,自定义Action需要符合Struts的自定义Action规范,还需要在struts-config.xml的特定配置文件中进行配置,接收JSP输入字段形成Actionform,然后调用一个Action控制器。
Action控制器中提供了model的逻辑接口。
[1]
1.2Servlet技术
servlet是使用JavaServlet应用程序设计接口(API)及相关类和方法的Java程序。
除了JavaServletAPI,Servlet还可以使用用以扩展和添加到API的Java类软件包。
Servlet在启用Java的Web服务器上或应用服务器上运行并扩展了该服务器的能力。
Javaservlet对于Web服务器就好象Javaapplet对于Web浏览器。
Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行。
JavaServletAPI定义了一个servlet和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性。
Servlet通过创建一个框架来扩展服务器的能力,以提供在Web上进行请求和响应服务。
当客户机发送请求至服务器时,服务器可以将请求信息发送给Servlet,并让Servlet建立起服务器返回给客户机的响应。
当启动Web服务器或客户机第一次请求服务时,可以自动装入Servlet。
装入后,Servlet继续运行直到其它客户机发出请求。
Servlet的功能涉及范围很广。
例如,Servlet可完成如下功能:
(1)创建并返回一个包含基于客户请求性质的动态内容的完整的HTML页面。
(2)创建可嵌入到现有HTML页面中的一部分HTML页面(HTML片段)。
(3)与其它服务器资源(包括数据库和基于Java的应用程序)进行通信。
(4)用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。
例如,Servlet可以是多参与者的游戏服务器。
(5)当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至applet的新连接,并将该连
接保持在打开状态。
当允许客户机和服务器简单、高效地执行会话的情况下,applet也可以启动客户浏览器和服务器之间的连接。
可以通过定制协议或标准(如IIOP)进行通信。
(6)对特殊的处理采用MIME类型过滤数据,例如图像转换和服务器端包括(SSI)。
(7)将定制的处理提供给所有服务器的标准例行程序。
例如,Servlet可以修改如何认证用户。
(8)网站流程的控制。
例如,用户登陆[1]
1.3开发工具MyEclispe简介
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。
MyEclispe是基于Eclispe的J2EE应用程序开发工具,此系统就是采用MyEclispe6.0来开发的,它集中了开源和商业软件的开发支持的大多数框架,方便易用,功能强大,它支持开发基于Spring、Hibernate、Struts、JSF、JPA、EJB、WebService等技术的项目。
[6]
2系统需求分析
2.1系统整体分析
在当今高速发展的信息时代,计算机技术已经被应用于社会的各个方面,取代了很多人工的操作,这样既提高了效率,又节省了劳动力。
学校等机关图书管理也应该跟上科技的发展,运用计算机进行自动化的管理。
本课题在研究了学校图书管理运营模式之后,从学校的实际需求出发,采用当前较为流行的B/S结构和JSP动态网页技术,基于Oracle数据库,设计并实现一个功能完善的小型图书管理系统。
本系统主要包括图书管理,借还书管理和读者管理三大模块。
本文是该系统需求文档,对系统功能结构进行分析,并对数据流程进行了图解,以及对这次设计进行了总结。
2.2系统数据分析
本系统共有5张数据表:
2.3数据流图
2.4功能模块的核心代码
网站后台开发目录结构:
用户登陆的核心代码:
packagecom.servlet;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map;
importjava.util.Set;
importjavax.servlet.ServletConfig;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcom.connectDb;
importcom.toChinese;
publicclassservletGoextendsHttpServlet{
publicvoidinit(ServletConfigconfig)throwsServletException{
super.init();
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException{
connectDbconD=newconnectDb();
toChineset=newtoChinese();
ResultSetrs1=conD.con("selectusernamefromreader");
ResultSetrs2=conD.con("selectpasswordfromreader");
response.setContentType("text/html;charset=gb2312");
PrintWriterout=response.getWriter();
Stringstring1=t.codeToString(request.getParameter("username"));
Stringstring2=t.codeToString(request.getParameter("userpassword"));
Mapmap=newHashMap();
try{
while(rs1.next()&&rs2.next()){
map.put(rs1.getString
(1),rs2.getString
(1));
}
}catch(SQLExceptione){
e.printStackTrace();
}
SetkeySet=map.keySet();
Iteratoriterator=keySet.iterator();
while(iterator.hasNext()){
if(!
(iterator.next().equals(string1))){
iterator.remove();
}
}
if(keySet.isEmpty()){
out.print("用户名或密码错误,点此重新登陆");
}
else{
Stringstring3=map.get(string1);
if(!
string3.equals(string2))
out.print("用户名或密码错误,点此重新登陆");
else{
Object[]b=keySet.toArray();
Stringstr=b[0].toString();
response.sendRedirect("../library.jsp?
username="+str);
System.out.print(str);
}
}
}
}
使用jsp验证用户名是否重名,用户是否已经被注册:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="com.toChinese"%>
<%@pageimport="java.sql.*"%>
<%@pageimport="java.util.*"%>
useBeanid="conD"class="com.connectDb"scope="page">
useBean>
useBeanid="qb"class="com.QueryBean"scope="page">
useBean>
<%
ResultSetrs=conD.con("selectusernamefromreader");
Listlist=newArrayList();
while(rs.next()){
list.add(rs.getString
(1));
}
toChineset=newtoChinese();
Stringstring1=t.codeToString(request.getParameter("username"));
Stringstring2=t.codeToString(request.getParameter("userpassword"));
qb.setConnection("oracle.jdbc.driver.OracleDriver",
"jdbc:
oracle:
thin:
@127.0.0.1:
1521:
orcl","yexiang","ye123");
StringstringSqlString="insertintoreadervalues(reader_id.nextval,'"+string1+"','"+string2+"')";
qb.setQuerystatement(stringSqlString);
//设置SQL语句
Iteratoriterator=list.iterator();
while(iterator.hasNext()){
if(!
iterator.next().equals(string1))
iterator.remove();
}
if(list.isEmpty()){
qb.insertRecord();//插入数据
out.print("注册成功");
}
else
{out.print("注册失败,用户名已注册");}
%>
接收新用户注册
您注册的用户名是:
<%=t.codeToString(request.getParameter("username"))%>
Struts的使用与配置
Web.xml
xmlversion="1.0"encoding="UTF-8"?
>
xmlns="
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
ThisisthedescriptionofmyJ2EEcomponent
ThisisthedisplaynameofmyJ2EEcomponent
servletGo
com.servlet.servletGo
ThisisthedescriptionofmyJ2EEcomponent
ThisisthedisplaynameofmyJ2EEcomponent
booksServlet
com.servlet.booksServlet
ThisisthedescriptionofmyJ2EEcomponent
ThisisthedisplaynameofmyJ2EEcomponent
serachServlet
com.servlet.serachServlet
servletGo
/servlet/servletGo
booksServlet
/servlet/booksServlet
serachServlet
/servlet/serachServlet
enter.html
redisp
com.bean.ReDispatcherFilter
includeServlets
servletGo,booksServlet,serachServlet
redisp
/*
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
Struts.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"
"http:
//struts.apache.org/dtds/struts-2.3.dtd">
/main/frame_c.jsp
--Addpackageshere-->
3系统界面展示
3.1页面
登陆:
注册:
主界面:
最新入库
搜索书籍
我要借书
4设计总结
在需求分析部分,我们认真阅读了图书管理系统的功能简述,在此基础上把整个系统按处理功能分解成若干模块,进行数据分解,画出了总系统和各模块的数据流图、数据项表、数据结构表、数据流表等。
我们得到的需求分析的主要结果,基本反映了用户的需求。
在概念结构设计时,我们采用自底向上的设计方法。
将数据流程图中的子图抽象为E-R图,然后再合并各个分E-R图。
设计出的整体概念结构内部具有一致性,不但能满足需求分析阶段确定的所有要求,而且能准确反映原来的每个子视图的结构。
并且给出了各个实体的描述,对实体和关系进行了调整,消除了冗余实体和冗余关系。
在逻辑结构设计时,我们选择oracle所支持的数据模型,适于描述和表达概念结构的。
我们遵循一定原则进行实体、属性和联系的转换。
优化了关系数据模型,根据具体的应用确定范式和关系模式的分解与合并。
确定了外模式和数据视图。
在使用servlet时遇到了许多参数传输错误,最后发现大多数都是路径问题
解决完就没问题了,操作数据库时sql语句要符合规范,明白怎么使用参数来查寻。
在使用struts2时配置与servlet冲突,struts将所有请求都拦截了,经过网上XX后再struts配置前加了servlet的配置就没问题了。
这次实验我熟悉了很多新学到了技术,学习到了解决问题的方法,收获颇多。