﻿<?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-雪山飞鹄-随笔分类-other</title><link>http://www.blogjava.net/sxyx2008/category/45604.html</link><description>温馨提示：您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!
</description><language>zh-cn</language><lastBuildDate>Sun, 09 Sep 2012 08:06:43 GMT</lastBuildDate><pubDate>Sun, 09 Sep 2012 08:06:43 GMT</pubDate><ttl>60</ttl><item><title>使用Ant构建web项目 从编译到测试 生成测试报告 打包 邮件发送 远程下载tomcat 部署运行一条龙服务之ant脚本</title><link>http://www.blogjava.net/sxyx2008/archive/2012/09/05/387111.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Wed, 05 Sep 2012 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2012/09/05/387111.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/387111.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2012/09/05/387111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/387111.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/387111.html</trackback:ping><description><![CDATA[<div>build.xml</div><div>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;project default="run" name="build-project-with-ant"&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 最终编译后的jar包名称 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="jar.prefix-name" value="cms"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="jar.version" value="1.0"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="tomcat.version" value="6.0.18" /&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;property name="mailhost" value="smtp.qq.com"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="username" value="**********" /&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="password" value="**********"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="mailfrom" value="184675420@qq.com" /&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="mailto" value="184675420@qq.com"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="mailsubject" value="使用Ant自助构建项目测试打包文档"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 项目构建时所需要的lib --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="project.lib.dir" value="${basedir}/WebRoot/WEB-INF/lib"&gt;&lt;/property&gt;<br /><br />&nbsp;&nbsp; &nbsp;&lt;!-- 项目构建时tomcat的home目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="tomcat.download.url" value="http://archive.apache.org/dist/tomcat/tomcat-6/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.zip"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 项目构建时下载tomcat的存放目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="tomcat.dir" value="${basedir}/dist/"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目的当前目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="basedir" value="."/&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目源码目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="src.dir" value="${basedir}/src"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目源码编译后的目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="build.dir" value="${basedir}/classes"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目最终编译生成的目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="dist.dir" value="${basedir}/dist"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目文档的目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="doc.dir" value="${basedir}/doc"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目文档api的目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="doc.dir.api" value="${doc.dir}/api"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目单元测试文档的目录 --&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="junit.doc.dir" value="${basedir}/doc/api/junit"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目单元测试源码的目录 --&gt;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;property name="junit.src.dir" value="${basedir}/test"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目单元测试编译的目录 --&gt;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;property name="junit.dir" value="${basedir}/junit"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;property name="junit.build.dir" value="${junit.dir}/classes"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;&lt;!-- 定义项目单元测试测试报告的目录 --&gt;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;property name="junit.report.dir" value="${junit.dir}/report"&gt;&lt;/property&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="init" description="init"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;项目初始化设置&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;delete dir="${build.dir}"&gt;&lt;/delete&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;delete dir="${dist.dir}"&gt;&lt;/delete&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;delete dir="${doc.dir}"&gt;&lt;/delete&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;delete dir="${junit.dir}"&gt;&lt;/delete&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;mkdir dir="${build.dir}"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;mkdir dir="${dist.dir}"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;mkdir dir="${doc.dir}"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;mkdir dir="${junit.build.dir}"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;mkdir dir="${junit.report.dir}"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="compile" depends="init" description="compile source"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;编译源码&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;javac srcdir="${src.dir}" includeantruntime="false" destdir="${build.dir}" verbose="true"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${project.lib.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/javac&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br /><br /><br />&nbsp;&nbsp; &nbsp;&lt;target name="api-doc" depends="compile" description="build javadoc"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;生成api-doc帮助文档&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;javadoc<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; destdir="${doc.dir.api}"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; author="true"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version="true"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use="true"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; windowtitle="${jar.prefix-name} API"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sourcepath="${src.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &#169; 2012 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${project.lib.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/javadoc&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="junit-javac" depends="api-doc" description="junit test case compile"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;编译junit&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;javac destdir="${junit.build.dir}" srcdir="${junit.src.dir}" fork="false" includeantruntime="false"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${project.lib.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/javac&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="junit-run" depends="junit-javac" description="junit test case execute"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;运行单元测试&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;junit printsummary="yes" haltonfailure="false"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;pathelement location="${junit.build.dir}"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${project.lib.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;formatter type="xml"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;batchtest todir="${junit.report.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${junit.src.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;include name="**/*Test.java"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/batchtest&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/junit&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="junit-report" depends="junit-run" description="junit test case report"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;生成单元测试报告&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;junitreport todir="${junit.report.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${junit.report.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;include name="**/*.xml"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;report format="frames" todir="${junit.report.dir}/html"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/junitreport&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="junit-doc" depends="junit-report" description="build javadoc"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;生成junit-doc帮助文档&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;javadoc<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; destdir="${junit.doc.dir}"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; author="true"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version="true"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use="true"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; windowtitle="Junit Test API"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sourcepath="${junit.src.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${project.lib.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/classpath&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &#169; 2012 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/javadoc&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="package" depends="api-doc" description="package"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用jar打包编译后的class文件&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;jar destfile="${dist.dir}/${jar.prefix-name}-${jar.version}.jar" includes="**/*.class" basedir="${build.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/jar&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用zip打包源码&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;zip destfile="${dist.dir}/${jar.prefix-name}-source.zip" basedir="${src.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;exclude name="**/*.class"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/zip&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用zip打包javadoc&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;zip destfile="${dist.dir}/${jar.prefix-name}-doc.zip" basedir="${doc.dir.api}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/zip&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用war打war包&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;war destfile="${dist.dir}/${jar.prefix-name}.war" webxml="${basedir}/WebRoot/WEB-INF/web.xml"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${basedir}/WebRoot"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;include name="**/*.*"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;!--<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;lib dir="${basedir}/WebRoot/WEB-INF/lib"&gt;&lt;/lib&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;classes dir="${basedir}/WebRoot/WEB-INF/classes"&gt;&lt;/classes&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;--&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/war&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="junit-package" depends="junit-doc" description="junit-package"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;打包&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用jar打包编译后的class文件&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;jar destfile="${dist.dir}/${jar.prefix-name}-${jar.version}.jar" includes="**/*.class" basedir="${build.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/jar&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用zip打包源码&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;zip destfile="${dist.dir}/${jar.prefix-name}-source.zip" basedir="${src.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;exclude name="**/*.class"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/zip&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用zip打包javadoc&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;zip destfile="${dist.dir}/${jar.prefix-name}-doc.zip" basedir="${doc.dir.api}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/zip&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用war打war包&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;war destfile="${dist.dir}/${jar.prefix-name}.war" webxml="${basedir}/WebRoot/WEB-INF/web.xml"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;fileset dir="${basedir}/WebRoot"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;include name="**/*.*"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;!--<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;lib dir="${basedir}/WebRoot/WEB-INF/lib"&gt;&lt;/lib&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;classes dir="${basedir}/WebRoot/WEB-INF/classes"&gt;&lt;/classes&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;--&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/war&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用jar打junit单元测试编译好的class文件&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;jar destfile="${dist.dir}/${jar.prefix-name}-junit-${jar.version}.jar" includes="**/*.class" basedir="${junit.build.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/jar&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用zip打junit单元测试源文件&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;zip destfile="${dist.dir}/${jar.prefix-name}-junit-source.zip" basedir="${junit.src.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;exclude name="**/*.class"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/zip&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;使用zip打junit单元测试测试报告&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;zip destfile="${dist.dir}/junit-report.zip" basedir="${junit.report.dir}/html"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/zip&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="clean"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;清理项目&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;delete dir="${build.dir}" includeemptydirs="true"&gt;&lt;/delete&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;delete dir="${doc.dir}" includeemptydirs="true"&gt;&lt;/delete&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;delete dir="${junit.dir}" includeemptydirs="true"&gt;&lt;/delete&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="mail"&nbsp; description="use java mail send mail message" depends="clean"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;将打包的文件email发送&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;mail <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;mailhost="${mailhost}" <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;mailport="25" <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;subject="${mailsubject}" &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;charset="utf-8"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;user="${username}"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;password="${password}"<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;from address="${mailfrom}"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;to address="${mailto}"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;message&gt;使用Ant自助构建项目测试打包文档&lt;/message&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;attachments&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${dist.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.*"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;/attachments&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/mail&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="wget" depends="mail"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;下载tomcat&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;get dest="${tomcat.dir}" verbose="true"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;url url="${tomcat.download.url}"/&gt; <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/get&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="unzip" depends="wget"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;解压tomcat&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;unzip src="${tomcat.dir}/apache-tomcat-${tomcat.version}.zip" dest="${tomcat.dir}"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/unzip&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="copy" depends="unzip"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;拷贝war包到tomcat中部署&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;copy file="${dist.dir}/${jar.prefix-name}.war" tofile="${tomcat.dir}/apache-tomcat-${tomcat.version}/webapps/${jar.prefix-name}.war"/&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="startup" depends="copy"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;echo&gt;启动tomcat web容器&lt;/echo&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;exec executable="${tomcat.dir}/apache-tomcat-${tomcat.version}/bin/startup.bat"&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;env key="CATALINA_HOME" path="${tomcat.dir}/apache-tomcat-${tomcat.version}/"/&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/exec&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="run" depends="package,startup" description="不存在单元测试时执行的任务"&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&lt;target name="junitrun" depends="junit-package,startup" description="存在单元测试时执行的任务"&gt;<br />&nbsp;&nbsp; &nbsp;&lt;/target&gt;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;<br />&lt;/project&gt;</div><div>构建控制台日志<br /><div>init:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 项目初始化设置<br />&nbsp;&nbsp; [delete] Deleting directory D:\workspace\Ant1\classes<br />&nbsp;&nbsp; [delete] Deleting directory D:\workspace\Ant1\dist<br />&nbsp;&nbsp; [delete] Deleting directory D:\workspace\Ant1\doc<br />&nbsp;&nbsp; [delete] Deleting directory D:\workspace\Ant1\junit<br />&nbsp;&nbsp;&nbsp; [mkdir] Created dir: D:\workspace\Ant1\classes<br />&nbsp;&nbsp;&nbsp; [mkdir] Created dir: D:\workspace\Ant1\dist<br />&nbsp;&nbsp;&nbsp; [mkdir] Created dir: D:\workspace\Ant1\doc<br />&nbsp;&nbsp;&nbsp; [mkdir] Created dir: D:\workspace\Ant1\junit\classes<br />&nbsp;&nbsp;&nbsp; [mkdir] Created dir: D:\workspace\Ant1\junit\report<br />compile:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 编译源码<br />&nbsp;&nbsp;&nbsp; [javac] Compiling 3 source files to D:\workspace\Ant1\classes<br />junit-javac:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 编译junit<br />&nbsp;&nbsp;&nbsp; [javac] Compiling 1 source file to D:\workspace\Ant1\junit\classes<br />junit-run:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 运行单元测试<br />&nbsp;&nbsp;&nbsp; [junit] Running com.junit.test.OtherTest<br />&nbsp;&nbsp;&nbsp; [junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.027 sec<br />junit-report:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 生成单元测试报告<br />[junitreport] Processing D:\workspace\Ant1\junit\report\TESTS-TestSuites.xml to C:\Users\scott\AppData\Local\Temp\null1056173236<br />[junitreport] Loading stylesheet jar:file:/E:/apache-ant-1.8.4/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl<br />[junitreport] Transform time: 334ms<br />[junitreport] Deleting: C:\Users\scott\AppData\Local\Temp\null1056173236<br />doc:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 生成帮助文档<br />&nbsp; [javadoc] Generating Javadoc<br />&nbsp; [javadoc] Javadoc execution<br />&nbsp; [javadoc] 正在创建目标目录： "D:\workspace\Ant1\doc\api\"<br />&nbsp; [javadoc] 正在装入软件包 com.ant.lesson1 的源文件...<br />&nbsp; [javadoc] 正在构造 Javadoc 信息...<br />&nbsp; [javadoc] 标准 Doclet 版本 1.6.0_25<br />&nbsp; [javadoc] 正在构建所有软件包和类的树...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\Main.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\MyHttpServlet.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\SimpleTask.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\package-frame.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\package-summary.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\package-tree.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\constant-values.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\serialized-form.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\class-use\SimpleTask.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\class-use\MyHttpServlet.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\class-use\Main.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\com/ant/lesson1/\package-use.html...<br />&nbsp; [javadoc] 正在构建所有软件包和类的索引...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\overview-tree.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\index-all.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\deprecated-list.html...<br />&nbsp; [javadoc] 正在构建所有类的索引...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\allclasses-frame.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\allclasses-noframe.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\index.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\help-doc.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\stylesheet.css...<br />&nbsp; [javadoc] Generating Javadoc<br />&nbsp; [javadoc] Javadoc execution<br />&nbsp; [javadoc] 正在创建目标目录： "D:\workspace\Ant1\doc\api\junit\"<br />&nbsp; [javadoc] 正在装入软件包 com.junit.test 的源文件...<br />&nbsp; [javadoc] 正在构造 Javadoc 信息...<br />&nbsp; [javadoc] 标准 Doclet 版本 1.6.0_25<br />&nbsp; [javadoc] 正在构建所有软件包和类的树...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\com/junit/test/\OtherTest.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\com/junit/test/\package-frame.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\com/junit/test/\package-summary.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\com/junit/test/\package-tree.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\constant-values.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\com/junit/test/\class-use\OtherTest.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\com/junit/test/\package-use.html...<br />&nbsp; [javadoc] 正在构建所有软件包和类的索引...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\overview-tree.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\index-all.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\deprecated-list.html...<br />&nbsp; [javadoc] 正在构建所有类的索引...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\allclasses-frame.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\allclasses-noframe.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\index.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\help-doc.html...<br />&nbsp; [javadoc] 正在生成 D:\workspace\Ant1\doc\api\junit\stylesheet.css...<br />package:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 打包<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [jar] Building jar: D:\workspace\Ant1\dist\cms-1.0.jar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [zip] Building zip: D:\workspace\Ant1\dist\cms-source.zip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [zip] Building zip: D:\workspace\Ant1\dist\cms-doc.zip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [jar] Building jar: D:\workspace\Ant1\dist\cms-junit-1.0.jar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [zip] Building zip: D:\workspace\Ant1\dist\cms-junit-source.zip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [zip] Building zip: D:\workspace\Ant1\dist\junit-report.zip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [war] Building war: D:\workspace\Ant1\dist\cms.war<br />clean:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 清理项目<br />&nbsp;&nbsp; [delete] Deleting directory D:\workspace\Ant1\classes<br />&nbsp;&nbsp; [delete] Deleting directory D:\workspace\Ant1\doc<br />&nbsp;&nbsp; [delete] Deleting directory D:\workspace\Ant1\junit<br />mail:<br />&nbsp;&nbsp;&nbsp;&nbsp; [echo] 将打包的文件email发送<br />&nbsp;&nbsp;&nbsp;&nbsp; [mail] Sending email: Test build</div></div><div>最终编译后的目录为 <br /><img src="http://img.my.csdn.net/uploads/201209/05/1346813687_5013.jpg" alt="" /></div><img src ="http://www.blogjava.net/sxyx2008/aggbug/387111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2012-09-05 16:26 <a href="http://www.blogjava.net/sxyx2008/archive/2012/09/05/387111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Egit 插件更新地址</title><link>http://www.blogjava.net/sxyx2008/archive/2012/03/21/372384.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Wed, 21 Mar 2012 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2012/03/21/372384.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/372384.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2012/03/21/372384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/372384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/372384.html</trackback:ping><description><![CDATA[<div>eclipse之git插件egit<br />在线安装地址:<a href="http://download.eclipse.org/egit/updates">http://download.eclipse.org/egit/updates</a></div><img src ="http://www.blogjava.net/sxyx2008/aggbug/372384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2012-03-21 17:29 <a href="http://www.blogjava.net/sxyx2008/archive/2012/03/21/372384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TsovWeather wordpress插件</title><link>http://www.blogjava.net/sxyx2008/archive/2011/12/15/366435.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Thu, 15 Dec 2011 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2011/12/15/366435.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/366435.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2011/12/15/366435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/366435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/366435.html</trackback:ping><description><![CDATA[<div><span style="color: #555555; font-family: 'Lucida Grande', Verdana, 'Bitstream Vera Sans', Arial, sans-serif; font-size: 13px; line-height: 22px; background-color: #ffffff; ">这是一个由SIMONSU开发的免费天气插件。目前支持中国国内所有城市。可根据访客IP自动获取所在城市的天气。目前已开发成wordpress插件（Widget工具）的方式，方便一些朋友安装。 使用方法：1、下载此插件并上传到wp-content\plugins目录中；2、登录网站后台安装此插件；3、然后进入&#8220;外观&#8221;，&#8220;小工具&#8221;，把&#8220;Tsov Weather&#8221; widget小工具拖到右侧即可。<br /></span><div><a href="http://wordpress.org/extend/plugins/tsovweather/">http://wordpress.org/extend/plugins/tsovweather/</a></div></div><img src ="http://www.blogjava.net/sxyx2008/aggbug/366435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2011-12-15 14:51 <a href="http://www.blogjava.net/sxyx2008/archive/2011/12/15/366435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Google Weather API查询天气预报</title><link>http://www.blogjava.net/sxyx2008/archive/2011/12/15/366434.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Thu, 15 Dec 2011 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2011/12/15/366434.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/366434.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2011/12/15/366434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/366434.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/366434.html</trackback:ping><description><![CDATA[<div><div><div><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">使用Google Weather API查询天气预报 收藏Google Weather API 只支持美国地区使用邮政编码进行查询,例如:</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/api?hl=zh-cn&amp;weather=94043</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">(94043 为 山景城, 美国加州 的邮政编码)</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">而除了美国以外的地区需要使用经纬度坐标作为参数才能执行 Google Weather API, 例如:</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/api?hl=zh-cn&amp;weather=,,,30670000,104019996</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">(30670000,104019996 为 成都, 中国大陆 的经纬度坐标)</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">当然,也可能通行城市名称的汉语拼音来查询,例如:以下是北京的天气</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/api?hl=zh-cn&amp;weather=Beijing</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">要其它地区的经纬度坐标,可以通过 Google API 提供的国家代码列表及相应的城市经纬度坐标列表可以查询到,以下是 Google API 提供的查询参数:</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/countries?output=xml&amp;hl=zh-cn</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">(查询 Google 所支持的所有国家的代码,并以 zh-cn 简体中文显示)</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/cities?output=xml&amp;hl=zh-cn&amp;country=cn</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/cities?country=cn</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">缺省返回的是英文, 可以增加一个参数来返回中文:</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/api?weather=Nanjing&amp;hl=zh-cn</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">取得中国的所有城市代码:</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/cities?country=cn</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">缺省返回是 JSON 格式.增加一个参数返回XML格式(Firefox 中不行)</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; list-style-type: none; list-style-image: initial; list-style-position: outside; margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; font-size: 15px; font-family: 'Microsoft Yahei', Arial, tahoma, sans-serif; line-height: 24px; text-align: left; background-color: #ffffff; ">http://www.google.com/ig/cities?country=cn&amp;output=xml</p></div></div></div><img src ="http://www.blogjava.net/sxyx2008/aggbug/366434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2011-12-15 14:47 <a href="http://www.blogjava.net/sxyx2008/archive/2011/12/15/366434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log4j XML Configuration</title><link>http://www.blogjava.net/sxyx2008/archive/2011/07/18/354518.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Mon, 18 Jul 2011 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2011/07/18/354518.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/354518.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2011/07/18/354518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/354518.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/354518.html</trackback:ping><description><![CDATA[<div dir="ltr" id="content" lang="en"><span id="top" class="anchor"></span><span id="line-1" class="anchor"></span>
<p class="line867">
<h1 id="Log4j_XML_Configuration_Primer">Log4j XML Configuration Primer</h1><span id="line-2" class="anchor"></span><span id="line-3" class="anchor"></span>
<p class="line867">
<h3 id="Basic_example">Basic example</h3><span id="line-4" class="anchor"></span><span id="line-5" class="anchor"></span>
<p class="line874">Below is a basic xml configuration file for log4j that will get you started: <span id="line-6" class="anchor"></span><span id="line-7" class="anchor"></span>
<p class="line867"><span id="line-8" class="anchor"></span><span id="line-9" class="anchor"></span><span id="line-10" class="anchor"></span><span id="line-11" class="anchor"></span><span id="line-12" class="anchor"></span><span id="line-13" class="anchor"></span><span id="line-14" class="anchor"></span><span id="line-15" class="anchor"></span><span id="line-16" class="anchor"></span><span id="line-17" class="anchor"></span><span id="line-18" class="anchor"></span><span id="line-19" class="anchor"></span><span id="line-20" class="anchor"></span><span id="line-21" class="anchor"></span><span id="line-22" class="anchor"></span><span id="line-23" class="anchor"></span><span id="line-24" class="anchor"></span><span id="line-25" class="anchor"></span><pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;

