監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉
OA系統(tǒng)二次開(kāi)發(fā)

當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普服務(wù)體系 > OA系統(tǒng)二次開(kāi)發(fā)

泛普協(xié)同OA辦公底層包開(kāi)發(fā)指南

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

 
1.     引言... 4
1.1       概述... 4
1.2       定義... 4
2.     底層包應(yīng)用及范例... 4
2.1       最基本的繼承類(lèi)... 4
2.2       怎樣記錄日志... 5
2.3       怎樣獲取屬性文件的值... 8
2.4       怎樣獲取系統(tǒng)的運(yùn)行目錄... 10
2.5       怎樣訪問(wèn)和運(yùn)行數(shù)據(jù)庫(kù)腳本... 11
2.6       如何上傳一個(gè)文件... 15
2.7       如何訪問(wèn)已經(jīng)上傳的文件... 19
2.8       如何使用緩存提高系統(tǒng)效率... 20
2.9       其它底層類(lèi)基本方法... 29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

1.    引言

 

1.1      概述

 
本文檔為泛普協(xié)同OA商務(wù)系統(tǒng)(泛普OA系統(tǒng))程序員開(kāi)發(fā)指導(dǎo)文檔,講述了開(kāi)發(fā)底層工具包的應(yīng)用,常用功能的開(kāi)發(fā)。
 
 

2.    底層包應(yīng)用及范例

 
本章對(duì)泛普OA系統(tǒng)   OA系統(tǒng)的底層工具包進(jìn)行講解,開(kāi)發(fā)人員可以從這里學(xué)到怎樣利用底層的工具包進(jìn)行開(kāi)發(fā)
 
 

2.1      最基本的繼承類(lèi)

 
泛普OA管理系統(tǒng)中每一個(gè)java bean 都需要繼承 泛普OA系統(tǒng).general.BaseBean 類(lèi) 。這個(gè)類(lèi)實(shí)現(xiàn)了記錄日志和獲取屬性文件值的方法。繼承這兩個(gè)類(lèi)的其它類(lèi)可直接應(yīng)用這些方法來(lái)記錄日志,獲取屬性文件某一個(gè)屬性的值。方法的實(shí)現(xiàn)見(jiàn)后面的例子。
繼承的例子如下:
 
java bean 的繼承
 
public class ResourceComInfo extends BaseBean {
 
       public void doSomething() {          //某一個(gè)方法
              方法的處理………
              writeLog(s) ;       // 寫(xiě)日志
       }
}
 
 
 
 
 
 
 
 

2.2      泛普OA辦公系統(tǒng)怎樣記錄日志

 
繼承了泛普OA系統(tǒng).general.BaseBean  ,可以直接使用 writeLog方法記錄日志信息。注意這里是使用,而不是調(diào)用,因?yàn)檫@個(gè)方法是這兩個(gè)被繼承類(lèi)中的方法。
 
注意writeLog 方法的使用:
/**
* 將某個(gè)對(duì)象寫(xiě)入Log文件
* @param obj 被寫(xiě)入的對(duì)象
*/
  public void writeLog(Object obj)
 
我們看到,可以被記入日志的是任意一個(gè)java對(duì)象。這些java對(duì)象將被自動(dòng)轉(zhuǎn)換成字符串對(duì)象(String)記入到日志文件中。日志文件將每天生成一個(gè),以日志文件名稱中的日期來(lái)區(qū)別,比如:泛普OA系統(tǒng)_20030812.log,代表2003年8月12日的日志。當(dāng)天的日志為泛普OA系統(tǒng).log。每一條日志的記錄格式為 :
YYYY.MM.DD-HH:MM:SS 記錄日志的類(lèi)名 – 日志信息
比如:
2003.03.11-06:52:05 泛普OA系統(tǒng).datacenter.OutReportResult - sql is  select ROUND(sum(F_sksr),5) from T_yyrb A , CRM_CustomerInfo where  CRM_CustomerInfo.id=A.crmid  and CRM_CustomerInfo.id in(5)  and A.reportdate >= '2004-01-10'  and A.reportdate <= '2004-03-10'  and A.inputstatus >= '0' and A.inputstatus<>'9'  and A.modtype='0'
 
