20061227

Loging 實務:log4j 設定檔範例


#設定 Logger(s),格式 logger_name = message_level, appender1, appender2, ...
log4j.rootCategory=error, stdout

#以下是給fileftp.java使用的專屬Category
log4j.category.doftp.name=info, X
#以下設定false時,訊息不會往rootCategory送,只會在doftp.name的自訂Categoey中
log4j.additivity.doftp.name=false

#設定 Appenders
#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

### 設定doftp.name是RollingFile的方式
log4j.appender.X=org.apache.log4j.RollingFileAppender
log4j.appender.X.File=doftp.log
log4j.appender.X.MaxFileSize=300KB
log4j.appender.X.MaxBackupIndex=2
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.ConversionPattern=%5p %d{yyyy-MM-dd HH:mm:ss} %m%n

20061226

測試預期的 Exception 行為

當某個方法我們預期會丟出 Exception 時,
可利用 fail 這個述詞來測試。
如以下的 JUnit 語法:

public void testGetUserException() {
User u = null;
try {
u = UserFetcher.getUser("ThisUserIdDoesNotExist");
fail("Should have gotten NoSuchUserException - used a bad user ID");
} catch (NoSuchUserException expected) {
; // Expected - intentional
}
}

20061222

組 SQL 字串時,加入 WHERE 1=1 條件,以增加組 SQL 字串彈性

若在一般程式語言存取關聯式資料庫,必須要組 SQL 字串,傳至後端的 DB Server,利用 WHERE 1=1,則可把條件句彈性的組合到 SQL 字串中,如下:

strSQL = "select * ";
strSQL +="from employee ";
strSQL +="where 1=1 ";
if(emp_no.length() > 0) {
strSQL +="and emp_no='"+emp_no+"' ";
}
if(emp_name.length() > 0) {
strSQL +="and emp_name='"+emp_name+"' ";
}

上述程式碼動態要將條件語句加入到原本的 SQL 字串中,而不用考慮原本 SQL 字串的格式。

多個欄位的單一關鍵字查詢,請用 or 運算子

試想,若你希望使用者輸入一個關鍵字來查詢資料, 此關鍵字可以是員工代號,或是員工姓名,那麼也許你會執行兩次 SQL,並判斷兩次 SQL 是否有資料,以達到上述功能:

SQL1:
sqlstr = "select *
from employee
where 1 = 1
and emp_no = '#{keyword}'"

SQL2:
sqlstr = "select *
from employee
where 1 = 1
and emp_name = '#{keyword}'"


上述二個 SQL 可簡單的以 or 運算子合併成下式:

SQL3:

sqlstr = "select *
from employee
where 1 = 1
and emp_no='#{keyword}' or emp_name = '#{keyword}'"

如此一來除了更為簡潔,也讓原本要執行兩次 SQL 查詢,減為一次。

20061221

電腦可能遭受的攻擊分類

惡意程式:
  • 電腦病毒:類似生物病毒必須依附在其它活體,電腦病毒必須依附在其它程式,感染其它程式來散佈
  • 電腦蟲:透過網路自動感染其它主機
  • 特洛伊木馬:可遠端控制其它主機

Web 的攻擊:

  • DoS:癱瘓網路服務,使其無法提供服務