&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;
  &lt;appender name="console" class="org.apache.log4j.ConsoleAppender"&gt; 
    &lt;param name="Target" value="System.out"/&gt; 
    &lt;layout class="org.apache.log4j.PatternLayout"&gt; 
      &lt;param name="ConversionPattern" value="%-5p %c{1} - %m%n"/&gt; 
    &lt;/layout&gt; 
  &lt;/appender&gt; 

  &lt;root&gt; 
    &lt;priority value ="debug" /&gt; 
    &lt;appender-ref ref="console" /&gt; 
  &lt;/root&gt;
  
&lt;/log4j:configuration&gt;</pre><span id="line-26" class="anchor"></span><span id="line-27" class="anchor"></span>
<p class="line874">This will print all debug or higher messages to the console/screen. Items of note: <span id="line-28" class="anchor"></span><span id="line-29" class="anchor"></span>
<ul><li>
<p class="line862">The appender is defined first, with a name (in this case "console"). A layout is defined for the appender (in this case <tt>&nbsp;PatternLayout&nbsp;</tt>), and a pattern is defined for the layout. What is required for the layout is layout specific, so check the javadoc description for the layout class you choose to use (<tt>&nbsp;PatternLayout&nbsp;</tt> is used most commonly). <span id="line-30" class="anchor"></span></p></li><li>No loggers are defined in this example, but the configuration for the "root" logger is defined. It is configured to level debug, and the appender named "console" is attached to it. All loggers inherit from root, so in this example, all debug or higher messages from all loggers will be printed to the console appender. <span id="line-31" class="anchor"></span><span id="line-32" class="anchor"></span></li></ul>
<p class="line867">
<h3 id="XML_Configuration_Format">XML Configuration Format</h3><span id="line-33" class="anchor"></span><span id="line-34" class="anchor"></span>
<p class="line874">In order to better understand the more detailed examples, it is useful to understand the expected format for the xml configuration files. This is defined by the log4j.dtd which is located in the log4j distribution jar in the package org.apache.log4j.xml. The contents of this file will not be listed in its entirety, so please feel free to open/print the file yourself. If you are not familiar with xml dtd file formats, then you should go find a good book on that subject first. <span id="line-35" class="anchor"></span><span id="line-36" class="anchor"></span>
<p class="line874">Near the beginning of the file is the following declaration: <span id="line-37" class="anchor"></span><span id="line-38" class="anchor"></span>
<p class="line867"><span id="line-39" class="anchor"></span><span id="line-40" class="anchor"></span><pre>&lt;!ELEMENT log4j:configuration (renderer*, appender*,(category|logger)*,root?, categoryFactory?)&gt;</pre><span id="line-41" class="anchor"></span><span id="line-42" class="anchor"></span>
<p class="line874">This element defines the expected structure of the xml configuration file: 0 or more renderer elements, followed by 0 or more appender elements, followed by 0 or more logger elements, followed by 0 or 1 root element, followed by 0 or 1 categoryFactory element. If this order is not followed, then errors will be printed by the xml parser at the time the xml file is read in. Also, as a note, the "category" element is the same as the logger element. Prior to log4j version 1.2, loggers were known as category. Much of the documentation still refers to category. Just understand that they are the same thing. <span id="line-43" class="anchor"></span><span id="line-44" class="anchor"></span>
<p class="line874">Further along in the log4j.dtd is the following declaration which defines the allowed attributes: <span id="line-45" class="anchor"></span><span id="line-46" class="anchor"></span>
<p class="line867"><span id="line-47" class="anchor"></span><span id="line-48" class="anchor"></span><span id="line-49" class="anchor"></span><span id="line-50" class="anchor"></span><span id="line-51" class="anchor"></span><span id="line-52" class="anchor"></span><pre>&lt;!ATTLIST log4j:configuration
  xmlns:log4j              CDATA #FIXED "http://jakarta.apache.org/log4j/"  
  threshold                (all|debug|info|warn|error|fatal|off|null) "null" 
  debug                    (true|false|null)  "null" 
&gt;</pre><span id="line-53" class="anchor"></span><span id="line-54" class="anchor"></span>
<ul><li>
<p class="line891"><strong>debug</strong> - Probably the most important attribute for log4:configuration, setting it to "true" will print out information as the configuration file is read and used to configure the log4j environment. Very useful when trying to fiure out why your configuration file is not doing what you expect. <span id="line-55" class="anchor"></span></p></li><li>
<p class="line891"><strong>threshold</strong> - &lt;yet to be described&gt; <span id="line-56" class="anchor"></span><span id="line-57" class="anchor"></span></p></li></ul>
<p class="line874">Understanding the expected structure of the xml configuration file makes it easier to concentrate on the specific elements one needs to configure. <span id="line-58" class="anchor"></span><span id="line-59" class="anchor"></span>
<p class="line867">
<h3 id="Appender_Configuration">Appender Configuration</h3><span id="line-60" class="anchor"></span><span id="line-61" class="anchor"></span>
<p class="line874">One can instrument all the code one writes to output useful debug trace messages, but if log4j is not configured to have at least one appender, all will be for naught. None of the useful messages will be displayed anywhere. <span id="line-62" class="anchor"></span><span id="line-63" class="anchor"></span>
<p class="line874">Looking again to the log4j.dtd, appender elements are declared to be: <span id="line-64" class="anchor"></span><span id="line-65" class="anchor"></span>
<p class="line867"><span id="line-66" class="anchor"></span><span id="line-67" class="anchor"></span><span id="line-68" class="anchor"></span><span id="line-69" class="anchor"></span><span id="line-70" class="anchor"></span><span id="line-71" class="anchor"></span><pre>&lt;!ELEMENT appender (errorHandler?, param*, layout?, filter*, appender-ref*)&gt;
&lt;!ATTLIST appender
  name          ID      #REQUIRED
  class         CDATA   #REQUIRED
&gt;</pre><span id="line-72" class="anchor"></span><span id="line-73" class="anchor"></span>
<p class="line862">An appender element must have name and class attributes. The name is the value used to reference the appender in the rest of the configuration file. The class attribute should be the fully qualified class name of the appender class to use (ie <tt>&nbsp;org.apache.log4j.ConsoleAppender&nbsp;</tt>). <span id="line-74" class="anchor"></span><span id="line-75" class="anchor"></span>
<p class="line874">An appender element can also contain child elements: <span id="line-76" class="anchor"></span><span id="line-77" class="anchor"></span>
<ul><li>
<p class="line862">0 or 1 <strong>errorHandler</strong> element - &lt;yet to be described&gt; <span id="line-78" class="anchor"></span></p></li><li>
<p class="line862">0 or more <strong>param</strong> elements - Each appender can be configured with setting specific to the functioning of the appender. This is implemented by getter and setter methods in the appender class. The param element is used to access the setter methods. The format for param elements is simple; they are atomic elements with a name attribute and a value attribute. The name attribute should be the name of the setter method with the "set" part of the method name omitted (ie method name "setTarget" would be "Target"). The value attribute is the value the setter method should be set with. <span id="line-79" class="anchor"></span></p></li><li>
<p class="line862">0 or 1 <strong>layout</strong> element - Not all appenders use or require a layout. For appenders that do, the layout element defines what layout class to use. The layout element has one attribute, class, which is the fully qualified class name of the layout class to use. Similar to the appender element, the layout element is allowed to have 0 or more param child elements. Again, the param elements are used to set specific values for the layout class, which varies based on what layout class is used. <span id="line-80" class="anchor"></span></p></li><li>
<p class="line862">0 or more <strong>filter</strong> elements - See the <strong>Filter Configuration</strong> section below for more details. <span id="line-81" class="anchor"></span></p></li><li>
<p class="line862">0 or more <strong>appender-ref</strong> elements - &lt;yet to be described&gt; <span id="line-82" class="anchor"></span><span id="line-83" class="anchor"></span></p></li></ul>
<p class="line874">So, from the above, the simple example of the appender named "console" from the basic example starts to make more sense: <span id="line-84" class="anchor"></span><span id="line-85" class="anchor"></span>
<p class="line867"><span id="line-86" class="anchor"></span><span id="line-87" class="anchor"></span><span id="line-88" class="anchor"></span><span id="line-89" class="anchor"></span><span id="line-90" class="anchor"></span><span id="line-91" class="anchor"></span><span id="line-92" class="anchor"></span><pre>  &lt;appender name="console" class="org.apache.log4j.ConsoleAppender"&gt;
    &lt;param name="Target" value="System.out"/&gt;
    &lt;layout class="org.apache.log4j.PatternLayout"&gt; 
      &lt;param name="ConversionPattern" value="%-5p %c{1} - %m%n"/&gt; 
    &lt;/layout&gt; 
  &lt;/appender&gt; </pre><span id="line-93" class="anchor"></span><span id="line-94" class="anchor"></span>
