fjkrws系統錯誤分析及log功能追加報告

polalisi發表於2007-08-31

社內homepage測試中,發現系統不太穩定,具體表現為

有些資料顯示插入成功,但是資料庫中並無此資料。

有些資料插入成功後,返回list頁面時,卻不顯示此資料資訊,但是在資料庫中有此資料。

分析原因:

1)在scheduleEdit.jsp頁面的javascript函式function insert(user11Code) 中,下列程式碼存在問題:

document.updateForm.submit();

alert(" 登録しました。");

document.updateForm.action = "/views/schedule/scheduleList.jsp?lg=1&loginCode="+userCode;

document.updateForm.submit();

這段程式碼在執行時,並不是先執行完①再執行②。而是先執行①,不管①是否執行完畢,就執行②,在②的彈出視窗中單擊確定後,在向下執行。這樣②的資訊只是說明①執行了,但具體執行得怎麼樣就不清楚了。即使②中有錯誤,也顯示不出錯誤資訊。而資料庫插入操作就是在①所執行的頁面中執行。

這樣造成的結果是:

資料庫操作是否成功,我們無法知道。

上述程式碼有可能存在不確定因素。

在更新和刪除功能中也應該存在這樣的問題。

2)解決辦法:

scheduleEdit.jsp頁面中,將上面程式碼修改為

document.updateForm.action = "/views/schedule/scheduleUpdateLogic.jsp?lg=1&loginCode="+userCode;

document.updateForm.submit();

其中紅色部分根據實際情況再做修改。

增加一個scheduleUpdateLogic.jsp頁面,將插入,更新,刪除的邏輯放入這個頁面,並將

int intResultBat = m_dbAccess_2.executeUpdate(sqlStr);

if(m_dbAccess_2!=null) m_dbAccess_2.close();

修改為

try{

int intResultBat = m_dbAccess_2.executeUpdate(sqlStr);

if (intResultBat >= 1) {

request.setAttribute("success","insert");

request.getRequestDispatcher("scheduleList.jsp").forward(request,response);

}

} catch (SQLException se) {

m_dbAccess_2.rollback();

request.setAttribute("error","データを更新するとき、異常がある. " +se.getMessage()); request.getRequestDispatcher("../common/exception.jsp").forward(request,response);

} finally {

if(m_dbAccess_2!=null)

m_dbAccess_2.close();

}

上面程式碼根據實際具體情況再做修改。

scheduleList.jsp頁面增加執行成功資訊

<body background="path%>/images/background.jpg" link="#FF00FF" onLoad="init();" onResize="resize();">

<!-- add wangsh 20070724 begin --&gt

<!-- 登録成功のメッセージを表示する begin --&gt

String success = (String)request.getAttribute("success")==null?"": ((String)request.getAttribute("success")).trim();

if (success.equals("insert")||success.equals("update")) {

%>

<script language="JavaScript">

alert(" 登録しました。");

script>

}

%>

<!-- 登録成功のメッセージを表示する end --&gt

<!-- add wangsh 20070724 end --&gt

更新,刪除按同樣方法修改。

經過這樣的修改,至少可以在出錯時顯示錯誤資訊,指示錯誤發生的原因。

1、 因為沒有log功能,所以出現錯誤無法查詢,故增加log4j系統日誌功能。

具體方法如下:

1) log4j.jar包放入專案的libWEB-INFlib目錄中。

2) 在專案的src目錄中增加log4j.properties屬性檔案,具體寫法如下:

log4j.rootLogger=debug, stdout, fjkrws

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%t] %C{1}.%M(%L) | %m%n

log4j.appender.fjkrws=org.apache.log4j.DailyRollingFileAppender

log4j.appender.fjkrws.Append=true

log4j.appender.fjkrws.file=c: empfjkrws.log

log4j.appender.fjkrws.DatePattern='_'yyyyMMddHH

log4j.appender.fjkrws.layout=org.apache.log4j.PatternLayout

log4j.appender.fjkrws.layout.ConversionPattern=%d %p [%t] %C{1}.%M(%L) | %m%n

3) common_schedule.jspcommonnosession.jspcommonstatistical_schedule.jspcommonstatistical.jsp檔案中增加

4) 具體的程式碼寫成

logger.debug("######");

logger.info("#######");

logger.error("######");

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10455649/viewspace-967259/,如需轉載,請註明出處,否則將追究法律責任。

相關文章