??xml version="1.0" encoding="utf-8" standalone="yes"?>伊人国产在线看一,91色p视频在线,国产欧美精品久久http://www.aygfsteel.com/smcdl/category/25612.html抽象xI,I即是抽象?/description>zh-cnSun, 22 Nov 2009 10:47:07 GMTSun, 22 Nov 2009 10:47:07 GMT60Java偏向锁实现原理讲?Biased Locking)http://www.aygfsteel.com/smcdl/archive/2009/11/18/302787.htmlteddyteddyWed, 18 Nov 2009 05:10:00 GMThttp://www.aygfsteel.com/smcdl/archive/2009/11/18/302787.htmlhttp://www.aygfsteel.com/smcdl/comments/302787.htmlhttp://www.aygfsteel.com/smcdl/archive/2009/11/18/302787.html#Feedback0http://www.aygfsteel.com/smcdl/comments/commentRss/302787.htmlhttp://www.aygfsteel.com/smcdl/services/trackbacks/302787.html引用QJava偏向锁实现原理讲?Biased Locking)(版权归原作者所?



teddy 2009-11-18 13:10 发表评论
]]>
Tomcatq问题研究Q附带AJAXq问题研究?/title><link>http://www.aygfsteel.com/smcdl/archive/2009/06/07/280415.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Sun, 07 Jun 2009 15:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2009/06/07/280415.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/280415.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2009/06/07/280415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/280415.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/280415.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;"><span style="font-size: 10pt;"> <span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"> 很奇怪测试了多个应用服务器,只有Tomcat出现了ؕ码问题。让我们来分析一下原因,试环境是Tomcat5.5.27Q字W集~码l一?strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>?br /> <br /> <strong><span style="font-size: 12pt;">1.面静态内容ؕ码(非动态生成内容ؕ码)</span></strong><br /> q一般是<%@ page pageEncoding="<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>" %>讄的问题,在每个页面上都加上pageEncoding讑֮Q让应用服务器能正确把JSP文g按照讑֮的编码{换ؓJava文gQ只要这个pageEncoding讄正确可以避免静态内容的q。有人可能会说我没有讄也没有ؕ码,那是因ؓ应用服务器还可以d<%@ page contentType="text/html; charset=<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>" %>中的<strong>charset</strong>作ؓ备选方案,虽然q是JSP规范中要求的Q但是难保有的容器没有实现或实现有BUGQ所以有时候在某个应用服务器下Q如TomcatQ不讄pageEncoding也可以,但是同样的页面拿到别的应用服务器下就不能保证不出Cؕ码?br /> <br /> <strong><span style="font-size: 12pt;">2.动态生成内容ؕ?/span></strong><br /> C载的Tomcat没有l过MҎ(gu)的设|,无论是GET和POST都出Cؕ码。首先设|HTTP ConnectorQserver.xml中监?080端口的那个ConnectorQ,加上URIEncoding="<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>"Q消除了GETqQ再在JSP面中第一句加?lt;% request.setCharacterEncoding("<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>"); %>Q消除了POSTq?br /> 通过上面两个讄我们发现Q?strong>URIEncoding</strong>控制的是GET字符集编码,<strong>Request</strong>?strong>CharacterEncoding</strong>控制的是POST字符集编码?br /> 如果没有上面那句</span></span></span></span></span><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><% request.setCharacterEncoding("<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>"); %>Q?/span></span></span></span></span><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;">在页面v始加?lt;%= request.getCharacterEncoding() %>Q在Tomcat下我们发现输?strong>null</strong>Q在其他服务器下却输?strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>。这是Z么在Tomcat下应该正设|?strong>Request</strong>?strong>CharacterEncoding</strong>的原因?br /> 上面提到?lt;%@ page contentType="text/html; charset=<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>" %>Q除了声明返回给客户端的是text/html外,同时讄?strong>Response</strong>?strong>CharacterEncoding</strong>Q即相当于执行了Response.setCharacterEncoding("<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>")q段代码。它保证了服务器端生成的动态内容到辑֮L(fng)也不会ؕ码?br /> 但有一U情况下也不会出Cؕ码,是如下例这U情况,前提是没有设|?/span></span></span></span></span><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><strong>Request</strong>?strong>CharacterEncoding</strong></span></span></span></span></span><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;">Q?br /> </span></span></span> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;"><span style="font-size: 12pt;"><span style="color: #008080;"><span style="font-size: 10pt;"><span style="color: #008080;">1</span> <span style="color: #0000ff;">protected</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> doPost(HttpServletRequest request, HttpServletResponse response) </span><span style="color: #0000ff;">throws</span><span style="color: #000000;"> ServletException, IOException {<br /> </span><span style="color: #008080;">2</span> <span style="color: #000000;">    response.getWriter().write(request.getParameter(</span><span style="color: #000000;">"xxxxx</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br /> </span><span style="color: #008080;">3</span> <span style="color: #000000;">}</span></span></span></span></span></div> q种情况下提交过来的表单数据其实是ISO-8859-1的编码,而返回给客户端又没有<span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><%@ page contentType="text/html; charset=<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>" %></span></span></span>的设|,所以还是ISO-8859-1的编码,但是Z么没有ؕ码呢Q其实已lؕ码了Q如果在W?行下断点的话Q会发现<span style="color: #008080;"><span style="font-size: 12pt;"><span style="color: #008080;"><span style="font-size: 10pt;"><span style="color: #000000;">request.getParameter(</span><span style="color: #000000;">"xxxxx</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span></span></span></span></span>的返回值就是ؕ码。可以用一句Java代码来解释ؓ什么客L(fng)昄l果没有qQ如下:<br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;">1</span> <span style="color: #000000;">System.out.println(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> String(</span><span style="color: #000000;">"</span><span style="color: #000000;">你好Q世?/span><span style="color: #000000;">"</span><span style="color: #000000;">.getBytes(</span><span style="color: #000000;">"</span><span style="color: #000000;">ISO-8859-1</span><span style="color: #000000;">"</span><span style="color: #000000;">), </span><span style="color: #000000;">"</span><span style="color: #000000;">ISO-8859-1</span><span style="color: #000000;">"</span><span style="color: #000000;">);</span></div> 很奇怪这句代码,明明是中文,应该用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而这个页面恰好用了</span><span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><%@ page contentType="text/html; charset=<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>" %></span></span></span></span>来设|Response的CharacterEncodingQ那么在面中输出xxxxxq会产生qQ同L(fng)一句Java代码来解释,如下Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;">1</span> <span style="color: #000000;">System.out.println(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> String(</span><span style="color: #000000;">"</span><span style="color: #000000;">你好Q世?/span><span style="color: #000000;">"</span><span style="color: #000000;">.getBytes(</span><span style="color: #000000;">"</span><span style="color: #000000;">ISO-8859-1</span><span style="color: #000000;">"</span><span style="color: #000000;">), </span><span style="color: #000000;">"</span><span style="color: #000000;">UTF-8</span><span style="color: #000000;">"</span><span style="color: #000000;">));</span></div> 所以,最后结论是如果想POST到服务器端不qp讄Request的CharacterEncodingQ写回到客户端不qp讄Response的CharacterEncodingQ若是JSP面要设|?lt;%@ page contentType="text/html; charset=<span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><strong><em><span style="color: #ff0000;">UTF-8</span></em></strong></span></span></span></span>" %>?br /> <span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-size: 12pt;"><span style="font-size: 10pt;"> <br /> <strong><span style="font-size: 12pt;"><strong>3.AJAXq问题</strong></span></strong>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>?strong>CharacterEncoding</strong>讄错误Q反q来我们再想一下,我们Ҏ(gu)没有设|过<strong>Response</strong>?strong>CharacterEncoding</strong>Qؓ什么呢Q因为我们是以AJAX的方式提交表单,q回后不像JSP面那样?lt;%@ page contentType="text/html; charset=<strong><em><span style="color: #ff0000;">UTF-8</span></em></strong>" %>来设|?strong>Response</strong>?strong>CharacterEncoding</strong>Q所以就会出错?br /> <br /> l合上述Q解决的办法是各大|站提出的通用解决Ҏ(gu)<strong>Filter</strong>Q如果你的应用没有用到AJAXQ只讄<strong>Request</strong>?strong>CharacterEncoding</strong>卛_Q否?strong>Response</strong>?strong>CharacterEncoding</strong>也要讄。下面是一个Filter的示例,只引用doFilterҎ(gu)来说明问题:</span></span></span><br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #008080;"><span style="font-size: 12pt;"><span style="color: #008080;"><span style="font-size: 10pt;"><span style="color: #008080;">1</span> <span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> doFilter(ServletRequest request, ServletResponse response, FilterChain chain) </span><span style="color: #0000ff;">throws</span><span style="color: #000000;"> IOException, ServletException {<br /> </span><span style="color: #008080;">2</span> <span style="color: #000000;">    request.setCharacterEncoding(</span><span style="color: #000000;">"</span><span style="color: #000000;">UTF-8</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">3</span> <span style="color: #000000;">    response.setCharacterEncoding(</span><span style="color: #000000;">"</span><span style="color: #000000;">UTF-8</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #008080;">4</span> <span style="color: #000000;">    chain.doFilter(request, response);<br /> </span><span style="color: #008080;">5</span> <span style="color: #000000;">}</span></span></span></span></span></div> <br /> <br /> </span></span> <img src ="http://www.aygfsteel.com/smcdl/aggbug/280415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2009-06-07 23:47 <a href="http://www.aygfsteel.com/smcdl/archive/2009/06/07/280415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jad和Java Decompiler的小不?/title><link>http://www.aygfsteel.com/smcdl/archive/2009/03/10/258754.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Tue, 10 Mar 2009 03:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2009/03/10/258754.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/258754.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2009/03/10/258754.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/258754.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/258754.html</trackback:ping><description><![CDATA[今天用Java Decompiler反编译一个类发现其中字符串连加的代码反编译的l果和jad的不同?br /> 源码一般somestr = "a" + "b" + "c" + "d" ....;<br /> <br /> jad反编译过来会自动生成一个StringBufferQ然后把各个子串appendC赗如Q?br /> somestr = (new StringBuilder(String.valueOf("a"))).append("b").append("c").append("d")....).toString();<br /> <br /> Java Decompiler反编译的代码基本上和原来一P有字节码查看工具看出Q编译器实对字W串相加做了优化。请在eclipse使用byte outline插g查看。但是有一U情冉|例外的,如:<br /> somestr = "a" + "b";<br /> somestr += "c" + "d";<br /> ~译器会为每一条语句徏立一个StringBuilderQ像上面的情况请把两句合q成一句?br /> <img src ="http://www.aygfsteel.com/smcdl/aggbug/258754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2009-03-10 11:25 <a href="http://www.aygfsteel.com/smcdl/archive/2009/03/10/258754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log4J基本使用教程http://www.aygfsteel.com/smcdl/archive/2009/02/17/254922.htmlteddyteddyTue, 17 Feb 2009 03:43:00 GMThttp://www.aygfsteel.com/smcdl/archive/2009/02/17/254922.htmlhttp://www.aygfsteel.com/smcdl/comments/254922.htmlhttp://www.aygfsteel.com/smcdl/archive/2009/02/17/254922.html#Feedback0http://www.aygfsteel.com/smcdl/comments/commentRss/254922.htmlhttp://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 />




