前言
1.1 实践目的和要求
为了将理论用于实践,巩固所学知识,提高自己发现问题并用所学知识分析问题和解决问题的能力,锻炼自己的工作能力,适应社会能力,自我管理能力,了解目前软件的应用情况,需求情况,发展方向及前景。
要求:
要求在实习过程中认真学习技术知识,能够理解当天的内容。对技术的理论知识要及时实践,认真完成项目要求的内容,探讨项目的解决方案以及进展。
二、实践内容
2.1 实践过程
过程主要分为以下三个阶段:
第一周:查阅资料,完成项目需求,撰写需求分析报告。
第二周:进行系统总体设计,划分功能模块,选择技术方案,撰写系统概要说明书。
第三周:进行系统详细设计和实现,并撰写详细设计说明书。
第四周:整合各功能模块,进行联调,并根据系统设计指标进行测试,完成整个系统开发,提交设计报告文档,进行成果展示和答辩。
2.2 实践内容
为数据库应用(如JSP,即RMI客户端),提供一个“数据库操作中间件”(RMI服务)。该中间件通过接口为应用提供增加记录、修改记录、删除记录和查询操作。Web应用(JSP)中增、改、删操作不用再书写SQL语句,而只专注于页面风格和操作逻辑,从而即使一个没学过数据库操作的程序员经过简单培训也能设计出操作数据库的应用;此外所有针对数据的操作都封装在RMI服务端,出现问题容易厘清问题原因。
4 软硬件平台
软件与硬件 | 最低配置 | 推荐配置 |
管理员端运行环境 | 网络浏览器(IE6及以上) | 最新版火狐浏览器 |
服务器操作系统 | Win7 | Win10 |
服务器JDK | JDK1.7 | 最新JDK |
服务器CPU | 双核3.2GHz及以上 | 四核3.2GHz及以上 |
服务器网络 | 以太网3Mbps及以上 | 以太网10Mbps及以上 |
客户端CPU | 双核1.6GHz及以上 | 双核3.2GHz及以上 |
2.3 主要成果
1.1.2各个阶段的时间进度大致安排
第一阶段:进行需求的分析和数据库的设计,完成了需求说明文档,并对项目的工作量进行了评估,确定了小组分工以及时间进度表。
第二阶段:完成了数据库的编写和约束的创建,完成了概要设计文档,每个人的分工进行了进一步的细化,同时统一了代码编写环境。
第三阶段:编写并整合详细设计文档,开始具体功能的编写。
第四阶段:配合小组对项目进行了整合。
1.2各阶段工作任务分解
阶段名称 | 任务名称 | 任务描述 | ||
第一阶段 | 需求分析 任务分配 | 1 完成需求分析文档 2 为队员分配任务 3 设计任务进度表 | ||
第二阶段 | 统一开发环境 统一数据库 前端编写 | 1 完成数据库的编写和约束的创建 2 完成前端界面 | ||
第三阶段 | 编写代码 | 1 完成项目具体功能的实现 2 整合项目 | ||
第四阶段 | 整合项目 | 1 测试项目 2 整理文档 3 PPT制作 |
2需求分析
2.1概述
为数据库应用(如JSP,即RMI客户端),提供一个“数据库操作中间件”(RMI服务)。该中间件通过接口为应用提供增加记录、修改记录、删除记录和查询操作。Web应用(JSP)中增、改、删操作不用再书写SQL语句,而只专注于页面风格和操作逻辑,从而即使一个没学过数据库操作的程序员经过简单培训也能设计出操作数据库的应用;此外所有针对数据的操作都封装在RMI服务端,出现问题容易厘清问题原因。
2.2数据库操作中间件主要功能
基本功能1:RMI服务端数据库连接接口。该接口可使“数据库操作中间件”连接当前主流的数据库,如Oracle、SQLServer、MySQL、Access等;参数要求:指示数据库类型,数据库相应的连接参数。 设计接口并实现该接口。
基本功能2:RMI服务端数据库查询语句接口。该接口传入组装好的字符串型的SQL查询语句,返回参数为字符串数组,该数组代表查询的结果。
基本功能3:RMI服务端数据库操纵语句接口。该接口传入参数为哈希表,哈希表中记录了查询的表名、字段名、操纵语句类型标志等;传出参数为成功和失败的布尔值。针对哈希表中的这些信息
- 多类型(insert、update、delete)操纵语句的自动拼装;
- 根据表名自动获取数据类型,从而在拼装SQL语句时决定数值是否加单引号;
- 提供事务确认和回滚处理;
- 操纵语句需要可带上where条件。
- 评价:进行主表(如学生信息表)、从表(学生消费流水表)的操作。
功能4:基于功能2,每个查询Web页面都对应一个JSP页面,这个JSP页面充当RMI客户端,获得查询记录;将页面浏览操作封装在中间件中,从而实现对单表记录分页面的浏览操作;在浏览页面的同时可选择记录进行删除或切换到修改页面,可切换到增加记录页面。
功能5:所有对记录增加、修改和删除的的Web页面都提交给一个“统一JSP”进行集中处理,这个JSP将充当RMI客户端角色,
2.3主要约束
1.需要提供相应的JSP应用来验证中间件效果增加、修改、删除、查询操作效果。
2.数据库类型支持当今主要流行的数据库。
3设计与实现
3.1概述
第一步定义远程接口和远程接口方法:ConnInterface.java
第二步实现远程接口和远程接口方法:Conn.java
第三步启动RMI注册服务并进行对象注册:ConnServer.java
第四步查找远程对象并调用远程方法:ConnClient.java
第五步在需要使用远程方法的*.jsp文件中用usebean动作实现ConnClient类对象,使用远程方法。
3.2设计要点
1.需要提供一个典型的“B/S(浏览器服务器)+RMI”设计架构。
2.需要制定相应的统一规则,规定Web页面中的字段命名,能识别主关键字、表名称以及执行动作,从而在进行数据表增、改、删操作提交给统一JSP时,具有完整的语义含义。
3. 统一JSP提供哈希表结构收集提交的字段名称和值对、表名对、增删改动作对。
4.JSP中的RMI客户端可以以类的形式或bean的形式来充当。
5.以给定的RMI的DEMO为例,扩展出相应的数据库操纵中间件。
3.3 主要程序文件
定义远程接口和远程接口方法:
ConnInterface.java
public interface ConnInterface extends Remote{
public Connection getMySQLConnect(String root,String pass) throws RemoteException;
public ResultSet executeQuery(String sql) throws RemoteException;
public void executeUpdate(String sql) throws RemoteException;
}
实现远程接口和远程接口方法
Conn.java
以实现连接数据库为例
public Connection getMySQLConnect(String root,String pass) throws RemoteException
{
//连接MySQL数据库的方法
Connection con=null;
String driverName="com.mysql.cj.jdbc.Driver";
String userName=root;
String userPasswd=pass;
String conURL="jdbc:mysql://localhost:3306/dbstudent?serverTimezone=GMT%2B8";
try
{
Class.forName(driverName);
System.out.println("Success loading MySQL Driver!");
}
catch(ClassNotFoundException e)
{
System.out.println("Error loading MySQL Driver!");
}
try
{
//连接数据库
con=DriverManager.getConnection(conURL,userName,userPasswd);
System.out.println("Success linking MySQL Driver!");
}
catch(SQLException e)
{
System.err.println(e.getMessage());
}
return con;
}
启动RMI注册服务并进行对象注册
ConnServer.java
以连接数据库方法为例
LocateRegistry.createRegistry(1099);
ConnInterface Conn = new Conn();
Naming.rebind("conn",Conn);
查找远程对象并调用远程方法
ConnClient.java
以实现连接数据库方法为例
public Connection Conn(String root,String pass){
Connection con=null;
try{
ConnInterface conn=(ConnInterface)Naming.lookup("conn");
//调用远程方法
con=conn.getMySQLConnect(root,pass);
}
catch(Exception e)
{
System.out.println("ConnClient exception: " + e);
}
return con;
}
在需要使用远程方法的*.jsp文件中用usebean动作实现ConnClient类对象,使用远程方法。
MySQL.jsp
以实现连接数据库为例
<jsp:useBean id="Conn" scope="page" class="conn.ConnClient"/>
<%
String user=request.getParameter("username");
String pass=request.getParameter("password");
Conn.Conn(user,pass);
out.print("MySQL数据库连接成功!");
%>
4.1.1数据库连接功能
(1)
(2)
(3)
4.1.2案例展示
4.1.3 增加
4.1.4编辑
(1)
(2)
4.1.6查找
(1)
(2)
4.1.6数据库操纵语句
三、总结
3.1 个人心得
完成了自己的任务,熟悉了RMI相关技术的使用,从一个项目的初期开始完成一个项目,体验了项目开发的整个流程。需求分析在一个项目中是非常重要的,后期的所有工作都在围绕着需求分析来做。后期编写类的函数和成员,要根据前期编写的项目概要设计和详细设计来编写。期间出现了许多编程方面的细节问题。