servlet監(jiān)聽(tīng)器
在WEB應(yīng)用中響應(yīng)特定對(duì)象的特定事件
好處:更方便的控制application,session,request對(duì)象的發(fā)生的特定事件
可以集中處理特定的事件
-------------------------------------------------------------------
HttpSession監(jiān)聽(tīng)器接口
1 HttpSessionListener(需要配web.xml)
2 HttpSessionAttributeListener(需要配web.xml)
3 HttpSessionBindingListener
4 HttpSessionActivationListener(需要配web.xml)
-------------------------------------------------------------------
HttpSessionListener
1 sessionCreated()//當(dāng)session對(duì)象產(chǎn)生的時(shí)候調(diào)用的方法
2 sessionDestroyed()//當(dāng)session對(duì)象消滅的時(shí)候調(diào)用的方法
web.xml配置
<listener>
<listener-class>webbook.chapter14.CounterListener(對(duì)應(yīng)的實(shí)現(xiàn)類(lèi))
</listener-class>
</listener>
---------------------------------------------------------------------
HttpSessionAttributeListener
1 attributeAdded()//添加時(shí)調(diào)用
2 attributeReplaced()//替換時(shí)調(diào)用
3 attributeRemoved()//刪除時(shí)調(diào)用
產(chǎn)生事件的代碼
session.setAttribute("username","wangwu");
session.setAttribute("username","lisi");
session.removeAttribute("username");
-----------------------------------------------------------------
HttpSessionBindingListener
1 valueBound();
2 vaoueUnbound();
調(diào)用機(jī)制
如果一個(gè)類(lèi)實(shí)現(xiàn)了HttpSessionBindingListener接口,則當(dāng)這個(gè)類(lèi)的對(duì)象通過(guò)session.setAttribute()被綁定到Session對(duì)象中時(shí),
則該對(duì)象的valueBound()方法被自動(dòng)調(diào)用,當(dāng)這個(gè)對(duì)象從Session中刪除時(shí)(調(diào)用session.invalidate()和session.removeAtrribute()
方法,或Session對(duì)象過(guò)期)valueUnbound()方法將被自動(dòng)調(diào)用.
--------------------------------------------------------------------------------------------------------
HttpSessionActivationListener
1 sessionDidActivate();
2 sessionWillPassivate();
---------------------------------------------------------------------------------
例子:
1 建立CounterListener處理類(lèi)
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class CounterListener implements HttpSessionListener {
private static long onlineNumber=0;
public void sessionCreated(HttpSessionEvent se) {
onlineNumber++;
}
public void sessionDestroyed(HttpSessionEvent se) {
onlineNumber--;
}
public static long getOnlineNumber(){
return onlineNumber;
}
}
2 配置web.xml
<listener>
<listener-class>com.tags.CounterListener</listener-class>
</listener>
3 JSP頁(yè)面
<%@page import="com.tags.CounterListener;"%>
<body>
當(dāng)前的在線(xiàn)人數(shù):<%=CounterListener.getOnlineNumber() %> <br>
</body>
----------------------------------------------------------------------------
ServletContext監(jiān)聽(tīng)器接口
ServletContextListener
1 contextInitialized()
2 contextDestroyed()
調(diào)用機(jī)制
當(dāng)在web應(yīng)用中部署了實(shí)現(xiàn)該接口的實(shí)現(xiàn)類(lèi)后,在WEB容器加載WEB應(yīng)用時(shí)(如:啟動(dòng)服務(wù)器)就會(huì)自動(dòng)調(diào)用contextInitialized()方法,
而當(dāng)WEB容器銷(xiāo)毀WEB應(yīng)用時(shí)(如:關(guān)閉服務(wù)器),會(huì)自動(dòng)調(diào)用contextDestroyed()方法.
-----------------------------------------------------------------------------------
ServletContextAttributeListener
1 attributeAdded()
2 attributeReplaced()
3 attributeRemoved()
觸發(fā)事件的代碼
context.setAttribute("counter",new Integer(0));
context.setAttribute("counter",new Integer(100));
context.removeAttribute("counter");
-----------------------------------------------------------
HttpServletRequest監(jiān)聽(tīng)器
ServletRequestListener
1 requestInitialized();
2 requestDestroyed()
調(diào)用機(jī)制
與ServletContextListener接口類(lèi)似,在web應(yīng)用中部署實(shí)現(xiàn)該接口的實(shí)現(xiàn)類(lèi)扣,在HttpServletRequest對(duì)象(JSP中的request對(duì)象)建立
或者被銷(xiāo)毀時(shí),由web容器自動(dòng)調(diào)用requestInitialized()或者requestDestroyed()方法.
--------------------------------------------------------------------------------------
ServletRequestAttributeListener
1 attributeAdded();
2 attributeReplaced();
3 attributeRemoved();
觸發(fā)事件的代碼
request.setAttribute("username","lisi");
request.setAttribute("username","wangwu");
request.removeAttribute("username");
******************************************************************
public class ListenerOnline implements HttpSessionLinstener,ServletContext{
private application;
public void sessionCreated(HttpSessionEvent event){
Integer n=(Integer)application.getAttrabute("z",1000);
application.setAttrabute("z",n.IntValue()+1);
}
public void sessionDestroyed(HttpSessionEvent event){
}
public void contextInitialized(ServletContextEvent event){
application=event.getServletContext();
application.setAttrabute("z",1000);
}
public void contextDestroyed(ServletContextEvent event){
}
}
<listener>
<listener-class>com.tags.ListenerOnline</listener-class>
</listener>
<meta http-equiv="refresh" content="3"/>
-HttpServletRequest request對(duì)象
request.getParameter("param");
request.setAttribute("loginname",object);
request.setCharacterEncoding("gb2312");
輸入內(nèi)容轉(zhuǎn)成中文
-HttpServletResponse response對(duì)象
response.setContentType("text/html;charset=gb2312");
設(shè)置輸出為中文
response.sendRediredt("url");
-RequsetDispatcher dispatcher=request.getRequestDispatcher(url);
定義轉(zhuǎn)發(fā)器
dispatcher.forward(request,response);
-HttpSession session對(duì)象
創(chuàng)建對(duì)象的兩種方法
HttpSession session = request.getSession(boolean value);
HttpSession session = request.getSession();
方法一:true時(shí),返回該當(dāng)前請(qǐng)求相關(guān)的會(huì)話(huà),如果不存在創(chuàng)建一個(gè)新的會(huì)話(huà),并返回。
false時(shí),返回該當(dāng)前請(qǐng)求相關(guān)的會(huì)話(huà),如果不存在返回null,不創(chuàng)建會(huì)話(huà)。
方法二:等同于方法一為true時(shí)。
HttpSession接口的方法
session.setAttribute(String name,Object value);
session.getAttribute(String name);//返回Object
session.removeAttribute(String name);//刪除
session.invalidate()//當(dāng)前會(huì)話(huà)關(guān)閉
*/
/*
讀取xml文件中的參數(shù)值
web.xml
<servlet>
<init-param>
<param-name>repeat</param-name>
<param-value>10</param-value>
</init-param>
</servlet>
servlet.java
int repeat=Integer.parseInt(this.getInitParameter("repeat"));
*/
/*
得到當(dāng)前servlet相當(dāng)信息的方法
request.getServerName()//得到當(dāng)前請(qǐng)求的服務(wù)器名子
request.getRemoteAddr()得到當(dāng)前請(qǐng)求服務(wù)器的IP地址
request.getServerPort()得到當(dāng)前請(qǐng)求服務(wù)器的端口號(hào)
request.getProtlcol()得到當(dāng)前請(qǐng)求的協(xié)議版本
request.getContextPath()得到當(dāng)前請(qǐng)求的上下文地址
request.getScheme()得到當(dāng)前請(qǐng)求的協(xié)議類(lèi)型
request.getMethod()得到當(dāng)前請(qǐng)求的提交方式GET
request.getRequestURI()得到當(dāng)前服務(wù)器servlet的映射路徑,帶上下文
request.getServletPath()得到當(dāng)前服務(wù)器servlet的映射路徑
servlet的頭信息
Enumeration e=request.getHeaderNames();得到包含header名子的Enumeration類(lèi)形對(duì)象
request.getHeader()得到header名子對(duì)應(yīng)的值
例子:
Enumeration e=request.getHeaderNames();
String name="";
while(e.hasMoreElements)
{
name=(String)e.nextElement();
System.out.println(name);
System.out.println(request.getHeader(name));
}
JSValidation驗(yàn)證框架
url:http://cosoft.org.cn/projects/jsvalidateion
修改validation-framwork.js
var ValidationRoot="/webproject2/js/"
配置validation-config.xml
FCKeditor文本編輯組件
http://www.fckeditor.net/download
1 在src下建config.properties文件
config.properties
uname=aaa
pwd=123
2
InputStream in=this.getClass().getResourceAsStream("/config.properties");
//in=new FileInputStream("D:/config.properties");
Properties pro=new Properties();
try{
pro.load(in);
pro.loadFromXML();
pro.getProperty("uname");
//(String)pro.get("uname");
pro.put(key,"value");
}
class
class.forName(String className)
運(yùn)行中的對(duì)象都是class的一個(gè)實(shí)例,相關(guān)技術(shù)-反射
class.getResourceAsStream(String fileName)
查找具有給定名稱(chēng)的資源
Result類(lèi)在java.servlet.jsp.jstl.sql.Result包中,可以在關(guān)閉連接的狀態(tài)下使用
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
Result result=ResultSupport.toResult(rs);
if(result==null){
System.out.println("無(wú)數(shù)據(jù)");
}
for(int i=0;i<result.getRowCount();i++){
Map map=result.getRows()[i];
map.get("username");
}
作業(yè),連接池,配置文件
<embed src=""/>
歌手表,gid,sex,name,love
歌曲表,id,name,gid,typeid,歌詞
類(lèi)型表,typeid,name
url
controls.play()
controls.stop()
應(yīng)該是中文操作系統(tǒng)的原因,eclipse默認(rèn)的新項(xiàng)目的編碼是GBK,出于對(duì)編碼支持的考慮,項(xiàng)目組中最好統(tǒng)一要求是UTF-8編碼進(jìn)行開(kāi)發(fā)。
修改eclipse的配置,可以使得eclipse的新建項(xiàng)目的默認(rèn)編碼直接為UTF-8
在菜單欄的
Window->Preferences->General->Workspace->Text file encoding
將其改為UFT-8即可。
這個(gè)也是安裝完Eclipse之后應(yīng)該立刻做的一件事
但是這種修改只對(duì)當(dāng)前的workspace有效,如果新建或者切換到一個(gè)新的workspace下,還是得做同樣的步驟。
同樣
Window->Preferences->General->Content Types中可以修改具體的不同格式的文件的默認(rèn)編碼,尤其是HTML,CSS,Javascript等文件的編碼最好是修改一下,否則默認(rèn)的ISO- 8859-1無(wú)法支持中文。
不知道如何解決默認(rèn)安裝完是GBK的問(wèn)題,難道一定要用英文操作系統(tǒng)?
myeclipse6.0下怎么樣統(tǒng)一全部文件編碼:
windows---->preferences---->myeclipse---->file and editors----->jsp--->把這個(gè)目錄下的encoding選為你要設(shè)置的編碼(如UTF-8)
這樣,你下次再新建一個(gè)JSP頁(yè)面的時(shí)候就默認(rèn)是以你剛才設(shè)置的編碼了
因?yàn)槟J(rèn)情況下新建一個(gè)JSP頁(yè)面的編碼是ISO8859-1的,是不能存中文的,要存中文就得手動(dòng)改為GBK,UTF-8支持中文的編碼,每次新建都要修改手動(dòng)修改一次編碼就很麻煩.
經(jīng)過(guò)上面的設(shè)置后就可以統(tǒng)一整個(gè)項(xiàng)目的編碼而不用再手動(dòng)設(shè)置.
增強(qiáng)Eclipse ,MyEclipse 的代碼提示功能,具體怎么樣來(lái)配置?下面開(kāi)始說(shuō)步驟(注意本人用的
MyEclipse 6.0.1做講解):
1. 打開(kāi)MyEclipse 6.0.1,然后“window”→“Preferences”
2. 選擇“java”,展開(kāi),“Editor”,選擇“Content Assist”。
3. 選擇“Content Assist”,然后看到右邊,右邊的“Auto-Activation”下面的“Auto
Activation triggers for java”這個(gè)選項(xiàng)。其實(shí)就是指觸發(fā)代碼提示的就是“.”這個(gè)符號(hào)。
4. “Auto Activation triggers for java”這個(gè)選項(xiàng),在“.”后加abc字母,方便后面的查找
修改。然后“apply”,點(diǎn)擊“OK”。
5. 然后,“File”→“Export”,在彈出的窗口中選擇“Perferences”,點(diǎn)擊“下一步”。
6. 選擇導(dǎo)出文件路徑,本人導(dǎo)出到桌面,輸入“test”作為文件名,點(diǎn)擊“保存”。
7. 在桌面找到剛在保存的文件“test.epf”,右鍵選擇“用記事本打開(kāi)”。
8. 可以看到很多配置MyEclipse 6.0.1的信息
9. 按“ctrl + F”快捷鍵,輸入“.abc”,點(diǎn)擊“查找下一個(gè)”。
10. 查找到“.abc”的配置信息如下:
如下:
11. 把“.abc”改成“.abcdefghijklmnopqrstuvwxyz(,”,保存,關(guān)閉“test.epf”。
12. 回到MyEclipse 6.0.1界面,“File”→“Import”,在彈出的窗口中選擇“Perferences”,點(diǎn)擊
“下一步”,選擇剛在已經(jīng)修改的“test.epf”文件,點(diǎn)擊“打開(kāi)”,點(diǎn)擊“Finish”。該步驟和上面
的導(dǎo)出步驟類(lèi)似。
13. 最后當(dāng)然是進(jìn)行代碼測(cè)試了。隨便新建一個(gè)工程,新建一個(gè)類(lèi)。在代碼輸入switch,foreach等進(jìn)行
測(cè)試。你立即會(huì)發(fā)現(xiàn),果然出了提示,而且無(wú)論是敲哪個(gè)字母都會(huì)有很多相關(guān)的提示了,很流暢,很方
便。
總結(jié):
“Auto Activation triggers for java”這個(gè)選項(xiàng)就是指觸發(fā)代碼提示的的選項(xiàng),把“.”改成
“.abcdefghijklmnopqrstuvwxyz(,”的意思,就是指遇到26個(gè)字母和.,(這些符號(hào)就觸發(fā)代碼提示功
能了。
順便說(shuō)一下,修改類(lèi)名,接口名等以不同顏色高亮的,可以這樣配置在“java”→“enditor”→
“syntac”,右邊展開(kāi)“java”→“classes”,勾上“Enable”這個(gè)選項(xiàng),選擇自己喜歡的顏色即可。
當(dāng)然還有其他相關(guān)的顏色配置。具體就不說(shuō)啦。其實(shí),在“Preferences”這個(gè)東西,有很多可以配置的
東西,使得MyEclipse 優(yōu)化的,具體的就要各個(gè)人根據(jù)自己個(gè)人喜好去配置了。
MyEclipse 快捷鍵
(1)Ctrl+M切換窗口的大小
(2)Ctrl+Q跳到最后一次的編輯處
(3)F2當(dāng)鼠標(biāo)放在一個(gè)標(biāo)記處出現(xiàn)Tooltip時(shí)候按F2則把鼠標(biāo)移開(kāi)時(shí)Tooltip還會(huì)顯示即Show Tooltip Description。
F3跳到聲明或定義的地方。
F5單步調(diào)試進(jìn)入函數(shù)內(nèi)部。
F6單步調(diào)試不進(jìn)入函數(shù)內(nèi)部,如果裝了金山詞霸2006則要把“取詞開(kāi)關(guān)”的快捷鍵改成其他的。
F7由函數(shù)內(nèi)部返回到調(diào)用處。
F8一直執(zhí)行到下一個(gè)斷點(diǎn)。
(4)Ctrl+Pg~對(duì)于XML文件是切換代碼和圖示窗口
(5)Ctrl+Alt+I看Java文件中變量的相關(guān)信息
(6)Ctrl+PgUp對(duì)于代碼窗口是打開(kāi)“Show List”下拉框,在此下拉框里顯示有最近曾打開(kāi)的文件
(7)Ctrl+/ 在代碼窗口中是這種//~注釋。
Ctrl+Shift+/ 在代碼窗口中是這種/*~*/注釋?zhuān)?/span>JSP文件窗口中是<!--~-->。
(8)Alt+Shift+O(或點(diǎn)擊工具欄中的Toggle Mark Occurrences按鈕) 當(dāng)點(diǎn)擊某個(gè)標(biāo)記時(shí)可使本頁(yè)面中其他地方的此標(biāo)記黃色凸顯,并且窗口的右邊框會(huì)出現(xiàn)白色的方塊,點(diǎn)擊此方塊會(huì)跳到此標(biāo)記處。
(9)右擊窗口的左邊框即加斷點(diǎn)的地方選Show Line Numbers可以加行號(hào)。
(10)Ctrl+I格式化激活的元素Format Active Elements。
Ctrl+Shift+F格式化文件Format Document。
(11)Ctrl+S保存當(dāng)前文件。
Ctrl+Shift+S保存所有未保存的文件。
(12)Ctrl+Shift+M(先把光標(biāo)放在需導(dǎo)入包的類(lèi)名上) 作用是加Import語(yǔ)句。
Ctrl+Shift+O作用是缺少的Import語(yǔ)句被加入,多余的Import語(yǔ)句被刪除。
(13)Ctrl+Space提示鍵入內(nèi)容即Content Assist,此時(shí)要將輸入法中Chinese(Simplified)IME-Ime/Nonlme Toggle的快捷鍵(用于切換英文和其他文字)改成其他的。
Ctrl+Shift+Space提示信息即Context Information。
(14)雙擊窗口的左邊框可以加斷點(diǎn)。
(15)Ctrl+D刪除當(dāng)前行。
Alt+↓當(dāng)前行和下面一行交互位置(特別實(shí)用,可以省去先剪切,再粘貼了)
Alt+↑當(dāng)前行和上面一行交互位置(同上)
Alt+←前一個(gè)編輯的頁(yè)面
Alt+→下一個(gè)編輯的頁(yè)面(當(dāng)然是針對(duì)上面那條來(lái)說(shuō)了)
Alt+Enter 顯示當(dāng)前選擇資源(工程,or 文件 or文件)的屬性
Shift+Enter 在當(dāng)前行的下一行插入空行(這時(shí)鼠標(biāo)可以在當(dāng)前行的任一位置,不一定是最后)
Shift+Ctrl+Enter 在當(dāng)前行插入空行(原理同上條)
Ctrl+Q 定位到最后編輯的地方
Ctrl+L 定位在某行 (對(duì)于程序超過(guò)100的人就有福音了)
Ctrl+M 最大化當(dāng)前的Edit或View (再按則反之)
Ctrl+/ 注釋當(dāng)前行,再按則取消注釋
Ctrl+O 快速顯示 OutLine
Ctrl+T 快速顯示當(dāng)前類(lèi)的繼承結(jié)構(gòu)
Ctrl+W 關(guān)閉當(dāng)前Editer
Ctrl+K 參照選中的Word快速定位到下一個(gè)
Ctrl+E 快速顯示當(dāng)前Editer的下拉列表(如果當(dāng)前頁(yè)面沒(méi)有顯示的用黑體表示)
Ctrl+/(小鍵盤(pán)) 折疊當(dāng)前類(lèi)中的所有代碼
Ctrl+×(小鍵盤(pán)) 展開(kāi)當(dāng)前類(lèi)中的所有代碼
Ctrl+Space 代碼助手完成一些代碼的插入(但一般和輸入法有沖突,可以修改輸入法的熱鍵,也可以暫用Alt+/來(lái)代替)
Ctrl+Shift+E 顯示管理當(dāng)前打開(kāi)的所有的View的管理器(可以選擇關(guān)閉,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J后,你所輸入的每個(gè)字母編輯器都提供快速匹配定位到某個(gè)單詞,如果沒(méi)有,則在stutes line中顯示沒(méi)有找到了,查一個(gè)單詞時(shí),特別實(shí)用,這個(gè)功能Idea兩年前就有了)
Ctrl+Shift+J 反向增量查找(和上條相同,只不過(guò)是從后往前查)
Ctrl+Shift+F4 關(guān)閉所有打開(kāi)的Editer
Ctrl+Shift+X 把當(dāng)前選中的文本全部變味小寫(xiě)
Ctrl+Shift+Y 把當(dāng)前選中的文本全部變?yōu)樾?xiě)
Ctrl+Shift+F 格式化當(dāng)前代碼
Ctrl+Shift+P 定位到對(duì)于的匹配符(譬如{}) (從前面定位后面時(shí),光標(biāo)要在匹配符里面,后面到前面,則反之)
下面的快捷鍵是重構(gòu)里面常用的,本人就自己喜歡且常用的整理一下(注:一般重構(gòu)的快捷鍵都是Alt+Shift開(kāi)頭的了)
Alt+Shift+R 重命名 (是我自己最?lèi)?ài)用的一個(gè)了,尤其是變量和類(lèi)的Rename,比手工方法能節(jié)省很多勞動(dòng)力)
Alt+Shift+M 抽取方法 (這是重構(gòu)里面最常用的方法之一了,尤其是對(duì)一大堆泥團(tuán)代碼有用)
Alt+Shift+C 修改函數(shù)結(jié)構(gòu)(比較實(shí)用,有N個(gè)函數(shù)調(diào)用了這個(gè)方法,修改一次搞定)
Alt+Shift+L 抽取本地變量( 可以直接把一些魔法數(shù)字和字符串抽取成一個(gè)變量,尤其是多處調(diào)用的時(shí)候)
Alt+Shift+F 把Class中的local變量變?yōu)?/span>field變量 (比較實(shí)用的功能)
Alt+Shift+I 合并變量(可能這樣說(shuō)有點(diǎn)不妥Inline)
Alt+Shift+V 移動(dòng)函數(shù)和變量(不怎么常用)
Alt+Shift+Z 重構(gòu)的后悔藥(Undo)
Eclipse快捷鍵大全
Ctrl+1 快速修復(fù)(最經(jīng)典的快捷鍵,就不用多說(shuō)了)
Ctrl+D: 刪除當(dāng)前行
Ctrl+Alt+↓ 復(fù)制當(dāng)前行到下一行(復(fù)制增加)
Ctrl+Alt+↑ 復(fù)制當(dāng)前行到上一行(復(fù)制增加)
http://logging.apache.org/
1 導(dǎo)入log4j的jar包
2 在scr下創(chuàng)建log4j.properties
log4j.properties
//輸入級(jí)別debug<info<warn<error
log4j.rootLogger=debug[info][warn][error],appender1
//ConsoleAppender輸出到控制臺(tái),FileAppender輸出到文件
log4j.appender.appender1=org.apache.log4j.ConsoleAppender[FileAppender]
//寫(xiě)出的目標(biāo)文件
log4j.appender.appender1.File=c:/demllog4j.log[.html]
//寫(xiě)入文件的格式
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout[HTMLLayout]
例1,控制臺(tái)輸出:
log4j.rootLogger=debug,appender1
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
例2,輸出到.log文件:
log4j.rootLogger=debug,appender1
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=c:/demllog4j.log
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
例3,輸出到.html文件:
log4j.appender.appender1=org.apache.log4j.FileAppender
log4j.appender.appender1.File=c:/demllog4j.html
log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
例4,輸出到.html文件同時(shí)輸出到控制臺(tái):
log4j.rootLogger=error,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.File=c:/demllog4j.html
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
例5,為不同類(lèi)定義輸出格式
log4j.rootLogger=debug,appender1
#log4j.logger.com.liuwei=info,appender1
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=%r [%t] %p - %c - %l - %m%n
3 編寫(xiě)代碼
public class Test {
//參數(shù)為當(dāng)前類(lèi)的類(lèi)名,得到logger
private static Logger logger=Logger.getLogger(Test.class);
public static void main(String[] args) {
//輸出信息
//if(log.isDebugEnabled()){
logger.debug("sssssssss");
logger.info("ssssssss");
logger.error("ssssssssss");
//}
}
}
--------------------------------------------------------------------
log4j核心
1 Logger 完成日志信息的處理
輸出級(jí)別:
debug 錯(cuò)誤信息 if(log.isDebugEnabled()){log.debug("x="+x);}
info 日常信息 if(log.isDebugEnabled()){log.info("System started at"+new Date());}
warn 警告信息 if(log.isDebugEnabled()){log.warn("Server down-returnning");}
error 程序出錯(cuò)信息 if(log.isDebugEnabled()){log.error("Could not access server",e);}
2 Appender 設(shè)置日志信息的去向
org.apache.log4j.ConsoleAppender(控制臺(tái))
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件)
org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸時(shí)產(chǎn)生一個(gè)新的文件)
org.apache.log4j.WriterAppender(將日志訊息以串流格式發(fā)送到任意指定的地方)
org.apache.log4j.JdbcAppender(將日志訊息保存到數(shù)據(jù)庫(kù)中)
3 Layout 設(shè)置日志信息的輸出樣式
org.apache.log4j.HTMLLayout (以HTML表格形式布局)
org.apache.log4j.SimpleLayout (包含日志訊息的級(jí)別和訊息字符串)
org.apache.log4j.TTCCLayout (包含日志產(chǎn)生的時(shí)間、執(zhí)行者、類(lèi)別等等訊息)
org.apache.log4j.PatternLayout (可以靈活地指定布局模式)
PatternLayout:
-%p 輸出優(yōu)先級(jí),即debug,info,warn,error
-%r 輸出自應(yīng)用啟到到輸出該日志訊息所耗費(fèi)的毫秒數(shù)
-%t 輸出產(chǎn)生該日志事件的線(xiàn)程名
-%f 輸出日志訊息所屬的類(lèi)的類(lèi)別名
-%c 輸出日志訊息所屬的類(lèi)的全名
-%d 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,指定格式的方式:%d{yyyy-MM-dd HH:mm:ss}
-%l 輸出日志訊息所屬發(fā)生位置,即輸出日志訊息的語(yǔ)句處于它所在的類(lèi)別的第幾行
-%m 輸出代碼中指定的訊息,如log(message)中的message
-%n 輸出一個(gè)換行符號(hào)
配置文件
log4j.properties/log4j.xml
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("text/html;charset=gbk");
String name=request.getParameter("username");
name=new String (name.getBytes("iso-8859-1"),"gbk");
1 過(guò)濾器
HttpServletRequest req=(HttpServletRequest)request;
request.setCharacterEncoding("gbk");
china.do();
2 子控制器
public class ToChinese extends RequestProcessor{
public boolean processProcess(HttpServletRequest req,HttpServletRespone rep){
request.setCharacterEncoding("gb2312");
return true;
}
}
struts-config.xml
<controller processorClass="com.org.ToChinese"/>