teddy 2009-02-17 11:43 发表评论
]]>
使用Java范型需要注意的地方http://www.aygfsteel.com/smcdl/archive/2008/10/23/236140.htmlteddyteddyThu, 23 Oct 2008 05:59:00 GMThttp://www.aygfsteel.com/smcdl/archive/2008/10/23/236140.htmlhttp://www.aygfsteel.com/smcdl/comments/236140.htmlhttp://www.aygfsteel.com/smcdl/archive/2008/10/23/236140.html#Feedback2http://www.aygfsteel.com/smcdl/comments/commentRss/236140.htmlhttp://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 中的泛型

    了解泛型



    teddy 2008-10-23 13:59 发表评论
    ]]>Java事g传递技?Q链接至IBM|站Q?/title><link>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235955.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Wed, 22 Oct 2008 08:01:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235955.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/235955.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/235955.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/235955.html</trackback:ping><description><![CDATA[IBM开发者乐园上的教E(需注册才能览Q徏议注册一个帐PIBM|站上有很多好文章)Q很详细的介l了3U粒度模型(对象、属性、事Ӟ?br /> <strong><a title="Java事g传递技? >Java事g传递技?/a></strong><br /> <br /> <img src ="http://www.aygfsteel.com/smcdl/aggbug/235955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2008-10-22 16:01 <a href="http://www.aygfsteel.com/smcdl/archive/2008/10/22/235955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java集合框架使用注意事项Q二QMapQ?/title><link>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235916.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Wed, 22 Oct 2008 04:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235916.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/235916.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235916.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/235916.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/235916.html</trackback:ping><description><![CDATA[Map接口常用的实现类有:<br /> 1.HashMap<br /> 2.Hashtable<br /> 3.TreeMap<br /> 4.LinkedHashMap<br /> <br /> 讨论1Q底层机?br /> HashMap与HashtableZ数组实现QTreeMapZ?wi)型l构Q底层存储结构是典型的链表结构。LinkedHashMapl承自HashMapQ所以也是基于数l实现的?br /> <br /> 讨论2Q承关p?br /> HashMap与TreeMapl承自AbstractMapQHashtablel承自DictionaryQLinkedHashMapl承自HashMap?br /> <br /> 讨论3Q同步关p?br /> Hashtable是同步的Q而HashMap与TreeMap以及LinkedHashMap不是同步的,可以使用Collections中提供的Ҏ(gu)转换为同步的?br /> <br /> 讨论4QP代器<br /> q代器都是快速失败的Q注Q参考本pdW一List)<br /> <br /> 讨论5Q不可修?br /> 通过使用Collections.unmodifiableMap(Map map)来{? <img src ="http://www.aygfsteel.com/smcdl/aggbug/235916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2008-10-22 12:59 <a href="http://www.aygfsteel.com/smcdl/archive/2008/10/22/235916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java集合框架使用注意事项Q一Q?ListQ?/title><link>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235890.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Wed, 22 Oct 2008 03:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235890.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/235890.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2008/10/22/235890.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/235890.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/235890.html</trackback:ping><description><![CDATA[List的有用实?br /> 1.ArrayList<br /> 2.LinkedList<br /> 3.Vector<br /> 4.Stack<br /> <br /> 讨论1Q底层机Ӟ牉|到的数据l构的知识请读者自行复?fn)?br /> ArrayList与Vector都是Z数组实现的,q就说明ArrayList与Vector适合做遍历而不适合做频J的插入和删除?br /> LinkedList是基于链表实现的Q所以它生来是Z频繁插入与删除对象?br /> <br /> 讨论2Q特D功?br /> Stack是一个后q先出(LIFOQ对象堆栈,而LinkedList除可以被用作堆栈外,q可以被用作队列或双端队列?br /> 不同的是Stackl承自VectorQ也是说它也是Z数组实现的?br /> <br /> 讨论3Q内存占?br /> Z数组实现的ListQ在动态扩展时会生新的数l,然后把旧数组里的内容复制到新数组里,<br /> q会产生大量的不再被使用的对象引用变量等待系l回收。而基于链表实现的List׃会有q种问题?br /> <br /> 讨论4Q同步问?br /> Vector与Stack生来是同步的, 而ArrayList与LinkedList需要用Collections.synchronizedList(List list)Ҏ(gu)来{换成同步List?br /> 从它们的对象上返回的q代器是快速失败的Q也是说在使用q代器进行P代的时候,必须使用q代器本w的remove、add、set<br /> Ҏ(gu)来添加或更改List元素Q如果在q代的同Ӟ在其他线E中<strong><span style="color: #ff0000;">从结构上修改</span></strong>了ListQ结构上的修Ҏ(gu)指Q何添加或删除一个或多个元素的操作,或者显式调整底层数l的大小Q仅仅设|元素的g是结构上的修改)Q快速失败P代器会尽最大努力抛出ConcurrentModificationException?br /> <br /> 讨论5Q用策?br /> 如果数据被从数据源提取,数据量不定Q该数据一l被提取后就几乎不会再添加或删除Q那么应该徏立一个LinkedList来保存从数据源中取出的数据,然后该LinkedList转换成ArrayList来优化遍历操作。反q来Q数据量定的数据从数据源取出可以先建立一个ArrayList来保存,Ҏ(gu)需要如需频繁增删Q就转换为LinkedListQ如频繁遍历׃需转换?br /> 转换的方法就是用对应的ListcL装目标List对象。如<br /> ArrayList al = new ArrayList();<br /> LinkedList ll = new LinkedList(al);<br /> 同理反过来也可以<br /> LinkedList ll = new LinkedList();<br /> ArrayList al = new ArrayList(ll);<br /> <br /> 讨论6:toArray()Ҏ(gu)<br /> Z数组实现的List会直接返回一个底层数l的拯(使用了System.arraycopyҎ(gu))Q基于链表实现的List会新生成一个数l?br /> <br /> 讨论7Q不可修?br /> 通过使用Collections.unmodifiableList(List list)来生成一个不可修改的ListQ试图修改返回的列表Q不是直接修改q是通过其P代器q行修改Q都导致抛出UnsupportedOperationException?br /> <br /> 讨论8Q遍历器<br /> 请尽量用IteratorQEnumeration已不被鼓׃用?br /> <br /> 最后,请参考java.util.Collectionsc,该类提供了很多有用的操纵集合对象的方法?br /> <dl><dd><br /> </dd></dl><br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/smcdl/aggbug/235890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2008-10-22 11:22 <a href="http://www.aygfsteel.com/smcdl/archive/2008/10/22/235890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat对Servlet及JSP规范支持的情?/title><link>http://www.aygfsteel.com/smcdl/archive/2008/05/15/200693.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Thu, 15 May 2008 10:01:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2008/05/15/200693.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/200693.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2008/05/15/200693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/200693.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/200693.html</trackback:ping><description><![CDATA[<p><span style="font-size: 14pt"><strong><a title="请参考Tomcat官方|站" ><span style="font-size: 14pt"><strong></strong></span> </a><a title="请参考Tomcat官方|站" >请参考Tomcat官方|站</a></strong></span></p> <img src ="http://www.aygfsteel.com/smcdl/aggbug/200693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2008-05-15 18:01 <a href="http://www.aygfsteel.com/smcdl/archive/2008/05/15/200693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 5.0的新Ҏ(gu)?/title><link>http://www.aygfsteel.com/smcdl/archive/2008/05/15/200565.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Thu, 15 May 2008 01:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2008/05/15/200565.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/200565.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2008/05/15/200565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/200565.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/200565.html</trackback:ping><description><![CDATA[<p><a title="Dev2Dev中文? target="_blank">Dev2Dev中文?/a><br /> <br /> </p> <a title="官方英文? target="_blank">官方英文?/a> <img src ="http://www.aygfsteel.com/smcdl/aggbug/200565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2008-05-15 09:36 <a href="http://www.aygfsteel.com/smcdl/archive/2008/05/15/200565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javac蝲入的时机http://www.aygfsteel.com/smcdl/archive/2008/05/14/200369.htmlteddyteddyWed, 14 May 2008 03:28:00 GMThttp://www.aygfsteel.com/smcdl/archive/2008/05/14/200369.htmlhttp://www.aygfsteel.com/smcdl/comments/200369.htmlhttp://www.aygfsteel.com/smcdl/archive/2008/05/14/200369.html#Feedback0http://www.aygfsteel.com/smcdl/comments/commentRss/200369.htmlhttp://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被蝲入?

    teddy 2008-05-14 11:28 发表评论
    ]]>
    JavaҎ(gu)Q一Q?/title><link>http://www.aygfsteel.com/smcdl/archive/2008/05/13/200146.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Tue, 13 May 2008 02:39:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2008/05/13/200146.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/200146.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2008/05/13/200146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/200146.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/200146.html</trackback:ping><description><![CDATA[<p>1.建立数组</p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span> <span style="color: #0000ff">int</span><span style="color: #000000">[] i </span><span style="color: #000000">=</span><span style="color: #000000"> {</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">3</span><span style="color: #000000">};<br /> </span><span style="color: #008080">2</span> <span style="color: #000000">String[] s </span><span style="color: #000000">=</span><span style="color: #000000"> {</span><span style="color: #000000">"</span><span style="color: #000000">a</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">b</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">c</span><span style="color: #000000">"</span><span style="color: #000000">};</span></div> 上面的语句确实可以徏立数l。看似{1,2,3}可以<span style="color: red"><strong>独立代表</strong></span>一个数l对象,其实是不可以的,q和Stringcd的字面g同,一个Stringcd的字面值就是一个Stringcȝ实例Q而一个数l的字面g么都不是?br /> <br /> 2.静态方法或变量的覆?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080"> 1</span> <span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Main {<br /> </span><span style="color: #008080"> 2</span> <span style="color: #000000"><br /> </span><span style="color: #008080"> 3</span> <span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">10</span><span style="color: #000000">;<br /> </span><span style="color: #008080"> 4</span> <span style="color: #000000">    </span><span style="color: #008000">/**</span><span style="color: #008000"><br /> </span><span style="color: #008080"> 5</span> <span style="color: #008000">     * </span><span style="color: #808080">@param</span><span style="color: #008000"> args the command line arguments<br /> </span><span style="color: #008080"> 6</span> <span style="color: #008000">     </span><span style="color: #008000">*/</span><span style="color: #000000"><br /> </span><span style="color: #008080"> 7</span> <span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) {<br /> </span><span style="color: #008080"> 8</span> <span style="color: #000000">        System.out.println(TTT.i);<br /> </span><span style="color: #008080"> 9</span> <span style="color: #000000">        System.out.println(Main.i);<br /> </span><span style="color: #008080">10</span> <span style="color: #000000">        Main m </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> Main();<br /> </span><span style="color: #008080">11</span> <span style="color: #000000">        System.out.println(m.i);<br /> </span><span style="color: #008080">12</span> <span style="color: #000000">        TTT t </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> TTT();<br /> </span><span style="color: #008080">13</span> <span style="color: #000000">        System.out.println(t.i);<br /> </span><span style="color: #008080">14</span> <span style="color: #000000">        Main m2 </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> TTT();<br /> </span><span style="color: #008080">15</span> <span style="color: #000000">        System.out.println(m2.i);<br /> </span><span style="color: #008080">16</span> <span style="color: #000000">        System.out.println(((TTT)m2).i);<br /> </span><span style="color: #008080">17</span> <span style="color: #000000">        <br /> </span><span style="color: #008080">18</span> <span style="color: #000000">        Main.Test();<br /> </span><span style="color: #008080">19</span> <span style="color: #000000">        TTT.Test();<br /> </span><span style="color: #008080">20</span> <span style="color: #000000">        m.Test();<br /> </span><span style="color: #008080">21</span> <span style="color: #000000">        t.Test();<br /> </span><span style="color: #008080">22</span> <span style="color: #000000">        m2.Test();<br /> </span><span style="color: #008080">23</span> <span style="color: #000000">        ((TTT)m2).Test();<br /> </span><span style="color: #008080">24</span> <span style="color: #000000">    }<br /> </span><span style="color: #008080">25</span> <span style="color: #000000">    <br /> </span><span style="color: #008080">26</span> <span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> Test() {<br /> </span><span style="color: #008080">27</span> <span style="color: #000000">        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Hello Test From Main.</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> </span><span style="color: #008080">28</span> <span style="color: #000000">    }<br /> </span><span style="color: #008080">29</span> <span style="color: #000000"><br /> </span><span style="color: #008080">30</span> <span style="color: #000000">}<br /> </span><span style="color: #008080">31</span> <span style="color: #000000"><br /> </span><span style="color: #008080">32</span> <span style="color: #0000ff">class</span><span style="color: #000000"> TTT </span><span style="color: #0000ff">extends</span><span style="color: #000000"> Main {<br /> </span><span style="color: #008080">33</span> <span style="color: #000000">    <br /> </span><span style="color: #008080">34</span> <span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">20</span><span style="color: #000000">;<br /> </span><span style="color: #008080">35</span> <span style="color: #000000">    <br /> </span><span style="color: #008080">36</span> <span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> Test() {<br /> </span><span style="color: #008080">37</span> <span style="color: #000000">        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Hello Test From TTT.</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> </span><span style="color: #008080">38</span> <span style="color: #000000">    }<br /> </span><span style="color: #008080">39</span> <span style="color: #000000">}</span></div> <br /> 3.一个接口可以承多个接口(使用extends关键字)<br /> <br /> 4.如果一个类中定义了final帔RQƈ且在多个cM被引用,当该帔R被修Ҏ(gu)Q?strong style="color: red">代码U修?/strong>Q,其他引用该常量的c都要被重新~译Q?br /> 否则Q新值是不会被代入引用该帔R的类中。原因是帔R在编译期被硬~码到引用它的类中,可以通过反编译工h验证?br /> <br /> 5.一个方法的q回cd必须直接写在斚w名称的前?<br /> <br /> 6.与类名相同的Ҏ(gu)名(非构造函敎ͼ是被允许的(JDK1.4试通过Q也?.4之前的版本不能通过Q?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span> <span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> Test {<br /> </span><span style="color: #008080">2</span> <span style="color: #000000">    Test() {<br /> </span><span style="color: #008080">3</span> <span style="color: #000000">        <img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><br /> </span><span style="color: #008080">4</span> <span style="color: #000000">    }<br /> </span><span style="color: #008080">5</span> <span style="color: #000000"><br /> </span><span style="color: #008080">6</span> <span style="color: #000000">    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> Test() {<br /> </span><span style="color: #008080">7</span> <span style="color: #000000">        <img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><br /> </span><span style="color: #008080">8</span> <span style="color: #000000">    }<br /> </span><span style="color: #008080">9</span> <span style="color: #000000">}</span></div> <img src ="http://www.aygfsteel.com/smcdl/aggbug/200146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2008-05-13 10:39 <a href="http://www.aygfsteel.com/smcdl/archive/2008/05/13/200146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log4j自带Log Viewer的用?/title><link>http://www.aygfsteel.com/smcdl/archive/2008/03/19/187199.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Wed, 19 Mar 2008 03:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2008/03/19/187199.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/187199.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2008/03/19/187199.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/187199.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/187199.html</trackback:ping><description><![CDATA[q两天在研究Log4j的一些用法,无意中发现Log4j提供了一个Log ViewerQ名字叫做ChainSaw?br /> 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:<br /> log4j.appender.CHAINSAW_CLIENT=org.apache.log4j.net.SocketAppender<br /> log4j.appender.CHAINSAW_CLIENT.RemoteHost=localhost<br /> log4j.appender.CHAINSAW_CLIENT.Port=4445<br /> log4j.appender.CHAINSAW_CLIENT.LocationInfo=true<br /> 在rootLogger中加入CHAINSAW_CLIENT的appenderQ如Qlog4j.rootLogger=INFO,CHAINSAW_CLIENT<br /> <br /> 改工具可以设|多个过滤条Ӟ如别、线E、Logger、消息等?br /> 更多使用Ҏ(gu)可以自己摸烦一下,很简单哦? <img src ="http://www.aygfsteel.com/smcdl/aggbug/187199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2008-03-19 11:36 <a href="http://www.aygfsteel.com/smcdl/archive/2008/03/19/187199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log4j输出日志消息Ӟ不必再检当前输出Level是否Enabled?/title><link>http://www.aygfsteel.com/smcdl/archive/2008/03/18/186995.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Tue, 18 Mar 2008 06:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2008/03/18/186995.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/186995.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2008/03/18/186995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/186995.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/186995.html</trackback:ping><description><![CDATA[今天Z解决一个项目问题,跟踪到Log4j的源码里Q发现我们以前都写过下面的程序吧Q?br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><span style="color: #008080;">1</span><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />if (<span style="color: #000000;">log.isDebugEnabled())<br /> </span><span style="color: #008080;">2</span><span style="color: #000000;"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    log.debug(</span><span style="color: #000000;">"</span><span style="color: #000000;">Erro Message</span><span style="color: #000000;">"</span><span style="color: #000000;">);</span></div> 其实再确认是否EnabledQ因为debug、info{方法里面有同样的验证?br /> 所以以后少一D这L(fng)验证也许会提高一些性能?br /> 我测试的Log4j的版本是1.2.9<br /> <br /> 补充Q有些情况下对于q个判断q是很必要的Q如log的信息是调用不同的方法的l果l合而成的,q且q些Ҏ(gu)执行h比较Ҏ(gu)Q这个时候就需要先判断一下?br /> <img src ="http://www.aygfsteel.com/smcdl/aggbug/186995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2008-03-18 14:17 <a href="http://www.aygfsteel.com/smcdl/archive/2008/03/18/186995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于对可以从Request中取出的路径信息的研I?/title><link>http://www.aygfsteel.com/smcdl/archive/2007/10/19/154187.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Fri, 19 Oct 2007 05:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/smcdl/archive/2007/10/19/154187.html</guid><wfw:comment>http://www.aygfsteel.com/smcdl/comments/154187.html</wfw:comment><comments>http://www.aygfsteel.com/smcdl/archive/2007/10/19/154187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/smcdl/comments/commentRss/154187.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/smcdl/services/trackbacks/154187.html</trackback:ping><description><![CDATA[Servlet的Request中和用户h路径相关的操作有多个Q下面一一列DQ?br /> 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 /> <br /> 注意Q?br /> 1.getServletContext().getRealPath("/") 后包含当前系l的文g夹分隔符Qwindowspȝ?\"Qlinuxpȝ?/"Q,而getPathInfo()?/"开头?<br /> 2.getPathInfo()与getPathTranslated()在servlet的url-pattern被设|ؓ/*?aa/*之类的pattern时才有|其他时候都q回null?br /> 3.在servlet的url-pattern被设|ؓ*.xx之类的patternӞgetServletPath()q回的是getRequestURI()L前面ContextPath的剩余部分? <img src ="http://www.aygfsteel.com/smcdl/aggbug/154187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/smcdl/" target="_blank">teddy</a> 2007-10-19 13:35 <a href="http://www.aygfsteel.com/smcdl/archive/2007/10/19/154187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Java的Cookie操作http://www.aygfsteel.com/smcdl/archive/2007/09/05/142945.htmlteddyteddyWed, 05 Sep 2007 09:05:00 GMThttp://www.aygfsteel.com/smcdl/archive/2007/09/05/142945.htmlhttp://www.aygfsteel.com/smcdl/comments/142945.htmlhttp://www.aygfsteel.com/smcdl/archive/2007/09/05/142945.html#Feedback0http://www.aygfsteel.com/smcdl/comments/commentRss/142945.htmlhttp://www.aygfsteel.com/smcdl/services/trackbacks/142945.html试环境QJDK1.5、Tomcat5.5

    1.讄Cookie

    1Cookie cookie = new Cookie("key""value");
    2cookie.setMaxAge(60); //讄60U生存期Q如果设|ؓ负值的话,则ؓ览器进ECookieQ内存中保存Q,关闭览器就失效?/span>
    3cookie.setPath("/test/test2"); //讄Cookie路径Q不讄的话为当前\径(对于Servlet来说为request.getContextPath() + web.xml里配|的该Servlet的url-pattern路径部分Q?/span>
    4response.addCookie(cookie);

    2.dCookie
    11//该方法可以读取当前\径以?#8220;直接父\?#8221;的所有Cookie对象Q如果没有Q何Cookie的话Q则q回null
    22Cookie[] cookies = request.getCookies();

    3.删除Cookie
    1Cookie cookie = new Cookie("key"null);
    2cookie.setMaxAge(0); //讄?为立卛_除该Cookie
    3cookie.setPath("/test/test2"); //删除指定路径上的CookieQ不讄该\径,默认为删除当前\径Cookie
    4response.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 />



    teddy 2007-09-05 17:05 发表评论
    ]]>
    վ֩ģ壺 ɽ| ¡| ɽ| | ī񹤿| | | ӳ| | ׳| | | Ӣɽ| ¬| ϴ| | Ϫ| Ͱ| Ͱ| ƽ| | | | üɽ| | ٺ| | ʲ| | ԭ| ĵ| | | ׼| | | ɰ| | | | ں|