<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

              亚洲天堂中文字幕在线观看 | 婷婷影音先锋 | 免费观看黄色一级视频 | 香蕉国产视频2024 | 青青草在线免费视频 | 网站国产无码av在线播放 | 色丁香五月激情 | 久久婷婷五月天综合 | 欧美日韩黄色片在线 | 翔田千里无码播放 |
                   當(dāng)前位置:首頁(yè)>管理咨詢>名易協(xié)同OA辦公底層包開(kāi)發(fā)指南 查詢:
              <output id="r87xx"></output>
            • <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
                   
              Column(s)ofImageFileTable Name imagefileid imagefilename imagefiletype filerealpath imagefileused iszip isencrypt imagefile
              名易協(xié)同OA辦公底層包開(kāi)發(fā)指南

              1.引言

              1.1概述

              本文檔為名易協(xié)同OA商務(wù)系統(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最基本的繼承類

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

              2.2名易OA怎樣記錄日志

              繼承了名易OA系統(tǒng).general.BaseBean,可以直接使用writeLog方法記錄日志信息。注意這里是使用,而不是調(diào)用,因?yàn)檫@個(gè)方法是這兩個(gè)被繼承類中的方法。注意writeLog方法的使用:***將某個(gè)對(duì)象寫(xiě)入Log文件*@paramobj被寫(xiě)入的對(duì)象*publicvoidwriteLog(Objectobj)我們看到,可以被記入日志的是任意一個(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記錄日志的類名–日志信息比如:2003.03.11-06:52:05名易OA系統(tǒng).datacenter.OutReportResult-sqlisselectROUND(sum(F_sksr),5)fromT_yyrbA,_CustomerInfowhereCRM_CustomerInfo.id=A.crmidandCRM_CustomerInfo.idin(5)andA.reportdate='2004-01-10'andA.reportdate='2004-03-10'andA.inputstatus='0'andA.inputstatus'9'andA.modtype='0'日志的記錄有兩種模式,第一種為調(diào)試模式,第二種為在線模式。在第一種模式下,所有的java對(duì)象都會(huì)記錄到日志文件中,包括調(diào)試信息,在第二種模式下,只有為Exception(異常)的對(duì)象才會(huì)記錄到日志文件中。模式的設(shè)置在名易OA系統(tǒng)WEB-INFlog4jinit.properties屬性文件中的log4j.rootLogger屬性來(lái)指定,如下:log4j.rootLogger=INFO,A2#ifyouwanttoopenthetracefromopensource,justadd#aheadoflinelog4j.logger.org=ERRORlog4j.logger.uk=ERRORlog4j.appender.A2=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A2.DatePattern='_'yyyyMMdd'.log'#don'tmodifythefilepropertylog4j.appender.A2.File=@名易OA系統(tǒng)log4j.appender.A2.layout=org.apache.log4j.PatternLayoutlog4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss,SSS}%-5p%c-%m%n上面的日志表明將所有的信息答應(yīng)到文件日志文件中,其中日志的模式為:#FATAL0#ERROR3#WARN4只有WARN,ERROR,FATAL輸出#INFO6所有的log都輸出#DEBUG7記錄日志的例子如下:publicclassResourceComInfoextendsBaseBean{privatevoidsetResourceInfo()throwsException{try{業(yè)務(wù)處理過(guò)程……….StringdebugInfo=Thisistest;在調(diào)試模式下將會(huì)記入日志文件writeLog(debuginfois+debugInfo);}catch(Exceptione){在任何模式下出現(xiàn)異常,都將會(huì)記入日志文件writeLog(e);throwe;}}}記錄的日志文件形式為:2007-10-1516:51:50,125DEBUG名易OA系統(tǒng).hrm.resource.ResourceComInfo-debuginfoisThisistest如果有異常,將會(huì)記錄為:2007-10-1516:51:50,125ERROR名易OA系統(tǒng).hrm.resource.ResourceComInfo-java.sql.SQLException:[Microsoft][SQLServerJDBCDriver][SQLServer]形式參數(shù)'@id_1'定義為OUTPUT,但實(shí)際參數(shù)卻未聲明為OUTPUT。atcom.microsoft.jdbc.base.BaseExceptions.getException(UnknownSource)atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(UnknownSource)atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(UnknownSource)atcom.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(UnknownSource)atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(UnknownSource)atcom.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(UnknownSource)atcom.microsoft.jdbc.base.BaseStatement.commonExecute(UnknownSource)atcom.microsoft.jdbc.base.BaseStatement.executeInternal(UnknownSource)atcom.microsoft.jdbc.base.BasePreparedStatement.execute(UnknownSource)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)atcom.caucho.jsp.JavaPage.service(JavaPage.java:87)atcom.caucho.jsp.JavaPage.subservice(JavaPage.java:81)atcom.caucho.jsp.Page.service(Page.java:410)atcom.caucho.server.http.Invocation.service(Invocation.java:319)atcom.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:333)atcom.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:266)atcom.caucho.server.TcpConnection.run(TcpConnection.java:140)atjava.lang.Thread.run(Thread.java:484)從上面的日志信息,可以看到ResourceComInfo類的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的類,可以直接使用getPropValue方法獲取屬性文件的值。注意這里是使用,而不是調(diào)用,因?yàn)檫@個(gè)方法是這兩個(gè)被繼承類中的方法。注意getPropValue方法的使用:***從配置文件中獲取某個(gè)屬性的值*@paramfname屬性文件名稱*@paramkey值*@returnString屬性值*publicStringgetPropValue(Stringfname,Stringkey)getPropValue方法指定了從某一個(gè)屬性文件fname中獲取鍵值key的值。這里的屬性文件必須存放在系統(tǒng)運(yùn)行目錄下的WEB-INFprop目錄下,文件名稱為參數(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=thevalue1thevalue2thevalue3thevalue4這時(shí)候thekeyname的值為thevalue1thevalue2thevalue3,thevalue4取不到,因?yàn)閠hevalue3后面沒(méi)有在程序中要取得上述屬性文件中鍵值thekeyname的值,使用方法:getPropValue(thefilename,thekeyname);獲取屬性文件的值的例子如下:publicclassResourceComInfoextendsBaseBean{privatevoidsetResourceInfo()throwsException{業(yè)務(wù)處理過(guò)程……….StringkeyValue=getPropValue(thefilename,thekeyname);將鍵值thekeyname的值keyValue記入日志文件writeLog(keyvalueis+keyValue);}}系統(tǒng)的主屬性文件名易OA系統(tǒng).properties的文件名名易OA系統(tǒng)作為系統(tǒng)常量放在名易OA系統(tǒng).general.GCONST類中,可以使用getConfigFile()方法來(lái)返回名易OA系統(tǒng),在編程的過(guò)程中,如果需要用到名易OA系統(tǒng).properties屬性文件中的鍵值,請(qǐng)用GCONST.getConfigFile()來(lái)獲取,當(dāng)主屬性文件名稱因?yàn)樾枰淖兊脮r(shí)候,不必改變所有用到這個(gè)屬性文件的類,只需要改變GCONST類中常量的值

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

              名易OA系統(tǒng).general.GCONST類提供了一個(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)行目錄的例子如下:publicclassTestBeanextendsBaseBean{import名易OA系統(tǒng).general.GCONST;publicvoidgetSysRunPath(){StringsysRunPath=GCONST.GetRootPath();將系統(tǒng)的運(yùn)行目錄sysRunPath的值記入日志文件writeLog(sysRunPathis+sysRunPath);}}

              2.5名易怎樣訪問(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è)類中,應(yīng)用程序的實(shí)現(xiàn)者不需要去關(guān)心這些問(wèn)題,而只需要調(diào)用名易OA系統(tǒng).conn.RecordSet類來(lái)執(zhí)行各種數(shù)據(jù)庫(kù)操作。名易OA系統(tǒng).conn.RecordSet類實(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類的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類采用java.sql中的CallableStatement和Statement執(zhí)行數(shù)據(jù)庫(kù)操作??蛻舳酥苯诱{(diào)用該類進(jìn)行數(shù)據(jù)庫(kù)操作。不需要考慮數(shù)據(jù)庫(kù)鏈接的建立。其中客戶端指所有調(diào)用該類進(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ǔ)句:RecordSetrs=newRecordSet();rs.executeSql(select*fromTB_Example);while(rs.next()){Stringthename=rs.getString(name);其它處理代碼....……}在JSP頁(yè)面中,可以通過(guò)以下方式應(yīng)用%@pageimport=名易OA系統(tǒng).general.Util%%@pageimport=名易OA系統(tǒng).conn.*%%@pageimport=java.util.*,java.sql.Timestamp%%@pagelanguage=javacontentType=texthtml;charset=GBK%%@includefile=ysteminfoinit.jsp%jsp:useBeanid=rsclass=名易OA系統(tǒng).conn.RecordSetscope=page%rs.execute();執(zhí)行SQL語(yǔ)句while(rs.next()){Stringthename=rs.getString(name);其它處理代碼....……}rs.executeProc(存儲(chǔ)過(guò)程名稱,para);執(zhí)行存儲(chǔ)過(guò)程while(rs.next()){Stringthename=rs.getString(name);其它處理代碼....……}%2、使用指定的鏈接池名易OA系統(tǒng)test執(zhí)行SQL語(yǔ)句RecordSetrs=newRecordSet();rs.executeSql(updateTB_Examplesetname='thenewvalue',名易OA系統(tǒng)test);3、使用指定的鏈接池名易OA系統(tǒng)test執(zhí)行存儲(chǔ)過(guò)程PD_Example_UpdateById存儲(chǔ)過(guò)程PD_Example_UpdateById如下:CREATEPROCEDURE[PD_Example_UpdateById](@namevarchar(100),@idint,@flagintegeroutput,@msgvarchar(80)output)ASupdateTB_Examplesetname=@namewhereid=@idGORecordSetrs=newRecordSet();Stringnewname=.......;Stringid=......;Stringprocpara=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é)果可以保留到下一次查詢RecordSetrs=newRecordSet();rs.executeSql(select*fromTB_Example);rs.executeSql(updateTB_Examplesetname='thenewvalue');while(rs.next()){Stringthename=rs.getString(name);得到修改前查詢的值其它處理代碼....…….}rs.executeSql(select*fromTB_Example);while(rs.next()){Stringthename=rs.getString(name);得到修改后查詢的值其它處理代碼....……}訪問(wèn)和運(yùn)行數(shù)據(jù)庫(kù)腳本的例子:publicclassResourceComInfoextendsBaseBean{privatevoidsetResourceInfo()throwsException{業(yè)務(wù)處理過(guò)程……….StringsqlStr=select*fromHrmresorce;RecordSetrt=newRecordSet();rt.executeSql(sqlStr);while(rt.next()){Stringid=Util.null2String(rt.getString(id));Stringloginid=Util.null2String(rt.getString(loginid));Stringlastname=Util.null2String(rt.getString(lastname));將數(shù)據(jù)庫(kù)的值記入日志文件writeLog(idis+id);writeLog(loginidis+loginid);writeLog(lastnameis+lastname);}}}其它關(guān)于系統(tǒng)數(shù)據(jù)庫(kù)信息的管理a)、名易OA系統(tǒng).conn.ConnectionPool類的管理和設(shè)置:所有的數(shù)據(jù)庫(kù)鏈接池的集合,用鏈接池名稱區(qū)別每一個(gè)鏈接池.支持對(duì)一個(gè)或多個(gè)由屬性文件定義的數(shù)據(jù)庫(kù)連接池的訪問(wèn).客戶程序可以調(diào)用getInstance()方法訪問(wèn)本類的唯一實(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、在ApplicationServer設(shè)置的初始參數(shù)serverName的值,以Resin為例:servletservlet-name='InitServer'servlet-class='名易OA系統(tǒng).general.InitServer'init-paramserverName='名易OA系統(tǒng)'load-on-startupervlet2、如果ApplicationServer沒(méi)有相應(yīng)設(shè)置,則系統(tǒng)使用屬性文件(名易OA系統(tǒng).properties)中設(shè)置的默認(rèn)鏈接池名稱:DefaultPoolName=名易OA系統(tǒng)對(duì)于所有的鏈接池,系統(tǒng)需要加載相應(yīng)的JDBCDriver來(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)dburl名易OA系統(tǒng).user=sadbusername名易OA系統(tǒng).password=123456dbuserpassword名易OA系統(tǒng).charset=ISO_1dbencode名易OA系統(tǒng).maxconn=10maxconninconnpool名易OA系統(tǒng).minconn=2minconninconnpool名易OA系統(tǒng).maxusecount=30themaxusetimesofaconn名易OA系統(tǒng).maxidletime=30themaxunusetimeofaconn(分)名易OA系統(tǒng).maxalivetime=2一個(gè)鏈接被調(diào)用后的最大未歸回時(shí)間(分)名易OA系統(tǒng).checktime=500檢查的頻率(秒)b)、名易OA系統(tǒng).conn.DBConnectionPool類的管理和設(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=AIS2002dburl名易OA系統(tǒng).user=sadbusername名易OA系統(tǒng).password=123456dbuserpassword名易OA系統(tǒng).charset=ISO_1dbencode名易OA系統(tǒng).maxconn=10maxconninconnpool名易OA系統(tǒng).minconn=2minconninconnpool名易OA系統(tǒng).maxusecount=30themaxusetimesofaconn名易OA系統(tǒng).maxidletime=30themaxunusetimeofaconn(分)名易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類。名易OA系統(tǒng).file.FileUpload類支持各種文件格式的上傳,也支持多文件的上傳。BS架構(gòu)的文件上傳采用的是multipartform-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è)文件的操作*@paramuploadname需要上傳的文件字段名稱*@returnString返回保存文件信息的imagefileid*publicStringuploadFiles(Stringuploadname)***進(jìn)行上傳一個(gè)文件的操作*@paramuploadnames需要上傳的多個(gè)文件字段名稱*@returnString[]返回保存多個(gè)文件信息的imagefileid數(shù)組*publicString[]uploadFiles(String[]uploadnames)這里,需要注意兩點(diǎn),一個(gè)是傳給uploadFiles方法的參數(shù),是上傳文件字段的名稱,而不是文件的名稱(這個(gè)時(shí)候你并不知道文件的名稱)。比如在jsp或者h(yuǎn)tml頁(yè)面中文件瀏覽的字段代碼為:inputtype=filesize=70name=accessory1那么這里的文件字段的名稱為accessory1。第二點(diǎn)是這個(gè)方法返回的信息是保存在數(shù)據(jù)庫(kù)表ImageFile中關(guān)于這個(gè)文件信息的鍵值imagefileid,這個(gè)表的結(jié)構(gòu)如下:

              Datatype NullOption Comment
              int NOTNULL 文件id
              varchar(200) NULL 文件名稱
              varchar(50) NULL 文件MIME類型
              varchar(255) NULL 文件存放目錄
              int NULL 文件使用次數(shù)
              char(1) NULL 是否壓縮 0:否 1:是
              char(1) NULL 是否加密 0:否 1:是
              image NULL 文件(存在在數(shù)據(jù)庫(kù)中的文件內(nèi)容,現(xiàn)已不使用)
              從表結(jié)構(gòu)可以看出,我們得到了某一個(gè)文件信息的imagefileid,就可以從該表中得到相應(yīng)的文件名稱(這里指文件的實(shí)際名稱,比如test.doc),文件MIME類型(比如txt,doc,gif等),文件存放目錄(這里指在服務(wù)器中存放的實(shí)際路徑信息,包括實(shí)際存放的文件名稱,比如e:名易OA系統(tǒng)filesystem2003