日志的記錄有兩種模式,第一種為調(diào)試模式,第二種為在線模式。在第一種模式下,所有的java對(duì)象都會(huì)記錄到日志文件中,包括調(diào)試信息,在第二種模式下,只有為Exception (異常)的對(duì)象才會(huì)記錄到日志文件中。模式的設(shè)置在/泛普OA系統(tǒng)/WEB-INF/ log4jinit.properties 屬性文件中的log4j.rootLogger 屬性來(lái)指定,如下:
 
log4j.rootLogger = INFO,A2
 
#if you want to open the trace from open source,just add   #  ahead of line
log4j.logger.org = ERROR
log4j.logger.uk = ERROR
 
 
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.DatePattern='_'yyyyMMdd'.log'
#don't modify the file property
log4j.appender.A2.File=@泛普OA系統(tǒng)
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c  - %m%n
上面的日志表明將所有的信息答應(yīng)到文件日志文件中 ,其中日志的模式為:
#FATAL 0
#ERROR 3
#WARN 4  只有WARN,ERROR,FATAL輸出
#INFO 6   所有的log都輸出
#DEBUG 7
記錄日志的例子如下:
public class ResourceComInfo extends BaseBean {
 
private void setResourceInfo() throws Exception{
   
try{
   
業(yè)務(wù)處理過(guò)程……….
 
String debugInfo = "This is test" ;
// 在調(diào)試模式下將會(huì)記入日志文件
                        writeLog("debug info is "+ debugInfo) ;          
                 }
                 catch(Exception e) {
                     // 在任何模式下出現(xiàn)異常,都將會(huì)記入日志文件
                      writeLog(e) ;
                      throw e ;
                 }
}
}
 
記錄的日志文件形式為:
 
2007-10-15 16:51:50,125  DEBUG  泛普OA系統(tǒng).hrm.resource. ResourceComInfo - debug info is This is test
 
如果有異常,將會(huì)記錄為:
2007-10-15 16:51:50,125  ERROR  泛普OA系統(tǒng).hrm.resource. ResourceComInfo - java.sql.SQLException: [Microsoft][SQLServer JDBC Driver][SQLServer]形式參數(shù) '@id_1' 定義為 OUTPUT,但實(shí)際參數(shù)卻未聲明為 OUTPUT。
       at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
       at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
       at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
       at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
       at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
       at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
       at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
       at com.microsoft.jdbc.base.BaseStatement.executeInternal(Unknown Source)
       at com.microsoft.jdbc.base.BasePreparedStatement.execute(Unknown Source)
       at 泛普OA系統(tǒng).conn.RecordSet.executeProc(RecordSet.java:155)
       at 泛普OA系統(tǒng).conn.RecordSet.executeProc(RecordSet.java:109)
       at 泛普OA系統(tǒng).hrm.resource. ResourceComInfo (ResourceComInfo.java:59)
       at com.caucho.jsp.JavaPage.service(JavaPage.java:87)
       at com.caucho.jsp.JavaPage.subservice(JavaPage.java:81)
       at com.caucho.jsp.Page.service(Page.java:410)
       at com.caucho.server.http.Invocation.service(Invocation.java:319)
       at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:333)
       at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:266)
       at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
       at java.lang.Thread.run(Thread.java:484)
 
從上面的日志信息,可以看到ResourceComInfo類(lèi)的59行代碼運(yùn)行的時(shí)候出現(xiàn)錯(cuò)誤,這個(gè)錯(cuò)誤是執(zhí)行數(shù)據(jù)庫(kù)操作的腳本錯(cuò)誤,具體的錯(cuò)誤信息是:形式參數(shù) '@id_1' 定義為 OUTPUT,但實(shí)際參數(shù)卻未聲明為 OUTPUT。說(shuō)明調(diào)用數(shù)據(jù)庫(kù)腳本的時(shí)候參數(shù)的數(shù)量有出入。
 開(kāi)發(fā)過(guò)程中請(qǐng)將日志級(jí)別設(shè)置為INFO,通過(guò)日志可檢查程序在哪里出錯(cuò)了。