<p class="line862">The name of of the appender is "console" and this is the name that is used to refer to the appender in the rest of the configuration file. The class to use for the appender is <tt>&nbsp;org.apache.log4j.ConsoleAppender&nbsp;</tt>. <span id="line-95" class="anchor"></span><span id="line-96" class="anchor"></span>
<p class="line862">The console appender has one param element defined. Looking at the javadoc for <tt>&nbsp;ConsoleAppender&nbsp;</tt>, the <tt>&nbsp;setTarget&nbsp;</tt> method is used to choose which console stream to print messages to, System.out or System.err. The example configures the appender to use System.out. <span id="line-97" class="anchor"></span><span id="line-98" class="anchor"></span>
<p class="line862">The console appender also has a layout element defined which uses <tt>&nbsp;org.apache.log4j.PatternLayout&nbsp;</tt>. Looking at the javadoc for <tt>&nbsp;PatternLayout&nbsp;</tt>, the <tt>setConversionPattern</tt> method takes a string describing the layout for messages. The details of this format can also be found in the javadoc. <span id="line-99" class="anchor"></span><span id="line-100" class="anchor"></span>
<p class="line862">The details of the configuration for a specific appender class vary from class to class. Your best bet is to review the javadoc for the appender class you want to use. Pay particular attention to the setter property methods and the values they expect. Each setter method can be accessed using the <strong>param</strong> element in the xml configuration. <span id="line-101" class="anchor"></span><span id="line-102" class="anchor"></span>
<p class="line874">Currently, the following appender classes exist: <span id="line-103" class="anchor"></span><span id="line-104" class="anchor"></span>
<ul><li>
<p class="line891"><tt>org.apache.log4j.ConsoleAppender</tt> <a href="http://wiki.apache.org/logging-log4j/ConsoleAppender">ConsoleAppender</a> <span id="line-105" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.FileAppender</tt> <a href="http://wiki.apache.org/logging-log4j/FileAppender">FileAppender</a> <span id="line-106" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.jdbc.JDBCAppender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/JDBCAppender">JDBCAppender</a> <span id="line-107" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.AsyncAppender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/AsyncAppender">AsyncAppender</a> <span id="line-108" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.net.JMSAppender</tt> <a href="http://wiki.apache.org/logging-log4j/JMSAppender">JMSAppender</a> <span id="line-109" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.lf5.LF5Appender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/LF5Appender">LF5Appender</a> <span id="line-110" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.nt.NTEventLogAppender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/NTEventLogAppender">NTEventLogAppender</a> <span id="line-111" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.varia.NullAppender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/NullAppender">NullAppender</a> <span id="line-112" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.net.SMTPAppender</tt> <a href="http://wiki.apache.org/logging-log4j/SMTPAppender">SMTPAppender</a> <span id="line-113" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.net.SocketAppender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/SocketAppender">SocketAppender</a> <span id="line-114" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.net.SocketHubAppender</tt> <a href="http://wiki.apache.org/logging-log4j/SocketHubAppender">SocketHubAppender</a> <span id="line-115" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.net.SyslogAppender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/SyslogAppender">SyslogAppender</a> <span id="line-116" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.net.TelnetAppender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/TelnetAppender">TelnetAppender</a> <span id="line-117" class="anchor"></span></p></li><li>
<p class="line891"><tt>org.apache.log4j.WriterAppender</tt> <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/WriterAppender">WriterAppender</a> <span id="line-118" class="anchor"></span><span id="line-119" class="anchor"></span><span id="line-120" class="anchor"></span></p></li></ul>
<p class="line867">
<h3 id="Logger_Configuration">Logger Configuration</h3><span id="line-121" class="anchor"></span><span id="line-122" class="anchor"></span>
<p class="line874">Now the appenders are configured. But how to configure loggers to output messages at a certain level? How to configure loggers to output to specific appender? Welcome to logger configuration. <span id="line-123" class="anchor"></span><span id="line-124" class="anchor"></span>
<p class="line874">The most important logger you need to configure is the root logger. From the simple example, this was done with the following configuration: <span id="line-125" class="anchor"></span><span id="line-126" class="anchor"></span><span id="line-127" class="anchor"></span><span id="line-128" class="anchor"></span><span id="line-129" class="anchor"></span><span id="line-130" class="anchor"></span><pre>  &lt;root&gt; 
    &lt;priority value ="debug" /&gt; 
    &lt;appender-ref ref="console" /&gt; 
  &lt;/root&gt; </pre><span id="line-131" class="anchor"></span>
<p class="line874">The root logger is configured to output log message at level "debug" or higher to the appender named "console". All loggers inherit their settings from the root logger, so with no other configuration settings, all loggers will output all of their messages to the "console" appender automatically. This may be fine for simple debugging, but eventually more specific logger configuration is going to be required. <span id="line-132" class="anchor"></span><span id="line-133" class="anchor"></span>
<p class="line874">Looking again to the log4j.dtd, logger elements are declared to be: <span id="line-134" class="anchor"></span><span id="line-135" class="anchor"></span><span id="line-136" class="anchor"></span><span id="line-137" class="anchor"></span><span id="line-138" class="anchor"></span><span id="line-139" class="anchor"></span><span id="line-140" class="anchor"></span><pre>&lt;!ELEMENT logger (level?,appender-ref*)&gt;
&lt;!ATTLIST logger
  name          ID      #REQUIRED 
  additivity    (true|false) "true"   
&gt;</pre>
<p class="line874"><span id="line-141" class="anchor"></span><span id="line-142" class="anchor"></span>
<p class="line874">A logger element must have a name attribute. This is the name of the logger used when creating the Logger instance(usually the fully qualified class name). It can also have an optional additivity attribute. More on this later. <span id="line-143" class="anchor"></span><span id="line-144" class="anchor"></span>
<p class="line874">A logger element can also contain child elements: <span id="line-145" class="anchor"></span><span id="line-146" class="anchor"></span>
<ul><li>
<p class="line862">0 or 1 <strong>level</strong> element - This defines the level of log messages that will be allowed to be logged for this logger. Normal usage has a value of "debug", "info", "warn", "error", or "fatal". Only that level or above will be reported to the log. <span id="line-147" class="anchor"></span></p></li><li>
<p class="line862">0 or more <strong>appender-ref</strong> elements - This references a defined appender that log messages from this logger should be directed to. Appender-ref elements are simple elements that have a ref attribute. The value for this attribute should be the name of the appender. <span id="line-148" class="anchor"></span><span id="line-149" class="anchor"></span></p></li></ul>
<p class="line874">A typical logger configuration element would look similar to this: <span id="line-150" class="anchor"></span><span id="line-151" class="anchor"></span><span id="line-152" class="anchor"></span><span id="line-153" class="anchor"></span><span id="line-154" class="anchor"></span><pre>&lt;logger name="com.mycompany.apackage.MyClass"&gt;
  &lt;level value="info"/&gt; 
&lt;/logger&gt;</pre><span id="line-155" class="anchor"></span><span id="line-156" class="anchor"></span>
<p class="line867">
<h4 id="Logger_Inheritance">Logger Inheritance</h4><span id="line-157" class="anchor"></span>
<p class="line867">&lt;yet to be described&gt; <span id="line-158" class="anchor"></span><span id="line-159" class="anchor"></span>
<p class="line867">
<h4 id="Additivity">Additivity</h4><span id="line-160" class="anchor"></span>
<p class="line874">The output of a log statement of logger C will go to all the appenders in C and its ancestors. This is the meaning of the term "appender additivity". <span id="line-161" class="anchor"></span><span id="line-162" class="anchor"></span>
<p class="line874">However, if an ancestor of logger C, say P, has the additivity flag set to false, then C's output will be directed to all the appenders in C and it's ancestors upto and including P but not the appenders in any of the ancestors of P. <span id="line-163" class="anchor"></span><span id="line-164" class="anchor"></span>
<p class="line874">Loggers have their additivity flag set to true by default. <span id="line-165" class="anchor"></span><span id="line-166" class="anchor"></span>
<p class="line874">Example config; <span id="line-167" class="anchor"></span><span id="line-168" class="anchor"></span><span id="line-169" class="anchor"></span><span id="line-170" class="anchor"></span><span id="line-171" class="anchor"></span><span id="line-172" class="anchor"></span><pre>&lt;logger name="com.eatmutton.muttonsite.torque" additivity="false"&gt;
   &lt;level value="info" /&gt;
   &lt;appender-ref ref="local-torque" /&gt;
&lt;/logger&gt;</pre><span id="line-173" class="anchor"></span><span id="line-174" class="anchor"></span>
<p class="line862">Additivitiy section taken from <a class="http" href="http://logging.apache.org/log4j/docs/manual.html">http://logging.apache.org/log4j/docs/manual.html</a>. <span id="line-175" class="anchor"></span><span id="line-176" class="anchor"></span>
<p class="line867">
<h3 id="Converting_Configuration_Files_To_XML_format">Converting Configuration Files To XML format</h3><span id="line-177" class="anchor"></span>
<p class="line874">I have converted the configuration examples from the log4j manual to xml format. Hopefully people can use this to convert their own configuration files. <span id="line-178" class="anchor"></span><span id="line-179" class="anchor"></span>
<p class="line867">
<h4 id="Example_1">Example 1</h4><span id="line-180" class="anchor"></span>
<p class="line867"><span id="line-181" class="anchor"></span><span id="line-182" class="anchor"></span><span id="line-183" class="anchor"></span><span id="line-184" class="anchor"></span><span id="line-185" class="anchor"></span><span id="line-186" class="anchor"></span><span id="line-187" class="anchor"></span><span id="line-188" class="anchor"></span><span id="line-189" class="anchor"></span><span id="line-190" class="anchor"></span><pre># Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n</pre><span id="line-191" class="anchor"></span><span id="line-192" class="anchor"></span>
<p class="line867"><span id="line-193" class="anchor"></span><span id="line-194" class="anchor"></span><span id="line-195" class="anchor"></span><span id="line-196" class="anchor"></span><span id="line-197" class="anchor"></span><span id="line-198" class="anchor"></span><span id="line-199" class="anchor"></span><span id="line-200" class="anchor"></span><span id="line-201" class="anchor"></span><span id="line-202" class="anchor"></span><span id="line-203" class="anchor"></span><span id="line-204" class="anchor"></span><span id="line-205" class="anchor"></span><span id="line-206" class="anchor"></span><span id="line-207" class="anchor"></span><span id="line-208" class="anchor"></span><span id="line-209" class="anchor"></span><pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;
&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;
  &lt;!-- A1 is set to be a ConsoleAppender --&gt;
  &lt;appender name="A1" class="org.apache.log4j.ConsoleAppender"&gt;
    &lt;!-- A1 uses PatternLayout --&gt;
    &lt;layout class="org.apache.log4j.PatternLayout"&gt; 
      &lt;param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n"/&gt; 
    &lt;/layout&gt; 
  &lt;/appender&gt; 
  &lt;root&gt; 
    &lt;!-- Set root logger level to DEBUG and its only appender to A1 --&gt;
    &lt;priority value ="debug" /&gt; 
    &lt;appender-ref ref="A1" /&gt; 
  &lt;/root&gt;
&lt;/log4j:configuration&gt;</pre><span id="line-210" class="anchor"></span><span id="line-211" class="anchor"></span>
<p class="line867">
<h4 id="Example_2">Example 2</h4><span id="line-212" class="anchor"></span>
<p class="line867"><span id="line-213" class="anchor"></span><span id="line-214" class="anchor"></span><span id="line-215" class="anchor"></span><span id="line-216" class="anchor"></span><span id="line-217" class="anchor"></span><span id="line-218" class="anchor"></span><span id="line-219" class="anchor"></span><span id="line-220" class="anchor"></span><span id="line-221" class="anchor"></span><span id="line-222" class="anchor"></span><pre>log4j.rootLogger=DEBUG, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN</pre><span id="line-223" class="anchor"></span><span id="line-224" class="anchor"></span>
<p class="line867"><span id="line-225" class="anchor"></span><span id="line-226" class="anchor"></span><span id="line-227" class="anchor"></span><span id="line-228" class="anchor"></span><span id="line-229" class="anchor"></span><span id="line-230" class="anchor"></span><span id="line-231" class="anchor"></span><span id="line-232" class="anchor"></span><span id="line-233" class="anchor"></span><span id="line-234" class="anchor"></span><span id="line-235" class="anchor"></span><span id="line-236" class="anchor"></span><span id="line-237" class="anchor"></span><span id="line-238" class="anchor"></span><span id="line-239" class="anchor"></span><span id="line-240" class="anchor"></span><span id="line-241" class="anchor"></span><span id="line-242" class="anchor"></span><span id="line-243" class="anchor"></span><pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;
&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;
  &lt;appender name="A1" class="org.apache.log4j.ConsoleAppender"&gt; 
    &lt;layout class="org.apache.log4j.PatternLayout"&gt; 
      &lt;!-- Print the date in ISO 8601 format --&gt;
      &lt;param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/&gt; 
    &lt;/layout&gt; 
  &lt;/appender&gt; 
  &lt;logger name="com.foo"&gt;
    &lt;!-- Print only messages of level warn or above in the package com.foo --&gt;
    &lt;level value="warn"/&gt; 
  &lt;/logger&gt;
  &lt;root&gt; 
    &lt;priority value ="debug" /&gt; 
    &lt;appender-ref ref="A1" /&gt; 
  &lt;/root&gt;
