锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓.JAVA鐢靛瓙涔?/p>
浼樼偣錛氫功綾嶉噺澶э紝緇忓父鏇存柊錛屾暀鑲茬綉涓嬭澆閫熷害瓚呭揩
涓嶈凍錛氭瘡澶╁彧鑳戒笅杞?鏈?/p>
絎竴閮ㄥ垎錛氶夋嫨棰?br/>QUESTION NO: 1
1銆乸ublic class Test {
public static void changeStr(String str){
str="welcome";
}
public static void main(String[] args) {
String str="1234";
changeStr(str);
System.out.println(str);
}
}
Please write the output result 錛?/p>
QUESTION NO:2
1. public class Test {
2. static boolean foo(char c) {
3. System.out.print(c);
4. return true;
5. }
6. public static void main( String[] argv ) {
7. int i =0;
8. for ( foo('A'); foo('B')&&(i<2); foo('C')){
9. i++ ;
10. foo('D');
12. }
13. }
14. }
What is the result?
A. ABDCBDCB
B. ABCDABCD
C. Compilation fails.
D. An exception is thrown at runtime.
QUESTION NO: 3
1. class A {
2. protected int method1(int a, int b) { return 0; }
3. }
Which two are valid in a class that extends class A? (Choose two)
A. public int method1(int a, int b) { return 0; }
B. private int method1(int a, int b) { return 0; }
C. private int method1(int a, long b) { return 0; }
D. public short method1(int a, int b) { return 0; }
E. static protected int method1(int a, int b) { return 0; }
QUESTION NO: 4
1. public class Outer{
2. public void someOuterMethod() {
3. // Line 3
4. }
5. public class Inner{}
6. public static void main( String[]argv ) {
7. Outer o = new Outer();
8. // Line 8
9. }
10. }
Which instantiates an instance of Inner?
A. new Inner(); // At line 3
B. new Inner(); // At line 8
C. new o.Inner(); // At line 8
D. new Outer.Inner(); // At line 8//new Outer().new Inner()
QUESTION NO: 5
Which method is used by a servlet to place its session ID in a URL that is written to the servlet's response output stream?
A. The encodeURL method of the HttpServletRequest interface.
B. The encodeURL method of the HttpServletResponse interface.
C. The rewriteURL method of the HttpServletRequest interface.
D. The rewriteURL method of the HttpServletResponse interface.
QUESTION NO: 6
Which two are equivalent? (Choose two)
A. <%= YoshiBean.size%>
B. <%= YoshiBean.getSize()%>
C. <%= YoshiBean.getProperty("size")%>
D. <jsp:getProperty id="YoshiBean" param="size"/>
E. <jsp:getProperty name="YoshiBean" param="size"/>
F. <jsp:getProperty id="YoshiBean" property="size"/>
G. <jsp:getProperty name="YoshiBean" property="size"/>
QUESTION NO: 7
Which of the following statements regarding the lifecycle of a session bean are correct?
1. java.lang.IllegalStateException is thrown if SessionContext.getEJBObject() is invoked when a stateful session bean instance is passivated.
2. SessionContext.getRollbackOnly() does not throw an exception when a session bean with bean-managed transaction demarcation is activated.
3. An exception is not thrown when SessionContext.getUserTransaction() is called in the afterBegin method of a bean with container-managed transactions.
4. JNDI access to java:comp/env is permitted in all the SessionSynchronization methods of a stateful session bean with container-managed transaction demarcation.
5. Accessing resource managers in the SessionSynchronization.afterBegin method of a stateful session bean with bean-managed transaction does not throw an exception.
絎簩閮ㄥ垎錛氭蹇甸
1錛?鎻忚堪Struts浣撶郴緇撴瀯錛熷搴斿悇涓儴鍒嗙殑寮鍙戝伐浣滀富瑕佸寘鎷摢浜涳紵
2錛?XML鍖呮嫭鍝簺瑙i噴鎶鏈紝鍖哄埆鏄粈涔堬紵
3錛?JSP鏈夊摢浜涘唴緗璞″拰鍔ㄤ綔錛熷畠浠殑浣滅敤鍒嗗埆鏄粈涔堬紵
4銆丼QL闂瓟棰?br/>SELECT * FROM TABLE
鍜?br/>SELECT * FROM TABLE
WHERE NAME LIKE '%%' AND ADDR LIKE '%%'
AND (1_ADDR LIKE '%%' OR 2_ADDR LIKE '%%'
OR 3_ADDR LIKE '%%' OR 4_ADDR LIKE '%%' )
鐨勬绱㈢粨鏋滀負浣曚笉鍚岋紵
5銆丼QL闂瓟棰?br/>琛ㄧ粨鏋勶細
1銆?琛ㄥ悕錛歡_cardapply
瀛楁(瀛楁鍚?綾誨瀷/闀垮害)錛?br/>g_applyno varchar 8錛?/鐢寵鍗曞彿錛堝叧閿瓧錛?br/>g_applydate bigint 8錛?/鐢寵鏃ユ湡
g_state varchar 2錛?/鐢寵鐘舵?br/>2銆?琛ㄥ悕錛歡_cardapplydetail
瀛楁(瀛楁鍚?綾誨瀷/闀垮害)錛?br/>g_applyno varchar 8錛?/鐢寵鍗曞彿錛堝叧閿瓧錛?br/>g_name varchar 30錛?/鐢寵浜哄鍚?br/>g_idcard varchar 18錛?/鐢寵浜鴻韓浠借瘉鍙?br/>g_state varchar 2錛?/鐢寵鐘舵?br/>鍏朵腑錛屼袱涓〃鐨勫叧鑱斿瓧孌典負鐢寵鍗曞彿銆?br/>棰樼洰錛?br/>1銆?鏌ヨ韜喚璇佸彿鐮佷負440401430103082鐨勭敵璇鋒棩鏈?br/>2銆?鏌ヨ鍚屼竴涓韓浠借瘉鍙風爜鏈変袱鏉′互涓婅褰曠殑韜喚璇佸彿鐮佸強璁板綍涓暟
3銆?灝嗚韓浠借瘉鍙風爜涓?40401430103082鐨勮褰曞湪涓や釜琛ㄤ腑鐨勭敵璇風姸鎬佸潎鏀逛負07
4銆?鍒犻櫎g_cardapplydetail琛ㄤ腑鎵鏈夊鏉庣殑璁板綍
鍦ㄥ簲鐢ㄧ▼搴忎腑娣誨姞鏃ュ織璁板綍鎬葷殑鏉ヨ鍩轟簬涓変釜鐩殑錛氱洃瑙嗕唬鐮佷腑鍙橀噺鐨勫彉鍖栨儏鍐碉紝鍛ㄦ湡鎬х殑璁板綍鍒版枃浠朵腑渚涘叾浠栧簲鐢ㄨ繘琛岀粺璁″垎鏋愬伐浣滐紱璺熻釜浠g爜榪愯鏃惰建榪癸紝浣滀負鏃ュ悗瀹¤鐨勪緷鎹紱鎷呭綋闆嗘垚寮鍙戠幆澧冧腑鐨勮皟璇曞櫒鐨勪綔鐢紝鍚戞枃浠舵垨鎺у埗鍙版墦鍗頒唬鐮佺殑璋冭瘯淇℃伅銆?/p>
鏈鏅氱殑鍋氭硶灝辨槸鍦ㄤ唬鐮佷腑宓屽叆璁稿鐨勬墦鍗拌鍙ワ紝榪欎簺鎵撳嵃璇彞鍙互杈撳嚭鍒版帶鍒跺彴鎴栨枃浠朵腑錛屾瘮杈冨ソ鐨勫仛娉曞氨鏄瀯閫犱竴涓棩蹇楁搷浣滅被鏉ュ皝瑁呮綾繪搷浣滐紝鑰屼笉鏄涓緋誨垪鐨勬墦鍗拌鍙ュ厖鏂ヤ簡浠g爜鐨勪富浣撱?/p>
鍦ㄥ己璋冨彲閲嶇敤緇勪歡寮鍙戠殑浠婂ぉ錛岄櫎浜嗚嚜宸變粠澶村埌灝懼紑鍙戜竴涓彲閲嶇敤鐨勬棩蹇楁搷浣滅被澶栵紝Apache涓烘垜浠彁渚涗簡涓涓己鏈夊姏鐨勬棩蹇楁搷浣滃寘-Log4j銆?/p>
Log4j鏄疉pache鐨勪竴涓紑鏀炬簮浠g爜欏圭洰錛岄氳繃浣跨敤Log4j錛屾垜浠彲浠ユ帶鍒舵棩蹇椾俊鎭緭閫佺殑鐩殑鍦版槸鎺у埗鍙般佹枃浠躲丟UI緇勪歡銆佺敋鑷蟲槸濂楁帴鍙f湇鍔″櫒銆丯T鐨勪簨浠惰褰曞櫒銆乁NIX Syslog瀹堟姢榪涚▼絳夛紱鎴戜滑涔熷彲浠ユ帶鍒舵瘡涓鏉℃棩蹇楃殑杈撳嚭鏍煎紡錛涢氳繃瀹氫箟姣忎竴鏉℃棩蹇椾俊鎭殑綰у埆錛屾垜浠兘澶熸洿鍔犵粏鑷村湴鎺у埗鏃ュ織鐨勭敓鎴愯繃紼嬨傛渶浠や漢鎰熷叴瓚g殑灝辨槸錛岃繖浜涘彲浠ラ氳繃涓涓厤緗枃浠舵潵鐏墊椿鍦拌繘琛岄厤緗紝鑰屼笉闇瑕佷慨鏀瑰簲鐢ㄧ殑浠g爜銆?/p>
姝ゅ錛岄氳繃Log4j鍏朵粬璇█鎺ュ彛錛屾偍鍙互鍦–銆丆++銆?Net銆丳L/SQL紼嬪簭涓嬌鐢↙og4j錛屽叾璇硶鍜岀敤娉曚笌鍦↗ava紼嬪簭涓竴鏍鳳紝浣垮緱澶氳璦鍒嗗竷寮忕郴緇熷緱鍒頒竴涓粺涓涓鑷寸殑鏃ュ織緇勪歡妯″潡銆傝屼笖錛岄氳繃浣跨敤鍚勭絎笁鏂規墿灞曪紝鎮ㄥ彲浠ュ緢鏂逛究鍦板皢Log4j闆嗘垚鍒癑2EE銆丣INI鐢氳嚦鏄疭NMP搴旂敤涓?/p>
鏈枃浠嬬粛鐨凩og4j鐗堟湰鏄?.2.3銆備綔鑰呰瘯鍥鵑氳繃涓涓畝鍗曠殑瀹㈡埛/鏈嶅姟鍣↗ava紼嬪簭渚嬪瓙瀵規瘮浣跨敤涓庝笉浣跨敤Log4j 1.2.3鐨勫樊鍒紝騫惰緇嗚瑙d簡鍦ㄥ疄璺典腑鏈甯鎬嬌鐢↙og4j鐨勬柟娉曞拰姝ラ銆傚湪寮鴻皟鍙噸鐢ㄧ粍浠跺紑鍙戠殑浠婂ぉ錛岀浉淇og4j灝嗕細緇欏箍澶х殑璁捐寮鍙戜漢鍛樺甫鏉ユ柟渚褲傚姞鍏ュ埌Log4j鐨勯槦浼嶆潵鍚э紒
鎴戜滑鍏堟潵鐪嬩竴涓畝鍗曠殑渚嬪瓙錛屽畠鏄竴涓敤Java瀹炵幇鐨勫鎴?鏈嶅姟鍣ㄧ綉緇滅▼搴忋傚垰寮濮嬫垜浠笉浣跨敤Log4j錛岃屾槸浣跨敤浜嗕竴緋誨垪鐨勬墦鍗拌鍙ワ紝鐒跺悗鎴戜滑灝嗕嬌鐢↙og4j鏉ュ疄鐜板畠鐨勬棩蹇楀姛鑳姐傝繖鏍鳳紝澶у灝卞彲浠ユ竻妤氬湴姣旇緝鍑哄墠鍚庝袱涓唬鐮佺殑宸埆銆?/p>
2.1.1. 瀹㈡埛紼嬪簭
package log4j ;
import java.io.* ;
import java.net.* ;
/**
*
* <p> Client Without Log4j </p>
* <p> Description: a sample with log4j</p>
* @version 1.0
*/
public class ClientWithoutLog4j {
/**
*
* @param args
*/
public static void main ( String args [] ) {
String welcome = null;
String response = null;
BufferedReader reader = null;
PrintWriter writer = null;
InputStream in = null;
OutputStream out = null;
Socket client = null;
try {
client = new Socket ( "localhost", 8001 ) ;
System.out.println ( "info: Client socket: " + client ) ;
in = client.getInputStream () ;
out = client.getOutputStream () ;
} catch ( IOException e ) {
System.out.println ( "error: IOException : " + e ) ;
System.exit ( 0 ) ;
}
try{
reader = new BufferedReader( new InputStreamReader ( in ) ) ;
writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
welcome = reader.readLine () ;
System.out.println ( "debug: Server says: '" + welcome + "'" ) ;
System.out.println ( "debug: HELLO" ) ;
writer.println ( "HELLO" ) ;
response = reader.readLine () ;
System.out.println ( "debug: Server responds: '" + response + "'") ;
System.out.println ( "debug: HELP" ) ;
writer.println ( "HELP" ) ;
response = reader.readLine () ;
System.out.println ( "debug: Server responds: '" + response + "'" ) ;
System.out.println ( "debug: QUIT" ) ;
writer.println ( "QUIT" ) ;
} catch ( IOException e ) {
System.out.println ( "warn: IOException in client.in.readln()" ) ;
System.out.println ( e ) ;
}
try{
Thread.sleep ( 2000 ) ;
} catch ( Exception ignored ) {}
}
}
2.1.2. 鏈嶅姟鍣ㄧ▼搴?/strong>
package log4j ;
import java.util.* ;
import java.io.* ;
import java.net.* ;
/**
*
* <p> Server Without Log4j </p>
* <p> Description: a sample with log4j</p>
* @version 1.0
*/
public class ServerWithoutLog4j {
final static int SERVER_PORT = 8001 ; // this server's port
/**
*
* @param args
*/
public static void main ( String args [] ) {
String clientRequest = null;
BufferedReader reader = null;
PrintWriter writer = null;
ServerSocket server = null;
Socket socket = null;
InputStream in = null;
OutputStream out = null;
try {
server = new ServerSocket ( SERVER_PORT ) ;
System.out.println ( "info: ServerSocket before accept: " + server ) ;
System.out.println ( "info: Java server without log4j, on-line!" ) ;
// wait for client's connection
socket = server.accept () ;
System.out.println ( "info: ServerSocket after accept: " + server ) ;
in = socket.getInputStream () ;
out = socket.getOutputStream () ;
} catch ( IOException e ) {
System.out.println( "error: Server constructor IOException: " + e ) ;
System.exit ( 0 ) ;
}
reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
writer = new PrintWriter ( new OutputStreamWriter ( out ) , true ) ;
// send welcome string to client
writer.println ( "Java server without log4j, " + new Date () ) ;
while ( true ) {
try {
// read from client
clientRequest = reader.readLine () ;
System.out.println ( "debug: Client says: " + clientRequest ) ;
if ( clientRequest.startsWith ( "HELP" ) ) {
System.out.println ( "debug: OK!" ) ;
writer.println ( "Vocabulary: HELP QUIT" ) ;
}
else {
if ( clientRequest.startsWith ( "QUIT" ) ) {
System.out.println ( "debug: OK!" ) ;
System.exit ( 0 ) ;
}
else{
System.out.println ( "warn: Command '" +
clientRequest + "' not understood." ) ;
writer.println ( "Command '" + clientRequest
+ "' not understood." ) ;
}
}
} catch ( IOException e ) {
System.out.println ( "error: IOException in Server " + e ) ;
System.exit ( 0 ) ;
}
}
}
}
2.2.1. 瀹㈡埛紼嬪簭
package log4j ;
import java.io.* ;
import java.net.* ;
// add for log4j: import some package
import org.apache.log4j.PropertyConfigurator ;
import org.apache.log4j.Logger ;
import org.apache.log4j.Level ;
/**
*
* <p> Client With Log4j </p>
* <p> Description: a sample with log4j</p>
* @version 1.0
*/
public class ClientWithLog4j {
/*
add for log4j: class Logger is the central class in the log4j package.
we can do most logging operations by Logger except configuration.
getLogger(...): retrieve a logger by name, if not then create for it.
*/
static Logger logger = Logger.getLogger
( ClientWithLog4j.class.getName () ) ;
/**
*
* @param args : configuration file name
*/
public static void main ( String args [] ) {
String welcome = null ;
String response = null ;
BufferedReader reader = null ;
PrintWriter writer = null ;
InputStream in = null ;
OutputStream out = null ;
Socket client = null ;
/*
add for log4j: class BasicConfigurator can quickly configure the package.
print the information to console.
*/
PropertyConfigurator.configure ( "ClientWithLog4j.properties" ) ;
// add for log4j: set the level
// logger.setLevel ( ( Level ) Level.DEBUG ) ;
try{
client = new Socket( "localhost" , 8001 ) ;
// add for log4j: log a message with the info level
logger.info ( "Client socket: " + client ) ;
in = client.getInputStream () ;
out = client.getOutputStream () ;
} catch ( IOException e ) {
// add for log4j: log a message with the error level
logger.error ( "IOException : " + e ) ;
System.exit ( 0 ) ;
}
try{
reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
welcome = reader.readLine () ;
// add for log4j: log a message with the debug level
logger.debug ( "Server says: '" + welcome + "'" ) ;
// add for log4j: log a message with the debug level
logger.debug ( "HELLO" ) ;
writer.println ( "HELLO" ) ;
response = reader.readLine () ;
// add for log4j: log a message with the debug level
logger.debug ( "Server responds: '" + response + "'" ) ;
// add for log4j: log a message with the debug level
logger.debug ( "HELP" ) ;
writer.println ( "HELP" ) ;
response = reader.readLine () ;
// add for log4j: log a message with the debug level
logger.debug ( "Server responds: '" + response + "'") ;
// add for log4j: log a message with the debug level
logger.debug ( "QUIT" ) ;
writer.println ( "QUIT" ) ;
} catch ( IOException e ) {
// add for log4j: log a message with the warn level
logger.warn ( "IOException in client.in.readln()" ) ;
System.out.println ( e ) ;
}
try {
Thread.sleep ( 2000 ) ;
} catch ( Exception ignored ) {}
}
}
2.2.2. 鏈嶅姟鍣ㄧ▼搴?/strong>
package log4j;
import java.util.* ;
import java.io.* ;
import java.net.* ;
// add for log4j: import some package
import org.apache.log4j.PropertyConfigurator ;
import org.apache.log4j.Logger ;
import org.apache.log4j.Level ;
/**
*
* <p> Server With Log4j </p>
* <p> Description: a sample with log4j</p>
* @version 1.0
*/
public class ServerWithLog4j {
final static int SERVER_PORT = 8001 ; // this server's port
/*
add for log4j: class Logger is the central class in the log4j package.
we can do most logging operations by Logger except configuration.
getLogger(...): retrieve a logger by name, if not then create for it.
*/
static Logger logger = Logger.getLogger
( ServerWithLog4j.class.getName () ) ;
/**
*
* @param args
*/
public static void main ( String args[]) {
String clientRequest = null ;
BufferedReader reader = null ;
PrintWriter writer = null ;
ServerSocket server = null ;
Socket socket = null ;
InputStream in = null ;
OutputStream out = null ;
/*
add for log4j: class BasicConfigurator can quickly configure the package.
print the information to console.
*/
PropertyConfigurator.configure ( "ServerWithLog4j.properties" ) ;
// add for log4j: set the level
// logger.setLevel ( ( Level ) Level.DEBUG ) ;
try{
server = new ServerSocket ( SERVER_PORT ) ;
// add for log4j: log a message with the info level
logger.info ( "ServerSocket before accept: " + server ) ;
// add for log4j: log a message with the info level
logger.info ( "Java server with log4j, on-line!" ) ;
// wait for client's connection
socket = server.accept() ;
// add for log4j: log a message with the info level
logger.info ( "ServerSocket after accept: " + server ) ;
in = socket.getInputStream() ;
out = socket.getOutputStream() ;
} catch ( IOException e ) {
// add for log4j: log a message with the error level
logger.error ( "Server constructor IOException: " + e ) ;
System.exit ( 0 ) ;
}
reader = new BufferedReader ( new InputStreamReader ( in ) ) ;
writer = new PrintWriter ( new OutputStreamWriter ( out ), true ) ;
// send welcome string to client
writer.println ( "Java server with log4j, " + new Date () ) ;
while ( true ) {
try {
// read from client
clientRequest = reader.readLine () ;
// add for log4j: log a message with the debug level
logger.debug ( "Client says: " + clientRequest ) ;
if ( clientRequest.startsWith ( "HELP" ) ) {
// add for log4j: log a message with the debug level
logger.debug ( "OK!" ) ;
writer.println ( "Vocabulary: HELP QUIT" ) ;
}
else {
if ( clientRequest.startsWith ( "QUIT" ) ) {
// add for log4j: log a message with the debug level
logger.debug ( "OK!" ) ;
System.exit ( 0 ) ;
}
else {
// add for log4j: log a message with the warn level
logger.warn ( "Command '"
+ clientRequest + "' not understood." ) ;
writer.println ( "Command '"
+ clientRequest + "' not understood." ) ;
}
}
} catch ( IOException e ) {
// add for log4j: log a message with the error level
logger.error( "IOException in Server " + e ) ;
System.exit ( 0 ) ;
}
}
}
}
2.2.3. 閰嶇疆鏂囦歡
2.2.3.1. 瀹㈡埛紼嬪簭閰嶇疆鏂囦歡
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
2.2.3.2. 鏈嶅姟鍣ㄧ▼搴忛厤緗枃浠?/p>
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
姣旇緝榪欎袱涓簲鐢ㄥ彲浠ョ湅鍑猴紝閲囩敤Log4j榪涜鏃ュ織鎿嶄綔鐨勬暣涓繃紼嬬浉褰撶畝鍗曟槑浜嗭紝涓庣洿鎺ヤ嬌鐢⊿ystem.out.println璇彞榪涜鏃ュ織淇℃伅杈撳嚭鐨勬柟寮忕浉姣旓紝鍩烘湰涓婃病鏈夊鍔犱唬鐮侀噺錛屽悓鏃惰兘澶熸竻妤氬湴鐞嗚В姣忎竴鏉℃棩蹇椾俊鎭殑閲嶈紼嬪害銆傞氳繃鎺у埗閰嶇疆鏂囦歡錛屾垜浠繕鍙互鐏墊椿鍦頒慨鏀規棩蹇椾俊鎭殑鏍煎紡錛岃緭鍑虹洰鐨勫湴絳夌瓑鏂歸潰錛岃屽崟綰緷闈燬ystem.out.println璇彞錛屾樉鐒墮渶瑕佸仛鏇村鐨勫伐浣溿?/p>
涓嬮潰鎴戜滑灝嗕互鍓嶉潰浣跨敤Log4j鐨勫簲鐢ㄤ綔涓轟緥瀛愶紝璇︾粏璁茶В浣跨敤Log4j鐨勪富瑕佹楠ゃ?/p>
Log4j鐢變笁涓噸瑕佺殑緇勪歡鏋勬垚錛氭棩蹇椾俊鎭殑浼樺厛綰э紝鏃ュ織淇℃伅鐨勮緭鍑虹洰鐨勫湴錛屾棩蹇椾俊鎭殑杈撳嚭鏍煎紡銆傛棩蹇椾俊鎭殑浼樺厛綰т粠楂樺埌浣庢湁ERROR銆乄ARN銆両NFO銆丏EBUG錛屽垎鍒敤鏉ユ寚瀹氳繖鏉℃棩蹇椾俊鎭殑閲嶈紼嬪害錛涙棩蹇椾俊鎭殑杈撳嚭鐩殑鍦版寚瀹氫簡鏃ュ織灝嗘墦鍗板埌鎺у埗鍙拌繕鏄枃浠朵腑錛涜岃緭鍑烘牸寮忓垯鎺у埗浜嗘棩蹇椾俊鎭殑鏄劇ず鍐呭銆?/p>
鍏跺疄鎮ㄤ篃鍙互瀹屽叏涓嶄嬌鐢ㄩ厤緗枃浠訛紝鑰屾槸鍦ㄤ唬鐮佷腑閰嶇疆Log4j鐜銆備絾鏄紝浣跨敤閰嶇疆鏂囦歡灝嗕嬌鎮ㄧ殑搴旂敤紼嬪簭鏇村姞鐏墊椿銆?/p>
Log4j鏀寔涓ょ閰嶇疆鏂囦歡鏍煎紡錛屼竴縐嶆槸XML鏍煎紡鐨勬枃浠訛紝涓縐嶆槸Java鐗規ф枃浠訛紙閿?鍊鹼級銆備笅闈㈡垜浠粙緇嶄嬌鐢↗ava鐗規ф枃浠跺仛涓洪厤緗枃浠剁殑鏂規硶錛?/p>
log4j.rootLogger = [ level ] , appenderName, appenderName, 鈥?鍏朵腑錛宭evel 鏄棩蹇楄褰曠殑浼樺厛綰э紝鍒嗕負OFF銆丗ATAL銆丒RROR銆乄ARN銆両NFO銆丏EBUG銆丄LL鎴栬呮偍瀹氫箟鐨勭駭鍒侺og4j寤鴻鍙嬌鐢ㄥ洓涓駭鍒紝浼樺厛綰т粠楂樺埌浣庡垎鍒槸ERROR銆乄ARN銆両NFO銆丏EBUG銆傞氳繃鍦ㄨ繖閲屽畾涔夌殑綰у埆錛屾偍鍙互鎺у埗鍒板簲鐢ㄧ▼搴忎腑鐩稿簲綰у埆鐨勬棩蹇椾俊鎭殑寮鍏熾傛瘮濡傚湪榪欓噷瀹氫箟浜咺NFO綰у埆錛屽垯搴旂敤紼嬪簭涓墍鏈塂EBUG綰у埆鐨勬棩蹇椾俊鎭皢涓嶈鎵撳嵃鍑烘潵銆?br/>appenderName灝辨槸鎸囧畾鏃ュ織淇℃伅杈撳嚭鍒板摢涓湴鏂廣傛偍鍙互鍚屾椂鎸囧畾澶氫釜杈撳嚭鐩殑鍦般?br/>
log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 鈥?log4j.appender.appenderName.option = valueN鍏朵腑錛孡og4j鎻愪緵鐨刟ppender鏈変互涓嬪嚑縐嶏細
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 鈥?log4j.appender.appenderName.layout.option = valueN鍏朵腑錛孡og4j鎻愪緵鐨刲ayout鏈変互涓嬪嚑縐嶏細
涓嬮潰灝嗚榪板湪紼嬪簭浠g爜涓庢牱浣跨敤Log4j銆?/p>
3.2.1.寰楀埌璁板綍鍣?/strong>
浣跨敤Log4j錛岀涓姝ュ氨鏄幏鍙栨棩蹇楄褰曞櫒錛岃繖涓褰曞櫒灝嗚礋璐f帶鍒舵棩蹇椾俊鎭傚叾璇硶涓猴細
public static Logger getLogger( String name)錛?閫氳繃鎸囧畾鐨勫悕瀛楄幏寰楄褰曞櫒錛屽鏋滃繀瑕佺殑璇濓紝鍒欎負榪欎釜鍚嶅瓧鍒涘緩涓涓柊鐨勮褰曞櫒銆侼ame涓鑸彇鏈被鐨勫悕瀛楋紝姣斿錛?br/>
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;
3.2.2.璇誨彇閰嶇疆鏂囦歡
褰撹幏寰椾簡鏃ュ織璁板綍鍣ㄤ箣鍚庯紝絎簩姝ュ皢閰嶇疆Log4j鐜錛屽叾璇硶涓猴細
BasicConfigurator.configure ()錛?鑷姩蹇熷湴浣跨敤緙虹渷Log4j鐜銆?br/>PropertyConfigurator.configure ( String configFilename) 錛氳鍙栦嬌鐢↗ava鐨勭壒鎬ф枃浠剁紪鍐欑殑閰嶇疆鏂囦歡銆?br/>DOMConfigurator.configure ( String filename ) 錛氳鍙朮ML褰㈠紡鐨勯厤緗枃浠躲?/p>
3.2.3.鎻掑叆璁板綍淇℃伅錛堟牸寮忓寲鏃ュ織淇℃伅錛?/strong>
褰撲笂涓や釜蹇呰姝ラ鎵ц瀹屾瘯錛屾偍灝卞彲浠ヨ交鏉懼湴浣跨敤涓嶅悓浼樺厛綰у埆鐨勬棩蹇楄褰曡鍙ユ彃鍏ュ埌鎮ㄦ兂璁板綍鏃ュ織鐨勪換浣曞湴鏂癸紝鍏惰娉曞涓嬶細
Logger.debug ( Object message ) ; Logger.info ( Object message ) ; Logger.warn ( Object message ) ; Logger.error ( Object message ) ;
濡傛灉鎮ㄦ兂鏇存繁鍏ュ湴浜嗚ВLog4j錛岃緇忓父璁塊棶涓嬮潰鎻愬強鐨勭浉鍏抽摼鎺ャ?br/>Log4j欏圭洰涓婚〉------------------------------------------------------http://www.log4j.org/
Log4j FAQ -------------------------------------------------------http://www-900.ibm.com/developerWorks/cn/java/l-log4j/www.log4j.org/log4j/faq.html
褰撲竴涓唬鐮侀」鐩ぇ浜嗕互鍚庯紝姣忔閲嶆柊緙栬瘧錛屾墦鍖咃紝嫻嬭瘯絳夐兘浼氬彉寰楅潪甯稿鏉傝屼笖閲嶅錛屽洜姝璇█涓湁make鑴氭湰鏉ュ府鍔╄繖浜涘伐浣滅殑鎵歸噺瀹屾垚銆傚湪Java涓簲鐢ㄦ槸騫沖彴鏃犲叧鎬х殑錛屽綋鐒朵笉浼氱敤騫沖彴鐩稿叧鐨刴ake鑴氭湰鏉ュ畬鎴愯繖浜涙壒澶勭悊浠誨姟浜嗭紝ANT鏈韓灝辨槸榪欐牱涓涓祦紼嬭剼鏈紩鎿庯紝鐢ㄤ簬鑷姩鍖栬皟鐢ㄧ▼搴忓畬鎴愰」鐩殑緙栬瘧錛屾墦鍖咃紝嫻嬭瘯絳夈傞櫎浜嗗熀浜嶫AVA鏄鉤鍙版棤鍏崇殑澶栵紝鑴氭湰鐨勬牸寮忔槸鍩轟簬XML鐨勶紝姣攎ake鑴氭湰鏉ヨ榪樿濂界淮鎶や竴浜涖?br/>
姣忎釜ant鑴氭湰錛堢己鐪佸彨build.xml錛変腑璁劇疆浜嗕竴緋誨垪浠誨姟(target)錛氭瘮濡傚浜庝竴涓竴鑸殑欏圭洰鍙兘闇瑕佹湁浠ヤ笅浠誨姟銆?/span>
<project default="usage" basedir="."> <!-- =================================================================== --> <!-- Initialization target --> <!-- =================================================================== --> <target name="init"> <tstamp/> <property file="${basedir}/build.properties" /> <property name="Name" value="ProjectFullName"/> <property name="name" value="project_name"/> <property name="version" value="0.2"/> <property name="year" value="2003"/> <echo message="----------- ${Name} ${version} [${year}] ------------"/> <property name="debug" value="off"/> <property name="optimize" value="on"/> <property name="deprecation" value="on"/> <property name="src.dir" value="./src/WEB-INF/src"/> <property name="lib.dir" value="./src/WEB-INF/lib"/> <property name="packages" value="com.chedong.*,org.apache.lucene.*"/> <property name="build.src" value="./src/WEB-INF/build"/> <property name="build.dest" value="./src/WEB-INF/classes"/> <property name="build.javadocs" value="./src/doc"/> <path id="classpath"> <pathelement path="${jsdk_jar}"/> <fileset dir="${lib.dir}"> <include name="**/*.jar"/> </fileset> </path> <filter token="year" value="${year}"/> <filter token="version" value="${version}"/> <filter token="date" value="${TODAY}"/> <filter token="log" value="true"/> <filter token="verbose" value="true"/> </target> <!-- =================================================================== --> <!-- Help on usage --> <!-- =================================================================== --> <target name="usage" depends="init"> <echo message="${Name} Build file"/> <echo message="-------------------------------------------------------------"/> <echo message=""/> <echo message=" available targets are:"/> <echo message=""/> <echo message=" jar --> generates the ${name}.jar file"/> <echo message=" build --> compiles the source code"/> <echo message=" javadoc --> generates the API documentation"/> <echo message=" clean --> cleans up the directory"/> <echo message=""/> <echo message=" Please rename build.properties.default to build.properties"/> <echo message=" and edit build.properties to specify JSDK 2.3 classpath."/> <echo message=""/> <echo message=" See the comments inside the build.xml file for more details."/> <echo message="-------------------------------------------------------------"/> <echo message=""/> <echo message=""/> </target> <!-- =================================================================== --> <!-- Prepares the source code --> <!-- =================================================================== --> <target name="prepare-src" depends="init"> <!-- create directories --> <mkdir dir="${build.src}"/> <mkdir dir="${build.dest}"/> <!-- copy src files --> <copy todir="${build.src}"> <fileset dir="${src.dir}"/> </copy> </target> <!-- =================================================================== --> <!-- Compiles the source directory --> <!-- =================================================================== --> <target name="build" depends="prepare-src"> <javac srcdir="${build.src}" destdir="${build.dest}" debug="${debug}" optimize="${optimize}"> <classpath refid="classpath"/> </javac> </target> <!-- =================================================================== --> <!-- Creates the class package --> <!-- =================================================================== --> <target name="jar" depends="build"> <jar jarfile="${lib.dir}/${name}.jar" basedir="${build.dest}" includes="**"/> </target> <!-- =================================================================== --> <!-- Creates the API documentation --> <!-- =================================================================== --> <target name="javadoc" depends="build"> <mkdir dir="${build.javadocs}"/> <javadoc packagenames="${packages}" sourcepath="${build.src}" destdir="${build.javadocs}" author="true" version="true" use="true" splitindex="true" windowtitle="${Name} API" doctitle="${Name}"> <classpath refid="classpath"/> </javadoc> </target> <!-- =================================================================== --> <!-- Clean targets --> <!-- =================================================================== --> <target name="clean" depends="init"> <delete dir="${build.src}"/> <delete dir="${build.dest}/org"/> <delete dir="${build.dest}/com"/> <delete> <fileset dir="${build.dest}" includes="**/*.class"/> </delete> </target> </project> <!-- End of file --> |
緙虹渷浠誨姟錛歶sage 鎵撳嵃甯姪鏂囨。錛屽憡璇夋湁閭d簺浠誨姟閫夐」錛氬彲鐢ㄧ殑鏈塨uild, jar, javadoc鍜宑lean.
鍒濆鍖栫幆澧冨彉閲忥細init
鎵鏈変換鍔¢兘鍩轟簬涓浜涘熀鏈幆澧冨彉閲忕殑璁劇疆鍒濆鍖栧畬鎴愶紝鏄悗緇叾浠栦換鍔$殑鍩虹錛屽湪鐜鍒濆鍖栬繃紼嬩腑錛屾湁2鐐規瘮杈冨彲浠ユ柟渚胯緗細
1 闄や簡浣跨敤鍗寸己鐪佺殑property璁劇疆浜咼AVA婧愯礬寰勫拰杈撳嚭璺緞澶栵紝寮曠敤浜嗕竴涓閮ㄧ殑build.properties鏂囦歡涓殑璁劇疆錛?br/><property file="${basedir}/build.properties" />
榪欐牱澶ч儴鍒嗙畝鍗曢厤緗敤鎴峰彧瑕佷細鐪嬫噦build.properties灝卞彲浠ヤ簡錛屾瘯绔焁ML姣旇搗key value鐨勫睘鎬ф枃浠惰繕鏄鍙鎬у樊涓浜涖傜敤build.properties涔熷彲浠ユ柟渚垮叾浠栫敤鎴蜂粠緙栬瘧鐨勭粏鑺備腑瑙f斁鍑烘潵銆?br/>
2 CLASSPATH璁劇疆錛氫嬌鐢ㄤ簡鍏朵腑鐨勶細
<path id="classpath"> <pathelement path="${jsdk_jar}"/> <fileset dir="${lib.dir}"> <include name="**/*.jar"/> </fileset> </path> |
鍒欑浉褰撲簬璁劇疆浜嗭細CLASSPATH=/path/to/resin/lib/jsdk23.jar;/path/to/project/lib/*.jar;
鏂囦歡澶嶅埗錛歱repare-src
鍒涘緩涓存椂SRC瀛樻斁鐩綍鍜岃緭鍑虹洰褰曘?/span>
<!-- =================================================================== --> <!-- Prepares the source code --> <!-- =================================================================== --> <target name="prepare-src" depends="init"> <!-- create directories --> <mkdir dir="${build.src}"/> <mkdir dir="${build.dest}"/> <!-- copy src files --> <copy todir="${build.src}"> <fileset dir="${src.dir}"/> </copy> </target> |
緙栬瘧浠誨姟錛歜uild
緙栬瘧鏃剁殑CLASSPATH鐜閫氳繃涓涓嬫柟寮忔壘鍒板紩鐢ㄤ竴涓猵ath瀵硅薄
<classpath refid="classpath"/> |
鎵撳寘浠誨姟錛歫ar
瀵瑰簲鐢ㄦ墦鍖呯敓鎴愰」鐩墍鍐欏悕鐨?jar鏂囦歡
<!-- =================================================================== --> <!-- Creates the class package --> <!-- =================================================================== --> <target name="jar" depends="build"> <jar jarfile="${lib.dir}/${name}.jar" basedir="${build.dest}" includes="**"/> </target> 鐢熸垚JAVADOC鏂囨。浠誨姟: javadoc <!-- =================================================================== --> <!-- Creates the API documentation --> <!-- =================================================================== --> <target name="javadoc" depends="build"> <mkdir dir="${build.javadocs}"/> <javadoc packagenames="${packages}" sourcepath="${build.src}" destdir="${build.javadocs}" author="true" version="true" use="true" splitindex="true" windowtitle="${Name} API" doctitle="${Name}"> <classpath refid="classpath"/> </javadoc> </target> 娓呯┖涓存椂緙栬瘧鏂囦歡錛歝lean <!-- =================================================================== --> <!-- Clean targets --> <!-- =================================================================== --> <target name="clean" depends="init"> <delete dir="${build.src}"/> <delete dir="${build.dest}/org"/> <delete dir="${build.dest}/com"/> <delete> <fileset dir="${build.dest}" includes="**/*.class"/> </delete> </target> |
TODO錛?br/>鏇村浠誨姟/鎵╁睍錛氾紙鏍蜂緥錛?br/>