2.3      泛普辦公平臺(tái)怎樣獲取屬性文件的值

 
繼承了泛普OA系統(tǒng).general.BaseBean  的類(lèi),可以直接使用getPropValue方法獲取屬性文件的值。注意這里是使用,而不是調(diào)用,因?yàn)檫@個(gè)方法是這兩個(gè)被繼承類(lèi)中的方法。
 
注意getPropValue方法的使用:
/**
* 從配置文件中獲取某個(gè)屬性的值
* @param fname 屬性文件名稱
* @param key 值
* @return String 屬性值
*/
  public String getPropValue(String fname , String key)
 
getPropValue 方法指定了從某一個(gè)屬性文件fname 中獲取鍵值key 的值。
 
這里的屬性文件必須存放在系統(tǒng)運(yùn)行目錄下的WEB-INF/prop 目錄下,文件名稱為參數(shù)fname指定的文件名,不包括屬性文件的后綴名,屬性文件的后綴名必須為 .properties。
 
比如:
系統(tǒng)的運(yùn)行目錄為 d:泛普OA系統(tǒng),那么屬性文件必須放在d:泛普OA系統(tǒng)WEB-INFprop 目錄下,取名為 thefilename.properties ,其中thefilename是任意的。
 
在屬性文件中某一個(gè)鍵值的值用等號(hào)來(lái)賦值,等號(hào)后面的值必須放在一行,如果一行不夠?qū)懀ɑ蛘邽榱瞬榭吹姆奖悖?,可以? 來(lái)鏈接多行。否則其它行的值不能被鍵值取得。等號(hào)左右都可以有空格,對(duì)鍵值和鍵值的值沒(méi)有影響。
 
比如 :
thekeyname = thevalue
 
將鍵值的值放到多行:
thekeyname = thevalue1
              thevalue2
              thevalue3
              thevalue4                   
這時(shí)候thekeyname 的值為thevalue1thevalue2thevalue3 ,thevalue4 取不到,因?yàn)閠hevalue3后面沒(méi)有
 
在程序中要取得上述屬性文件中鍵值thekeyname的值,使用方法:
 
getPropValue(“thefilename” , “thekeyname”) ;
 
 
 
獲取屬性文件的值的例子如下:
 
public class ResourceComInfo extends BaseBean {
 
private void setResourceInfo() throws Exception{
   
業(yè)務(wù)處理過(guò)程……….
 
String keyValue = getPropValue(“thefilename” , “thekeyname”) ;
 
// 將鍵值thekeyname的值keyValue記入日志文件
                writeLog("keyvalue is "+ keyValue) ;          
                
}
}
 
系統(tǒng)的主屬性文件 泛普OA系統(tǒng).properties 的文件名“泛普OA系統(tǒng)” 作為系統(tǒng)常量放在泛普OA系統(tǒng).general.GCONST 類(lèi)中,可以使用getConfigFile() 方法來(lái)返回 “泛普OA系統(tǒng) ”,在編程的過(guò)程中,如果需要用到泛普OA系統(tǒng).properties屬性文件中的鍵值,請(qǐng)用GCONST. getConfigFile() 來(lái)獲取,當(dāng)主屬性文件名稱因?yàn)樾枰淖兊脮r(shí)候,不必改變所有用到這個(gè)屬性文件的類(lèi),只需要改變GCONST類(lèi)中常量的值
 
 

2.4      泛普OA系統(tǒng)怎樣獲取系統(tǒng)的運(yùn)行目錄

 
泛普OA系統(tǒng).general.GCONST 類(lèi)提供了一個(gè)靜態(tài)方法getRootPath() ,返回系統(tǒng)的運(yùn)行目錄,比如系統(tǒng)的運(yùn)行目錄為d 盤(pán)的泛普OA系統(tǒng)目錄,將返回d:泛普OA系統(tǒng)
 
獲取系統(tǒng)的運(yùn)行目錄的例子如下:
 
public class TestBean extends BaseBean {
      
       import 泛普OA系統(tǒng).general.GCONST ;
 
public void getSysRunPath(){
   
String sysRunPath = GCONST. GetRootPath() ;
 
// 將系統(tǒng)的運(yùn)行目錄sysRunPath的值記入日志文件
                writeLog("sysRunPath is "+ sysRunPath) ;        
                
}
}

