网上图书销售系统 毕业论文 下载本文

错信息;如果编译成功,则所转换产生的Servlet代码被编译,然后该Servlet被JSP引擎加载到内存中。此时JSP引擎还请求了jspInit()方法的执行,并对此Servlet初始化。JspInit()方法在Servlet的生命周期中只被请求一次,然后将被调用来处理客户端的请求和回复操作。对于所有随后对该JSP文件的请求,服务器将检查该JSP文件自最后一次被存取后是否经过修改。如果没有修改,则将请求交还给还在内存中的Servlet的jspService()方法,执行回复操作。由于Servlet始终驻于内存,所以响应是非常快的。Jsp页面在第一次访问时由于要转化和编译,运行速度较慢,但是当第二次访问该页时,由于文件已经被编译成字节码文件了,所以速度非常得快。

4.1.3 JSP页面的组成

JSP页面看上去像标准的HTML和XML页面,并附带有JSP引擎能够处理和解析执行的代码与组件。通常,JSP代码和组件用于创建在最终页面上显示的文本。通常来说,JSP页面包括模板元素,指令元素,动作元素,Scritptlets,声明,表达式和JSP内建对象。

4.1.4 Java Bean技术介绍

Java Bean技术是一种基于Java的组件技术,Java Bean组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据的提取,以及封装事务逻辑等,可以很好的实现业务逻辑和前台程序的分离使得系统具有更好的健壮性和灵活性,同时也是解决代码重用问题的一种策略。

以前的组件无法实现真正的代码重用,其主要原因就是它们对于处理平台的依赖和对开发语言的依赖过重。由于Java语言在这些方面所具有的特点和优势,使得基于它的软件Java Bean组件技术倍受人们的关注。它的任务就是:一次编写,可以在任何地方执行,

可以在任何地方重用。Java Bean组件可以在任何地方冲用包括了可以在应用程序、其他组件、文档、Web站点和应用程序构造器工具等多种方案中再利用。

为了创建和使用Java软件组件,Java Bean被实现为一种独立于平台和结构的应用程序接口,它的实现可以忽略内部的结构及细节问题,只需要定义其外部的特征及对外功能就行。其中,属性、方法和事件三种接口可以独立对外进行开发。

JavaBean的实质就是一个.class文件,也可以成为类文件。Java Bean以binary格式保存,可以保护Java源代码不容易被他人抄袭[7]。

4.1.5 JSP 的运行环境

要运行JSP(注意,不是浏览JSP页面),需要有支持Jsp的服务器。这里分2种情况:一种是自身就支持JSP的服务器,如Jrun,Weblogic,JSWDK等;而另一种则是在不支持JSP的服务器上安装JSP引擎的插件,如在IIS,Apache等服务器上安装WebSphere,Tomcat,Resin等插件。其中主流服务器是Weblogic和tomcat.

Weblogic是一款功能强大的服务器软件,配置比较简单,而且Jsp的扩展功能较多,附带了数据库的JDBC驱动程序。,支持JHTML(一种与Jsp十分相似的技术),是目前市场占有率最高的服务器。不过,Weblogic的运行情况不太稳定,使用它调试Jsp文件,

16

出现语法错误或者数据库连接错误时,Weblogic就有可能崩溃。

Tomcat服务器是Apache Group Jakarta小组开发的一个免费服务器软件,适合于嵌入Apache中使用,而且,它的源代码可以免费获得,你可以自由地对它进行扩充。访问的地址 http://jakarta. apache.org/tomacat/index.html, Tomcat服务器的兼容性很好,如WebLogic服务器采用其为Web服务器引擎,Jbuilder将其作为标准的测试服务器,Sun公司也将其作为JSP技术应用的示例服务器。不足之处是它的配置比较麻烦,对系统硬件要求较高,而且有一些安全性的问题没有解决。但是Tomcat服务器有众多大软件公司的支持,而且服务器的性能稳定,其发展前景很好[9]。

4.2 详细设计及说明

Bean的编写,例如:数据库连接Bean的编写,字符处理Bean的编写等等这些类这里就不详细说明了,具体见代码。这里以管理用户和管理订单的类简要进行说明。

4.2.1管理用户的Bean

为了使用上的方便,我把对用户的管理,包括用户的添加、删除、修改、查询等集合成一个管理类,即op_user类。图4.2为该类的类图,其中只是关键的几个方法:

Op_user User:user Username:username Add():Boolean Delete():boolean Get_alluser():boolean getGbk():String setusername():void update():boolean Message:String Page:int pageCount:int pageSize:int recordCount:long userid:long userlist:Vector request:HttpServletRequest

图4.2管理用户op_user类的类图

有类图可以看出该类具有以下属性:

