<?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-空间站-文章分类-JAVA</title><link>http://www.blogjava.net/i369/category/17158.html</link><description>北极心空</description><language>zh-cn</language><lastBuildDate>Thu, 03 Apr 2008 06:08:53 GMT</lastBuildDate><pubDate>Thu, 03 Apr 2008 06:08:53 GMT</pubDate><ttl>60</ttl><item><title>[收藏] Java数据类型，Hibernate数据类型，标准sql数据类型之间的对应表 </title><link>http://www.blogjava.net/i369/articles/190588.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Thu, 03 Apr 2008 04:39:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/190588.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/190588.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/190588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/190588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/190588.html</trackback:ping><description><![CDATA[<table style="border-right: #f3f3f3 5px solid; border-top: #f3f3f3 5px solid; border-left: #f3f3f3 5px solid; border-bottom: #f3f3f3 5px solid" cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td style="padding-left: 10px; padding-top: 5px" width="560" colspan="2"><span style="font-size: 13px; line-height: 22px">
            <div class="postTitle"><a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.blogjava.net/haoqingshi/articles/10912.html">Java数据类型，Hibernate数据类型，标准sql数据类型之间的对应表</a></div>
            <table style="width: 100%; text-align: left" cellspacing="2" cellpadding="2" border="1">
                <tbody>
                    <tr>
                        <td style="background-color: rgb(204,204,204)"><small><font size="2">Java数据类型</font></small></td>
                        <td style="background-color: rgb(204,204,204)"><small><font size="2">Hibernate数据类型</font></small></td>
                        <td style="background-color: rgb(204,204,204)"><small><font size="2">标准SQL数据类型<br />
                        (PS:对于不同的DB可能有所差异)</font></small></td>
                    </tr>
                    <tr>
                        <td>byte、java.lang.Byte</td>
                        <td>byte</td>
                        <td>TINYINT</td>
                    </tr>
                    <tr>
                        <td>short、java.lang.Short</td>
                        <td>short</td>
                        <td>SMALLINT</td>
                    </tr>
                    <tr>
                        <td>int、java.lang.Integer</td>
                        <td>integer</td>
                        <td>INGEGER</td>
                    </tr>
                    <tr>
                        <td>long、java.lang.Long</td>
                        <td>long</td>
                        <td>BIGINT</td>
                    </tr>
                    <tr>
                        <td>float、java.lang.Float</td>
                        <td>float</td>
                        <td>FLOAT</td>
                    </tr>
                    <tr>
                        <td>double、java.lang.Double</td>
                        <td>double</td>
                        <td>DOUBLE</td>
                    </tr>
                    <tr>
                        <td>java.math.BigDecimal</td>
                        <td>big_decimal</td>
                        <td>NUMERIC</td>
                    </tr>
                    <tr>
                        <td>char、java.lang.Character</td>
                        <td>character</td>
                        <td>CHAR(1)</td>
                    </tr>
                    <tr>
                        <td>boolean、java.lang.Boolean</td>
                        <td>boolean</td>
                        <td>BIT</td>
                    </tr>
                    <tr>
                        <td>java.lang.String</td>
                        <td>string</td>
                        <td>VARCHAR</td>
                    </tr>
                    <tr>
                        <td>boolean、java.lang.Boolean</td>
                        <td>yes_no</td>
                        <td>CHAR(1)('Y'或'N')</td>
                    </tr>
                    <tr>
                        <td>boolean、java.lang.Boolean</td>
                        <td>true_false</td>
                        <td>CHAR(1)('Y'或'N')</td>
                    </tr>
                    <tr>
                        <td>java.util.Date、java.sql.Date</td>
                        <td>date</td>
                        <td>DATE</td>
                    </tr>
                    <tr>
                        <td>java.util.Date、java.sql.Time</td>
                        <td>time</td>
                        <td>TIME</td>
                    </tr>
                    <tr>
                        <td>java.util.Date、java.sql.Timestamp</td>
                        <td>timestamp</td>
                        <td>TIMESTAMP</td>
                    </tr>
                    <tr>
                        <td>java.util.Calendar</td>
                        <td>calendar</td>
                        <td>TIMESTAMP</td>
                    </tr>
                    <tr>
                        <td>java.util.Calendar</td>
                        <td>calendar_date</td>
                        <td>DATE</td>
                    </tr>
                    <tr>
                        <td>byte[]</td>
                        <td>binary</td>
                        <td>VARBINARY、BLOB</td>
                    </tr>
                    <tr>
                        <td>java.lang.String</td>
                        <td>text</td>
                        <td>CLOB</td>
                    </tr>
                    <tr>
                        <td>java.io.Serializable</td>
                        <td>serializable</td>
                        <td>VARBINARY、BLOB</td>
                    </tr>
                    <tr>
                        <td>java.sql.Clob</td>
                        <td>clob</td>
                        <td>CLOB</td>
                    </tr>
                    <tr>
                        <td>java.sql.Blob</td>
                        <td>blob</td>
                        <td>BLOB</td>
                    </tr>
                    <tr>
                        <td>java.lang.Class</td>
                        <td>class</td>
                        <td>VARCHAR</td>
                    </tr>
                    <tr>
                        <td>java.util.Locale</td>
                        <td>locale</td>
                        <td>VARCHAR</td>
                    </tr>
                    <tr>
                        <td>java.util.TimeZone</td>
                        <td>timezone</td>
                        <td>VARCHAR</td>
                    </tr>
                    <tr>
                        <td>java.util.Currency</td>
                        <td>currency</td>
                        <td>VARCHAR</td>
                    </tr>
                </tbody>
            </table>
            </span></td>
        </tr>
        <tr>
            <td valign="bottom" colspan="2" height="40">文章来源:<a href="http://www.blogjava.net/haoqingshi/articles/10912.html" target="_blank">http://www.blogjava.net/haoqingshi/articles/10912.html</a></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/i369/aggbug/190588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2008-04-03 12:39 <a href="http://www.blogjava.net/i369/articles/190588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j和commons.logging日志记录的使用方法</title><link>http://www.blogjava.net/i369/articles/185309.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Tue, 11 Mar 2008 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/185309.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/185309.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/185309.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/185309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/185309.html</trackback:ping><description><![CDATA[<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text"><span style="font-size: 9pt; color: black">
            <p style="margin: 0in 0in 0pt"><strong><span style="font-size: 9pt">Log4j</span><span style="font-size: 9pt">中文手册下载地址</span></strong><span style="font-size: 9pt"><a href="http://www.matrix.org.cn/resource/upload/forum/2006_04_07_205056_ZCxoePRlHJ.pdf" target="_blank"><span style="color: windowtext">http://www.matrix.org.cn/resource/upload/forum/2006_04_07_205056_ZCxoePRlHJ.pdf</span></a></span></p>
            <p style="margin: 0in 0in 0pt"></p>
            <p style="margin: 0in 0in 0pt"><span style="font-size: 9pt">log4j的好处在于：<br />
            1.通过修改配置文件，就可以决定log信息输出到何处(console,文件,...),是否输出。<br />
            这样，在系统开发阶段可以打印详细的log信息以跟踪系统运行情况,而在系统稳定后可以关闭log输出,从而在能跟踪系统运行情况的同时,又减少了垃圾代码(System.out.println(...)等)。<br />
            2.使用log4j，需要整个系统有一个统一的log机制，有利于系统的规划。</span></p>
            <p style="margin: 0in 0in 0pt"></p>
            </span>
            <p style="margin: 0in 0in 0pt"><span style="font-size: 9pt; color: black">当你在开发程序的时候</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">调试</span><span style="font-size: 9pt; color: black">(debugging)</span><span style="font-size: 9pt; color: black">和日志</span><span style="font-size: 9pt; color: black">(logging)</span><span style="font-size: 9pt; color: black">都是非常重要的工作</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">但是</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">现在有太多的</span><span style="font-size: 9pt; color: black"> logging API </span><span style="font-size: 9pt; color: black">问世</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">因为他们都不错</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">很难做一个抉择</span><span style="font-size: 9pt; color: black">. </span><span style="font-size: 9pt; color: black">国外</span><span style="font-size: 9pt; color: black"> java </span><span style="font-size: 9pt; color: black">论坛对于这些</span><span style="font-size: 9pt; color: black"> logging </span><span style="font-size: 9pt; color: black">方式也是有一番讨论</span><span style="font-size: 9pt; color: black">.<br />
            <br />
            </span><span style="font-size: 9pt; color: black">而</span><span style="font-size: 9pt; color: black"> common logging </span><span style="font-size: 9pt; color: black">就是一个在这几个不同的</span><span style="font-size: 9pt; color: black"> logging API </span><span style="font-size: 9pt; color: black">中建立小小的桥梁</span><span style="font-size: 9pt; color: black">.</span><span style="font-size: 9pt; color: black">目前在</span><span style="font-size: 9pt; color: black"> Java </span><span style="font-size: 9pt; color: black">中最有名的</span><span style="font-size: 9pt; color: black"> Log </span><span style="font-size: 9pt; color: black">方式</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">首推是</span><span style="font-size: 9pt; color: black"> Log4j, </span><span style="font-size: 9pt; color: black">另是</span><span style="font-size: 9pt; color: black"> JDK 1.4 Logging API. </span><span style="font-size: 9pt; color: black">除此之外</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">还有</span><span style="font-size: 9pt; color: black"> Avalon </span><span style="font-size: 9pt; color: black">中用的</span><span style="font-size: 9pt; color: black"> </span><span style="font-size: 9pt; color: black">LogKit </span><span style="font-size: 9pt; color: black">等等</span><span style="font-size: 9pt; color: black"> . </span><span style="font-size: 9pt; color: black">而</span><span style="font-size: 9pt; color: black"> commons-logging </span><span style="font-size: 9pt; color: black">也有实现一些基本</span><span style="font-size: 9pt; color: black"> </span><span style="font-size: 9pt; color: black">的</span><span style="font-size: 9pt; color: black"> logging </span><span style="font-size: 9pt; color: black">方式为</span><span style="font-size: 9pt; color: black"> NoOpLog </span><span style="font-size: 9pt; color: black">及</span><span style="font-size: 9pt; color: black"> SimpleLog. </span><span style="font-size: 9pt; color: black">对于他们的比较不在这次讨论范围</span><span style="font-size: 9pt; color: black">,<br />
            <br />
            </span><span style="font-size: 9pt; color: black">有兴趣者请自行参阅参考文件</span><span style="font-size: 9pt; color: black">.<br />
            <br />
            </span><span style="font-size: 9pt; color: black">快速使用</span><span style="font-size: 9pt; color: black"> Logging </span><span style="font-size: 9pt; color: black">其实</span><span style="font-size: 9pt; color: black"> logging </span><span style="font-size: 9pt; color: black">非常简单去使用</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">将</span><span style="font-size: 9pt; color: black"> commons-logging.jar </span><span style="font-size: 9pt; color: black">放到</span><span style="font-size: 9pt; color: black"> /WEB-INF/lib </span><span style="font-size: 9pt; color: black">之下</span><span style="font-size: 9pt; color: black">.</span><span style="font-size: 9pt; color: black">接著写以下的代码</span><span style="font-size: 9pt; color: black"><br />
            <br />
            LoggingTest.java<br />
            <br />
            package com.softleader.newspaper.java.opensource;<br />
            <br />
            import org.apache.commons.logging.Log;<br />
            import org.apache.commons.logging.LogFactory;<br />
            <br />
            public class LoggingTest {<br />
            <br />
            Log log = LogFactory.getLog(LoggingTest.class);<br />
            <br />
            public void hello() {<br />
            log.error("ERROR");<br />
            log.debug("DEBUG");<br />
            log.warn("WARN");<br />
            log.info("INFO");<br />
            log.trace("TRACE");<br />
            System.out.println("OKOK");<br />
            }<br />
            <br />
            }<br />
            <br />
            </span><span style="font-size: 9pt; color: black">在</span><span style="font-size: 9pt; color: black"> / </span><span style="font-size: 9pt; color: black">放置一个</span><span style="font-size: 9pt; color: black"> jsp </span><span style="font-size: 9pt; color: black">测试</span><span style="font-size: 9pt; color: black"> test-commons-logging.jsp<br />
            <br />
            &lt;%@ page import="com.softleader.newspaper.java.opensource.LoggingTest" %&gt;<br />
            &lt;% LoggingTest test = new LoggingTest(); test.hello();%&gt;<br />
            <br />
            </span><span style="font-size: 9pt; color: black">你将会看到</span><span style="font-size: 9pt; color: black"> tomcat console </span><span style="font-size: 9pt; color: black">会有下面输出</span><span style="font-size: 9pt; color: black"><br />
            <br />
            log4j:WARN No appenders could be found for logger (com.softleader.newspaper.java.opensource.LoggingTest).<br />
            log4j:WARN Please initialize the log4j system properly.OKOK<br />
            <br />
            </span><span style="font-size: 9pt; color: black">是因为你还没有配置</span><span style="font-size: 9pt; color: black"> commons-logging.properties, </span><span style="font-size: 9pt; color: black">马上会为你介绍</span><span style="font-size: 9pt; color: black"> ~~~.<br />
            <br />
            </span><span style="font-size: 9pt; color: black">设定</span><span style="font-size: 9pt; color: black"> commons-logging.properties </span><span style="font-size: 9pt; color: black">你可以设置你的</span><span style="font-size: 9pt; color: black"> log factory </span><span style="font-size: 9pt; color: black">是要使用哪一个</span><span style="font-size: 9pt; color: black"> </span><span style="font-size: 9pt; color: black">我以</span><span style="font-size: 9pt; color: black"> Log4J </span><span style="font-size: 9pt; color: black">为例子</span><span style="font-size: 9pt; color: black"> </span><span style="font-size: 9pt; color: black">在</span><span style="font-size: 9pt; color: black"> /WEB-INF/classes/commons-logging.properties </span><span style="font-size: 9pt; color: black">中写入</span><span style="font-size: 9pt; color: black"><br />
            org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog<br />
            </span><span style="font-size: 9pt; color: black">如果你</span><span style="font-size: 9pt; color: black"> server </span><span style="font-size: 9pt; color: black">是使用</span><span style="font-size: 9pt; color: black"> jdk1.4 </span><span style="font-size: 9pt; color: black">以上的版本</span><span style="font-size: 9pt; color: black"><br />
            </span><span style="font-size: 9pt; color: black">可以使用</span><span style="font-size: 9pt; color: black"> org.apache.commons.logging.impl.Jdk14Logger<br />
            </span><span style="font-size: 9pt; color: black">接著根据你的</span><span style="font-size: 9pt; color: black"> Logger </span><span style="font-size: 9pt; color: black">撰写符合他的</span><span style="font-size: 9pt; color: black"> properties </span><span style="font-size: 9pt; color: black">拿</span><span style="font-size: 9pt; color: black"> Log4j </span><span style="font-size: 9pt; color: black">为例子</span><span style="font-size: 9pt; color: black"> </span><span style="font-size: 9pt; color: black">你就要在</span><span style="font-size: 9pt; color: black"><br />
            /WEB-INF/classes/ </span><span style="font-size: 9pt; color: black">下放置一个</span><span style="font-size: 9pt; color: black"><br />
            <br />
            //</span><span style="font-size: 9pt; color: black">日志输出到文件</span><span style="font-size: 9pt; color: black"><br />
            log4j.rootLogger=DEBUG, A_default<br />
            log4j.appender.A_default=org.apache.log4j.RollingFileAppender<br />
            log4j.appender.A_default.File=c://log/test.log<br />
            log4j.appender.A_default.MaxFileSize=4000KB<br />
            log4j.appender.A_default.MaxBackupIndex=10<br />
            log4j.appender.A_default.layout=org.apache.log4j.PatternLayout<br />
            log4j.appender.A_default.layout.ConversionPattern=%d{ISO8601} - %p - %m%n<br />
            <br />
            //</span><span style="font-size: 9pt; color: black">日志输出到控制台</span><span style="font-size: 9pt; color: black"><br />
            log4j.rootLogger=INFO, A1<br />
            log4j.appender.A1=org.apache.log4j.ConsoleAppender<br />
            log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br />
            log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n<br />
            <br />
            //</span><span style="font-size: 9pt; color: black">发送邮件</span><span style="font-size: 9pt; color: black"><br />
            # Configuration for receiving e-mails when ERROR messages occur.<br />
            <br />
            #</span><span style="font-size: 9pt; color: black">自定义的</span><span style="font-size: 9pt; color: black">Appender<br />
            log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender<br />
            #</span><span style="font-size: 9pt; color: black">日志的错误级别</span><span style="font-size: 9pt; color: black"><br />
            log4j.appender.MAIL.Threshold=ERROR<br />
            #</span><span style="font-size: 9pt; color: black">缓存文件大小，日志达到</span><span style="font-size: 9pt; color: black">512K</span><span style="font-size: 9pt; color: black">时发送</span><span style="font-size: 9pt; color: black">Email<br />
            log4j.appender.MAIL.BufferSize=512<br />
            #</span><span style="font-size: 9pt; color: black">发件人</span><span style="font-size: 9pt; color: black"><br />
            log4j.appender.MAIL.From=webmaster@bcxy.com<br />
            #</span><span style="font-size: 9pt; color: black">发送邮件的服务器</span><span style="font-size: 9pt; color: black"><br />
            log4j.appender.MAIL.SMTPHost=smtp.163.com<br />
            #</span><span style="font-size: 9pt; color: black">邮件的标题</span><span style="font-size: 9pt; color: black"><br />
            log4j.appender.MAIL.Subject=Log4J Message<br />
            #</span><span style="font-size: 9pt; color: black">日志邮件的接收者</span><span style="font-size: 9pt; color: black"><br />
            log4j.appender.MAIL.To=ezerg@126.com<br />
            #</span><span style="font-size: 9pt; color: black">日志</span><span style="font-size: 9pt; color: black">PatternLayout<br />
            log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout<br />
            #</span><span style="font-size: 9pt; color: black">日志的格式</span><span style="font-size: 9pt; color: black"><br />
            log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />
            <br />
            <br />
            </span><span style="font-size: 9pt; color: black">此时你去执行</span><span style="font-size: 9pt; color: black"> test-commons-logging.jsp </span><span style="font-size: 9pt; color: black">输出的内容</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">就会记录在你的</span><span style="font-size: 9pt; color: black"> c:\log </span><span style="font-size: 9pt; color: black">目录的</span><span style="font-size: 9pt; color: black"> test.log </span><span style="font-size: 9pt; color: black">中了</span><span style="font-size: 9pt; color: black"> ps:</span><span style="font-size: 9pt; color: black">如果没有相关的</span><span style="font-size: 9pt; color: black"> class </span><span style="font-size: 9pt; color: black">会使用到</span><span style="font-size: 9pt; color: black"> SimpLog, </span><span style="font-size: 9pt; color: black">此时要设定的是</span><span style="font-size: 9pt; color: black"><br />
            simplelog.properties </span><span style="font-size: 9pt; color: black">结论以我自己本身使用的经验</span><span style="font-size: 9pt; color: black">, Log4j </span><span style="font-size: 9pt; color: black">可以满足所有工程师</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">所以我也是直接使用</span><span style="font-size: 9pt; color: black"> log4j </span><span style="font-size: 9pt; color: black">而没有使用</span><span style="font-size: 9pt; color: black"> commons-logging.<br />
            <br />
            </span><span style="font-size: 9pt; color: black">不过为了增加产品的通用性</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">避免移植时候的麻烦</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">新的产品及项目</span><span style="font-size: 9pt; color: black">, </span><span style="font-size: 9pt; color: black">我会将他改成</span><span style="font-size: 9pt; color: black"> commons-logging api </span><span style="font-size: 9pt; color: black">去调用</span><span style="font-size: 9pt; color: black">.<br />
            <br />
            </span><span style="font-size: 9pt; color: black">如果你对</span><span style="font-size: 9pt; color: black">commons-logging</span><span style="font-size: 9pt; color: black">的工作原理不是很了解，请参考＜</span><span style="font-size: 9pt; color: black">commons-logging</span><span style="font-size: 9pt; color: black">的使用方法＞</span></p>
            <p style="margin: 0in 0in 0pt"><span style="font-size: 9pt; color: black">另，</span><span style="font-size: 9pt; color: black">mvnforum</span><span style="font-size: 9pt; color: black">里面的</span><span style="font-size: 9pt; color: black">commons-logging.properties</span><span style="font-size: 9pt; color: black">写法：</span><span style="font-size: 9pt; color: black"><br />
            # This is configuration file which used to config Logging for mvnForum application<br />
            # mvnForum supports 2 Loggings: Log4J and jzonic<br />
            # Depend on your web server, you should choose a logging properly<br />
            <br />
            <br />
            # IMPORTANT NOTE FOR TOMCAT 5.x USERS:<br />
            #<br />
            # By default, Tomcat 5.x will not work with Log4J. <br />
            # However, this file (commons-logging.properties) with a line<br />
            # config : org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory<br />
            # make Tomcat 5.x and Log4J work happyly together forever, I dont know why :-)<br />
            <br />
            <br />
            <br />
            # Log4J<br />
            # This used to config logging Log4J<br />
            # Note that by default, common logging will look for Log4J first<br />
            # Comment out folling line to if you will use Jlo logging (also remember to enable Jlo below)<br />
            <br />
            org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory<br />
            <br />
            # Jlo <br />
            # jlo.xml config logging which only log the statements (DEBUG, ERROR, TRACE, INFO, WARN) <br />
            # from the packages start with net.myvietnam and com.mvnforum. <br />
            # See properities/jlo.xml for detail about this logging<br />
            # See <a href="http://jzonic.org/" target="_blank"><font color="#333333">http://jzonic.org</font></a> for documentation<br />
            # If you want to extend mvnForum application, you should be aware of that<br />
            <br />
            # Uncomment folling line to choose jlo logging <br />
            # You will need Jlo if Log4j could not run on Tomcat 5.0.x, Tomcat 5.5.x or JRun 4<br />
            # NOTE: read comment above about Tomcat 5.x issue<br />
            <br />
            # org.apache.commons.logging.LogFactory=org.jzonic.jlo.LogManager</span></p>
            <p style="margin: 0in 0in 0pt"></p>
            <p style="margin: 0in 0in 0pt"><span style="font-size: 9pt; color: black">====================================================================</span></p>
            <p style="margin: 0in 0in 0pt"><span style="font-size: 9pt">LOG4J的配置之简单使它遍及于越来越多的应用中了：Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了， <br />
            <br />
            <br />
            <br />
            log4j.rootLogger=DEBUG,CONSOLE,A1,im <br />
            log4j.addivity.org.apache=true <br />
            <br />
            <br />
            <br />
            # 应用于控制台 <br />
            <br />
            log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender <br />
            log4j.appender.Threshold=DEBUG <br />
            log4j.appender.CONSOLE.Target=System.out <br />
            log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout <br />
            log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />
            #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n <br />
            <br />
            <br />
            #应用于文件 <br />
            <br />
            log4j.appender.FILE=org.apache.log4j.FileAppender <br />
            log4j.appender.FILE.File=file.log <br />
            log4j.appender.FILE.Append=false <br />
            log4j.appender.FILE.layout=org.apache.log4j.PatternLayout <br />
            log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />
            # Use this layout for LogFactor 5 analysis <br />
            <br />
            <br />
            <br />
            # 应用于文件回滚 <br />
            <br />
            log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender <br />
            log4j.appender.ROLLING_FILE.Threshold=ERROR <br />
            log4j.appender.ROLLING_FILE.File=rolling.log <br />
            log4j.appender.ROLLING_FILE.Append=true <br />
            log4j.appender.ROLLING_FILE.MaxFileSize=10KB <br />
            log4j.appender.ROLLING_FILE.MaxBackupIndex=1 <br />
            log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout <br />
            log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />
            <br />
            <br />
            #应用于socket <br />
            log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender <br />
            log4j.appender.SOCKET.RemoteHost=localhost <br />
            log4j.appender.SOCKET.Port=5001 <br />
            log4j.appender.SOCKET.LocationInfo=true <br />
            # Set up for Log Facter 5 <br />
            log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout <br />
            log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n <br />
            <br />
            <br />
            # Log Factor 5 Appender <br />
            log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender <br />
            log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000 <br />
            <br />
            <br />
            <br />
            # 发送日志给邮件 <br />
            <br />
            log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender <br />
            log4j.appender.MAIL.Threshold=FATAL <br />
            log4j.appender.MAIL.BufferSize=10 <br />
            log4j.appender.MAIL.From=web@<a href="http://www.wuset.com/" target="_blank">www.wuset.com</a> <br />
            log4j.appender.MAIL.SMTPHost=www.wusetu.com <br />
            log4j.appender.MAIL.Subject=Log4J Message <br />
            log4j.appender.MAIL.To=web@<a href="http://www.wusetu.com/" target="_blank">www.wusetu.com</a> <br />
            log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout <br />
            log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />
            <br />
            <br />
            <br />
            # 用于数据库 <br />
            log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender <br />
            log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test <br />
            log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver <br />
            log4j.appender.DATABASE.user=root <br />
            log4j.appender.DATABASE.password= <br />
            log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') <br />
            log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout <br />
            log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />
            <br />
            <br />
            log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender <br />
            log4j.appender.A1.File=SampleMessages.log4j <br />
            log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' <br />
            log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout <br />
            <br />
            #自定义Appender <br />
            <br />
            log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender <br />
            <br />
            log4j.appender.im.host = mail.cybercorlin.net <br />
            log4j.appender.im.username = username <br />
            log4j.appender.im.password = password <br />
            log4j.appender.im.recipient = <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#111;&#114;&#108;&#105;&#110;&#64;&#99;&#121;&#98;&#101;&#114;&#99;&#111;&#114;&#108;&#105;&#110;&#46;&#110;&#101;&#116;">corlin@cybercorlin.net</a> <br />
            <br />
            log4j.appender.im.layout=org.apache.log4j.PatternLayout <br />
            log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<br />