2.5      泛普OA軟件怎樣訪問(wèn)和運(yùn)行數(shù)據(jù)庫(kù)腳本

 
在泛普OA系統(tǒng)系統(tǒng)中,大量的數(shù)據(jù)庫(kù)訪問(wèn),鏈接的建立和持續(xù)性,事務(wù)的處理,鏈接池的維護(hù)等問(wèn)題都被封裝在泛普OA系統(tǒng).conn 包下面的各個(gè)類(lèi)中,應(yīng)用程序的實(shí)現(xiàn)者不需要去關(guān)心這些問(wèn)題,而只需要調(diào)用泛普OA系統(tǒng).conn.RecordSet 類(lèi)來(lái)執(zhí)行各種數(shù)據(jù)庫(kù)操作。
 
泛普OA系統(tǒng).conn.RecordSet 類(lèi)實(shí)現(xiàn)了從數(shù)據(jù)庫(kù)鏈接池中獲取鏈接,執(zhí)行指定的數(shù)據(jù)庫(kù)腳本或者存儲(chǔ)過(guò)程,并在腳本或者存儲(chǔ)過(guò)程執(zhí)行完畢后將鏈接及時(shí)地歸還到鏈接池中。
 
泛普OA系統(tǒng)系統(tǒng)的鏈接池管理請(qǐng)參見(jiàn) 泛普OA系統(tǒng).conn.ConnectionPool , 泛普OA系統(tǒng).conn.DBConnectionPool ,泛普OA系統(tǒng).conn.ConnCheckerTimer 類(lèi)的API 文檔,泛普OA系統(tǒng).conn.ConnectionPool 用于管理泛普OA系統(tǒng)系統(tǒng)中的所有數(shù)據(jù)庫(kù)鏈接池(泛普OA系統(tǒng)系統(tǒng)可以同時(shí)鏈接多個(gè)數(shù)據(jù)庫(kù),每一個(gè)數(shù)據(jù)庫(kù)均有一個(gè)對(duì)應(yīng)的數(shù)據(jù)庫(kù)鏈接池,由泛普OA系統(tǒng).conn.DBConnectionPool負(fù)責(zé)管理,而泛普OA系統(tǒng).conn.ConnectionPool則是這些鏈接池的大管家,負(fù)責(zé)所有鏈接池的協(xié)調(diào)和統(tǒng)一對(duì)外接口),泛普OA系統(tǒng).conn.DBConnectionPool用于建立和管理對(duì)某一個(gè)數(shù)據(jù)庫(kù)的鏈接池,泛普OA系統(tǒng).conn.ConnCheckerTimer用于監(jiān)控各個(gè)鏈接池的狀況,定期對(duì)數(shù)據(jù)庫(kù)鏈接池中不符合要求的鏈接進(jìn)行清理,并監(jiān)視是否需要在某一鏈接池中建立新的鏈接。
 
調(diào)用泛普OA系統(tǒng).conn.RecordSet,實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作,下面進(jìn)行詳細(xì)的說(shuō)明:
 
