??xml version="1.0" encoding="utf-8" standalone="yes"?>伊人国产在线看一,91色p视频在线,国产欧美精品久久 http://www.aygfsteel.com/smcdl/category/25612.html抽象xI,I即是抽象?/description>zh-cn Sun, 22 Nov 2009 10:47:07 GMT Sun, 22 Nov 2009 10:47:07 GMT 60 Java偏向锁实现原理讲?Biased Locking) http://www.aygfsteel.com/smcdl/archive/2009/11/18/302787.htmlteddy teddy Wed, 18 Nov 2009 05:10:00 GMT http://www.aygfsteel.com/smcdl/archive/2009/11/18/302787.html http://www.aygfsteel.com/smcdl/comments/302787.html http://www.aygfsteel.com/smcdl/archive/2009/11/18/302787.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/302787.html http://www.aygfsteel.com/smcdl/services/trackbacks/302787.html 引用QJava偏向锁实现原理讲?Biased Locking)(版权归原作者所?
]]>Tomcatq问题研究Q附带AJAXq问题研究?/title> http://www.aygfsteel.com/smcdl/archive/2009/06/07/280415.htmlteddy teddy Sun, 07 Jun 2009 15:47:00 GMT http://www.aygfsteel.com/smcdl/archive/2009/06/07/280415.html http://www.aygfsteel.com/smcdl/comments/280415.html http://www.aygfsteel.com/smcdl/archive/2009/06/07/280415.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/280415.html http://www.aygfsteel.com/smcdl/services/trackbacks/280415.html
很奇怪测试了多个应用服务器,只有Tomcat出现了ؕ码问题。让我们来分析一下原因,试环境是Tomcat5.5.27Q字W集~码l一?strong>UTF-8 ?br />
1.面静态内容ؕ码(非动态生成内容ؕ码)
q一般是<%@ page pageEncoding="UTF-8 " %>讄的问题,在每个页面上都加上pageEncoding讑֮Q让应用服务器能正确把JSP文g按照讑֮的编码{换ؓJava文gQ只要这个pageEncoding讄正确可以避免静态内容的q。有人可能会说我没有讄也没有ؕ码,那是因ؓ应用服务器还可以d<%@ page contentType="text/html; charset=UTF-8 " %>中的charset 作ؓ备选方案,虽然q是JSP规范中要求的Q但是难保有的容器没有实现或实现有BUGQ所以有时候在某个应用服务器下Q如TomcatQ不讄pageEncoding也可以,但是同样的页面拿到别的应用服务器下就不能保证不出Cؕ码?br />
2.动态生成内容ؕ?/span>
C载的Tomcat没有l过MҎ(gu)的设|,无论是GET和POST都出Cؕ码。首先设|HTTP ConnectorQserver.xml中监?080端口的那个ConnectorQ,加上URIEncoding="UTF-8 "Q消除了GETqQ再在JSP面中第一句加?lt;% request.setCharacterEncoding("UTF-8 "); %>Q消除了POSTq?br />
通过上面两个讄我们发现Q?strong>URIEncoding控制的是GET字符集编码,Request ?strong>CharacterEncoding控制的是POST字符集编码?br />
如果没有上面那句 <% request.setCharacterEncoding("UTF-8 "); %>Q?/span> 在页面v始加?lt;%= request.getCharacterEncoding() %>Q在Tomcat下我们发现输?strong>nullQ在其他服务器下却输?strong>UTF-8 。这是Z么在Tomcat下应该正设|?strong>Request?strong>CharacterEncoding的原因?br />
上面提到?lt;%@ page contentType="text/html; charset=UTF-8 " %>Q除了声明返回给客户端的是text/html外,同时讄?strong>Response?strong>CharacterEncodingQ即相当于执行了Response.setCharacterEncoding("UTF-8 ")q段代码。它保证了服务器端生成的动态内容到辑֮L(fng)也不会ؕ码?br />
但有一U情况下也不会出Cؕ码,是如下例这U情况,前提是没有设|?/span> Request ?strong>CharacterEncodingQ?br />
1 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2 response.getWriter().write(request.getParameter( "xxxxx " ));
3 }
q种情况下提交过来的表单数据其实是ISO-8859-1的编码,而返回给客户端又没有<%@ page contentType="text/html; charset=UTF-8 " %> 的设|,所以还是ISO-8859-1的编码,但是Z么没有ؕ码呢Q其实已lؕ码了Q如果在W?行下断点的话Q会发现request.getParameter( "xxxxx " ) 的返回值就是ؕ码。可以用一句Java代码来解释ؓ什么客L(fng)昄l果没有qQ如下:
1 System.out.println( new String( " 你好Q世?/span>" .getBytes( " ISO-8859-1 " ), " ISO-8859-1 " );
很奇怪这句代码,明明是中文,应该用GB2312或GBK之类的字W集~码来getBytesQ却用了ISO-8859-1Q事实证明,q种互逆操作对字符串本w没有Q何媄响,只要getBytes和new String的时候字W集~码是一致的׃会引起ؕ码?br />
上面q句代码正好说明了数据从客户端POST到服务器端时是ISO-8859-1~码Q然后从服务器端写回到客L(fng)q是ISO-8859-1~码Q所以就没有造成qQ如果这里不是直接写回到客户端,而是forward到另一个JSP面Q而这个页面恰好用了<%@ page contentType="text/html; charset=UTF-8 " %> 来设|Response的CharacterEncodingQ那么在面中输出xxxxxq会产生qQ同L(fng)一句Java代码来解释,如下Q?br />
1 System.out.println( new String( " 你好Q世?/span>" .getBytes( " ISO-8859-1 " ), " UTF-8 " ));
所以,最后结论是如果想POST到服务器端不qp讄Request的CharacterEncodingQ写回到客户端不qp讄Response的CharacterEncodingQ若是JSP面要设|?lt;%@ page contentType="text/html; charset=UTF-8 " %>?br />
3.AJAXq问题 Q不借助MJS框架Q像Prototype之类的框架会对GETh的queryString自动应用encodeURIComponent()~码Q?br />
GEThӞ需要对queryString使用encodeURIComponent()~码之后再提交到服务器。这是XMLHttpRequest规范所要求的?br />
POSThӞ不需要用encodeURIComponent()?br />
通过对应用程序下断点发现QGETh和POSTh的数据发送到服务器端都是正常的没有ؕ码,但是服务器端生成的动态内容写回客L(fng)却是qQ说?strong>Response?strong>CharacterEncoding讄错误Q反q来我们再想一下,我们Ҏ(gu)没有设|过Response ?strong>CharacterEncodingQؓ什么呢Q因为我们是以AJAX的方式提交表单,q回后不像JSP面那样?lt;%@ page contentType="text/html; charset=UTF-8 " %>来设|?strong>Response?strong>CharacterEncodingQ所以就会出错?br />
l合上述Q解决的办法是各大|站提出的通用解决Ҏ(gu)Filter Q如果你的应用没有用到AJAXQ只讄Request ?strong>CharacterEncoding卛_Q否?strong>Response?strong>CharacterEncoding也要讄。下面是一个Filter的示例,只引用doFilterҎ(gu)来说明问题:
1 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
2 request.setCharacterEncoding( " UTF-8 " );
3 response.setCharacterEncoding( " UTF-8 " );
4 chain.doFilter(request, response);
5 }
]]> jad和Java Decompiler的小不?/title> http://www.aygfsteel.com/smcdl/archive/2009/03/10/258754.htmlteddy teddy Tue, 10 Mar 2009 03:25:00 GMT http://www.aygfsteel.com/smcdl/archive/2009/03/10/258754.html http://www.aygfsteel.com/smcdl/comments/258754.html http://www.aygfsteel.com/smcdl/archive/2009/03/10/258754.html#Feedback 2 http://www.aygfsteel.com/smcdl/comments/commentRss/258754.html http://www.aygfsteel.com/smcdl/services/trackbacks/258754.html
源码一般somestr = "a" + "b" + "c" + "d" ....;
jad反编译过来会自动生成一个StringBufferQ然后把各个子串appendC赗如Q?br />
somestr = (new StringBuilder(String.valueOf("a"))).append("b").append("c").append("d")....).toString();
Java Decompiler反编译的代码基本上和原来一P有字节码查看工具看出Q编译器实对字W串相加做了优化。请在eclipse使用byte outline插g查看。但是有一U情冉|例外的,如:
somestr = "a" + "b";
somestr += "c" + "d";
~译器会为每一条语句徏立一个StringBuilderQ像上面的情况请把两句合q成一句?br />
]]> Log4J基本使用教程 http://www.aygfsteel.com/smcdl/archive/2009/02/17/254922.htmlteddy teddy Tue, 17 Feb 2009 03:43:00 GMT http://www.aygfsteel.com/smcdl/archive/2009/02/17/254922.html http://www.aygfsteel.com/smcdl/comments/254922.html http://www.aygfsteel.com/smcdl/archive/2009/02/17/254922.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/254922.html http://www.aygfsteel.com/smcdl/services/trackbacks/254922.html
首先Log4J中L存在一个rootLoggerQ即使没有显C配|也是存在的Qƈ且默认输出别ؓDEBUG?br />
其它的logger都承自q个rootLoggerQ如果其他logger未单独定义其输出U别Q?br />
Log4J中的层次是用'.'来分隔的Q如log4j.logger.com.example.testQ这里ƈ不是说log4j.logger后面一定是具体的包名乃至类名,
q个名称可以自定义,我们甚至可以定义一个log4j.logger.A.B.CQ?在com.example.test中的c里取名UCؓA.B的logger,?br />
Logger logger = Logger.getLogger("A.B")
上例中我们徏立了3个logger实例Q它们分别是"A"?A.B"?A.B.C"。每ơ我们在pȝ中取得loggerӞq不是新建实例,q些实例?br />
pȝ启动的时候就按照配置文g初始化好的(也可能时W一ơ引用的时候徏立的Q然后缓存其实例供以后用,q部分还没有旉研究Q?br />
限制appender叠加?/strong>
?Q?br />
log4j.rootLogger=DEBUG, Console
log4j.logger.A=DEBUG, Console
log4j.logger.A.B=INFO, Console
对于logger A.B输出的Q何日志会往控制台输Zơ,原因是A.Bl承A的以及A的父logger的所有appenderQ?br />
q种l承关系仅仅是把父logger的appenderd到自qappender列表中,父logger的输出level不会影响
子logger的输出?br />
?Q限制appender叠加
log4j.rootLogger=DEBUG, Console
log4j.logger.A=DEBUG, Console
log4j.logger.A.B=INFO, Console
log4j.additivity.A.B=false
logger A.B的日志仅会输出到自己Console中,不会l承M父logger的appender?br />
控制appender的输出?/strong>
若想对输出到appender中的日志U别q行限制的话Q就需要用到threshold来控制?br />
log4j.threshold=ERROR 用来控制所有的appenderQ即输出到所有appender的日志,
不管原来是什么别的Q都不能低于threshold所规定的别?br />
log4j.appender.Console.threshold=ERROR 用来控制指定的appender的输出别?br />
]]> 使用Java范型需要注意的地方 http://www.aygfsteel.com/smcdl/archive/2008/10/23/236140.htmlteddy teddy Thu, 23 Oct 2008 05:59:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/10/23/236140.html http://www.aygfsteel.com/smcdl/comments/236140.html http://www.aygfsteel.com/smcdl/archive/2008/10/23/236140.html#Feedback 2 http://www.aygfsteel.com/smcdl/comments/commentRss/236140.html http://www.aygfsteel.com/smcdl/services/trackbacks/236140.html
静态方法要惌化,需要指定其cd参数
非范化类型中的实例方法要惌化,也需要制定其cd参数?/li>
范化cd中的实力Ҏ(gu)可以直接使用其类型本w的cd参数?/li>
范型不是协变的,即List<Integer>不是List<Number>的子cR?/li>
不能实例化范型类型的数组Q即new List<String>[3]
是不合法的,除非cd参数是一个未l定的通配W,?code>new List<?>[3] 是合法的?br />
构造gq,在代码编写时我们不能通过cd参数来构造一个该cd的实例,原因是我们不知道如何构造,cd参数的实际类型是在运行时定的?/li>
对于注意5所描述的问题我们有一个解x法是List<String> list = (List<String>[]) new Object[3];但是如果是运行时建立数组呢,cd信息是运行时定的,那就换种写法T[] tarray = (T[]) new Object[3];
上面的数l构造是不被推荐的,最好的Ҏ(gu)是将cd信息传递到Ҏ(gu)中,如method(Class<V> type) { V[] array = (V[])Array.newInstance(type, length); }Q可以参考ArrayListcȝtoArray(T[] a)Ҏ(gu)的实现?br />
构造通配W引用,如果set是一个Set<?>cdQ则Set<?> set2 = new HashSet<?>(set);是不合法的,Ҏ(gu)Set<?> set2 = new HashSet<Object>(set);合法了?/li>
最后,推荐三篇IBM上的文章
]]> Java事g传递技?Q链接至IBM|站Q?/title> http://www.aygfsteel.com/smcdl/archive/2008/10/22/235955.htmlteddy teddy Wed, 22 Oct 2008 08:01:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/10/22/235955.html http://www.aygfsteel.com/smcdl/comments/235955.html http://www.aygfsteel.com/smcdl/archive/2008/10/22/235955.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/235955.html http://www.aygfsteel.com/smcdl/services/trackbacks/235955.html
]]> Java集合框架使用注意事项Q二QMapQ?/title> http://www.aygfsteel.com/smcdl/archive/2008/10/22/235916.htmlteddy teddy Wed, 22 Oct 2008 04:59:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/10/22/235916.html http://www.aygfsteel.com/smcdl/comments/235916.html http://www.aygfsteel.com/smcdl/archive/2008/10/22/235916.html#Feedback 1 http://www.aygfsteel.com/smcdl/comments/commentRss/235916.html http://www.aygfsteel.com/smcdl/services/trackbacks/235916.html
1.HashMap
2.Hashtable
3.TreeMap
4.LinkedHashMap
讨论1Q底层机?br />
HashMap与HashtableZ数组实现QTreeMapZ?wi)型l构Q底层存储结构是典型的链表结构。LinkedHashMapl承自HashMapQ所以也是基于数l实现的?br />
讨论2Q承关p?br />
HashMap与TreeMapl承自AbstractMapQHashtablel承自DictionaryQLinkedHashMapl承自HashMap?br />
讨论3Q同步关p?br />
Hashtable是同步的Q而HashMap与TreeMap以及LinkedHashMap不是同步的,可以使用Collections中提供的Ҏ(gu)转换为同步的?br />
讨论4QP代器
q代器都是快速失败的Q注Q参考本pdW一List)
讨论5Q不可修?br />
通过使用Collections.unmodifiableMap(Map map)来{?
]]> Java集合框架使用注意事项Q一Q?ListQ?/title> http://www.aygfsteel.com/smcdl/archive/2008/10/22/235890.htmlteddy teddy Wed, 22 Oct 2008 03:22:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/10/22/235890.html http://www.aygfsteel.com/smcdl/comments/235890.html http://www.aygfsteel.com/smcdl/archive/2008/10/22/235890.html#Feedback 1 http://www.aygfsteel.com/smcdl/comments/commentRss/235890.html http://www.aygfsteel.com/smcdl/services/trackbacks/235890.html
1.ArrayList
2.LinkedList
3.Vector
4.Stack
讨论1Q底层机Ӟ牉|到的数据l构的知识请读者自行复?fn)?br />
ArrayList与Vector都是Z数组实现的,q就说明ArrayList与Vector适合做遍历而不适合做频J的插入和删除?br />
LinkedList是基于链表实现的Q所以它生来是Z频繁插入与删除对象?br />
讨论2Q特D功?br />
Stack是一个后q先出(LIFOQ对象堆栈,而LinkedList除可以被用作堆栈外,q可以被用作队列或双端队列?br />
不同的是Stackl承自VectorQ也是说它也是Z数组实现的?br />
讨论3Q内存占?br />
Z数组实现的ListQ在动态扩展时会生新的数l,然后把旧数组里的内容复制到新数组里,
q会产生大量的不再被使用的对象引用变量等待系l回收。而基于链表实现的List׃会有q种问题?br />
讨论4Q同步问?br />
Vector与Stack生来是同步的,
而ArrayList与LinkedList需要用Collections.synchronizedList(List list)Ҏ(gu)来{换成同步List?br />
从它们的对象上返回的q代器是快速失败的Q也是说在使用q代器进行P代的时候,必须使用q代器本w的remove、add、set
Ҏ(gu)来添加或更改List元素Q如果在q代的同Ӟ在其他线E中从结构上修改 了ListQ结构上的修Ҏ(gu)指Q何添加或删除一个或多个元素的操作,或者显式调整底层数l的大小Q仅仅设|元素的g是结构上的修改)Q快速失败P代器会尽最大努力抛出ConcurrentModificationException?br />
讨论5Q用策?br />
如果数据被从数据源提取,数据量不定Q该数据一l被提取后就几乎不会再添加或删除Q那么应该徏立一个LinkedList来保存从数据源中取出的数据,然后该LinkedList转换成ArrayList来优化遍历操作。反q来Q数据量定的数据从数据源取出可以先建立一个ArrayList来保存,Ҏ(gu)需要如需频繁增删Q就转换为LinkedListQ如频繁遍历׃需转换?br />
转换的方法就是用对应的ListcL装目标List对象。如
ArrayList al = new ArrayList();
LinkedList ll = new LinkedList(al);
同理反过来也可以
LinkedList ll = new LinkedList();
ArrayList al = new ArrayList(ll);
讨论6:toArray()Ҏ(gu)
Z数组实现的List会直接返回一个底层数l的拯(使用了System.arraycopyҎ(gu))Q基于链表实现的List会新生成一个数l?br />
讨论7Q不可修?br />
通过使用Collections.unmodifiableList(List list)来生成一个不可修改的ListQ试图修改返回的列表Q不是直接修改q是通过其P代器q行修改Q都导致抛出UnsupportedOperationException?br />
讨论8Q遍历器
请尽量用IteratorQEnumeration已不被鼓׃用?br />
最后,请参考java.util.Collectionsc,该类提供了很多有用的操纵集合对象的方法?br />
]]> Tomcat对Servlet及JSP规范支持的情?/title> http://www.aygfsteel.com/smcdl/archive/2008/05/15/200693.htmlteddy teddy Thu, 15 May 2008 10:01:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/05/15/200693.html http://www.aygfsteel.com/smcdl/comments/200693.html http://www.aygfsteel.com/smcdl/archive/2008/05/15/200693.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/200693.html http://www.aygfsteel.com/smcdl/services/trackbacks/200693.html 请参考Tomcat官方|站
]]>Java 5.0的新Ҏ(gu)?/title> http://www.aygfsteel.com/smcdl/archive/2008/05/15/200565.htmlteddy teddy Thu, 15 May 2008 01:36:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/05/15/200565.html http://www.aygfsteel.com/smcdl/comments/200565.html http://www.aygfsteel.com/smcdl/archive/2008/05/15/200565.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/200565.html http://www.aygfsteel.com/smcdl/services/trackbacks/200565.html Dev2Dev中文?/a>
官方英文?/a>
]]> Javac蝲入的时机 http://www.aygfsteel.com/smcdl/archive/2008/05/14/200369.htmlteddy teddy Wed, 14 May 2008 03:28:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/05/14/200369.html http://www.aygfsteel.com/smcdl/comments/200369.html http://www.aygfsteel.com/smcdl/archive/2008/05/14/200369.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/200369.html http://www.aygfsteel.com/smcdl/services/trackbacks/200369.html
例:
private ClassA ca = new ClassA();
static ClassB cb = new ClassB();
q里的new是必ȝQ否则ClassA和ClassB不会被蝲入?br />
2.cL员函数或cd例成员函数在反射Ҏ(gu)Q未调用Ҏ(gu)前)Ӟ
如果该方法的q回cd不是voidQ则q回cd被蝲入?br />
3.cL员函数或cd例成员函数在反射Ҏ(gu)被调用或直接调用该方法时Q?br />
Ҏ(gu)中引用的其他cd被蝲入?
]]> JavaҎ(gu)Q一Q?/title> http://www.aygfsteel.com/smcdl/archive/2008/05/13/200146.htmlteddy teddy Tue, 13 May 2008 02:39:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/05/13/200146.html http://www.aygfsteel.com/smcdl/comments/200146.html http://www.aygfsteel.com/smcdl/archive/2008/05/13/200146.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/200146.html http://www.aygfsteel.com/smcdl/services/trackbacks/200146.html 1.建立数组
1 int [] i = { 1 , 2 , 3 };
2 String[] s = { " a " , " b " , " c " };
上面的语句确实可以徏立数l。看似{1,2,3}可以独立代表 一个数l对象,其实是不可以的,q和Stringcd的字面g同,一个Stringcd的字面值就是一个Stringcȝ实例Q而一个数l的字面g么都不是?br />
2.静态方法或变量的覆?br />
1 public class Main {
2
3 public static int i = 10 ;
4 /**
5 * @param args the command line arguments
6 */
7 public static void main(String[] args) {
8 System.out.println(TTT.i);
9 System.out.println(Main.i);
10 Main m = new Main();
11 System.out.println(m.i);
12 TTT t = new TTT();
13 System.out.println(t.i);
14 Main m2 = new TTT();
15 System.out.println(m2.i);
16 System.out.println(((TTT)m2).i);
17
18 Main.Test();
19 TTT.Test();
20 m.Test();
21 t.Test();
22 m2.Test();
23 ((TTT)m2).Test();
24 }
25
26 public static void Test() {
27 System.out.println( " Hello Test From Main. " );
28 }
29
30 }
31
32 class TTT extends Main {
33
34 public static int i = 20 ;
35
36 public static void Test() {
37 System.out.println( " Hello Test From TTT. " );
38 }
39 }
3.一个接口可以承多个接口(使用extends关键字)
4.如果一个类中定义了final帔RQƈ且在多个cM被引用,当该帔R被修Ҏ(gu)Q?strong style="color: red">代码U修?/strong>Q,其他引用该常量的c都要被重新~译Q?br />
否则Q新值是不会被代入引用该帔R的类中。原因是帔R在编译期被硬~码到引用它的类中,可以通过反编译工h验证?br />
5.一个方法的q回cd必须直接写在斚w名称的前?
6.与类名相同的Ҏ(gu)名(非构造函敎ͼ是被允许的(JDK1.4试通过Q也?.4之前的版本不能通过Q?br />
1 public class Test {
2 Test() {
3
4 }
5
6 public void Test() {
7
8 }
9 }
]]> Log4j自带Log Viewer的用?/title> http://www.aygfsteel.com/smcdl/archive/2008/03/19/187199.htmlteddy teddy Wed, 19 Mar 2008 03:36:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/03/19/187199.html http://www.aygfsteel.com/smcdl/comments/187199.html http://www.aygfsteel.com/smcdl/archive/2008/03/19/187199.html#Feedback 1 http://www.aygfsteel.com/smcdl/comments/commentRss/187199.html http://www.aygfsteel.com/smcdl/services/trackbacks/187199.html
q个工具在Log4j的jar包中Q这个工具可以分析xml格式的log文gQ同时这个工具可以监听当?br />
目发送过来的log?br />
用法很简?nbsp; java -cp ./log4j-1.2.15.jar org.apache.log4j.chainsaw.MainQ执行该命o后就会出?br />
ChainSaw的SwingH口了?br />
要想监听当前目发送过来的LogQ需要配|项目里的log4j.properties文gQ加入下面一D:
log4j.appender.CHAINSAW_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.CHAINSAW_CLIENT.RemoteHost=localhost
log4j.appender.CHAINSAW_CLIENT.Port=4445
log4j.appender.CHAINSAW_CLIENT.LocationInfo=true
在rootLogger中加入CHAINSAW_CLIENT的appenderQ如Qlog4j.rootLogger=INFO,CHAINSAW_CLIENT
改工具可以设|多个过滤条Ӟ如别、线E、Logger、消息等?br />
更多使用Ҏ(gu)可以自己摸烦一下,很简单哦?
]]> Log4j输出日志消息Ӟ不必再检当前输出Level是否Enabled?/title> http://www.aygfsteel.com/smcdl/archive/2008/03/18/186995.htmlteddy teddy Tue, 18 Mar 2008 06:17:00 GMT http://www.aygfsteel.com/smcdl/archive/2008/03/18/186995.html http://www.aygfsteel.com/smcdl/comments/186995.html http://www.aygfsteel.com/smcdl/archive/2008/03/18/186995.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/186995.html http://www.aygfsteel.com/smcdl/services/trackbacks/186995.html
1 if (
log.isDebugEnabled())
2 log.debug(" Erro Message " );
其实再确认是否EnabledQ因为debug、info{方法里面有同样的验证?br />
所以以后少一D这L(fng)验证也许会提高一些性能?br />
我测试的Log4j的版本是1.2.9
补充Q有些情况下对于q个判断q是很必要的Q如log的信息是调用不同的方法的l果l合而成的,q且q些Ҏ(gu)执行h比较Ҏ(gu)Q这个时候就需要先判断一下?br />
]]> 关于对可以从Request中取出的路径信息的研I?/title> http://www.aygfsteel.com/smcdl/archive/2007/10/19/154187.htmlteddy teddy Fri, 19 Oct 2007 05:35:00 GMT http://www.aygfsteel.com/smcdl/archive/2007/10/19/154187.html http://www.aygfsteel.com/smcdl/comments/154187.html http://www.aygfsteel.com/smcdl/archive/2007/10/19/154187.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/154187.html http://www.aygfsteel.com/smcdl/services/trackbacks/154187.html
1.getQueryString()Q?amp;之后GETҎ(gu)的参数部分?br />
2.getServletPath()Qweb.xml中定义的Servlet讉K路径?br />
3.getPathInfo()QServlet讉K路径之后QQueryString之前的中间部分?br />
4.getContextPath()QContext路径前缀Q这个应该是最熟?zhn)的啦Q?br />
5.getRequestURI()Q等于getContextPath() + getServletPath() + getPathInfo()?br />
6.getRequestURL()Q等于getScheme() + "://" + getServerName() + ":" + getServerPort() + getRequestURI()?br />
7.getPathTranslated()Q等于getServletContext().getRealPath("/") + getPathInfo()?br />
注意Q?br />
1.getServletContext().getRealPath("/") 后包含当前系l的文g夹分隔符Qwindowspȝ?\"Qlinuxpȝ?/"Q,而getPathInfo()?/"开头?
2.getPathInfo()与getPathTranslated()在servlet的url-pattern被设|ؓ/*?aa/*之类的pattern时才有|其他时候都q回null?br />
3.在servlet的url-pattern被设|ؓ*.xx之类的patternӞgetServletPath()q回的是getRequestURI()L前面ContextPath的剩余部分?
]]> 关于Java的Cookie操作 http://www.aygfsteel.com/smcdl/archive/2007/09/05/142945.htmlteddy teddy Wed, 05 Sep 2007 09:05:00 GMT http://www.aygfsteel.com/smcdl/archive/2007/09/05/142945.html http://www.aygfsteel.com/smcdl/comments/142945.html http://www.aygfsteel.com/smcdl/archive/2007/09/05/142945.html#Feedback 0 http://www.aygfsteel.com/smcdl/comments/commentRss/142945.html http://www.aygfsteel.com/smcdl/services/trackbacks/142945.html 试环境QJDK1.5、Tomcat5.5
1.讄Cookie
1 Cookie cookie = new Cookie( " key " , " value " );
2 cookie.setMaxAge(60 ); // 讄60U生存期Q如果设|ؓ负值的话,则ؓ览器进ECookieQ内存中保存Q,关闭览器就失效?/span>
3 cookie.setPath( " /test/test2 " ); // 讄Cookie路径Q不讄的话为当前\径(对于Servlet来说为request.getContextPath() + web.xml里配|的该Servlet的url-pattern路径部分Q?/span>
4 response.addCookie(cookie);
2.dCookie
1 1 // 该方法可以读取当前\径以?#8220;直接父\?#8221;的所有Cookie对象Q如果没有Q何Cookie的话Q则q回null
2 2Cookie[] cookies = request.getCookies();
3.删除Cookie
1 Cookie cookie = new Cookie( " key " , null );
2 cookie.setMaxAge(0 ); // 讄?为立卛_除该Cookie
3 cookie.setPath( " /test/test2 " ); // 删除指定路径上的CookieQ不讄该\径,默认为删除当前\径Cookie
4 response.addCookie(cookie);
4.注意Q假设\径结构如?br />
/
/test
/test/test2
/test345
/test555/test666
a.相同键名的CookieQ值可以相同或不同Q可以存在于不同的\径下?br />
b. 删除Ӟ如果当前路径下没有键?key"的CookieQ则查询全部父\径,索到执行删除操作(每次只能删除一个与自己最q的父\径CookieQ?br />
FF.必须指定与设定cookie时用的相同路径来删除改cookieQ而且cookie的键名不论大写、小写或大小混合都要指定路径?br />
IE.键名写Ӟ如果当前路径?test/test2Q如果找不到再向上查?test?test555?test345Q如果还找不到就查询/ 。(/test555/test666不查询)
键名大小写合或大写Ӟ不指定\径则默认删除当前路径Qƈ且不向上查询?br />
c.dCookie时只能读取直接父路径的Cookie?br />
如果当前路径?test/test2Q要d的键?key"。当前\径读取后Q还要读?testQ?testd后,q要d/
d.在做Java的web目Ӟ׃一般的Web服务器(如Tomcat或JettyQ都用Context来管理不同的Web ApplicationQ这样对于每个Context有不同的PathQ?br />
在一个Server中有多个Web Application时要特别心Q不要设|Path?的CookieQ容易误操作。(当然前提是域名相同)
e.最好也不要在不同\径下使用相同键名的cookieQ这样做很容易引h义?br />
f.Z避免对FF和IE或其他浏览器区分操作Q设|cookie时最好指定\径,删除cookie也要指定路径?br />
]]>
վ֩ģ壺
ɽ |
¡ |
ɽ |
|
ī |
|
|
ӳ |
|
׳ |
|
|
Ӣɽ |
¬ |
ϴ |
|
Ϫ |
Ͱ |
Ͱ |
ƽ |
|
|
|
üɽ |
|
ٺ |
|
ʲ |
|
ԭ |
ĵ |
|
|
|
|
|
ɰ |
|
|
佭 |
ں |