Chinaunix首页 | 论坛 | 博客
  • 博客访问: 415396
  • 博文数量: 112
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 905
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-05 21:14
文章分类

全部博文(112)

文章存档

2009年(3)

2008年(24)

2007年(55)

2006年(30)

我的朋友

分类: Java

2007-01-04 11:09:43

 遥感信息发布系统的设计

  遥感信息发布系统是基于地面站遥感数据信息的发布系统,包括了用户信息模块,数据浏览模块,数据订购模块等。

  1、系统的体系机构设计

  根据前面介绍可以看到Hibenate架构只具备数据持久化设计能力,而Struts架构则在模型设计方面能力薄弱,所以将二者结合起来使用,共同搭建系统结构实现MVC模型设计,可以达到二者优势互补,从而使系统设计具备低耦合性以及较高的可维护性和可扩展性。本系统的体系结构设计如图4所示:


图4 系统体系结构图

  本系统具有多个模块,但是各个模块的设计原理相同,其中用户登录设计典型地利用了Struts框架和Hibernate框架的设计,体现了两种架构结合的特点,下面以此实现为代表进行具体阐述。

  2、用户登录模块设计

  用户登录模块,即用户从浏览器输入个人信息,由系统在数据库中检索数据,然后验证用户信息,如果验证成功登陆到系统界面,否则,提示用户信息出错。

  2.1 数据持久层设计

  数据持久层基于Hibernate架构,采用了DAO设计模式。在持久层设计中,包括了以下三个重要设计步骤:

  首先,把用户信息封装为VO(Value Object)。VO是一组值对象,只包含了一些属性和getter/setter方法的POJO(Plan Old Java Bean)。典型设计如下:

public class OrAdmin implements Serializable{
 private String adminname;
 public String getAdminname()
 { return adminname; }
 Public void setAdminname(String adminname)
 { this.adminname = adminname; }
 ……
}

  其次,采用了DAO设计模式和抽象工厂设计模式,完成了 DAO工厂和Hibernate 数据库操作的具体实现,典型设计如下:

public abstract class DAOFactory {
 public static DAOFactory getInstance() {}
 public abstract AdminDAO createAdminDAO();
}
public class AdminDAOImpl implements AdminDAO {
 public OrAdmin getAdmin(String adminName) {
  try {
   Session s =HibernateUtil.currentSession();
   Query query = s.createQuery("from OrAdmin as oa whereoa.adminname='"+adminName+"'");
  }……
  return null;
 }
}

  最后,利用了Hibernate的配置文件完成从应用程序到数据库的映射,典型设计如下:

<session-factory >
 <property name="connection.driver_class">
  org.postgresql.Driver
 </property>
 <property name="connection.url">
  jdbc:postgresql://127.0.0.1:5432/DBInfo
 </property>
 <property name="dialect">
  org.hibernate.dialect.PostgreSQLDialect
 </property>
 <mapping resource="OrAdmin.hbm.xml" />
 ……
</session-factory>

  在该层的设计中,VO的信息封装体现了面向对象设计编程思想;DAO的设计模式和抽象工厂模式减弱了上层调用和具体实现之间的耦合;Hibernate配置实现了数据库高移植性,只需要改变Hibernate配置文件,不用修改程序设计就可以完成不同数据库之间的更换。

  2.2 业务逻辑层设计

  业务逻辑层包含了供客户端程序调用的业务逻辑规则,以帮助客户端完成业务操作。该层采用了业务代理、DAO和抽象工厂设计模式,典型设计如下:

public class ManagerFactory {
 public static AdminManager
 createAdminManager(){
  return new AdminManagerImpl();
 }
}
public interface AdminManager {
 OrAdmin getAdmin(String username);
}
public class AdminManagerImpl implements
AdminManager{
 private AdminDAO dao =DAOFactory.getInstance().createAdminDAO();
 public OrAdmin getAdmin(String username)
 { return this.dao.getAdmin(username); }
}

  在该层的设计中,业务代理、DAO和抽象工厂设计模式的使用,使业务逻辑更加灵活,如果具体业务发生变化,在表示层和数据持久化层改变很小就可以完成改变,这种设计增强了系统的可维护性和灵活性。

  2.3 表示层设计

  表示层基于Struts框架,采用了JSTL标签库技术。在表示层的设计中,主要包括了以下三个重要设计步骤:

  首先,建立用于用户浏览的JSP视图页面,其中最重要的是设计出封装用户表单信息的ActionForm。ActionForm是Struts架构的重要组件,是包含了一些属性和getter/setter方法的POJO,典型设计如下:

public class AdminActionForm extends ActionForm {
 private String adminname;
 public String getAdminname()
 { eturn adminname;}
 public void setAdminname(String adminname)
 { his.adminname = adminname; }
 ……
}

  其次,搭建用户请求和业务逻辑之间的桥梁——Action组件,该组件负责把用户信息和具体的业务逻辑处理联系在一起,典型设计如下:

public class AdminAction extends Action {
 AdminActionForm adminActionForm =(AdminActionForm) actionForm;
 adminname=adminActionForm.getAdminname();
 adminpasswd=adminActionForm.getAdminpd();
 AdminManager adminManager=ManagerFactory.createAdminManager();
 OrAdmin orAdmin=adminManager.getAdmin(adminname);
 if(orAdmin == null||!orAdmin.getAdminpasswd().equals(adminpasswd)){
  servletRequest.getSession().setAttribute("loginfail","Invalid name or password. Login failture");
  return actionMapping.findForward("logout");
 }else{
  servletRequest.getSession().setAttribute("adminname",adminname);
  return actionMapping.findForward("success"); 
 }
}

  最后,通过Struts配置连接ActionForm和Action,完成一个业务设计,典型配置如下:

<form-beans>
 <form-bean name="adminActionForm" type="com.rice.web.struts.from.AdminActionForm" />
</form-beans>
<action-mappings>
 <action name="adminActionForm" path="/adminAction" scope="session" type="com.
rice.web.struts.action.AdminAction"validate="false">
  <forward name="success" path="/manager/main.jsp" />
  <forward name="logout" path="/manager/index.jsp" />
 </action>
</action-mappings>

  该层设计中,JSTL标签的使用简化了JSP页面,使页面设计和表示层业务逻辑分离,提高了应用程序的可维护性;Struts架构的引入,使应用程序实现了MVC设计模式,结构清晰,提高了系统的可扩展性。

  总结

  本文介绍了MVC设计模式以及Struts和Hibernate框架的工作原理,利用了他们的优点互补,有机地将Struts+Hibernate框架结合起来构建了一个遥感信息发布系统,克服了传统Web信息系统的缺点,提高了系统的可维护性、可扩展性,降低了系统地耦合性
阅读(3191) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~