邮件信息表(mails): 表结构如表3.4。 表3.4 邮件信息表 字段名 字段类型 字段长度 说明 邮件编号 自动编号 4 主键,唯一 收信人编号 Varchar 50 用于保存收信人ID号 收信人姓名 Varchar 50 用于保存收信人姓名 发信人编号 Varchar 50 用于保存发信人ID 号 邮件标题 Varchar 8000 邮件内容 Integer 4 邮件发送日期 datetime 8 默认为“getdate()” 附件信息 Varchar 200 附件保存的地址和附件名称等 邮件标志 Integer 4 显示邮件状态 在数据表设计时,采用了适当的冗余来提高编程的效率,程序执行的速度以及程序的可读性。例如在邮件表(mails)中,除了用于与表相关联的收信人编号字段外还保留了收信人姓名字段,这样在单独处理该事务时,不需要通过收信人编号从相应表中读出对应的收信人姓名,极大的提高了运行速度和编程效率,因此适当的冗余是完全合理的。 3.4 安全设计 本系统在设计时从以下几个方面考虑系统的安全性。 首先,本系统采用MVC(即Model-View-Controller)模式来开发,实现了业务逻辑、显示逻辑、控制逻辑的分离。Model表示Web应用程序的业务逻辑,常用JavaBean,View表应用程序显示的界面性程序,用JSP实现,Controller是应用程序的控制逻辑,用Servlet来控制。其中,JSP相对其他Web开发语言具有相对较高的安全性,而且业务逻辑程序修改时,对其他程序没有影响,不容易产生错误,便于程序的扩展。 其次,登录本系统时都必须经过用户名、密码和验证码的验证,只有通过验证方可进入系统。并且在系统各个界面均设置了用户判断,用户不可通过直接在地址栏中输入页面路径进入该页面,或进入页面时间过长当session对象中保存值失效则不能进行相关操作,必须重新进入本系统,以防止用户忘记退出登录来保证安全。 4 系统详细设计 4.1 系统组件设计 组件在整个系统开发模式中的位置是处于数据库与页面之间。在整个应用过程中,我们都需要进行字符或数据的交互处理,因此十分必要对字符进行组件的封装设计,以方便系统各种处理的需要。 数据库处理组件是位于数据库最近的一层,这一层如何设计也是我们要详细介绍的,其他的组件都是在此组件之上进行开发设计的。因此该层组件至关重要。如果此层组件已经封装好了,可以直接调用了。 系统要实现的功能主要包括如下几个方面:后台管理用户登录、退出功能,新课程申请,课程查看、初期设置、修改、删除,课程模块内容添加、删除,课件上传、排序,讨论区留言的添加、回复、删除,邮件的查看、恢复、删除以及写新邮件。要实现这些功能,我们就需要对这些功能的细节部分进行抽象与封装,形成固定组件,供页面直接调用。 4.1.1 文件组成结构 此系统采用了标准的MVC架构,所有的JSP页面的请求都提交给一个Servlet控制器统一进行分发处理,然后再由该控制器进行页面跳转。
图4.1 程序目录结构图 文件目录结构如图4.1所示,在 WEB-INF目录下包含classes和lib两个子目录,classes目录下包含action、bean、com三个目录,bean目录下又包含了dbBean、dataBean、dealBean和logicBean四个目录。分别介绍如下: Action: 顾名思义,是执行动作的类文件。控制器在执行相关操作时会调用该目录下的相应类文件。该包下所有的类均继承自一个父类Action.java,该父类定义了操作动作的接口函数perform,这样在控制器调用该类的任何一个子类时都可以统一地写该函数来执行对应动作了。具体的可以参见API; dbBean: 封装了数据库连接、查询、删除和更新等操作的相关类,本系统中所有数据库操作的类均继承自该目录下的ConnBean.java类。 dataBean: 该包下的所有类文件,用于页面和控制器等类进行交互时存储所需要的所有数据的,相当于一个临时的全局变量,在一个操作动作的开始把所需要的数据加载进该包下相应的类,在执行操作时都提取相应类的数据,结束时释放该对象。该对象成为了一个数据的中转站,便于数据集中管理。 dealBean: 该包下封装了一个字符串处理类dealDtring.java,该类中包含了本系统所用到了所有字符串处理的函数。 logicBean: 包含了系统中的所有逻辑处理类。 4.1.2 底层组件 在图5.1所示的目录lib下放置的是已经打包成JAR文件的底层组件。通过这些封装好的组件,可以完成以下的功能:数据库连接和处理、文件上传与下载、Struts框架的实现。其中,jspSmartUpload是由www.jspSmart.com网站开发的一个可免费使用的全功能的文件上传下载组件,不仅可以实现文件地上传和下载,还可以限制文件的大小、上传文件的类型等等,我们在JSP中使用jspSmartUpload开发包时,实际上是调用了开发包中几个JavaBean类中的方法来实现文件的上串和下载功能的。Struts等开发包则是定义了Struts框架的核心类,标记库以及相关规则等,我们应用Struts框架所用的所有技术或方法均在这些开发包中有定义。 4.1.3 数据库组件 该组件是ConnBean.java,它完成了数据库的连接和相关操作。一般对数据库的操作有增加记录、更新记录、删除记录,还有查询所有的记录,查询某一条记录的属性数据。从实际界面操作的需求来说,这些是最基本的操作要求,因此在此组件中设计了这几个操作。该组件中定义了如下的功能函数: 完成初始化连接 Public ConnBean () 查询记录 Public ResultSet exeQuery (String sql) 更新与插入记录 Public void exeUpdate (String sql) 删除记录 Public void exeDelete (String sql) 关闭数据库连接 Public void close () 在执行数据库操作只需调用该组件中的相关函数即可。 4.1.4 数据操作组件集 该数据操作组件集同时由UserloginBo.java、TeacherInfoBo.java、NewClasssimBo.java、FileBo.java、ModelBo.java、SendMailBo.java、StudentInfoBo.java等组件组成,分别完成了用户登录、教师信息、课程信息、文件信息、模块信息、邮件信息以及学生信息等数据的相关操作。这些类文件的编写继承了组件ConnBean.class。根据继承的思想,这些组件同样拥有ConnBean.class中的类函数:exeQuery (String sql)、exeUpdate (String sql)、exeDelete (String sql)。以下选取了类似的关键功能函数: public void getoneinfo() 取得一条记录的信息 public List getopeninfo() 取得表中所有的记录 public void addnew() 增加表中数据记录 public void updatamodel() 修改表中数据记录 public void deleteinfo() 删除表中数据记录 接下来举例介绍功能函数的设计。 取得表中所有记录的函数的编程思想:先写出相应的SQL语句,然后调用ConnBean中的SQL查询函数exeQuery()。因为这些组件均是继承ConnBean的,所以可以直接使用exeQuery()。该查询函数返回一个ResultSet,然后从ResultSet中按顺序取出里面的数据记录,存入相应的Form(该函数保存于dataBean目录下)中,然后将这些Form放入一个List中,该List就是函数的返回值。如果没有相应的记录,则返回的List为空。下面给出的是取得所有申请课程信息记录的程序段: public List getclassinfo(String teachername,String tag){ …… sql="select * from classes where teachername='"+teachername+"'"; }else{ sql="select * from classes where teachername= '"+teachername+"' and tag='"+tag+"'"; } List list = new ArrayList(); try{ ResultSet rs=cn.exeQuery(sql); while(rs.next()){ NewClasssimForm clasiminfo = new NewClasssimForm(); clasiminfo.setClassID(rs.getString("classID")); clasiminfo.setTag(rs.getString("tag")); clasiminfo.setClassname(rs.getString("classname")); clasiminfo.setClassintr(rs.getString("classintr")); list.add(clasiminfo); } …… 4.2 主要功能模块设计 本节详细介绍了系统中几个主要功能模块的设计思想、流程及其代码,另附上相关界面。 4.2.1 登录模块设计 登录流程图如图4.2所示。
图4.2 登录流程示意图 中间判断代码程序段如下所示。 …… String trcheckpass =(String)session.getAttribute("rand"); //获取正确的验证码 if(checkpass.equals(trcheckpass)){ //验证码判断 String validated = ""; try{ UserLoginBo userLoginBo=new UserLoginBo(); validated =userLoginBo.validatePwd(username,password,type); if(validated.equals("true")){ //访问数据库成功 //保存正确信息 session.setAttribute("username",username); if(type.equals("teachers")){ return mapping.findForward("tesuccess"); //返回到教师管理界面 } else if(type.equals("manages")){ return mapping.findForward("masuccess"); //返回到管理员管理界面 } } else{ ActionError error=new ActionError("error.nosuchuser"); errors.add(ActionErrors.GLOBAL_ERROR,error); //保存出错信息 ……
本系统教师和管理员登录界面在设计时重点突出清晰简洁的风格,让使用者有耳目一新的感觉。登录界面上主要由一个表单、三个文本框、两个单选按钮和一个提交按钮组成,文本框主要是用来输入用户名、密码和验证码的,单选按钮则用于让用户选择其登录的身份。另外还有一些提示性文本和美化界面的图片以及正确的验证码图片。以管理员登录为例,当用户输入用户名、密码以及验证码,按下“提交”按钮后,将激活登录信息验证程序,首先进行验证码的验证,验证通过后由JDBC访问数据库,将登录信息与管理员表(manages)的信息进行比较验证,如果一致就进入相应的页面,否则报错并返回。教师和管理员登录界面命名为admin_login.jsp,该登录界面如图4.3所示。 图4.3 管理员与教师登录主界面 4.2.2 导航目录模块设计 本系统采用了框架形式开发,框架的左部分为整个管理界面的导航目录,目录下又细分为若干个子目录。以教师管理界面为例,(如图4.4所示)导航目录分为新课程开发、课程管理、消息管理、讨论区管理和用户信息管理五个部分,初始各目录为闭合状态,单击其中某一目录,则显示相应的子目录,其他子目录仍为隐藏状态,采用此设计的目的是为了提高版面布局合理性和界面美观。 图4.4 导航目录界面 具体实现方法为在页面中用java script编写了如下代码程序段。 <script> function hideAll() { for(i=0;i<odiv.length;i++) { odiv[i].style.display="none"; } }
function showObj(num) { if (odiv[num].style.display=="none") { hideAll(); odiv[num].style.display="inline"; } else { odiv[num].style.display="none"; } } </script> 首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5 相关论文
首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5