posts - 13, comments - 12, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2006年4月14日

          • RMI: java自身提供的用在分布時對象之間的通信機制。(類似于RPC) RMI-IIOP: RMI的可移植擴展,可以實現JAVA與CORBA的集成。
          • JDBC: 用于數據庫訪問的通用接口。
          • JTA,JTS: 用于提供事務處理的支持。
          • JMS: java消息服務。可以連接已有的面向消息的中間件,例如:MQSeries,MSMQ。 Java Servlet: 用來擴展Web服務器功能的網絡組件。基于請求/響應機制。
          • JSP: Java與HTML混合編程,類似于ASP。
          • JavaIDL: Java對COBRA的實現,允許與其他預言集成。且能讓分布式對象利用CORBA提供的全面服務。所以J2EE與CORBA完全兼容。
          • Java Mail: 平臺無關,協議無關地發送郵件。
          • J2EE連接器架構: 自動管理現有系統和中間件之間的諸多細節。
          • JAXP: Java操作XML。
          • JAAS: Java的用戶認證支持。
          • EJB: J2EE中最重要的部分,實現組件式開發的基礎。可以在多層的分布式環境中部署的服務器端軟件組件。
          • JNI: (Java Native Interface) 聲明Native代碼,用C/C++實現它。可以實現:??????????

          ?????????1、 使用標準JAVA不支持的功能,例如訪問Win32API。?
          ?????????2、 重用其他語言編寫的庫或應用程序。例如大量的C庫。?
          ?????????3、 需要用低級語言編程時,例如匯編。 Oracle所實現的C底層代碼與Java的無縫集成,就是JNI
          ??????????????????技術的很好例證。Oracle不單使用Java界面,還支持Java編寫的存儲過程。?

          • JNDI: 用于訪問命令和目錄系統。 JNDI為底層命名或目錄服務提供統一的API。可支持任何服務器名稱,標準服務有:LDAP,NDS,CORBA,LDAP活動目錄等。 J2EE終,可用JNDI發布下列組件:EJB,數據源(數據庫),JMS消息隊列。

          posted @ 2007-03-20 09:35 winder 閱讀(226) | 評論 (0)編輯 收藏

          近期遇到需要用JS腳本統一攔截一下頁面中form的submit方法以在頁面隱式提交時修改請求URL簡單實現如下:
          var?oldSubmit;
          var?form?=?document.forms[0];
          if(form?!=?null?&&?form?!=?'undefined'){
          ????????
          //備份submit函數
          ????form.oldSubmit?=?form.submit;
          ????????
          //覆蓋submit函數以實現攔截
          ????form.submit?=?function?(){
          ????????????
          //提交前做的操作..
          ????????????????//掉原函數來提交
          ????????form.oldSubmit();
          ????}
          ?
          }

          上面的代碼在頁面載入時先執行就會實現攔截,對顯示的用submit按鈕來提交的可以監控onsubmit事件來實現,這個方法很多沒什么太大問題。

          posted @ 2006-12-23 10:37 winder 閱讀(5041) | 評論 (11)編輯 收藏

          < html >
          ???
          < head >
          ??????
          < meta? http-equiv ="Refresh" ?content ="0;URL=./pages/login.jsp" >
          ???
          </ head >
          ???
          < body ></ body >
          </ html >

          posted @ 2006-12-06 09:38 winder 閱讀(243) | 評論 (0)編輯 收藏

          Tomcat 5.5把common\lib下的jta.jar刪除掉了,所以用hibernate時會報java.lang.NoClassDefFoundError: javax/transaction/Synchronization的錯誤。

          posted @ 2006-11-30 12:20 winder 閱讀(234) | 評論 (0)編輯 收藏

          <! DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN" >
          < html >
          < head >
          < meta? http-equiv ="Content-Type" ?content ="text/html;?charset=gb2312" >
          < title > 計時跳轉 </ title >
          </ head >

          < body? leftmargin ="0" ?topmargin ="0" >
          < table? border ="0" ?align ="center" >
          < tr >
          < td >
          < br >
          < table? width ="194" ?height ="113" ?border ="0" ?cellpadding ="0" ?cellspacing ="0" ? >
          ??
          < tr >
          ????
          < td >< a? href ="#" >< img? src ="images/ydzj.jpg" ?width ="397" ?height ="265" ?border ="0" ></ a ></ td >
          ??
          </ tr >
          ??
          < tr >
          ????
          < td? align ="center" >< div? id ="view" ></ div ></ td >
          ????????
          < script >
          ????????????
          var ?time? = ? 5000 ;
          ????????????
          var ?cc? = ?time / 1000 ;
          ????????????
          function ?count() {
          ????????????????
          if (cc? > ? - 1 ) {
          ????????????????????
          var ?vv? = ?document.getElementById('view');
          ????????????????????vv.innerHTML?
          = ?' < font?color = " #0066ff " ?size = " 2 " >< font?color = " red " > ' + cc + ' </ font > 秒后進入新頁面 </ font > ';
          ????????????????????cc
          -- ;
          ????????????????????setTimeout(
          " count() " , 1000 ); // 1秒延時
          ????????????????}
          else {
          ????????????????????goto();
          // 進入新頁面
          ????????????????}

          ????????????}

          ????????????
          function ?goto() {
          ????????????????location.href
          = '#';
          ????????????}

          ????????????count();
          ????????
          </ script >
          ??
          </ tr >
          </ table >
          </ td >
          </ tr >
          </ table >
          </ body >
          </ html >

          posted @ 2006-11-28 15:15 winder 閱讀(742) | 評論 (1)編輯 收藏

          1、創建新用戶

          useradd? [username]

          2、改變文件所屬組

          chown? [username:groupname] [filename]

          3、改變文件權限

          chmod [777] [filename]

          chmod [u|g|o|a] [-r|-w|x] [filename]

          4、環境變量導致的 -bash: command not found 問題解決

          修正主目錄下.bash_profile文件內容

          posted @ 2006-11-16 10:33 winder 閱讀(350) | 評論 (0)編輯 收藏

               摘要: 1 /**/ /* ?2 ??name:????????SimpleMap.js ?3 ??version:????1.0.0 ?4 ??aut...  閱讀全文

          posted @ 2006-07-28 13:16 winder 閱讀(1065) | 評論 (0)編輯 收藏

          筆記本是一個信息管理類軟件,集寫字板的編輯功能和數據庫的管理功能于一身,特別適合收藏大量的文字資料,是個人信息管理的得力助手。
          http://www.sz1001.net/soft/1907.htm

          posted @ 2006-04-30 13:27 winder 閱讀(202) | 評論 (0)編輯 收藏

          一、概述
          ?Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件

          、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式

          ;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一

          個配置文件來靈活地進行配置,而不需要修改應用的代碼。
            
            此外,通過Log4j其他語言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其語法和用法與在Java程序中

          一樣,使得多語言分布式系統得到一個統一一致的日志組件模塊。而且,通過使用各種第三方擴展,您可以很方便地將

          Log4j集成到J2EE、JINI甚至是SNMP應用中。

          二,使用前的準備。
          ?1、下載log4j 地址為:http://jakarta.apache.org/log4j/docs/download.html.
          ?2、你可能要用到的jar文件有:
          ??如果需要將日志發送到郵箱,則需要javamail API,JAF API (the JavaBeans Activation Framework)

          下載地址:??http://java.sun.com/products/javamail/
          ?http://java.sun.com/beans/glasgow/jaf.html
          ??如果需要jms的支持,則需要jms API 下載地址為:

          http://java.sun.com/products/jms/vendors.html
          三, Log4j介紹
          ?Log4j由三個重要的組件構成:日志信息的優先級 priority,日志信息的輸出目的地Appender,日志信息的輸

          出格式(布局)layout。
          ?1、日志的優先級,
          ?從低到高,依次有:DEBUG,INFO,WARN,ERROR,分別用來指定這條日志信息的重要程度;如果定義了了輸入的級

          別為INFO,則只有等于及高于這個級別的才進行處理,此時將輸入INFO,WARN,ERROR。值得注意的是,級別中還有兩個關

          鍵字,
          ?ALL:打印所有的日志,
          ?OFF:關閉所有的日志輸出。
          ?
          ?2、輸出端 Appender

          ?log4j提供了以下幾種常用的輸出目的地:
          ?org.apache.log4j.ConsoleAppender,將日志信息輸出到控制臺
          ?org.apache.log4j.FileAppender,將日志信息輸出到一個文件
          ?org.apache.log4j.DailyRollingFileAppender,將日志信息輸出到一個,并且每天輸出到一個新的日志文件,

          按照不同的配置可以定義每月一個日志文件,或者每周,每天,每小時,每分鐘等輸出一個新的日志文件。
          ?org.apache.log4j.RollingFileAppender,將日志信息輸出到一個文件,通過指定文件的的尺寸,當文件大小

          到達指定尺寸的時候會自動把文件改名,如名為example.log的文件會改名為example.log.1,同時產生一個新的

          example.log文件。如果新的文件再次達到指定尺寸,又會自動把文件改名為example.log.2,同時產生一個example.log

          文件。依此類推,直到example.log. MaxBackupIndex,MaxBackupIndex的值可在配置文件中定義。
          ?org.apache.log4j.WriterAppender,將日志信息以流格式發送到任意指定的地方。
          ?org.apache.log4j.jdbc.JDBCAppender,通過JDBC把日志信息輸出到數據庫中。
          ?org.apache.log4j.net.SMTPAppender,將日志信息以郵件的方式發送到指定的郵箱。

          ?3、輸出格式(布局)layout
          ?通過appender可以控制輸出的目的地,而如果要控制輸出的格式,就可通過log4j的layout組件來實現。通過配

          置文件定義一個appender的輸出格式,Log4j提供的布局模式有以下幾種:
          ?org.apache.log4j.ConsoleAppender,輸出到控制臺
          ?org.apache.log4j.HTMLLayout,以HTML表格形式布局
          ?org.apache.log4j.PatternLayout,可以靈活地指定布局模式
          ?org.apache.log4j.SimpleLayout,包含日志信息的級別和信息字符串

          ?值得一提的是org.apache.log4j.PatternLayout 以Pattern方式的布局,使用Pattern的方式來指定布局。

          pattern 的參數如下:ConversionPattern參數的格式含義
          ?格式名 含義
          ?%c 輸出日志信息所屬的類的全名
          ?%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd

          HH:mm:ss },輸出類似:2002-10-18- 22:10:28 ;比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.
          格式可以參考 java類 SimpleDateFormat,不過 按照此類的設置會影響速度。你可以選擇更快的方式 %d{ISO8601},

          %d{ABSOLUTE}, %d{RELATIVE}.或者使用log4j的ISO8601DateFormat, AbsoluteTimeDateFormat,

          RelativeTimeDateFormat 和 DateTimeDateFormat 方式.
          ?%f 輸出日志信息所屬的類的類名
          ?%l 輸出日志事件的發生位置,即輸出日志信息的語句處于它所在的類的第幾行
          ?%m 輸出代碼中指定的信息,如log(message)中的message
          ?%M 輸出日志信息中所發生的方法名。
          ?%n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
          ?%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推
          ?%r 輸出自應用啟動到輸出該日志信息所耗費的毫秒數
          ?%t 輸出產生該日志事件的線程名
          四、使用
          ?4.1.1 SimpleLayout 和 FileAppender 方式
          以下是以文件的輸出方式Appender和簡單的布局方式SimpleLayout的例子:

          import org.apache.log4j.Level;
          import org.apache.log4j.Logger;
          import org.apache.log4j.SimpleLayout;
          import org.apache.log4j.FileAppender;
          public class simpandfile {
          ?? static Logger logger = Logger.getLogger(simpandfile.class);
          ?? public static void main(String args[]) {
          ????? SimpleLayout layout = new SimpleLayout();

          ????? FileAppender appender = null;
          ????? try {
          ???????? appender = new FileAppender(layout,"output1.txt",false);
          ????? } catch(Exception e) {}

          ????? logger.addAppender(appender);
          ????? logger.setLevel((Level) Level.DEBUG);

          ????? logger.debug("Here is some DEBUG");
          ????? logger.info("Here is some INFO");
          ????? logger.warn("Here is some WARN");
          ????? logger.error("Here is some ERROR");
          ????? logger.fatal("Here is some FATAL");
          ?? }
          }
          ???????
          ?首先實例化Logger對象。static Logger logger = Logger.getLogger(simpandfile.class);然后指定輸出的方

          式和布局 appender = new FileAppender(layout,"output1.txt",false);logger.addAppender(appender);
          最后定義級別:logger.addAppender(appender);這樣完成了log4j日志類的初始化.接著就可以進行日志輸出了。這就是

          log4j日志類的使用時的一般順序。因以下程序比較簡單,特別的地方將會有注釋,將不再解釋。


          ?4.1.2. HTMLLayout 和 WriterAppender


          import java.io.*;
          import org.apache.log4j.Level;
          import org.apache.log4j.Logger;
          import org.apache.log4j.HTMLLayout;
          import org.apache.log4j.WriterAppender;
          public class htmlandwrite {
          ?? static Logger logger = Logger.getLogger(htmlandwrite.class);
          ?? public static void main(String args[]) {
          ????? HTMLLayout layout = new HTMLLayout();

          ????? WriterAppender appender = null;
          ????? try {
          ???????? FileOutputStream output = new FileOutputStream("output2.html");
          ???????? appender = new WriterAppender(layout,output);
          ????? } catch(Exception e) {}

          ????? logger.addAppender(appender);
          ????? logger.setLevel((Level) Level.DEBUG);

          ????? logger.debug("Here is some DEBUG");
          ????? logger.info("Here is some INFO");
          ????? logger.warn("Here is some WARN");
          ????? logger.error("Here is some ERROR");
          ????? logger.fatal("Here is some FATAL");
          ?? }
          }
          ???????
          ?

          4.1.3. PatternLayout and ConsoleAppender

          import org.apache.log4j.Level;
          import org.apache.log4j.Logger;
          import org.apache.log4j.PatternLayout;
          import org.apache.log4j.ConsoleAppender;
          public class consandpatt {
          ?? static Logger logger = Logger.getLogger(consandpatt.class);
          ?? public static void main(String args[]) {

          ????? // Note, %n is newline
          ????? String pattern =? "Milliseconds since program start: %r %n";
          ???????????? pattern += "Classname of caller: %C %n";
          ???????????? pattern += "Date in ISO8601 format: %d{ISO8601} %n";
          ???????????? pattern += "Location of log event: %l %n";
          ???????????? pattern += "Message: %m %n %n";
          ?????
          ????? PatternLayout layout = new PatternLayout(pattern);
          ????? ConsoleAppender appender = new ConsoleAppender(layout);

          ????? logger.addAppender(appender);
          ????? logger.setLevel((Level) Level.DEBUG);

          ????? logger.debug("Here is some DEBUG");
          ????? logger.info("Here is some INFO");
          ????? logger.warn("Here is some WARN");
          ????? logger.error("Here is some ERROR");
          ????? logger.fatal("Here is some FATAL");
          ?? }
          }

          4.2 使用配置文件來定義輸出Appender和布局格式Layout
          ?log4j支持兩種方式的配置方式,.properties 二進制文件和xml文件的方式。我們簡單講一下.properties的配

          置方式后,將主要討論xml文件的配置方式。
          ?
          ?4.2.1? 我們將以.properties文件的格式定義兩種輸出方式,一種是輸出到文件中,另一種是輸出到數據庫中


          ?
          ?首先定義simple.properties文件,文件定義如下:
          ?
          ?#定義了兩個輸出端
          ?log4j.rootLogger = INFO,f,db


          ?# 定義f輸出到文件,并且文件是隨著大小而增加的
          ?log4j.appender.f = org.apache.log4j.RollingFileAppender?
          ?log4j.appender.f.File = F:\\nepalon\\classes\\test1.log?
          ?log4j.appender.f.MaxFileSize = 1000KB?
          ?log4j.appender.f.MaxBackupIndex = 3?
          ?log4j.appender.f.layout = org.apache.log4j.PatternLayout
          ?
          ?log4j.appender.f.layout.ConversionPattern = %d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n

          ?#定義db輸出到數據庫
          ?log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender
          ?log4j.appender.db.BufferSize = 40
          ?log4j.appender.db.Driver = com.microsoft.jdbc.sqlserver.SQLServerDriver
          ?log4j.appender.db.URL = jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test
          ?log4j.appender.db.User = sa
          ?log4j.appender.db.Password =
          ?log4j.appender.db.layout = org.apache.log4j.PatternLayout
          ?log4j.appender.db.layout.ConversionPattern = INSERT INTO log4j (createDate, thread, priority,

          category, message) values('%d{ISO8601}', '%t', '%-5p', '%c', '%m')

          ?然后程序中將引用這配置文件。定義如下:

          ?import org.apache.log4j.Logger;
          ?import org.apache.log4j.xml.DOMConfigurator;

          ?public class Test {
          ?
          ?? ??static Logger logger = Logger.getLogger(Test.class);
          ?? ??public static void main(String args[]) {
          ????? ???//以property方式讀到配置文件。
          ???PropertyConfigurator.configure ( "simple.properties" ) ;
           
          ????? ???logger.debug("Here is some DEBUG");
          ????? ???logger.info("Here is some INFO");
          ????? ???logger.warn("Here is some WARN");
          ????? ???logger.error("Here is some ERROR");
          ????? ???logger.fatal("Here is some FATAL");
          ?? ??}
          ?}


          ?4.2.2 以xml配置

          ?程序如下:
          ?import org.apache.log4j.Logger;
          ?import org.apache.log4j.xml.DOMConfigurator;

          ?public class Test {
          ?
          ?? ??static Logger logger = Logger.getLogger(Test.class);
          ?? ??public static void main(String args[]) {
          ????? ???//以XML方式讀到配置文件。
          ??? DOMConfigurator.configure("xmllog4jconfig.xml");

           
          ????? ???logger.debug("Here is some DEBUG");
          ????? ???logger.info("Here is some INFO");
          ????? ???logger.warn("Here is some WARN");
          ????? ???logger.error("Here is some ERROR");
          ????? ???logger.fatal("Here is some FATAL");
          ?? ??}
          ?}


          ?xmllog4jconfig.xml 如下:

          ?<?xml version="1.0" encoding="UTF-8" ?>
          ?<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

          ?<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
          ???????
          ? ?<appender name="appender" class="org.apache.log4j.FileAppender">
          ??? ??<param name="File" value="Indentify-Log.txt"/>
          ??? ??<param name="Append" value="false"/>
          ??? ??<layout class="org.apache.log4j.PatternLayout">
          ???? ??? <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
          ??? ??</layout>
          ? ?</appender>

          ? ?<root>
          ??? ??<priority value ="debug"/>
          ??? ??<appender-ref ref="appender"/>
          ? ?</root>

          ?</log4j:configuration>


          ?對比properties方式和xml方式,可以看出他們程序中,除了定義讀取配置文件的方式不同外,其它的根本就沒

          有區別了,這也就是log4j的魅力所在了,不需要改變程序,只需要通過改變定義的配置文件,我們就可以控制日志的輸

          出方式,是否輸出,輸出格式。我們可以通過定義不同的xml文件來控制輸出方式.以下是各種輸出方式與布局的例子。
          ?
          ?4.2.3 比較簡單的一個。
          ?<?xml version="1.0" encoding="gb2312" ?>
          ?<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
          ?<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
          ?<!--
          ??配置輸出的日志目錄為在控制臺。
          ??格式采用為PatternLoyout,并且樣式為:%d{ISO8601} %r [%c :: %p %m]%n
          ?-->??
          ? ?<appender name="CA" class="org.apache.log4j.ConsoleAppender">???
          ??? ??<layout class="org.apache.log4j.PatternLayout">
          ????? ??<param name="ConversionPattern" value="%d{ISO8601} %r [%c :: %p %m]%n"/>
          ??? ??</layout>
          ? ?</appender>

          ? ?<root>
          ??? ??<priority value ="debug"/>
          ??? ?<appender-ref ref="CA"/>
          ? ?</root>

          ?</log4j:configuration>
          ?
          ?4.2.4 文件的輸出 pattern的布局
          ?<?xml version="1.0" encoding="UTF-8" ?>
          ?<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

          ?<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
          ???????
          ? ?<appender name="appender" class="org.apache.log4j.FileAppender">
          ??? ??<param name="File" value="Indentify-Log.txt"/>
          ??? ??<param name="Append" value="false"/>
          ??? ??<layout class="org.apache.log4j.PatternLayout">
          ????? ???<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
          ??? ??</layout>
          ? ?</appender>

          ? ?<root>
          ??? ??<priority value ="debug"/>
          ??? ?<appender-ref ref="appender"/>
          ? ?</root>

          ?</log4j:configuration>

          ?4.2.5 控制臺的輸出 和簡單的布局
          ?<?xml version="1.0" encoding="UTF-8" ?>
          ?<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

          ?<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
          ???????
          ? ?<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
          ??? ??<layout class="org.apache.log4j.SimpleLayout"/>
          ? ?</appender>

          ? ?<root>
          ??? ?<priority value ="debug" />
          ??? ??<appender-ref ref="ConsoleAppender"/>
          ? ?</root>

          ?</log4j:configuration>

          ?4.2.6 定義三種輸出方式,按照不同的級別,選擇不同的輸出方式.debug,info,級別通過System.out來打印。
          ?WARN,FATAL通過System.err來輸出。ERROR,FATAL發送到郵箱。

          ?<?xml version="1.0" encoding="UTF-8" ?>
          ?<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
          ?<log4j:configuration>
          ??? ?<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
          ??????? ?<param name="Target" value="System.out" />
          ??????? ?<layout class="org.apache.log4j.PatternLayout">
          ??????????? ??<param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m %n" />
          ?????? ?? </layout>
          ??????? ?<filter class="org.apache.log4j.varia.LevelRangeFilter">
          ??????????? ??<param name="LevelMin" value="DEBUG"/>
          ??????????? ??<param name="LevelMax" value="INFO"/>
          ??????? ?</filter>
          ??? ?</appender>
          ??? ?<appender name="STDERR"? class="org.apache.log4j.ConsoleAppender">
          ??????? ?<param name="Target" value="System.err" />
          ??????? ?<layout class="org.apache.log4j.PatternLayout">
          ??????????? ??<param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m %n" />
          ?????? ??</layout>
          ??????? ?<filter class="org.apache.log4j.varia.LevelRangeFilter">
          ??????????? ??<param name="LevelMin" value="WARN"/>
          ?????????? ??<param name="LevelMax" value="FATAL"/>
          ??????? ?</filter>
          ??? ?</appender>

          ??? ?<!--????????????????????????? -->
          ??? ?<!-- Declare the SMTPAppender -->
          ??? ?<!--????????????????????????? -->
          ??? ?<appender name="EMAIL"? class="org.apache.log4j.net.SMTPAppender">
          ??????? ?<param name="BufferSize" value="512" />
          ??????? ?<param name="SMTPHost" value="mail.suiyuanwu.com" />
          ??????? ?<param name="From" value="log4j@server5" />
          ??????? ?<param name="To" value="web@suiyuanwu.com" />
          ??????? ?<param name="Subject" value="[SMTPAppender] Application message" />
          ??????? ?<layout class="org.apache.log4j.PatternLayout">
          ??????????? ??<param name="ConversionPattern" value="[%d{ISO8601}]%n%n%-5p%n%n%c%n%n%m%n%n" />
          ??????? ?</layout>
          ??????? ?<filter class="org.apache.log4j.varia.LevelRangeFilter">
          ??????????? ??<param name="LevelMin" value="ERROR"/>
          ??????????? ??<param name="LevelMax" value="FATAL"/>
          ??????? ?</filter>
          ??? ?</appender>

          ??? ?<!--?????????????????????????? -->
          ??? ?<!-- setup log4j's root logger -->
          ??? ?<!--?????????????????????????? -->
          ??? ?<root>
          ?????? ??<level value="all" />
          ??????? ?<appender-ref ref="STDOUT"/>
          ??????? ?<appender-ref ref="STDERR"/>
          ??????? ?<appender-ref ref="EMAIL" />
          ?? ? </root>
          ?</log4j:configuration>
          ???
          五、參考資料
          ?1.http://www.vipan.com/htdocs/log4jhelp.html
          ???????? Don't Use System.out.println! Use Log4j - Vipan Singla
          ?2.http://jakarta.apache.org/log4j/docs/manual.html
          ? Short introduction to log4j - Ceki Gülcü - March 2002
          ?3.http://www-128.ibm.com/developerworks/cn/java/jw-log4j/
          ?log4j提供了對日志記錄的控制
          ?4.http://logging.apache.org/log4j/docs/documentation.html
          ?log4j提供的文檔。

          posted @ 2006-04-24 10:34 winder 閱讀(366) | 評論 (0)編輯 收藏

          1,全英文名電子書網站
          http://lab.lpicn.org/pub/books/

          2,中國IT實驗室的JAVA下載
          http://download.chinaitlab.com/special/javaebook.htm

          3,Java愛好者
          http://www.javafan.net/download.jsp?ClassID=1

          4,愛書吧
          http://www.ibook8.com

          5,?? 太陽花
          http://www.javadown.com.cn

          posted @ 2006-04-16 10:27 winder 閱讀(692) | 評論 (0)編輯 收藏

          為什么GenericServlet在init(ServletConfig config)基礎上增加了一個init()方法? 
           
            init()方法被GenericServlet.init(ServletConfig config)方法調用。
            
            init()方法方便了開發人員定制Servlet的初始化,而無須去維護ServletConfig對象的存儲工作。
            
            重寫GenericServlet.init(ServletConfig config)必須要顯示的調用super.init(config)方法。
            
            ServletContext.getContect(java.lang.String uripath)的作用是什么?
            
            返回同一Server中指定的path對應的ServletContext對象,通過該對象可以實現與Server中的其他Context打交道。
            
            uripath必須是以"/"開始(該路徑的含義是相對于整個Servlet文檔的根路徑,而不是當前ServletContext的根路徑)。
            
            Servlet生命周期是什么?
            
            一般的Servlet(GenericServlet,即與協議無關的Servlet)的生命周期:init() --> GenericServlet.service(ServletRequest req, ServletResponse res) --> destroy.
            
            HttpServlet的生命周期: init() --> GenericServlet.service(ServletRequest req, ServletResponse res)---> service(HttpServletRequest req, HttpServletResponse resp) --> doXXXX()-->destroy.
            
            有沒有必要重寫GenericServlet.service()方法?
            
            對于HttpServlet來說沒有必要。只需要重寫它的doXXXX()方法就可以了。HttpServlet中service()方法會自動的根據用戶請求類型把請求轉發給相應的doXXXX()方法(例如doGet()方法)。
            
            ServletRequest.getReader()和ServletRequest.getInputStream()如何使用?
            
            注意兩個方法不能同時使用。
            
            ServletRequest.getRealPath(String path)方法已經不推薦使用。
            
            請使用ServletContext.getRealPath(String path)方法。
            
            ServletResponse缺省的字符集(charset)是什么?

            ServletResponse缺省的字符集(charset)是ISO-8859-1,可以通過setContentType(java.lang.String)方法改變新的字符集。
            
            例如:setContentType("text/html; charset=Shift_JIS").
            
            關于字符集信息,可以瀏覽RFC 2045
            
            HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL()區別是什么? 
           
            request.getRequestURI() 返回值類似:/xuejava/requestdemo.jsp
            
            request.getRequestURL() 返回值類似:http://localhost:8080/xuejava/requestdemo.jsp
            
            HttpServletRequest.encodeURL()和HttpServletRequest.encodeRedirectURL(()區別是什么?為什么要有兩個不同的方法呢?
            
            當用URL-rewriting方式來管理Session的時候,需要用到以上的兩個方法。
            
            兩個方法的不同點是:兩個方法確定是否需要包含session ID的邏輯不同。
            
            在調用HttpServletResponse.sendRedirect前,應該先調用encodeRedirectURL()方法,否則可能會丟失Sesssion信息。 ...
            
            如何使你的Servlet或者JSP實現Single Thread Model?  

            對于Servlet實現javax.single.SingleThreadModel接口。
            
            對于JSP,在Page Directive中寫如下的語句<%@ page isThreadSafe="false" %>
            
            JSP Tag 和 JSP XML-based Tag
            
            ...
            
            如何把某一個JSP Page定義成為Error Page?為什么要這樣做?
            
            實現方法: <%@ page isErrorPage="true" %>
            
            為什么? 因為需要獲取Exception 對象(缺省情況下,在JSP Page中是不能直接使用“隱含對象” exception的)。
            
            JSP Page的執行順序是如何的?
            
            JSP Page的執行順序如下:
            
            JSP Page Translation. JSP Page --> Servlet source code.
            JSP Page Compilation. Servlet source code --> Servlet class.
            Load Class(First time or the server restarted)
            
            Create instance(可能會很多次,如果JSP Page中聲明了<%@ page isThreadSafe="false" %>)
            
            Call jspInit method(一般的JSP Page都沒有重寫這個方法,重寫需要在聲明語句段中)。
            
            Call _jspService method(類似與一般HttpServlet的doGet和doPost方法,但是可以同時用來處理Post和Getq請求)。
            
            Call jspDestroy method(Server在卸載Servet的時候,例如當Servlet很久沒有使用的情況)。
            
            JSP Page中有哪些隱含對象(Implicity Object)?各自的類型和作用是什么?
            
            request --
            reponse --
            session --
            application --
            out --
            page --
            pagecontext --
            exception -- 只有在當前JSP Page為Error Page的時候才有效。
            config --
            
            <jsp:include page="/foo/foo.jsp" %> 和 <@ include file="/foo/foo.jsp" %>的區別是什么?
            
            <jsp:include ... -- request time.
            <@ include ... -- Page translation time.
            
            Servlets/JSP Container(Engine)有幾種運行方式?
            
            Standalone
            Tomcat standalone mode
            In-process
            Tomcat running inside Apache Web Server.
            Out-of-process
            Apache + mod_jk + Tomcat
            
            Servlet,Servlet開發人員,Servlet API, Servlet Container的關系是什么?
            
            Servlet,Servlet開發人員 --->Servlet API --> Servlet Container
            The parts of an HTTP message
            
            Message part Description
            The initial line: Specifies the purpose of the request or response message
            例子:GET /reports/sales/index.html HTTP/1.0
            The header section:Specifies the meta-information, such as size, type, and encoding,
            about the content of the message
            A blank line:
            An optional message body: The main content of the request or response message
            
            下面是一個Response的例子:
            
            HTTP/1.0 200 OK
            Date: Tue, 01 Dec 2001 23:59:59 GMT
            Content-Type: text/html
            Content-Length: 52
            
            <html>
            <body>
            <h1>Hello, John!</h1>
            </body>
            </html>
            
            HTTP規范中定義了哪些方法?各自有什么用途?
            
            GET
            HEAD
            POST
            從 Http 1.1規范開始,增加了以下的方法:
            
            PUT
            OPTIONS
            TRACE
            DELETE
            CONNECT
            
            ServetRequest中為什么要定義:getContentType(),getContentLength()方法。
            
            根據HTTP協議規范,Request 和 Response一樣也有這些必不可少的內容!
            
            所以需要首先了解 HTTP Message的概念和其內容的格式,這些東西對于Request和Reponse是一樣的。
            
            對于GET方式發送的請求,其內容類型為:null
            
            對于POST方式發送的請求,其內容類型為:application/x-www-form-urlencoded
            
            POST方式發送請求的內容類似于:username=xuejava.
            
            RequestDispatcher.forward()和HttpServletResponse.sendRedirect()的區別是什么?
            
            RequestDispatcher.forward()是在服務器端運行;HttpServletResponse.sendRedirect()是通過向客戶瀏覽器發送命令來完成。
            
            所以RequestDispatcher.forward()對于瀏覽器來說是“透明的”;而HttpServletResponse.sendRedirect()則不是。
            
            另外,還要注意RequestDispatcher.forward()在調用的時候Response不能已經Commit了(Response.isCommitted())。
            
            ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)的區別是什么?為什么?
            
            ServletContext.getRequestDispatcher(String url)中的url只能使用絕對路徑;而ServletRequest.getRequestDispatcher(String url)中的url可以使用相對路徑。
            
            因為ServletRequest具有相對路徑的概念;而ServletContext對象無次概念。
            
            如何把請求轉移到另外一個Web App中的某個地址?
            
            ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)只能把請求轉移到同一個Web App中的地址。
            
            如果需要把請求轉移到另外一個Web App中的某個地址,可以按下面的做法:
            
            1. 獲得另外一個Web App的ServletConext對象(currentServletContext.getContext(uripath)).
            
            2. 調用ServletContext.getRequestDispatcher(String url)方法。

          posted @ 2006-04-15 22:00 winder 閱讀(114) | 評論 (0)編輯 收藏

               摘要: 1 定義頭和根元素部署描述符文件就像所有XML文件一樣,必須以一個XML頭開始。這個頭聲明可以使用的XML版本并給出文件的字符編碼。DOCYTPE聲明必須立即出現在此頭之后。這個聲明告訴服務器適用的servlet規范的版本(如2.2或2.3)并指定管理此文件其余部分內容的語法的DTD(Document Type Definition,文檔類型定義)。所有部署描述符文件的頂層(根)元素為web-ap...  閱讀全文

          posted @ 2006-04-14 09:13 winder 閱讀(658) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 横山县| 论坛| 舟山市| 佛坪县| 吉安县| 高阳县| 孙吴县| 康乐县| 彭山县| 泰兴市| 玉田县| 得荣县| 柘荣县| 泰和县| 新宾| 洛隆县| 武夷山市| 隆化县| 通城县| 杨浦区| 广南县| 汤原县| 万源市| 白山市| 汕尾市| 准格尔旗| 罗定市| 且末县| 邵武市| 宿州市| 怀集县| 黎平县| 商洛市| 长丰县| 德安县| 太谷县| 平山县| 吉木乃县| 壶关县| 宁晋县| 咸阳市|