private user user = new user(); //新的用户对象

private javax.servlet.http.HttpServletRequest request; //建立页面请求

private Vector userlist; //显示用户列表向量数组 private int page = 1; //显示的页码 private int pageSize=8; //每页显示的图书数 private int pageCount =0; //页面总数

private long recordCount =0; //查询的记录总数 private String message = “”; //出错信息提示

private String username = “”; //注册后返回的用户名 private long userid = 0; //注册后返回的用户ID

17

4.2.2管理订单的Bean

当用户选择图书后单击[购买]按钮时,选定的图书就被放入购物车中,这是系统并没有把数据提交到数据库,而是保存在Session中,只有用户进入购物车页面单击[提交购物车]按钮时才把数据作为订单提交到数据库中。

我把实现上述逻辑及对订单和订单列表的管理放在一个类中,即:OP_buy。图4.3为该类的类图。

Op_buy Addnew();Boolean Delete():Boolean All_price:float Booknumber:int Request:HttpServletRequest Session:Httpseeeion Sqlflag:boolean delShoper():Boolean getAllorder():Vector getGbk():String getEmpty():Boolean getisLogin():Boolean getOrder():Boolean op_buy():void payout():Boolean update():boolean

图4.3管理订单op_buy类的类图

上图中Addnew()方法是向购物车中添加一条新的购买纪录,首先从页面获得请求对象,从中获取图书编号等参数,判断购买数量是否大于库存量,如果是,则设置标志isEmpty为false,本次购买将不成功。如果不是,则判断用户是不是第一次购买,如果是第一次购买,则直接在列表中添加一条新记录,如果不是第一次购书,则判断用户先前是不是购买过该书,如果是 则把购买数量增加,否则添加新记录。

4.3客户界面设计 4.3.1界面头、界面尾设计

为了提高代码的重用性,我把客户界面部分相同的头和尾做成两个模块,分别命名为 head.inc 和tail.inc,这两个文件都是纯 HTML代码,在头和尾引入下面的两句代码方可;

<%@include file=”/bookshop/inc/head.inc”%> <%@include file=”/bookshop/inc/tail.inc”%>

18

4.3.2用户登陆模块设计

为了检测用户是否是书店的合法用户,需要用户输入用户名和密码来核对用户的合法性,用户登陆模块就是完成这一功能。该模块需要用到Login.java这个Bean。界面如图4.6

图4.4用户登陆界面

4.3.3在线购书功能模块设计

在该模块用户可以看见现有的图书,用户可以查找图书(可分类查询,也可以按关键字查询),用户可以购买图书(把书放进购物车),也可以查看图书的详细资料,还可以转到其他模块,如查看购物车,查看订单信息等。考虑到其他页面也用到导航条和左边的图书分类和图书查询部分,因此把这两部分也设计成两个公用模块:sub.inc和left.inc,在其他页面中只需引入即可。

4.3.4我的购物车功能模块设计

在“我的购物车”这个模块里,用户可以修改购买数量,可以修改已经选购的图书,可以提交购物车(在提交时可以简单附言说明),可以清空购物车,还可以继续购书,或者查询图书,或者转到其他功能模块。

买书的第一步便是用户登录,现在购书网站都要求已经注册过的用户才能购买书籍,这样便于网站管理。CheckLogin()就是用来检验用户的合法性的: function checklogin() {

if (document.payout.userid.value==\ {

alert(\你还没有登录,请登录后再提交购物清单。\ return false; }

19

证明是合法用户后,就必须给这个用户一个购物车,用户每次选中一本书,点击“放入购物车”,就必须添加一个订购单。这就相当于把用户要买的书放入购物车里,addnew()就是用来实现这些的,

4.3.5订单信息功能模块设计

在该功能模块用户可以看见自己已经提交的所有订单,可以查看订单的详细情况。并设计以弹出窗口的形式显示订单信息,在弹出的窗口中可以付款。

4.4管理界面设计 4.4.1界面头、界面尾设计

同客户界面一样,为了提高代码的重用性,把相同的头和尾设计成两个公用模块,分别引入即可[1]:

< %@include file=”/bookshop/inc/admin_head.inc”%> <%@include file=”/bookshop/inc/admin_tail.inc”%> 两个文件都是纯HTML代码,再次就不多讲。

4.4.2管理员登陆功能模块设计

为了检测用户是否是管理员,所以需要对登陆用户进行检测。该模块需要用到Login.java这个Bean,需要设计一个表单让用户输入用户名和密码。如图4.7

图4.5管理员登陆界面

4.4.3现有图书管理功能模块设计

在该功能模块管理员可以查看详细资料,可以修改图书,可以删除图书如图4.6所示。,部分代码如下。

20