泛普OA系統(tǒng).conn.RecordSet類(lèi)采用 java.sql 中的 CallableStatement 和 Statement 執(zhí)行數(shù)據(jù)庫(kù)操作??蛻舳酥苯诱{(diào)用該類(lèi)進(jìn)行數(shù)據(jù)庫(kù)操作。不需要考慮數(shù)據(jù)庫(kù)鏈接的建立。其中客戶端指所有調(diào)用該類(lèi)進(jìn)行數(shù)據(jù)庫(kù)操作的應(yīng)用程序,不特指用戶的客戶端。
 
RecordSet 執(zhí)行數(shù)據(jù)庫(kù)操作有兩種形式,一種為調(diào)用存儲(chǔ)過(guò)程,另一種為直接執(zhí)行SQL語(yǔ)句。與ConnStatement不同 ,RecordSet 執(zhí)行SQL語(yǔ)句不分查詢和修改,都在一條語(yǔ)句中執(zhí)行。RecordSet執(zhí)行腳本的方式如下:
 
1、使用默認(rèn)的鏈接池執(zhí)行SQL語(yǔ)句:  
RecordSet rs = new RecordSet() ;
rs.executeSql(" select * from TB_Example ") ;
while( rs.next() ) {
String thename = rs.getString("name") ;
其它處理代碼....……
}
在JSP頁(yè)面中,可以通過(guò)以下方式應(yīng)用
<%@ page import="泛普OA系統(tǒng).general.Util" %>
<%@ page import="泛普OA系統(tǒng).conn.*" %>
<%@ page import="java.util.*,java.sql.Timestamp" %>
<%@ page language="java" contentType="text/html; charset=GBK" %>
<%@ include file="/systeminfo/init.jsp" %>
<jsp:useBean id="rs" class="泛普OA系統(tǒng).conn.RecordSet" scope="page" />
<%rs.execute(“”);   //執(zhí)行SQL語(yǔ)句
while( rs.next() ) {
String thename = rs.getString("name") ;
其它處理代碼....……
}
 
rs. executeProc (“存儲(chǔ)過(guò)程名稱”,para);   //執(zhí)行存儲(chǔ)過(guò)程
while( rs.next() ) {
String thename = rs.getString("name") ;
其它處理代碼....……
}
 
 
%>
 
2、使用指定的鏈接池泛普OA系統(tǒng)test執(zhí)行SQL語(yǔ)句
RecordSet rs = new RecordSet() ;
rs.executeSql(" update TB_Example set name = 'the new value' " , "泛普OA系統(tǒng)test" ) ;
 
 
 3、使用指定的鏈接池泛普OA系統(tǒng)test執(zhí)行存儲(chǔ)過(guò)程 PD_Example_UpdateById
存儲(chǔ)過(guò)程PD_Example_UpdateById 如下:
CREATE  PROCEDURE [PD_Example_UpdateById]
                       (@name      varchar(100),
                        @id   int,
                        @flag integer output,
                        @msg varchar(80) output)
                   AS
                   update TB_Example set name = @name where id = @id
 
GO
 
 
RecordSet rs = new RecordSet() ;
 
String newname = ....... ;
String id = ...... ;
String procpara = newname + Util.getSeparator() + id ;
rs.executeProc( "PD_Example_UpdateById" , procpara , "泛普OA系統(tǒng)test" ) ;
 
procpara 是存儲(chǔ)過(guò)程的參數(shù)值組成的字符串變量,多個(gè)參數(shù)值之間用 泛普OA系統(tǒng).general.Util.getSeparator() 分開(kāi)
 
 
4、在一個(gè)客戶程序多個(gè)執(zhí)行之間,查詢結(jié)果可以保留到下一次查詢
RecordSet rs = new RecordSet() ;
rs.executeSql(" select * from TB_Example ") ;
rs.executeSql(" update TB_Example set name = 'the new value '") ;
while( rs.next() ) {
String thename = rs.getString("name") ;  //得到修改前查詢的值
其它處理代碼....…….
}
 
rs.executeSql(" select * from TB_Example ") ;
while( rs.next() ) {
String thename = rs.getString("name") ;  //得到修改后查詢的值
其它處理代碼....……
 }
 
訪問(wèn)和運(yùn)行數(shù)據(jù)庫(kù)腳本的例子:
 
public class ResourceComInfo extends BaseBean {
 
private void setResourceInfo() throws Exception{
   
業(yè)務(wù)處理過(guò)程……….
 
String sqlStr = “select * from Hrmresorce” ;
RecordSet rt = new RecordSet() ;
rt.executeSql(sqlStr) ;
while(rt.next()){
        String id = Util.null2String(rt.getString("id"));
        String loginid = Util.null2String(rt.getString("loginid"));
        String lastname = Util.null2String(rt.getString("lastname"));
        // 將數(shù)據(jù)庫(kù)的值記入日志文件
                        writeLog("id is "+ id) ;   
        writeLog("loginid is "+ loginid) ;
        writeLog("lastname is "+ lastname) ;      
}
                
}
}
 
 
 
 
其它關(guān)于系統(tǒng)數(shù)據(jù)庫(kù)信息的管理
 
a)、泛普OA系統(tǒng).conn.ConnectionPool 類(lèi)的管理和設(shè)置:
 
