XX基金网站系统架构.doc_第1页
XX基金网站系统架构.doc_第2页
XX基金网站系统架构.doc_第3页
XX基金网站系统架构.doc_第4页
XX基金网站系统架构.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XX基金网站系统架构文档文件状态: 草稿 正式发布 正在修改文件标识:当前版本:1.0作 者:XXX完成日期:20XX-XX-XX版 本 历 史版本/状态作者参与者起止日期备注1.0XX20XX-XX-XX初始化版本1. 系统硬件架构2. 系统软件配置网站系统:Apache + resin + oracle社区:Apache + php + mysql具体应用服务器可以选择resin、websphere、weblogic等java容器 3. 、系统软件架构 业务逻辑层数据访问层遗留系统视图层数据库服务器 整个网站系统的框架都是采用如上图所示的三层结构,前台和后台的实现稍微有些不同。后台管理上,在视图层,采用的是MVC框架webwork,在数据访问层采用的是TableModel数据访问框架。在前台页面展示上,考虑到性能的原因,并没有采用webwork,而是采用的URL和类之间的直接映射技术。做到零配置。1. 视图层(webwork)WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。WebWork主要由xwork和WebWork两个基础项目构成。 Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类), session(会话)application(应用程序)范围的映射,request请求参数映射。WebWork2支持多视图表示,视图部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等。2. 数据访问层(TableModel)TableModel是一个基于JDBC的数据访问库,其是在JDBC上层的一个抽象封装,使用户能够脱离复杂的JDBC调用方式,以简单API方式提供数据访问的接口。简化数据访问的复杂度,使开发人员能更加专注于业务逻辑的开发。TableModel采用C3P0连接池库,以配置文件的方式可以支持同时连接多种不同的数据库。 前台框架开发说明:前台框架简化了对servlet管理方式。与普通jsp+servlet+javabean的框架开发方式不同,本框架去除了生成servlet需在web.xml配置的方式,而采取url控制反转机制,只需要在表单的路径中指定相应的类和方法,便可以成功提交表单,完成对数据的增、删、改、查。使用这种方法有以下两点好处:u 方便代码维护人员对类和方法的管理。在普通的开发框架中(如struts),如果想完成表单的提交,需要生成多个servlet,每个servlet都需要在一个或多个*.xml文件里面配置其路径和功能。操作繁琐,管理重复、复杂,对代码的维护带来或多或少的麻烦。u 对网站功能的快速开发带来的方便。使用本框架,只需对jsp、action、server进行代码的编写,便可以完成数据的提交和查找。 详细说明:1. (V层)在生成的*.jsp文件中,对表单的URL指定相应类的方法。如:form action=” /cgi-bin/filename/ClassName?function=functionName” method=post其中“/cgi-bin/filename/”是指定类所存放的路径,“ClassName”是类的名称,“functionName”是类中所编辑的方法。2. (C层)生成的Class必须继承“com.thinkive.base.cgi.BaseAction;”。如:public class ClassName extends BaseAction。BaseAction方法对请求和响应的方法进行了重写。而Class中的每个被请求和响应的方法名前必须加上“do(必须为小写)”。如:public ActionResult doFroWard。这里有一点需要说明,在提交的表单url中“ClassName”后面可以不用跟上方法的名称,但这个方法的名称在类中必须为“doDefault”,表示为默认缺省的方法。在每个类中,这个方法名只能出现一次。每个需要返回请求结果的方法的返回类型必须为ActionResult,返回方式为:return new ActionResult(/WEB-INF/fileName/*.jsp,true);其中“/WEB-INF/fileName/”为jsp所在的路径,“*.jsp”为jsp的名称。而后面参数为“true”时表示允许带参数跳转,反之为不允许。3. (M层)生成对数据库操作的类必须继承“com.cz.service.service. BaseService”,而且必须实现数据源方法:private JdbcTemplate getJdbcTemplate() JdbcTemplate jdbcTemplate = getJdbcTemplate(Constants.DB_ORACLE_WEB);return jdbcTemplate;每个方法返回的类型也有不同,返回的类型一般为DataRow、List和DBPage。返回类型为DataRow的方法表示是返回数据的每一列。而List表示返回每行数据。返回类型为DBPage表示对页面数据进行分页处理。具体实现的方法如下:DataRow:public DataRow functionName() String sql = select * from tableName ; return getJdbcTemplate().queryMap(sql); List:public List functionName() JdbcTemplate jdbcTemplate = this.getJdbcTemplate(Constants.DB_ORACLE_CTRL1); String sql = select * from tableName; return jdbcTemplate.query(sql); DBPage:public DBPage functionName(int curPage, int rowOfPage,String param) StringBuffer sqlBuf = new StringBuffer(); sqlBuf.append(select * from tableName”); if(!.equals(param) sqlBuf.append( and param=+ param +); sqlBuf.append( order by id desc );return getJdbcTemplate().queryPage(sqlBuf.toString(), curPage, rowOfPage);返回类型为DBPage的方法第一个餐数为当前第几页,第二个参数为每页多少条记录,第三个参数为数据中某字段所需的参数。l 特别说明:考虑在开发时代码的统一规范性,与数据交互的M层类必须以Service结尾,如:XXService.java。“XX”为类的名称+“Service” 后台框架开发说明:CMS管理系统与前台系统略有所不同,因为涉及到某些操作权限的管理,所以需要在left.jsp(树形结构菜单)和xwork.xml里面进行简单的配置。并且在jsp上进行代码编写时需要用到webwork的自定义标签库,页面上必须包含“header.jsp”,如:“”。标签库使用方法:  没有数据 以上标签使用的意思为:判断返回的数据是否为空,如果为空就在表格内打印“没有数据”。二、举例说明:具体操作步骤如下:1. 在xwork.xml里面设置action类和jsp路径,并设置其相应的名称: /WEB-INF/views/fileName/default.jsp action标签里面的name属性是给生成的类起一个名称,class属性是类的路径。result标签内的name属性是指定*.jsp的名称,和中间为*.jsp的路径。2. 在left.jsp(树形结构菜单)中是针对某些操作权限的配置,操作步骤如下:(1) 在if (SysLibrary.isSystemAdmin(session) | SysLibrary.existModulePermission(session, 0001)中配置应用栏目的权限流水号,0001为权限流水号。(2) 配置菜单被点击后跳转的路径 文章管理“”是指如果用户拥有此栏目权限时进入if内。第一个标签是指点击图片时的跳转路径,标签内的href属性要和xwork.xml中的标签的name属性相匹配,并在后面加上“.action”。第二个标签是点击文字时所跳转的路径,使用方法和图片的相同。3. (V层)在生成*.jsp页面中首先包含“”。其提交表单的跳转方式也和前台系统略有不同,action的路径应该为在xwork.xml中配置的类的名称加上“.action”。如需要跳转到这个类中的指定的方法,应在后面加上“?”和“function=方法名.action”,如:“ClassNameManageAction.action?function=functionName”。如还需带参数跳转,只用在后面加上“&”和“参数名=参数”,如“ClassNameManageAction.action?function=functionName¶mName=param”。4. (C层)根据代码的统一规范性,后台管理程序中生成的action类需要在类名后加上“ManageAction”(推荐使用)。并且生成的action类必须继承“com.thinkive.cms.web.action. BaseAction”,还需要在类中申明“private HashMap dataMap = new HashMap();private DynaForm form = new DynaForm();”这两个对象。Action类中的被请求和响应的方法必须在方法名称前加上“do(小写,使用方法和前台系统相同)”。也可以使用缺省的方法名“doDefault”,但这个方法名只能在这个action类中出现一次。如果需要带数据返回*.jsp页面,其方法的返回类型必须为String,如:“return default ;”,default必须和xwork.xml中的标签的name属性相同,并把参数设置到request、response或form中,如:“form.putAll(data)”。5. (M层)同前台程序中的service类使用方法相同,请参考前台系统开发步骤说明。4. 、TableModle开发指南简介TableMoel是一个基于JDBC的数据访问库,其是在JDBC上层的一个抽象封装,使用户能够脱离复杂的JDBC调用方式,以简单API方式提供数据访问的接口。简化数据访问的复杂度,使开发人员能更加专注于业务逻辑的开发。TableModel采用C3P0连接池库,以配置文件的方式可以支持同时连接多种不同的数据库。第三方类库 TableModel使用了Log4j、C3P0等第二方库开发步骤定义数据源连接文件(datasource.xml)此文件用于配置系统中需要使用的数据源,在同一个系统中可以同时配置多个数据源。但只有一个是属于缺省的数据源。 在系统中有多个数据源的情况下,缺省数据源必须使用default属性进行说明。但在系统中只有一个数据源的情况下,此属性可以忽略。 系统中的所有数据源的连接池都使用C3P0实现,每一个datasource都必须要指定id,否则会跳过此定义,不会建立相应的数据源范例 net.sourceforge.jtds.jdbc.Driver jdbc:jtds:sqlserver:/00:1433/ThinkCMS sa 123456 1 1 10 60000 100 3000 2 net.sourceforge.jtds.jdbc.Driver jdbc:jtds:sqlserver:/00:1433/ThinkService sa 123456 1 1 10 60000 100 3000 2 此文件要放到系统包的根目录。如果是使用Web Server发布后要放到WEB-INF/classes/目录下。范例说明 以上文件写义了两个数据源ThinkCMS和ThinkService 每个数据源节中有定义数据源的属性数据。 属性的名称和C3P0连接池的配置名称一样。配置类Configure此类主要用于返回配置文件中配置的数据源public final class Configure 。 /* * 获得缺省数据源 * * return */ public DataSource getDataSource() /若只有一个数据源,则直接返回相应的数据源 if (dataSourceMap.size() = 1) Object dataSourceArray = dataSourceMap.values().toArray(); return (DataSource) dataSourceArray0; /若有多个数据源,则查找缺省数据源 if (StringHelper.isEmpty(_default) return null; return getDataSource(_default); /* * 根据datasource.xml文件中配置的数据源ID,得到对应的数据源对象 * * param id * return */ public DataSource getDataSource(String id) return (DataSource) dataSourceMap.get(id); 连接管理器ConnManager主要用于返回相应的数据库连接public final class ConnManager private static Logger logger = Logger.getLogger(ConnManager.class); private static Configure configure = Configure.getInstance(); /* * 根据datasource.xml文件中配置的数据源ID,得到对应的数据库连接 * * param id 数据源ID * return conn */ public static Connection getConnection(String id) try DataSource dataSource = configure.getDataSource(id); Connection conn = dataSource.getConnection(); return conn; catch (SQLException ex) throw new JdbcException(ex); /* * 获得缺省的数据源的数据库连接 * * return conn */ public static Connection getConnection() try DataSource dataSource = configure.getDataSource(); Connection conn = dataSource.getConnection(); return conn; catch (SQLException ex) throw new JdbcException(ex); /* * 开始数据库事务 * param conn */ public static void begin(Connection conn) try if (conn != null & !conn.isClosed() conn.setAutoCommit(false); catch (Exception ex) throw new JdbcException(ex); /* * 提交数据库事务 * param conn */ public static void commit(Connection conn) try if (conn != null & !conn.isClosed() mit(); catch (Exception ex) throw new JdbcException(,ex); /* * 回滚数据库事务 * param conn */ public static void rollback(Connection conn) try if (conn != null & !conn.isClosed() conn.rollback(); catch (Exception ex) throw new JdbcException(,ex); /* * 关闭数据库连接 * param conn */ public static void close(Connection conn) try if (conn != null & !conn.isClosed() conn.close(); catch (Exception ex) throw new JdbcException(,ex); 数据库会话工厂SessionFactory此类用于打开到数据的会话public final class SessionFactory /* * 根据datasource.xml文件中配置数据源ID,得到对应的会话对象 * * param id 数据源ID * return */ public static Session getSession(String id) Connection conn = ConnManager.getConnection(id); return new SessionImpl(conn); /* * 获得缺省的数据源会话对象 * * return */ public static Session getSession() Connection conn = ConnManager.getConnection(); return new SessionImpl(conn); 数据访问接口Session此接口主要用于建立起与数据库的会话连接,有一个通用的实现SessionImpl类,封装了对所有数据库的标准SQL92语句的支持。此类定了所有与数据库进行交互的方法。包含增加、更新、删除、查询、分页查询等方法。具体使用参考相应的方法public interface Session /* * 返回会话中的Connection * return */ public Connection connection(); /* * 返回数据库的类型,类型定义在DataBaseType中 * return */ public int getDataBaseType(); /* * 在相应的表中增加一条记录 * * param tableName 需要添加的表名 * param data 需要添加的信息 * return */ public void insert(String tableName, DataRow data); /* * 更新表中的一条记录信息 * param tableName 需要更新的表名 * param data 需要更新的信息 * param identify 识别字段的名称 * param identifyValue 识别字段的值 * return */ public void update(String tableName,DataRow data,String identify,Object identifyValue); /* * 删除表中的一条记录 * param tableName 需要删除的记录的表名 * param identify 识别字段的名称 * param identifyValue 识别字段的值 * return */ public void delete(String tableName,String identify,Object identifyValue); /* * 执行指定的sql并返回更新的记录数。 * * param sql SQL语句 * return 更新的记录数 */ public int update(String sql); /* * 执行指定的sql并返回更新的记录数。 * * param sql SQL语句 * param args 参数中的值 * return 更新的记录数 */ public int update(String sql, Object args); /* * 批量执行更新并返回每次的更新记录数 * * param sqlArray SQL语句数组 * return 每次执行更新的记录数数组 */ public int batchUpdate(String sqlArray); /* * 批量执行更新并返回每次的更新记录数 * * param sql SQL语句 * param args 参数中的值 * return */ public int batchUpdate(String sql, Object args); /* * 查询一个整型结果。 * * param sql SQL语句 * return 查询的第一行的第一个字段的整型值。 */ public int queryInt(String sql); /* * 查询一个整型结果。 * * param sql SQL语句 * param args 参数中的值 * return 查询的第一行的第一个字段的整型值。 */ public int queryInt(String sql, Object args); /* * 返回一个数字数组 * * param sql SQL语句 * return 查询的多条记录第一个字段的整型值。 */ public int queryIntArray(String sql); /* * 返回一个数字数组 * * param sql SQL语句 * param args 参数中的值* * return 查询的多条记录第一个字段的整型值。 */ public int queryIntArray(String sql, Object args); /* * 查询一个长整型结果。 * * param sql SQL语句 * return 查询的第一行的第一个字段的长整型值。 */ public long queryLong(String sql); /* * 查询一个长整型结果。 * * param sql SQL语句 * param args 参数中的值 * return 查询的第一行的第一个字段的长整型值。 */ public long queryLong(String sql, Object args); /* * 返回一个长整型数组 * * param sql SQL语句 * return 查询的多条记录第一个字段的长整型值。 */ public long queryLongArray(String sql); /* * 返回一个长整型数组 * * param sql SQL语句 * param args 参数中的值* * return 查询的多条记录第一个字段的长整型值。 */ public long queryLongArray(String sql, Object args); /* * 查询一个字符串结果。 * * param sql SQL语句 * return 查询的第一行的第一个字段的字符串值。 */ public String queryString(String sql); /* * 查询一个字符串结果。 * * param sql SQL语句 * param args 参数中的值 * return 查询的第一行的第一个字段的字符串值。 */ public String queryString(String sql, Object args); /* * 返回一个字符串数组 * * param sql SQL语句 * return 查询的多条记录第一个字段的字符串值。 */ public String queryStringArray(String sql); /* * 返回一个字符串数组 * * param sql SQL语句 * param args 参数中的值 * return 查询的多条记录第一个字段的字符串值。 */ public String queryStringArray(String sql, Object args); /* * 查询一条记录,返回类型为DataRow, * * param sql SQL语句 * return 查询的第一行的结果,反回结果中的字段名都为小写 */ public DataRow queryMap(String sql); /* * 查询一条记录,返回类型为DataRow。 * * param sql SQL语句 * param args 参数中的值 * return 查询的第一行的结果,反回结果中的字段名都为小写。 */ public DataRow queryMap(String sql, Object args); /* * 查询一个对象列表结果,列表中的每一行为一个DataRow。 * * param sql SQL语句 * return 查询所有结果列表。 */ public List query(String sql); /* * 查询一个对象列表结果,列表中的每一行为一个DataRow。 * * param sql SQL语句 * param args 参数中的值 * return 查询所有结果。 */ public List query(String sql, Object args); /* * 查询一个对象列表结果,列表中的每一行为一个DataRow。 * * param sql SQL语句 * param rows 返回的记录数量 * return 查询固定的记录数 */ public List query(String sql, int rows); /* * 查询一个对象列表结果,列表中的每一行为一个DataRow。 * * param sql SQL语句 * param args 参数中的值 * param rows 返回的记录数量* * return 查询固定的记录数 */ public List query(String sql, Object args, int rows); /* * 查询一个对象列表结果,列表中的每一行为一个DataRow。 * * param sql SQL语句 * param startRow 起始的行数 * param rows 记录的数量 * return 查询所有结果并。 */ public List query(String sql, int startRow, int rows); /* * 查询一个对象列表结果,列表中的每一行为一个DataRow。 * * param sql SQL语句 * param args 参数中的值 * param startRow 起始的行数 * param rows 记录的数量 * return 查询所有结果并。 */ public List query(String sql, Object args, int startRow, int rows); /* * 查询一个分页列表结果。返回的数据的每一行数据类型为DataRow * * param sql SQL语句 * param curP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论