&lt;/log4j:configuration&gt;</pre><span id="line-244" class="anchor"></span><span id="line-245" class="anchor"></span>
<p class="line867">
<h4 id="Example_3">Example 3</h4><span id="line-246" class="anchor"></span>
<p class="line867"><span id="line-247" class="anchor"></span><span id="line-248" class="anchor"></span><span id="line-249" class="anchor"></span><span id="line-250" class="anchor"></span><span id="line-251" class="anchor"></span><span id="line-252" class="anchor"></span><span id="line-253" class="anchor"></span><span id="line-254" class="anchor"></span><span id="line-255" class="anchor"></span><span id="line-256" class="anchor"></span><span id="line-257" class="anchor"></span><span id="line-258" class="anchor"></span><span id="line-259" class="anchor"></span><span id="line-260" class="anchor"></span><span id="line-261" class="anchor"></span><span id="line-262" class="anchor"></span><span id="line-263" class="anchor"></span><span id="line-264" class="anchor"></span><pre>log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n</pre><span id="line-265" class="anchor"></span><span id="line-266" class="anchor"></span>
<p class="line867"><span id="line-267" class="anchor"></span><span id="line-268" class="anchor"></span><span id="line-269" class="anchor"></span><span id="line-270" class="anchor"></span><span id="line-271" class="anchor"></span><span id="line-272" class="anchor"></span><span id="line-273" class="anchor"></span><span id="line-274" class="anchor"></span><span id="line-275" class="anchor"></span><span id="line-276" class="anchor"></span><span id="line-277" class="anchor"></span><span id="line-278" class="anchor"></span><span id="line-279" class="anchor"></span><span id="line-280" class="anchor"></span><span id="line-281" class="anchor"></span><span id="line-282" class="anchor"></span><span id="line-283" class="anchor"></span><span id="line-284" class="anchor"></span><span id="line-285" class="anchor"></span><span id="line-286" class="anchor"></span><span id="line-287" class="anchor"></span><span id="line-288" class="anchor"></span><span id="line-289" class="anchor"></span><span id="line-290" class="anchor"></span><span id="line-291" class="anchor"></span><pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;
&lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;
  &lt;appender name="stdout" class="org.apache.log4j.ConsoleAppender"&gt; 
    &lt;layout class="org.apache.log4j.PatternLayout"&gt; 
      &lt;!-- Pattern to output the caller's file name and line number --&gt;
      &lt;param name="ConversionPattern" value="%5p [%t] (%F:%L) - %m%n"/&gt; 
    &lt;/layout&gt; 
  &lt;/appender&gt; 
  &lt;appender name="R" class="org.apache.log4j.RollingFileAppender"&gt; 
    &lt;param name="file" value="example.log"/&gt;
    &lt;param name="MaxFileSize" value="100KB"/&gt;
    &lt;!-- Keep one backup file --&gt;
    &lt;param name="MaxBackupIndex" value="1"/&gt;
    &lt;layout class="org.apache.log4j.PatternLayout"&gt; 
      &lt;param name="ConversionPattern" value="%p %t %c - %m%n"/&gt; 
    &lt;/layout&gt; 
  &lt;/appender&gt; 
  &lt;root&gt; 
    &lt;priority value ="debug" /&gt; 
    &lt;appender-ref ref="stdout" /&gt; 
    &lt;appender-ref ref="R" /&gt; 
  &lt;/root&gt;
&lt;/log4j:configuration&gt;</pre><span id="line-292" class="anchor"></span><span id="line-293" class="anchor"></span>
<p class="line867">
<h3 id="Filter_Configuration">Filter Configuration</h3><span id="line-294" class="anchor"></span>
<p class="line862">Filters can be defined at appender level. For example, to filter only certain levels, the <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/LevelRangeFilter">LevelRangeFilter</a> can be used like this: <span id="line-295" class="anchor"></span><span id="line-296" class="anchor"></span>
<p class="line867"><span id="line-297" class="anchor"></span><span id="line-298" class="anchor"></span><span id="line-299" class="anchor"></span><span id="line-300" class="anchor"></span><span id="line-301" class="anchor"></span><span id="line-302" class="anchor"></span><span id="line-303" class="anchor"></span><span id="line-304" class="anchor"></span><span id="line-305" class="anchor"></span><span id="line-306" class="anchor"></span><pre>        &lt;appender name="TRACE" class="org.apache.log4j.ConsoleAppender"&gt;
                &lt;layout class="org.apache.log4j.PatternLayout"&gt;
                        &lt;param name="ConversionPattern" value="[%t] %-5p %c - %m%n" /&gt;
                &lt;/layout&gt;
                &lt;filter class="org.apache.log4j.varia.LevelRangeFilter"&gt;
                        &lt;param name="levelMin" value="DEBUG" /&gt;
                        &lt;param name="levelMax" value="DEBUG" /&gt;
                &lt;/filter&gt;
        &lt;/appender&gt;</pre><span id="line-307" class="anchor"></span><span id="line-308" class="anchor"></span>
<p class="line867">
<h3 id="Advanced_Topics">Advanced Topics</h3><span id="line-309" class="anchor"></span>
<p class="line867">&lt;yet to be described&gt; <span id="line-310" class="anchor"></span><span id="line-311" class="anchor"></span>
<p class="line867">
<h3 id="More_examples">More examples</h3><span id="line-312" class="anchor"></span>
<p class="line874">(Please feel free to add your own configuration examples here) <span id="line-313" class="anchor"></span><span id="line-314" class="anchor"></span>
<p class="line862">Note that <a class="nonexistent" href="http://wiki.apache.org/logging-log4j/TimeBasedRollingPolicy">TimeBasedRollingPolicy</a> can only be configured with xml, not log4j.properties <span id="line-315" class="anchor"></span><span id="line-316" class="anchor"></span><span id="line-317" class="anchor"></span><span id="line-318" class="anchor"></span><span id="line-319" class="anchor"></span><span id="line-320" class="anchor"></span><span id="line-321" class="anchor"></span><span id="line-322" class="anchor"></span><span id="line-323" class="anchor"></span><span id="line-324" class="anchor"></span><span id="line-325" class="anchor"></span><span id="line-326" class="anchor"></span><span id="line-327" class="anchor"></span><span id="line-328" class="anchor"></span><span id="line-329" class="anchor"></span><span id="line-330" class="anchor"></span><span id="line-331" class="anchor"></span><span id="line-332" class="anchor"></span><span id="line-333" class="anchor"></span><span id="line-334" class="anchor"></span><span id="line-335" class="anchor"></span><span id="line-336" class="anchor"></span><span id="line-337" class="anchor"></span><span id="line-338" class="anchor"></span><span id="line-339" class="anchor"></span><span id="line-340" class="anchor"></span><span id="line-341" class="anchor"></span><span id="line-342" class="anchor"></span><span id="line-343" class="anchor"></span><span id="line-344" class="anchor"></span><span id="line-345" class="anchor"></span><span id="line-346" class="anchor"></span><span id="line-347" class="anchor"></span><span id="line-348" class="anchor"></span><span id="line-349" class="anchor"></span><span id="line-350" class="anchor"></span><span id="line-351" class="anchor"></span><span id="line-352" class="anchor"></span><span id="line-353" class="anchor"></span><span id="line-354" class="anchor"></span><span id="line-355" class="anchor"></span><span id="line-356" class="anchor"></span><span id="line-357" class="anchor"></span><span id="line-358" class="anchor"></span><span id="line-359" class="anchor"></span><span id="line-360" class="anchor"></span><span id="line-361" class="anchor"></span><span id="line-362" class="anchor"></span><span id="line-363" class="anchor"></span><span id="line-364" class="anchor"></span><span id="line-365" class="anchor"></span><span id="line-366" class="anchor"></span><pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;

&lt;!-- Note that this file is refreshed by the server every 60seconds, as specified in web.xml --&gt;

&lt;log4j:configuration debug="true"&gt;

        &lt;appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender"&gt;
                &lt;!-- The active file to log to --&gt;
                &lt;param name="file" value="/applogs/myportal/portal.log" /&gt;
                &lt;param name="append" value="true" /&gt;
                &lt;param name="encoding" value="UTF-8" /&gt;

                &lt;rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"&gt;
                        &lt;!-- The file to roll to, this is a fairly intelligent parameter, if the file
                        ends in .gz, it gzips it, based on the date stamp it rolls at that time, 
                        default is yyyy-MM-dd, (rolls at midnight)
                        See: http://logging.apache.org/log4j/companions/extras/apidocs/org/apache/log4j/rolling/TimeBasedRollingPolicy.html --&gt;
                        &lt;param name="FileNamePattern" value="/applogs/myportal/portal.%d.log.gz" /&gt;
                &lt;/rollingPolicy&gt;

                &lt;layout class="org.apache.log4j.PatternLayout"&gt;
                        &lt;!-- The log message pattern --&gt;
                        &lt;param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" /&gt;
                &lt;/layout&gt;
        &lt;/appender&gt;
        
        &lt;!-- Loggers to filter out various class paths --&gt;

        &lt;logger name="org.hibernate.engine.loading.LoadContexts" additivity="false"&gt;
                &lt;level value="error"/&gt;
                &lt;appender-ref ref="ROLL" /&gt;
        &lt;/logger&gt;
        
        &lt;!-- Debugging loggers --&gt;
        
        &lt;!-- Uncomment to enable debug on calpoly code only --&gt;
        &lt;!--
        &lt;logger name="edu.calpoly"&gt;
                &lt;level value="debug"/&gt;
                &lt;appender-ref ref="ROLL" /&gt;
        &lt;/logger&gt;
        --&gt;
        
        &lt;root&gt;
                &lt;priority value="info" /&gt;
                &lt;appender-ref ref="ROLL" /&gt;
        &lt;/root&gt;
        
&lt;/log4j:configuration&gt;</pre></div><img src ="http://www.blogjava.net/sxyx2008/aggbug/354518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2011-07-18 11:24 <a href="http://www.blogjava.net/sxyx2008/archive/2011/07/18/354518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]利用 JSP 2 提供的 SimpleTagSupport 开发自定义标签</title><link>http://www.blogjava.net/sxyx2008/archive/2011/07/14/354329.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Thu, 14 Jul 2011 08:06:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2011/07/14/354329.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/354329.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2011/07/14/354329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/354329.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/354329.html</trackback:ping><description><![CDATA[<p>自定义标签库并不是 JSP 2 才出现的，JSP 1.1 版中已经增加了自定义标签库规范，自定义标签库是一种非常优秀的表现层组件技术。通过使用自定义标签库，可以在简单的标签中封装复杂的功能。</p>
<p>为什么要使用自定义标签呢？主要是为了取代丑陋的 JSP 脚本。在 HTML 页面中插入 JSP 脚本有如下几个坏处：</p>
<ul><li>JSP 脚本非常丑陋，难以阅读。</li><li>JSP 脚本和 HTML 代码混杂，维护成本高。</li><li>HTML 页面中嵌入 JSP 脚本，导致美工人员难以参与开发。</li></ul>
<p>出于以上三点的考虑，我们需要一种可在页面中使用的标签，这种标签具有和 HTML 标签类似的语法，但由可以完成 JSP 脚本的功能&#8212;&#8212;这种标签就是 JSP 自定义标签。</p>
<p>在 JSP1.1 规范中开发自定义标签库比较复杂，JSP 2 规范简化了标签库的开发，在 JSP 2 中开发标签库只需如下几个步骤：</p>
<ol><li>开发自定义标签处理类；</li><li>建立一个 *.tld 文件，每个 *.tld 文件对应一个标签库，每个标签库对应多个标签；</li><li>在 JSP 文件中使用自定义标签。</li></ol>
<p><a name="major1"><span class="atitle">开发自定义标签类</span></a></p>
<div class="ibm-container ibm-alt-header dw-container-sidebar"><a name="sidebar1"></a>
<h2>标签库和实际开发</h2>
<div class="ibm-container-body">
<p>标签库是非常重要的技术，通常来说，初学者、普通开发人员自己开发标签库的机会很少，但如果希望成为高级程序员，或者希望开发通用框架，就需要大量开发自定义标签了。所有的 MVC 框架，如 Struts 2、SpringMVC、JSF 等都提供了丰富的自定义标签。</p></div></div>
<p>当我们在 JSP 页面使用一个简单的标签时，底层实际上由标签处理类提供支持，从而可以使用简单的标签来封装复杂的功能，从而使团队更好地协作开发（能让美工人员更好地参与 JSP 页面的开发）。</p>
<p>早期 JSP 自定义标签类开发过程略微复杂一些，但 JSP 2 已经简化了这个过程，它只要自定义标签类都必须继承一个父类：javax.servlet.jsp.tagext.SimpleTagSupport，除此之外，JSP 自定义标签类还有如下要求。</p>
<ul><li>如果标签类包含属性，每个属性都有对应的 getter 和 setter 方法。</li><li>重写 doTag() 方法，这个方法负责生成页面内容。</li></ul>
<p>下面开发一个最简单的自定义标签，该标签负责在页面上输出 HelloWorld。</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">// 标签处理类，继承 SimpleTagSupport 父类
public class HelloWorldTag extends SimpleTagSupport 
{ 
    // 重写 doTag 方法，该方法在标签结束生成页面内容
    public void doTag()throws JspException, 
        IOException 
    { 
        // 获取页面输出流，并输出字符串
        getJspContext().getOut().write("Hello World"); 
    } 
} 
</pre></td></tr></tbody></table><br />
<p>上面这个标签处理类非常简单，它继承了 SimpleTagSupport 父类，并重写 doTag() 方法，而 doTag() 方法则负责输出页面内容。该标签没有属性，因此无须提供 setter 和 getter 方法。</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/index.html?ca=drs-#ibm-pcon">回页首</a></p>
<p><a name="major2"><span class="atitle">建立 TLD 文件</span></a></p>
<p>TLD 是 Tag Library Definition 的缩写，即标签库定义，文件的后缀是 tld，每个 TLD 文件对应一个标签库，一个标签库中可包含多个标签，TLD 文件也称为标签库定义文件。</p>
<p>标签库定义文件的根元素是 taglib，它可以包含多个 tag 子元素，每个 tag 子元素都定义一个标签。通常我们可以到 Web 容器下复制一个标签库定义文件，并在此基础上进行修改即可。例如 Tomcat6.0，在 webapps\examples\WEB-INF\jsp2 路径下包含了一个 jsp2-example-taglib.tld 文件，这就是示范用的标签库定义文件。</p>
<p>将该文件复制到 Web 应用的 WEB-INF/ 路径，或 WEB-INF 的任意子路径下，并对该文件进行简单修改，修改后的 mytaglib.tld 文件代码如下：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;?xml version="1.0" encoding="GBK"?&gt;
&lt;taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    version="2.0"&gt;
    &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;
    &lt;short-name&gt;mytaglib&lt;/short-name&gt;
    &lt;!-- 定义该标签库的URI --&gt;
    &lt;uri&gt;http://www.crazyit.org/mytaglib&lt;/uri&gt;
    &lt;!-- 定义第一个标签 --&gt;
    &lt;tag&gt;
        &lt;!-- 定义标签名 --&gt;
        &lt;name&gt;helloWorld&lt;/name&gt;
        &lt;!-- 定义标签处理类 --&gt;
        &lt;tag-class&gt;lee.HelloWorldTag&lt;/tag-class&gt;
        &lt;!-- 定义标签体为空 --&gt;
        &lt;body-content&gt;empty&lt;/body-content&gt;
    &lt;/tag&gt;