所有的數(shù)據(jù)庫(kù)鏈接池的集合,用鏈接池名稱區(qū)別每一個(gè)鏈接池.支持對(duì)一個(gè)或多個(gè)由屬性文件定義的數(shù)據(jù)庫(kù)連接池的訪問(wèn).客戶程序可以調(diào)用getInstance()方法訪問(wèn)本類(lèi)的唯一實(shí)例。
 
對(duì)于一個(gè)鏈接池集合來(lái)說(shuō),可以有多個(gè)鏈接池,分別鏈接不同的數(shù)據(jù)庫(kù)。應(yīng)用程序指定鏈接池的名稱來(lái)調(diào)用不同的鏈接池。如果應(yīng)用程序沒(méi)有指定鏈接池的名稱,將使用默認(rèn)的鏈接池。默認(rèn)鏈接池的指定有兩種方式:
 
1、在Application Server設(shè)置的初始參數(shù)serverName的值 ,以Resin 為例:
<servlet servlet-name='InitServer' servlet-class='泛普OA系統(tǒng).general.InitServer'>
      <init-param serverName='泛普OA系統(tǒng)'/>
<load-on-startup/>
</servlet>
 
2、如果Application Server沒(méi)有相應(yīng)設(shè)置,則系統(tǒng)使用屬性文件(泛普OA系統(tǒng).properties)中設(shè)置的默認(rèn)鏈接池名稱:
DefaultPoolName = 泛普OA系統(tǒng)
 
對(duì)于所有的鏈接池,系統(tǒng)需要加載相應(yīng)的 JDBC Driver來(lái)建立與相應(yīng)數(shù)據(jù)庫(kù)的鏈接。這些 Driver 在屬性文件(泛普OA系統(tǒng).properties)中指定,多個(gè)Driver中間用空格隔開(kāi):
DriverClasses = com.microsoft.jdbc.sqlserver.SQLServerDriver
 
對(duì)于每一個(gè)鏈接池需要用到的參數(shù)在屬性文件(泛普OA系統(tǒng).properties)中指定,屬性文件中參數(shù)的名稱以鏈接池的名稱開(kāi)頭,中間加入小數(shù)點(diǎn),比如鏈接池 泛普OA系統(tǒng) 的參數(shù)指定為 :
 
泛普OA系統(tǒng).url = jdbc:microsoft:sqlserver://10.1.1.205:1433;DatabaseName=泛普OA系統(tǒng)    //db url
泛普OA系統(tǒng).user = sa                                                                     //db user name       
泛普OA系統(tǒng).password = 123456                                                        //db user password
泛普OA系統(tǒng).charset = ISO_1                                                          //db encode          
泛普OA系統(tǒng).maxconn = 10                                                             //max conn in conn pool
泛普OA系統(tǒng).minconn = 2                                                              //min conn in conn pool
泛普OA系統(tǒng).maxusecount = 30              //the max use times of a conn           
泛普OA系統(tǒng).maxidletime = 30            //the max unuse time of a conn (分)
泛普OA系統(tǒng).maxalivetime = 2            //一個(gè)鏈接被調(diào)用后的最大未歸回時(shí)間 (分)
泛普OA系統(tǒng).checktime = 500                                                          //檢查的頻率 (秒)
 
 
 
b)、泛普OA系統(tǒng).conn. DBConnectionPool類(lèi)的管理和設(shè)置:
 
數(shù)據(jù)庫(kù)鏈接池,所有創(chuàng)建的鏈接存放在鏈接池中,在客戶端鏈接數(shù)據(jù)庫(kù)時(shí)從鏈接池中取出鏈接,客戶端在完成數(shù)據(jù)庫(kù)操作后將鏈接返回鏈接池。
 
               
鏈接池創(chuàng)建鏈接需要用到的參數(shù)在屬性文件(泛普OA系統(tǒng).properties)中指定,屬性文件中參數(shù)的名稱以鏈接池的名稱開(kāi)頭,中間加入小數(shù)點(diǎn),比如鏈接池 泛普OA系統(tǒng) 的參數(shù)指定為 :
 
