﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-licweiwei</title><link>http://www.blogjava.net/licweiwei/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 13 Jun 2026 11:46:00 GMT</lastBuildDate><pubDate>Sat, 13 Jun 2026 11:46:00 GMT</pubDate><ttl>60</ttl><item><title>JSP2.0 &amp; JSTL1.1</title><link>http://www.blogjava.net/licweiwei/articles/280933.html</link><dc:creator>licwei</dc:creator><author>licwei</author><pubDate>Tue, 09 Jun 2009 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/licweiwei/articles/280933.html</guid><wfw:comment>http://www.blogjava.net/licweiwei/comments/280933.html</wfw:comment><comments>http://www.blogjava.net/licweiwei/articles/280933.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/licweiwei/comments/commentRss/280933.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/licweiwei/services/trackbacks/280933.html</trackback:ping><description><![CDATA[<span style="font-family: Times New Roman;"><span style="font-family: Courier;"><span style="font-family: 微软雅黑;">
<h2><strong><span style="color: #140000;">使用Servlet2.4/jsp2.0</span></strong></h2>
<p><span style="color: #140000;">1. 确定Web Container支持Serverlet2.4， 复制支持jstl
1.1版本的jstl.jar,standard.jar 到web-inf/lib。</span></p>
<p><span style="color: #140000;">2.&nbsp;在Web.xml，Root节点改为</span></p>
<pre>&lt;web-app version="2.4" xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> <br />
&nbsp;<a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a> "&gt;</pre>
<p>3.在jsp中，对core,ftm taglib的引入改为&nbsp;&nbsp;</p>
<pre>&lt;%@ taglib prefix="c" uri="<a href="http://java.sun.com/jsp/jstl/core%22%"  %??="">http://java.sun.com/<span style="color: red;">jsp</span>/jstl/core"%</a> &gt;<br />
&lt;%@ taglib prefix="fmt" uri="<a href="http://java.sun.com/jsp/jstl/fmt%22%"  %??="">http://java.sun.com/<span style="color: red;">jsp</span>/jstl/fmt"%</a> &gt;</pre>
<h2><span style="color: #140000;">2.直接在html里面使用EL，而不是&lt;c:out value=""&gt;</span></h2>
<p>&nbsp; 充分使用JSP2.0的EL，直接在html中写${book} 而不是&lt;c:out
value="${book}"&gt;将获得简洁无比，可比美velocity,freemarker的界面。</p>
<h2><strong><span style="color: #140000;">3.新增的Function标签</span></strong></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Function标签里最有用的一项是取得List,Map的size了。另外有一些StringUtils和Collection的函数。</p>
<pre>&lt;%@ taglib prefix="fn" uri="<a href="http://java.sun.com/jsp/jstl/functions%22%"  %??="">http://java.sun.com/jsp/jstl/functions"%</a>&gt;<br />
<br />
${fn:length(myList)}</pre>
</span></span></span>
<img src ="http://www.blogjava.net/licweiwei/aggbug/280933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/licweiwei/" target="_blank">licwei</a> 2009-06-09 14:26 <a href="http://www.blogjava.net/licweiwei/articles/280933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 写文件的4096缓冲字节</title><link>http://www.blogjava.net/licweiwei/articles/279214.html</link><dc:creator>licwei</dc:creator><author>licwei</author><pubDate>Sun, 31 May 2009 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/licweiwei/articles/279214.html</guid><wfw:comment>http://www.blogjava.net/licweiwei/comments/279214.html</wfw:comment><comments>http://www.blogjava.net/licweiwei/articles/279214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/licweiwei/comments/commentRss/279214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/licweiwei/services/trackbacks/279214.html</trackback:ping><description><![CDATA[<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;copyFile(File&nbsp;sourceFile,&nbsp;File&nbsp;targetFile,Boolean&nbsp;preserveFileDate)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- ........--&gt;<br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;缓冲数组</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[]&nbsp;b&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(0, 0, 0);">4096</span><span style="color: rgb(0, 0, 0);">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;((len&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;inBuff.read(b))&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outBuff.write(b,&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">,&nbsp;len);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 0);">&lt;!-- ........--&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
拿上面的代码为例，一直以来， 看别人用java写文件都是用4096字节的缓冲，之一在想为什么是4096呢， 网上查了一下资料，操作系统读写文件是以簇为原子操作的， 一般windows的NTFS系统的簇大小是4096，所以我想原因应该是既然底层IO操作一次是4096个字节那么缓冲多了也没意义，不会减少底层IO操作的次数。<br />
<br />
这个想法有待考证。。。。。。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/licweiwei/aggbug/279214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/licweiwei/" target="_blank">licwei</a> 2009-05-31 15:19 <a href="http://www.blogjava.net/licweiwei/articles/279214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP的重新编译</title><link>http://www.blogjava.net/licweiwei/articles/157961.html</link><dc:creator>licwei</dc:creator><author>licwei</author><pubDate>Sat, 03 Nov 2007 11:46:00 GMT</pubDate><guid>http://www.blogjava.net/licweiwei/articles/157961.html</guid><wfw:comment>http://www.blogjava.net/licweiwei/comments/157961.html</wfw:comment><comments>http://www.blogjava.net/licweiwei/articles/157961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/licweiwei/comments/commentRss/157961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/licweiwei/services/trackbacks/157961.html</trackback:ping><description><![CDATA[<p style="font-size: 10pt; font-family: Arial;">这2天改页面的BUG的时候遇到个很郁闷的问题，每次修改过JSP都不去重新Load，后来经人提醒是时间戳的问题，每次保存修改的JSP的时候都要把系统时间改成2008年，weblogic才能重新编译。删除application，重新explod也不行。<br />
上网查了下资料，才发现weblogic重新编译的条件。<br />
JSP容器通过实现StaleChecker接口调用_staticIsStale()方法。该实现接收一个带有清单1中所示参数的回调(isResourceStale())。有了这些参数，该实现可以仅接收所有必需的信息，以推断给定资源是否过期。当资源（参数1）/foo.jsp的时间戳（参数2）比存储在已编译类文件中的时间戳还要新（参数更大）时，或者当发行版本不同时，JSP容器认为JSP.class文件&#8220;过期&#8221;。<br />
<strong>清单1. staticIsStale()方法</strong><br />
</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_76_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_76_249_Open_Text.style.display='none'; Codehighlighter1_76_249_Closed_Image.style.display='inline'; Codehighlighter1_76_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_76_249_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_76_249_Closed_Text.style.display='none'; Codehighlighter1_76_249_Open_Image.style.display='inline'; Codehighlighter1_76_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" /><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);">&nbsp;_staticIsStale(weblogic.servlet.jsp.StaleChecker&nbsp;sci)&nbsp;</span><span id="Codehighlighter1_76_249_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_76_249_Open_Text"><span style="color: rgb(0, 0, 0);">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(sci.isResourceStale(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">/foo.jsp</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">1089594167518L</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">8.1.2.0</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">America/Los_Angeles</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">))&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" />}</span></span></div>
<p style="font-size: 10pt; font-family: Arial;"><br />
<br />
<span style="font-family: Arial;"><span style="font-size: 10pt;"><span style="font-family: Arial;">&nbsp;</span></span></span></p>
<li>因为JSP页面的时间戳保存在类文件内部，并且是在编译时计算的，<span style="color: red;">所以修改类文件的时间戳不会对过期检查过程产生影响。</span>
</li>
<li>第4个参数，也就是时区，只在以存档格式（.war）进行部署时使用。
</li>
<li>WebLogic发行版本随每个服务包改变，因此需要为每个服务包重新编译所有JSP。提出这个要求是为了确保JSP类可以利用较新服务包或发行版本中的所有编译器缺陷修复或所有JSP运行时更改。 </li>
<p><br />
所以之前的问题可能是老的class文件的时间戳是2008年，只要找到编译后的class文件删除，应该就可以重新编译了。项目中JSP class的目录是：<br />
C:\bea\user_projects\domains\mydomain\myserver\.wlnotdelete\extract\myserver_appliesEAR_applies\jsp_servlet。<br />
<br />
关于时间戳的详细介绍参考：<br />
</p>
<span style="font-size: 10pt; font-family: Arial;">http://dev2dev.bea.com.cn/techdoc/2005041305.html</span>
<img src ="http://www.blogjava.net/licweiwei/aggbug/157961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/licweiwei/" target="_blank">licwei</a> 2007-11-03 19:46 <a href="http://www.blogjava.net/licweiwei/articles/157961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons-logging + Log4j 使用简记</title><link>http://www.blogjava.net/licweiwei/articles/155095.html</link><dc:creator>licwei</dc:creator><author>licwei</author><pubDate>Mon, 22 Oct 2007 12:39:00 GMT</pubDate><guid>http://www.blogjava.net/licweiwei/articles/155095.html</guid><wfw:comment>http://www.blogjava.net/licweiwei/comments/155095.html</wfw:comment><comments>http://www.blogjava.net/licweiwei/articles/155095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/licweiwei/comments/commentRss/155095.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/licweiwei/services/trackbacks/155095.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; font-family: Times New Roman">通过网上查找资料和项目中的一些应用，记录一下<font size="2">Commons-logging + Log4j </font>的使用方法。<br />
现在很多都是使用Commons-logging + Log4j 结合使用，而不是全部使用Log4j。common-logging,就可以自行决定在自己的应用中采用何种实现，并跟所依赖的jar包统一起来。<br />
据common-logging的官方文档，决定实现方式的策略如下： <br />
1.首先查找org.apache.commons.logging.Log属性，该属性可以在java代码中设置，更常见的是在classpath下的common-logging.properties文件中进行设置 <br />
2.在系统属性中查找org.apache.commons.logging.Log <br />
3.如果类路径中有log4j的jar包，则采用log4j实现 <br />
4.如果jdk版本为1.4，采用Jdk14Logger <br />
5.采用common-logging提供的SimpleLog <br />
<br />
所以只要在classpath中加入Log4j的jar，Commons-logging 后台使用的还是Log4j作为日志实现类。单独使用Log4j的时候需要初始化：<br />
<br />
&nbsp;&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import org.apache.log4j.Logger; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import org.apache.log4j.PropertyConfigurator; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class Log4j { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static Logger logger = Logger.getLogger(Log4j .class); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]) { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #333399">PropertyConfigurator.configure("log4j.properties"); </span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("DEBUG");&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
</p>
<br />
<p><font size="+0"><font face="Times New Roman"><font style="font-size: 10pt" size="3"></font></font></font>&nbsp;</p>
&nbsp; 使用Commons-logging + Log4j 实现方法：.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2">import org.apache.commons.logging.Log;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import org.apache.commons.logging.LogFactory;</font><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">class TestLog{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static Log log = LogFactory.getLog(TestLog.class);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; public static void testLog(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; log.debug("test Commons-logging + Log4j");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
只要classpath有Log4j的jar，其实就是使用Log4j作为实现类，但是要注意的是<font face="Times New Roman">log4j.properties</font>一定要在classpath中，之前一直不知道程序是如何去找到<font face="Times New Roman">log4j.properties</font>的，后来才发现是通过classpath去找的，如果classpath中没有具体配置，就是到当前类所在目录下去查找（不包括包文件夹）。<br />
<br />
log4j.properties简介：<br />
log4j.rootCategory=debug,&nbsp;stdout,&nbsp;R&nbsp;&nbsp;<br />
log4j.appender.stdout=org.apache.log4j.ConsoleAppender&nbsp;&nbsp;<br />
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout&nbsp;&nbsp;<br />
#&nbsp;Pattern&nbsp;to&nbsp;output&nbsp;the&nbsp;caller's&nbsp;file&nbsp;name&nbsp;and&nbsp;line&nbsp;number.&nbsp;&nbsp;<br />
log4j.appender.stdout.layout.ConversionPattern=%5p&nbsp;[%t]&nbsp;(%F:%L)&nbsp;-&nbsp;%m%n&nbsp;&nbsp;<br />
log4j.appender.R=org.apache.log4j.RollingFileAppender&nbsp;&nbsp;<br />
log4j.appender.R.File=example.log&nbsp;&nbsp;<br />
log4j.appender.R.MaxFileSize=100KB&nbsp;&nbsp;<br />
#&nbsp;Keep&nbsp;one&nbsp;backup&nbsp;file&nbsp;&nbsp;<br />
log4j.appender.R.MaxBackupIndex=1&nbsp;&nbsp;<br />
log4j.appender.R.layout=org.apache.log4j.PatternLayout&nbsp;&nbsp;<br />
log4j.appender.R.layout.ConversionPattern=%p&nbsp;%t&nbsp;%c&nbsp;-&nbsp;%m%n&nbsp;&nbsp;<br />
说明:&nbsp;&nbsp;<br />
①log4j.rootCategory&nbsp;=&nbsp;[&nbsp;level&nbsp;]&nbsp;,&nbsp;appenderName,&nbsp;appenderName,&nbsp;&nbsp;<br />
其中,level&nbsp;是日志记录的优先级,分为OFF,FATAL,ERROR,WA&nbsp;R&nbsp;N,INFO,DEBUG,&nbsp;<br />
ALL或者您定义的级别.Log4j建议只使用四个级别,优先级从高到低分别是ERROR,&nbsp;<br />
WA&nbsp;R&nbsp;N,INFO,DEBUG.通过在这里定义的级别,您可以控制到应用程序中相应级别的日&nbsp;<br />
志信息的开关.比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息&nbsp;<br />
将不被打印出来.appenderName就是指定日志信息输出到哪个地方.您可以同时指定多个&nbsp;<br />
输出目的地.&nbsp;&nbsp;<br />
②配置日志信息输出目的地Appender,其语法为&nbsp;&nbsp;<br />
log4j.appender.appenderName&nbsp;=&nbsp;fully.qualified.name.of.appender.class&nbsp;&nbsp;<br />
log4j.appender.appenderName.option1&nbsp;=&nbsp;value1&nbsp;&nbsp;<br />
<br />
log4j.appender.appenderName.option&nbsp;=&nbsp;valueN&nbsp;&nbsp;<br />
其中,Log4j提供的appender有以下几种:&nbsp;&nbsp;<br />
org.apache.log4j.ConsoleAppender(控制台),&nbsp;&nbsp;<br />
org.apache.log4j.FileAppender(文件),&nbsp;&nbsp;<br />
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),&nbsp;<br />
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),&nbsp;&nbsp;<br />
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)&nbsp;&nbsp;<br />
③配置日志信息的格式(布局),其语法为:&nbsp;&nbsp;<br />
log4j.appender.appenderName.layout&nbsp;=&nbsp;fully.qualified.name.of.layout.class&nbsp;&nbsp;<br />
log4j.appender.appenderName.layout.option1&nbsp;=&nbsp;value1&nbsp;&nbsp;<br />
<br />
log4j.appender.appenderName.layout.option&nbsp;=&nbsp;valueN&nbsp;&nbsp;<br />
其中,Log4j提供的layout有以下几种:&nbsp;&nbsp;<br />
org.apache.log4j.HTMLLayout(以HTML表格形式布局),&nbsp;&nbsp;<br />
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),&nbsp;&nbsp;<br />
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),&nbsp;&nbsp;<br />
org.apache.log4j.TTCCLayout(包含日志产生的时间,线程,类别等等信息)&nbsp;&nbsp;<br />
④Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:&nbsp;&nbsp;<br />
%m&nbsp;输出代码中指定的消息&nbsp;&nbsp;<br />
%p&nbsp;输出优先级,即DEBUG,INFO,WA&nbsp;R&nbsp;N,ERROR,FATAL&nbsp;&nbsp;<br />
%r&nbsp;输出自应用启动到输出该log信息耗费的毫秒数&nbsp;&nbsp;<br />
%c&nbsp;输出所属的类目,通常就是所在类的全名&nbsp;&nbsp;<br />
%t&nbsp;输出产生该日志事件的线程名&nbsp;&nbsp;<br />
%n&nbsp;输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"&nbsp;&nbsp;<br />
%d&nbsp;输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,&nbsp;&nbsp;<br />
比如:%d{yyy&nbsp;MMM&nbsp;dd&nbsp;HH:mm:ss,SSS},输出类似:2002年10月18日&nbsp;22:10:28,921&nbsp;&nbsp;<br />
%l&nbsp;输出日志事件的发生位置,包括类目名,发生的线程,以及在代码中的行数.&nbsp;<br />
这里有2点要说明的，<br />
<span style="color: #333399">一是关于log4j.appender.R.File=example.log&nbsp;，如果不给定绝对路径的话，log文件的默认路径是user.dir，可以通过System.getProperty("user.dir")来得到。<br />
而是关于%5p&nbsp;[%t]&nbsp;(%F:%L)&nbsp;-&nbsp;%m%n&nbsp;&nbsp; 5代表优先级字符串占用几个位置，%F代表文件名，%L代表行号。<br />
</span><br />
使用xml来充当配置，没有去看过，所以也不了解，但是在网上也看到过依赖jar包里的log4j配置将自己应用的log4j.properties屏蔽掉的问题，说是classpath中的jxls-core-0.9.5.jar中的log4j.xml,该配置优先于他的log4j.properties，导致log4j.properties设置失效，不过不太了解是什么原因，但是有人给出了解决方案，<br />
<p>手工重新 configure一下：</p>
<p>org.apache.log4j.LogManager.resetConfiguration(); <br />
然后：</p>
<p>org.apache.log4j.PropertyConfigurator.configure("c:/yourlog4j.properties");</p>
<p>或者</p>
<p>org.apache.log4j.xml.DOMConfigurator.configure("c:/yourlog4j.xml");<br />
</p>
<br />
<br />
<br />
<br />
<br />
<br />
</span>
<img src ="http://www.blogjava.net/licweiwei/aggbug/155095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/licweiwei/" target="_blank">licwei</a> 2007-10-22 20:39 <a href="http://www.blogjava.net/licweiwei/articles/155095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML文件处理（一）</title><link>http://www.blogjava.net/licweiwei/articles/152726.html</link><dc:creator>licwei</dc:creator><author>licwei</author><pubDate>Sun, 14 Oct 2007 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/licweiwei/articles/152726.html</guid><wfw:comment>http://www.blogjava.net/licweiwei/comments/152726.html</wfw:comment><comments>http://www.blogjava.net/licweiwei/articles/152726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/licweiwei/comments/commentRss/152726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/licweiwei/services/trackbacks/152726.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">&nbsp;</span><span style="font-size: 10pt"><span style="font-size: 10pt; font-family: Arial">&nbsp; &nbsp;在 Java 领域 XML 文件的技术大致分为两类:XML API 和 OXMapping.XML API 是 XML 处理的基础，可选技术包括JDOM,Dom4j等；OXMapping 是 Object-XML Mapping 的简称，这种技术隐藏了 XML 底层操作的细节，可以将 XML 文件映射成一个 JavaBean 对象，也可以把一个 JavaBean 对象保存成一个 XML 文件，可选技术 XStream 、 Digester 、 Castor 等。 XML API 和 OXMapping 的关系类似于 JDBC 和 ORMaping 的关系， OXMapping 内部实现使用 XML API 来完成，两种实现技术从不同的层面实现了 XML 的处理。<br />
<br />
</span>&nbsp;&nbsp;&nbsp; <span style="font-size: 10pt; font-family: Arial">XML API </span></span>
<p><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;此类 XML 处理技术中最流行的莫过于<span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-size: 10pt">DOM4J </span></span></span>了，</span></span></span><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-size: 10pt">DOM4J 是一个非常非常优秀的Java XML API，具有性能优异、功能强大和极端易用使用的特点，同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML，特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J</span></span></span><span style="font-size: 10pt"><span style="font-family: Arial"><span style="font-size: 10pt"><br />
<br />
</span></span>&nbsp;&nbsp;&nbsp;<span style="font-family: Arial">&nbsp; <span style="font-size: 10pt">OXMapping </span></span></span></p>
<p><span style="font-family: Arial"><span style="font-size: 10pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp; 使用 XML API 解析是略显烦琐的，受 ORMapping 技术的启发，人们发明了 OXMapping 技术，使用 OXMapping 技术，我们可以将 XML 文件映射成一个 JavaBean 对象，也可以把一个 JavaBean 对象保存成一个 XML 文件，这大大简化了我们的开发工作量，使得开发人员能更多的关注应用层面的东西。 </span></span></span></p>
<p><span style="font-family: Arial"><span style="font-size: 10pt">&nbsp;&nbsp;<span style="font-size: 10pt">&nbsp; 开源世界中涌现出很多 OXMapping 框架，包括 XStream 、 Digester 、 Castor 等。 其中Digester 是&#8220;开源名牌&#8221; Apache 下的子项目，网上可以参考的资料很多。</span><br />
</span></span></p>
<p><br />
</p>
<img src ="http://www.blogjava.net/licweiwei/aggbug/152726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/licweiwei/" target="_blank">licwei</a> 2007-10-14 15:04 <a href="http://www.blogjava.net/licweiwei/articles/152726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>