&lt;/taglib&gt;
</pre></td></tr></tbody></table><br />
<p>上面标签库定义文件也是一个标准的 XML 文件，该 XML 文件的根元素是 taglib 元素，因此我们每次编写标签库定义文件都直接添加该元素即可。</p>
<p>taglib 下有三个子元素：</p>
<ul><li>tlib-version：指定该标签库实现的版本，这是一个作为标识的内部版本号，对程序没有太大的作用。</li><li>short-name：该标签库的默认短名，该名称通常也没有太大的用处。</li><li>uri：这个属性非常重要，它指定该标签库的 URI，相当于指定该标签库的唯一标识。如上粗体字代码所示，JSP 页面中使用标签库时就是根据该 URI 属性来定位标签库的。</li></ul>
<p>除此之外，taglib 元素下可以包含多个 tag 元素，每个 tag 元素定义一个标签，tag 元素下至少应包含如下三个子元素：</p>
<ul><li>name：该标签库的名称，这个属性很重要，JSP 页面中就是根据该名称来使用此标签的。</li><li>tag-class：指定标签的处理类，毋庸置疑，这个属性非常重要，指定了标签由哪个 Java 类来处理。</li><li>body-content：这个属性也很重要，它指定标签体内容。该元素的值可以是如下几个： 
<ul><li>tagdependent：指定标签处理类自己负责处理标签体。</li><li>empty：指定该标签只能作用空标签使用。</li><li>scriptless：指定该标签的标签体可以是静态 HTML 元素，表达式语言，但不允许出现 JSP 脚本。</li><li>JSP：指定该标签的标签体可以使用 JSP 脚本。</li></ul></li></ul>
<p>实际上由于 JSP 2 规范不再推荐使用 JSP 脚本，所以 JSP 2 自定义标签的标签体中不能包含 JSP 脚本。所以实际上 body-content 元素的值不可以是 JSP。</p>
<p>定义了上面的标签库定义文件后，将标签库文件放在 Web 应用的 WEB-INF 路径，或任意子路径下，Java Web 规范会自动加载该文件，则该文件定义的标签库也将生效。</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/index.html?ca=drs-#ibm-pcon">回页首</a></p>
<p><a name="major3"><span class="atitle">使用标签库</span></a></p>
<p>在 JSP 页面中确定指定标签需要 2 点：</p>
<ul><li>标签库 URI：确定使用哪个标签库。</li><li>标签名：确定使用哪个标签。</li></ul>
<p>使用标签库分成以下两个步骤：</p>
<ol><li>导入标签库：使用 taglib 编译指令导入标签库，就是将标签库和指定前缀关联起来。</li><li>使用标签：在 JSP 页面中使用自定义标签。</li></ol>
<p>taglib 的语法格式如下：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;%@ taglib uri="tagliburi" prefix="tagPrefix" %&gt; 
</pre></td></tr></tbody></table><br />
<p>其中 uri 属性确定标签库的 URI，这个 URI 可以确定一个标签库。而 prefix 属性指定标签库前缀，即所有使用该前缀的标签将由此标签库处理。</p>
<p>使用标签的语法格式如下：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;tagPrefix:tagName tagAttribute=&#8221;tagValue&#8221; &#8230; &gt; 
	&lt;tagBody/&gt; 
&lt;/tagPrefix:tagName&gt; 
</pre></td></tr></tbody></table><br />
<p>如果该标签没有标签体，则可以使用如下语法格式：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;tagPrefix:tagName tagAttribute=&#8221;tagValue&#8221; &#8230; /&gt; 
</pre></td></tr></tbody></table><br />
<p>上面使用标签的语法里都包含了设置属性值，前面我们介绍的 HelloWorldTag 标签没有任何属性，所以使用该标签只需用 &lt;mytag:helloWorld/&gt; 即可。其中 mytag 是 taglib 指令为标签库指定的前缀，而 helloWorld 是标签名。</p>
<p>下面是使用 helloWorld 标签的 JSP 页面代码：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;%@ page contentType="text/html; charset=GBK"%&gt;
&lt;!-- 导入标签库，指定mytag前缀的标签，
	由http://www.crazyit.org/mytaglib的标签库处理 --&gt;
&lt;%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;自定义标签示范&lt;/title&gt;
&lt;/head&gt;
&lt;body bgcolor="#ffffc0"&gt;
&lt;h2&gt;下面显示的是自定义标签中的内容&lt;/h2&gt;
&lt;!-- 使用标签 ，其中mytag是标签前缀，根据taglib的编译指令，
	mytag前缀将由http://www.crazyit.org/mytaglib的标签库处理 --&gt;
&lt;mytag:helloWorld/&gt;&lt;BR&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre></td></tr></tbody></table><br />
<p>上面页面中第一行粗体字代码指定了 http://www.crazyit.org/mytaglib 标签库的前缀为 mytag，第二行粗体字代码表明使用 mytag 前缀对应标签库里的 helloWorld 标签。浏览该页面将看到如图 1 所示效果：</p><br /><a name="fig1"><strong>图 1. 简单标签</strong></a><br /><img alt="图 1. 简单标签" src="http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/image001.png" width="501" height="240" /> <br />
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/index.html?ca=drs-#ibm-pcon">回页首</a></p>
<p><a name="major4"><span class="atitle">带属性的标签</span></a></p>
<p>前面的简单标签既没有属性，也没有标签体，用法、功能都比较简单。实际上还有如下两种常用的标签：</p>
<ul><li>带属性的标签。</li><li>带标签体的标签。</li></ul>
<p>正如前面介绍的，带属性标签必须为每个属性提供对应的 setter 和 getter 方法。带属性标签的配置方法与简单标签也略有差别，下面介绍一个带属性标签的示例：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">public class QueryTag extends SimpleTagSupport
{
    //标签的属性
    private String driver;
    private String url;
    private String user;
    private String pass;
    private String sql;
    //执行数据库访问的对象 
    private Connection conn = null;
    private Statement stmt = null;
    private ResultSet rs = null;
    private ResultSetMetaData rsmd = null;
    //标签属性driver的setter方法
    public void setDriver(String driver) {
        this.driver = driver; 
    }
        //标签属性url的setter方法
    public void setUrl(String url) {
        this.url = url; 
    }
        //标签属性user的setter方法
    public void setUser(String user) {
        this.user = user; 
    }
        //标签属性pass的setter方法
    public void setPass(String pass) {
        this.pass = pass; 
    }
        //标签属性driver的getter方法
    public String getDriver() {
        return (this.driver); 
    }
        //标签属性url的getter方法
    public String getUrl() {
        return (this.url); 
    }
        //标签属性user的getter方法
    public String getUser() {
        return (this.user); 
    }
        //标签属性pass的getter方法
    public String getPass() {
        return (this.pass); 
    }
        //标签属性sql的getter方法
    public String getSql() {
        return (this.sql); 
    }
        //标签属性sql的setter方法
    public void setSql(String sql) {
        this.sql = sql; 
    }
    public void doTag()throws JspException,
        IOException
    {
           try
        {
            //注册驱动
            Class.forName(driver);
            //获取数据库连接
            conn = DriverManager.getConnection(url,user,pass);
            //创建Statement对象
            stmt = conn.createStatement();
            //执行查询
            rs = stmt.executeQuery(sql);
            rsmd = rs.getMetaData();
            //获取列数目
            int columnCount = rsmd.getColumnCount();
            //获取页面输出流
            Writer out = getJspContext().getOut();
            //在页面输出表格
            out.write("&lt;table border='1' bgColor='9999cc' width='400'&gt;");
            //遍历结果集
            while (rs.next())
            {
                out.write("&lt;tr&gt;");
                //逐列输出查询到的数据
                for (int i = 1 ; i &lt;= columnCount ; i++ )
                {
                    out.write("&lt;td&gt;");
                    out.write(rs.getString(i));
                    out.write("&lt;/td&gt;");
                }
                out.write("&lt;/tr&gt;");
            }
        }
        catch(ClassNotFoundException cnfe)
        {
            cnfe.printStackTrace();
            throw new JspException("自定义标签错误" + cnfe.getMessage());
        }
        catch (SQLException ex)
        {
            ex.printStackTrace();
            throw new JspException("自定义标签错误" + ex.getMessage());
        }
        finally
        {
            //关闭结果集
            try
            {
                if (rs != null)
                    rs.close();
                if (stmt != null)
                    stmt.close();
                if (conn != null)
                    conn.close();
            }
            catch (SQLException sqle)
            {
                sqle.printStackTrace();
            }
        }
    }
}
</pre></td></tr></tbody></table><br />
<p>上面这个标签稍微复杂一点，它包含了 5 个属性，如程序中粗体字代码所示，则程序需要为这 5 个属性提供 setter 和 getter 方法。</p>
<p>该标签输出的内容依然由 doTag() 方法决定，该方法会根据 SQL 语句查询数据库，并将查询结果显示在当前页面中。</p>
<p>对于有属性的标签，需要为 tag 元素增加 attribute 子元素，每个 attribute 子元素定义一个属性，attribue 子元素通常还需要指定如下几个子元素：</p>
<ul><li>name：设置属性名，子元素的值是字符串内容。</li><li>required：设置该属性是否为不需属性，该子元素的值是 true 或 false。</li><li>fragment：设置该属性是否支持 JSP 脚本、表达式等动态内容，子元素的值是 true 或 false。</li></ul>
<p>为了配置上面的 QueryTag 标签，我们需要在 mytaglib.tld 文件中增加如下配置片段：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;!-- 定义第二个标签 --&gt;
&lt;tag&gt;
    &lt;!-- 定义标签名 --&gt;
    &lt;name&gt;query&lt;/name&gt;
    &lt;!-- 定义标签处理类 --&gt;
    &lt;tag-class&gt;lee.QueryTag&lt;/tag-class&gt;
    &lt;!-- 定义标签体为空 --&gt;
    &lt;body-content&gt;empty&lt;/body-content&gt;
    &lt;!-- 配置标签属性:driver --&gt;
    &lt;attribute&gt;
        &lt;name&gt;driver&lt;/name&gt; 
        &lt;required&gt;true&lt;/required&gt;
        &lt;fragment&gt;true&lt;/fragment&gt;
    &lt;/attribute&gt;
    &lt;!-- 配置标签属性:url --&gt;
    &lt;attribute&gt;
        &lt;name&gt;url&lt;/name&gt; 
        &lt;required&gt;true&lt;/required&gt;
        &lt;fragment&gt;true&lt;/fragment&gt;
    &lt;/attribute&gt;
    &lt;!-- 配置标签属性:user --&gt;
    &lt;attribute&gt;
        &lt;name&gt;user&lt;/name&gt; 
        &lt;required&gt;true&lt;/required&gt;
        &lt;fragment&gt;true&lt;/fragment&gt;
    &lt;/attribute&gt;
    &lt;!-- 配置标签属性:pass --&gt;
    &lt;attribute&gt;
        &lt;name&gt;pass&lt;/name&gt; 
        &lt;required&gt;true&lt;/required&gt;
        &lt;fragment&gt;true&lt;/fragment&gt;
    &lt;/attribute&gt;
    &lt;!-- 配置标签属性:sql --&gt;
    &lt;attribute&gt;
        &lt;name&gt;sql&lt;/name&gt; 
        &lt;required&gt;true&lt;/required&gt;
        &lt;fragment&gt;true&lt;/fragment&gt;
    &lt;/attribute&gt;
&lt;/tag&gt;
</pre></td></tr></tbody></table><br />
<p>上面 5 行粗体字代码分别为该标签配置了 driver、url、user、pass 和 sql 等 5 个属性，并指定这 5 个属性都是必填属性、而且属性值支持动态内容。</p>
<p>配置完毕后，就可在页面中使用标签，先导入标签库，然后使用标签。使用标签的 JSP 页面片段如下：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;!-- 导入标签库，指定mytag前缀的标签，
    由http://www.crazyit.org/mytaglib的标签库处理 --&gt;
&lt;%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%&gt;
...
&lt;!-- 其他HTML内容 --&gt;
&lt;!-- 使用标签 ，其中mytag是标签前缀，根据taglib的编译指令，
    mytag前缀将由http://www.crazyit.org/mytaglib的标签库处理 --&gt;
&lt;mytag:query
    driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/javaee"
    user="root"
    pass="32147"
    sql="select * from newsinf"/&gt;
</pre></td></tr></tbody></table><br />
<p>在浏览器中浏览该页面，效果如图 2 所示。</p><br /><a name="fig2"><strong>图 2. 使用带属性的标签执行查询</strong></a><br /><img alt="图 2. 使用带属性的标签执行查询" src="http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/image002.png" width="513" height="293" /> <br />
<p>图 2 中看到从数据库里查询到 2 条记录，当然这也需要底层 javaee 数据库里包含 newsinf 数据表，且该数据表里包含这两条记录才行。</p>
<p>在 JSP 页面中只需要使用简单的标签，即可完成&#8220;复杂&#8221;的功能：执行数据库查询，并将查询结果在页面上以表格形式显示。这也正是自定义标签库的目的&#8212;&#8212;以简单的标签，隐藏复杂的逻辑。</p>
<p>当然，并不推荐在标签处理类中访问数据库，因为标签库是表现层组件，它不应该包含任何业务逻辑实现代码，更不应该执行数据库访问，它只应该负责显示逻辑。</p>
<div class="ibm-alternate-rule">
<hr />
</div>
<p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link" href="http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/index.html?ca=drs-#ibm-pcon">回页首</a></p>
<p><a name="major5"><span class="atitle">带标签体的标签</span></a></p>
<p>带标签体的标签，可以在标签内嵌入其他内容（包括静态的 HTML 内容和动态的 JSP 内容），通常用于完成一些逻辑运算，例如判断和循环等。下面以一个迭代器标签为示例，介绍带标签体标签的开发过程。</p>
<p>一样先定义一个标签处理类，该标签处理类的代码如下：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">public class IteratorTag extends SimpleTagSupport
{
    //标签属性，用于指定需要被迭代的集合
    private String collection;
    //标签属性，指定迭代集合元素，为集合元素指定的名称
    private String item;
    //collection属性的setter和getter方法
    public void setCollection(String collection)
    {
        this.collection = collection;
    }
    public String getCollection()
    {
        return this.collection;
    }
    //item属性的setter和getter方法
    public void setItem(String item)
    {
        this.item = item;
    }
    public String getItem()
    {
        return this.item;
    }
    //标签的处理方法，简单标签处理类只需要重写doTag方法
    public void doTag() throws JspException, IOException
    {
        //从page scope中获取属性名为collection的集合
        Collection itemList = (Collection)getJspContext().
            getAttribute(collection);
        //遍历集合
        for (Object s : itemList)
        {
            //将集合的元素设置到page 范围
            getJspContext().setAttribute(item, s );
            //输出标签体
            getJspBody().invoke(null);
        }
    }
}
</pre></td></tr></tbody></table><br />
<p>上面标签处理类与前面处理类并没有太大的不同，该处理类包含 2 个属性，并为这两个属性提供了 setter 和 getter 方法。标签处理类的 doTag 方法首先从 page 范围内获取了指定名称的 Collection 对象，然后遍历 Collection 对象的元素，每次遍历都调用了 getJspBody() 方法，如程序中粗体字代码所示，该方法返回该标签所包含的标签体：JspFragment 对象，执行该对象的 invoke() 方法，即可输出标签体内容。该标签的作用是：遍历指定集合，每遍历一个集合元素，即输出标签体一次。</p>
<p>因为该标签的标签体不为空，配置该标签时指定 body-content 为 scriptless，该标签的配置代码片段如下代码所示：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;!-- 定义第三个标签 --&gt;
&lt;tag&gt;
    &lt;!-- 定义标签名 --&gt;
    &lt;name&gt;iterator&lt;/name&gt;
    &lt;!-- 定义标签处理类 --&gt;
    &lt;tag-class&gt;lee.IteratorTag&lt;/tag-class&gt;
    &lt;!-- 定义标签体支持JSP脚本 --&gt;
    &lt;body-content&gt;scriptless&lt;/body-content&gt;
    &lt;!-- 配置标签属性:collection --&gt;
    &lt;attribute&gt;
        &lt;name&gt;collection&lt;/name&gt; 
        &lt;required&gt;true&lt;/required&gt;
        &lt;fragment&gt;true&lt;/fragment&gt;
    &lt;/attribute&gt;
    &lt;!-- 配置标签属性:item --&gt;
    &lt;attribute&gt;
        &lt;name&gt;item&lt;/name&gt; 
        &lt;required&gt;true&lt;/required&gt;
        &lt;fragment&gt;true&lt;/fragment&gt;
    &lt;/attribute&gt;