泛普OA系統(tǒng).url = jdbc:microsoft:sqlserver://10.1.1.205:1433;DatabaseName=AIS2002    //db url
泛普OA系統(tǒng).user = sa                                                                     //db user name       
泛普OA系統(tǒng).password = 123456                                                        //db user password
泛普OA系統(tǒng).charset = ISO_1                                                          //db encode          
泛普OA系統(tǒng).maxconn = 10                                                             //max conn in conn pool
泛普OA系統(tǒng).minconn = 2                                                              //min conn in conn pool
泛普OA系統(tǒng).maxusecount = 30              //the max use times of a conn           
泛普OA系統(tǒng).maxidletime = 30            //the max unuse time of a conn (分)
泛普OA系統(tǒng).maxalivetime = 2            //一個(gè)鏈接被調(diào)用后的最大未歸回時(shí)間 (分)
泛普OA系統(tǒng).checktime = 500                                                          //檢查的頻率 (秒)
 
 
 

2.6      泛普OA辦公如何上傳一個(gè)文件

 
上傳一個(gè)文件只需要調(diào)用泛普OA系統(tǒng).file.FileUpload 類(lèi)。泛普OA系統(tǒng).file.FileUpload 類(lèi)支持各種文件格式的上傳,也支持多文件的上傳。
 
B/S 架構(gòu)的文件上傳采用的是multipart/form-data 協(xié)議,而不是HTTP協(xié)議,采用這種協(xié)議上傳的數(shù)據(jù)必須通過(guò)特殊的處理,而不能用常規(guī)的方法來(lái)獲取,否則不能得到數(shù)據(jù)。泛普OA系統(tǒng).file.FileUpload 封裝了底層處理的代碼,應(yīng)用程序的實(shí)現(xiàn)者不需要關(guān)心這些細(xì)節(jié)!
 
泛普OA系統(tǒng).file.FileUpload上傳數(shù)據(jù)的方法有:
 
/**
* 進(jìn)行上傳一個(gè)文件的操作
* @param uploadname  需要上傳的文件字段名稱
* @return String   返回保存文件信息的imagefileid
*/
public String uploadFiles(String uploadname)
 
 
/**
* 進(jìn)行上傳一個(gè)文件的操作
* @param uploadnames需要上傳的多個(gè)文件字段名稱
* @return String[]   返回保存多個(gè)文件信息的imagefileid數(shù)組
*/
public String[] uploadFiles(String[] uploadnames)
 
 
這里,需要注意兩點(diǎn),一個(gè)是傳給uploadFiles 方法的參數(shù), 是上傳文件字段的名稱,而不是文件的名稱(這個(gè)時(shí)候你并不知道文件的名稱)。比如在jsp 或者h(yuǎn)tml頁(yè)面中文件瀏覽的字段代碼為:
<input type=file size=70 name="accessory1">
那么這里的文件字段的名稱為"accessory1"。  第二點(diǎn)是這個(gè)方法返回的信息是保存在數(shù)據(jù)庫(kù)表 ImageFile 中關(guān)于這個(gè)文件信息的鍵值imagefileid ,這個(gè)表的結(jié)構(gòu)如下:
Column(s) of "ImageFile" Table
Name Datatype Null Option Comment
imagefileid int NOT NULL 文件id
imagefilename varchar(200) NULL 文件名稱
imagefiletype varchar(50) NULL 文件MIME類(lèi)型
filerealpath varchar(255) NULL 文件存放目錄
imagefileused int NULL 文件使用次數(shù)
iszip char(1) NULL 是否壓縮
0:否
1:是
isencrypt char(1) NULL 是否加密
0:否
1:是
imagefile image NULL 文件(存在在數(shù)據(jù)庫(kù)中的文件內(nèi)容,現(xiàn)已不使用)
 
從表結(jié)構(gòu)可以看出,我們得到了某一個(gè)文件信息的imagefileid,就可以從該表中得到相應(yīng)的文件名稱(這里指文件的實(shí)際名稱,比如test.doc), 文件MIME類(lèi)型(比如 txt,doc,gif等) ,文件存放目錄(這里指在服務(wù)器中存放的實(shí)際路徑信息,包括實(shí)際存放的文件名稱,比如 e:泛普OA系統(tǒng)filesystem2003