admin 管理员组文章数量: 1087135
2024年3月30日发(作者:complementary翻译)
计算机与通信学院
本科生毕业设计说明书
仓库管理系统
* 者: ***
学 号: ********
专 业: 计算机科学与技术
班 级: 05级软件工程(2)
指导教师: ***
答辩时间: 2009年6月
仓库管理系统
Storage Management System
曹亚磊(Cao Yalei)
05240207
前 言
随着科学技术的不断发展,我们的社会已经进入了一个信息化的社会,人们每天都要接
收大量的信息和处理大量的数据,仅靠传统的纸和笔已不能适应这个时代的要求,人们必
须采取新的手段,于是信息技术进入我们的生活,计算机不再是简单的计算工具,它已成为
我们生活中处理大量信息的不可或缺的手段。在当今产业竞争越来越激烈的信息时代,企
业经营除了降低成本,提高品质外,更需要以先进的管理理念来整合企业内部与外部资源。
仓库管理系统正是在这个背景下产生的。
本系统正是针对仓库部门的货物信息管理,通过对仓库基本信息﹑出入库信息等的系统
界面设计,将会给管理者带来极大的方便,具有手工管理无法比拟的优点,例如检索速度
快、查找方便、可靠性高、存储量大、使用时间长等。用计算机管理取代传统的手工操作,
大大减少了管理人员的工作量,提高了工作效率,为获取详细的管理信息提供了保证,方
便各类人员的查询和信息保证,增强了管理工作的时效和人员主动性。
仓库管理主要摆阔两方面:一是仓库的基本信息,涉及人员信息、库房信息、供货商信
息、客户信息;另一项是仓库业务管理,包括入库管理、在库管理、出库管理、报表管理。
在本系统中侧重实现仓库的基本信息管理。
摘 要
仓库管理系统是为了实现企业产品管理的系统化、规范化和自动化,从而提高企业管
理效率而设计的。它完全取代了原来一直用人工管理的工作方式,避免了由于管理人员的
工作疏忽以及管理质量问题所造成的各种错误,为及时、准确、高效的完成仓库管理提供
了强有力的工具和管理手段。仓库管理系统是一个中小型数据库管理系统,它界面美观、
操作简单、安全性高,基本满足了仓库管理的要求。整个系统由基本信息、单据中心、查
询统计、报表打印、维护设置、帮助等模块组成。
本系统是在以MySql作为后台数据库,以J2EE为编程语言来开发的。仓库管理系统在
运行阶段,效果好,数据准确性高,提高了工作效率,同时也实现了仓库管理计算机化。
关键词: 仓库; 管理系统; 数据库
Abstract
The administrative system of the warehouse is designed for realizing the systematization,
standardization and automization of enterprise's products management and improving efficiency
of enterprises management. It completely replaces the working way of artificial management
originally, prevents from various kinds of mistakes because of administrative staff neglect and the
quality problem of management and offeres powerful tool and management way to complet
storehouse management for prompt , accurate , high-efficient . The administrative system of the
warehouse is a medium and small-scale database management system,it has not only beautiful
interface, but also the high security and the simply operation , and meet the demand for
storehouse management basically. Whole system is made up by basic information, document in
the center, inquire statistics , report form type ,set up to maintain and module of helping etc.
The Warehouse administrative system is designed with regarding MySql as the backstage
database and regarding J2EE as programming language . The administrative system is effectual,
the high data accuracy during the course of operating , improves working efficiency and realizes
computerization for storehouse management at the same time .
Key word:
The Warehouse ; Administrative System; The Database
目 录
摘 要 .................................................................................................................................................. I
ABSTRACT ........................................................................................................................................ II
第1章 绪论 ........................................................................................................................................ 1
第2章 需求分析 ................................................................................................................................ 2
2.1仓库管理系统概述 .......................................................................................................................................... 2
2.2系统流程图 ...................................................................................................................................................... 2
2.3数据流程图 ...................................................................................................................................................... 3
2.4仓库管理系统的角色定义 .............................................................................................................................. 5
第3章 总体设计 ................................................................................................................................ 6
3.1总体用例图 ...................................................................................................................................................... 6
3.2用例说明 .......................................................................................................................................................... 6
3.2.1用户从浏览器登录 ................................................................................................................................... 7
2.2.2供货商信息查询用例概述 ....................................................................................................................... 8
2.2.3供货商信息修改用例概述 ....................................................................................................................... 9
2.2.4 供货商信息添加用例概述 .................................................................................................................... 10
3.3功能模块图 .................................................................................................................................................... 11
第4章 详细设计 .............................................................................................................................. 14
4.1ER图 ............................................................................................................................................................... 14
4.2数据库设计 .................................................................................................................................................... 15
4.2.1数据库的逻辑设计 ..................................................................................................................................... 16
4.3运行环境 ........................................................................................................................................................ 20
第5章 编码 ...................................................................................................................................... 21
5.1登陆的实现 .................................................................................................................................................... 21
5.1.1登陆action .............................................................................................................................................. 21
5.1.2登陆过滤器 ............................................................................................................................................. 22
5.1.3登陆DAO ............................................................................................................................................... 23
5.2供货商的实现 ................................................................................................................................................ 23
5.2.1供货商查询Action ................................................................................................................................. 23
5.2.2供货商修改Action ................................................................................................................................. 25
5.2.2供货商添加Action ................................................................................................................................. 25
5.2.3供货商DAO ........................................................................................................................................... 26
第6章 测试 ...................................................................................................................................... 30
6.1登陆测试方案 ................................................................................................................................................ 30
6.2
数据录入测试 ............................................................................................................................................... 30
6.3
查询测试 ....................................................................................................................................................... 30
6.4测试结论 ........................................................................................................................................................ 30
第7章 使用说明 .............................................................................................................................. 31
7.1
系统功能简介 ............................................................................................................................................... 31
7.2
运行环境简介 ............................................................................................................................................... 31
7.3
系统运行与操作指南 ................................................................................................................................... 32
7.4操作演示 ........................................................................................................................................................ 32
7.5特色介绍 ........................................................................................................................................................ 34
第8章 总结 ...................................................................................................................................... 35
参考文献 ............................................................................................................................................ 36
致 谢 .............................................................................................................................................. 37
翻译资料原文 .................................................................................................................................... 38
翻译资料译文 .................................................................................................................................... 44
第1章 绪论
仓库管理系统是现代仓储企业进行货物管理和处理的业务操作系统。它可以实现本地一
个或几个仓库的精细化管理,也可实现制造企业、物流企业、连锁业在全国范围内、异地多
点仓库的管理;它可以对货物存储和出货等进行动态安排,可以对仓储作业流程的全过程进
行电子化操作;可以与客服中心建立数据接口使客户通过互联网实现远程货物管理,可以与
企业的ERP系统实现无缝连接。
在现代企业中,仓库管理是一项繁琐复杂的工作,每天要处理大量的单据数据。为及时
结清每笔业务,盘点库存和货物流动情况,保证企业生产用料以及货物安全,库管人员要花
费大量人力物力和时间来作数据记录统计工作。
众所周知,仓库管理是一种既麻烦又单调的工作,每天都是重复记录一些货物的存入与
取出,而且货物的种类繁多,存取有很大的随机性,这样为工作人员带来了很大的不便,在
操作过程中,由于人为的计算出错率很高,一旦出错改正也很困难,这样简单繁重的工作要
很多人来做,为经营者增加了很多成本。所以开发一个可行的仓库管理系统是十分必要的。
本系统以MySQL作为后台数据库,以java语言来开发的,不仅实现了仓库管理的自动化,
同时也提高了工作效率。本系统由以下几个模块组成:基本信息管理、入库管理、在库管理、
出库管理、报表管理。
1
第2章 需求分析
2.1仓库管理系统概述
本系统是为物流管理而设计的高效管理系统,系统功能强大,同时操作又比较简单,而
管理人员大多受到过系统的培训,并能够操作电脑,所以只要花很少的时间,就能够让他
们熟悉本系统。
系统开发的总体任务是实现各种信息的系统化、规范化和自动化。系统功能分析是在系
统开发的总体任务的基础上完成。本仓库管理系统需要完成功能主要有:
●仓库管理各种信息的输入,包括货物、供应商、客户、仓库信息的输入等。
●仓库管理各种信息的查询、统计、修改和维护,包括货物、单据查询,货物出入、职
员操作统计,各种信息的修改和维护等。
●打印报表的生成。
●在货物管理中加入最高储备和最低储备字段,对仓库中的产品实现监控和报警。
●操作日志的管理。
●仓
出库单
库管
出库单打印程序
库存查询程序
入库单
核对货物清单
程序
报损计划表
库存备份程序
库存分析程序
库存数
据库
查询库存
信息
库存备份
理系统的使用帮助。
2.2系统流程图
2
图2-2系统流程图
2.3数据流程图
数据流图是描述系统的逻辑模型的,图中没有任何具体的物理元素,只是描述信息在
系统中流动和处理的情况,它比口头与文字的描述更直观地显示出来系统中数据的使用。
数据流图简称DFD图,数据流图有四种成分:源点或终点、处理、数据存储表和数据
流。图中没有任何具体的物理元素,只是描述信息在系统中的流动和处理情况,即使不是
专业的计算机技术人员也容易理解,是极好的理解工具。它能精确的描述系统的逻辑模型,
描述数据在MIS中有输入经过存储、加工处理最后输出的全过程,是设计者和用户交流的
很好的工具。
仔细分析调查有关仓库管理信息需求的基础上,得到如图4-1所示的本系统所处理的
数据流程。
3
图2-3 仓库管理系统数据流程图
通过对企业仓库管理的内容和数据流程分析,设计数据项和数据结构如下:
●货物信息,包括的数据项有编号、货物名称、货物类别、货物规格、计量单位、最
高限量、最低限量、备注等。
●仓库信息,包括的数据项有编号、仓库名称、仓库地点、保管员编号、备注等。
●库存状况信息,包括的数据项有编号、货物编号、库存数量、仓库编号等。
●入库单信息,包括的数据项有编号、货物编号、经办人编号、入库时间、入库单价、
入库数量、供应商编号、仓库编号、定单状况、其它金额、备注等。
●出库单信息,包括的数据项有编号、货物编号、经办人编号、出库时间、出库单价、
出库数量、客户编号、仓库编号、定单状况、其它金额、备注等。
●进行月盘点信息,包括的数据项有编号、仓库编号、盘点时间、经办人编号、盘点
数据等。
●系统日志信息,包括的数据项有用户名、操作时间、操作内容等。
●用户管理信息,包括的数据项有用户名、用户密码、用户权限等。
另外,还有借入单、借出单、报损单、调拨单信息等。它们与入库单、出库单信息基
本类似,这里不再一一例举。
4
2.4仓库管理系统的角色定义
本系统角色包括两种,仓管部管理人员和管理部主管,其中,管理部主管拥有整个系
统的最高权限。
仓管部管理人员:
负责仓库的出入库管理,可以根据流向单实现出/入库操作。具体权限有:
●库存信息管理
●库检信息维护
●入库单信息维护
●出库单信息维护
●报表信息管理
●进行密码修改、清除表信息等系统设置
●客户、供应商、库房等基本信息的查询浏览等
仓管部主管:
●负责整个山口仓管部门的日常运作和管理工作,主要包括:
部门信息维护
人员信息管理
●审批
●报表信息管理
●进行密码修改、备份数据库等系统设置
5
第3章 总体设计
3.1总体用例图
用例图是一个系统建模的启始点,可以使用用例图对将要开发系统的实际工作流程进
行业务建模,从业务模型的基础上过度到系统建模的开始,可以通过用例图来搜集用户的
需求,明确和系统相关的用户和其他系统,同时确定系统将会提供什么功能,以及各个功
能间的关系。
图3-1 总体用例图
3.2用例说明
根据上述用例图,对登陆和人员信息管理模块做了如下用例说明:
6
3.2.1用户从浏览器登录
用例概述
用例名称 用户登陆
主题领域
用例定义 用户登录到系统,获得相应的界面和使用权限
角色 仓管员或主管
业务触发用户准备开始使用系统进行业务处理或系统管理
事件
前置条件 系统中已为该用户建立系统用户,并分配了相应权限
结束条件 成功条件
用户登录系统,并获得相应权限
失败条件
1)系统中没有该用户;
2)用户名、密码错误
相关用例
输入概述 用户名、密码、角色
输出概述 与用户权限相应的界面
使用性备本用例使用频繁
注
用例备注
主事件流
步骤
1.
2.
3.
4.
角色/系统
角色
系统
角色
系统
描述
启动登录程序
显示登录界面;
提示输入用户标识和保密字
数据项
备注
输入用户标识和保密字,登录用户名,密码,角色
系统
验证用户是否合法用户、保密
字是否正确;返回用户相应的
界面、菜单
如果不是合法用户、或
保密字不正确转到A1。
5.
分支事件流
编
号
A1
主事件流
步骤号
4
角色/
系统
条件 描述 数据项 转去主
事件流
步骤号
2
备注
系统 不是合法用户,用户
名、密码错误,
用户名和密码与角
色不对应
返回登录失
败信息
登录失败信
息
7
2.2.2供货商信息查询用例概述
用例名称 供货商信息查询
主题领域 供货商信息查询用例包
用例定义 供货商信息查询
角色 仓库管理人员
业务触发事件 进行供货商信息查询
前置条件 有需要查询的供货商信息记录
结束条件 成功条件
查询到需要查询的供货商信息
失败条件
未查询到需要查询的供货商信息
相关用例
输入概述 所需查询的供货商信息
输出概述 查询结果
使用性备注
用例备注
主事件流
步骤
6.
7.
8.
9.
角色/系统
角色
系统
角色
系统
描述
进入查询界面
显示查询界面
查询是否成功
查询成功
数据项
如果查询成功转到A1
如果查询不成功转到A2
备注
输入所需查询的供货商信息
分支事件流
编
号
A1
A2
主事件流
步骤号
4
4
角色/
系统
条件 描述 数据项 转去主
事件流
步骤号
2
2
备注
系统 完成供货商信息查
询
系统 没有完成供货商信
息查询
返回成功信
息
返回失败信
息
查询的供货
商信息
查询失败的
信息提示
8
2.2.3供货商信息修改用例概述
用例名称 供货商信息修改
主题领域 供货商信息修改用例包
用例定义 供货商信息修改
角色 仓库管理人员
业务触发事件 进行供货商信息修改
前置条件 有需要修改的供货商信息记录
结束条件 成功条件
查询到需要修改的供货商信息
失败条件
未查询到需要修改的供货商信息
相关用例
输入概述 所需修改的供货商信息
输出概述 修改结果
使用性备注
用例备注
主事件流
步骤
10.
11.
12.
13.
角色/系统
角色
系统
角色
系统
描述
进入修改界面
显示修改界面
修改是否成功
修改成功
数据项
如果修改成功转到A1
如果修改不成功转到A2
备注
输入所需修改的供货商信息
分支事件流
编
号
A1
A2
主事件流
步骤号
4
4
角色/
系统
条件 描述 数据项 转去主
事件流
步骤号
2
2
备注
系统 完成供货商信息修
改
系统 没有完成供货商信
息修改
返回成功信
息
返回失败信
息
修改的供货
商信息
修改失败的
信息提示
9
2.2.4 供货商信息添加用例概述
用例名称 供货商信息添加
主题领域 供货商信息添加用例包
用例定义 供货商信息
角色 仓库管理人员
业务触发事件 进行供货商信息添加
前置条件 有需要添加的供货商信息记录
结束条件 成功条件
查询到需要添加的供货商信息
失败条件
未查询到需要添加的供货商信息
相关用例
输入概述 所需添加的供货商信息
输出概述 添加结果
使用性备注
用例备注
主事件流
步骤
14.
15.
16.
17.
角色/系统
角色
系统
角色
系统
描述
进入添加界面
显示添加界面
添加是否成功
添加成功
数据项
如果添加成功转到A1
如果添加不成功转到A2
备注
输入所需添加的供货商信息
分支事件流
编
号
A1
A2
主事件流
步骤号
4
4
角色/
系统
条件 描述 数据项 转去主
事件流
步骤号
2
2
备注
系统 完成供货商信息添
加
系统 没有完成供货商信
息添加
返回成功信
息
返回失败信
息
添加的供货
商信息
添加失败的
信息提示
10
3.3功能模块图
功能模块:山口电脑仓库管理系统包括仓管部信息管理、业务管理、系统维护等几个功
能模块。
山口电脑仓库管理系统
仓
管
部
信
息
管
理
仓
管
部
业
务
管
理
系
统
维
护
图3-3 总功能模块图
1、
仓管部信息管理模块:为仓管部主管提供对仓管部信息的管理维护的功能。
11
仓管部信息管理
基
本
信
息
管
理
在库信息管理
库
存
信
息
维
护
库
检
信
息
维
护
出
库
信
息
维
护
入
库
信
息
维
护
报
表
信
息
管
理
系
统
设
置
客
户
信
息
维
护
供
货
商
信
息
维
护
仓
库
管
房
人
信
息
护
员
信
维
息
护
维
修
改
密
码
短
线
货
品
信
息
维
护
部
件
、
礼
品
信
息
维
护
成
品
品
信
息
维
护
图3-3-1 仓管部模块图
一、仓管部信息管理模块,如图所示,包括以下功能模块:
1. 基本信息管理模块:为管理员提供实现对客户信息、供货商信息、库房信息和仓
管人员信息的管理维护,包括对信息查询、添加、修改和删除等操作。
2. 在库信息管理模块:
a
、
库存信息管理模块:为管理员提供实现对短线货物、货物信息的管理维护,包
括对信息查询、添加、修改和删除等操作
。
b、
库检信息管理模块:为管理员提供实现对产品库检信息、部件库检信息、礼品
库检信息的管理维护,包括对信息查询、添加、修改和删除等操作。
3. 出库信息管理模块:为管理员提供查询、添加、修改和删除出库流向单(包括:
产品出库单、部件出库单、礼品出库单)的操作,其中添加和删除操作后的出库货
检单要交由管理部审核。
4. 入库信息管理模块:为管理员提供查询、添加、修改和删除入库流向单(包括:
部件入库单、产品入库单、礼品入库单)的操作、其中添加和删除操作后的入库货
检单要交由管理部审核。
5. 报表信息管理模块:为管理员提供实现对报表信息的管理维护,包括对报表信息
查询、浏览和上交等操作。
12
6. 系统设置模块:为管理员提供实现对密码修改、清除表信息的功能
管理部信息管理
仓
管
部
人
员
管
理
仓
库
报
表
管
理
仓
库
货
检
信
息
管
理
基
本
信
息
管
理
系
统
设
置
二、管理部信息管理模块,如图所示,包括以下功能模块:
1、仓管部人员管理模块:为管理员提供实现对仓库部门信息的管理维护,包括对部门信息
查询、添加、修改和删除等操作。
2、仓库报表管理模块:为管理员提供实现对报表信息的管理维护,包括对报表的查询、浏
览和删除等操作。
3、仓库货检信息管理模块:为管理员提供实现对货检信息的管理维护,包括对在库货检信
息、入库货检信息和出库货检信息的审核操作。
4、基本信息管理模块:为管理员提供实现对基本信息进行添加、删除、查询和浏览功能、
5、系统设置模块:为管理员提供实现修改密码、备份数据库和恢复数据库的功能
修
改
密
码
备
份
数
据
库
恢
复
数
据
库
、
图3-3-2 管理部模块图
13
第4章 详细设计
4.1
ER图
ER图就是实体关系图,主要完成了对系统中数据部分设计。E-R图为实体-联系图,提
供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。构成E-R图的基本要
素是实体型、属性和联系。以下是系统的整个ER图:
图4-1 ER图
14
4.2数据库设计
数据库设计(Database Design)是指根据用户的需求,在某一具体的数据库管理系统上,
设计数据库的结构和建立数据库的过程。一般,数据库的设计过程大致可分数据库设计为5
个步骤:
需求分析;调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、
数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束
条件等,形成用户需求规约。
概念设计;对用户要求描述的现实世界(可能是一个工厂、一个商场或者一个学校等),
通过对其中住处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映
现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息
储存、查询和加工的要求等。所建立的模型应避开数据库在计算机上的具体实现细节,
用一种抽象的形式表示出来。以扩充的实体—(E-R模型)联系模型方法为例,第一步
先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件
等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图)。第二步
再将前面得到的多个用户的局部视图集成为一个全局视图,即用户要描述的现实世界的
概念数据模型。
逻辑设计;主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适
应于某种特定数据库管理系统所支持的逻辑数据模式。与此同时,可能还需为各种数据
处理应用领域产生相应的逻辑子模式。这一步设计的结果就是所谓“逻辑数据库”。
物理设计;根据特定数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计
算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(包括文
件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径等。这一步设
计的结果就是所谓“物理数据库”。
验证设计;在上述设计的基础上,收集数据并具体建立一个数据库,运行一些典型的应
用任务来验证数据库设计的正确性和合理性。一般,一个大型数据库的设计过程往往需
要经过多次循环反复。当设计的某步发现问题时,可能就需要返回到前面去进行修改。
因此,在做上述数据库设计时就应考虑到今后修改设计的可能性和方便性。
数据库的完整性是指数据的正确性和有效性,是为防止数据库中存在不符合语义规定
的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据库的完整性
包括:实体完整性、参照完整性和用户定义完整性。实体完整性(Entity Integrity) :现
实世界的实体是可区分的,即它们具有某种唯一性标识。相应地,关系模型中主键应作为
唯一性标识。因此实体完整性规则规定基本关系的所有主键(Primary Key)都不能取空值
(NULL)。参照完整性(Referential Integrity):参照完整性维护表与表之间的相关性,
通常用“主键(Primary Key)/外键(Foreign Key)”保证,其中Foreign Key可以取NULL
值,或取其参照表中Primary Key的取值。用户定义的完整性(User_defined Integrity ):
针对某一具体数据的约束条件,由应用环境决定。数据库完整性约束能够防止合法用户使
15
用数据库时向数据库中添加不合语义的数据。
4.2.1
数据库的逻辑设计
仓库管理系统所用的数据库是MySQL,如下是表在数据库的逻辑表示:
字段名
id
Inbill_id
Supplier_id
Depot_id
Number
Sumof_bad
表assembly的结构
注释 类型 长度 是否主键 是否不为空
编号 INTEGER 11 √ √
入库单编号 VARCHAR 20
供货商编号 VARCHAR 20
库房编号 VARCHAR 20
数量
不合格数量
INTEGER
INTEGER
DATE
DATE
char
11
11
11
11
5
√
√
Atcheck_date 在库货检日期
In_date
Employee_id
入库日期
货检员编号
字段名
id
Makebill_id
Depot_id
Check_id
Number
Sumof_bad
Make_date
Check_date
表product的结构
注释 类型 长度 是否主键 是否不为空
编号 INTEGER 11 √ √
组装单编号 VARCHAR 20 √
库房编号 VARCHAR 20
货检编号 VARCHAR 20
数量
不合格数量
组装日期
货检日期
INTEGER
INTEGER
DATE
DATE
11
11
11
11
√
√
字段名
id
Assembly_id
Product_id
表assembly_product的结构
注释 类型 长度 是否主键 是否不为空
编号 INTEGER 11 √ √
部件编号 VARCHAR 20
成品编号 VARCHAR 20
表customer的结构
16
字段名
Customer_id
name
sex
credit
phone
address
remark
注释
客户编号
姓名
性别
信誉度
电话号码
地址
备注
类型 长度 是否主键 是否不为空
VARCHAR 20 √ √
VARCHAR 20
VARCHAR 20
INTEGER 11
VARCHAR
VARCHAR
VARCHAR
20
20
20
字段名
Depot_id
Employee_id
phone
address
remark
表depot的结构
注释 类型 长度
库房编号 VARCHAR 20
责任人编号 VARCHAR 20
电话号码
地址
备注
VARCHAR
VARCHAR
VARCHAR
20
20
20
是否主键 是否不为空
√ √
表employee的结构
字段名 注释 类型 长度 是否主键 是否不为空
Employee_id 人员编号 VARCHAR 20 √ √
Inbill_id 入库单编号 VARCHAR 20
Supplier_id 供货商编号 VARCHAR 20
Depot_id 库房编号 VARCHAR 20
Number
Sumof_bad
数量
不合格数量
INTEGER
INTEGER
DATE
DATE
VARCHAR
11
11
11
11
5
√
√
Atcheck_date 在库货检日期
In_date
Employee_id
入库日期
货检员编号
17
字段名
Supplier_id
name
sex
credit
phone
address
remark
表supplier的结构
注释 类型 长度 是否主键 是否不为空
供货商编号 VARCHAR 20 √ √
姓名 VARCHAR 20 √
性别 VARCHAR 20
信誉度 INTEGER 11
电话号码
地址
备注
VARCHAR
VARCHAR
VARCHAR
20
20
20
字段名
In_id
Depot_id
Refer_date
Wh_id
Check_date
Ch_id
Audit_date
M_id
In_state
表inbill的结构
注释 类型 长度
入库单编号 VARCHAR 20
库房编号 VARCHAR 20
入库日期 DATE 11
提交人编号
货检日期
货检人编号
审核日期
主管编号
入库单状态
VARCHAR
DATE
VARCHAR
DATE
VARCHAR
VARCHAR
20
11
20
11
20
20
是否主键 是否不为空
√ √
√
√
字段名
id
In_id
Assembly_id
Supplier_id
Number
Badnumber
Good_rate
表inlist的结构
注释 类型 长度 是否主键 是否不为空
编号 INTEGER 11 √ √
入库单编号 VARCHAR 20 √
部件编号 VARCHAR 20 √
供货商编号 VARCHAR 20 √
数量
不合格数量
合格率
INTEGER
INTEGER
VARCHAR
11
11
20
18
字段名
Makebill_id
Depot_id
Product_id
Number
表makebill的结构
注释 类型 长度
组装单编号 VARCHAR 20
库房编号 VARCHAR 20
成品编号 VARCHAR 20
数量 INTEGER
DATE
DATE
VARCHAR
11
11
11
20
是否主键 是否不为空
√ √
√
√
√
Atcheck_date 在库货检日期
Make_date
Manager_id
组装日期
主管编号
字段名
Outbill_id
Depot_id
Refer_date
Refer_id
Audit_date
Out_state
Audit_id
Customer_id
表outbill的结构
注释 类型 长度
出库单编号 VARCHAR 20
库房编号 VARCHAR 20
供货商编号 VARCHAR 20
提交人编号
审核日期
出库单状态
审核人编号
客户编号
VARCHAR
DATE
VARCHAR
VARCHAR
VARCHAR
20
11
11
20
20
是否主键 是否不为空
√ √
√
字段名
id
Outbill_id
Product_id
Number
表outlist的结构
注释 类型 长度
编号 INTEGER 11
出库单编号 VARCHAR 20
成品编号 VARCHAR 20
数量
INTEGER 11
是否主键 是否不为空
√ √
√
√
19
字段名
Reportid
Reporttype
Depotid
beginDate
endDate
createTime
referId
checkState
checkDate
AuditId
表report的结构
注释 类型 长度
报表编号 VARCHAR 20
报表类型 VARCHAR 20
库房编号 VARCHAR 20
起始日期 DATE 11
结束日期
创建日期
提交人编号
审核状态
审核日期
审核人编号
DATE
DATE
VARCHAR
VARCHAR
DATE
VARCHAR
11
11
20
20
11
20
是否主键 是否不为空
√ √
√
√
√
√
√
√
√
字段名
id
reportId
Depotid
goodsName
goodsType
allNumber
badNumber
checkId
表report_detail的结构
注释 类型 长度 是否主键 是否不为空
编号 INTEGER 11 √ √
报表编号 VARCHAR 20 √
库房编号 VARCHAR 20 √
货物名称 VARCHAR 40 √
货物类型
总数量
不合格数量
审核人编号
VARCHAR
INTEGER
INTEGER
VARCHAR
30
11
11
20
√
√
4.3运行环境
1. 开发工具:Eclipse,
2. 软件环境:Tomcat6.0,JDK5.0以上,
3. 硬件环境:cpu:P3 2.0GHZ以上 Memory:512M以上
20
第5章 编码
5.1登陆的实现
5.1.1登陆action
import rvletRequest;
import rvletResponse;
import ssion;
import ;
import Form;
import Forward;
import Mapping;
import orm;
import ervice;
/**
* MyEclipse Struts
* Creation date: 05-30-2009
*
* XDoclet definition:
* @ path="/login" name="loginForm" input="/webpage/"
scope="request" validate="true"
*/
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
try{
String userName=r_name().trim();
String psw=().trim();
LoginService loginService=new LoginService();
HttpSession session = sion(true);
if((userName, psw)){
ribute("username",userName);
//如果登录成功把登录的名字放在session中以便在过滤器中判断
return rward("loginSuccess");
//返回到登陆成功页面
}else{
21
}
}
date();
ribute("loginError", "用户或者密码错误!!");
//返回到错误页面
return rward("loginError");
}
}catch(Exception e){
tackTrace();
}
return null;
5.1.2登陆过滤器
import ption;
import ;
import Chain;
import Config;
import tException;
import tRequest;
import tResponse;
import .*;
public class SecurityAndDeny implements Filter {
public void destroy() {
//注销时调用
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
HttpSession session = sion(false);
//取出来session如果没有得到空值
if (session== null||ribute("username")== null) {
//判断是否登录过如果没有就重定向到登陆页面
String temp="你还没登陆请重新登陆!!";
temp=(ng(),"utf-8");
direct("localhost:8080/JT03EtpLgtWebProject03/?lo
ginErr="+temp);
return;
}
//如果登录了就进入请求页面
er(req, resp);
}
public void init(FilterConfig arg0) throws ServletException {
//初始化时调用的方法
22
}
}
5.1.3登陆DAO
public Boolean login(String userName,String psw)
{
}
Employee employee=new Employee();
(psw) ;
rName(userName);
List results=findByExample(employee);
int length=();
if(length==1)
{
return true;
}
else
{
return false;
}
5.2供货商的实现
5.2.1供货商查询Action
package ;
import ;
import rvletRequest;
import rvletResponse;
import ;
import Form;
import Forward;
import Mapping;
import an;
import orm;
import
erService;
import er;
import ;
23
public class QueryAction extends Action {
}
list = yExample(supplier, currentPage, lineSize);
rentPage(currentPage);
ribute("pageBean", pageBean);
ribute("list", list);
eSize((allRecorders + lineSize - 1) / lineSize);
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
QueryForm queryForm = (QueryForm) form;
SupplierService ss = new SupplierService();
PageBean pageBean = new PageBean();
List list = null;
//存放查出来的spplier对象
String crrPage = ameter("cp");
int currentPage = rentPage();
int lineSize = eSize();
Supplier supplier = change(queryForm);
if (crrPage != null) {
currentPage = nt(crrPage);
int allRecorders = nt(supplier);
RECORDERS(allRecorders);
ESIZE((allRecorders + lineSize - 1) / lineSize);
Recorders(allRecorders);
} else {
//把查询出来的supplier对象放在request里
return rward("supplierResult");
}
//把form表单里的东西转化为supplier对象
public Supplier change(QueryForm queryForm) {
Supplier supplier = new Supplier();
if (plierId() != null
&& !plierId().equals(""))
plierId(plierId());
&& !ress().equals(""))
if (ress() != null
ress(ress());
e(e());
dit(dit());
ne(ne());
24
if (e() != null && !e().equals(""))
if (dit() != null && !dit().equals(""))
if (ne() != null && !ne().equals(""))
}
}
if (ark() != null && !ark().equals(""))
ark(ark());
return supplier;
5.2.2供货商修改Action
import rvletRequest;
import rvletResponse;
import ;
import Form;
import Forward;
import Mapping;
import er;
import Form;
import
erService;
public class ModifyAction extends Action {
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
}
HttpServletRequest request, HttpServletResponse response) {
ModifyForm modifyForm = (ModifyForm) form;
Supplier supplier = new Supplier();
ress(ress());
dit(dit());
e(e());
ne(ne());
ark(ark());
plierId(plierId());
SupplierService ss = new SupplierService();
}
try {
(supplier);
return rward("success");
tackTrace();
return rward("error");
} catch (Exception e) {
5.2.2供货商添加Action
import rvletRequest;
import rvletResponse;
25
import ;
import Form;
import Forward;
import Mapping;
import er;
import m;
import
erService;
public class AddAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
AddForm addForm = (AddForm) form;
Supplier supplier = new Supplier();
ress(ress());
dit(dit());
e(e());
ne(ne());
ark(ark());
plierId(plierId());
SupplierService ss = new SupplierService();
try {
(supplier);
return rward("success");
} catch (Exception e) {
tackTrace();
//出现异常打印轨迹
return rward("error");
}
}
}
5.2.3供货商DAO
package ;
import ist;
import ;
import ia;
import de;
import ;
import n;
import ction;
import e;
26
import bernateDAO;
import er;
import tExample;
public class SupplierDAO extends BaseHibernateDAO {
public static final String NAME = "name";
public static final String ADDRESS = "address";
public static final String PHONE = "phone";
public static final String CREDIT = "credit";
public static final String REMARK = "remark";
public static final String SUPPLIERID="supplierId";
public void save(Supplier transientInstance) {
}
public Supplier findById( id) {
try {
}
27
Transaction transaction=null;
try {
}
try {
}
Session session= getSession();
Transaction transaction = ransaction();
(transientInstance);
();
();
throw re;
Session session= getSession();
transaction=ransaction();
(transientInstance);
();
();
}
} catch (Exception re) {
public void upDate(Supplier transientInstance)throws Exception {
} catch (RuntimeException re) {
Session session= getSession();
Transaction transaction = ransaction();
Supplier instance = (Supplier) (
"er", id);
();
return instance;
throw re;
} catch (RuntimeException re) {
}
public int getCount(Supplier instance) throws Exception {
}
public List findByExample(Supplier instance, int currentPage, int lineSize)
throws Exception {
List list = null;
Session session=getSession();
if(findByProperty(SUPPLIERID,
{
Supplier supplier=findById(plierId());
if(supplier!=null)
{
return 1;
}
else{
}
else{
Session session= getSession();
Transaction transaction = ransaction();
Criteria c = Criteria(
int i=().size();
();
();
return i;}
"er").add(
(instance));
return 0;
}
if(plierId()!=null)
plierId()).size()==0||findByProperty("supplierId",
plierId())==null)
{
Example es=mple(instance);
Transaction transaction = ransaction();
Criteria c = Criteria(
"er")
.add(es);
stResult((currentPage - 1) * lineSize);
Results(lineSize);
list = ();
();
getSession().close();
if(()==0||list==null)
{
return null;
28
}
}
}
else
{
}
return findByProperty("supplierId", plierId());
}
return list;
29
第6章 测试
6.1登陆测试方案
输入空账号
输入不存在的账号密码
输入正确的账号和错误的密码
输入正确账号和空密码
没有登录直接访问页面
6.2 数据录入测试
录入一条空记录
录入一条以上全部数据项非空记录
录入一条以上只填必填数据项的记录
录入一条以上只填非必填数据项的记录
对具有外键关联的表录入一条以上检验外键约束的记录
录入一条以上正确的记录
录入一条以上检验其他自定义完整性约束的记录
6.3 查询测试
正常查询一条以上记录
查询各种查非所查的记录
查询各种不对应选项的查询
6.4测试结论
首先,我们要认识到测试是软件开发过程中一个非常重要的环节,一个好的软件必须
经过无数次的测试,软件测试是保证软件质量的关键步骤。在经过对各模块的测试后,已
经能够证实该软件各方面的能力都可以正常运行。该软件在各方面的综合能力都通过。
30
第7章 使用说明
7.1 系统功能简介
本系统角色包括两种,仓库主管和普通管理员,其中,仓库主管拥有整个系统的最高权
限。仓库主管负责整个山口物流公司仓管部的日常运作和管理工作,除了具有普通管理员的
权利,还具有以下权利和义务,主要包括:
基本信息管理:维护客户信息、供货商信息和仓管员信息,具体操作有添加、修改、删
除和查询。
入库管理:查看入库单,并且具有审批的功能,以决定是否需要入库。如果没有通过审
批,将不能入库。
出库管理:查看出库单,具有审批的功能,如果没有通过审批,将不能出库。
报表信息管理:打印、查看一些报表。
系统设置:修改个人信息,备份和还原数据。
在库管理:管理在库的物品,记录盘点信息,以及维护仓库。
退货信息管理:管理退货信息,包括客户向公司的退货,以及公司向供货商退货。
仓管部管理人员:负责仓库的出入库管理,可以根据流向单实现出/入库操作;管理库内的
产品,记录一些库检、盘点等信息,还可以修改个人信息等。具体权限有:
基本信息管理:只可以查询客户信息,供货商信息和仓管员的信息,不能对其做任何修
改或删除操作。还可以查询仓库信息。
入库管理:添加入库单,然后提交给主管审批,如果通过审批,则可以入库。对于通过
审批的入库单,不能再作修改,只能查询;对于没有通过审批的入库单,可以根据主管
的批注作修改或删除的操作。
出库管理:添加出库单,然后提交给主管审批,如果通过审批,则可以出库。对于通过
审批的出库单,不能再作修改,只能查询;对于没有通过审批的出库单,可以根据主管
的批注作修改或删除的操作。
在库管理:查看库存信息、成品组装、在库移动、以及记录盘点信息。
退货信息管理:管理退货信息,包括客户向公司的退货,以及公司向供货商退货。
报表信息管理:打印、查看一些报表。
系统设置:修改个人信息。
7.2 运行环境简介
硬件环境:
服务器端: 推荐配置为1G内存,CPU为1700MHZ以上配置,硬盘容量为80G的微机。
通信网络: 依托校园网,网络协议为HTTP、TCP/IP。
软件环境:
31
服务器端:
➢
操作系统: Windows2000/NT/XP/2003
➢
➢
➢
➢
数据库服务器:
MySQL Server 4.1
Web服务器:Apache Tomcat 6.0
技术架构平台:Sun J2DK 1.6
操作系统: Windows2000/XP/2003
客户端:
➢ 浏览器:Internet Explore6.0或以上版本
屏幕分辨率推荐为:1024*768或以上
7.3 系统运行与操作指南
配置该项目,启动Tomcat服务器,打开Internet Explorer,在URL地址中输入
localhost:8080/JT03EtpLgtWebProject03/,进入登录页面,根据输入
的用户,可以判定是主管或者是普通仓管员,用户名和密码都正确,即可登录到相应的主
页面,进行相应的操作。
7.4操作演示
32
33
主登陆页面
7.5特色介绍
(1)本系统根据山口物流公司实际需求进行设计和开发的,切合实际,具有很强的实用性。
(2)界面友好,功能完善,接口丰富,具有很好的可扩充性.
(3)完善的后台管理,管理员不需要懂得任何操作就可以对前台进行控制。
(4)采用Browser/Server三层体系结构,使系统具有很好的可维护性和可重用性。
(5)Web服务器采用的是Apache的Tomcat应用服务器,它是一个比较完善的、开放的轻
量级Web应用服务器,性能优良,配置和部署方便。它严格地遵循普遍流行的开放标
准,在中小型开发过程中较为适用。
(6)有警报设置功能,对于数量不足的产品或积压时间过长的产品,会自动提示,更加人
性化。
34
第8章 总结
仓库管理是物流管理的核心内容之一,基于Internet的仓储管理系统,改变了繁重的
手工操作带来的效率低,易出错的状况,解决了跨地域仓储的难题,提高了仓储服务水平,
减少了企业仓储投资。系统从分析、设计开始,高标准要求,并且严格按照信息系统工程
的方法,保证了系统在运行之后的稳定性。技术采用的J2EE、MVC模式、DAO模式等方法,
提高了系统的模块化和结构化,使系统更易扩展、升级和维护。
但是,本系统目前只是针对某些物流公司的业务情况开发的,有一定的通用性。由于
每个公司的业务情况和管理方式都不一样,设计时并没考虑这些情况。另外,在数据仓库,
深度数据挖掘技术以及仓储的智能化方面,没有做详细的考虑,有待今后逐步地进行完善。
关于本系统,虽然对仓库管理进行了系统的创建,但我们不可忽略的是这个系统并不
完美,我们也不能高枕无忧。我们要在以后的实践中去检验它的可用性,特别要考虑它的
实时性和安全性,这才是我们最值得考虑的问题。一个系统好不好,要经过反复的使用才
能知道,不光光是理论中分析和设计得出来的。由此我就想到了在做这个系统时,有的同
学用了ACCESS ,有的同学用了SQL 等来建不同的数据库,这样就导致有的是系统自带的代
码,而有的则是我们写进去的纯代码,当然也就出现了各种各样的问题。特别是关于系统
的可移植性,有许多不足之处,这样我们就应该多查阅相关资料,反复地熟练应用,才能
把系统设计的巧,设计的好。同学们之间的交流也十分重要,交流就是进步,有时进会带
你走入一种柳暗花明的欣喜境界
35
参考文献
[1] 吴建,郑潮,汪杰.UML基础与Rose建模案例.北京:人民邮电出版社.2004年9月
[2] 黄晓东著.JAVA课程设计案例精编.河南:中国水利水电出版社.2004.7
[3] (美)Bruce Eckel著, 陈昊鹏 ,饶若楠等译.JAVA编程思想.陕西:机械工业出版社.2005.6
[4] 陈玉峰.MySql数据库开发教程.北京:科学出版社.2004.4
[5] Perry Analysis&ll Mcgraw-Hill. 2005.5
[6] 冀振燕.UML系统分析设计与应用案例.北京:人民邮电出版社.2005.6
[7] Ted Husted,Cedric Dumoulin,George Franciscus,David in Action[M].
Manning Publications Company.2003
[8] 冯燕奎,赵德奎等.JSP实用案例教程.北京:清华大学出版社.2004
[9] Bruce ng in n Education.2005.5
[10] 杨志波.Dreamweaver MX 2004标准教程.北京:中国宇航出版社.2004年第1版
[11] 孙卫琴.精通Struts基于MVC的Java Web设计与开发[M].北京:飞思科技产品研发中心.2006
[12] ple of Information &Fraser Publishing Company.2004
36
致 谢
非常感谢我的导师曹来成老师给我的悉心关怀,让我顺利地完成了毕业论文,当然,
也感谢母校辛勤培育之恩,各位领导、老师和同学的大力帮助之情,使我学到了许多新的
知识,同是也更懂得了一些做学问的道理,这是一笔宝贵的财富。
从选择毕业设计题目,到毕业设计规划,查找相关资料,设计模型,具体实施,结束
论文,整个大致的流程中,我的导师都给予了我耐心的指导和默默的关心,设计为期之长,
其间遇到了不少问题,也承蒙了老师的照顾,真的想对老师说一声:老师,辛苦了,谢谢
您。除此之外,我还要致谢我的几位同学的得力相助,我希望我能向他们学习,发扬那种
百折不挠、孜孜不倦的对知识求索精神,那种至高无上的敬业精神,马上我就要走向工作
单位了,我相信我会时刻用他们的平凡而不简单来鞭策自已。
最后,衷心祝愿我的老师和学友们永远幸福,快乐。
37
翻译资料原文
Overview of JSP Technology
Benefits of JSP
JSP pages are translated into servlets. So, fundamentally, any task JSP pages can perform could
also be accomplished by servlets. However, this underlying equivalence does not mean that
servlets and JSP pages are equally appropriate in all scenarios. The issue is not the power of the
technology, it is the convenience, productivity, and maintainability of one or the other. After all,
anything you can do on a particular computer platform in the Java programming language you
could also do in assembly language. But it still matters which you choose.
JSP provides the following benefits over servlets alone:
• It is easier to write and maintain the HTML. Your static code is ordinary HTML: no extra
backslashes, no double quotes, and no lurking Java syntax.
• You can use standard Web-site development tools. Even HTML tools that know nothing about
JSP can be used because they simply ignore the JSP tags.
• You can divide up your development team. The Java programmers can work on the dynamic
code. The Web developers can concentrate on the presentation layer. On large projects, this
division is very important. Depending on the size of your team and the complexity of your project,
you can enforce a weaker or stronger separation between the static HTML and the dynamic
content.
Now, this discussion is not to say that you should stop using servlets and use only JSP instead. By
no means. Almost all projects will use both. For some requests in your project, you will use
servlets. For others, you will use JSP. For still others, you will combine them with the MVC
architecture . You want the appropriate tool for the job, and servlets, by themselves, do not
complete your toolkit.
Advantages of JSP Over Competing Technologies
A number of years ago, Marty was invited to attend a small 20-person industry roundtable
discussion on software technology. Sitting in the seat next to Marty was James Gosling, inventor
of the Java programming language. Sitting several seats away was a high-level manager from a
38
very large software company in Redmond, Washington. During the discussion, the moderator
brought up the subject of Jini, which at that time was a new Java technology. The moderator asked
the manager what he thought of it, and the manager responded that it was too early to tell, but that
it seemed to be an excellent idea. He went on to say that they would keep an eye on it, and if it
seemed to be catching on, they would follow his company's usual "embrace and extend" strategy.
At this point, Gosling lightheartedly interjected "You mean disgrace and distend."
Now, the grievance that Gosling was airing was that he felt that this company would take
technology from other companies and suborn it for their own purposes. But guess what? The shoe
is on the other foot here. The Java community did not invent the idea of designing pages as a
mixture of static HTML and dynamic code marked with special tags. For example, ColdFusion
did it years earlier. Even ASP (a product from the very software company of the aforementioned
manager) popularized this approach before JSP came along and decided to jump on the
bandwagon. In fact, JSP not only adopted the general idea, it even used many of the same special
tags as ASP did.
So, the question becomes: why use JSP instead of one of these other technologies? Our first
response is that we are not arguing that everyone should. Several of those other technologies are
quite good and are reasonable options in some situations. In other situations, however, JSP is
clearly better. Here are a few of the reasons.
Versus .NET and Active Server Pages (ASP)
.NET is well-designed technology from Microsoft. is the part that directly competes
with servlets and JSP. The advantages of JSP are twofold.
First, JSP is portable to multiple operating systems and Web servers; you aren't locked into
deploying on Windows and IIS. Although the core .NET platform runs on a few non-Windows
platforms, the ASP part does not. You cannot expect to deploy serious applications on
multiple servers and operating systems. For some applications, this difference does not matter. For
others, it matters greatly.
Second, for some applications the choice of the underlying language matters greatly. For example,
although .NET's C# language is very well designed and is similar to Java, fewer programmers are
familiar with either the core C# syntax or the many auxiliary libraries. In addition, many
developers still use the original version of ASP. With this version, JSP has a clear advantage for
39
the dynamic code. With JSP, the dynamic part is written in Java, not VBScript or another
ASP-specific language, so JSP is more powerful and better suited to complex applications that
require reusable components.
You could make the same argument when comparing JSP to the previous version of ColdFusion;
with JSP you can use Java for the "real code" and are not tied to a particular server product.
However, the current release of ColdFusion is within the context of a J2EE server, allowing
developers to easily mix ColdFusion and servlet/JSP code.
Versus PHP
PHP (a recursive acronym for "PHP: Hypertext Preprocessor") is a free, open-source,
HTML-embedded scripting language that is somewhat similar to both ASP and JSP. One
advantage of JSP is that the dynamic part is written in Java, which already has an extensive API
for networking, database access, distributed objects, and the like, whereas PHP requires learning
an entirely new, less widely used language. A second advantage is that JSP is much more widely
supported by tool and server vendors than is PHP.
Versus Pure Servlets
JSP doesn't provide any capabilities that couldn't, in principle, be accomplished with servlets. In
fact, JSP documents are automatically translated into servlets behind the scenes. But it is more
convenient to write (and to modify!) regular HTML than to use a zillion println statements to
generate the HTML. Plus, by separating the presentation from the content, you can put different
people on different tasks: your Web page design experts can build the HTML by using familiar
tools and either leave places for your servlet programmers to insert the dynamic content or invoke
the dynamic content indirectly by means of XML tags.
Does this mean that you can just learn JSP and forget about servlets? Absolutely not! JSP
developers need to know servlets for four reasons:
1. JSP pages get translated into servlets. You can't understand how JSP works without
understanding servlets.
2. JSP consists of static HTML, special-purpose JSP tags, and Java code. What kind of Java code?
Servlet code! You can't write that code if you don't understand servlet programming.
3. Some tasks are better accomplished by servlets than by JSP. JSP is good at generating pages
that consist of large sections of fairly well structured HTML or other character data. Servlets are
40
better for generating binary data, building pages with highly variable structure, and performing
tasks (such as redirection) that involve little or no output.
4. Some tasks are better accomplished by a combination of servlets and JSP than by either servlets
or JSP alone.
Versus JavaScript
JavaScript, which is completely distinct from the Java programming language, is normally used to
dynamically generate HTML on the client, building parts of the Web page as the browser loads
the document. This is a useful capability and does not normally overlap with the capabilities of
JSP (which runs only on the server). JSP pages still include SCRIPT tags for JavaScript, just as
normal HTML pages do. In fact, JSP can even be used to dynamically generate the JavaScript that
will be sent to the client. So, JavaScript is not a competing technology; it is a complementary one.
It is also possible to use JavaScript on the server, most notably on Sun ONE (formerly iPlanet),
IIS, and BroadVision servers. However, Java is more powerful, flexible, reliable, and portable.
Versus WebMacro or Velocity
JSP is by no means perfect. Many people have pointed out features that could be improved. This
is a good thing, and one of the advantages of JSP is that the specification is controlled by a
community that draws from many different companies. So, the technology can incorporate
improvements in successive releases.
However, some groups have developed alternative Java-based technologies to try to address these
deficiencies. This, in our judgment, is a mistake. Using a third-party tool like Apache Struts that
augments JSP and servlet technology is a good idea when that tool adds sufficient benefit to
compensate for the additional complexity. But using a nonstandard tool that tries to replace JSP is
a bad idea. When choosing a technology, you need to weigh many factors: standardization,
portability, integration, industry support, and technical features. The arguments for JSP
alternatives have focused almost exclusively on the technical features part. But portability,
standardization, and integration are also very important. For example, the servlet and JSP
specifications define a standard directory structure for Web applications and provide standard files
(.war files) for deploying Web applications. All JSP-compatible servers must support these
standards. Filters can be set up to apply to any number of servlets or JSP pages, but not to
nonstandard resources. The same goes for Web application security settings.
41
Besides, the tremendous industry support for JSP and servlet technology results in improvements
that mitigate many of the criticisms of JSP. For example, the JSP Standard Tag Library and the
JSP 2.0 expression language address two of the most well-founded criticisms: the lack of good
iteration constructs and the difficulty of accessing dynamic results without using either explicit
Java code or verbose jsp:useBean elements.
10.4 Misconceptions About JSP
Forgetting JSP Is Server-Side Technology
Here are some typical questions Marty has received (most of them repeatedly).
• Our server is running JDK 1.4. So, how do I put a Swing component in a JSP page?
• How do I put an image into a JSP page? I do not know the proper Java I/O commands to read
image files.
• Since Tomcat does not support JavaScript, how do I make images that are highlighted when the
user moves the mouse over them?
• Our clients use older browsers that do not understand JSP. What should we do?
• When our clients use "View Source" in a browser, how can I prevent them from seeing the JSP
tags?
All of these questions are based upon the assumption that browsers know something about the
server-side process. But they do not. Thus:
• For putting applets with Swing components into Web pages, what matters is the browser's Java
version—the server's version is irrelevant. If the browser supports the Java 2 platform, you use the
normal APPLET (or Java plug-in) tag and would do so even if you were using non-Java
technology on the server.
• You do not need Java I/O to read image files; you just put the image in the directory for Web
resources (i.e., two levels up from WEB-INF/classes) and output a normal IMG tag.
• You create images that change under the mouse by using client-side JavaScript, referenced with
the SCRIPT tag; this does not change just because the server is using JSP.
• Browsers do not "support" JSP at all—they merely see the output of the JSP page. So, make sure
your JSP outputs HTML compatible with the browser, just as you would do with static HTML
pages.
• And, of course you need not do anything to prevent clients from seeing JSP tags; those tags are
42
processed on the server and are not part of the output that is sent to the client.
Confusing Translation Time with Request Time
A JSP page is converted into a servlet. The servlet is compiled, loaded into the server's memory,
initialized, and executed. But which step happens when? To answer that question, remember two
points:
• The JSP page is translated into a servlet and compiled only the first time it is accessed after
having been modified.
• Loading into memory, initialization, and execution follow the normal rules for servlets.
Table 1 gives some common scenarios and tells whether or not each step occurs in that scenario.
The most frequently misunderstood entries are highlighted. When referring to the table, note that
servlets resulting from JSP pages use the _jspService method (called for both GET and POST
requests), not doGet or doPost. Also, for initialization, they use the jspInit method, not the init
method.
Table 1. JSP Operations in Various Scenarios
JSP page translated into servlet Servlet compiled Servlet loaded into server's memory jspInit
called _jspService called
Page first written
Request 1 Yes Yes Yes Yes Yes
Request 2 No No No No Yes
Server restarted
Request 3 No No Yes Yes Yes
Request 4 No No No No Yes
Page modified
Request 5 Yes Yes Yes Yes Yes
Request 6 No No No No Yes
43
翻译资料译文
JSP技术概述
一、JSP的好处
JSP页面最终会转换成servler。因而,从根本上,JSP页面能够执行的任何任务都可以用
servler来完成。然而,这种底层的等同性并不意味着servler和JSP页面对于所有的情况
都等同适用。问题不在于技术的能力,而是二者在便利性、生产率和可维护性上的不同。
毕竟,在特定平台上能够用Java编程语言完成的事情,同样可以用汇编语言来完成,但是
选择哪种语言依旧十分重要。
和单独使用servler相比,JSP提供下述好处:
JSP中HTML的编写与维护更为简单。JSP中可以使用常规的HTML:没有额外的反斜杠,
没有额外的双引号,也没有暗含的Java语法。
能够使用标准的网站开发工具。即使对那些对JSP一无所知的HTML工具,我们也可以使
用,因为它们会忽略JSP标签(JSP tags)。
可以对开发团队进行划分。Java程序员可以致力于动态代码。Web开发人员可以将经理
集中在表示层(presentation layer)上。对于大型的项目,这种划分极为重要。依据开
发团队的大小,及项目的复杂程度,可以对静态HTML和动态内容进行弱分离(weaker
separation)和强分离(stronger separation)。
在此,这个讨论并不是让您停止使用servlets,只使用JSP。几乎所有的项目都会同时用
到这两种技术。针对项目中的某些请求,您可能会在MVC构架下组合使用这两项技术。我
们总是希望用适当的工具完成相对应的工作,仅仅是servlet并不能填满您的工具箱。
二、JSP相对于竞争技术的优势
许多年前,Marty受到邀请,参加一个有关软件技术的小型(20个人)研讨会.做在Marty旁
边的人是James Gosling--- Java编程语言的发明者。隔几个位置,是来自华盛顿一家大型
软件公司的高级经理。在讨论过程中,研讨会的主席提出了Jini的议题,这在当时是一项新
的Java技术.主席向该经理询问他的想法.他继续说,他们会持续关注这项技术,如果这项技
术变得流行起来,他们会遵循公司的“接受并扩充(embrace and extend)”的策略.此时,
Gosling随意地插话说“你的意思其实就是不接受且不扩充(disgrace and distend)。”
在此, Gosling的抱怨显示出,他感到这个公司会从其他公司那里拿走技术,用于他们自己
的目的.但你猜这次怎么样?这次鞋子穿在了另一只脚上。Java社团没有发明这一思想----
将页面设计成由静态HTML和用特殊标签标记的动态代码混合组成.。ColdFusion多年前就
44
已经这样做了。甚至ASP(来自于前述经理所在公司的一项产品)都在JSP出现之前推广了这
种方式。实际上,JSP不只采用了这种通用概念,它甚至使用许多和ASP相同的特殊标签。
因此,问题变成:为什么使用JSP,而不使用其他技术呢?我们的第一反应是我们不是在争论
所有的人应该做什么。其他这些技术中,有一些也很不错,在某些情况下也的确是合情合理
的选择.然而,在其他情形中,JSP明显要更好一些。下面给出几个理由。
与.NET和Active Server Pages (ASP)相比
.NET是Microsoft精心设计的一项技术。是与servlets和JSP直接竞争的技术。
JSP的优势体现在两个方面。
首先,JSP可以移植到多种操作系统和Web服务器,您不必仅仅局限于部署在Windows 和IIS
上尽管核心.NET平台可以在好几种非Windows平台上运行,但ASP这一部分不可以。您不
能期望可以将重要的应用部署到多种服务器和操作系统。对于某些应用,这种差
异没有什么影响。但有些应用,这种差异却非常重要。
其次,对于某些应用,底层语言的选择至关重要。例如,尽管.NET的C#语言设计优良,且
和Java类似,但熟悉核心C#语法和众多工具库的程序员很少。此外,许多开发者依旧使用
最初版本的ASP。相对于这个版本,JSP在动态代码方面拥有明显的优势。使用JSP,动态部
分是用Java编写的,而非VBScript过其他ASP专有的语言,因此JSP更为强劲,更适合于要
求组件重用的复杂应用。
当将JSP与之前版本的ColdFusion对比时,您可能会得到相同的结论。应用JSP,您可以
使用Java编写“真正的代码”,不必依赖于特定的服务器产品。然而,当前版本的
ColdFusion满足J2EE服务器的环境,允许开发者容易的混合使用ColdFusion和
Servlet/JSP代码。
与PHP相比
PHP(“PHP:Hypertext Preprocessor”的递归字母缩写词)是免费的、开放源代码的、
HTML嵌入其中的脚本语言,与ASP和JSP都有某种程度的类似。JSP的一项优势是动态部
分用Java编写,而Java已经在联网、数据库访问、分布式对象等方面拥有广泛的API,而
PHP需要学习全新的、应用相对广泛的语言。JSP的第二项优势是,和PHP相比,JSP拥有
极为广泛的工具和服务器提供商的支持。
与纯Servlet相比
原则上,JSP并没有提供Servlet不能完成的功能。实际上,JSP文档在后台被自动转换成
Servlet。但是编写(和修改)常规的HTML,要比无数println语句生成HTML要方便得多。
45
另外,通过将表示与内容分离,可以为不同的人分配不同的任务:网页设计人员使用熟悉
的工具构建HTML,要么为Servlet程序员留出空间插入动态内容,要么通过XML标签间接
调用动态内容。
这是否表示您只可以学习JSP,将Servlet丢到一边呢?当然不是!由于以下4种原因,JSP
开发人员需要了解Servlet:
(1)JSP页面会转换成Servlet。不了解Servlet就无法知道JSP如何工作。
(2)JSP由静态HTML、专用的JSP标签和Java代码组成。哪种类型的Java代码呢?当然
是Servlet代码!如果不了解Servlet编程,那么就无法编写这种代码。
(3)一些任务用Servlet完成比用JSP来完成要好。JSP擅长生成由大量组织有序的结构
化HTML或其他字符数据组成的页面。Servlet擅长生成二进制数据,构建结构多样的页面,
以及执行输出很少或者没有输出的任务(比如重定向)。
(4)有些任务更适合于组合使用Servlet和JSP来完成,而非单独使用Servlet或JSP。
与JavaScript相比
JavaScript和Java编程语言完全是两码事,前者一般用于在客户端动态生成HTML,在浏
览器载入文档时构建网页的部分内容。这是一项有用的功能,一般与JSP的功能(只在服
务器端运行)并不发生重叠。和常规HTML页面一样,JSP页面依旧可以包括用于JavaScript
的SCRIPT标签。实际上,JSP甚至能够用来动态生成发送到客户端的JavaScript。因此,
JavaScript不是一项竞争技术,它是一项补充技术。
JavaScript也可以用在服务器端,最因人注意的是SUN ONE(以前的iPlanet)、IIS和
BroadVision服务器。然而,Java更为强大灵活、可靠且可移植。
与WebMacro和Velocity相比
JSP决非完美。许多人都曾指出过JSP中能够改进的功能。这是一件好事,JSP的优势之一
是该规范由许多不同公司组成的社团控制。因此,在后续版本中,这项技术能够得到协调
的改进。
但是,一些组织已经开发出了基于Java的替代技术,试图弥补这些不足。据我们的判断,
这样做是错误的。使用扩充JSP和Servlet技术的第三方工具,如Apache Structs,是一
种很好的思路,只要该工具带来的好处能够补偿工具带来的额外复杂性。但是,试图使用
非标准的工具代替JSP则不理想。在选择一项技术时,需要权衡许多方面的因素:标准化、
可移植性、集成性、行业支持和技术特性。对于JSP替代技术的争论几乎只是集中在技术
特性上,而可移植性、标准化和集成性也十分重要。例如,Servlet和JSP规范为Web应用
46
定义了一个标准的目录结构,并提供用于部署Web应用的标准文件(.war文件)。所有JSP
兼容的服务器必须支持这些标准。我们可以建立过滤器作用到任意树木的Servlet和JSP
页面上,但不能用于非标准资源。Web应用安全设置也同样如此。
此外,业界对JSP和Servlet技术的巨大支持使得这两项技术都有了巨大的进步,从而减
轻了对JSP的许多批评。例如,JSP标准标签库和JSP 2.0表达式语言解决了两种最广泛的
批评:缺乏良好的迭代结构;不使用显式的Java代码或冗长的jsp:useBean元素难以访问
动态结果。
三、对JSP的误解
忘记JSP技术是服务器端技术
下面是Marty收到的一些典型问题(大部分问题不止一次的出现)。
我们的服务器正在运行JDK1.4。我如何将Swing组件用到JSP页面中呢?
我如何将图像放到JSP页面中?我不知道读取图像文件应该使用哪些Java I/O命令。
Tomcat不支持JavaScript,当用户在图像上移动鼠标时,我如何使图像突出显示呢?
我们的客户使用不理解JSP的旧浏览器。我应该怎么做?
当我们的客户在浏览器中使用“View Source”(查看源代码)时,如何阻止他们看到JSP
标签?
所有这些问题都基于浏览器对服务器端的过程在有所了解的假定之上。但事实上浏览器并
不了解服务器端的过程。因此:
如果要将使用Swing组件的applet放到网页中,重要的是浏览器的Java版本,和服务
器的Java版本无关。如果浏览器支持Java 2平台,您可以使用正常的APPLET(或Java插
件)标签,即使在服务器上使用了非Java技术也须如此。
您不需要Java I/O来读取图像文件,您只需将图像放在存储Web资源的目录中(即
WEB-INF/classes向上两级的目录),并输出一个正常的IMG标签。
您应该用SCRIPT标签,使用客户端JavaScript创建在鼠标下会更改的图像,这不会由
于服务器使用JSP而改变。
浏览器根本不“支持”JSP----它们看到的只是JSP页面的输出。因此,如同对待静态
HTML页面一样,只需确保JSP输出的HTML与浏览器兼容。
当然,您不需要采取什么措施来阻止客户看到JSP标签,这些标签在服务器上进行处理,
发送给客户的输出中并不出现。
混淆转换期间和请求期间
47
JSP页面需要转换成servlet。Servlet在编译后,载入到服务器的内容中,初始化并执行。
但是每一步发生在什么时候呢?要回答这个问题,要记住以下两点:
JSP页面仅在修改后第一次被访问时,才会被转换成servlet并进行编译;
载入到内存中、初始化和执行遵循servlet的一般规则。
表1列出一些常见的情形,讲述在该种情况下每一步是否发生。最常被误解的项已经突出
标示出来。在参考该表时,要注意,由JSP页面生成的servlet使用_jspService方法(GET
和POST请求都调用该函数),不是doGet或doPost方法。同样,对于初始化,它们使用jspInit
方法,而非init方法。
表1 各种情况下的JSP操作
将JSP 页面转换成servlet 编译Servlet 将Servlet 载入到服务器内存中 调用
jspInit 调用_jspService
页面初次创建
请求 1 有 有 有 有 有
请求 2 无 无 无 无 有
服务器重启后
请求3 无 无 有 有 有
请求 4 无 无 无 无 有
页面修改后
请求 5 有 有 有 有 有
请求 6 无 无 无 无 有
48
版权声明:本文标题:仓库管理系统+JAVA源代码++设计说明 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1711742507a608485.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论