版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
#定制化變量定制化變量定義區(qū)PUBLIB_APPNAME=FCCSPUBLIB_SYSNAME=sle9PUBLIB_HOME=/home/publib/rel/$(PUBLIB_APPNAME)/$(PUBLIB_VERSION)PUBLIB_OPTS=##CompilerandLinker#應(yīng)用級變量應(yīng)用級變量定義區(qū)CC=g++-fPIC-Wall-O2CCS=g++-shared-O2##PUBLIB#PUBLIB_SRC=.PUBLIB_INCS=\ -I$(PUBLIB_SRC)/common/include\ -I$(PUBLIB_SRC)/midware/include\ -I$(PUBLIB_SRC)/security/include\ -I$(PUBLIB_SRC)/message/include\ -I$(PUBLIB_SRC)/cfca/include#公共函數(shù)COMM_OBJS=\ bigint.o\ safebuffer.o\ cstring.o\ commpublic.o\ commexception.o\ commprocess.o\ cfile.o\ cfile_utils.o\ cdate.o\ csignal.o#中間件封裝MIDWARE_OBJS=\# mq.o\# mqcmt.o# cicssvr.o\# sysrefdata.o\# cnapsnetcli.o\# sysmsg.o#信息安全SECURITY_OBJS=\ des.o\ md5.o#報文消息MESSAGE_OBJS=\ base64.o\ cmtfileoperator.o\ cmtmsg.o\ cmtoperator.o#CFCACFCA_OBJS=cfca.o系統(tǒng)軟件變量定義區(qū)#==========以下容可以復(fù)制給應(yīng)用編譯文件系統(tǒng)軟件變量定義區(qū)##CICS#CICS_HOME=/usr/lpp/cicsCICS_OPTS=-p100-nmain-bI:$(CICS_HOME)/lib/cicsprCpp.expCICS_PROC=$(CICS_HOME)/bin/cicstran-lIBMCPPCICS_INCS=-I$(CICS_HOME)/includeCICS_LIBS=##IBMMQ#MQ_HOME=MQ_OPTS=MQ_INCS=MQ_LIBS=-lmqm_r##ORACLE#ORA_HOME=/oracle/app/oracle/product/9.2.0ORA_OPTS=code=cppmode=ansiparse=noORA_PROC=$(ORA_HOME)/bin/procORA_INCS=include=$(CIS_HOME)/common/includeORA_LIBS=-L$(ORA_HOME)/lib32-lclntsh-lC_rORA_LIB64=-L$(ORA_HOME)/lib64-lclntsh-lld-lm\ `cat$(ORACLE_HOME)/lib64/sysliblist`##DB2#DB2_HOME=/opt/IBM/db2/V8.1DB2_OPTS=-m32DB2_INCS=-I$(DB2HOME)/includeDB2_LIBS=-L$(DB2HOME)/lib-ldb2DB2_NAME=DB2CISDB2_USER=userdb2adminDB2_PWD=usingdb2dev##SYBASE#SYB_HOME=/home/sybaseSYB_OPTS=SYB_INCS=-I$(SYB_HOME)/includeSYB_LIBS=$(SYB_HOME)/lib/libsybdb.a-lnsl-lsocket#公共編譯規(guī)則定義區(qū)#PUBLICruleforbuildallfile公共編譯規(guī)則定義區(qū)#.SUFFIXES:.pc.sqC.ccs.cpp.C.o.ibmcpp.so.pc.C: $(ORA_PROC)$(ORA_OPTS)$(ORA_INCS)iname=$<oname=$.ccs.C: $(CICS_PROC)$<.sqC.C: db2connectto$(DB2_NAME)$(DB2_USER)$(DB2_PWD) db2prep$<bindfile db2bind$*.bnd.C.o: $(CC)$(PUBLIB_OPTS)$(MQ_OPTS)$(DB2_OPTS)$(PUBLIB_INCS)$(MQ_INCS)$(DB2_INCS)$(SYB_INCS)-c$<.cpp.o: $(CC)$(PUBLIB_OPTS)$(MQ_OPTS)$(DB2_OPTS)$(PUBLIB_INCS)$(MQ_INCS)$(DB2_INCS)$(SYB_INCS)-c$<源程序位置定義源程序位置定義#Wheretofindthesource全部模塊編譯規(guī)則定義VPATH=common/source:security/source:message/source:midware/source:database/sybase/source:cfca/source全部模塊編譯規(guī)則定義all:cc.acc.so編譯中間結(jié)果清理規(guī)則編譯中間結(jié)果清理規(guī)則clean: -rm*.o -rm*.a -rm*.C -rm*.ticleanlib: -rm$(PUBLIB_HOME)/libcncc$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME)*各模塊編譯規(guī)則定義 -rm$(PUBLIB_HOME)/include/*各模塊編譯規(guī)則定義cncc.a:$(COMM_OBJS)$(MIDWARE_OBJS)$(SECURITY_OBJS)$(MESSAGE_OBJS) -rm$(PUBLIB_HOME)/libcncc$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).a ar-v-q$(PUBLIB_HOME)/libcncc$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).a\ $(COMM_OBJS)$(MIDWARE_OBJS)$(SECURITY_OBJS)$(MESSAGE_OBJS) cpcommon/include/*$(PUBLIB_HOME)/include cpmidware/include/*$(PUBLIB_HOME)/include cpsecurity/include/*$(PUBLIB_HOME)/include cpmessage/include/*$(PUBLIB_HOME)/include cpcfca/include/*$(PUBLIB_HOME)/include chmod644$(PUBLIB_HOME)/libcncc$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).a chmod644$(PUBLIB_HOME)/include/*cncc.so:$(COMM_OBJS)$(MIDWARE_OBJS)$(SECURITY_OBJS)$(MESSAGE_OBJS) -rm$(PUBLIB_HOME)/libcncc$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).so $(CCS)-o$(PUBLIB_HOME)/libcncc$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).so\ $(COMM_OBJS)$(MIDWARE_OBJS)$(SECURITY_OBJS)$(MESSAGE_OBJS) cpcommon/include/*$(PUBLIB_HOME)/include cpmidware/include/*$(PUBLIB_HOME)/include cpsecurity/include/*$(PUBLIB_HOME)/include cpmessage/include/*$(PUBLIB_HOME)/include chmod644$(PUBLIB_HOME)/libcncc$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).so chmod644$(PUBLIB_HOME)/include/*cfca.so:$(CFCA_OBJS) -rm$(PUBLIB_HOME)/libcfca$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).so $(CCS)-o$(PUBLIB_HOME)/libcfca$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).so\ $(CFCA_OBJS) cpcfca/include/*$(PUBLIB_HOME)/include chmod644$(PUBLIB_HOME)/libcfca$(PUBLIB_APPNAME)$(PUBLIB_SYSNAME).so chmod644$(PUBLIB_HOME)/include/*ESQL/C編碼ESQL/C編碼指在C/C++代碼中嵌入數(shù)據(jù)庫訪問命令。這些包含數(shù)據(jù)庫命令的代碼文件,通常需要由數(shù)據(jù)庫預(yù)編譯命令進(jìn)行轉(zhuǎn)換后,再按普通C/C++代碼進(jìn)行編譯與連接。ESQL編碼,應(yīng)遵循下列原則:數(shù)據(jù)庫關(guān)鍵字使用小寫形式,數(shù)據(jù)庫名、表名、字段名等使用大寫形式。如:execsqlselectBANKCODE,BANKNAMEfromCISCODT0001whereBANKCODE=:sBankCode;太長的數(shù)據(jù)庫命令應(yīng)在關(guān)鍵字處分多行書寫。如:execsqlselectOPERSTATUSinto:stCIS309Data.sOperStatusfromCISNODT0101whereCONSIGNDATE=:stCIS309Data.sOrgConsignDateandPAYTXSNO=:stCIS309Data.nOrgPayTxsNoandPBEBNKCODE=:stCIS309Data.sOrgSendBank;每次執(zhí)行數(shù)據(jù)庫命令后,均應(yīng)檢查執(zhí)行結(jié)果是否成功,并進(jìn)行相應(yīng)地處理。不要使用select*from..的形式,應(yīng)僅讀取需要的字段。不要使用結(jié)構(gòu)作為宿主變量,但可以使用結(jié)構(gòu)成員。獲取數(shù)據(jù)庫數(shù)據(jù)前,應(yīng)給宿主變量賦初值或清理舊值。使用結(jié)構(gòu)成員做宿主變量更容易初始化。execsqlbegindeclaresection;struct{charsBankCode[13];charsBankName[61];}stBank;execsqlenddeclaresection;memset(&stBank,0,sizeof(stBank));execsqlselectBANKCODE,BANKNAMEinto:stBank.sBankCode,:stBank.sBankNamefromCISCODT0001whereBANKCODE=:stBank.sBankCode;注意空值的處理。選擇可空字段時,應(yīng)使用指示變量或調(diào)用將空值轉(zhuǎn)換成有意義值的函數(shù)(DB2為coalesce(),ORACLE為nvl()),建議使用指示變量。如果關(guān)心某個字段是否為空值,則應(yīng)單獨使用一個指示變量,否則全部字段可以簡單地使用一個指示變量。如:execsqlbegindeclaresection;struct{charsBankCode[13];charsBankName[61];}stBank;shortintnNullFlag;execsqlenddeclaresection;memset(&stBank,0,sizeof(stBank));nNullFlag=0;execsqlselectBANKCODE,BANKNAMEinto:stBank.sBankCode,:stBank.sBankName:nNullFlagfromCISCODT0001whereBANKCODE=:stBank.sBankCode;Java編碼規(guī)代碼組織每個源文件應(yīng)按下列順序組織代碼:文件文檔注釋;包定義;外部包或類引用清單(import語句);類文檔注釋;類定義;類public變量與publicstatic變量;類構(gòu)造函數(shù)、clone方法;類setter/getter方法;類public方法與publicstatic方法;類protected方法與private方法;類protected變量與private變量;最后是publicstaticvoidmain(String[]args)方法。/***fileUserBussInter.java*brief本文件定義用戶操作函數(shù)接口。**date*-2007-03-29*author恒華*versionV1.0*/er;importjava.util.List;importjava.util.Map;ccmon.dao.Page;cc.oa.hibernate.module.UmUser;/***brief用戶操作函數(shù)接口。*/publicclassUser{staticpublicStringclassName;///<類名staticpublicintinstanceCnt;///<類實例數(shù)publicintuserId;///<操作員號publicStringusername;///<操作員名/***brief根據(jù)用戶得到這個用戶所有modules*param[in]user*returnlist*exception異常*/publicListfindModulesByUser(intuserId){}/***brief通過用戶名和密碼獲得用戶*param[in]account用戶名*param[in]password密碼*returnUmUser*exception*/publicUsergetUserByAccountAndPassword(Stringaccount,Stringpassword){}/***brief刪除用戶*param[in]userIDs待刪除的用戶ID*exception*/protectedvoiddeleteUsers(Integer[]userIDs){}/***brief判斷用戶登錄賬號是否存在*param[in]account待判斷的賬號*return存在返回true,否則返回false*exception*/privatebooleanCheckAccountUnique(Stringaccount){}privateintuserType;///<操作員類型privateUseruserCreater;///<創(chuàng)建人}簡單應(yīng)用應(yīng)創(chuàng)建下列目錄,分類存放各文件。源程序放置到src目錄,編譯后的類文件放置到classes目錄,應(yīng)用需要的外部庫,放置到lib目錄。復(fù)雜應(yīng)用應(yīng)分子系統(tǒng)或包創(chuàng)建目錄,分別存放各文件。源程序按子系統(tǒng)或包,放置到src對應(yīng)的目錄;編譯后的文件放置到rel或WEB-INF的classes對應(yīng)的目錄下;應(yīng)用需要的外部庫放置到rel或WEB-INF的lib目錄下。應(yīng)用本身的工具類或底層類,應(yīng)打包成jar文件,也放置在lib目錄下。每個類均應(yīng)按功能模塊劃到所屬的package。命名命名應(yīng)遵循下列原則:應(yīng)簡單清晰通俗;應(yīng)使用英文命名,禁止使用中文命名;應(yīng)盡量選擇通用詞匯;應(yīng)使用完整單詞或詞組,避免使用簡稱;應(yīng)準(zhǔn)確表達(dá)其含義;應(yīng)使用大小寫混合命名使名字易讀;避免同時使用易混淆的字母與數(shù)字,如1與l,0與o;禁止使用只靠大小寫區(qū)分的多個名稱;多單詞組成的名稱,第一個單詞的首字母應(yīng)小寫,其他單詞首字母應(yīng)大寫,如fileName。名稱太長超過15字符時應(yīng)使用簡稱。簡稱應(yīng)遵循:應(yīng)使用標(biāo)準(zhǔn)的或常用的簡寫,如Temp(tmp),Length(len);應(yīng)用圍簡寫應(yīng)一致且規(guī),避免各處簡寫各不一樣;簡寫可以使用單詞的前一個或多個字母,如Channel(Chan)、Connect(Conn);也可以使用去掉所有的不在詞頭的元音字母,如screen(scrn),primtive(prmv);多個單詞組成的名稱,使用有意義的單詞或去掉無用的后綴并簡稱,如CountofFailure(failCnt),PagingRequest(pagReq)。包命名包名應(yīng)全部使用小寫字母,可以按反轉(zhuǎn)本單位的域名加包名的形式命名。如:cc.cis.bankmgr、cc.cis.business、cc.cis.usermgr。類命名類名應(yīng)使用名詞,每個單詞的首字母大寫,其他字母小寫。如:Bank、CisfeUser、CisfeCis001。接口命名接口名使用I打頭加名詞的形式,每個單詞的首字母大寫,其他字母小寫。如:IBank、ICisfeUser、ICisfeCis001。方法命名方法名應(yīng)使用動詞或動賓詞組,第一個單詞首字母小寫,其他單詞首字母大寫。如果是獲取或設(shè)置類變量的方法(setter/getter),應(yīng)使用setX或getX作為名稱,其中X是屬性名。返回值是boolean值的方法,應(yīng)使用is作為方法名的前綴詞。如:doSomeThing()、checkBankStatus()、getBankName()、setBankName(),isValidBank()。變量命名變量名應(yīng)使用名詞,第一個單詞首字母小寫,其他單詞首字母大寫。如果變量是集合或數(shù)組的,應(yīng)使用復(fù)數(shù)形式。如:BanKbank;CisfeUsercisfeUser;CisfeCis001cis001;String[]myNames;類變量命名類變量使用m_打頭的名詞,第一個單詞首字母小寫,其他單詞首字母大寫。如果類變量是集合或數(shù)組的,應(yīng)使用復(fù)數(shù)形式。如:staticintm_bankCount;staticCisfeUserm_cisfeUser;staticCisfeCis001m_cis001;staticString[]myNames;常量命名常量使用全大寫名詞,每個單詞使用_分隔。如果變量是集合或數(shù)組,應(yīng)使用復(fù)數(shù)形式。如:staticfinalintMAX_SIZE=10240;staticfinalStringMY_APPNAME="CISFEWEB";參數(shù)命名方法參數(shù)命名應(yīng)使用名詞,第一個單詞首字母小寫,其他單詞首字母大寫。如果變量是集合或數(shù)組,應(yīng)使用復(fù)數(shù)形式。如果是setter/getter方法的參數(shù),則使用屬性同名的參數(shù)名。注釋程序代碼中增加注釋的目標(biāo)是幫助對程序的閱讀理解,不宜太多或太少,太多則會對閱讀產(chǎn)生干擾,太少則不利于代碼理解,因此只在必要的地方才加注釋,且準(zhǔn)確、易懂、簡潔。文檔化注釋文件注釋文件注釋放置在文件頭部,主要包括此文件的功能說明,編寫人和修改人以與編寫和修改的日期,聲明,版本等信息,應(yīng)盡量使用中文。注釋格式如下:/***filefilename.java*brief文件簡要說明**文件詳細(xì)說明**author*-時間作者1貢獻(xiàn)1*-時間作者2貢獻(xiàn)2*-時間作者3貢獻(xiàn)3**version*-時間版本1簡要版本說明1*-時間版本2簡要版本說明2**par其他重要信息:*其他重要信息說明**warning警告信息**par信息:*版本聲明信息*/例:/***fileCisfeUser.java*brief操作員持久化類**本類提供操作員信息的持久化處理。**author*-2007-03-05lny創(chuàng)建初始版本*-2007-03-07lny添加文檔注釋信息*version*-2007-03-05V1.0創(chuàng)建初始版本*-2007-03-07V2.0添加文檔注釋信息**warning本類僅能使用DB2數(shù)據(jù)庫存儲數(shù)據(jù)。**par信息:*Copyright(C)2007-2007CNCC/CDC*/注:粗體字為需定制化的容;蘭色字為可選的容,如果沒有這些容,請刪除。下同。類注釋類注釋放置在類聲明前,主要介紹類的功能與相關(guān)說明。注釋格式如下:/***brief類簡要說明**類詳細(xì)說明**par其他重要信息*其他重要信息說明**par變更歷史:*-時間作者修改說明*/例:/***brief操作員數(shù)據(jù)持久化類**本類操作員數(shù)據(jù)的持久化處理。**warning本類只能使用DB2數(shù)據(jù)庫。*/classCisfeUser{…}方法注釋方法注釋放置在其聲明前,主要介紹函數(shù)的功能、參數(shù)、返回值、異常、使用說明、例、引用關(guān)系、變更信息等信息。注釋格式如下:/***brief方法功能簡要說明*param[in|out]參數(shù)名稱1參數(shù)1簡要說明;*param[in|out]參數(shù)名稱2參數(shù)2簡要說明。*return返回值說明*-返回值1返回值1說明;*-返回值2返回值2說明。*exception異常說明*-異常1異常1說明;*-異常2異常2說明。**note方法功能詳細(xì)說明。*-詳細(xì)說明1;*-詳細(xì)說明2。*warning警告信息*deprecated函數(shù)即將失效警告*see引用說明**par使用例:*code*例子程序*endcode**par算法或流程說明:*詳細(xì)算法或流程說明**par變更歷史:*-時間作者修改說明*/例:/***brief添加一個或多個信號到信號集合。*param[out]set要操作的信號集合;*param[in]signal要添加到集合的信號。*return添加失敗返回負(fù)整數(shù),失敗原因可以從errno獲取。*note如果要添加多個信號,請多次調(diào)用本方法。*warning本方法僅能使用在UNIX系統(tǒng),在WIN32可能無法使用!*seeDelFromSet()、AddAllToSet()、ClearSet()**par使用例:*code*intretCode=sig.AddToSet(stSet,SIGUSR1);*if(retCode<0)*{*...Fail...*}*...*endcode*/publicintAddToSet(Setset,intsignal){……}重要的或復(fù)雜的方法,應(yīng)提供算法說明或使用例。如:例:/***brief根據(jù)行號與密碼生成報尾校驗碼作為身份認(rèn)證串。*param[in]bankCode行號;*param[in]password密碼。*return身份認(rèn)證串。*par算法介紹:*-#計算sBankCode+sPassword的MD5數(shù)字摘要,輸出32位字符;*-#取32位字符的0,5,10,15,16,21,26,31位作16位字符串的偶數(shù)位;*-#取"AUTHBEPS"各位作16位字符串的奇數(shù)位;*-#加密這16位的字符串,得到32位的字符串作為認(rèn)證串。*/StringBuildAuthStr(StringbankCode,Stringpwd);類變量注釋類的每個變量均使用斷行注釋。注釋格式如下:例:classCMTMsg{…publicbooleanbodyInFile; ///<是文件型報文?publicStringfileName; ///<文件型報文的文件名publicStringbody; ///<直接設(shè)置的報體串publicCMTMsgHeaderheader; ///<報頭對象publicCMTMsgTailtail; ///<報尾對象publicCMTBatHeaderbatHeader; ///<批量業(yè)務(wù)頭對象}變量注釋變量使用簡單注釋或斷行注釋。特別重要的變量可以使用與類一樣的文檔注釋。注釋格式如下:例:CMTMsgHeaderheader; ///<報頭對象CMTMsgTailtail; ///<報尾對象CMTBatHeaderbatHeader; ///<批量業(yè)務(wù)頭對象例:/**業(yè)務(wù)頭*/CMTMsgHeaderheader;例:/***brief短報文正文體最大長度。**此長度應(yīng)根據(jù)MQCMT類定義最大消息長度進(jìn)行調(diào)整,超過此長度的報文應(yīng)分為多個報文片斷傳輸。**par計算公式:*code*最大長度=MQCMT消息長度-sizeof(CMTMsgHeader)-sizeof(CMTMsgTail)-sizeof(MQMsg)+1*=MQCMT最大消息長度-175*endcode*目前,MQCMT類定義的最大消息長度為1M=1048576字節(jié)。*/publicstaticfinalSHORT_MSGBODY_MAX_LEN=1000000;文檔注釋技巧為使doxygen工具能生成更好的文檔,編寫文檔注釋時參考下列技巧:注釋中使用的標(biāo)識符前后均應(yīng)留一個空格,以便doxygen識別此標(biāo)識符,并自動生成一個引用連接。如:/***…*parCMT報文格式說明:*-CMT報文由報頭(CMTMsgHeader)、可選的批量業(yè)務(wù)頭(CMTBatHeader)、正文體、報尾(CMTMsgTail)組成。其中除正文體外,其余各塊都是定長的;*-正文體由一個或多個業(yè)務(wù)塊組成。每個業(yè)務(wù)塊由一個定長的業(yè)務(wù)頭(CMTBusinessHeader)與一個變長正文塊(CMTBusinessData)組成;*-正文塊(CMTBusinessData)由一個或多個TAG碼:TAG值對(報文域)組成,部分TAG值又可由多個定長子域組成;*-正文體可放置在報文中,也可存儲在文件中,而在報文中僅放置文件名;*-當(dāng)正文體在文件中,則說明批量業(yè)務(wù)頭、業(yè)務(wù)頭、正文塊存儲在文件中。*/注釋中可使用HTML標(biāo)記美化最終文檔,但別濫用美化標(biāo)記;較長的文檔注釋需要分段說明時,使用<br>分段。如果需要段首縮進(jìn)兩字符,使用全角的空格。文檔注釋中可以使用par增加一個小節(jié),靈活使用此標(biāo)記可以任意地擴展文檔的結(jié)構(gòu),滿足特殊描述的需要。如:/***…**par算法原理:*計算機部運算使用的基數(shù)是2,即滿2進(jìn)位。如果計算機字長為32位,則最大可以表示的整數(shù)為4294967296.<br>*為了突破計算機最大整數(shù)的限制,可以采取兩種做法,一是擴大基數(shù),二是增加字長。*根據(jù)此原理,本類使用65536作為基數(shù),每個整數(shù)的最大位數(shù)10(unsignedintarray[10]),*因此可以最大整數(shù)是65536的10次方,約1.4e48。通過變更基數(shù)或位數(shù),本類理論上可以處理的任意整數(shù)。*/需要生成圓點列表時使用-,需要生成編號列表時使用-#。需要特別說明一段文字,可以使用code/endcode。如:*par計算公式:*code*最大長度=MQCMT消息長度-sizeof(CMTMsgHeader)-sizeof(CMTMsgTail)-sizeof(MQMsg)+1*=MQCMT最大消息長度-175*endcode為使doxygen正確生成方法的連接,注釋中的方法名前后應(yīng)留一個空格。如該方法沒有重載,則不必使用參數(shù)列表,如GetTag()。如該方法重載,則必須使用參數(shù)(類型)列表,如GetTag(String,String,boolean,int,int)。語句塊注釋程序代碼主要流程、重要算法以與邏輯性較強的代碼和有特殊設(shè)計意圖的代碼(如沒有break的case塊、空循環(huán)體、空語句塊)等位置,應(yīng)添加語句塊注釋。通過語句塊注釋,應(yīng)能反映程序功能的概貌,注釋量不應(yīng)少于該模塊概要設(shè)計的流程描述量。語句塊注釋應(yīng)遵循下列原則:應(yīng)使用斷行注釋,即//;一目了然的語句不應(yīng)注釋;每個分支、每個功能段均應(yīng)注釋;應(yīng)放置在緊臨該語句塊上方或語句右側(cè),與其上方的語句塊應(yīng)留一空行,禁止放置在語句塊的下方,但可以在語句塊下方放置該語句塊結(jié)束的注釋。放置在語句右側(cè)的注釋垂直方向盡量對齊,縮進(jìn)位置與語句塊一樣。例:主要流程注釋 //參數(shù)檢查if(inpLen==0||inpData==0) {//檢查失敗 strOutStr.Empty(); return; }//清除行計數(shù)if(resetLineChars){lineChars=0;}//計算輸出長度outLen=2*4*(inpLen/3+1);//考慮到要添加回車換行,多分配點空間Stringstr=strOutStr.GetBufferSetLength(outLen);例:邏輯性較強//1.BankCode+PasswordStringstrWrkStr=sWrkBankCode+sWrkPassword;//2.計算MD5指紋StringstrMD5=md5.HashBuffer(strWrkStr.GetBuffer(0),strWrkStr.GetLength());//3.選取八位數(shù)字指紋StringBufferstr=strMD5.GetBuffer(0);StringBuffersTmpStr;intii=0;for(ii=0;ii<8;++ii)sTmpStr.append(str.charAt(ii));//4.組合固定串str="AUTHBEPS";for(ii=0;ii<8;++ii)sTmpStr.append(str.charAt(ii));例:特殊設(shè)計意圖switch(cis303.operStatus){case1://已付款CheckDBError("CISCODT0702",E_DB_UPDATE);break;case2://已退票CheckDBError("CISCODT0702",E_DB_UPDATE);break;default://DONOTHINGbreak;}代碼維護(hù)注釋維護(hù)已經(jīng)定版的代碼時,禁止直接刪除或編輯舊代碼,而應(yīng)使用注釋保留舊代碼,然后在舊代碼下方增加新修改后的代碼。代碼維護(hù)注釋應(yīng)放置到被修改代碼的上方,使用斷行注釋,并應(yīng)注明修改日期、修改人、修改原因。對代碼塊進(jìn)行修改的,還應(yīng)標(biāo)明修改結(jié)束的位置。代碼維護(hù)注釋應(yīng)從行首開始,不必縮進(jìn)。例:注銷舊代碼//2005-04-13lnydelete:將此類遷移到commexception.java文件。/*//支持異常處理的系統(tǒng),直接拋出錯誤voidThrowMsgException(intcode,StringtagName,StringerrText){Strings;if(errText.equal(""))s=errText;if(tagName.equal(""))s=s+"("+tagName+")";ThrowException(code,s);}*/例:修改舊代碼//清空數(shù)據(jù)Clean(false);//解讀報文塊//2005-09-02lnymodify:增加自動讀取報體文件功能。//returnPatch(msg);if(IsEmptyStr(msg)){return0;}例:增加新代碼//2005-09-02lnyappend:增加自動讀取報體文件功能。intretCode=Patch(pMsg);if(retCode!=0)returnretCode;if(bodyInFile&&autoReadBodyFile){//Autoreadthebodyfile.CBuffedFilereader;if(!reader.Open(strFileName,false,false)){Stringstr="打開報文體文件[%s]失敗!"+strFileName;THROW_OUT(E_NEEDBUSIDATA,str);}…}return0;//2005-09-02lnyappendend.}編碼風(fēng)格排版風(fēng)格縮進(jìn)與對齊程序代碼排版應(yīng)采用縮進(jìn)風(fēng)格編寫程序,每層縮進(jìn)一個制表位(TAB)或四個空格。應(yīng)用程序全部代碼應(yīng)保持一致,要么使用TAB,要么使用四個空格,不應(yīng)混用。左花括號({)單獨占一行且與右花括號(})對齊。例:if(!IsQuit()){return0;}應(yīng)書寫為:if(!IsQuit()){return0;}每行只定義一個變量或包含一個語句。例:intretCode,maxLen;應(yīng)書寫為:intretCode;intmaxLen;超長的語句(>80字符)、調(diào)用參數(shù)或表達(dá)式應(yīng)分成多行書寫。語句應(yīng)在逗號分隔符或句號分隔符處劃分新行;調(diào)用參數(shù)應(yīng)每參數(shù)一行;表達(dá)式應(yīng)在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句易讀。例:長表達(dá)式if(!IsNumberString(cis410Detail.bankCode)||StrLen(cis410Detail.bankCode)!=12||StrCmp(cis410Detail.bankCode,cis410DBankCode)==0)應(yīng)書寫為:If(!IsNumberString(cis410Detail.bankCode)||StrLen(cis410Detail.bankCode)!=12||StrCmp(cis410Detail.bankCode,cis410DBankCode)==0)例:長語句StringBufferstr=newStringBuffer();str.append("one").append("two").append("three").append("four").append("five").append("six").append("seven").append("eight");應(yīng)書寫為:str.append("one").append("two").append("three").append("four").append("five").append("six").append("seven").append("eight")例:長參數(shù)THROW_OUT(E_INVALIDLIST,StrPrint("票交機構(gòu)行別非數(shù)字或長度非3位![%s]",cis410Detail.clsCode).GetBuffer(0));應(yīng)書寫為:THROW_OUT(E_INVALIDLIST,StrPrint("票交機構(gòu)行別非數(shù)字或長度非3位![%s]",cis410Detail.clsCode).GetBuffer(0));例:長參數(shù)sheet.addMergedRegion(newRegion(SUB_TITLE_FROM_LINE,0,SUB_TITLE_FROM_LINE,endPosition));應(yīng)書寫為:sheet.addMergedRegion(newRegion(SUB_TITLE_FROM_LINE,0,SUB_TITLE_FROM_LINE,endPosition));對類的多個變量賦值時,將等號對齊。例:rect.top=0;rect.left=0;rect.right=300;rect.bottom=200;應(yīng)書寫為:rect.top=0;rect.left=0;rect.right=300;rect.bottom=200;if、for、do、while、case、switch、default等語句獨占一行,且if、for、do、while等語句的執(zhí)行部分總要加括號{}。例:if(!IsQuit())exit(0);應(yīng)書寫為:if(!IsQuit()){exit(0);}空格與空行相鄰兩個功能相對獨立的代碼塊間應(yīng)使用空行隔開。如代碼塊較短,則可以使用注釋進(jìn)行區(qū)分,此時可以不必使用空行。例:msg=msg_in101.toInnerCisMsg(msg_Biz);System.out.println(msg);msg_in101=newMsg_cis101("{C:}");System.out.println(msg_in101.toInnerCisMsg());msg_in101.getTagFields("{C:}","");System.out.println(msg_in101.toInnerCisMsg());in_head=newInterior_basHeadB(msg);System.out.println(in_head.toExteriorCisMsg());msg=msg_in101.toOuterCisMsg();System.out.println(msg);ex_head=newExterior_basHeadB(msg);msg=msg_in301.toInnerCisMsg(msgbody301);System.out.println(msg);msg_in301.getTagFields("{C:}","");System.out.println(msg_in301.toInnerCisMsg());in_head=newInterior_basHeadB(msg);System.out.println(in_head.toExteriorCisMsg());msg=msg_in301.toOuterCisMsg(msgbody301);System.out.println(msg);ex_head=newExterior_basHeadB(msg);System.out.println(ex_head.toInteriorCisMsg("2","1"));應(yīng)書寫為:msg=msg_in101.toInnerCisMsg(msg_Biz);System.out.println(msg);msg_in101=newMsg_cis101("{C:}");System.out.println(msg_in101.toInnerCisMsg());msg_in101.getTagFields("{C:}","");System.out.println(msg_in101.toInnerCisMsg());in_head=newInterior_basHeadB(msg);System.out.println(in_head.toExteriorCisMsg());msg=msg_in101.toOuterCisMsg();System.out.println(msg);ex_head=newExterior_basHeadB(msg);msg=msg_in301.toInnerCisMsg(msgbody301);System.out.println(msg);msg_in301.getTagFields("{C:}","");System.out.println(msg_in301.toInnerCisMsg());in_head=newInterior_basHeadB(msg);System.out.println(in_head.toExteriorCisMsg());msg=msg_in301.toOuterCisMsg(msgbody301);System.out.println(msg);ex_head=newExterior_basHeadB(msg);System.out.println(ex_head.toInteriorCisMsg("2","1"));變量申明之后應(yīng)使用空行與代碼隔開。例:Interior_basHeadBin_head;Exterior_basHeadBex_head;Stringmsg;msg=msg_in101.toInnerCisMsg(msg_Biz);System.out.println(msg);msg_in101=newMsg_cis101("{C:}");System.out.println(msg_in101.toInnerCisMsg());msg_in101.getTagFields("{C:}","");System.out.println(msg_in101.toInnerCisMsg());in_head=newInterior_basHeadB(msg);System.out.println(in_head.toExteriorCisMsg());msg=msg_in101.toOuterCisMsg();System.out.println(msg);ex_head=newExterior_basHeadB(msg);應(yīng)書寫為:Interior_basHeadBin_head;Exterior_basHeadBex_head;Stringmsg;msg=msg_in101.toInnerCisMsg(msg_Biz);System.out.println(msg);msg_in101=newMsg_cis101("{C:}");System.out.println(msg_in101.toInnerCisMsg());msg_in101.getTagFields("{C:}","");System.out.println(msg_in101.toInnerCisMsg());in_head=newInterior_basHeadB(msg);System.out.println(in_head.toExteriorCisMsg());msg=msg_in101.toOuterCisMsg();System.out.println(msg);ex_head=newExterior_basHeadB(msg);返回語句要和其他語句用空行分開。例:StringBufferstr=newStringBuffer();str.append(blockMark);str.append(mesgLen);str.append(reserve1);str.append(reserve2);str.append(reserve);str.append(finalMark);returnstr.toString();應(yīng)書寫為:StringBufferstr=newStringBuffer();str.append(blockMark);str.append(mesgLen);str.append(reserve1);str.append(reserve2);str.append(reserve);str.append(finalMark);returnstr.toString();比較操作符,賦值操作符,算術(shù)操作符,邏輯操作符,位域操作符等雙目運算符前后應(yīng)加空格與操作數(shù)隔開。例:i=i+1;if(i>10)i=(i>>2);應(yīng)書寫為:i=i+1;if(i>10){i=(ii>>2);}逗號、分號后面應(yīng)加空格,但前面不應(yīng)加空格。例:for(intii=0;ii<10;ii++)應(yīng)書寫為:for(intii=0;ii<10;ii++)在關(guān)鍵字和其后的括號之間加一個空格。例:if(i>10)for(ii=0;ii<10;ii++)應(yīng)書寫為:if(i>10)for(ii=0;ii<10;ii++)單目運算符不應(yīng)加空格與操作數(shù)隔開。例:while(!IsQuit()){ii++;a[ii]=a[ii]+1;}應(yīng)書寫為:while(!IsQuit()){ii++;a[ii]=a[ii]+1;}方法名與括號間、類與屬性間、左括號后、右括號前、不應(yīng)加空格。例:Stringstr=setName.GetName(orgName);if(str=="uname"){oldS=str;}應(yīng)書寫為:Stringstr=setName.GetName(orgName);if(str=="uname"){oldS=str;}括號使用復(fù)雜的表達(dá)式應(yīng)使用括號以避免二義性,不應(yīng)依賴運算符優(yōu)先級。如:if((i>0)||(i<=-12))、(p++)+1。位運算時應(yīng)使用括號,如:i=(sumVal<<4)。return與throw非函數(shù),不應(yīng)使用括號。如:returnretCode。包與類引用引用包或類時,應(yīng)遵循下列原則:按Java級、外部包、應(yīng)用級、包級的順序放置import語句,并使用空行分隔各級;每級部按字母順序放置import;盡量使用類的全稱,避免使用*,除非引用包的大部分類;僅引用本類使用的包或類。變量與常量在一個public接口類SysConstVars(或類似接口)中使用publicstaticfinal顯式定義應(yīng)用使用的全部全局常量,并編寫每個全局常量的文檔化注釋。在一個publicfinal類SysVars(或類似類)中使用publicstatic定義應(yīng)用使用的全部全局變量,并編寫每個全局變量的文檔化注釋。SysVars類應(yīng)提供publicstaticInitSysVars()方法完成全局變量的賦值,并應(yīng)提供私有的構(gòu)造函數(shù),防止應(yīng)用創(chuàng)建多個全局變量類實例。代碼中頻繁使用的數(shù)值應(yīng)定義為全局常量;盡量少全局變量的使用。給全局變量賦值時注意其值域圍,避免值越界。避免使用與外部變量同名的局部變量;禁止使用關(guān)鍵字、保留字作為變量名。如下列為不良寫法:例:intmaxSize=100;for(intii=0;ii<10;ii++){intmaxSize+=ii;System.out.println(maxSize);}總在定義變量時指定其初始值,無論此變量是靜態(tài)變量還是局部變量,避免使用沒有初始化的變量。充分使用Java語言的特性,在使用局部變量前,盡可能晚地定義它,并應(yīng)增加注釋說明。不要復(fù)用一個變量。每個變量用途應(yīng)明確,頻繁變更用途容易讓人迷惑。例:intreadSize=0;readSize=reader.Read(buffer,10240);if(readSize==10240){readSize=CallProcess(buffer);if(readSize!=0)returnreadSize;}應(yīng)書寫為:intreadSize=0;readSize=reader.Read(buffer,10240);if(readSize==10240){intretCode=CallProcess(buffer);if(retCode!=0)returnretCode;}注意變量的值域圍,避免值溢出或丟失精度。類編寫類設(shè)計應(yīng)提高類部的聚合度,降低與外部的耦合度,確保類對外接口簡單而完備,即為外部提供充分且必要的功能調(diào)用。Java類訪問控制級別由private、package、protected、private四級,沒有指定訪問限制描述的級別默認(rèn)為package級。類設(shè)計應(yīng)避免使用package級,除非需要實現(xiàn)類似于C++的友元類。類實例變量應(yīng)是私有的,為簡化繼承類的編寫,部分實例變量可以是保護(hù)的,盡量避免聲明公用的類實例變量;類變量應(yīng)是公用的,部分特殊的類變量可以聲明為保護(hù)的或私有的;應(yīng)盡量減少類變量,因為它擴大了類的外部耦合度。避免在類中聲明一個嵌套的類,除非該類是本類的工具類且僅供本類使用。避免定義final類,除非確知此類決不會產(chǎn)生繼承,如全局變量類。認(rèn)真選擇類間關(guān)系,盡量避免類的繼承。一個類對另一個類的引用,能使用使用關(guān)系的(usea),就不要使用包含關(guān)系(hasa);能使用包含關(guān)系的,就不要使用繼承關(guān)系(isa)。確實需要繼承關(guān)系時,基類應(yīng)設(shè)計為接口類。應(yīng)為每個類設(shè)計缺省構(gòu)造函數(shù),并確保每個類的構(gòu)造函數(shù)均完整地初始化全部實例變量和沒有初始值的類變量。類構(gòu)造函數(shù)除完成類變量初始化外,應(yīng)避免調(diào)用與執(zhí)行方法數(shù),尤其是可能拋出異常的方法。在一個publicfinal類SysUtils(或類似類)中使用publicstatic定義應(yīng)用使用的全部全局方法,并編寫每個全局方法的文檔化注釋。SysUtils類可以包含必須的全局變量或全局常量,并應(yīng)提供私有的構(gòu)造函數(shù),防止應(yīng)用創(chuàng)建多個全局方法類實例。類應(yīng)實現(xiàn)Cloneable和Serializable接口,應(yīng)為類編寫equals()、hashCode()、toString()、clone()方法。clone方法應(yīng)先調(diào)用父類的clone方法,再完成本類變量的復(fù)制?;纠缦拢篛bjectclone(){try{ThisClassobj=(ThisClass)super.clone();obj.field1=field1.clone();obj.field2=field2;returnobj;}catch(CloneNotSupportedExceptione){thrownewInternalError("UnexpectedCloneNotSUpportedException:"+e.getMessage());}}為每個類編寫一個main()方法用于測試類的功能。為類設(shè)計一個cleanup()完成實例的清理操作供外部應(yīng)用顯式調(diào)用。如果期望由Java垃圾回收器調(diào)用finalize()完成此任務(wù),則應(yīng)覆蓋finalize(),并確認(rèn)finalize()在本應(yīng)用中可工作(需調(diào)用System.runFinalizersOnExit(true)激活此功能)。派生類需覆蓋finalize()時,應(yīng)注意在本類finalize()方法末尾調(diào)用super.finalize()完成父類的清理工作。方法編寫盡量減少參數(shù)個數(shù),沒有參數(shù)時明確地使用void說明。輸入?yún)?shù)盡量放置在左邊,輸出參數(shù)盡量放置在右邊。方法入口點應(yīng)檢查每個參數(shù)的合法性。Java賦值操作、參數(shù)傳遞均使用引用,因此方法體可以修改對象參數(shù)的屬性(C++背景的程序員應(yīng)特別注意這點區(qū)別)。編寫方法時,除非確有必要,否則應(yīng)避免修改對象參數(shù)。如果方法體期望以對象參數(shù)為基礎(chǔ)修改部分屬性,但又不希望修改后的屬性影響原調(diào)用對象,則應(yīng)在方法體中調(diào)用對象參數(shù)的clone()方法。(應(yīng)注意調(diào)用clone()并不完全保險,除非對象參數(shù)的每個屬性均定制了clone()方法)。例:A.JavapublicclassA{publicintcodeValue=100;/**CreatesanewinstanceofA*/publicA(){}publicvoidprint(){System.out.println("codeValue="+codeValue);}}publicclassMain{/**CreatesanewinstanceofMain*/publicMain(){}publicvoidprint(Aa){Ab=a;b.codeValue+=11111;b.print();}/***paramargsthecommandlinearguments*/publicstaticvoidmain(String[]args){Mainm=newMain();Aa=newA();a.codeValue=54321;m.print(a);//輸出65432a.print();//期望輸出54321,實際輸出65432。}}顯式聲明方法的返回值,沒有返回值的方法使用void說明。返回對象的方法,可以聲明返回接口或基類對象,這樣更具靈活性(應(yīng)注意這可能導(dǎo)致不兼容的類型轉(zhuǎn)換失?。?。必須完整處理函數(shù)返回碼,并預(yù)留通用返回碼的處理,避免新增加的返回碼被忽略。例:intretCode=busi.CheckBusiness();if(retCode==-1){…return;}if(retCode==-2){…return;}應(yīng)書寫為:intretCode=busi.CheckBusiness();if(retCode!=-1&&retCode!=-2){//通用化返回碼處理return;}if(retCode==-1){…return;}if(retCode==-2){…return;}方法體不應(yīng)超過200行代碼,嵌套不應(yīng)超過5層。功能復(fù)雜的方法應(yīng)分拆為多個子方法。但結(jié)構(gòu)簡單重復(fù)的方法(如包含大量的switch)或分拆后需要傳遞大量參數(shù)的方法(功能聯(lián)系緊密,難以分拆的),可以超過200行。能在循環(huán)體外完成的處理,應(yīng)放置在循環(huán)體外。多重循環(huán)的,應(yīng)將大循環(huán)放置在最層。避免一樣的代碼段多處出現(xiàn),應(yīng)使用方法組織這些代碼,再多處調(diào)用,增強代碼的可維護(hù)性。方法的功能應(yīng)盡量簡單與單一,面面俱到的方法難以理解、測試和維護(hù)。if語句總是有相應(yīng)的else語句,switch語句總是有相應(yīng)的default語句,并將最常見的條件放置在前面。在正常情況下不可能到達(dá)的分支,放置拋出異常語句或記錄日志。任何情況下均不可能到達(dá)的分支或不必進(jìn)行任何處理的分支,放置特殊設(shè)計意圖注釋說明語句,如://donothingathere。需要輸出換行時,應(yīng)調(diào)用System.println(),避免使用\n作為換行輸出。方法應(yīng)盡量只有一個出口,但入口參數(shù)檢查失敗返回的或方法是分支多功能的,可以多個出口點返回。例:單點出口booleanIsSpaceStr(StringinStr,intmaxLen){booleanretValue=true;if(!SysUtils.IsEmptyStr(inStr)){if(maxLen>0){retValue=false;}else{//donothingathere.}}else{//donothingathere.}returnretValue;}應(yīng)書寫為:booleanisSpaceStr(StringinStr,intmaxLen){if(SysUtils.IsEmptyStr(inStr))returntrue;if(maxLen==0)returntrue;…returnfalse;}例:StringGetErrMsg(interrCode){StringwrkStr;switch(errCode){case1:wrkStr="error1";break;case2:wrkStr="error2";break;case3:wrkStr="error3";break;default:wrkStr="error0";break;}returnwrkStr;}應(yīng)書寫為:StringGetErrMsg(interrCode){StringwrkStr;switch(errCode){case1:return"error1";case2:return"error2";case3:return"error3";default:return"error0";}return"error0";}異常處理應(yīng)用拋出的異常應(yīng)是RuntimeException類或派生類對象。頂層的main()函數(shù)應(yīng)該截獲所有的異常,并且打印在屏幕上或記錄在日志中。避免濫用異常機制。不要為了便捷而拋出異常,不要用異常來報告那些經(jīng)常會發(fā)生的錯誤。一個正常情況下可能到達(dá)分支,決不能拋出異常;正常情況下永遠(yuǎn)不能到達(dá)的分支,應(yīng)使用異常。如:行號沒有登錄,應(yīng)使用返回值而非異常;行號不存在,應(yīng)使用異常而非返回值。程序拋出的異常最好是一個對象;捕捉異常時,應(yīng)先派生類后父類的順序放置catch塊,并使用類對象的引用獲取異常。函數(shù)拋出異常前,應(yīng)完成本函數(shù)操作的恢復(fù)工作,撤銷本函數(shù)進(jìn)行的變更,如關(guān)閉文件、釋放資源等。確實需要函數(shù)外部進(jìn)行恢復(fù)的,編碼前應(yīng)確定恢復(fù)的原則。函數(shù)可能拋出異常時,應(yīng)注釋代碼可能拋出的異常。特殊限制性能與優(yōu)化編寫代碼時,始終應(yīng)考慮性能與優(yōu)化問題。這并非要浪費大量的時間優(yōu)化每段代碼,而是在編碼時就應(yīng)該注意代碼的效率,避免編寫低效的代碼。后期的性能優(yōu)化,往往導(dǎo)致代碼隱含更多的錯誤和難于理解與維護(hù)。以下是性能優(yōu)化的幾點建議:避免在循環(huán)中構(gòu)造與釋放對象;大量串操作時應(yīng)使用StringBuffer對象而非String;避免太多的使用synchronized關(guān)鍵字;避免使用java.util.Vector類,因為它是synchronized的。中止運行應(yīng)只在main()方法中調(diào)用System.exit()中止系統(tǒng)運行。類方法需要中止程序運行時,應(yīng)返回碼值通知main()完成此任務(wù)。垃圾回收J(rèn)ava對象沒有被任何一個變量指向時,才會被垃圾回收器回收。因此為加快對象回收,特別是大對象的回收,當(dāng)應(yīng)用不再使用某對象時,應(yīng)盡早設(shè)置變量值為null以釋放對象,而非等到對象離開作用域。由于Java回收空間需較大的系統(tǒng)開銷,為了提高系統(tǒng)效率,垃圾回收器通常只在有可回收的對象且系統(tǒng)需要進(jìn)行回收時才執(zhí)行回收操作,換句話說釋放的對象不會立即被回收。為加快Java回收頻度,應(yīng)用可以直接調(diào)用System.gc()觸發(fā)回收過程。但應(yīng)注意頻繁調(diào)用System.gc()可能帶來系統(tǒng)效率的下降,因此在創(chuàng)建大量對象前或釋放大量對象后,才需要調(diào)用System.gc()。這可緩解存溢出問題。*使用-Xverbose:gc參數(shù)運行程序可以觀察存回收的情況。第三方工具使用第三方工具包或控件時,要注意以下幾點:充分了解應(yīng)用接口、使用環(huán)境與使用時注意事項;不能過分相信其正確性;除非必要,不要使用不熟悉的第三方工具包與控件。編譯軟件應(yīng)提供統(tǒng)一的編譯文件完成各組成部分的編譯。編譯可以使用操作系統(tǒng)腳本命令或流行的apacheant工具腳本。JSP編碼文件命名與存放位置JSP命名應(yīng)采用完整的英文單詞簡要描述說明其功能,盡可能包括一個生動的動詞。第一個單詞首字母小寫,其他單詞首字母大寫。如:viewMessage.jsp、editUser.jsp或者forumChooser.jsp等。Servlet命名一般對應(yīng)于所服務(wù)的對象加后綴Servlet來命名,如:UserServlet,TradeServlet等。JSP相關(guān)文件擴展名與存放位置列如下表:文件類型擴展名存放位置JSP.jsp<contextroot>/<subsystempath>/JSPfragment.jspf<contextroot>/WEB-INF/jspf/<subsystempath>/stylesheet.css<contextroot>/css/JavaScript.js<contextroot>/js/HTMLpage.html<contextroot>/<subsystempath>/webresource.jpg,.gif<contextroot>/images/taglibrary.tld<contextroot>/WEB-INF/tld/注:JSPfragment指包含在其他JSP文件中的JSP文件(沒有外部關(guān)聯(lián)的JSP文件)。contextroot指應(yīng)用程序的上下文根,即
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- CCAA - 2017年06月環(huán)境管理體系基礎(chǔ)答案及解析 - 詳解版(100題)
- 山西省晉中市2025-2026年九年級上歷史期末試卷(含答案)
- CCAA - 認(rèn)證基礎(chǔ) 認(rèn)通基摸底考試三答案及解析 - 詳解版(62題)
- CCAA - 2021年05月認(rèn)證基礎(chǔ)答案及解析 - 詳解版(62題)
- 選礦供料工崗前安全管理考核試卷含答案
- 薄膜電阻器制造工崗前操作考核試卷含答案
- 高壓熔斷器裝配工安全演練考核試卷含答案
- 紡織印花制版工崗后模擬考核試卷含答案
- 橋梁工7S執(zhí)行考核試卷含答案
- 纖維染色工安全宣貫?zāi)M考核試卷含答案
- 2025年中考英語復(fù)習(xí)必背1600課標(biāo)詞匯(30天記背)
- 資產(chǎn)管理部2025年工作總結(jié)與2025年工作計劃
- 科技成果轉(zhuǎn)化技術(shù)平臺
- 下腔靜脈濾器置入術(shù)的護(hù)理查房
- 基建人員考核管理辦法
- 2025體育與健康課程標(biāo)準(zhǔn)深度解讀與教學(xué)實踐
- 礦山救援器材管理制度
- 2025西南民族大學(xué)輔導(dǎo)員考試試題及答案
- T/CSPSTC 17-2018企業(yè)安全生產(chǎn)雙重預(yù)防機制建設(shè)規(guī)范
- 2025年《三級物業(yè)管理師》考試復(fù)習(xí)題(含答案)
- 《數(shù)據(jù)與管理》課件
評論
0/150
提交評論