&lt;/tag&gt;
</pre></td></tr></tbody></table><br />
<p>上面配置片段中粗体字代码指定该标签的标签体可以是静态 HTML 内容，也可以是表达式语言。</p>
<p>为了测试在 JSP 页面中使用该标签的效果，我们首先把一个 List 对象设置成 page 范围的属性，然后使用该标签来迭代输出 List 集合的全部元素。</p>
<p>JSP 页面代码如下：</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td class="code-outline"><pre class="displaycode">&lt;%@ page import="java.util.*"%&gt;
&lt;%@ page contentType="text/html; charset=GBK"%&gt;
&lt;!-- 导入标签库，指定mytag前缀的标签，
    由http://www.crazyit.org/mytaglib的标签库处理 --&gt;
&lt;%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;带标签体的标签-迭代器标签&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h2&gt;带标签体的标签-迭代器标签&lt;/h2&gt;
        &lt;hr&gt;
        &lt;%
        //创建一个List对象
        List&lt;String&gt; a = new ArrayList&lt;String&gt;();
        a.add("hello");
        a.add("world");
        a.add("java");
        //将List对象放入page范围内
        pageContext.setAttribute("a" , a);
        %&gt;
        &lt;table border="1" bgcolor="aaaadd" width="300"&gt;
        &lt;!-- 使用迭代器标签，对a集合进行迭代 --&gt;
        &lt;mytag:iterator collection="a" item="item"&gt;
            &lt;tr&gt;
                &lt;td&gt;${pageScope.item}&lt;/td&gt;
            &lt;tr&gt;
        &lt;/mytag:iterator&gt;
        &lt;/table&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre></td></tr></tbody></table><br />
<p>上面页面代码中粗体字代码即可实现通过 iterator 标签来遍历指定集合，浏览该页面即看到如图 3 所示界面：</p><br /><a name="fig3"><strong>图 3. 带标签体的标签</strong></a><br /><img alt="图 3. 带标签体的标签" src="http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/image003.png" width="519" height="325" /> <br />
<p>图 3 显示了使用 iterator 标签遍历集合元素的效果，从 iteratorTag.jsp 页面的代码来看，使用 iterator 标签遍历集合元素比使用 JSP 脚本遍历集合元素要优雅得多，这就是自定义标签的魅力。</p>
<p>实际上 JSTL 标签库提供了一套功能非常强大标签，例如普通的输出标签，像我们刚刚介绍的迭代器标签，还有用于分支判断的标签等等，JSTL（JSP 标准标签库）都有非常完善的实现。除此之外，Apache 下还有一套 DisplayTags 的标签库实现，做得也非常不错。<br />本文转自：<a href="http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/index.html">http://www.ibm.com/developerworks/cn/java/j-lo-jsp2tag/index.html</a></p><!-- CMA ID: 498211 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file:  dw-article-6.0-beta.xsl --> <img src ="http://www.blogjava.net/sxyx2008/aggbug/354329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2011-07-14 16:06 <a href="http://www.blogjava.net/sxyx2008/archive/2011/07/14/354329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻松使用git将你的项目上传至github</title><link>http://www.blogjava.net/sxyx2008/archive/2011/07/01/353496.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Fri, 01 Jul 2011 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2011/07/01/353496.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/353496.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2011/07/01/353496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/353496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/353496.html</trackback:ping><description><![CDATA[首先在github上申请一个账户<br /><div>https://github.com/</div>接下来创建项目名称什么的<br />然后根据他初始化的信息结合一下博文即可轻松将项目托管到github<br /><div>http://artori.us/git-github-usage/</div><img src ="http://www.blogjava.net/sxyx2008/aggbug/353496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2011-07-01 11:34 <a href="http://www.blogjava.net/sxyx2008/archive/2011/07/01/353496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>批量删除版本库中的.svn文件夹(win客户端)</title><link>http://www.blogjava.net/sxyx2008/archive/2011/06/17/352499.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Fri, 17 Jun 2011 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2011/06/17/352499.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/352499.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2011/06/17/352499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/352499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/352499.html</trackback:ping><description><![CDATA[<div class="postcontent">
<p><span style="line-height: 19px; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; color: rgb(85,85,85)" class="Apple-style-span"><font face="">经常需要将一些受到版本控制的文件夹挪作他用，在用版本库的同学都知道，里面的 .svn 文件夹不仅遍布整个文件夹的各个层级，而且里面东西很多，如果遇到要删除的情况，手动一一删除可就累了，小D就经常为了删这些.svn文件夹而删到手酸，吃过几次苦之后决定找出批量删除的方法&#8230; 还好，只要有需求就用解决方法，这就分享给大家吧，说不定哪天就能用上，适用于windows客户端：</font></span></p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">确定要删除的是下面这样的文件夹，此方面就适用于此，可别弄错了：</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><img style="border-right-width: 0px; max-width: 600px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="http://www.didiao.net/wp-content/uploads/auto_save_image/2011/05/163229Grz.jpg" src="http://www.didiao.net/wp-content/uploads/auto_save_image/2011/05/163229Grz.jpg" /></p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px" id="aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown"><strong>安装：</strong>建立一个文本文件，随意起个名字，例如aaa.reg（扩展名由txt改为reg，可以在txt编辑的时候点另存为&#8230;类型所有、文件名aaa.reg、保存即可），内容如下：</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Windows Registry Editor Version 5.00</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]<br />@="Delete SVN Folders"</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px" id="aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown">[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]<br />@="cmd.exe /c \"TITLE Removing SVN Folders in %1 &amp;&amp; COLOR 9A &amp;&amp; FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">&nbsp;</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">保存之后，双击这个reg文件，会提示是否允许添加到注册表，确定并提示成功后，在每一个文件夹上点击右键都会有一个&#8220;Delete SVN Folders&#8221;的选项，点击就可以删除这个文件夹及子目录里面所有的.svn文件了，很方便吧；</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><img style="border-right-width: 0px; max-width: 600px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="http://www.didiao.net/wp-content/uploads/auto_save_image/2011/05/1632312if.jpg" src="http://www.didiao.net/wp-content/uploads/auto_save_image/2011/05/1632312if.jpg" /></p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="color: rgb(128,128,128)"><em>注：&#8220;Delete SVN Folders&#8221;可根据自己的喜好修改，将文件中@="Delete SVN Folders"双引号内的内容修改成其他即可。</em></span></p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="color: rgb(128,128,128)"><em><br /></em></span></p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><strong>卸载：</strong>有同学又要问了：我这次用完了，很好！但我不想要了，点右键就出来影响美观怎么办？</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">小D考虑到了这点，现在就告诉你怎么删，刚才是添加到了注册表，那我们可以直接去注册表删：</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px">运行 regedit 进入注册表-&gt;依次打开：HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\-&gt;看到DeleteSVN文件夹-&gt;删除就可以了，也很简单吧，但小D要提醒你，注册表不要随便改动，最好备份一下啊。</p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><img style="border-right-width: 0px; max-width: 600px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="http://www.didiao.net/wp-content/uploads/auto_save_image/2011/05/163233Rwr.jpg" src="http://www.didiao.net/wp-content/uploads/auto_save_image/2011/05/163233Rwr.jpg" /></p>
<p style="padding-bottom: 0px; margin: 0px 0px 10px; padding-left: 0px; padding-right: 0px; padding-top: 0px" id="aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown">OK，分享完毕，感谢收听。<br />本人转自<a href="http://www.didiao.net/?p=455">http://www.didiao.net/?p=455</a></p></div><img src ="http://www.blogjava.net/sxyx2008/aggbug/352499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2011-06-17 12:01 <a href="http://www.blogjava.net/sxyx2008/archive/2011/06/17/352499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner 12.5 导致 Word 2003鼠标没反应的解决方法</title><link>http://www.blogjava.net/sxyx2008/archive/2010/12/08/340060.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Wed, 08 Dec 2010 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/12/08/340060.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/340060.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/12/08/340060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/340060.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/340060.html</trackback:ping><description><![CDATA[运行regedit.exe 打开注册表编辑器，定位到：HKEY_CURRENT_USER\Software\Microsoft\Office\Word\Addins\WordToRQM12.Connect 键，双击右边的&#8220;LoadBehavior&#8221;，在弹出的修改值对话框中将其值从3改为2，然后关闭注册表编辑器，重新启动Word<br />
<img src ="http://www.blogjava.net/sxyx2008/aggbug/340060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-12-08 13:58 <a href="http://www.blogjava.net/sxyx2008/archive/2010/12/08/340060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个tomcat配置多个端口[转]</title><link>http://www.blogjava.net/sxyx2008/archive/2010/10/16/335300.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Sat, 16 Oct 2010 11:23:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/10/16/335300.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/335300.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/10/16/335300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/335300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/335300.html</trackback:ping><description><![CDATA[此文转自http://linder.javaeye.com/blog/782071<br />
一、Tomcat 安装后本身提供了一个server，端口配置默认是8080，对应目录为：..\Tomcat 6.0\webapps<br />
二、Tomcat 6.0 配置多个端口，其实也就是给Tomcat增加几个server，并设置对应目录。下面以增加两个端口号为例<br />
第一步、修改server.xml[..\Tomcat 6.0\conf]<br />
（1）Tomcat提供的如下：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Catalina"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8090"</span><span style="color: #ff0000">&nbsp;maxHttpHeaderSize</span><span style="color: #0000ff">="8192"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxThreads</span><span style="color: #0000ff">="150"</span><span style="color: #ff0000">&nbsp;minSpareThreads</span><span style="color: #0000ff">="25"</span><span style="color: #ff0000">&nbsp;maxSpareThreads</span><span style="color: #0000ff">="75"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #ff0000">&nbsp;acceptCount</span><span style="color: #0000ff">="100"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionTimeout</span><span style="color: #0000ff">="20000"</span><span style="color: #ff0000">&nbsp;disableUploadTimeout</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8009"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #ff0000">&nbsp;protocol</span><span style="color: #0000ff">="AJP/1.3"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Engine&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Catalina"</span><span style="color: #ff0000">&nbsp;defaultHost</span><span style="color: #0000ff">="localhost"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Realm&nbsp;</span><span style="color: #ff0000">className</span><span style="color: #0000ff">="org.apache.catalina.realm.UserDatabaseRealm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resourceName</span><span style="color: #0000ff">="UserDatabase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Host&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="localhost"</span><span style="color: #ff0000">&nbsp;appBase</span><span style="color: #0000ff">="webapps"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unpackWARs</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;autoDeploy</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlValidation</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;xmlNamespaceAware</span><span style="color: #0000ff">="false"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Host</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Engine</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Service</span><span style="color: #0000ff">&gt;</span></div>
<br />
（2）比着上面的葫芦画下面的瓢、新增两个端口号，注意Service name、Engine name、appBase，当然了，端口号别忘了修改，以免重复。<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Catalina1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8091"</span><span style="color: #ff0000">&nbsp;maxHttpHeaderSize</span><span style="color: #0000ff">="8192"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxThreads</span><span style="color: #0000ff">="150"</span><span style="color: #ff0000">&nbsp;minSpareThreads</span><span style="color: #0000ff">="25"</span><span style="color: #ff0000">&nbsp;maxSpareThreads</span><span style="color: #0000ff">="75"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #ff0000">&nbsp;acceptCount</span><span style="color: #0000ff">="100"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionTimeout</span><span style="color: #0000ff">="20000"</span><span style="color: #ff0000">&nbsp;disableUploadTimeout</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8009"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #ff0000">&nbsp;protocol</span><span style="color: #0000ff">="AJP/1.3"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Engine&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Catalina1"</span><span style="color: #ff0000">&nbsp;defaultHost</span><span style="color: #0000ff">="localhost"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Realm&nbsp;</span><span style="color: #ff0000">className</span><span style="color: #0000ff">="org.apache.catalina.realm.UserDatabaseRealm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resourceName</span><span style="color: #0000ff">="UserDatabase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Host&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="localhost"</span><span style="color: #ff0000">&nbsp;appBase</span><span style="color: #0000ff">="webapps1"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unpackWARs</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;autoDeploy</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlValidation</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;xmlNamespaceAware</span><span style="color: #0000ff">="false"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Host</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Engine</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Service</span><span style="color: #0000ff">&gt;</span></div>
<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Service&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Catalina2"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8092"</span><span style="color: #ff0000">&nbsp;maxHttpHeaderSize</span><span style="color: #0000ff">="8192"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxThreads</span><span style="color: #0000ff">="150"</span><span style="color: #ff0000">&nbsp;minSpareThreads</span><span style="color: #0000ff">="25"</span><span style="color: #ff0000">&nbsp;maxSpareThreads</span><span style="color: #0000ff">="75"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #ff0000">&nbsp;acceptCount</span><span style="color: #0000ff">="100"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionTimeout</span><span style="color: #0000ff">="20000"</span><span style="color: #ff0000">&nbsp;disableUploadTimeout</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8009"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enableLookups</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #ff0000">&nbsp;protocol</span><span style="color: #0000ff">="AJP/1.3"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Engine&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="Catalina2"</span><span style="color: #ff0000">&nbsp;defaultHost</span><span style="color: #0000ff">="localhost"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Realm&nbsp;</span><span style="color: #ff0000">className</span><span style="color: #0000ff">="org.apache.catalina.realm.UserDatabaseRealm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resourceName</span><span style="color: #0000ff">="UserDatabase"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Host&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="localhost"</span><span style="color: #ff0000">&nbsp;appBase</span><span style="color: #0000ff">="webapps2"</span><span style="color: #ff0000">&lt;!--&nbsp;这个地方很重要，我今天没修改这个，导致webapps下的几个应用都可以用多个端口访问，结果只好将默认的webapps下的应用拷到其他地方，在${tomcat_home}/conf/下创建Catalina2/localhost/，并创建不同的xml文件将docBase指向应用所在的路径--</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unpackWARs="true"&nbsp;autoDeploy="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlValidation="false"&nbsp;xmlNamespaceAware="false"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Host</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Engine</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Service</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>第二步、创建相应的部署目录<br />
..\Tomcat 6.0\webapps1<br />
..\Tomcat 6.0\webapps2<br />
同时可以将Tomcat 6.0\webapps下的有用的复制到新建的部署目录</p>
<p>第三步、创建配置文件目录和配置文件<br />
..\Tomcat 6.0\conf\Catalina1\localhost<br />
..\Tomcat 6.0\conf\Catalina2\localhost</p>
<p><br />
host-manager.xml<br />
manager.xml</p>
<p><br />
配置文件的配置可参照..\Tomcat 6.0\conf\Catalina\localhost下的，只需要修改一下对应目录即可</p>
<p><br />
大概的配置步骤就是这些，现在可以把不同的war包放在不同的位置来访问了<br />
以上配置方法同样适合Tomcat 5.5<br />
</p>
<img src ="http://www.blogjava.net/sxyx2008/aggbug/335300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-10-16 19:23 <a href="http://www.blogjava.net/sxyx2008/archive/2010/10/16/335300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实用HTML，CSS和JavaScript速查表[转]</title><link>http://www.blogjava.net/sxyx2008/archive/2010/09/29/333407.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Wed, 29 Sep 2010 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/09/29/333407.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/333407.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/09/29/333407.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/333407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/333407.html</trackback:ping><description><![CDATA[<p><strong><strong>原文：<a href="http://news.cnblogs.com/n/74858/">http://news.cnblogs.com/n/74858/</a></strong><br />
速查表</strong>是帮你记住东西的有效工具。Web设计师和开发者经常使用的快捷键简表会使他们在网上的工作效率大大提高。</p>
<p>事实上，<strong>速查表</strong>就是来帮助我们把日常中最常用到的信息聚集起来，方便使用，使我们做工作时更有效率。有了它们，免去了你的大脑花额外时间去记忆它们的烦恼——你只需要打开简表，马上能查到你想要的信息。</p>
<p>这篇文章里，你可以看到<strong>最实用的HTML，CSS，JavaScript速查表</strong>，它们可以当作参考资料，备忘录，能帮助你以最快的速度找到想要的信息。</p>
<p>看看这些简表是不是你想要的，请在文章下面留下你的建议，谢谢！</p>
<h3>HTML</h3>
<h3><a href="http://www.gosquared.com/liquidicity/archives/51">HTML帮助手册</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922462794.png" /></p>
<h3><a href="http://www.addedbytes.com/cheat-sheets/html-cheat-sheet/">HTML速查手册</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922470151.png" /></p>
<h3><a href="http://www.addedbytes.com/cheat-sheets/html-character-entities-cheat-sheet/">HTML特殊字符速查表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922474035.png" /></p>
<h3>Dreamweaver</h3>
<h3><a href="http://www.uwsp.edu/it/ApplicationSupport/appSuppDocsImages/referenceGuides/dreamweaver-quick-reference-cs3.pdf">Dreamweaver快速参考指导</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922482619.png" /></p>
<h3>CSS</h3>
<h3><a href="http://media.smashingmagazine.com/wp-content/uploads/images/css3-cheat-sheet/css3-cheat-sheet.pdf">CSS 3 速查表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922485575.gif" /></p>
<h3><a href="http://www.christianmontoya.com/2007/11/12/blueprint-css-cheat-sheet/">Blueprint CSS</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922492385.png" /></p>
<h3><a href="http://yuiblog.com/assets/pdf/cheatsheets/css.pdf">YUI Grid CSS</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922500265.png" /></p>
<h3><a href="http://www.eddiewelker.com/wp-content/uploads/2007/09/csscheatsheet.pdf">CSS 速记简表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922503063.png" /></p>
<h3><a href="http://www.addedbytes.com/cheat-sheets/css-cheat-sheet/">CSS速查表(V2)</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922511438.png" /></p>
<h3><a href="http://www.leigeber.com/2008/04/css-shorthand-cheat-sheet/">CSS速记表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922514318.png" /></p>
<h3><a href="http://www.veign.com/downloads/guides/qrg0007.pdf">CSS2参考指导(V2)</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922523532.png" /></p>
<h3><a href="http://www.pxleyes.com/blog/2010/03/most-practical-css-cheat-sheet-yet/">实用CSS速查表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922531031.png" /></p>
<p><strong>Javascript</strong></p>
<h3><a href="http://woorkup.com/2010/06/13/jquery-1-4-2-visual-cheat-sheet/">jQuery 1.4.2 直观速查表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922540273.png" /></p>
<h3><a href="http://www.addedbytes.com/cheat-sheets/javascript-cheat-sheet/">JavaScript 速查表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922543572.png" /></p>
<h3><a href="http://wps.aw.com/wps/media/objects/2234/2287950/javascript_refererence.pdf">JavaScript参考单</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922553284.png" /></p>
<h3><a href="http://www.dannyg.com/ref/jsquickref.html">JavaScript真经</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922563944.png" /></p>
<h3><a href="http://www.wait-till-i.com/stuff/JavaScript-DOM-Cheatsheet.pdf">常用DOM方法</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922570821.png" /></p>
<h3><a href="http://www.explainth.at/en/qr/jsqr.shtml">JavaScript快速参考单</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922575373.png" /></p>
<h3><a href="http://mediavrog.net/blog/2008/06/11/mootools/mootools-12-cheat-sheet/">Mootools 1.2速查表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922583054.png" /></p>
<h3><a href="http://colorcharge.com/jquery/">jQuery速查表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091922594452.png" /></p>
<h3><a href="http://www.snook.ca/files/prototype_1.5.0_snookca.pdf">Prototype速查表</a></h3>
<p style="text-align: center"><img alt="" src="http://pic002.cnblogs.com/img/caosainan/201009/2010091923001680.png" /></p>
<p>希望你能喜欢我收集到的这些速查表，并请分享给你的做开发工作的朋友们。</p>
<p id="source">[英文出处]：<a href="http://technologytosoftware.com/css-javascript-cheat-sheet.html">Most Useful Cheat Sheet For HTML, CSS and Javascript</a></p>
 <img src ="http://www.blogjava.net/sxyx2008/aggbug/333407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-09-29 16:46 <a href="http://www.blogjava.net/sxyx2008/archive/2010/09/29/333407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jboss下部署配置spring jndi</title><link>http://www.blogjava.net/sxyx2008/archive/2010/09/08/331382.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Wed, 08 Sep 2010 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/09/08/331382.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/331382.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/09/08/331382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/331382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/331382.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;环境：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jboss-4.2.3.GA<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spring2.5.6<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;去jboss官方下载jboss服务器，<a href="http://www.jboss.org/jbossas/downloads/">http://www.jboss.org/jbossas/downloads/</a>。建议下载jboss-4.2.3.GA这个版本的jboss，个人感觉还是这个版本的jboss比较稳定<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解压下载下来的jboss压缩文件，笔者解压到D:\jboss-4.2.3.GA<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;笔者以oracle数据库来说明如何在jboss下配置jndi&nbsp;以及整合spring<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拷贝oracle-ds文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;去D:\jboss-4.2.3.GA\docs\examples\jca目录下拷贝oracle-ds文件到D:\jboss-4.2.3.GA\server\default\deploy目录下改名即可<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大致内容如下：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">datasources</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">local-tx-datasource</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">jndi-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">KBSDS</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">jndi-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">connection-url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jdbc:oracle:thin:@192.168.4.243:1521:future</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">connection-url</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">driver-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">oracle.jdbc.driver.OracleDriver</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">driver-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">use-java-context</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">false</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">use-java-context</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">user-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">knowledge</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">user-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">password</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">knowledge</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">password</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">min-pool-size</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">5</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">min-pool-size</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">max-pool-size</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">20</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">max-pool-size</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">exception-sorter-class-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">exception-sorter-class-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">metadata</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">type-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Oracle9i</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">type-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">metadata</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">local-tx-datasource</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">datasources</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
