基于JSP和MySQL的企业快信系统的设计与实现
摘 要
计算机网络的出现到现在已经经历了翻天覆地的重大改变。因特网也从最早的供科学家交流心得的简单的文本浏览器发展成为了商务和信息的中心。到了今天,互联网已经成为了大量应用的首选平台,人们已经渐渐习惯了网络交易,渐渐对网络产生了依赖。公司会议、机票预定、酒店预定、公司之间货物订单的下达等等工作都可以通过网络快速的完成。网络已经渗透到了人们生活中的方方面面,甚至已经延伸至人们日常的衣食住行各个领域。本项目就是在此背景下设计的企业快信系统。
本系统在开发中,采用了 MYSQL 数据库,同时使用到了 Java Swing、短信猫组件、Java MailAPI 等相关技术。在进行详细设计之前,根据总体设计的结构,确定每部分功能的解决方案,并完成相关技术的可行性分析以及技术原型的实现。在该系统中,采用数据服务器,和客户机相结合形成 B/S 结构,由相关人员或系统管理员执行如系统的备份、恢复、修改等重要操作,从而用来提高系统的安全性,并且降低了了黑客通过 Web 入侵来获取以及改变系统中重要数据信息的可能性。同时,采用 Web 客户机架构 B/S 三层结构,Web 客户机可通过 Internet 或专线连接应用服务器,向其发送指令,从而获取服务。这样做的优点是用浏览器便可进行,使用起来方便快捷,为客户提供了很大的便利。而对于记录管理,系统维护功能而言,主要是对记录信息进行处理,即对数据库信息进行添加,查询,导入和导出操作,这部分功能涉及的主要技术为通过 java连接 MYSQL 数据库,并通过 Java 代码完成对表内信息的查询和添加操作。
本文首先对企业快信的开发进行了较深入的研究,然后对短信发送与邮件发送原理进行了介绍,接下来对系统的概要设计、功能模块、数据库设计,以及名片夹管理功能与邮件发送功能的具体实现作了细致阐述,最后是系统效果的展示。企业快信系统是一个集短信与邮件为一体的移动商务应用系统。是针对企业内部II及外部不同需求和应用方面,而专门定制开发的系统软件。它完全集成了企业的业务推广、客情沟通、内部管理等应用功能。企业快信的作用是帮助企业解决企业内部、企业与外部沟通难、信息不能及时传播等问题。为此,系统提供邮件群发、短信群发、人员档案、信息的管理等功能。系统是短信猫与邮件在企业商务应用中的典型实例,因此必然受到众多企业的青睐,成为企业通信的最佳选择。
关键词 :短信发送;邮件发送;企业快信
Abstract
Computer network has undergone a great change.The internet has also developed intoa business and information center from the earliest.The company eeting,airlinereservation,hotel reservation, release the order of goods between the companies and so on,these all can becompleted through the network quikly.Internet has penetrated into every aspect of people’s life, even extending to the basic necessities of life in all areas of people’s daily life, The enterprise’s express letter system is designed in this context.
The system development uses MYSQL database, uses Java Swing, GSM Modem, Java mail API and other Technology. Before the detailed design of the structure of the overall design to determine the solution of some of the features, and complete the feasibility analysis and prototype implementation of the related technologies. In this system, data server and client combine to form the C/S structure, performed by the financial staff or system managers, such as system backup, restore, and modify the amount of important operating to improve the security of the system, reduce hacker by Web Intrusion to access and change the possibility of important information. The same time, the use of the Web client organizations into the B / S three-tier Web client can be connected through the Internet or green application server, send commands, and thus access to services. The advantage is you can operate from a browser, easy to use, fast and efficient, convenient to the customer with the greatest convenience. For records management, system maintenance functions, record information that the database information to add, query, import and export operations, some of the features involved in technology to through VC6 connect the MYSQL database, and Java code to query and add operations on the information in the table.
In this paper, we research the development of enterprise’s express letter system at first,and then introduce the principles of sending SMS and mails, After that, we made a elaboration of the summary of the system design, function modules, database design,business card folder management capabilities, as well as of the e-mail function’s concreterealization.Finally, we show the system’s effect.The enterprise’s express letter system is a mobile business of application systemwhich sets SMS and E-mail as a whole .The system software is specificallycustom-developed for internal and external needs and applications. It is fully integrated enterprise business promotion, customer intelligence, communication, internal management applications. The enterprise’s express letter system of the role is to help businesses solve internal, corporate and external communication difficult, not timely issemination of information and other issues. To this end, the system provides functions as java mail, BSwing , personnel files, information management and so on. The system is a typical example of the GSM Modem and e-mail in the enterprise business applications, so it will be subject to the favor of many enterprises, the best choice for business communications.
Key words : Java Mail; BSwing; Express Letter
1 绪论
1.1 开发背景
在企业信息化的今天,效率决定成败,企业内、外部沟通的及时性将直接影响企业的运作效率。现在多数企业的办公自动化系统(即OA)的信息传递仅限于计算机内部网络,如果用户不在线,将无法知道是否有新的工作或紧急通知,为了确认是否有待办工作,不得不经常去访问OA,检索是否有新任务,而事实上这种检索的结果经常是徒劳。这样一来,不仅造成了机器资源的浪费,也造成了人力资源的浪费。因此急需一套成型的企业快信系统解决上述问题。
1.2 国内外发展概况
短消息服务市场近来如此火爆,让许多人始料未及,预示着短消息的巨大市场空间。短消息(Short Message Service)是手机通过移动网进行个人简易数据通信的一种方式,具有覆盖范围广、双向寻呼、使用经济、可缓存处理等优点,满足了人们爆炸性增长的信息需求,使人们可以以低廉的价格、便捷的方式,随时随地得到充满个性化的信息,是无线通信在 20 世纪末所做的一次重要飞跃。这使得移动网络不仅可以传送音频,也可以传送数据,而数据传输是互联网技术的根本。
在国外,短消息业务占移动运营商收入的很大比例。国内移动通信在保持较高增长速度的同时,数据业务正在成为运营商的重要收入来源,几大电信公司不约而同地把目光盯住了手机短信。据统计,从 2000 年第四季度开始,全国短消息业务量以每月几千万条的数量突然激增,已经成为一个不容忽视的巨大的市场!
而随着中国移动通信用户的不断增长,如何最大程度地利用现有网络,挖掘网络潜力,方便灵活地开展增值服务,拓展网络应用服务领域,满足用户日益增长的服务需求成为网络运营商所要考虑的重点,因此,短消息增值服务已成为吸引用户和增加收入的有效手段。开展增值服务不仅可以直接增加业务收入,而且通过提供不同种类的服务,可以吸引更多的顾客群体,对于拓展用户、提高市场应用效率具有非常重要的意义,潜在的收益更为巨大。
1.3 研究目的和意义
本课题通过对企业快信系统的开发主要达到以下两个目的:
-
企业快信系统面对成千上万用户的连接以及同时的数据库请求,对数据库访问的效率和安全成了必须解决的问题。通过对JAVA 平台下数据库存取机制的深入研究,找出一条效率,性能与安全平衡的道路
-
Web 开发的实例,对如何把 B/S 与 C/S 相结合进行了研究,并对面向对象对多层结构的支持进行了详细的分析
企业快信主要是高效和安全的对企业提供企业级快信和服务,基于JAVA的多层结构来进行 web 开发必然是今后的主流,并且由于同时面对多用户及多连接,对数据库存取效率及性能,安全都有很高要求,因此,文中对数据库的高效安全的存取进行了深入研究并且获得了有效的进展。通过对其具体应用进行研究对相关开发人员和以后的软件开发及应用都有十分重要的意义。
1.4 研究主要内容
在一个提供企业级短信的系统的设计与实现中,把 C/S 和 B/S 架构根据实际情况进行结合,着重对数据库存取中的各种机制进行了深入地研究并且根据系统自身特点进行了选择和加强,采用了MySQL 数据供应器池化,并使用 Windows7 自带的性能监视器来监视链接池,最后讨论了设置链接池大小的各种问题,选择合适的大小,实现高效与安全有效的结合。并且结合 web 开发的实例,对面向对象对多层结构的支持进行了详细的分析。
基于JAVA的 B/S 架构来进行 web 开发必然是今后的主流,并且由于同时面对多用户及多连接,对数据库存取效率及性能,安全都有很高要求,因此,通过对其具体应用进行研究对相关开发人员和以后的软件开发及应用都有十分重要的意义。
2 系统分析
2.1 需求分析
企业快信的作用是帮助企业解决企业内部、企业与外部沟通难、信息不能及时传播等问题。为此,企业快信系统需要提供邮件群发、短信群发等功能。通过对多数企业日常业务的考察、分析,并结合短信及邮件自身的特点,得出本系统要求具有以下功能。
-
用于管理客户和员工信息的名片夹管理功能
-
用于对常用短语及其类别进行管理的信息库管理功能
-
短信群发功能
-
邮件群发功能
-
发送邮件附件的功能
2.2 可行性研究
开发任何一个基于计算机的系统,都会受到时间和资源上的限制。因此,在接受任何一个项目开发任务之前,必须根据客户可能提供的时间和资源条件进行可行性分析,以减少项目开发风险,避免人力、物力和财力的浪费。可行性分析与风险分析在很多方面是相互关联的,项目风险越大,开发高质量的软件的可行性就越小。
2.2.1 经济可行性
采用短信作为企业的移动通信手段,将给企业对内、对外进行信息传递与沟通带来革命性的变化,从而使得移动办公、客户服务、员工沟通等运作效率显著提升,而成本则显著下降。值得说明的是,虽然短信有以上诸多优点,但它还是有一定的不足,例如信息内容单一和受到字数限制等。为解决这一问题,在企业快信中提供了邮件群发功能。通过邮件进行沟通也是目前比较流行的方式,它也具备实用、方便和廉价等优点。
2.2.2 技术可行性
开发一个企业快信系统,涉及到的技术问题不会太多,主要用到的技术就是使用短信猫和Java Mail组件来实现收发短信和群发邮件等功能。Java Mail 组件是Sun 公司发布的一种用于读取、编写和发送电子邮件的包,利用它可以方便地实现邮件群发。
2.3 开发环境
在开发企业快信时,需要具备下面的软件环境。
- 服务器端
- 操作系统:Windows 7
- Java 开发包:JDK 1.5 以上
- Web服务器:Tomcat6.0
- Java Mail 开发包:Java Mail 1.4
- 数据库:MYSQL
- 浏览器:IE 10.0
-
分辨率:最佳效果为1024×768 像素
-
客户端
- 浏览器:IE 10.0
- 分辨率:最佳效果为1024×768 像素
由于本系统中需要使用Java Mail 组件,下面将详细介绍如何配置及Java Mail 的开发环境。
由于目前Java Mail 还没有被加在标准的Java 开发工具中,所以在使用前必须另外下载Java MailAPI,以及Sun 公司的JAF(JavaBeans Activation Framework),Java Mail 的运行必须信赖于JAF 的支持。
下载并构建Java Mail API
Java Mail API 是发送和接收E-mail 的核心API。需自行下载后解压缩到硬盘上,并在系统的环境变量CLASSPATH 中指定activation.jar 文件的放置路径。
下载并构建JAF
目前Java Mail API 的所有版本都需要JAF(JavaBeans Activation Framework)的支持。JAF 为输入的任意数据块提供了支持,并能相应地对其进行处理。下载后解压缩到硬盘上,并在系统的环境变量CLASSPATH 中指定activation.jar 文件的放置路径。
如果不想更改环境变量,也可以把activation.jar 添加到工程的构建路径中。
3 系统总体设计
3.1 系统目标
根据前面所作的需求分析及用户的需求可知,企业快信属于小型的企业通信软件,在系统实施后,应达到以下目标。
-
界面设计友好、美观
-
操作灵活、方便
-
提供功能强大的信息库管理,方便用户进行短信息的编写
-
提供邮件群发功能,提高工作效率
-
在发送短信时,可以直接从现有信息库中获取信息内容
-
对用户输入的数据,进行严格的数据检验,尽可能地避免人为错误
-
数据存储安全、可靠
3.2 系统功能结构
根据企业快信的特点,可以将其分为名片夹管理、信息库管理、短信群发、邮件群发、系统参数设置、系统设置6个部分,其中各个部分及其包括的具体功能模块如图3-1 所示。
3.3 业务流程图
企业快信的系统流程如图3-2 所示。
3.4 系统预览
企业快信由多个程序页面组成,下面仅列出几个典型界面。
系统登录页面如图3-3所示,该页面用于实现管理员登录功能;主页如图3-4所示,该页面用于实现显示系统导航、操作业务流程和版权信息等功能。
系统登录页面
主页
发送短信页面如图3-5所示,该页面用于实现将短信息同时发给多个接受者的功能;同时,为方便用户还提供了从客户及员工列表中选择接收者及从信息库中选择指定信息的功能。
邮件群发页面如图3-6所示,该页面用于实现将邮件同时发给多个接受者的功能;同时,为方便用户还提供了从客户及员工列表中选择接收者的功能。
3.5 文件夹组织结构
在编写代码之前,需要把系统中可能用到的文件夹先创建出来(例如创建一个名为img 的文件夹,用来保存程序中使用的效果图片),这样不但方便以后的开发工作,也可以规范软件的整体架构。本人在开发企业快信时,设计了如图3-7 所示的文件夹架构。在开发时,只需要将所创建的文件保存在相应的文件夹中就可以了。
4 系统详细设计
4.1 数据库设计
4.1.1 数据库分析
由于本系统是一个小型实用的信息群发系统,提供了名片夹和信息库的功能,用户可以将常用的人员保存到名片夹中,将常用的短语保存到信息库中,以方便使用。基于这个特点以及语言特点,本系统将采用MySQL 数据库作为底层数据库,以方便用户使用本系统。
4.1.2 数据库概念设计
根据以上对系统所作的需求分析和系统设计,规划出本系统中使用的数据库实体分别为类型实体、档案实体、常用短语实体、管理员实体。下面将给出几个关键实体的E-R 图。
档案实体
档案实体包括编号、客户名称、地址、邮政编码、所属区域、手机号码、邮件地址、银行账户、开户银行和联系人属性,档案实体的E-R 图如图4-1 所示。
短信实体
短信实体包括编号、收信人的手机号码、短信内容、发信人和发送时间属性,短信实体的E-R 图如图4-2 所示。
常用短语
常用短语实体包括编号、类型和内容,常用短语实体的E-R 图如图4-3 所示。
4.1.3 数据库逻辑结构设计
在数据库概念设计中已经分析了档案实体、常用短语实体和类型实体,这些实体对象是数据表结的基本模型,最终的数据模型都要实施到数据库中,形成整体的数据结构。图4-4 为通过PowerDesigner创建完成的数据库模。
表tb_customer 的表结构
字 段 名 | 数 据 类 型 | 是 否 为 空 | 是 否 主 键 | 默 认 值 | 描 述 |
---|---|---|---|---|---|
ID | int | No | Yes | ID(自动编号) | |
name | varchar(50) | No | NULL | 客户名称 | |
address | varchar(100) | No | NULL | 地址 | |
postcode | varchar(6) | No | NULL | 邮政编码 | |
area | varchar(20) | Yes | NULL | 所属区域 | |
mobileTel | avarchar(15) | No | NULL | 手机号码 | |
varchar(100) | No | NULL | 邮件地址 | ||
bankNo | varchar(30) | Yes | NULL | 银行帐号 | |
bankName | varchar(20) | Yes | NULL | 开户银行 | |
linkName | varchar(10) | No | NULL | 联系人 |
表tb_shortLetter 的表结构
字 段 名 | 数 据 类 型 | 是 否 为 空 | 是 否 主 键 | 默 认 值 | 描 述 |
---|---|---|---|---|---|
ID | int | No | Yes | ID(自动编号) | |
toMan | varchar(200) | No | NULL | 发信人手机号码 | |
content | varchar(500) | No | NULL | 短信内容 | |
fromMan | varchar(30) | No | NULL | 发信人 | |
sendTime | datetime | No | getdate() | 发送时间 |
4.2 公共模块设计
在开发过程中,经常会用到一些公共模块,如数据库连接及操作的类、字符串处理的类及Struts配置等,因此,在开发系统前首先需要设计这些公共模块。下面将具体介绍企业快信系统中所需要的公共模块的设计过程。
4.2.1 数据库连接及操作类的编写
数据库连接及操作类通常包括连接数据库的方法getConnection()、执行查询语句的方法executeQuery()、执行更新操作的方法executeUpdate()、关闭数据库连接的方法close().下面将详细介绍如何编写企业快信系统中的数据库连接及操作的类ConnDB。
定义ConnDB类
定义用于进行数据库连接及操作的类ConnDB,并将其保存到com.wgh.core包中,同时定义该类中所需的全局变量及构造方法。代码如下:
java
public class ConnDB {
public Connection conn = null; // 声明Connection对象的实例
public Statement stmt = null; // 声明Statement对象的实例
public ResultSet rs = null; // 声明ResultSet对象的实例
private static String propFileName = "/com/connDB.properties"; // 指定资源文件保存的位置
private static Properties prop = new Properties(); // 创建并实例化Properties对象实例
private static String dbClassName = " ";//定义保存数据库驱动的变量
private static String dbUrl = " ";
private static String dbUser = "sa";
private static String dbPwd = "";
public ConnDB() { //定义构造方法
try { //捕捉异常
//将Properties文件读取到InputStream对象中
InputStream in = getClass().getResourceAsStream(propFileName);
prop.load(in); // 通过输入流对象加载Properties文件
dbClassName = prop.getProperty("DB_CLASS_NAME");//获取数据库驱动
dbUrl = prop.getProperty("DB_URL", dbUrl); //获取URL
dbUser = prop.getProperty("DB_USER", dbUser); //获取登录用户
dbPwd = prop.getProperty("DB_PWD", dbPwd); //获取密码
} catch (Exception e) {
e.printStackTrace(); // 输出异常信息
}
}
}
将数据保存到资源文件中
为了方便程序移植,将数据库连接所需信息保存到properties文件中,并将该文件保存在com包中。connDB.properties文件的内容如下:
java
DB_CLASS_NAME=com.mysql.jdbc.Driver
DB_URL=jdbc:mysql://127.0.0.1:3306/db_expressLetter
DB_USER=sa
DB_PWD=
创建数据库连接
创建连接数据库的方法getConnection(),该方法返回connection对象的一个实例。getConnection()方法的实现代码如下:
java
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(dbClassName).newInstance();
conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
} catch (Exception ee) {
ee.printStackTrace();
}
if (conn == null) {
System.err.println("警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:"+ dbClassName+ "\r\n链接位置:" + dbUrl+ "\r\n用户/密码"+ dbUser + "/" + dbPwd);
}
return conn;
}
创建查询方法
创建执行查询语句的方法exccuteQuery(),返回值为Resultset结果集。executeQuery()方法的代码如下:
java
public ResultSet executeQuery(String sql) {
try { // 捕捉异常
conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
System.err.println(ex.getMessage()); // 输出异常信息
}
return rs; // 返回结果集对象
}
创建更新操作方法
创建执行更新操作的方法executeUpdate(),返回值为int型的整数,代表更新的行数。executeUpdate()方法的代码如下:
java
public int executeUpdate(String sql) {
int result = 0; // 定义保存返回值的变量
try { // 捕捉异常
conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
result = stmt.executeUpdate(sql); // 执行更新操作
} catch (SQLException ex) {
result = 0; // 将保存返回值的变量赋值为0
}
return result; // 返回保存返回值的变量
}
关闭数据库连接
创建关闭数据库连接的方法close()。close()方法的代码如下:
java
public void close() {
try { // 捕捉异常
if (rs != null) { // 当ResultSet对象的实例rs不为空时
rs.close(); // 关闭ResultSet对象
}
if (stmt != null) { // 当Statement对象的实例stmt不为空时
stmt.close(); // 关闭Statement对象
}
if (conn != null) { // 当Connection对象的实例conn不为空时
conn.close(); // 关闭Connection对象
}
} catch (Exception e) {
e.printStackTrace(System.err); // 输出异常信息
}
}
4.2.2 字符串处理类的编写
字符串处理类主要用于解决程序中经常出现的有关字符串处理的问题,包括将数据库中及页面中有中文问题的字符串进行正确地显示和对字符串中的空值进行处理的方法。其代码如下:
java
public class ChStr {
public static String toChinese(String strvalue) {
try {
if (strvalue == null) {
return "";
} else {
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK").trim();
return strvalue;
}
} catch (Exception e) {
return "";
}
}
//处理字符串中的空值
public static final String nullToString(String v, String toV) {
if (v == null || "".equals(v)) {
v = toV;
}
return v;
}
4.2.3 配置Struts
Struts框架需要通过一个专门的配置文件来控制,就是struts-config.xml。那么网站是怎么找到这个Struts的配置文件的呢?只要在web.xml中配置一下就可以了。具体实现代码如下:
```xml
在web.xml中配置Struts的配置文件,实际就是一个servlet的配置,即在配置serylet的config参数中定义struts的配置文件(包括相对路径)及在servlet的URL访问里使用后缀名。接下来的工作就是如何配置struts-config.xml文件。Struts-config.xml文件的关键代码如下:
```xml
<action name="managerForm" path="/manager" scope="request" type="com.wgh.action.Manager" validate="true">
<forward name="managerLoginok" path="/main.jsp" />
<forward name="managerQuery" path="/manager.jsp" />
<forward name="managerAdd" path="/manager_ok.jsp?para=1" />
<forward name="pwdQueryModify" path="/pwd_Modify.jsp" />
<forward name="managerDel" path="/manager_ok.jsp?para=3" />
<forward name="modifypwd" path="/main.jsp" />
<forward name="error" path="/error.jsp" />
</action>
… //此处省略其他<action >代码
```
4.3 主页设计
4.3.1 主页概述
管理员通过系统登录模块的验证后,可以登录到企业快信的系统主页。系统主页主要包括系统导航栏、显示区和版权信息3部分。其中,导航栏中的功能菜单将根据登录管理员的权限进行显示。例如,系统管理员tsoft登录后,将拥有整个系统的全部功能,因为他是超级管理员。系统主页的运行效果如图4-5 所示。
4.3.2 主页技术分析
在实现系统主页时,最关键的就是如何实现导航菜单.本系统中采用的方法是通过Javascript+CSS样式控制<div>标记来实现。其具体实现方法如下:
在要显示导航菜单的位置添加相应的主菜单项。具体代码如下:
在Javascript中指定各个子菜单的内容,并根据登录管理员的权限控制要显示的菜单项.关键代码如下:
```html
```
4.4 名片夹管理模块设计
4.4.1 名片夹管理模块概述
名片夹管理模块主要包括客户信息管理和员工信息管理,其中,客户信息管理包括查看客户列表、添加客户信息、修改客户信息和删除客户信息4个功能:员工信息管理包括查看员工列表、添加员工信息、修改员工信息和删除员工信息4个功能。
4.4.2 名片夹管理模块技术分析
名片夹管理模块主要包括客户管理和员工管理两部分,由于这两部分的买现方法大致相同,所以本节将以客户管理为例介绍名片夹管理模块。在实现客户管理时,需要编写客户管理对应的ActionForm类和Action实现类。下面将详细介绍如何编写客户管理的ActionForm类和创建客户管理的Action实现类。
编写客户管理的ActionForm类
在客户管理中,只涉及到一个数据表,即tb_customer(客户信息表),根据这个数据表可以得出客户管理的ActionForm类。客户管理的ActionForm类的名称为CustomerForm,具体代码如下:
java
public class CustomerForm extends ActionForm {
private String bankNo; //银行账号
private String area; //所属区域
private String email; //邮箱
private String address; //地址
private String mobileTel; //手机号码
private String name; //客户全称
private int ID; //编号
private String bankName; //开户银行
private String postcode; //邮政编码
private String linkName; //联系人
public String getBankNo() {
return bankNo;
}
public void setBankNo(String bankNo) {
this.bankNo = bankNo;
}
… //此处省略其他控制客户信息的get()和set()方法
}
创建客户管理的Action实现类
客户管理的Action实现类Customer继承了Action类.在该类中,首先需要在该类的构造方法中实例化客户管理的CustomerDAO类(该类用于实现与数据库的交互)。Action实现类的主要方法是execute(),该方法会被自动执行其本身没有具体的事务,是根据通过HttpservletRequest的getParamer()方法获取的action参数值执行相应方法的。客户管理的Action实现类的关键代码如下:
java
public class Customer extends Action{
private CustomerDAO customerDAO = null;
private ChStr chStr=new ChStr();
public Customer() {
this.customerDAO = new CustomerDAO();
}
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
String action = request.getParameter("action");
System.out.println("获取的查询字符串:" + action);
if (action == null || "".equals(action)) {
request.setAttribute("error","您的操作有误!");
return mapping.findForward("error");
}else if ("customerQuery".equals(action)) {
return customerQuery(mapping, form, request,response);
}else if("customerAdd".equals(action)){
return customerAdd(mapping, form, request,response);
}
else if("customerModify".equals(action)){
return customerModify(mapping, form, request,response);
}
request.setAttribute("error", "操作失败!");
return mapping.findForward("error");
}
…… //此处省略了该类中其他方法,这些方法将在后面的具体过程中给出。
}
4.4.3 查看客户信息列表的实现过程
查看客户信息列表使用的数据表:tb_customer
管理员登录后,选择“名片夹管理/客户管理”命令,进入到查看客户列表页面,在该页面中将以列表形式显示全部客户信息,同时提供添加客户信息、修改客户信息、删除客户信息的超链接。查看客户信息列表页面的运行效果如图4-6 所示。
在查看客户信息列表的方法customerQuery()中,首先调用CustomerDAO类中的query()方法查询全部客户信息,再将返回的查询结果保存到HttpServletRequest对象的CustomerQuery参数中.查看客户信息列表的方法CustomerQuery()的具体代码如下:
java
private ActionForward customerQuery(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) {
request.setAttribute("customerQuery", customerDAO.query(0));
return mapping.findForward("customerQuery");
}
查看客户信息列表使用的CustomerDAO类的方法是query()。该方法只有一个用于指定客户ID的参数id(如果记的值为null,则查询全部客户信息),然后将查询结果保存到List集合中并返回该集合的实例。Query()方法的具体代码如下:
java
public List query(int id) {
List customerList = new ArrayList();
CustomerForm cF = null;
String sql="";
if(id==0){
sql = "SELECT * FROM tb_customer";
}else{
sql = "SELECT * FROM tb_customer WHERE ID=" +id+ "";
}
ResultSet rs = conn.executeQuery(sql);
try {
while (rs.next()) {
cF = new CustomerForm();
cF.setID(rs.getInt(1));
cF.setName(rs.getString(2));
……//此处省略获取并设置其他属性的代码
cF.setLinkName(rs.getString(10));
customerList.add(cF);
}
} catch (SQLException ex) {}
finally{
conn.close();//关闭数据库连接
}
return customerList;
}
4.4.4 添加客户信息的实现过程
添加客户信息使用的数据表:tb_customer。
管理员登录后,选择“名片夹管理/客户管理”命令,进入到查看客户列表页面。在该页面中,单击“添加客户信息”超链接,进入到添加客户信息页面。添加客户信息页面的运行效果如图4-7 所示。
设计添加客户信息页面
添加客户信息页面主要用于收集输入的客户信息及通过自定义的Javascript函数验证输入信息是否合法,该页面中所涉及的表单元素如表4-3 所示。
表tb_customer的表结构
名 称 | 元 素 类 型 | 重 要 属 性 | 含义 |
---|---|---|---|
title | form | action="customer.do?action=customerAdd" method="post" onSubmit="return checkform(form1) | 表单 |
name | text | size=”50” | 客户全称 |
area | text | size=”30” | 所在区域 |
address | text | size=”60” | 地址 |
postcode | text | size=”6” | 邮政编码 |
linkName | text | size=”20” | 联系人 |
mobileTel | text | size=”30” | 手机号码 |
text | size=”50” | 邮箱 | |
bankName | text | size=”20” | 开户银行 |
bankNo | text | size=”30” | 银行帐号 |
Submit | submit | value=”提交” | “提交”按钮 |
Submit2 | reset | value=”重置” | “重置”按钮 |
Submit3 | button | onClick="window.location.href='customer.do?action=customerQuery'" value="返回" | “返回”按钮 |
修改客户的Action实现类
在添加客户信息页面中输入合法的客户信息后,单击“提交”按钮,网页会访问一个URL,即customer.do?action=customerAdd从该URL地址中可以知道添加客户信息模块涉及到的action的参数值为customerAdd,也就是当action=customerAdd时,会调用添加客户信息的方法customerAdd()。具体实现代码如下:
java
if("customerAdd".equals(action)){
return customerAdd(mapping, form, request,response);
}
在添加客户信息的方法customerAdd()首先需要将接收到的表单信息强制转换成ActionForm类型,并用获得指定属性的getXXX()重新设置该属性的setXXX()方法,然后调用customerDAO类中的insert()方法,将添加的客户信息保存到数据表中,并将返回值保存到变量ret中.如果返回值为l,表示信息添加成功,将页面重定向到添加信息成功页面:如果返回值为2,表示该客户信息己经添加,将错误提示信息“该客户信息己经添加!”保存到HttpServletRequest对象的error参数中,然后将页面重定向到错误提示信息页面;否则将错误提示信息“客户信息添加失败里”保存到HttpServletRequest对象的error参数中,并将页面重定向到错误提示页面.添加客户信息的方法customerAdd()的具体代码如下:
java
private ActionForward customerAdd(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response) {
CustomerForm customerForm = (CustomerForm) form;
//此处需要进行中文转码
customerForm.setName(chStr.toChinese(customerForm.getName()));
customerForm.setAddress(chStr.toChinese(customerForm.getAddress()));
customerForm.setArea(chStr.toChinese(customerForm.getArea()));
customerForm.setBankName(chStr.toChinese(customerForm.getBankName()));
customerForm.setLinkName(chStr.toChinese(customerForm.getLinkName()));
int ret = customerDAO.insert(customerForm);
System.out.println("返回值ret:"+ret);
if (ret == 1) {
return mapping.findForward("customerAdd");
} else if(ret==2){
request.setAttribute("error","该客户信息已经添加!");
return mapping.findForward("error");
}else {
request.setAttribute("error","添加客户信息失败!");
return mapping.findForward("error");
}
}
编写添加客户信息的CustomerDAO类的方法
添加客户信息使用的customerDAO类的方法是insert()。在insert()方法中,首先从数据表tb_customer中查询输入的客户全称是否存在,如果存在,将标志变最设置为2,否则将输入的信息保存到客户信息表中,并将返回值赋给标志变量,最后返回标志变量。Insert()方法的具体代码如下:
java
public int insert(CustomerForm cF) {
String sql1="SELECT * FROM tb_customer WHERE name='"+cF.getName()+"'";
ResultSet rs = conn.executeQuery(sql1);
String sql = "";
int falg = 0;
try {
if (rs.next()) { falg=2;} else {
sql = "INSERT INTO tb_customer (id,name,address,area,postcode,mobileTel,email,bankName,bankNo,linkName) values(null,'" + cF.getName() + "','" +cF.getAddress() +"','"+cF.getArea()+"','"+cF.getPostcode()+"','"+cF.getMobileTel()+"','"+ cF.getEmail()+"','"+cF.getBankName()+"','"+cF.getBankNo()+"','"+cF.getLinkName()+"')";
falg = conn.executeUpdate(sql);
System.out.println("添加客户信息的SQL:" + sql);
conn.close();
}
} catch (SQLException ex) { falg=0;}
return falg;
}
Struts-config.xml文件配置
在struts-config.xml文件中配置添加客户信息所涉及的<forward>元素。代码如下:
xml
<forward name="managerAdd" path="/manager_ok.jsp?para=1" />
4.4.5 删除客户信息的实现过程
在删除客户信息的方法customerDel()中,首先需要将接收到的表单信息强制转换成ActionForm类型,并用获得的记参数的值重新设置该ActionForm的setId()方法,再调用customerDAO类中的delete()方法,删除指定的客户信息,并根据执行结果将页面转到相应页面.删除客户信息的方法customerDel()的具体代码如下:
java
private ActionForward customerDel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
CustomerForm customerForm = (CustomerForm) form;
customerForm.setID(Integer.parseInt(request.getParameter("id")));
int ret = customerDAO.delete(customerForm);
if (ret != 0) {
request.setAttribute("error","删除客户信息失败!!");
return mapping.findForward("error");
} else {
return mapping.findForward("customerDel");
}
}
删除客户信息使用的CustomerDAO类的方法是delete()。在delete()方法中,将从客户信息表tb_customer中删除符合条件的数据,并返回执行结果。delete()方法的具体代码如下:
java
public int delete(CustomerForm customerForm) {
int flag=0;
try{
String sql = "DELETE FROM tb_customer where id=" + customerForm.getID() +"";
flag = conn.executeUpdate(sql);
}catch(Exception e){
System.out.println("删除客户信息时产生的错误:"+e.getMessage());
}finally{
conn.close(); //关闭数据库连
}
return flag;
}
在struts-config.xml文件中配置添加客户信息所涉及的<forward>元素。代码如下:
xml
<forward name="managerDel" path="/manager_ok.jsp?para=3" />
4.5 发送短信模块设计
4.5.1 发送短信模块功能概述
发送短信模块主要包括发送短信、查看发送日志两个功能。这两个功能之间的业务流程如图4-8 所示。
发送短信模块是企业快信系统的核心模块之一,操作员可以通过该模块对企业内部的所有或者部分员工,以短信的形式发送企业通知、工资条、具体技术、开会等信息,并且这个信息是群体发送的。
4.5.2 发送短信的实现过程
发送短信使用的数据表:tb_shortLetter、tb_shortIfo、tb_info、tb_infoType、tb_customer和tb_personnel。
管理员登录后,选择“发送短信”命令,进入到发送短信页面。在该页面中展开“名片夹”中的客户列表或员工列表,将显示相应的客户名称或员工姓名,单击指定的客户名称或员工姓名,系统会自动将该客户或员工的手机号码添加到右侧的“接收方手机号码”文本框中。如果用户想从信息库中选择常用短语直接添加到“短信内容”文本框中,可以先在“添加常用短语”下拉列表框中选择相应的类别,然后单击“确定”按钮,在打开的网页对话框中单击要添加的信息,即可将该信息添加到“短信内容”文本框中。短信内容填写完毕,单击“发送”按钮即可发送。发送短信页面的运行效果如图图4-9 所示。
4.5.3 发送短信模块技术分析
在实现发送短信模块时,需要编写发送短信模块对应的ActionForm类和Action实现类。下面将详细介绍如何编写发送短信模块的ActionForm类和创建发送短信的Action实现类。
编写收发短信的ActionForm类
在发送短信模块中,涉及到tb_shortLetter(短信表)、tb_customer(客户信息表)、tb_personnel(员工信息表)、tb_shortInfo(常用短语表)、tb_infoType(信息类型表)和tb_Parameter(系统参数表)6个数据表,与这6个数据表相对应的ActionForm类分别为ShortLetterForm、CustomerForm、PerrsonnelForm、shortInfoForm、InfoTypyForm、ParameterForm,这些类都是由属性及对应的getXXX()和setXX()方法组成,不再详细介绍。
创建发送短信的Action类
收发短信模块的Action实现类SendLetter维承了Action类.在该类中.首先需要在该类的构造方法中分别实例化收发短信模块的SendLetterDAO类、员工管理摸块的PersonnelDAO类、客户管理模块的CustomerDAO类和信息类别管理模块的InfoTypeDAO类。Action实现类的主要方法是execute(),该方法会被自动执行其本身没有具体的事务,是根据HttpServletRequest的getParameter()方法获取的Action参数值执行相应方法的。发送短信模块Action实现类的关健代码如下:
```java
public class SendLetter extends Action{
private SendLetterDAO sendLetterDAO = null;
private PersonnelDAO personnelDAO=null;
private CustomerDAO customerDAO=null;
private InfoTypeDAO infoTypeDAO=null;
private ChStr chStr=new ChStr();
public SendLetter() {
this.sendLetterDAO = new SendLetterDAO();
this.personnelDAO=new PersonnelDAO();
this.customerDAO=new CustomerDAO();
this.infoTypeDAO=new InfoTypeDAO();
}
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
String action = request.getParameter("action");
System.out.println("获取的查询字符串:" + action);
if (action == null || "".equals(action)) {
request.setAttribute("error","您的操作有误!");
return mapping.findForward("error");
}else if ("addLetter".equals(action)) {
return addLetter(mapping, form, request,response);
}else if("sendLetter".equals(action)){
return sendLetter(mapping, form, request,response);
}else if("historyQuery".equals(action)){
return queryHistory(mapping, form, request,response);
}
request.setAttribute("error", "操作失败!");
return mapping.findForward("error");
}
//编写短信页面应用的查询方法,用于查询收信人列表信息类别
private ActionForward addLetter(ActionMapping mapping, ActionForm form,
HttpServletRequest request,HttpServletResponse response) {
request.setAttribute("personnelQuery",personnelDAO.query(0));
request.setAttribute("customerQuery",customerDAO.query(0));
request.setAttribute("shortInfo",infoTypeDAO.query(0));
return mapping.findForward("addLetter");
}
//群发短信
private ActionForward sendLetter(ActionMapping mapping, ActionForm form,
HttpServletRequest request,HttpServletResponse response){
参考文献
- 商务网站后台系统的设计与实现(电子科技大学·蒋豪)
- 基于SMS的移动增值SWAD系统的开发与实现(天津工业大学·冯家兴)
- 基于MVC模式的物流信息管理系统设计与开发(电子科技大学·程泳)
- 物流货运平台的设计与实现(山东大学·任如坤)
- 企业人事管理系统的设计与开发(南昌大学·方小平)
- 农产品电子商务软件平台设计(电子科技大学·夏吉才)
- 基于JSP平台的信息发布系统的设计与实现(北京工业大学·徐慧君)
- B/S架构物流快递信息管理系统设计与实现(天津大学·邱旭祯)
- 物流货运平台的设计与实现(山东大学·任如坤)
- 百业联盟网站设计与实现(西安电子科技大学·张振杰)
- 通用Web信息服务平台的研究与设计(华北电力大学(北京)·王雅琴)
- 物流货运平台的设计与实现(山东大学·任如坤)
- 基于SSM的一个企业信息管理系统的设计与实现(华中科技大学·朱贵杰)
- 用JSP技术开发基于WEB的房地产网络管理信息系统(大连理工大学·齐鲲鹏)
- J2EE轻量级框架构建即时通讯系统(华中科技大学·谢军)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码港湾 ,原文地址:https://m.bishedaima.com/yuanma/35242.html