<img src ="http://www.blogjava.net/i369/aggbug/185309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2008-03-11 11:48 <a href="http://www.blogjava.net/i369/articles/185309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取Java文件路径</title><link>http://www.blogjava.net/i369/articles/182041.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Mon, 25 Feb 2008 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/182041.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/182041.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/182041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/182041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/182041.html</trackback:ping><description><![CDATA[<p>1.如何获得当前文件路径</p>
<p>常用：</p>
<p>字符串类型：System.getProperty("user.dir");</p>
<p>综合：</p>
<p>package com.zcjl.test.base;<br />
import java.io.File;<br />
public class Test {<br />
public static void main(String[] args) throws Exception {<br />
System.out.println(<br />
Thread.currentThread().getContextClassLoader().getResource(""));<br />
System.out.println(Test.class.getClassLoader().getResource(""));<br />
System.out.println(ClassLoader.getSystemResource(""));<br />
System.out.println(Test.class.getResource(""));<br />
System.out.println(Test.class.getResource("/"));<br />
System.out.println(new File("").getAbsolutePath());<br />
System.out.println(System.getProperty("user.dir"));<br />
}<br />
}</p>
<p>2.Web服务中</p>
<p>(1).Weblogic</p>
<p>WebApplication的系统文件根目录是你的weblogic安装所在根目录。<br />
例如：如果你的weblogic安装在c:\bea\weblogic700.....<br />
那么，你的文件根路径就是c:\.<br />
所以，有两种方式能够让你访问你的服务器端的文件：<br />
a.使用绝对路径：<br />
比如将你的参数文件放在c:\yourconfig\yourconf.properties，<br />
直接使用 new FileInputStream("yourconfig/yourconf.properties");<br />
b.使用相对路径：<br />
相对路径的根目录就是你的webapplication的根路径，即WEB-INF的上一级目录，将你的参数文件放在yourwebapp\yourconfig\yourconf.properties，<br />
这样使用：<br />
new FileInputStream("./yourconfig/yourconf.properties");<br />
这两种方式均可，自己选择。</p>
<p>(2).Tomcat</p>
<p>在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin</p>
<p>(3).Resin</p>
<p>不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET<br />
的路径为根.比如用新建文件法测试File f = new File("a.htm");<br />
这个a.htm在resin的安装目录下 </p>
<p>(4).如何读相对路径哪？</p>
<p>在Java文件中getResource或getResourceAsStream均可</p>
<p>例：getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web发布根路径下WEB-INF/classes</p>
<p>(5).获得文件真实路径</p>
<p>string file_real_path=request.getRealPath("mypath/filename"); </p>
<p>通常使用request.getRealPath("/"); </p>
<p>3.文件操作的类</p>
<p>import java.io.*;<br />
import java.net.*;<br />
import java.util.*;<br />
//import javax.swing.filechooser.*;<br />
//import org.jr.swing.filter.*;</p>
<p>/**<br />
* 此类中封装一些常用的文件操作。<br />
* 所有方法都是静态方法，不需要生成此类的实例，<br />
* 为避免生成此类的实例，构造方法被申明为private类型的。<br />
* @since 0.1<br />
*/</p>
<p>public class FileUtil {<br />
/**<br />
* 私有构造方法，防止类的实例化，因为工具类不需要实例化。<br />
*/<br />
private FileUtil() {</p>
<p>}</p>
<p>/**<br />
* 修改文件的最后访问时间。<br />
* 如果文件不存在则创建该文件。<br />
* &lt;b&gt;目前这个方法的行为方式还不稳定，主要是方法有些信息输出，这些信息输出是否保留还在考</p>
<p>虑中。&lt;/b&gt;<br />
* @param file 需要修改最后访问时间的文件。<br />
* @since 0.1<br />
*/<br />
public static void touch(File file) {<br />
long currentTime = System.currentTimeMillis();<br />
if (!file.exists()) {<br />
System.err.println("file not found:" file.getName());<br />
System.err.println("Create a new file:" file.getName());<br />
try {<br />
if (file.createNewFile()) {<br />
// System.out.println("Succeeded!");<br />
}<br />
else {<br />
// System.err.println("Create file failed!");<br />
}<br />
}<br />
catch (IOException e) {<br />
// System.err.println("Create file failed!");<br />
e.printStackTrace();<br />
}<br />
}<br />
boolean result = file.setLastModified(currentTime);<br />
if (!result) {<br />
// System.err.println("touch failed: " file.getName());<br />
}<br />
}</p>
<p>/**<br />
* 修改文件的最后访问时间。<br />
* 如果文件不存在则创建该文件。<br />
* &lt;b&gt;目前这个方法的行为方式还不稳定，主要是方法有些信息输出，这些信息输出是否保留还在考</p>
<p>虑中。&lt;/b&gt;<br />
* @param fileName 需要修改最后访问时间的文件的文件名。<br />
* @since 0.1<br />
*/<br />
public static void touch(String fileName) {<br />
File file = new File(fileName);<br />
touch(file);<br />
}</p>
<p>/**<br />
* 修改文件的最后访问时间。<br />
* 如果文件不存在则创建该文件。<br />
* &lt;b&gt;目前这个方法的行为方式还不稳定，主要是方法有些信息输出，这些信息输出是否保留还在考</p>
<p>虑中。&lt;/b&gt;<br />
* @param files 需要修改最后访问时间的文件数组。<br />
* @since 0.1<br />
*/<br />
public static void touch(File[] files) {<br />
for (int i = 0; i &lt; files.length; i ) {<br />
touch(files);<br />
}<br />
}</p>
<p>/**<br />
* 修改文件的最后访问时间。<br />
* 如果文件不存在则创建该文件。<br />
* &lt;b&gt;目前这个方法的行为方式还不稳定，主要是方法有些信息输出，这些信息输出是否保留还在考</p>
<p>虑中。&lt;/b&gt;<br />
* @param fileNames 需要修改最后访问时间的文件名数组。<br />
* @since 0.1<br />
*/<br />
public static void touch(String[] fileNames) {<br />
File[] files = new File[fileNames.length];<br />
for (int i = 0; i &lt; fileNames.length; i ) {<br />
files = new File(fileNames);<br />
}<br />
touch(files);<br />
}</p>
<p>/**<br />
* 判断指定的文件是否存在。<br />
* @param fileName 要判断的文件的文件名<br />
* @return 存在时返回true，否则返回false。<br />
* @since 0.1<br />
*/<br />
public static boolean isFileExist(String fileName) {<br />
return new File(fileName).isFile();<br />
}</p>
<p>/**<br />
* 创建指定的目录。<br />
* 如果指定的目录的父目录不存在则创建其目录书上所有需要的父目录。<br />
* &lt;b&gt;注意：可能会在返回false的时候创建部分父目录。&lt;/b&gt;<br />
* @param file 要创建的目录<br />
* @return 完全创建成功时返回true，否则返回false。<br />
* @since 0.1<br />
*/<br />
public static boolean makeDirectory(File file) {<br />
File parent = file.getParentFile();<br />
if (parent != null) {<br />
return parent.mkdirs();<br />
}<br />
return false;<br />
}</p>
<p>/**<br />
* 创建指定的目录。<br />
* 如果指定的目录的父目录不存在则创建其目录书上所有需要的父目录。<br />
* &lt;b&gt;注意：可能会在返回false的时候创建部分父目录。&lt;/b&gt;<br />
* @param fileName 要创建的目录的目录名<br />
* @return 完全创建成功时返回true，否则返回false。<br />
* @since 0.1<br />
*/<br />
public static boolean makeDirectory(String fileName) {<br />
File file = new File(fileName);<br />
return makeDirectory(file);<br />
}</p>
<p>/**<br />
* 清空指定目录中的文件。<br />
* 这个方法将尽可能删除所有的文件，但是只要有一个文件没有被删除都会返回false。<br />
* 另外这个方法不会迭代删除，即不会删除子目录及其内容。<br />
* @param directory 要清空的目录<br />
* @return 目录下的所有文件都被成功删除时返回true，否则返回false.<br />
* @since 0.1<br />
*/<br />
public static boolean emptyDirectory(File directory) {<br />
boolean result = false;<br />
File[] entries = directory.listFiles();<br />
for (int i = 0; i &lt; entries.length; i ) {<br />
if (!entries.delete()) {<br />
result = false;<br />
}<br />
}<br />
return true;<br />
}</p>
<p>/**<br />
* 清空指定目录中的文件。<br />
* 这个方法将尽可能删除所有的文件，但是只要有一个文件没有被删除都会返回false。<br />
* 另外这个方法不会迭代删除，即不会删除子目录及其内容。<br />
* @param directoryName 要清空的目录的目录名<br />
* @return 目录下的所有文件都被成功删除时返回true，否则返回false。<br />
* @since 0.1<br />
*/<br />
public static boolean emptyDirectory(String directoryName) {<br />
File dir = new File(directoryName);<br />
return emptyDirectory(dir);<br />
}</p>
<p>/**<br />
* 删除指定目录及其中的所有内容。<br />
* @param dirName 要删除的目录的目录名<br />
* @return 删除成功时返回true，否则返回false。<br />
* @since 0.1<br />
*/<br />
public static boolean deleteDirectory(String dirName) {<br />
return deleteDirectory(new File(dirName));<br />
}</p>
<p>/**<br />
* 删除指定目录及其中的所有内容。<br />
* @param dir 要删除的目录<br />
* @return 删除成功时返回true，否则返回false。<br />
* @since 0.1<br />
*/<br />
public static boolean deleteDirectory(File dir) {<br />
if ( (dir == null) || !dir.isDirectory()) {<br />
throw new IllegalArgumentException("Argument " dir <br />
" is not a directory. ");<br />
}</p>
<p>File[] entries = dir.listFiles();<br />
int sz = entries.length;</p>
<p>for (int i = 0; i &lt; sz; i ) {<br />
if (entries.isDirectory()) {<br />
if (!deleteDirectory(entries)) {<br />
return false;<br />
}<br />
}<br />
else {<br />
if (!entries.delete()) {<br />
return false;<br />
}<br />
}<br />
}</p>
<p>if (!dir.delete()) {<br />
return false;<br />
}<br />
return true;<br />
}</p>
<p><br />
/**<br />
* 返回文件的URL地址。<br />
* @param file 文件<br />
* @return 文件对应的的URL地址<br />
* @throws MalformedURLException<br />
* @since 0.4<br />
* @deprecated 在实现的时候没有注意到File类本身带一个toURL方法将文件路径转换为URL。<br />
* 请使用File.toURL方法。<br />
*/<br />
public static URL getURL(File file) throws MalformedURLException {<br />
String fileURL = "file:/" file.getAbsolutePath();<br />
URL url = new URL(fileURL);<br />
return url;<br />
}</p>
<p>/**<br />
* 从文件路径得到文件名。<br />
* @param filePath 文件的路径，可以是相对路径也可以是绝对路径<br />
* @return 对应的文件名<br />
* @since 0.4<br />
*/<br />
public static String getFileName(String filePath) {<br />
File file = new File(filePath);<br />
return file.getName();<br />
}</p>
<p>/**<br />
* 从文件名得到文件绝对路径。<br />
* @param fileName 文件名<br />
* @return 对应的文件路径<br />
* @since 0.4<br />
*/<br />
public static String getFilePath(String fileName) {<br />
File file = new File(fileName);<br />
return file.getAbsolutePath();<br />
}</p>
<p>/**<br />
* 将DOS/Windows格式的路径转换为UNIX/Linux格式的路径。<br />
* 其实就是将路径中的"\"全部换为"/"，因为在某些情况下我们转换为这种方式比较方便，<br />
* 某中程度上说"/"比"\"更适合作为路径分隔符，而且DOS/Windows也将它当作路径分隔符。<br />
* @param filePath 转换前的路径<br />
* @return 转换后的路径<br />
* @since 0.4<br />
*/<br />
public static String toUNIXpath(String filePath) {<br />
return filePath.replace('\\', '/');<br />
}</p>
<p>/**<br />
* 从文件名得到UNIX风格的文件绝对路径。<br />
* @param fileName 文件名<br />
* @return 对应的UNIX风格的文件路径<br />
* @since 0.4<br />
* @see #toUNIXpath(String filePath) toUNIXpath<br />
*/<br />
public static String getUNIXfilePath(String fileName) {<br />
File file = new File(fileName);<br />
return toUNIXpath(file.getAbsolutePath());<br />
}</p>
<p>/**<br />
* 得到文件的类型。<br />
* 实际上就是得到文件名中最后一个&#8220;.&#8221;后面的部分。<br />
* @param fileName 文件名<br />
* @return 文件名中的类型部分<br />
* @since 0.5<br />
*/<br />
public static String getTypePart(String fileName) {<br />
int point = fileName.lastIndexOf('.');<br />
int length = fileName.length();<br />
if (point == -1 || point == length - 1) {<br />
return "";<br />
}<br />
else {<br />
return fileName.substring(point 1, length);<br />
}<br />
}</p>
<p>/**<br />
* 得到文件的类型。<br />
* 实际上就是得到文件名中最后一个&#8220;.&#8221;后面的部分。<br />
* @param file 文件<br />
* @return 文件名中的类型部分<br />
* @since 0.5<br />
*/<br />
public static String getFileType(File file) {<br />
return getTypePart(file.getName());<br />
}</p>
<p>/**<br />
* 得到文件的名字部分。<br />
* 实际上就是路径中的最后一个路径分隔符后的部分。<br />
* @param fileName 文件名<br />
* @return 文件名中的名字部分<br />
* @since 0.5<br />
*/<br />
public static String getNamePart(String fileName) {<br />
int point = getPathLsatIndex(fileName);<br />
int length = fileName.length();<br />
if (point == -1) {<br />
return fileName;<br />
}<br />
else if (point == length - 1) {<br />
int secondPoint = getPathLsatIndex(fileName, point - 1);<br />
if (secondPoint == -1) {<br />
if (length == 1) {<br />
return fileName;<br />
}<br />
else {<br />
return fileName.substring(0, point);<br />
}<br />
}<br />
else {<br />
return fileName.substring(secondPoint 1, point);<br />
}<br />
}<br />
else {<br />
return fileName.substring(point 1);<br />
}<br />
}</p>
<p>/**<br />
* 得到文件名中的父路径部分。<br />
* 对两种路径分隔符都有效。<br />
* 不存在时返回""。<br />
* 如果文件名是以路径分隔符结尾的则不考虑该分隔符，例如"/path/"返回""。<br />
* @param fileName 文件名<br />
* @return 父路径，不存在或者已经是父目录时返回""<br />
* @since 0.5<br />
*/<br />
public static String getPathPart(String fileName) {<br />
int point = getPathLsatIndex(fileName);<br />
int length = fileName.length();<br />
if (point == -1) {<br />
return "";<br />
}<br />
else if (point == length - 1) {<br />
int secondPoint = getPathLsatIndex(fileName, point - 1);<br />
if (secondPoint == -1) {<br />
return "";<br />
}<br />
else {<br />
return fileName.substring(0, secondPoint);<br />
}<br />
}<br />
else {<br />
return fileName.substring(0, point);<br />
}<br />
}</p>
<p>/**<br />
* 得到路径分隔符在文件路径中首次出现的位置。<br />
* 对于DOS或者UNIX风格的分隔符都可以。<br />
* @param fileName 文件路径<br />
* @return 路径分隔符在路径中首次出现的位置，没有出现时返回-1。<br />
* @since 0.5<br />
*/<br />
public static int getPathIndex(String fileName) {<br />
int point = fileName.indexOf('/');<br />
if (point == -1) {<br />
point = fileName.indexOf('\\');<br />
}<br />
return point;<br />
}</p>
<p>/**<br />
* 得到路径分隔符在文件路径中指定位置后首次出现的位置。<br />
* 对于DOS或者UNIX风格的分隔符都可以。<br />
* @param fileName 文件路径<br />
* @param fromIndex 开始查找的位置<br />
* @return 路径分隔符在路径中指定位置后首次出现的位置，没有出现时返回-1。<br />
* @since 0.5<br />
*/<br />
public static int getPathIndex(String fileName, int fromIndex) {<br />
int point = fileName.indexOf('/', fromIndex);<br />
if (point == -1) {<br />
point = fileName.indexOf('\\', fromIndex);<br />
}<br />
return point;<br />
}</p>
<p>/**<br />
* 得到路径分隔符在文件路径中最后出现的位置。<br />
* 对于DOS或者UNIX风格的分隔符都可以。<br />
* @param fileName 文件路径<br />
* @return 路径分隔符在路径中最后出现的位置，没有出现时返回-1。<br />
* @since 0.5<br />
*/<br />
public static int getPathLsatIndex(String fileName) {<br />
int point = fileName.lastIndexOf('/');<br />
if (point == -1) {<br />
point = fileName.lastIndexOf('\\');<br />
}<br />
return point;<br />
}</p>
<p>/**<br />
* 得到路径分隔符在文件路径中指定位置前最后出现的位置。<br />
* 对于DOS或者UNIX风格的分隔符都可以。<br />
* @param fileName 文件路径<br />
* @param fromIndex 开始查找的位置<br />
* @return 路径分隔符在路径中指定位置前最后出现的位置，没有出现时返回-1。<br />
* @since 0.5<br />
*/<br />
public static int getPathLsatIndex(String fileName, int fromIndex) {<br />
int point = fileName.lastIndexOf('/', fromIndex);<br />
if (point == -1) {<br />
point = fileName.lastIndexOf('\\', fromIndex);<br />
}<br />
return point;<br />
}</p>
<p>/**<br />
* 将文件名中的类型部分去掉。<br />
* @param filename 文件名<br />
* @return 去掉类型部分的结果<br />
* @since 0.5<br />
*/<br />
public static String trimType(String filename) {<br />
int index = filename.lastIndexOf(".");<br />
if (index != -1) {<br />
return filename.substring(0, index);<br />
}<br />
else {<br />
return filename;<br />
}<br />
}<br />
/**<br />
* 得到相对路径。<br />
* 文件名不是目录名的子节点时返回文件名。<br />
* @param pathName 目录名<br />
* @param fileName 文件名<br />
* @return 得到文件名相对于目录名的相对路径，目录下不存在该文件时返回文件名<br />
* @since 0.5<br />
*/<br />
public static String getSubpath(String pathName,String fileName) {<br />
int index = fileName.indexOf(pathName);<br />
if (index != -1) {<br />
return fileName.substring(index pathName.length() 1);<br />
}<br />
else {<br />
return fileName;<br />
}<br />
}</p>
<p>}<br />
4.遗留问题</p>
<p>目前new FileInputStream()只会使用绝对路径，相对没用过，因为要相对于web服务器地址，比较麻烦</p>
<p>还不如写个配置文件来的快哪</p>
<p>5.按Java文件类型分类读取配置文件</p>
<p>配 置文件是应用系统中不可缺少的，可以增加程序的灵活性。java.util.Properties是从jdk1.2就有的类，一直到现在都支持load ()方法，jdk1.4以后save(output,string) -&gt;store(output,string)。如果只是单纯的读，根本不存在烦恼的问题。web层可以通过 Thread.currentThread().getContextClassLoader().<br />
getResourceAsStream("xx.properties") 获取；Application可以通过new FileInputStream("xx.properties");直接在classes一级获取。关键是有时我们需要通过web修改配置文件，我们不 能将路径写死了。经过测试觉得有以下心得：</p>
<p>1.servlet中读写。如果运用Struts 或者Servlet可以直接在初始化参数中配置，调用时根据servlet的getRealPath("/")获取真实路径，再根据String file = this.servlet.getInitParameter("abc");获取相对的WEB-INF的相对路径。<br />
例：<br />
InputStream input = Thread.currentThread().getContextClassLoader().<br />
getResourceAsStream("abc.properties");<br />
Properties prop = new Properties();<br />
prop.load(input);<br />
input.close();<br />
OutputStream out = new FileOutputStream(path);<br />
prop.setProperty("abc", &#8220;test");<br />
prop.store(out, &#8220;&#8211;test&#8211;");<br />
out.close();</p>
<p>2.直接在jsp中操作，通过jsp内置对象获取可操作的绝对地址。<br />
例：<br />
// jsp页面<br />
String path = pageContext.getServletContext().getRealPath("/");<br />
String realPath = path "/WEB-INF/classes/abc.properties";</p>
<p>//java 程序<br />
InputStream in = getClass().getClassLoader().getResourceAsStream("abc.properties"); // abc.properties放在webroot/WEB-INF/classes/目录下<br />
prop.load(in);<br />
in.close();</p>
<p>OutputStream out = new FileOutputStream(path); // path为通过页面传入的路径<br />
prop.setProperty("abc", &#8220;abcccccc");<br />
prop.store(out, &#8220;&#8211;test&#8211;");<br />
out.close();</p>
<p>3.只通过Java程序操作资源文件<br />
InputStream in = new FileInputStream("abc.properties"); // 放在classes同级</p>
<p>OutputStream out = new FileOutputStream("abc.properties"); </p>
<p>&nbsp;</p>
<p>/**<br />
&nbsp;&nbsp;&nbsp; * 获取一个类的class文件所在的绝对路径。 这个类可以是JDK自身的类，也可以是用户自定义的类，或者是第三方开发包里的类。<br />
&nbsp;&nbsp;&nbsp; * 只要是在本程序中可以被加载的类，都可以定位到它的class文件的绝对路径。<br />
&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp; * @param cls<br />
&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个对象的Class属性<br />
&nbsp;&nbsp;&nbsp; * @return 这个类的class文件位置的绝对路径。 如果没有这个类的定义，则返回null。<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp; public String getPathFromClass(Class cls) throws IOException {<br />
&nbsp;&nbsp;&nbsp;&nbsp; String path = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (cls == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new NullPointerException();<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; URL url = getClassLocationURL(cls);<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (url != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = url.getPath();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ("jar".equalsIgnoreCase(url.getProtocol())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = new URL(path).getPath();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (MalformedURLException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int location = path.indexOf("!/");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (location != -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = path.substring(0, location);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File file = new File(path);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = file.getCanonicalPath();<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; return path;<br />
&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp; /**<br />
* 获取类的class文件位置的URL。这个方法是本类最基础的方法，供其它方法调用。<br />
*/<br />
private URL getClassLocationURL(final Class cls) {<br />
&nbsp;&nbsp; if (cls == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException("class that input is null");<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; URL result = null;<br />
&nbsp;&nbsp; final String clsAsResource = cls.getName().replace('.', '/').concat(".class");<br />
&nbsp;&nbsp; final ProtectionDomain pd = cls.getProtectionDomain();<br />
&nbsp;&nbsp; if (pd != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; final CodeSource cs = pd.getCodeSource();<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (cs != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = cs.getLocation();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (result != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ("file".equals(result.getProtocol())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (result.toExternalForm().endsWith(".jar")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || result.toExternalForm().endsWith(".zip")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = new URL("jar:".concat(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result.toExternalForm()).concat("!/")<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;&nbsp; .concat(clsAsResource));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (new File(result.getFile()).isDirectory()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = new URL(result, clsAsResource);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (MalformedURLException ignore) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp; if (result == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; final ClassLoader clsLoader = cls.getClassLoader();<br />
&nbsp;&nbsp;&nbsp;&nbsp; result = clsLoader != null ? clsLoader.getResource(clsAsResource)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : ClassLoader.getSystemResource(clsAsResource);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; return result;<br />
}</p>
<img src ="http://www.blogjava.net/i369/aggbug/182041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2008-02-25 16:56 <a href="http://www.blogjava.net/i369/articles/182041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java类序列化成xml 方法[转]</title><link>http://www.blogjava.net/i369/articles/176896.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Tue, 22 Jan 2008 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/176896.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/176896.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/176896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/176896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/176896.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天看了下JAVA序列化。还是一知半解。怎么也没有弄明白，怎么序列化成XML文件。处入半解状态。在网上找了很多，大部分是理论上的。没有实际的例子。功夫不负有心人，终于找到了。做了下测试终于成功。忍不住记录的下来。&nbsp;&nbsp;&nbsp; JXmlSerializable&nbsp;&nbsp; 是一个利用java反射，通过调用对象中所有以get（不区分大小写)开头的方法除去getC...&nbsp;&nbsp;<a href='http://www.blogjava.net/i369/articles/176896.html'>阅读全文</a><img src ="http://www.blogjava.net/i369/aggbug/176896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2008-01-22 09:01 <a href="http://www.blogjava.net/i369/articles/176896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从java jar文件包中读资源的常用方法</title><link>http://www.blogjava.net/i369/articles/168819.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 19 Dec 2007 10:08:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/168819.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/168819.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/168819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/168819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/168819.html</trackback:ping><description><![CDATA[可能有不少初学者会有这样的困惑（以前我也有过）：在你的代码里调用了一些资源文件，如图片，音乐等，在调试环境或单独运行的时候可以正常显示或播放，而一旦打包到jar文件中，这些东东就再也出不来了，除非把这个jar放到原来未打包以前的目录下，但通常jar是单独发布的。这里介绍一个解决这类问题的方法。<br />
getResource和getResourceAsStream<br />
&nbsp;&nbsp;&nbsp;&nbsp;问题的根源还是在于老生常谈的所谓class path，不信的话你在系统环境变量里的ClassPath加上你的jar文件，这下你就看得到你的图片了！但单独发布jar的话不可能指望每次都让用户为你的jar而专门修改classpath。那么有没有什么办法一劳永逸地搞定它呢？我们需要从类的装载入手。先扯远一点，在开发JSP之类的Web应用程序的时候要用到第三方的库怎么办？通常的做法是把这些库（可以是class，也可以是jar）统统放到WEB-INF/lib/目录下面，为什么这样系统就认了呢？因为Web容器（譬如Tomcat）在装载类的时候有自己的组织方式（可以参考Tomcat手册http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html）。特别地，jar也是类装载器的一个可访问媒介，ClassLoader提供了两个方法用于从装载的类路径中取得资源：<br />
public URL getResource(String name);<br />
public InputStream getResourceAsStream(String name);<br />
这里name是资源的类路径，它是相对与&#8220;/&#8221;根路径下的位置。getResource得到的是一个URL对象来定位资源，而getResourceAsStream取得该资源输入流的引用保证程序可以从正确的位置抽取数据。<br />
真正使用的不是ClassLoader的这两个方法，而是Class的getResource和getResourceAsStream方法，因为Class对象可以从你的类得到（如YourClass.class或YourClass.getClass()），而ClassLoader则需要再调用一次YourClass.getClassLoader()方法，但根据JDK文档的说法，Class对象的这两个方法其实是&#8220;委托&#8221;（delegate）给装载它的ClassLoader来做的，所以只需要使用Class对象的这两个方法就可以了。<br />
在参考资料中有一篇老外写的文章比较深入介绍了从jar中装载资源的方法。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;一个应用的例子<br />
<br />
以下是在我写的一个小工具MSNHistoryCombiner中用到的一段代码，可以从jar中装载图片和文本信息。譬如，你的jar中根目录下有个img目录，里面放有一些图片，如img1.jpg，你可以这样调用<br />
Utilities.getImageFromJar("/img/img1.jpg", YourClass.class);<br />
注意必须这里是&#8220;/img/img1.jpg&#8221;而非&#8220;img/img1.jpg&#8221;。从jar中读文本资源也是类似方法调用getTextFromJar。<br />
需要说明的是，这段代码也不是我原创的，是从一段别的代码中经过修改得到的，但原代码的来源忘记了，在这里向原作者表示感谢和歉意。<br />
<br />
import java.awt.Image;<br />
import java.awt.Toolkit;<br />
import java.io.*;<br />
<br />
public class ResourseReader {<br />
<br />
public ResourseReader() {<br />
}<br />
<br />
public static Image getImageFromJar(String s, Class class1) {<br />
Image image = null;<br />
InputStream inputstream = class1.getResourceAsStream(s);<br />
if(inputstream != null) {<br />
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();<br />
try {<br />
byte abyte0[] = new byte[1024];<br />
for(int i = 0; (i = inputstream.read(abyte0)) &gt;= 0;) {<br />
bytearrayoutputstream.write(abyte0, 0, i);<br />
}<br />
<br />
image = Toolkit.getDefaultToolkit().createImage(bytearrayoutputstream.toByteArray());<br />
}<br />
catch(IOException ioexception) {<br />
ioexception.printStackTrace();<br />
}<br />
}<br />
return image;<br />
}<br />
<br />
public static String getTextFromJar(String s, Class class1) {<br />
String s1 = "";<br />
InputStream inputstream = class1.getResourceAsStream(s);<br />
if(inputstream != null) {<br />
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(inputstream));<br />
String s2;<br />
try {<br />
while((s2 = bufferedreader.readLine()) != null) {<br />
s1 = s1 + s2 + "\n";<br />
}<br />
}<br />
catch(IOException ioexception) {<br />
ioexception.printStackTrace();<br />
}<br />
}<br />
return s1;<br />
}<br />
}<br />
<br />
<br />
从Jar中读取gif文件<br />
<br />
<br />
在Java的程序发布中，很多人会选择采用二进制的jar的格式进行发布，怎么样读取Jar里面的资源呢？<br />
主要是采用ClassLoader的下面几个方法来实现：<br />
public URL getResource(String name)；<br />
public InputStream getResourceAsStream(String name)<br />
<br />
public static InputStream getSystemResourceAsStream(String name)<br />
public static URL getSystemResource(String name)<br />
<br />
后两个方法可以看出是静态的方法，这几个方法都可以从Jar中读取图片资源，但是对与动画的gif文件，笔者在尝试过程中发现，存在一些差异。<br />
<br />
String gifName为Gif文件在Jar中的相对路径。<br />
(1)使用了两个静态方法<br />
BufferedImage image=ImageIO.read（ClassLoader.getSystemResourceAsStream(gifName));<br />
<br />
或者<br />
<br />
Image image=Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(gifName));<br />
<br />
这两种方式可以成功地读取gif文件，但是对于gif动画，显示出来地是静态的。<br />
<br />
(2)使用其他两个方法<br />
Image image=Toolkit.getDefaultToolkit().getImage(this.getClass.getClassLoader().getResource(gifName));<br />
<br />
再这种方式下动画可以正常显示了。
<img src ="http://www.blogjava.net/i369/aggbug/168819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-12-19 18:08 <a href="http://www.blogjava.net/i369/articles/168819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Ajax的应用程序架构汇总</title><link>http://www.blogjava.net/i369/articles/167182.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 12 Dec 2007 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/167182.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/167182.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/167182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/167182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/167182.html</trackback:ping><description><![CDATA[<p>浏览器端框架被划分成两大类：
<p>&#183;应用程序框架：提供浏览器的功能，但是常以包括窗口小部件抽象和另外的部件而出名，其功能主要围绕桌面GUI框架。
<p>&#183;基本结构框架：提供基本的管道和可移植的浏览器抽象，让<a href="http://www.cn-java.com/"><u><strong>开发</strong></u></a>者去创建内容。典型的功能：
<p>* 针对XMLHttpRequest的包装器以封装浏览器-服务器的交互。(所有的框架都提供这一功能)。
<p>* XML操作和查询。
<p>* 根据来自XMLHttpRequest的应答执行DOM操作。
<p>* 在一些情况中，与另外的浏览器端技术如Flash(和潜在的Java applets)集成在一起。
<p>而服务器端框架通常以下面两种方式工作(尽管它们在这里根据语言的不同进行了分类)：
<p>&#183;HTML/JS生成：服务器提供完整的HTML/Javascript代码生成和浏览器-服务器协调，结果是只有浏览器端编码可以被定制。
<p>&#183;远程调用：Javascript调用直接被路由到服务器端功能(例如Java方法)并返回到Javascript回叫处理器；或者Javascript调用服务器以提取信息，例如会话细节，数据库查询等。
<p>&#183;纯Javascript：应用程序框架
<p><strong>1.1 Bindows(自从2003年)</strong>
<p>网址是：<a href="http://www.bindows.net/">http://www.bindows.net</a>，Bindows是一个软件开发包(SDK)，它，通过强力联合DHTML，JavaScript，CSS和XML等技术，能生成高度交互的互联网应用程序-成为现代的桌面应用程序的强有力对手。Bindows应用程序不要求下载和也不需要在<a href="http://www.cn-java.com/"><u><strong>用户</strong></u></a>端安装-仅要求有一个浏览器(也不需要Java，Flash或者ActiveX)。Bindows有可能领导面向对象开发的<a href="http://www.cn-java.com/"><u><strong>AJAX</strong></u></a>应用程序的平台。<br />
&#183;它是商业化的，使用来自于MB的技术(总部位于GA USA，主要开发中心在瑞典，成立于2002年)。<br />
Bindows框架提供给你：
<p>&#183;基于类的面向对象的API
<p>&#183;一套完整的窗口系统，提供宽范围的窗口小部件支持，包括菜单、表单、格子、滑动条、量程，甚至更多
<p>&#183;用于开发zero-footprint <a href="http://www.cn-java.com/"><u><strong>SOA</strong></u></a>客户端应用程序的领先的工具箱
<p>&#183;本机的XML，SOAP和XML-RPC支持
<p>&#183;单用户到企业级的支持
<p>&#183;内建的对AJAX的支持<br />
Bindows开发环境：
<p>&#183;支持企业级规模的工程开发
<p>&#183;跨浏览器，跨平台支持
<p>&#183;服务器独立结构
<p>&#183;与新的和现有资源的互操作性
<p>&#183;一致性开发方法学<br />
<strong>1.2 BackBase(自从2003年)</strong>
<p>网址是：<a href="http://www.backbase.com/">http://www.backbase.com</a>，是一个全面的浏览器端框架，支持丰富的浏览器功能以及与.NET和Java的集成。
<p>&#183;商业化，来自于Backbase B.V(总部在Amsterdam，成立于2003年)。
<p><strong>1.3 DOJO(开发中;自从2004年9月)</strong>
<p>网址是：<a href="http://dojotoolkit.org/">http://dojotoolkit.org/</a>，提供全面窗口小组件和浏览器-服务器消息支持。
<p>&#183;为创建定制的Javascript窗口小组件提供框架支持。
<p>&#183;预置的窗口小组件库。
<p>&#183;浏览器-服务器消息支持-XMLHttpRequest和另外的机制。
<p>&#183;支持浏览器中的URL操纵功能。
<p>&#183;<a href="http://www.cn-java.com/"><u><strong>开源</strong></u></a>许可(学术自由许可2.1(<a href="http://opensource.org/licenses/afl-2.1.php">http://opensource.org/licenses/afl-2.1.php</a>))，由JotSpot(http://www.jot.com/)的Alex Russell(<a href="http://alex.dojotoolkit.org/">http://alex.dojotoolkit.org/</a>)所领导。
<p><strong>1.4 Open Rico(开发中;自从2005年5月;基于早期的私有框架)</strong>
<p>网址是：<a href="http://openrico.org/demos.page">http://openrico.org/demos.page</a>，是一多用途框架，支持Ajax基础结构和用户交互。
<p>&#183;一个XMLHttpRequest应答能被路由到一个或者更多回叫操作，DOM对象，或者Javascript对象。
<p>&#183;容易鼠标拖动支持。
<p>&#183;Ajax动画，例如缩放和变换。
<p>&#183;"行为"-实质上是窗口小组件库。
<p>&#183;使用指南(<a href="http://www.mirimar.net/mailbrowser/">http://www.mirimar.net/mailbrowser/</a>)，由RussMirimar的Yonah所提供
<p>&#183;开源。源于Sabre航空公司解决方案，由Bill Scott(http://looksgoodworkswell.blogspot.com)，Darren James及另外一些人所支持。
<p><strong>1.5 qooxdoo(开发中;自从2005年5月)</strong>
<p>网址是：<a href="http://qooxdoo.sourceforge.net/">http://qooxdoo.sourceforge.net/</a>，是另一个雄心勃勃的框架，提供宽范围的UI支持和正在开发中的<a href="http://www.cn-java.com/"><u><strong>基础</strong></u></a>结构特性。
<p>&#183;基础结构：
<p>* DOM和事件/焦点管理的可移植的抽象。
<p>* 调试支持。
<p>* 易于时间调度的Timer类。
<p>* Getter/Setter支持。
<p>&#183;UI：
<p>* 窗口小组件框架和预置的窗口小组件库。<br />
* 布局管理器。
<p>* 图像缓冲和可移植的PNG透明性。
<p>&#183;开源(LGPL)。来自多方面的贡献者。
<p><strong>1.6 Tibet(开发中;自从2005年6月)</strong>
<p>网址是：<a href="http://www.technicalpursuit.com/">http://www.technicalpursuit.com/</a>，目的是提供高度可移植的和全面的Javascript. API，结果是，可能自动生成大量的客户端代码。自称是"企业级Ajax"。
<p>&#183;远程脚本运行在XMLHttpRequest包装之上-通过协调调用结果支持工作流管理，例如应答可以发生在只有当两个分离的调用返回时。
<p>&#183;URI支持。
<p>&#183;所有的HTTP方法-不仅是"GET"和"POST"。
<p>&#183;低级的协议-File://和WebDav以及HTTP。
<p>&#183;Web服务调用-SOAP，XML-RPC，等等。
<p>&#183;预置的针对Google API，Amazon API等等服务的支持。
<p>&#183;由高级Javascript对象组成一个巨大的库。
<p>&#183;许多XML操作。
<p>&#183;<a href="http://www.cn-java.com/"><u><strong>IDE</strong></u></a>和开发工具。
<p>&#183;开源许可(显然经过OSI认证，但是细节不多)。
<p><strong>2 纯Javascript：基础结构框架</strong>
<p><strong>2.1 AjaxCaller(Alpha版本;自从5月2005年)</strong>
<p>网址是：<a href="http://ajaxify.com/run/testAjaxCaller/">http://ajaxify.com/run/testAjaxCaller/</a>，是一基本的<a href="http://www.cn-java.com/"><u><strong>线程</strong></u></a>安全的XMLHttpRequest包装器，主要针对Ajax新手，仍处于原始的alpha开发阶段，目前仅与AjaxPatterns的在线搜索范例一起打包。
<p>&#183;实现对服务器的调用(GET/POST/PUT/DELETE)，用路由到一个回叫操作的plain-text或者XML完成。
<p>&#183;使用过的XMLHttpRequest对象的析构。
<p>&#183;Response缓冲(计划的)。
<p>&#183;针对Ajax新手-并非强调性能优化，该库主要用于实现易读的基础代码并将提供调试支持。
<p>&#183;开源许可。由Michael Mahemoff(http://softwareas.com)(具有John Wehr和Richard Schwartz的一些思想)维护。
<p><strong>2.2 Flash JavaScript集成包</strong>
<p>网址是：<a href="http://www.osflash.org/doku.php?id=flashjs">http://www.osflash.org/doku.php?id=flashjs</a>，允许JavaScript和Flash内容的集成：
<p>&#183;使JavaScript能够调用ActionScript功能和反过来的实现。
<p>&#183;所有主要的数据类型能在这两种环境之间传递。
<p>&#183;开源许可。由多个开源Flash贡献者提供支持。
<p><strong>2.3 Google AJAXSLT(发行于2005年6月)</strong>
<p>网址是：<a href="http://goog-ajaxslt.sourceforge.net/">http://goog-ajaxslt.sourceforge.net/</a>，是一个Javascript框架，用来执行XSLT转换以及XPath查询。
<p>&#183;建立在Google地图工作基础之上。
<p>&#183;开源许可(BSD)。由一家创新搜索方案公司支持，自称为"Google"。
<p><strong>2.4 HTMLHttpRequest(Beta版；始于2005年)</strong>
<p>HtmlHttpRequest(<a href="http://www.twinhelix.com/javascript/htmlhttprequest/">http://www.twinhelix.com/javascript/htmlhttprequest/</a>)，它使用了XMLHttpRequest和Iframes以改进兼容性。
<p>&#183;测试过并能工作在:IE6/Win，IE5.5/Win，IE5/Win，IE4/Win，Mozilla/Win，Opera7/Win，Safari/Mac，IE5/Mac。
<p>&#183;未测试，可能能工作在：IE4/Mac，Mozilla/Mac，Opera/Other，Konqueror/Linux。你正在使用这些之一吗？作者正在请求兼容性信息。
<p>&#183;开源许可(LGPL)。由Twin Helix Designs(http://www.twinhelix.com/)的Angus Turnbull维护。
<p><strong>2.5 交互式网站框架(自从2005年5月)</strong>
<p>交互式网站框架(<a href="http://sourceforge.net/projects/iwf/">http://sourceforge.net/projects/iwf/</a>，是一个项目，目的是从浏览器端对Ajax基础结构的多方面予以支持。自描述为"使用javascript，css，xml，和html来创造高度交互网站的框架。包括一个定制的针对高度可读的javascript的xml分析器。实质上，是建立基于AJAX的网站的基础，还有另外一些通用脚本"。
<p>&#183;线程安全的XMLHttpRequest实现。
<p>&#183;针对XML文档的包装器，以便你能够创建更具可读性的代码：
<p>var node = doc.groceries.frozen[0].pizza[0].size;&lt;/pre&gt;
<p>代替手工的导航：
<p>var node = doc.documentElement.firstChild.firstChild.getAttribute("size");&lt;/pre&gt;
<p>&#183;开源许可。由Weaver(<a href="http://circaware.com|brock/">http://circaware.com|Brock</a>)维护。
<p><strong>2.6 LibXMLHttpRequest(发行于2003年6月)</strong>
<p>libXmlRequest(<a href="http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html">http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html</a>)，是XMLHttpRequest的一个瘦包装器。
<p>&#183;getXML()和postXML()方法。
<p>&#183;XMLHttpRequest对象池支持。
<p>&#183;Response缓冲。
<p>&#183;可用源码(明显)，但是受标准版权的保护，由Stephen W.Coate(<a href="http://www.whitefrost.com/index.jsp">http://www.whitefrost.com/index.jsp</a>)所维护。
<p><strong>2.7 RSLite(x)</strong>
<p>网站是：<a href="http://www.ashleyit.com/rs/main.htm">http://www.ashleyit.com/rs/main.htm</a>，是一个针对XMLHttpRequest的瘦包装器。
<p>&#183;一个简单的组件，作为Brent Ashley的更全面的远程脚本工作(参见Javascript远程脚本-JSRS在多语言服务器端)的一部分发行。
<p><strong>2.8 Sack(在开发中，自从2005年5月)</strong>
<p>网站是：<a href="http://twilightuniverse.com/2005/05/sack-of-ajax/">http://twilightuniverse.com/2005/05/sack-of-ajax/</a>，是一个针对XMLHttpRequest的瘦包装器。
<p>&#183;调用者能指定回叫函数或者回叫DOM对象。借助于回叫DOM，应答文本直接被推入到DOM中
<p><strong>2.9 Sarissa(发行于2月，2003年)</strong>
<p>网站是：<a href="http://sarissa.sf.net/">http://sarissa.sf.net</a>，是一种Javascript. API，它封装了在浏览器端可以独立调用XML的功能。
<p>&#183;可移植的XMLHttpRequest创建
<p>&#183;可移植的XPath查询
<p>&#183;可移植的DOM操作
<p>&#183;可移植的XSLT
<p>&#183;可移植的XML串行化
<p>&#183;开源(GPL2.0和LGPL2.1)。来自多方面贡献者。
<p><strong>2.10 XHConn(发行于自从4月，2005年)</strong>
<p>网站是：<a href="http://xkr.us/code/javascript/XHConn/">http://xkr.us/code/javascript/XHConn/</a>，是一个对XMLHttpRequest的瘦包装器。
<p>&#183;例如
<p>new XHConn().connect("mypage.php"，"POST"，"foo=bar&amp;baz=qux"，fnWhenDone);
<p>&#183;开源许可。由Brad Fults所维护。
<p><strong>3 服务器端：多种语言</strong>
<p><strong>3.1 跨平台异步的接口工具箱(5月2005年)</strong>
<p>CPAINT：<a href="http://cpaint.sourceforge.net/">http://cpaint.sourceforge.net/</a>，是一真正的支持PHP和ASP/Vbscript的Ajax实现和JSRS(JavaScript远程脚本)实现。CPAINT提供给你需求的代码在后台实现AJAX和JSRS，而返回的数据以JavaScript形式在前台操作，格式化和显示。这允许你创建能提供接近实时的反馈给用户的web应用程序。
<p>&#183;支持PHP&amp;ASP
<p>&#183;针对所有函数的一致的JavaScript文件
<p>&#183;支持远程脚本和XML
<p>&#183;支持本地和远程函数
<p>&#183;单个或者多个XMLHTTP对象
<p>&#183;以文本或者JavaScript. XML/DOM文档对象方式返回后台数据
<p>&#183;能支持POST和GET请求
<p>&#183;后台代理函数来访问远程函数和数据
<p>&#183;在所有的主要浏览器上测试过
<p>&#183;在GNU GPL&amp;LGPL保护下发行
<p><strong>3.2 SAJAX(可用，但是不是1.0版本;自从3月2005年)</strong>
<p>网站是：<a href="http://www.modernmethod.com/sajax/">http://www.modernmethod.com/sajax/</a>，直接把调用从Javascript发送到你的服务器端语言并再次回返。例如，调用一个javascript方法x_calculateBudget()，将先到达服务器和调用一个Java calculateBudget()方法，然后以javascript方式把值返回到x_calculateBudget_cb()。
<p>&#183;便利从Javascript代理函数到后台操作的映射。
<p>&#183;能够代理对众多服务器端平台（ASP/ColdFusion/Io/Lua/Perl/PHP/Python/Ruby）的调用。
<p>&#183;开源许可。来自多方面贡献者。
<p><strong>3.3 Javascipt对象标志(JSON)和JSON-RPC</strong>
<p>JSON(<a href="http://www.crockford.com/JSON/index.html">http://www.crockford.com/JSON/index.html</a>)，是一个"胖的自由的XML选择"，而JSON-RPC(<a href="http://www.json-rpc.org/">http://www.json-rpc.org/</a>)是一种远程过程协议，类似于XML-RPC，强有力支持Javascript客户。
<p>&#183;实现多服务器端平台(<a href="http://www.json-rpc.org/impl.xhtml">http://www.json-rpc.org/impl.xhtml</a>)：Java，Python，Ruby，Perl。
<p>&#183;针对每种平台有独立的打包和许可，如JSON-RPC-Java(<a href="http://oss.metaparadigm.com/jsonrpc/">http://oss.metaparadigm.com/jsonrpc/</a>)。
<p><strong>3.4 Javascript远程脚本(JSRS)(自从2000年)</strong>
<p>网址是：<a href="http://www.ashleyit.com/rs/jsrs/test.htm">http://www.ashleyit.com/rs/jsrs/test.htm</a>，直接把调用从Javascript发送到你的服务器端语言并再次回返。
<p>&#183;知名的浏览器：IE4+，NS4.x，NS6.x，Mozilla，Opera7和Galeon。
<p>&#183;服务器端支持：ASP，ColdFusion，PerlCGI，PHP,Python和JSP(servlet)。
<p>&#183;开源许可。由Brent Ashley(<a href="http://www.ashleyit.com/">http://www.ashleyit.com/</a>)提供支持。
<p><strong>4 服务器端：Java<br />
</strong><br />
注意：许多现有的框架最近正在添加Java支持(例如<a href="http://www.cn-java.com/"><u><strong>struts</strong></u></a>)，我将在后面指出。
<p><strong>4.1 WebORB for Java(自从2005年8月)</strong>
<p>网址：<a href="http://www.themidnightcoders.com/weborb/aboutWeborb.htm">http://www.themidnightcoders.com/weborb/aboutWeborb.htm</a>，是一个平台，支持开发AJAX和基于Flash的胖客户端应用程序，并可以把它们与Java对象和XML Web服务相系起来。在线举例(http：//www.themidnightcoders.com/examples)
<p>&#183;WebORB包括一个称作丰富的客户系统(<a href="http://www.themidnightcoders.com/rcs/index.htm">http://www.themidnightcoders.com/rcs/index.htm</a>)的客户端库。该丰富的客户系统提供一简单的在线api来绑定到并调用任何Java对象，XML Web服务或者<a href="http://www.cn-java.com/"><u><strong>EJB</strong></u></a>上的方法。
<p>&#183;支持同步的和异步的方法调用。
<p>&#183;并不要求在服务器端代码上作任何修改，不需要定制方法属性，特别的签名或者参数类型。★不要求设计时生成代理。
<p>&#183;同步调用返回来自于该调用(不需要回叫)的数据。异步的调用依赖于一个回叫实现。
<p>&#183;任何服务器端方法能被同步地或者异步地调用。
<p>&#183;客户应用程序能向服务器对象请求指定的活动方式。结果，对象能被轻易地创建而不需任何特殊的编程。
<p>&#183;提供一个特定API来处理数据库查询结果-服务器代码能返回Data集合或者Data表，而客户端以一个特殊RecordSet JavaScript对象来显示这个结果。该对象提供一个方法以检索列名和行数据。
<p>&#183;支持数据分页技术。客户应用程序能检索页面中的数据。
<p>&#183;支持所有的服务器端参数类型并返回值-原型，字符串，复合类型，数组，本机.net集合，远程参考。
<p>&#183;共有两种版本可用：标准版(自由)和专业版(商业许可)
<p><strong>4.2 Echo 2(自从3月2005年)</strong>
<p>网址是：<a href="http://www.nextapp.com/products/echo2/">http://www.nextapp.com/products/echo2/</a>，允许你用纯Java代码编写Ajax应用软件(范例(<a href="http://demo.nextapp.com/InteractiveTest/ia">http://demo.nextapp.com/InteractiveTest/ia</a>))。
<p>自动地生成HTML和Javascript。
<p>&#183;协调浏览器和服务器之间的消息。消息形式为XML。
<p>&#183;如果需要，可以手工编写定制的Javascript部件。
<p>&#183;开源许可(Mozilla公共许可或者GNU LGPL)。源于Next App,Inc.(<a href="http://www.nextapp.com/">http://www.nextapp.com/</a>)。
<p><strong>4.3 Direct Web Remoting (DWR)(2005年)</strong>
<p>网址是：<a href="http://www.getahead.ltd.uk/dwr/">http://www.getahead.ltd.uk/dwr/</a>，是一个框架，用于直接从Javascript代码中调用Java方法。
<p>&#183;象SAJAX，能把Javascript中的调用传递到Java方法，并返回到Javascript回叫。
<p>&#183;能与任何web框架（Struts，Tapestry，等等）一起使用。
<p>&#183;开源许可(Apache(<a href="http://www.apache.org/LICENSE.txt">http://www.apache.org/LICENSE.txt</a>))。由Joe Walker(http://www.getahead.ltd.uk/sg/space/joe/)所支持。被加入到WebWork(<a href="http://www.opensymphony.com/webwork/">http://www.opensymphony.com/webwork/</a>)版本。
<p><strong>4.4 SWATO(2005年)</strong>
<p>网址是：<a href="http://swato.dev.java.net/">http://swato.dev.java.net/</a>，是一套可重用的和良好集成的Java/JavaScript库，它实现了一种更容易的方式来改变你的web应用程序的交互，它是通过AJAX方式实现。
<p>&#183;服务器端Java库能被容易地配置到所有的Servlet 2.3+匹配的容器中。
<p>&#183;客户端JavaScript库能工作在支持HttpXMLRequest的各种浏览器中。
<p>&#183;使用JSON来在服务器端编组你的POJO数据。这样你能存取在任何JavaScript环境(HTML，XUL，SVG)中的远程数据，这种存取可以容易地通过硬编码或者与某种成熟的JavaScript库集成来实现。
<p>&#183;提供一个简单的接口来使你的JavaScript代码可以与暴露在客户端的远程POJO交互(RPC等)。
<p>&#183;使用web.xml中的&lt;servlet&gt;和&lt;filter&gt;的容易且灵活的配置，并能(但不是依赖)与<a href="http://www.cn-java.com/"><u><strong>Spring</strong></u></a>集成到一起。
<p>&#183;提供了几个可帮助你快速开发web应用程序的组件(如自动完成的文本框，在线表单，在线列表，等等)。
<p><strong>5 服务器端：Lisp</strong>
<p><strong>5.1 CL-Ajax</strong>
<p>网址：<a href="http://cliki.net/cl-ajax">http://cliki.net/cl-ajax</a>，实现Javascript直接调用服务器端Lisp函数。
<p>&#183;如下输出函数：
<p>(export-函数 #&#8217;my-函数)
<p>&#183;可以产生带有参数的Javascript代理。
<p>&#183;能回叫Javascript函数或者DOM对象。
<p>&#183;可以被集成进SAJAX。
<p>&#183;开源(定制，非常灵活，许可)。由[Richard Newman](<a href="http://www.holygoat.co.uk/">http://www.holygoat.co.uk/</a>)所维护。
<p><strong>6 服务器端：.NET</strong>
<p><strong>6.1 WebORB for.NET(自从8月2005年)</strong>
<p>网址：<a href="http://www.themidnightcoders.com/weborb/aboutWeborb.htm">http://www.themidnightcoders.com/weborb/aboutWeborb.htm</a>，是一个平台，用于开发AJAX和基于Flash的胖客户端应用程序，并能把它们连接到.NET对象和XML Web服务。(在线举例(<a href="http://www.themidnightcoders.com/examples">http://www.themidnightcoders.com/examples</a>))
<p>&#183;WebORB包括一个客户端库，名叫Rich Client System(http://www.themidnightcoders.com/rcs/index.htm)。Rich Client System提供一简单的在线api以绑定到和调用任何.NET对象或者XML Web服务上的任何方法。
<p>&#183;支持同步和异步的方法调用
<p>&#183;并不要求在服务器端代码上作任何修改，不需要定制方法属性，特别的签名或者参数类型。**不要求设计时代理生成。
<p>&#183;同步调用返回来自于该调用的数据(不需要回叫)。异步的调用依赖于一个回叫实现。
<p>&#183;任何服务器端方法能被同步地或者异步地调用。
<p>&#183;客户应用程序能向服务器对象请求指定的活动方式。结果，对象能被轻易地创建而不需任何特殊的编程。
<p>&#183;提供一个特定API来处理数据库查询结果-服务器代码能返回DataSet或者DataTable，而客户端以一个特殊RecordSet JavaScript对象来显示这个结果。该对象提供一个方法以检索列名和行数据
<p>&#183;支持数据页面技术。客户端应用程序能检索页面中的数据。
<p>&#183;支持所有的服务器端参数类型并返回值-原型，字符串，复合类型，数组，本机.net集合，远程参考
<p>&#183;共有两种版本可用的：标准版(自由)和专业版(商业许可)
<p><strong>6.2 Ajax.NET(自从3月2005年)</strong>
<p>网址是：<a href="http://ajax.schwarz-interactive.de/">http://ajax.schwarz-interactive.de/</a>，是一个库，实现从Javascript到服务器端.NET的存取。
<p>&#183;象SAJAX，能把Javascript中的调用传递到.NET方法，并返回到Javascript回叫。
<p>&#183;能存取来自于JavaScript的会话数据。
<p>&#183;缓存结果
<p>&#183;自由使用，可用的源码，未指定使用许可。由Michael Schwarz(<a href="http://weblogs.asp.net/mschwarz/">http://weblogs.asp.net/mschwarz/</a>)所维护。
<p>&#183;不允许改变源代码，用属性标记方法
<p>&#183;完整的类支持以返回客户端JavaScript值
<p>&#183;使用HtmlControls来进行输入和返回值
<p>&#183;可以返回数据表，数据集，数据视图，数组和集合
<p><strong>7 服务器端：PHP</strong>
<p><strong>7.1 AjaxAC(自从2005年4月)</strong>
<p>网址是：<a href="http://ajax.zervaas.com.au/">http://ajax.zervaas.com.au/</a>，用单个的PHP类封装了完整的应用程序。
<p>&#183;所有的应用程序代码是自包含在单个类中(附加另外一些JavaScript库)
<p>&#183;干净利索地调用PHP文件/HTML页面。只需创建应用程序类，然后参照应用程序JavaScript和依附任何需要的HTML元素到该应用程序。
<p>&#183;容易地处理JavaScript事件的内嵌功能
<p>&#183;创建子需要并处理它们的内嵌功能
<p>&#183;允许定制的配置值，因此某些单元能在运行时间设置
<p>&#183;无凌乱的JavaScript代码夹杂在调用HTML的代码中-所有的事件是被动态依附的
<p>&#183;由于以上两个原因容易和模板引擎集成到一起
<p>&#183;容易钩到（hook in to）已有的PHP类或者MySQL数据库以返回来自于子需求的数据
<p>&#183;能够容易地进一步生成JavaScript对象的可扩展的窗口小组件结构(但是还需要做一些工作)
<p>背景：
<p>&#183;开源许可(Apache2.0)。由Zervaas Enterprises(<a href="http://ajax.zervaas.com.au/">http://ajax.zervaas.com.au/</a>)支持
<p><strong>7.2 JPSpan</strong>
<p>网址是：<a href="http://jpspan.sourceforge.net/wiki/doku.php">http://jpspan.sourceforge.net/wiki/doku.php</a>，直接把Javascript调用传递到PHP函数。
<p>&#183;进行了严肃的单元测试。
<p>&#183;开源许可(PHP)。
<p><strong>7.3 XAJAX</strong>
<p>网址是：<a href="http://xajax.sf.net/">http://xajax.sf.net</a>，直接把Javascript调用传递到PHP函数。
<p>&#183;使用Javascript代理来调用PHP脚本。
<p>&#183;开源。由J.Max Wilson所创。
<p><strong>8 服务器端：Ruby</strong>
<p>Ruby On Rails(<a href="http://www.rubyonrails.org/">http://www.rubyonrails.org/</a>)是一个通常的强力支持Ajax的web框架：
<p>&#183;当Ajax出现的时候Rails还处于其发展的早期，因此Ajax可能逐渐成为Rails框架的核心。
<p>&#183;生成浏览器中大多数/全部的窗口小组件和动画的Javascript脚本。
<p>&#183;支持服务器端调用。
<p>&#183;调度支持。　
<p>&#183;开源许可。 </p>
<img src ="http://www.blogjava.net/i369/aggbug/167182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-12-12 11:48 <a href="http://www.blogjava.net/i369/articles/167182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>去掉字符串两端的全角空格和半角空格（含源代码）</title><link>http://www.blogjava.net/i369/articles/162531.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 23 Nov 2007 01:33:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/162531.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/162531.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/162531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/162531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/162531.html</trackback:ping><description><![CDATA[标签：<span style="color: #aaaaaa"><a class="operlink" href="http://blog.51cto.com/tagindex.php?keyword=%C8%AB%BD%C7%BF%D5%B8%F1%A1%A1%B0%EB%BD%C7%BF%D5%B8%F1%A1%A1%D7%D6%B7%FB%B4%AE%C1%BD%B6%CB%A1%A1trim" target="_blank">全角空格　半角空格　字符串两端　trim</a></span>　<br />
<br />
<div>
<table id="content" style="table-layout: fixed; width: 650px" cellspacing="10" cellpadding="0" width="650" border="0">
    <tbody>
        <tr>
            <td>
            <div class="copy"><strong>版权声明：</strong>原创作品，允许转载，转载时请务必以超链接形式标明文章 <a style="text-decoration: underline" href="http://su3390.blog.51cto.com/176528/33671" target="_blank">原始出处</a> 、作者信息和本声明。否则将追究法律责任。<a href="http://su3390.blog.51cto.com/176528/33671">http://su3390.blog.51cto.com/176528/33671</a></div>
            </td>
        </tr>
        <tr>
            <td>
            <div>
            <div>　　昨天，遇到了一个技术问题。本来我在程序中用的trim()方法来处理从JSP页面传来的值,后来在测试时，发现当我输入的是全角空格时，trim()方法失效。</div>
            <div>　　需求是这样的，只是去掉字符串两端的空格（不论是全角空格还是半角空格），字符串中间的空格不变。后来经过查资料和研究，总结出了以下两种写法：</div>
            <div>一、字符串的字符替换法：</div>
            <div>　　思路：（1）将字符串中所以有的全角空格转换成两个半角空格</div>
            <div>　　　　　（2）用trim()方法去掉字符串两端的空格（此时全是半角空格）</div>
            <div>　　　　　（3）将两个相邻的半角合成一个全角</div>
            <div>　　评价：这方法遇到字符串中间是半角+全角的时间，（3）步中有可能合并后，与原来</div>
            <div>　　　　　不一样。</div>
            <div><strong>原代码：</strong></div>
            <div>　　　　　public String&nbsp; trim(String Str){<br />
            &nbsp; &nbsp;　　　　　　String newstr = Str.replaceAll("　","&nbsp; ");<br />
            &nbsp; &nbsp;　　　　　　newstr = newstr.trim();<br />
            &nbsp; &nbsp;　　　　　　newstr = newstr.replaceAll("&nbsp; ","　");<br />
            &nbsp; &nbsp;　　　　　　return newstr;&nbsp; &nbsp;&nbsp;<br />
            &nbsp; 　　　　　}</div>
            <div>二、正则表达式转换法：　　　</div>
            <div>　　思路：利用正则表达式进行匹配替换。</div>
            <div>　　评价：这应该是正统的解决之道</div>
            <div>&nbsp;</div>
            <div><strong>原代码：</strong></div>
            <div>例1：</div>
            <div>public static String&nbsp; trims(String Str,String Flag) {&nbsp;&nbsp;&nbsp;<br />
            &nbsp;&nbsp; if (Str == null || Str.equals("")) {<br />
            &nbsp;&nbsp;&nbsp;return Str;<br />
            &nbsp;&nbsp;} else {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Str =&nbsp;&nbsp; ""+Str;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(&nbsp;&nbsp; Flag&nbsp;&nbsp; ==&nbsp;&nbsp; "l"&nbsp;&nbsp; ||&nbsp;&nbsp; Flag&nbsp;&nbsp; ==&nbsp;&nbsp; "L"&nbsp;&nbsp; )/*trim&nbsp;&nbsp; left&nbsp;&nbsp; side&nbsp;&nbsp; only*/&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String RegularExp =&nbsp; "^[　 ]+";&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; Str.replaceAll(RegularExp,"");&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp; if(&nbsp;&nbsp; Flag&nbsp;&nbsp; ==&nbsp;&nbsp; "r"&nbsp;&nbsp; ||&nbsp;&nbsp; Flag&nbsp;&nbsp; ==&nbsp;&nbsp; "R"&nbsp;&nbsp; )/*trim&nbsp;&nbsp; right&nbsp;&nbsp; side&nbsp;&nbsp; only*/&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String RegularExp =&nbsp;&nbsp; "[　 ]+$";&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; Str.replaceAll(RegularExp,"");&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else/*defautly,&nbsp;&nbsp; trim&nbsp;&nbsp; both&nbsp;&nbsp; left&nbsp;&nbsp; and&nbsp;&nbsp; right&nbsp;&nbsp; side*/&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String RegularExp =&nbsp;&nbsp; "^[　 ]+|[　 ]+$";&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; Str.replaceAll(RegularExp,"");&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;</div>
            <div>&nbsp;&nbsp; }&nbsp;<br />
            } </div>
            <div>&nbsp;</div>
            <div>例2：</div>
            <div>public static String trim(String str) {<br />
            &nbsp;&nbsp;if (str == null || str.equals("")) {<br />
            &nbsp;&nbsp;&nbsp;return str;<br />
            &nbsp;&nbsp;} else {<br />
            &nbsp;&nbsp;&nbsp;//return leftTrim(rightTrim(str));<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return str.replaceAll("^[　 ]+|[　 ]+$","");<br />
            &nbsp;&nbsp;}<br />
            &nbsp;}</div>
            <div>&nbsp;public static String leftTrim(String str) {<br />
            &nbsp;&nbsp;if (str == null || str.equals("")) {<br />
            &nbsp;&nbsp;&nbsp;return str;<br />
            &nbsp;&nbsp;} else {<br />
            &nbsp;&nbsp;&nbsp;return str.replaceAll("^[　 ]+", "");<br />
            &nbsp;&nbsp;}<br />
            &nbsp;}</div>
            <div>&nbsp;public static String rightTrim(String str) {<br />
            &nbsp;&nbsp;if (str == null || str.equals("")) {<br />
            &nbsp;&nbsp;&nbsp;return str;<br />
            &nbsp;&nbsp;} else {<br />
            &nbsp;&nbsp;&nbsp;return str.replaceAll("[　 ]+$", "");<br />
            &nbsp;&nbsp;}<br />
            }</div>
            <div>&nbsp;</div>
            <div>给大家一个综合的测试类：</div>
            <div>public class Test {</div>
            <div>&nbsp;public static void main(String[] args) {<br />
            &nbsp;&nbsp;System.out.println("leftTrim:" + leftTrim(" 　　123　　123　　123　　 ") + ":");<br />
            &nbsp;&nbsp;System.out.println("rightTrim:" + rightTrim(" 　　123　　123　　123　 　") + ":");<br />
            &nbsp;&nbsp;System.out.println("trim:" + trim(" 　　123　　123　　123 　　") + ":");<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("leftTrim:" + trims(" 　　123　　123　　123　　 ","l") + ":");<br />
            &nbsp;&nbsp;System.out.println("rightTrim:" + trims(" 　　123　　123　　123　 　","r") + ":");<br />
            &nbsp;&nbsp;System.out.println("trim:" + trims(" 　　123　　123　　123 　　","a") + ":");<br />
            &nbsp;}</div>
            <div>&nbsp;public static String trim(String str) {<br />
            &nbsp;&nbsp;if (str == null || str.equals("")) {<br />
            &nbsp;&nbsp;&nbsp;return str;<br />
            &nbsp;&nbsp;} else {<br />
            &nbsp;&nbsp;&nbsp;//return leftTrim(rightTrim(str));<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return str.replaceAll("^[　 ]+|[　 ]+$","");<br />
            &nbsp;&nbsp;}<br />
            &nbsp;}</div>
            <div>&nbsp;public static String leftTrim(String str) {<br />
            &nbsp;&nbsp;if (str == null || str.equals("")) {<br />
            &nbsp;&nbsp;&nbsp;return str;<br />
            &nbsp;&nbsp;} else {<br />
            &nbsp;&nbsp;&nbsp;return str.replaceAll("^[　 ]+", "");<br />
            &nbsp;&nbsp;}<br />
            &nbsp;}</div>
            <div>&nbsp;public static String rightTrim(String str) {<br />
            &nbsp;&nbsp;if (str == null || str.equals("")) {<br />
            &nbsp;&nbsp;&nbsp;return str;<br />
            &nbsp;&nbsp;} else {<br />
            &nbsp;&nbsp;&nbsp;return str.replaceAll("[　 ]+$", "");<br />
            &nbsp;&nbsp;}<br />
            &nbsp;}</div>
            <div>&nbsp; public static String&nbsp; trims(String Str,String Flag) {&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp; if (Str == null || Str.equals("")) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Str;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Str =&nbsp;&nbsp; ""+Str;&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(&nbsp;&nbsp; Flag&nbsp;&nbsp; ==&nbsp;&nbsp; "l"&nbsp;&nbsp; ||&nbsp;&nbsp; Flag&nbsp;&nbsp; ==&nbsp;&nbsp; "L"&nbsp;&nbsp; )/*trim&nbsp;&nbsp; left&nbsp;&nbsp; side&nbsp;&nbsp; only*/&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String RegularExp =&nbsp; "^[　 ]+";&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; Str.replaceAll(RegularExp,"");&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp; if(&nbsp;&nbsp; Flag&nbsp;&nbsp; ==&nbsp;&nbsp; "r"&nbsp;&nbsp; ||&nbsp;&nbsp; Flag&nbsp;&nbsp; ==&nbsp;&nbsp; "R"&nbsp;&nbsp; )/*trim&nbsp;&nbsp; right&nbsp;&nbsp; side&nbsp;&nbsp; only*/&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String RegularExp =&nbsp;&nbsp; "[　 ]+$";&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; Str.replaceAll(RegularExp,"");&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else/*defautly,&nbsp;&nbsp; trim&nbsp;&nbsp; both&nbsp;&nbsp; left&nbsp;&nbsp; and&nbsp;&nbsp; right&nbsp;&nbsp; side*/&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String RegularExp =&nbsp;&nbsp; "^[　 ]+|[　 ]+$";&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp; Str.replaceAll(RegularExp,"");&nbsp;&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
            &nbsp;&nbsp; }&nbsp;&nbsp; <br />
            }</div>
            <div>如果你也遇到这样的问题，希望以上的文字能帮助到你：），欢迎光临我的博客！　　　　　</div>
            <p>本文出自 &#8220;<a href="http://su3390.blog.51cto.com/">兰色的海洋</a>&#8221; 博客，请务必保留此出处<a href="http://su3390.blog.51cto.com/176528/33671">http://su3390.blog.51cto.com/176528/33671</a></p>
            <a class="hidden" href="http://su3390.blog.51cto.com/176528/33671">本文出自 51CTO.COM技术博客</a></div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<img src ="http://www.blogjava.net/i369/aggbug/162531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-11-23 09:33 <a href="http://www.blogjava.net/i369/articles/162531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java开源 Jsp标签库</title><link>http://www.blogjava.net/i369/articles/159249.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 09 Nov 2007 00:51:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/159249.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/159249.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/159249.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/159249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/159249.html</trackback:ping><description><![CDATA[displytag <br />
与Struts结合使用最出名的一个tag主要是显示表格数据很漂亮、完善。&nbsp;&nbsp; <br />
<a href="http://displaytag.sourceforge.net/" target="_blank">http://displaytag.sourceforge.net/</a> <br />
<br />
cewolf&nbsp;tag <br />
用来在web上显示复杂图形报表的一个jsp&nbsp;tag。&nbsp;&nbsp; <br />
<a href="http://cewolf.sourceforge.net/" target="_blank">http://cewolf.sourceforge.net/</a> <br />
<br />
Loading&nbsp;Tab <br />
当一个复杂的操作可以加载比较长的时间时，用这个tag。&nbsp;&nbsp; <br />
<a href="http://www.mycgiserver.com/~eboudrant/#taglibs" target="_blank">http://www.mycgiserver.com/~eboudrant/#taglibs</a> <br />
<br />
DbForms <br />
DbForms!它是一个基于&nbsp;Java&nbsp;(Servlet,JSP/Taglib)的快速应用程序开发环境，可以帮助开发人员快速建造基于Web的数据库应用程序。&nbsp;&nbsp; <br />
<a href="http://jdbforms.sourceforge.net/" target="_blank">http://jdbforms.sourceforge.net/</a> <br />
<br />
Jakarta&nbsp;Taglibs <br />
Jakarta&nbsp;Taglibs&nbsp;是为JSP定制标签库和相关的项目提供的一个开源仓库，如&nbsp;TagLibraryValidator类，和对页面生成工具的扩展来支持标签库。Jakarta&nbsp;Taglibs&nbsp;也包括了对JSP&nbsp;Standard&nbsp;Tag&nbsp;Library&nbsp;(JSTL)的参考实现。这个实现基于项目标准。目前，在Jakarta&nbsp;Taglibs&nbsp;中没有其它标签库代表了Java&nbsp;Community&nbsp;Process&nbsp;(JCP)&nbsp;标准。&nbsp;&nbsp; <br />
<a href="http://jakarta.apache.org/taglibs/index.html" target="_blank">http://jakarta.apache.org/taglibs/index.html</a> <br />
<br />
EasyLDAP <br />
LDAP标签库为JSP程序员和Web页面设计者提供了最容易的方法来执行任意的LDAP操作。&nbsp;&nbsp; <br />
<a href="http://easyldap.sourceforge.net/" target="_blank">http://easyldap.sourceforge.net/</a> <br />
<br />
WebJMX <br />
WebJMX标签库项目可以控制你的JMX&nbsp;接口。WebJMX&nbsp;这个标签库项目的目的是生成一个JSP标签库，可以让有技巧的JSP开发人员为JMX生成一个可定制的、规范的、基于Web的界面。&nbsp;&nbsp; <br />
<a href="http://webjmx.sourceforge.net/" target="_blank">http://webjmx.sourceforge.net/</a> <br />
<br />
JPivot <br />
JPivot&nbsp;-&nbsp;是一个JSP&nbsp;自定制的标签库，可以绘制一个OLAP表格和图表。用户可以执行典型的OLAP导航，如下钻，切片和方块。它使用Mondrian&nbsp;作为其OLAP服务器。&nbsp;&nbsp; <br />
<a href="http://jpivot.sourceforge.net/" target="_blank">http://jpivot.sourceforge.net/</a> <br />
<br />
JSP&nbsp;Tree&nbsp;Tag&nbsp; <br />
JSP&nbsp;Tree&nbsp;Tag是一个显示树型结构jsp标签，它只把需要显示的部分送到客户浏览器。&nbsp;&nbsp; <br />
<a href="http://www.jenkov.dk/projects/treetag/treetag.jsp" target="_blank">http://www.jenkov.dk/projects/treetag/treetag.jsp</a> <br />
<br />
Google&nbsp;Tag&nbsp;Library&nbsp; <br />
该标记库和&nbsp;Google&nbsp;有关。使用该标记库，利用&nbsp;Google&nbsp;为你的网站提供网站查询，并且可以直接在你的网页里面显示搜查的结果。&nbsp;&nbsp; <br />
<a href="http://google-taglib.sourceforge.net/" target="_blank">http://google-taglib.sourceforge.net/</a> <br />
<br />
TableTag <br />
TableTag是类似于DataGrid的Jsp标签库。通过<a href="http://pop.pcpop.com/Subject/13151.html" target="_blank"><font color="#000000">java</font></a>.util.List填充数据。&nbsp;&nbsp; <br />
<a href="http://tabletag.sourceforge.net/" target="_blank">http://tabletag.sourceforge.net/</a> <br />
<br />
uitags <br />
uitags利用这个开源自定义标签可以很容易开发出一个友好的用户界面。&nbsp;&nbsp; <br />
<a href="http://uitags.sourceforge.net/" target="_blank">http://uitags.sourceforge.net/</a> <br />
<br />
ValueList <br />
ValueList利用这个标签可以进行数据过滤，排序，分页。而且界面挺漂亮的。&nbsp;&nbsp; <br />
<a href="http://valuelist.sourceforge.net/" target="_blank">http://valuelist.sourceforge.net/</a> <br />
<br />
JCE&nbsp;taglib <br />
JCE&nbsp;taglib把JCE（Java&nbsp;Cryptographic&nbsp;Extensions）包装成TagLib并且包含了EL函数。使用这个标签能够为jsp应用程序加强安全性。&nbsp;&nbsp; <br />
<a href="http://jcetaglib.sourceforge.net/" target="_blank">http://jcetaglib.sourceforge.net/</a> <br />
<br />
Prize&nbsp;Tags <br />
Prize&nbsp;Tags是一个集许多功能于一身的Jsp标签库。其中最受欢迎的Tree&nbsp;Tag，这个Tag可以为不同节点指定不同的图标，而且可以服务端可以监控客户端节点的展开，关闭，选中与未选中等事件。除了Tree&nbsp;Tag还有日历Tag,Icon&nbsp;Tag,Alternate&nbsp;Tag&nbsp;,Template&nbsp;Tag&nbsp;等其它的功能。&nbsp;&nbsp; <br />
<a href="http://www.jenkov.com/prizetags/introduction.tmpl" target="_blank">http://www.jenkov.com/prizetags/introduction.tmpl</a> <br />
<br />
Struts-Layout <br />
Struts-Layout是一个用在Struts的标签库.这个强大的标签库可以用来显示面板(panels),输入框,表格,treeviews,sortable&nbsp;lists,datagrids,popups,日历等.使用这些标签可以不用写HTML代码,甚至可以不用懂得HTML.这个项目还提供一个Eclipse下的插件Kiwi帮助使用Struts和Struts-Layout来开发Jsp页面.以下是一张例图: <br />
<a href="http://struts.application-servers.com/" target="_blank">http://struts.application-servers.com/</a> <br />
<br />
JImageTaglib <br />
JImageTaglib是一个用在J2EE&nbsp;Web应用程序的Java标签库.它用来在服务端生成与处理图片然后再反馈到JSP页面.可以过滤(filtering)图片,调整图片文件大小,生成条形码等.&nbsp;&nbsp; <br />
<a href="http://jimagetaglib.sourceforge.net/" target="_blank">http://jimagetaglib.sourceforge.net/</a> <br />
<br />
uitags <br />
uitags是一个开源的JSP&nbsp;custom-tag库.它让开发友好的用户界面变得简单.&nbsp;&nbsp; <br />
<a href="http://uitags.sourceforge.net/" target="_blank">http://uitags.sourceforge.net/</a> <br />
<br />
AJAX&nbsp;Tags <br />
AJAX&nbsp;Tag是一组Jsp标签,用来简化AJAX(Asynchronous&nbsp;JavaScript&nbsp;and&nbsp;XML&nbsp;)技术在JSP页面中的使用.&nbsp;&nbsp; <br />
<a href="http://ajaxtags.sourceforge.net/" target="_blank">http://ajaxtags.sourceforge.net/</a> <br />
<br />
Struts&nbsp;AjaxTags <br />
这个AjaxTags是在现有的Struts&nbsp;HTML标签库上添加对AJAX&nbsp;(Asynchronous&nbsp;Java脚本+XML)技术的支持。这样就可以为现有的基于Struts&nbsp;HTML标签库的应用程序添加AJAX功能而不用破坏现存的代码并且开发者不需要了解AJAX是怎样工作的。&nbsp;&nbsp; <br />
<a href="http://struts.sourceforge.net/ajaxtags/" target="_blank">http://struts.sourceforge.net/ajaxtags/</a> <br />
<br />
AWTaglib <br />
AWTaglib是一个Jsp标签可用于创建网格(grid)控件.它还提供一些额外的功能可以把网格中的数据导出为XLS,PDF和CSV(利用JasperReports来实现)并能与Struts框架相结合.&nbsp;&nbsp; <br />
<a href="http://awtaglib.sourceforge.net/" target="_blank">http://awtaglib.sourceforge.net/</a> <br />
<br />
eXtremeTable <br />
eXtremeTable是一个可扩展的用于以表格的形式来显示数据的一组JSP标签库.&nbsp;&nbsp; <br />
<a href="http://www.extremecomponents.org/" target="_blank">http://www.extremecomponents.org</a><font color="#cccccc"><br />
</font>
<img src ="http://www.blogjava.net/i369/aggbug/159249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-11-09 08:51 <a href="http://www.blogjava.net/i369/articles/159249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>访问安全网站(使用SSL)总是跳出安全警报的解决方法</title><link>http://www.blogjava.net/i369/articles/157717.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 02 Nov 2007 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/157717.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/157717.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/157717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/157717.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/157717.html</trackback:ping><description><![CDATA[ <img src ="http://www.blogjava.net/i369/aggbug/157717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-11-02 12:04 <a href="http://www.blogjava.net/i369/articles/157717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为CAS提供中文界面支持</title><link>http://www.blogjava.net/i369/articles/156003.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Fri, 26 Oct 2007 00:45:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/156003.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/156003.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/156003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/156003.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/156003.html</trackback:ping><description><![CDATA[ <img src ="http://www.blogjava.net/i369/aggbug/156003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-10-26 08:45 <a href="http://www.blogjava.net/i369/articles/156003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]CAS及客户端Acegi的安装配置指南</title><link>http://www.blogjava.net/i369/articles/155776.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Thu, 25 Oct 2007 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/155776.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/155776.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/155776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/155776.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/155776.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: CAS及客户端Acegi的安装配置指南（上）作者：龙智&nbsp;(Dragon)时间：2006-07-09&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CAS（Central Authentication Service）是耶鲁大学开发的一个开源的SSO（single sign on，单点登录）系统。它提供了丰富的客...&nbsp;&nbsp;<a href='http://www.blogjava.net/i369/articles/155776.html'>阅读全文</a><img src ="http://www.blogjava.net/i369/aggbug/155776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/i369/" target="_blank">芦苇</a> 2007-10-25 09:19 <a href="http://www.blogjava.net/i369/articles/155776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache上全部JAVA开源项目简介</title><link>http://www.blogjava.net/i369/articles/155468.html</link><dc:creator>芦苇</dc:creator><author>芦苇</author><pubDate>Wed, 24 Oct 2007 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/i369/articles/155468.html</guid><wfw:comment>http://www.blogjava.net/i369/comments/155468.html</wfw:comment><comments>http://www.blogjava.net/i369/articles/155468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/i369/comments/commentRss/155468.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/i369/services/trackbacks/155468.html</trackback:ping><description><![CDATA[<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt">
            <p><a href="http://www.inspring.cn/b/?p=265" rel="bookmark"><strong style="color: black; background-color: #ffff66">Apache</strong>上全部JAVA开源<strong style="color: black; background-color: #99ff99">项目</strong>简介</a></p>
            <p>最近接触Jakarta-Common-BeanUtils这个东东比较多，于是对<strong style="color: black; background-color: #ffff66">Apache</strong> Jakarta Project产生了兴趣，上他们的官方网站上看了下感觉有用的东西好多，眼花缭乱的，又没有中文网站，又上各大论坛搜了下，也没有发现一个集中该<strong style="color: black; background-color: #99ff99">项目</strong>的资料，于是决定自己整理翻译一下，有助于各位网友更好的了解该<strong style="color: black; background-color: #99ff99">项目</strong>。如果有什么描述不对不全面的地方，希望各位提出来给大家分享。<br />
            Jakarta<strong style="color: black; background-color: #99ff99">项目</strong>是ASF(The <strong style="color: black; background-color: #ffff66">Apache</strong> Software Foundation)的一部分。ASF是一个非赢利组织，她鼓励基于开放的软件许可下进行合作、注重实效的开发，并提供各个领域的高质量软件，她涉及到Http服务器，编译工具，类库，开发架构，服务器端Java技术,J2EE容器，数据库工具，日志工具，XML解析等等诸多领域。ASF提供的java<strong style="color: black; background-color: #99ff99">项目</strong>有一部分在Jakarta中，还有一些成为独立的诸如Tomcat的<strong style="color: black; background-color: #99ff99">项目</strong>,Jakarta<strong style="color: black; background-color: #99ff99">项目</strong>则提供了多种多样开源的java解决通用方案。</p>
            <p><a></a></p>
            <p>先<a name="baidusnap3"></a><strong style="color: black; background-color: #ff9999">介绍</strong>一下ASF中和Jakarta<strong style="color: black; background-color: #99ff99">项目</strong>并列的java<strong style="color: black; background-color: #99ff99">项目</strong>：</p>
            <p>Ant ——java构建工具，使用一个配置文件就可以完成java的<strong style="color: black; background-color: #99ff99">项目</strong>的，编译、打包、测试、运行、部署、生成文档等诸多工作。<br />
            Avalon ——是一个包括核心框架、工具、组件和容器的面向组件编程（AOP）的完整开发平台。使用关键设计模式，如反向控制模式（IoC）和分离考虑模（SoC）。 Avalon提供各种基本组件和缺省的应用程序模块，帮助你快速的建立你自己的应用程序解决方案。<br />
            Excalibur ——集多个开源<strong style="color: black; background-color: #99ff99">项目</strong>(Avalon Framework、LogKit和Cornerstone)于一身的轻量级可嵌入式反向控制容器。<br />
            Gump ——是<strong style="color: black; background-color: #ffff66">Apache</strong>组织自己也使用的一个持续集成工具，全面支持Ant和Maven，当有新的改动提交到版本控制系统，它可以检查出潜在 的冲突，并及时通知<strong style="color: black; background-color: #99ff99">项目</strong>组的<a name="baidusnap1"></a><strong style="color: black; background-color: #a0ffff">所有</strong>成员并自动生成改动的详细报告。<br />
            James ——是一套用java开发的邮件、新闻组、消息服务器，提供了比较完善的配置方案，尤其是关于邮件内容存储和用户信息存储。 支持 SMTP, POP3 , NNTP , IMAP 。<br />
            Logging ——可靠，快速的日志工具。<br />
            Lucene ——Java开发的高性能，全方位的文本搜索引擎。替文件的每一个字作索引，索引让搜寻的效率比传统的逐字比较大大提高， Lucen提供一组解读，过滤，分析文件，编排和使用索引的API，它的强大之处除了高效和简单外， 是最重要的是使使用者可以随时应自已需要自订其功能。<br />
            Maven ——是一个潜在的基于java的<strong style="color: black; background-color: #ffff66">apache</strong> ant的构建工具的替代者。提供了更强大的功能和易用性。<br />
            Portals ——提供了功能全面的、具有商业价值的企业门户。门户概念：门户对企业内的各种资源如信息管理系统进行整合并通过单一接口 对外提供服务，雇员、合伙人及顾客可以通过任何装置在任何地点通过门户入口享受到企业提供的服务， 分析家们预计,门户将成为下一代的桌面环境。<br />
            Struts ——一个实现MVC model2的web应用程序开发框架。通过一个配置文件可以很好的对各种组件进行装配，结构清晰，应用的最广泛的额web开发框架。<br />
            Tapestry——类似 Struts，也是一个基于servlet的应用程序框架，支持MVC，出现的较晚，不如Struts普及，主要利用javabean和xml技术进行开发，<br />
            Tomcat ——Serlvet容器，同时具有传统的Web服务器的功能，如：处理Html页面。能够处理动静态网页。<br />
            Watchdog ——用来检查一个servlet或jsp容器在相应规范上的执行情况的兼容性。但是该<strong style="color: black; background-color: #99ff99">项目</strong>已经静止了，只支持Servlet2.3、JSP1.2，相应 的Serlvet容器如Tomcat也只支持Tomcat4.x。</p>
            <p>下面<strong style="color: black; background-color: #ff9999">介绍</strong>下Jakarta的各个子<strong style="color: black; background-color: #99ff99">项目</strong>：</p>
            <p>Alexandria——已经不再开发<br />
            BCEL ——The Byte Code Engineering Library (formerly known as JavaClass) 字节码引擎类库，它让用户方便的分析，创建，操作java的class文件成为可能。 它可以让您深入 JVM 汇编语言进行类操作的细节。<br />
            BSF ——bean脚本框架 在java应用内对脚本语言提供了支持，通过脚本语言可以访问java的对象和方法。<br />
            Cactus ——一个基于JUnit框架的简单测试框架，用来单元测试服务端Java代码。 Cactus单元测试服务端内容包括servlet,EJB,? tag librarie, filter等<br />
            Commons ——提供很多日常开发中使用率很高的功能解决方案，已被很多著名的开源<strong style="color: black; background-color: #99ff99">项目</strong>采用。具体的<strong style="color: black; background-color: #99ff99">项目</strong>列表后面会有。<br />
            ECS ——使用Java语言和面向对象方法创建标记语言文档(HTML,XML)的开源<strong style="color: black; background-color: #99ff99">项目</strong>。<br />
            HiveMind ——是一个服务和配置的微型内核， 一套通过简单的java对象和接口创建复杂应用的框架。<br />
            HttpComponents ——提供了java.net包所不能提供的更多强大的、方便的http协议处理功能。<br />
            JCS ——一个分布式的缓存系统，用来提高应用程序的性能，并且提供很多强大的额外功能。<br />
            JMeter ——纯java开发的一套桌面应用程序。用来进行功能测试和性能测试。它可以用来测试静止资料库或者活动资料库中的服务器的运行情况， 可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗，或者用来分析不同负荷类型下的<strong style="color: black; background-color: #a0ffff">所有</strong>运行情况。 它也提供了一个可替换的界面用来定制数据显示，测试同步及测试的创建和执行。<br />
            ORO ——一套文本处理工具，能提供perl5.0兼容的正则表达式、 AWK-like正则表达式, glob 表达式。还提供替换，分割，文件名过虑等功能。<br />
            POI ——一套用来创建，读写基于OLE 2组件文档格式的文件。使用Java来读写MS Excel ,Word文件。<br />
            Regexp ——一套纯java的正则表达式相关的包。<br />
            Slide ——主要模块是一个可以做为内容管理框架底层的内容仓库.它可以把内容信息存取到专门的,异质的,