jndi-name：不用多说了，当然是为该jndi取一名称这里使用KBSDS<br />
其他几个属性不做过多解释<br />
use-java-context：属性默认为true，如未配置该属性或该属性配置为true，那么jboss在启动的时候jndi的名称前会加上java:&nbsp;&nbsp; 这里我们jndi的名称为KBSDS，那么未配置该属性或该属性为true的话，你在spring中使用jndi时指定的jndiName就应该为java:KBSDS，若配置为false，那么jboss服务器不会为你加上java: 你在spring中jndiName应当配置为KBSDS，即与jndi-name属性值等同。这里为了方便期间设置该属性为false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拷贝oracle驱动<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拷贝oracle驱动 class12.jar到jboss的如下目录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D:\jboss-4.2.3.GA\lib<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D:\jboss-4.2.3.GA\server\default\lib<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;切记数据库驱动拷贝到D:\jboss-4.2.3.GA\server\default\lib目录下，否则即使你jndi配置的再怎么正确都会报如下错误，该错误在jboss启动的时候并不会报出，只有在正式遇数据库进行交互的时候才会报此错误，大概错误是这样的。此处花了好长时间才解决。<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">org.springframework.transaction.CannotCreateTransactionException:&nbsp;Could&nbsp;not&nbsp;open&nbsp;JDBC&nbsp;Connection&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;transaction;&nbsp;nested&nbsp;exception&nbsp;is&nbsp;org.jboss.util.NestedSQLException:&nbsp;Could&nbsp;not&nbsp;create&nbsp;connection;&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;nested&nbsp;throwable:&nbsp;(org.jboss.resource.JBossResourceException:&nbsp;Apparently&nbsp;wrong&nbsp;driver&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;specified&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;URL:&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">:&nbsp;oracle.jdbc.driver.OracleDriver,&nbsp;url:&nbsp;jdbc:oracle:thin:@</span><span style="color: #000000">192.168</span><span style="color: #000000">.</span><span style="color: #000000">4.243</span><span style="color: #000000">:</span><span style="color: #000000">1521</span><span style="color: #000000">:future);&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;nested&nbsp;throwable:&nbsp;(org.jboss.resource.JBossResourceException:&nbsp;Could&nbsp;not&nbsp;create&nbsp;connection;&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;nested&nbsp;throwable:&nbsp;(org.jboss.resource.JBossResourceException:&nbsp;Apparently&nbsp;wrong&nbsp;driver&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;specified&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;URL:&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">:&nbsp;oracle.jdbc.driver.OracleDriver,&nbsp;url:&nbsp;jdbc:oracle:thin:@</span><span style="color: #000000">192.168</span><span style="color: #000000">.</span><span style="color: #000000">4.243</span><span style="color: #000000">:</span><span style="color: #000000">1521</span><span style="color: #000000">:future))<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:</span><span style="color: #000000">238</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:</span><span style="color: #000000">374</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:</span><span style="color: #000000">263</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:</span><span style="color: #000000">101</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:</span><span style="color: #000000">171</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:</span><span style="color: #000000">89</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:</span><span style="color: #000000">171</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:</span><span style="color: #000000">204</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;$Proxy67.managerLogin(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;com.future.knowledges.action.ManagerAction.execute(ManagerAction.java:</span><span style="color: #000000">62</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:</span><span style="color: #000000">39</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:</span><span style="color: #000000">25</span><span style="color: #000000">)<br />
</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;配置spring配置文件<br />
在applicationContext.xml中配置如下信息：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">dataSource</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.jndi.JndiObjectFactoryBean</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jndiName</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">KBSDS</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span></div>
此种方式指定jndiName为KBSDS并未java:前缀，需要你手动在jboss的jndi配置文件中设置use-java-context属性为fasle，若未设置该属性或设置为true那么此处应该是这样子的<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">dataSource</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.jndi.JndiObjectFactoryBean</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">jndiName</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">java:KBSDS</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span></div>
需要你手动加上java:前缀后面跟jboss下配置的jndi的名称<br />
其实这里的配置主要是根据jboss服务器启动时控制台给出的信息来配置的<br />
设置use-java-context为false时控制台给出的jndi信息<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">11</span><span style="color: #000000">:</span><span style="color: #000000">13</span><span style="color: #000000">:</span><span style="color: #000000">34</span><span style="color: #000000">,</span><span style="color: #000000">250</span><span style="color: #000000">&nbsp;INFO&nbsp;&nbsp;[ConnectionFactoryBindingService]&nbsp;Bound&nbsp;ConnectionManager&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">jboss.jca:service=ConnectionFactoryBinding,name=JmsXA</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;to&nbsp;JNDI&nbsp;name&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">java:JmsXA</span><span style="color: #000000">'</span><span style="color: #000000"><br />
</span><span style="color: #000000">11</span><span style="color: #000000">:</span><span style="color: #000000">13</span><span style="color: #000000">:</span><span style="color: #000000">34</span><span style="color: #000000">,</span><span style="color: #000000">359</span><span style="color: #000000">&nbsp;INFO&nbsp;&nbsp;[WrapperDataSourceService]&nbsp;Bound&nbsp;ConnectionManager&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">jboss.jca:service=DataSourceBinding,name=KBSDS</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;to&nbsp;JNDI&nbsp;name&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">KBSDS</span><span style="color: #000000">'</span><span style="color: #000000"><br />
</span><span style="color: #000000">11</span><span style="color: #000000">:</span><span style="color: #000000">13</span><span style="color: #000000">:</span><span style="color: #000000">34</span><span style="color: #000000">,</span><span style="color: #000000">406</span><span style="color: #000000">&nbsp;INFO&nbsp;&nbsp;[TomcatDeployer]&nbsp;deploy,&nbsp;ctxPath</span><span style="color: #000000">=/</span><span style="color: #000000">KBS,&nbsp;warUrl</span><span style="color: #000000">=</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">/</span><span style="color: #000000">deploy</span><span style="color: #000000">/</span><span style="color: #000000">KBS.war</span><span style="color: #000000">/</span><span style="color: #000000"><br />
</span><span style="color: #000000">11</span><span style="color: #000000">:</span><span style="color: #000000">13</span><span style="color: #000000">:</span><span style="color: #000000">34</span><span style="color: #000000">,</span><span style="color: #000000">781</span><span style="color: #000000">&nbsp;INFO&nbsp;&nbsp;[[</span><span style="color: #000000">/</span><span style="color: #000000">KBS]]&nbsp;Initializing&nbsp;Spring&nbsp;root&nbsp;WebApplicationContext</span></div>
设置use-java-context为true或不设置时控制台给出的jndi信息<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">11</span><span style="color: #000000">:</span><span style="color: #000000">25</span><span style="color: #000000">:</span><span style="color: #000000">15</span><span style="color: #000000">,</span><span style="color: #000000">921</span><span style="color: #000000">&nbsp;INFO&nbsp;&nbsp;[ConnectionFactoryBindingService]&nbsp;Bound&nbsp;ConnectionManager&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">jboss.jca:service=ConnectionFactoryBinding,name=JmsXA</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;to&nbsp;JNDI&nbsp;name&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">java:JmsXA</span><span style="color: #000000">'</span><span style="color: #000000"><br />
</span><span style="color: #000000">11</span><span style="color: #000000">:</span><span style="color: #000000">25</span><span style="color: #000000">:</span><span style="color: #000000">15</span><span style="color: #000000">,</span><span style="color: #000000">984</span><span style="color: #000000">&nbsp;INFO&nbsp;&nbsp;[ConnectionFactoryBindingService]&nbsp;Bound&nbsp;ConnectionManager&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">jboss.jca:service=DataSourceBinding,name=KBSDS</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;to&nbsp;JNDI&nbsp;name&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">java:KBSDS</span><span style="color: #000000">'</span><span style="color: #000000"><br />
</span><span style="color: #000000">11</span><span style="color: #000000">:</span><span style="color: #000000">25</span><span style="color: #000000">:</span><span style="color: #000000">16</span><span style="color: #000000">,</span><span style="color: #000000">031</span><span style="color: #000000">&nbsp;INFO&nbsp;&nbsp;[TomcatDeployer]&nbsp;deploy,&nbsp;ctxPath</span><span style="color: #000000">=/</span><span style="color: #000000">KBS,&nbsp;warUrl</span><span style="color: #000000">=</span><span style="color: #000000"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">/</span><span style="color: #000000">deploy</span><span style="color: #000000">/</span><span style="color: #000000">KBS.war</span><span style="color: #000000">/</span></div>
<br />
注意对比两次控制台分别打印的信息，从中很容易发现，其实就是use-java-context属性的作用。关于该属性，大家可以去参看jboss的官方文档。这里就不细说了。<br />
到此jboss下配置jndi 以及整合spring已经成功配置起来了，接下来就是一些细化了，大家可以去查询jboss的关于jndi配置的文档。<br />
其实在jboss下配置jndi远远比在tomcat下配置jndi简单的多。<br />
总结下来就这几步<br />
拷贝jndi模板到server\default\deploy目录下，并做修改，这里面模板文件均是以数据库类型-ds.xml命名的。<br />
拷贝数据库驱动到\server\default\lib目录和jboss安装目录\lib下即可。<br />
<img src ="http://www.blogjava.net/sxyx2008/aggbug/331382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-09-08 11:33 <a href="http://www.blogjava.net/sxyx2008/archive/2010/09/08/331382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGI采用Declarative Service 的方式来实现异常解决</title><link>http://www.blogjava.net/sxyx2008/archive/2010/09/07/331269.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Tue, 07 Sep 2010 00:50:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/09/07/331269.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/331269.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/09/07/331269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/331269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/331269.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;环境描述：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eclipse3.6<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;jdk1.6<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近由于项目需求，开始学习OSGI，手头参考资料则为林昊老师的OSGI原理与最佳实践这本书。该书由于发行较早，使用3.6版本的eclipse会遇到各种错误。其中在采用Declarative Service 的方式来实现的时候按作者书上的步骤来则会报这么一个错误。和同事探讨了一下午的时间，原来是缺少一个jar。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先看下异常信息：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">org.osgi.framework.BundleException:&nbsp;The&nbsp;bundle&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">org.eclipse.equinox.ds_1.2.0.v20100507&nbsp;[29]</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;could&nbsp;not&nbsp;be&nbsp;resolved.&nbsp;Reason:&nbsp;Missing&nbsp;Constraint:&nbsp;Import</span><span style="color: #000000">-</span><span style="color: #000000">Package:&nbsp;org.eclipse.equinox.internal.util.event;&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0.0</span><span style="color: #000000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:</span><span style="color: #000000">1317</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:</span><span style="color: #000000">1301</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:</span><span style="color: #000000">319</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:</span><span style="color: #000000">374</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:</span><span style="color: #000000">1067</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:</span><span style="color: #000000">561</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:</span><span style="color: #000000">546</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:</span><span style="color: #000000">459</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:</span><span style="color: #000000">243</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:</span><span style="color: #000000">440</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:</span><span style="color: #000000">227</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:</span><span style="color: #000000">337</span><span style="color: #000000">)<br />
<br />
</span><span style="color: #000000">!</span><span style="color: #000000">ENTRY&nbsp;org.eclipse.osgi&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2010</span><span style="color: #000000">-</span><span style="color: #000000">09</span><span style="color: #000000">-</span><span style="color: #000000">07</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">08</span><span style="color: #000000">:</span><span style="color: #000000">35</span><span style="color: #000000">:</span><span style="color: #000000">43.000</span><span style="color: #000000"><br />
</span><span style="color: #000000">!</span><span style="color: #000000">MESSAGE&nbsp;Bundle&nbsp;reference:file:</span><span style="color: #000000">/</span><span style="color: #000000">D:</span><span style="color: #000000">/</span><span style="color: #000000">eclipse</span><span style="color: #000000">/</span><span style="color: #000000">plugins</span><span style="color: #000000">/</span><span style="color: #000000">org.eclipse.equinox.ds_1.</span><span style="color: #000000">2.0</span><span style="color: #000000">.v20100507.jar&nbsp;was&nbsp;not&nbsp;resolved.</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;解决方案：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在eclipse的run configurations选项卡中勾选org.eclipse.equinox.util_1.0.200.v20100503.jar包即可，org.eclipse.equinox.util为固定部分，后者随着eclipse版本的更新会有所变化。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最后完整的bundle应该是这样的：<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/sxyx2008/bundl.jpg" />
<img src ="http://www.blogjava.net/sxyx2008/aggbug/331269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-09-07 08:50 <a href="http://www.blogjava.net/sxyx2008/archive/2010/09/07/331269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2款超酷的天文软件！在家里也能遨游星际！</title><link>http://www.blogjava.net/sxyx2008/archive/2010/09/05/331076.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Sun, 05 Sep 2010 04:50:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/09/05/331076.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/331076.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/09/05/331076.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/331076.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/331076.html</trackback:ping><description><![CDATA[<p>1. <strong>Celestia </strong>- <strong>从太空看星际</strong></p>
<p><a href="http://www.ipc.me/2-astronomy-software.html" title="Flickr 上 波斯波斯 的 2009-08-18_165104"><img alt="" src="http://www.blogjava.net/images/blogjava_net/sxyx2008/s001.jpg" height="373" width="500" /><br />
</a></p>
<p>Celestia 是一款免费开放源代码软件。国内有软件介绍把它称作「宇宙穿梭机」或是「鸟瞰地球」，这都名副其实。Celestia 会通过检测操作系统语言自动切换软件语言，对中文支持良好。</p>
<p>用十字指针指向一个星球，在 Celestia 左上角即显示星球的信息。也可以像下图一样选择显示星座，就是在现实看见的同样的<a href="http://www.ipc.me/2-astronomy-software.html" target="_blank">星座</a>，没有连线，观赏感受也是不同的。Celestia 的功能多以关键字执行，刚上手也许会感觉不知所措，一时了解不到其中的趣味，只要认识了 Celestia 的基本操作，就能发觉把玩 Celestia 是一件多么有趣的事。</p>
<p>同样作为新手，波斯推荐一定要看 Celestia 的内置演示，就在帮助菜单可以找到。演示有字幕介绍星球的著名点，带你用 Celestia
遨游太阳系，从地球到月球，再去逛土星&#8230;&#8230;就像一个无影的导游在带你进行太空旅行。刚打开 Celestia，我觉得它超闷，但是看了演示后，探索
Celestia 的热情就被激发起来了。</p>
<p>Celestia 还能通过插件增强功能，不过目前插件还只有 1 个。（笑）</p>
<p>下载地址：<a href="http://www.shatters.net/celestia/download.html">http://www.shatters.net/celestia/download.html</a>&nbsp;| <a href="http://www.uushare.com/user/cemily/file/1916044">自用版本分流</a> | 35M。</p>
<p><a href="http://www.ipc.me/2-astronomy-software.html" title="Flickr 上 波斯波斯 的 2009-08-18_165820"><img alt="" src="http://www.blogjava.net/images/blogjava_net/sxyx2008/s002.jpg" height="373" width="500" /><br />
</a></p>
<p>2. <strong>Stellarium</strong> &#8211; <strong>从地球看星际</strong></p>
<p><a href="http://www.ipc.me/2-astronomy-software.html" title="Flickr 上 波斯波斯 的 2009-08-18_170956"><img alt="" src="http://www.blogjava.net/images/blogjava_net/sxyx2008/s003.jpg" height="500" width="474" /><br />
</a></p>
<p>Stellarium 非常强悍地内置了非常多国语言，光是中文就有 3 种（为什么有 3 种？）。从设置上来说，可控制的比 Celestia
更多，当然在用途上也有所出入。最不同的是，Stellarium 给你一种从自家阳台抬头望天的观赏感受，而这点 Celestia
是做不到的。Stellarium 也是免费开放源代码软件。</p>
<p><a href="http://www.ipc.me/2-astronomy-software.html" title="Flickr 上 波斯波斯 的 2009-08-18_171418"><img alt="" src="http://www.blogjava.net/images/blogjava_net/sxyx2008/s004.jpg" height="375" width="500" /><br />
</a></p>
<p>Stellarium 同样能点击星球显示信息，显示信息比 Celestia 的全面。在星座显示上，还能显示形象配图。所见区域也能选择地域而定，不过预设的中国区域太少了，找来找去才只有一个 Acheng, China。</p>
<p>用户可以通过拖拽天空看到头顶上的星际。默认是实时显示，所以波斯的截图就不是夜间版了，夜间版比较有说服力的说。背景的图，就是下图可见的树木房屋之类都是可换的。</p>
<p>不过 Stellarium 貌似对字体有要求，也许是波斯换了语言后没有设置好，如图所见的本来应该显示星球名称的地方都变成了小方块。不过跟 GDI++ 字体渲染没有冲突。</p>
<p>Stellarium 在官方主页有新手教学，比 Celestia 重视新人用户培养呢。</p>
<p>下载地址：<a href="http://www.stellarium.org/zh/">http://www.stellarium.org/zh/</a>&nbsp;| Windows 版本约 41M。</p>
<p><a href="http://www.ipc.me/2-astronomy-software.html" title="Flickr 上 波斯波斯 的 2009-08-18_171857"><img alt="" src="http://www.blogjava.net/images/blogjava_net/sxyx2008/s005.jpg" height="352" width="500" /><br />
</a></p>
<p>希望你也能从这两款软件找到你久违的<a href="http://www.ipc.me/2-astronomy-software.html" target="_blank">星空</a>吧！离题地说一句，大家要爱护环境，保护地球噢！</p>
<img src ="http://www.blogjava.net/sxyx2008/aggbug/331076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-09-05 12:50 <a href="http://www.blogjava.net/sxyx2008/archive/2010/09/05/331076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>div+css布局</title><link>http://www.blogjava.net/sxyx2008/archive/2010/08/31/330423.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Tue, 31 Aug 2010 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/08/31/330423.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/330423.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/08/31/330423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/330423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/330423.html</trackback:ping><description><![CDATA[今天发现了一个不错的css+div布局网站。学习css+div的童鞋不妨可以参考下。共50种布局。<br />
地址：<a href="http://cssdiv.net/layout/">http://cssdiv.net/layout/</a><br />
demo下载：<a title="点我下载" href="/Files/sxyx2008/layout.zip">点我下载</a><br />
截图：<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/sxyx2008/css01.jpg" width="857" height="679" /><br />
<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/sxyx2008/css02.jpg" width="857" height="679" /><br />
<img src ="http://www.blogjava.net/sxyx2008/aggbug/330423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-08-31 14:29 <a href="http://www.blogjava.net/sxyx2008/archive/2010/08/31/330423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手把手教你搭建php环境</title><link>http://www.blogjava.net/sxyx2008/archive/2010/08/17/329111.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Tue, 17 Aug 2010 08:23:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/08/17/329111.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/329111.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/08/17/329111.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/329111.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/329111.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;环境：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql-5.0.22-win32<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;php-5.2.14-Win32<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpd-2.2.16-win32-x86-openssl-0.9.8o<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindowsXP sp3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 众说周知php好用，但环境很麻烦。虽然网上有一大堆php集成好的环境。但真正使用起来还不是很好使。这里本人花了一两个小时，亲自实践搭建了php的环境。以防遗忘，特做成文档。在此分享出来。之所以做成文档，一方面，在搭建过程抓去了大量的图片，而在blog上传图片，确实是一件体力活，再者，近来本人发现blog剽窃很是猖狂。别人辛辛苦苦，写好久，他一个Ctrl+C，Ctrl+V就出自他笔了。很不尊重别人的劳动成果。只是希望在转载的时候注明原作者及出处。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相信此文档可以算是有史以来最为详细的关于php环境搭建的教程了，每一个操作步骤，都有图为证。文档达到34页，照着步骤一步一步来，保你顺利搭建php环境。不信你来瞧瞧。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a title="点我下载word文档" href="http://struts2typeconverter.googlecode.com/files/php.doc">点我下载word文档</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a title="点我下载pdf文档" href="http://struts2typeconverter.googlecode.com/files/php.pdf">点我下载pdf文档</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;</p>
<img src ="http://www.blogjava.net/sxyx2008/aggbug/329111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-08-17 16:23 <a href="http://www.blogjava.net/sxyx2008/archive/2010/08/17/329111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[求助]google code 死了吗?</title><link>http://www.blogjava.net/sxyx2008/archive/2010/07/15/326238.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Thu, 15 Jul 2010 15:19:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/07/15/326238.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/326238.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/07/15/326238.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/326238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/326238.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;各位大牛,小弟打算把自己写的一些代码提交到google code交给google提供的svn进行管理.下午折腾了一下午也没通过svn提交上去.郁闷的很.目前google code好像只支持文件上传,svn托管好像用不了.很郁闷,在公司折腾了一下午,还没搞定,心里很不爽.晚上回家后接着整,咨询了下群友,大家说需要翻墙,找了网上大名鼎鼎的"张生翻墙"还是未果.不知道大家的google code好着了么?知道的告诉俺一声.先谢过了(目前我的问题是连不上SVN,但是可以通过文件上传的方式上传文件)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QQ:184675420<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email:sxyx2008@163.com
   <img src ="http://www.blogjava.net/sxyx2008/aggbug/326238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-07-15 23:19 <a href="http://www.blogjava.net/sxyx2008/archive/2010/07/15/326238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>