﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-飞鸟JAVA-文章分类-Struts</title><link>http://www.blogjava.net/yczz/category/10238.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 29 Mar 2007 12:49:07 GMT</lastBuildDate><pubDate>Thu, 29 Mar 2007 12:49:07 GMT</pubDate><ttl>60</ttl><item><title>一步一步教你远程调用EJB </title><link>http://www.blogjava.net/yczz/articles/107061.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Wed, 28 Mar 2007 12:36:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/107061.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/107061.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/107061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/107061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/107061.html</trackback:ping><description><![CDATA[
		<p>前期准备：弄清楚weblogic（或jboss）、tomcat、JBluder（或eclipse＋MyEclipse）的使用方法，能写一个简单的基于struts框架的web工程，然后准备两台联网的电脑（局域网也可以），如果没有条件，也可以在同一台电脑上分别安装两个web服务器（例如：weblogic和tomcat）来代替，本文将采用后一种方法，采用weblogic作EJB容器，tomcat作web容器，用struts工程来调用EJB</p>
		<p>准备好了吗？让我们开始下一步</p>
		<p>第一步：写一个简单的EJB。写EJB最好用的还是JBuilder，毕竟够傻瓜化。当然作为专业人士，eclipse搭配MyEclipse是最佳选择，不过作为初学者，建议采用JBuilder。以下是本文测试所用到的EJB。</p>
		<p>remote接口：</p>
		<p>package testhello;</p>
		<p>import javax.ejb.EJBObject;</p>
		<p>public interface SayHello extends EJBObject {<br />    public String sayHello(String name) throws java.rmi.RemoteException;<br />}<br /></p>
		<p>home接口：</p>
		<p>package testhello;</p>
		<p>import javax.ejb.EJBHome;<br />import javax.ejb.CreateException;<br />import java.rmi.RemoteException;</p>
		<p>public interface SayHelloHome extends EJBHome {<br />    public SayHello create() throws CreateException, RemoteException;<br />}<br /></p>
		<p>bean类：</p>
		<p>package testhello;</p>
		<p>import javax.ejb.SessionBean;<br />import javax.ejb.SessionContext;<br />import javax.ejb.CreateException;</p>
		<p>public class SayHelloBean implements SessionBean {<br />    SessionContext sessionContext;<br />    public void ejbCreate() throws CreateException {<br />    }</p>
		<p>    public void ejbRemove() {<br />    }</p>
		<p>    public void ejbActivate() {<br />    }</p>
		<p>    public void ejbPassivate() {<br />    }</p>
		<p>
				<br />    public void setSessionContext(SessionContext sessionContext) {<br />        this.sessionContext = sessionContext;<br />    }</p>
		<p>    public String  sayHello(String name) {<br />        return "Hello "+name;<br />    }<br />}<br /></p>
		<p>如果你是采用上面两种工具来写的话，配置文件就不必考虑了</p>
		<p>第二步：利用JBuilder或eclipse将这个EJB工程编译并打包，会得到一个jar(如果你的工程名叫testhello，那么这个jar文件就是testhello.jar)文件。如果你的EJB容器（weblogic或JBoss）是在本机上，那么在JBuilder或eclipse中就可以直接鼠标右击EJB工程，来部署EJB。如果需要部署到远程服务器上，只需要通过EJB容器的控制台将testhello.jar上传到远程端，然后在EJB Modler里面按提示部署好EJB。最后，别忘了在JNDI Tree里面察看你的EJB工程的JNDI名，本例的JNDI名叫SayHello</p>
		<p>第三步：将remote接口和home接口打包成jar文件，copy到你要远程调用EJB的struts工程下的lib目录（例如：helloapp -&gt;WEB-INF -&gt;lib）</p>
		<p>第四步：将weblogic的weblogic.jar（在weblogic的安装目录－&gt;weblogic81－&gt;server－&gt;lib文件夹中）copy到tomcat安装目录下的－&gt;shared－&gt;lib文件夹中，其实这里我们需要用到的只是weblogic.jar里的几个class文件而已，不过对于初学者而言，先不必去深究到底只需要那几个class。</p>
		<p>第五步：编写一个简单的struts工程（其实这些都可以用工具生成），一下是调用EJB的HelloAction的源代码(特别要注意的是，记得要将之前第三步生成的jar包导入编辑器中，否则下面的代码编译通不过。如果你不知道导入jar包，就把那个jar包多copy一份到你的jdk安装目录 -&gt; jre-&gt; lib-&gt; ext文件夹下)</p>
		<p>package logging.actions;<br />import logging.Constants;</p>
		<p>import java.util.*;<br />import javax.servlet.ServletException;<br />import javax.servlet.RequestDispatcher;<br />import javax.servlet.http.HttpSession;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import javax.naming.Context;<br />import javax.naming.InitialContext;<br />import javax.naming.NamingException;<br />import javax.rmi.PortableRemoteObject;</p>
		<p>import org.apache.struts.action.Action;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.action.ActionMessage;<br />import org.apache.struts.action.ActionMessages;<br />import org.apache.struts.util.MessageResources;<br />import org.apache.struts.validator.DynaValidatorForm;</p>
		<p>public final class HelloAction extends Action{<br /> <br /> public ActionForward execute(ActionMapping mapping,<br />         ActionForm form,<br />         HttpServletRequest request,<br />         HttpServletResponse response)<br /> throws Exception{</p>
		<p>        InitialContext ctx=this.getInitialContext();</p>
		<p>  //查找JNDI名为SayHello的EJB组件<br />        Object obj=ctx.lookup("SayHello");</p>
		<p>
				<br />  //获得远程EJB组件的home接口的引用<br />        testhello.SayHelloHome home=(testhello.SayHelloHome)PortableRemoteObject.narrow(obj,testhello.SayHelloHome.class);</p>
		<p>
				<br />  //获得远程EJB组件的remote接口的引用<br />        testhello.SayHello hello=home.create();<br />        <br />        String name="飘然随风";<br />        String sayString=hello.sayHello(name);<br />        <br />        request.setAttribute("userName",name);<br />        request.setAttribute("passWord",sayString);<br />        request.removeAttribute(mapping.getAttribute());<br />       <br />  return mapping.findForward("loginSuccess");<br /> }<br /> </p>
		<p>/*以下方法是作用是：通过传递环境属性选择JNDI驱动和服务器的网络位置，<br />  并连接到连接到JNDI树。<br />  这是采用weblogic做EJB容器时，远程调用EJB的固定初始化模式，初学者可以死记下来<br />*/<br /> private  InitialContext getInitialContext() throws Exception {<br />  //EJB容器的地址<br />     String url = "t3://image:7001";<br />     String user = null;<br />     String password = null;<br />     Properties properties;<br />  <br />        properties = new Properties();<br />        properties.put(Context.INITIAL_CONTEXT_FACTORY,<br />                       "weblogic.jndi.WLInitialContextFactory");<br />        properties.put(Context.PROVIDER_URL, url);<br />        if (user != null) {<br />            properties.put(Context.SECURITY_PRINCIPAL, user);<br />            properties.put(Context.SECURITY_CREDENTIALS,<br />                           password == null ? "" : password);<br />        }<br />        return new javax.naming.InitialContext(properties);<br /> }<br />}</p>
		<p>第六步：如果你严格按照上面的步骤做了，那么剩下的就是同时启动weblogic和tomcat来测试了。</p>
<img src ="http://www.blogjava.net/yczz/aggbug/107061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-03-28 20:36 <a href="http://www.blogjava.net/yczz/articles/107061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat环境下，字符编码的filter</title><link>http://www.blogjava.net/yczz/articles/106473.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Mon, 26 Mar 2007 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/106473.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/106473.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/106473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/106473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/106473.html</trackback:ping><description><![CDATA[
		<p>在web.xml中，配置"Set Character Encoding" filter，可以实现客户端传入服务器端的Request对象中的数据的正确解码。</p>
		<p>我使用的filter是Craig McClanahan写的，这位仁兄大名鼎鼎，他是Struts框架的主要体系设计师和开发者，Tomcat4的主设计师和Java Web Services Developer Pack实现包的主设计师，领导着Sun的JavaServer Faces规范开发，同时也是Java EE平台的Web Layer Archiecture。filter的代码附在文后。</p>
		<p>web.xml中的配置如下：</p>
		<p>&lt;!-- GBK Encodinbg Filter definition --&gt;<br />&lt;filter&gt;<br />&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />&lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;encoding&lt;/param-name&gt;<br />&lt;param-value&gt;GBK&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/filter&gt;<br /><br />&lt;!-- GBK Encoding Filter mapping --&gt;<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br /></p>
		<br />/*<br />* Copyright 2004 The Apache Software Foundation<br />*<br />* Licensed under the Apache License, Version 2.0 (the "License");<br />* you may not use this file except in compliance with the License.<br />* You may obtain a copy of the License at<br />*<br />* http://www.apache.org/licenses/LICENSE-2.0<br />*<br />* Unless required by applicable law or agreed to in writing, software<br />* distributed under the License is distributed on an "AS IS" BASIS,<br />* WITHOUT WARRANTIES or CONDITIONS OF ANY KIND, either express or implied.<br />* See the License for the specific language governing permissions and<br />* limitations under the License.<br />*/<br /><br />package filters;<br /><br /><br />import java.io.IOException;<br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletException;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br /><br /><br />/**<br />* &lt;p&gt;Example filter that sets the character encoding to be used in parsing the<br />* incoming request, either unconditionally or only if the client did not<br />* specify a character encoding. Configuration of this filter is based on<br />* the following initialization parameters:&lt;/p&gt;<br />* &lt;ul&gt;<br />* &lt;li&gt;&lt;strong&gt;encoding&lt;/strong&gt; - The character encoding to be configured<br />* for this request, either conditionally or unconditionally based on<br />* the &lt;code&gt;ignore&lt;/code&gt; initialization parameter. This parameter<br />* is required, so there is no default.&lt;/li&gt;<br />* &lt;li&gt;&lt;strong&gt;ignore&lt;/strong&gt; - If set to "true", any character encoding<br />* specified by the client is ignored, and the value returned by the<br />* &lt;code&gt;selectEncoding()&lt;/code&gt; method is set. If set to "false,<br />* &lt;code&gt;selectEncoding()&lt;/code&gt; is called &lt;strong&gt;only&lt;/strong&gt; if the<br />* client has not already specified an encoding. By default, this<br />* parameter is set to "true".&lt;/li&gt;<br />* &lt;/ul&gt;<br />*<br />* &lt;p&gt;Although this filter can be used unchanged, it is also easy to<br />* subclass it and make the &lt;code&gt;selectEncoding()&lt;/code&gt; method more<br />* intelligent about what encoding to choose, based on characteristics of<br />* the incoming request (such as the values of the &lt;code&gt;Accept-Language&lt;/code&gt;<br />* and &lt;code&gt;User-Agent&lt;/code&gt; headers, or a value stashed in the current<br />* user's session.&lt;/p&gt;<br />*<br />* @author Craig McClanahan<br />* @version $Revision: 1.2 $ $Date: 2004/03/18 16:40:33 $<br />*/<br /><br />public class SetCharacterEncodingFilter implements Filter {<br /><br /><br />// ----------------------------------------------------- Instance Variables<br /><br /><br />/**<br />* The default character encoding to set for requests that pass through<br />* this filter.<br />*/<br />protected String encoding = null;<br /><br /><br />/**<br />* The filter configuration object we are associated with. If this value<br />* is null, this filter instance is not currently configured.<br />*/<br />protected FilterConfig filterConfig = null;<br /><br /><br />/**<br />* Should a character encoding specified by the client be ignored?<br />*/<br />protected boolean ignore = true;<br /><br /><br />// --------------------------------------------------------- Public Methods<br /><br /><br />/**<br />* Take this filter out of service.<br />*/<br />public void destroy() {<br /><br />this.encoding = null;<br />this.filterConfig = null;<br /><br />}<br /><br /><br />/**<br />* Select and set (if specified) the character encoding to be used to<br />* interpret request parameters for this request.<br />*<br />* @param request The servlet request we are processing<br />* @param result The servlet response we are creating<br />* @param chain The filter chain we are processing<br />*<br />* @exception IOException if an input/output error occurs<br />* @exception ServletException if a servlet error occurs<br />*/<br />public void doFilter(ServletRequest request, ServletResponse response,<br />FilterChain chain)<br />throws IOException, ServletException {<br /><br />// Conditionally select and set the character encoding to be used<br />if (ignore || (request.getCharacterEncoding() == null)) {<br />String encoding = selectEncoding(request);<br />if (encoding != null)<br />request.setCharacterEncoding(encoding);<br />}<br /><br />// Pass control on to the next filter<br />chain.doFilter(request, response);<br /><br />}<br /><br /><br />/**<br />* Place this filter into service.<br />*<br />* @param filterConfig The filter configuration object<br />*/<br />public void init(FilterConfig filterConfig) throws ServletException {<br /><br />this.filterConfig = filterConfig;<br />this.encoding = filterConfig.getInitParameter("encoding");<br />String value = filterConfig.getInitParameter("ignore");<br />if (value == null)<br />this.ignore = true;<br />else if (value.equalsIgnoreCase("true"))<br />this.ignore = true;<br />else if (value.equalsIgnoreCase("yes"))<br />this.ignore = true;<br />else<br />this.ignore = false;<br /><br />}<br /><br /><br />// ------------------------------------------------------ Protected Methods<br /><br /><br />/**<br />* Select an appropriate character encoding to be used, based on the<br />* characteristics of the current request and/or filter initialization<br />* parameters. If no character encoding should be set, return<br />* &lt;code&gt;null&lt;/code&gt;.<br />* &lt;p&gt;<br />* The default implementation unconditionally returns the value configured<br />* by the &lt;strong&gt;encoding&lt;/strong&gt; initialization parameter for this<br />* filter.<br />*<br />* @param request The servlet request we are processing<br />*/<br />protected String selectEncoding(ServletRequest request) {<br /><br />return (this.encoding);<br /><br />}<br /><br /><br />} <br /><img src ="http://www.blogjava.net/yczz/aggbug/106473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-03-26 17:47 <a href="http://www.blogjava.net/yczz/articles/106473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HelloWorld EJB代码编写</title><link>http://www.blogjava.net/yczz/articles/105969.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 23 Mar 2007 13:33:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/105969.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/105969.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/105969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/105969.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/105969.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#ff0000">HelloWorld EJB代码编写</font>
		</strong>
		<p>
				<br />　<strong><font color="#ff0000">　1.编写主接口程序</font></strong><br />　　在文本编辑器中编辑<font color="#ff0000">HelloHome.java</font>文件，并保存在C:\work\hello目录下，其代码为：<br />　　//本接口需要引入的类或接口<br />　　import java.rmi.RemoteException;<br />　　import javax.ejb.CreateException;<br />　　import javax.ejb.EJBHome;<br />　　//定义主接口，必须继承EJBHome <br />　　public interface HelloHome extends EJBHome {<br />　  //定义EJB创建方法<br />　　　Hello create() throws CreateException, RemoteException;<br />　　}<br />　　<strong><font color="#ff0000">2.编写远程接口程序</font></strong><br />　　在文本编辑器中编辑<font color="#ff0000">Hello.java</font>文件，并保存在C:\work\hello目录下。Hello.java文件的代码为：<br />　　//本接口需要引入的类或接口<br />　　import javax.ejb.EJBObject;<br />　　import java.rmi.RemoteException;<br />//定义远程接口，必须继承EJBObject<br />　　public interface Hello extends EJBObject {<br />　　　//定义业务逻辑方法<br />　　　public String sayHello()<br />　　　throws RemoteException;<br />　　}<br /><font color="#ff0000"><strong>3.编写Bean类实现程序</strong></font><br />　　在文件编辑器中编辑<font color="#ff0000">HelloBean.java</font>文件，并保存在C:\work\hello目录下。HellloBean.java文件的代码为：<br />　　//本类需要引入的类或接口<br />　　import javax.ejb.CreateException;<br />　　import javax.ejb.SessionBean;<br />　　import javax.ejb.SessionContext;<br />　　//实现业务逻辑，必须实现SessionBean接口<br />　　public class HelloBean implements SessionBean {<br />　　　//这是个会话EJB，声明会话上下文<br />　　　private SessionContext ctx;<br />　　　//声明字符串<br />　　　private String words;<br />　　　//接口SessionBean中定义的方法，必须实现<br />　　　public void setSessionContext(SessionContext ctx) {<br />　　　　this.ctx = ctx;<br />　　　}<br />　　　//接口SessionBean中定义的方法，必须实现<br />　　　public void ejbActivate() {<br />　　　}<br />　　　//接口SessionBean中定义的方法，必须实现<br />　　　public void ejbPassivate() {<br />　　　}<br />　　　//接口SessionBean中定义的方法，必须实现<br />　　　public void ejbRemove() {<br />　　　}<br />　　　//和主接口定义对应的方法，必须实现<br />　　　public void ejbCreate() throws CreateException {<br />　　　　words = "Hello World";<br />　　　}<br />　　　//供客户端调用的业务逻辑方法，这里只简单的打印字符串，并把字符串返回到客户端<br />　　　public String sayHello()<br />　　　{<br />　　　　System.out.println("I am in an EJB of Server ."+words);<br />　　　　return words;<br />　　　}　　}<br /><strong><font color="#ff0000">（3） EJB代码编译</font></strong><br />　　首先打开命令窗口，进入C:\work\hello目录，运行环境变量脚本程序：<br />　　　c:\work\hello&gt;c:\work\setEnv<br />　　建立build目录：<br />　　　c:\work\hello&gt;md build<br />　　执行编译命令：<br />　　　c:\work\hello&gt;java -d build Hello.java HelloHome.java HelloBean.java<br />　　其中：-d build 表示编译生成的class文件放在build目录中。<br /><font color="#ff0000">（4）EJB部署文件编写</font><br />　　部署文件是EJB的重要组成部分。简单地说，部署文件就是EJB的说明文件，这个文件由服务器容器使用，服务器根据部署文件的说明来管理EJB。<br />　　EJB部署文件是标准的XML文件，必须遵守XML的语法规则。此外，还要遵守相关的DTD规则。<br />　　部署文件到少有两个文件ejb-jar.xml和weblogic-ejb-jar.xml。前者为EJB自身的一些特征，如名称、组成等：后者是和EJB部署相关的描述。<br />　　编写部署文件：<br />　　(1)在文件编辑器中编辑ejb-jar.xml文件，并保存在C:\work\hello目录下。ejb-jar.xml文件的内容为：<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'&gt;<br />&lt;!--EJB说明文件--&gt;<br />&lt;ejb-jar&gt;<br />&lt;small-icon&gt;images/green-cube.gif&lt;/small-icon&gt;<br />&lt;enterprise-beans&gt;<br />&lt;!--定义会话EJB--&gt;<br />&lt;session&gt;<br />&lt;small-icon&gt;images/orange-cube.gif&lt;/small-icon&gt;<br />&lt;!--定义会话EJB名--&gt;<br />&lt;ejb-name&gt;MyFirstEJB&lt;/ejb-name&gt;<br />&lt;!--定义会话EJB主接口名--&gt;<br />&lt;home&gt;HelloHome&lt;/home&gt;<br />&lt;!--定义会话EJB远程接口名--&gt;<br />&lt;remote&gt;Hello&lt;/remote&gt;<br />&lt;!--定义会话EJB实现类名--&gt;<br />&lt;ejb-class&gt;HelloBean&lt;/ejb-class&gt;<br />&lt;!--定义会话EJB类型--&gt;<br />&lt;session-type&gt;Stateless&lt;/session-type&gt;<br />&lt;transaction-type&gt;Container&lt;/transaction-type&gt;<br />&lt;/session&gt;<br />&lt;/enterprise-beans&gt;<br />&lt;!--定义会话EJB装配描述--&gt;<br />&lt;assembly-descriptor&gt;<br />&lt;container-transaction&gt;<br />&lt;method&gt;<br />&lt;ejb-name&gt;MyFirstEJB&lt;/ejb-name&gt;<br />&lt;method-intf&gt;Remote&lt;/method-intf&gt;<br />&lt;method-name&gt;*&lt;/method-name&gt;<br />&lt;/method&gt;<br />&lt;trans-attribute&gt;Required&lt;/trans-attribute&gt;<br />&lt;/container-transaction&gt;<br />&lt;/assembly-descriptor&gt;<br />&lt;/ejb-jar&gt;<br />　　(2)在文件编辑器中编辑weblogic-ejb-jar.xml文件，并保存在C:\work\hello目录下。weblogic-ejb-jar.xml文件的内容为：<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB//EN' 'http://www.bea.com/servers/wls510/dtd/weblogic-ejb-jar.dtd'&gt;<br />&lt;!--EJB部署说明文件--&gt;<br />&lt;weblogic-ejb-jar&gt;<br />&lt;weblogic-enterprise-bean&gt;<br />&lt;!--EJB名--&gt;<br />&lt;ejb-name&gt;MyFirstEJB&lt;/ejb-name&gt;<br />&lt;!--定义EJB最大缓冲池--&gt;<br />&lt;caching-descriptor&gt;<br />&lt;max-beans-in-free-pool&gt;100&lt;/max-beans-in-free-pool&gt;<br />&lt;/caching-descriptor&gt;<br />&lt;!--定义EJB jndi名称--&gt;<br />&lt;jndi-name&gt;HelloHome&lt;/jndi-name&gt;<br />&lt;/weblogic-enterprise-bean&gt;<br />&lt;/weblogic-ejb-jar&gt;<br /><strong><font color="#ff0000">（5） 打包</font></strong><br />　　把上面开发的所有文件打成jar文件包。这些文件包括一三个类文件：Hello.class、HelloHome.class、HelloBean.class和部署文件：ejb-jar.xml,weblogic-ejb-jar.xml。打包时，文件放置的位置是严格要求的。具体为：*.class文件放在当前目录(即C:\work\hello\build目录下)，部署文件必须入在下一级目录Meta-inf中(即C:\work\hello\build\Meta-inf目录下)。如果EJB包含图像文件，则图像文件必须在build目录的下一级目录images中(即C:\work\hello\build\images目录下)。<br />　　具体操作步骤为：<br />　　(1)在build目录中创建Meta-inf目录，当前路径为C:\work\hello，执行：<br />　　　c:\work\hello&gt;md build\Meta-inf<br />　　(2)把部署文件拷贝到hello\Meta-inf目录下：<br />　　　c:\work\hello&gt;copy *.xml build\Meta-inf<br />　　(3)执行：<br />　　　c:\work\hello&gt;md build\images<br />　　　c:\work\hello&gt;copy *.gif build\images<br />　　当然，本例中没有使用图像文件，所以可以免去此步骤。<br />　　(4)用jar命令在build目录下打包。当前路径是c:\work\hello，运行：<br />　　　c:\work\hello&gt;cd build<br />　　　c:\work\hello\bulid&gt;jar cv0f std_myfirstejb_hello.jar META-INF *.class images<br />　　　c:\work\hello\build&gt;cd..<br />　　其中：jar是Jdk中的打包命令：cv0f是命令参数；std_myfirstejb_hello.jar是生成的文件名，由用户指定。<br />　　命令执行完后，在目录build中应该生成文件std_myfirstejb_hello.jar。<br />　　至此，打包完成。 <br /><font color="#ff0000"><strong>（6）编译生成窗口代码</strong></font><br />　　Weblogic Server提供了编译生成容器代码的工具，它是一个java程序weblogic.ejbc。在命令行窗口中执行：<br />　　c:\work\hello&gt;java weblogic.ejbc -compiler javac build\std_myfirstejb_hello.jar build\myfirstejb_hello.jar<br />　　可以看出ejbc把std_myfirstejb_hello.jar文件编译成myfirstejb_hello.jar，它包括了Weblogic Server平台可以识别的ejb容器代码。<br />　　如果运行成功，则在build目录下产生myfirstejb_hello.jar文件。</p>
<img src ="http://www.blogjava.net/yczz/aggbug/105969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-03-23 21:33 <a href="http://www.blogjava.net/yczz/articles/105969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP Struts之HTML标签库详解</title><link>http://www.blogjava.net/yczz/articles/105664.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Thu, 22 Mar 2007 14:34:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/105664.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/105664.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/105664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/105664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/105664.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JSP Struts														之																		HTML																						标签库详解																																																																																								Stru...&nbsp;&nbsp;<a href='http://www.blogjava.net/yczz/articles/105664.html'>阅读全文</a><img src ="http://www.blogjava.net/yczz/aggbug/105664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-03-22 22:34 <a href="http://www.blogjava.net/yczz/articles/105664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic和MyEclipse的配置</title><link>http://www.blogjava.net/yczz/articles/105657.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Thu, 22 Mar 2007 14:05:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/105657.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/105657.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/105657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/105657.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/105657.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#0000ff" size="2">第一步建立Weblogic Server的project：</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(1)安装破解Weblogic 8.3.1后(</font>
				<a href="http://www.9iv.com/">
						<font color="#0000ff" size="2">www.9iv.com</font>
				</a>
				<font color="#0000ff" size="2">)，运行Configuration Wizard；</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(2)选择Create a new Weblogic configuraion；</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(3)Select a Configuration Template中选择Basic Weblogic Server Domain；</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(4)Chose Express or Custom Configuration中我选择的是Express(如果对配置很熟悉还是选择Custom比较好些)；</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(5)在Configure Administrative Username and Password中设置用户名和密码；</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(6)在Configure Server Start Mode and Java SDK中我选择了Development Mode，在JDK中选择了BEA默认安装的Sun JDK 1.4.2_04；</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(7)在下一步部署中输入需要的Congfiguration Name就可以Create了。</font>
		</p>
		<p>
				<font color="#0000ff" size="2">第二步在MyEclipse配置Weblogic：</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(1)选择菜单Window-&gt;Preferences-&gt;MyEclipse-&gt;Application Servers-&gt;Weblogic 8，配置项目如下：</font>
		</p>
		<p>
				<font color="#0000ff" size="2">BEA home directory: 选择Bea的安装目录</font>
		</p>
		<p>
				<font color="#0000ff" size="2">Weblogic installation directory:现在BEA下面的weblogic81目录</font>
		</p>
		<p>
				<font color="#0000ff" size="2">Admin username:输入上面在配置过程中设的用户名</font>
		</p>
		<p>
				<font color="#0000ff" size="2">Admin password:输入刚才设的密码</font>
		</p>
		<p>
				<font color="#0000ff" size="2">Execution domain root:选择BEA下user_projects\domains目录下上面第一步创建的目录</font>
		</p>
		<p>
				<font color="#0000ff" size="2">Execution domain name:输入上面那个目录的名称</font>
		</p>
		<p>
				<font color="#0000ff" size="2">Execution server name:输入上一步的那个Congfiguration Name</font>
		</p>
		<p>
				<font color="#0000ff" size="2">Hostname:PortNumber:输入IP地址和监听的端口</font>
		</p>
		<p>
				<font color="#0000ff" size="2">Security policy file:输入BEA安装目录下的\weblogic81\server\lib\weblogic.policy</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(2)在Weblogic 8下面配置JDK，在WLS JDK name那里选择新建，弹出的对话框中选择BEA下面的JDK安装路径，输入一个名字确定就可以；在Optional Java VM arguments对话框里面输入-ms64m -mx64m -Djava.library.path="D:/BEA/weblogic81/server/bin" -Dweblogic.management.discover=false -Dweblogic.ProductionModeEnabled=false</font>
		</p>
		<p>
				<font color="#0000ff" size="2">(3在Weblogic 8下面配置Paths，加入BEA安装路径下/weblogic81/server/lib中的webservices.jar和weblogic.jar两个包。如果需要其他的包，也在这里加入。</font>
		</p>
<img src ="http://www.blogjava.net/yczz/aggbug/105657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-03-22 22:05 <a href="http://www.blogjava.net/yczz/articles/105657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j配置（新）</title><link>http://www.blogjava.net/yczz/articles/102857.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 09 Mar 2007 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/102857.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/102857.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/102857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/102857.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/102857.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l1 level1 lfo1">
				<font size="2">log4j简介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<font size="2">简单的说<span lang="EN-US" twffan="done">log4j就是帮助开发人员进行日志输出管理的API类库。它最重要的特点就<o:p></o:p></span></font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">可以</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial" twffan="done">配置文件灵活的设置</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。<span lang="EN-US" twffan="done"><o:p></o:p></span></span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<font size="2">
						<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">Log4j除了可以记录程序运行日志信息外还有一重要的功能就是用来</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial" twffan="done">显示调试信息。程序员经常会遇到脱离<span lang="EN-US" twffan="done">java ide环境调试程序的情况，这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题：一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需调试变量值，则只能再一行行去掉这些注释恢复System.out.println语句。使用log4j可以很好的处理类似情况。<o:p></o:p></span></span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l1 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial" twffan="done">
						<font size="2">log4j使用方法<o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 22.05pt; mso-char-indent-count: 2.1">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: Arial" twffan="done">
						<font size="2">下面介绍的是<span lang="EN-US" twffan="done">log4j一些理论方面的知识，读者觉得枯燥的话可以跳过本节直接阅读第三节实例部分。<o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　<span twffan="done">1、定义配置文件<o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　<span lang="EN-US" twffan="done"><span style="mso-spacerun: yes" twffan="done">  </span>首先使用配置文件将使我们的应用程序更加灵活配置log日志输出方式包括输出优先级、输出目的地、输出格式。Log4j支持两种配置文件格式，一种是XML格式的文件，一种是Java特性文件log4j.properties（键=值）。下面将介绍使用log4j.properties文件作为配置文件的方法：<o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<font size="2">
						<span style="FONT-SIZE: 10.5pt" twffan="done">　　</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
								<span style="mso-no-proof: yes" twffan="done">①</span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">配置根Logger，其语法为：0<o:p></o:p></span>
				</font>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　<span lang="EN-US" twffan="done">log4j.rootLogger = [ level ] , appenderName, appenderName, … <o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　其中，<span lang="EN-US" twffan="done">level 是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别，优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别，则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。 <o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<font size="2">
						<span style="FONT-SIZE: 10.5pt" twffan="done">　　</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
								<span style="mso-no-proof: yes" twffan="done">②</span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">配置日志信息输出目的地Appender，其语法为：<o:p></o:p></span>
				</font>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　</font>
						<span lang="EN-US" twffan="done">
								<font size="2">log4j.appender.appenderName = fully.qualified.name.of.appender.class <br />　　log4j.appender.appenderName.option1 = value1 <br />　　… <br />　　log4j.appender.appenderName.option = valueN <o:p></o:p></font>
						</span>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　其中，</font>
						<span lang="EN-US" twffan="done">
								<font size="2">Log4j提供的appender有以下几种： <br />　　org.apache.log4j.ConsoleAppender（控制台）， <br />　　org.apache.log4j.FileAppender（文件）， <br />　　org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件），<br />　　org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件）， <br />　　org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方） <o:p></o:p></font>
						</span>
				</span>
		</p>
		<p>
				<font size="2">
						<span style="FONT-SIZE: 10.5pt" twffan="done">　 </span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
								<span style="mso-no-proof: yes" twffan="done">③</span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">配置日志信息的格式（布局），其语法为：<o:p></o:p></span>
				</font>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　</font>
						<span lang="EN-US" twffan="done">
								<font size="2">log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class <br />　　log4j.appender.appenderName.layout.option1 = value1 <br />　　… <br />　　log4j.appender.appenderName.layout.option = valueN <o:p></o:p></font>
						</span>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　其中，</font>
						<span lang="EN-US" twffan="done">
								<font size="2">Log4j提供的layout有以下几种： <br />　　org.apache.log4j.HTMLLayout（以HTML表格形式布局）， <br />　　org.apache.log4j.PatternLayout（可以灵活地指定布局模式）， <br />　　org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串）， <br />　　org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息） <o:p></o:p></font>
						</span>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　<span lang="EN-US" twffan="done">Log4J采用类似C语言中的printf函数的打印格式格式化日志信息，打印参数如下： %m 输出代码中指定的消息<o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　</font>
						<span lang="EN-US" twffan="done">
								<font size="2">%p 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL <br />　　%r 输出自应用启动到输出该log信息耗费的毫秒数 <br />　　%c 输出所属的类目，通常就是所在类的全名 <br />　　%t 输出产生该日志事件的线程名 <br />　　%n 输出一个回车换行符，Windows平台为“\r\n”，Unix平台为“\n” <br />　　%d 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：</font>
						</span>
				</span>
				<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?>
				<st1:chsdate isrocdate="False" islunardate="False" day="18" month="10" year="2002">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
								<font size="2">2002年10月18日</font>
						</span>
				</st1:chsdate>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2"> 22：10：28，921 <br />　　%l 输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10) <o:p></o:p></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　<span twffan="done">2、在代码中使用Log4j <o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<font size="2">
						<span style="FONT-SIZE: 10.5pt" twffan="done">　　</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
								<span style="mso-no-proof: yes" twffan="done">①</span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">得到记录器<o:p></o:p></span>
				</font>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　使用<span lang="EN-US" twffan="done">Log4j，第一步就是获取日志记录器，这个记录器将负责控制日志信息。其语法为： <o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　<span lang="EN-US" twffan="done">public static Logger getLogger( String name) <o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　通过指定的名字获得记录器，如果必要的话，则为这个名字创建一个新的记录器。<span lang="EN-US" twffan="done">Name一般取本类的名字，比如： <o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　<span lang="EN-US" twffan="done">static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )<o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<font size="2">
						<span style="FONT-SIZE: 10.5pt" twffan="done">　　</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
								<span style="mso-no-proof: yes" twffan="done">②</span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">读取配置文件 <o:p></o:p></span>
				</font>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　当获得了日志记录器之后，第二步将配置<span lang="EN-US" twffan="done">Log4j环境，其语法为：<o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 21pt">
				<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">BasicConfigurator.configure ()： 自动快速地使用缺省Log4j环境。<br />　　PropertyConfigurator.configure ( String configFilename) ：读取使用Java的特性文件编写的配置文件。<o:p></o:p></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 21pt">
				<font size="2">
						<span style="FONT-SIZE: 10.5pt" twffan="done">例：<span lang="EN-US" twffan="done">PropertyConfigurator.configure</span></span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt" twffan="done">(".\\src\\log4j.properties")</span>
				</font>
				<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
						<br />
						<font size="2">　　DOMConfigurator.configure ( String filename ) ：读取XML形式的配置文件。<o:p></o:p></font>
				</span>
		</p>
		<p>
				<font size="2">
						<span style="FONT-SIZE: 10.5pt" twffan="done">　　</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">
								<span style="mso-no-proof: yes" twffan="done">③</span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">插入记录信息（格式化日志信息）<o:p></o:p></span>
				</font>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　当上两个必要步骤执行完毕，就可轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方，其语法如下：<span lang="EN-US" twffan="done"><o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<span style="FONT-SIZE: 10.5pt" twffan="done">
						<font size="2">　　</font>
						<span lang="EN-US" twffan="done">
								<font size="2">Logger.debug ( Object message ) ;<br />　　Logger.info ( Object message ) ;<br />　　Logger.warn ( Object message ) ;<br />　　Logger.error ( Object message ) ;<o:p></o:p></font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l1 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<font size="2">log4j范例程序<o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<font size="2">下面将使用一个最简单的范例程序来进一步说明<span lang="EN-US" twffan="done">log4j的使用方法。程序代码如下：<o:p></o:p></span></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 6pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: navy" twffan="done">
						<o:p>
								<font size="2"> </font>
						</o:p>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span twffan="done">
						<font size="2">import org.apache.log4j.*;<o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<font size="2">
						<span twffan="done">public class</span>
						<span lang="EN-US" style="COLOR: black" twffan="done"> LogTest </span>
						<span lang="EN-US" style="COLOR: navy" twffan="done">{</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<font size="2">
						<span twffan="done">
								<span style="mso-spacerun: yes" twffan="done">    </span>static</span>
						<span lang="EN-US" style="COLOR: black" twffan="done"> Logger logger = Logger.getLogger(LogTest.class.getName());<o:p></o:p></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<font size="2">
						<span twffan="done">
								<span style="mso-spacerun: yes" twffan="done">    </span>public</span>
						<span twffan="done"> static</span>
						<span twffan="done"> void</span>
						<span lang="EN-US" style="COLOR: black" twffan="done"> main(String[] args) </span>
						<span lang="EN-US" style="COLOR: navy" twffan="done">{</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<span style="mso-spacerun: yes" twffan="done">        </span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">PropertyConfigurator.configure ( “.\\src\</span>
						<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial" twffan="done">log4j.properties</span>
						<span lang="EN-US" style="FONT-SIZE: 10.5pt" twffan="done">”)</span>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'" twffan="done">；</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p style="TEXT-INDENT: 40pt; LINE-HEIGHT: 8pt; mso-char-indent-count: 4.0; mso-line-height-rule: exactly">
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">logger.debug(</span>
						<span lang="EN-US" style="COLOR: red" twffan="done">"Debug ..."</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">);<o:p></o:p></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<span style="mso-spacerun: yes" twffan="done">        </span>logger.info(</span>
						<span lang="EN-US" style="COLOR: red" twffan="done">"Info ..."</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">);<o:p></o:p></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<span style="mso-spacerun: yes" twffan="done">        </span>logger.warn(</span>
						<span lang="EN-US" style="COLOR: red" twffan="done">"Warn ..."</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">);<o:p></o:p></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<span style="mso-spacerun: yes" twffan="done">        </span>logger.error(</span>
						<span lang="EN-US" style="COLOR: red" twffan="done">"Error ..."</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">);<o:p></o:p></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 8pt; mso-line-height-rule: exactly">
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2"> <o:p></o:p></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 6pt; mso-line-height-rule: exactly">
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<span style="mso-spacerun: yes" twffan="done">    </span>
						</span>
						<span lang="EN-US" style="COLOR: navy" twffan="done">}</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 6pt; mso-line-height-rule: exactly">
				<font size="2">
						<span lang="EN-US" style="COLOR: navy" twffan="done">}</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<font size="2">程序说明：<span lang="EN-US" twffan="done"><o:p></o:p></span></font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; mso-char-indent-count: 1.0">
				<font size="2">
						<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
								<span style="mso-no-proof: yes" twffan="done">①</span>
						</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done"> static Logger logger = Logger.getLogger(LogTest.class.getName());</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">就是创建一个属于</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">LogTest</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">类的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">Logger</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">对象，创建时要告知</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">Logger</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">你当前的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">Class</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">是什么。</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10pt; mso-char-indent-count: 1.0">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-no-proof: yes; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">②</span>
				<font size="2">
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done"> PropertyConfigurator.configure ( “</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log4j.properties</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">”)</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">就是说使用当前工程目录下的</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">src</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">文件夹中的</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log4j.properties</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">文件作为配置文件。若将</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log4j.properties</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">放在工程根目录下也可不写此句，程序会自动找到配置文件。</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10pt; mso-char-indent-count: 1.0">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-no-proof: yes; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">③</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done"> logger.debug</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">就是输出</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">debug</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">的信息，</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">logger.info</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">就是输出提示信息，</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">logger.warn</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">就是显示警告信息，</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">logger.error</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">就是显示错误信息。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">下面是配置文件</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log4j.properties</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">的内容：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
						<o:p>
						</o:p>
				</span>
		</p>
		<p>
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">log4j.rootCategory=DEBUG, stdout</span>
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'" twffan="done">，</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">R<o:p></o:p></span>
				</font>
		</p>
		<p>
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2">log4j.appender.stdout=org.apache.log4j.ConsoleAppender<o:p></o:p></font>
				</span>
		</p>
		<p>
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2">log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<o:p></o:p></font>
				</span>
		</p>
		<p>
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2">log4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) - %m%n<o:p></o:p></font>
				</span>
		</p>
		<p>
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2">log4j.appender.R=org.apache.log4j.RollingFileAppender<o:p></o:p></font>
				</span>
		</p>
		<p>
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2">log4j.appender.R.File=log.txt<o:p></o:p></font>
				</span>
		</p>
		<p>
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2">log4j.appender.R.MaxFileSize=100KB<o:p></o:p></font>
				</span>
		</p>
		<p>
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2">log4j.appender.R.MaxBackupIndex=1<o:p></o:p></font>
				</span>
		</p>
		<p>
				<span lang="EN-US" style="COLOR: black" twffan="done">
						<font size="2">log4j.appender.R.layout=org.apache.log4j.PatternLayout<o:p></o:p></font>
				</span>
		</p>
		<p>
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">log4j.appender.R.layout.ConversionPattern=%d</span>
						<span lang="EN-US" style="COLOR: navy" twffan="done">{</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">yyyy MMM dd HH:mm:ss</span>
						<span lang="EN-US" style="COLOR: navy" twffan="done">}</span>
						<span lang="EN-US" style="COLOR: black" twffan="done"> %-5p %c - %m%n<o:p></o:p></span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<font size="2">程序说明：<span lang="EN-US" twffan="done"><o:p></o:p></span></font>
				</span>
		</p>
		<p>
				<font size="2">
						<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
								<span style="mso-no-proof: yes" twffan="done">①</span>
						</span>
						<span lang="EN-US" style="COLOR: black" twffan="done"> log4j.rootCategory=DEBUG, stdout</span>
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'" twffan="done">，</span>
						<span lang="EN-US" style="COLOR: black" twffan="done">R<o:p></o:p></span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">就是说我要显示所有优先权等於和高于</span>
				<span twffan="done">Debug的信息。<br />"stdout"，</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">”R”</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">表示我定义了两个输出端</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">(</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">随便什么名字都好</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">)</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-no-proof: yes; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">②</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">下面的三行说</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">stdout</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">输出端其实是标准输出</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">Console</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">，也就是屏幕。输出的格式是</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">Pattern</span>
				<font size="2">
						<span lang="EN-US" style="COLOR: black" twffan="done">Layout</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">。转换方式是</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">%5p (%F:%L) - %m%n</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">，即前五格用来显示优先权，再显示当前的文件名，加当前的行数。最后是</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">logger.debug()</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">或</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">logger.info()</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">或</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">logger.warn()</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">或</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">logger.error()</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">里的信息。</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">%n</span>
						<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">表示回车空行。</span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-no-proof: yes; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">③</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">再加上下面六行则</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">信息不光显示在屏幕上，而且将被保存在一个叫</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">"log.txt"</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">的文件里，文件最大为</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">100KB</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">。如果文件大小超过</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">100KB</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">，文件会被备份成</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">"log.txt.1"</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">，新的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">"log.txt"</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">继续记录</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">信息。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">接下来我们可以改变</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log4j.properties</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">，而不需重新编译就可以控制</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">信息是否显示、</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">信息的输出端类型、输出方式、输出格式，等等。举例如下：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-no-proof: yes; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">①</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">在</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log4j.properties</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">文件里把</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">"log4j.rootCategory=DEBUG,stdout,R"</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">改写成</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">"log4j.rootCategory=OFF, stdout,R"</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">，这样所有的</span>
				<span twffan="done">log信息都不会显示了；解决了本文开始提出的问题。<br />②</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">在</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log4j.properties</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">文件里把</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">"log4j.rootCategory=DEBUG,stdout,R"</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">改写成</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">"log4j.rootCategory=INFO, stdout,R"</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">，这样只显示</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">INFO, WARN, ERROR</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">log</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">信息，而</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">DEBUG</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial" twffan="done">信息不会被显示；</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial" twffan="done">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<o:p>
								<font size="2"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l1 level1 lfo1">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<font size="2">在<span lang="EN-US" twffan="done">web程序中使用log4j注意问题<o:p></o:p></span></font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 0cm; tab-stops: list 0cm; mso-list: l0 level1 lfo2">
				<font size="2">
						<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: 宋体" twffan="done">
								<span style="mso-list: Ignore" twffan="done">1、<span style="FONT: 7pt 'Times New Roman'" twffan="done">    </span></span>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">由于<span lang="EN-US" twffan="done">jsp或servlet在执行状态时没有当前路径概念，所有使用</span></span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">PropertyConfigurator.configure</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">（</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">String</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">）语句找</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">log4j.properties</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">文件时要给出相对于当前</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">jsp</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">或</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">servlet</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">的路径转化成为一个绝对的文件系统路径。方法是使用</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">servletcontext.getrealpath(string)</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">语句。例：</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt" twffan="done">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">//得到当前jsp路径</span>
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">String prefix =<span style="mso-spacerun: yes" twffan="done">  </span>getServletContext().getRealPath(</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">"/"<span style="COLOR: black" twffan="done">);<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">//读取</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">log4j.properties</span>
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt" twffan="done">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">PropertyConfigurator.configure(prefix+</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">"\\WEB-INF\\log4j.properties"<span style="COLOR: black" twffan="done">);<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">2、相应的log4j.properties设置某个属性时也要在程序中设置绝对路径。例：<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt" twffan="done">log4j.appender.R.File属性设置日志文件存放位置。我们可以用读写.properties配置文件的方法进行灵活设置。</span>
		</p>
<img src ="http://www.blogjava.net/yczz/aggbug/102857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-03-09 16:12 <a href="http://www.blogjava.net/yczz/articles/102857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jakarta dbcp属性说明（上）</title><link>http://www.blogjava.net/yczz/articles/46801.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Thu, 18 May 2006 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/46801.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/46801.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/46801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/46801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/46801.html</trackback:ping><description><![CDATA[
		<div class="h3">
				<h3>
						<a name="Parameters">Parameters</a>
				</h3>
				<table cellspacing="2" cellpadding="3" width="100%" border="1">
						<hr />
						<tbody>
								<tr>
										<th>Parameter</th>
										<th>Description</th>
								</tr>
								<tr class="b">
										<td>username</td>
										<td>The connection username to be passed to our JDBC driver to establish a connection.</td>
								</tr>
								<tr class="a">
										<td>password</td>
										<td>The connection password to be passed to our JDBC driver to establish a connection.</td>
								</tr>
								<tr class="b">
										<td>url</td>
										<td>The connection URL to be passed to our JDBC driver to establish a connection.</td>
								</tr>
								<tr class="a">
										<td>driverClassName</td>
										<td>The fully qualified Java class name of the JDBC driver to be used.</td>
								</tr>
								<tr class="b">
										<td>connectionProperties</td>
										<td>The connection properties that will be sent to our JDBC driver when establishing new connections. <br /><br />Format of the string must be [propertyName=property;]* <br /><br /><strong>NOTE</strong> - The "user" and "password" properties will be passed explicitly, so they do not need to be included here. </td>
								</tr>
						</tbody>
				</table>
				<table cellspacing="2" cellpadding="3" width="100%" border="1">
						<hr />
						<tbody>
								<tr>
										<th>Parameter</th>
										<th>Default</th>
										<th>Description</th>
								</tr>
								<tr class="a">
										<td>defaultAutoCommit</td>
										<td>true</td>
										<td>The default auto-commit state of connections created by this pool.</td>
								</tr>
								<tr class="b">
										<td>defaultReadOnly</td>
										<td>driver default</td>
										<td>The default read-only state of connections created by this pool. If not set then the setReadOnly method will not be called. (Some drivers don't support read only mode, ex: Informix) </td>
								</tr>
								<tr class="a">
										<td>defaultTransactionIsolation</td>
										<td>driver default</td>
										<td>The default TransactionIsolation state of connections created by this pool. One of the following: (see <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Connection.html#field_summary">javadoc</a>) 
<ul><li>NONE 
</li><li>READ_COMMITTED 
</li><li>READ_UNCOMMITTED 
</li><li>REPEATABLE_READ 
</li><li>SERIALIZABLE </li></ul></td>
								</tr>
								<tr class="b">
										<td>defaultCatalog</td>
										<td>
										</td>
										<td>The default catalog of connections created by this pool.</td>
								</tr>
						</tbody>
				</table>
				<table cellspacing="2" cellpadding="3" width="100%" border="1">
						<hr />
						<tbody>
								<tr>
										<th>Parameter</th>
										<th>Default</th>
										<th>Description</th>
								</tr>
								<tr class="a">
										<td>initialSize</td>
										<td>0</td>
										<td>The initial number of connections that are created when the pool is started. <br /><br />Since: 1.2 </td>
								</tr>
								<tr class="b">
										<td>maxActive</td>
										<td>8</td>
										<td>The maximum number of active connections that can be allocated from this pool at the same time, or zero for no limit. </td>
								</tr>
								<tr class="a">
										<td>maxIdle</td>
										<td>8</td>
										<td>The maximum number of active connections that can remain idle in the pool, without extra ones being released, or zero for no limit. </td>
								</tr>
								<tr class="b">
										<td>minIdle</td>
										<td>0</td>
										<td>The minimum number of active connections that can remain idle in the pool, without extra ones being created, or zero to create none. </td>
								</tr>
								<tr class="a">
										<td>maxWait</td>
										<td>indefinitely</td>
										<td>The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception, or -1 to wait indefinitely. </td>
								</tr>
						</tbody>
				</table>
				<table cellspacing="2" cellpadding="3" width="100%" border="1">
						<hr />
						<tbody>
								<tr>
										<th>Parameter</th>
										<th>Default</th>
										<th>Description</th>
								</tr>
								<tr class="b">
										<td>validationQuery</td>
										<td>
										</td>
										<td>The SQL query that will be used to validate connections from this pool before returning them to the caller. If specified, this query <strong>MUST</strong> be an SQL SELECT statement that returns at least one row. </td>
								</tr>
								<tr class="a">
										<td>testOnBorrow</td>
										<td>true</td>
										<td>The indication of whether objects will be validated before being borrowed from the pool. If the object fails to validate, it will be dropped from the pool, and we will attempt to borrow another.<br /><br /><strong>NOTE</strong> - for a <code><font face="Courier">true</font></code> value to have any effect, the <code><font face="Courier">validationQuery</font></code> parameter must be set to a non-null string. </td>
								</tr>
								<tr class="b">
										<td>testOnReturn</td>
										<td>false</td>
										<td>The indication of whether objects will be validated before being returned to the pool. <br /><br /><strong>NOTE</strong> - for a <code><font face="Courier">true</font></code> value to have any effect, the <code><font face="Courier">validationQuery</font></code> parameter must be set to a non-null string. </td>
								</tr>
								<tr class="a">
										<td>testWhileIdle</td>
										<td>false</td>
										<td>The indication of whether objects will be validated by the idle object evictor (if any). If an object fails to validate, it will be dropped from the pool. <br /><br /><strong>NOTE</strong> - for a <code><font face="Courier">true</font></code> value to have any effect, the <code><font face="Courier">validationQuery</font></code> parameter must be set to a non-null string. </td>
								</tr>
								<tr class="b">
										<td>timeBetweenEvictionRunsMillis</td>
										<td>-1</td>
										<td>The number of milliseconds to sleep between runs of the idle object evictor thread. When non-positive, no idle object evictor thread will be run. </td>
								</tr>
								<tr class="a">
										<td>numTestsPerEvictionRun</td>
										<td>3</td>
										<td>The number of objects to examine during each run of the idle object evictor thread (if any). </td>
								</tr>
								<tr class="b">
										<td>minEvictableIdleTimeMillis</td>
										<td>1000 * 60 * 30</td>
										<td>The minimum amount of time an object may sit idle in the pool before it is eligable for eviction by the idle object evictor (if any). </td>
								</tr>
						</tbody>
				</table>
				<table cellspacing="2" cellpadding="3" width="100%" border="1">
						<hr />
						<tbody>
								<tr>
										<th>Parameter</th>
										<th>Default</th>
										<th>Description</th>
								</tr>
								<tr class="a">
										<td>poolPreparedStatements</td>
										<td>false</td>
										<td>Enable prepared statement pooling for this pool.</td>
								</tr>
								<tr class="b">
										<td>maxOpenPreparedStatements</td>
										<td>unlimited</td>
										<td>The maximum number of open statements that can be allocated from the statement pool at the same time, or zero for no limit. </td>
								</tr>
						</tbody>
				</table>
				<p>
						<img src="http://jakarta.apache.org/commons/dbcp/images/icon_info_sml.gif" /> This component has also the ability to pool PreparedStatements. When enabled a statement pool will be created for each Connection and PreparedStatements created by one of the following methods will be pooled: 
</p>
				<ul>
						<li>public PreparedStatement prepareStatement(String sql) 
</li>
						<li>public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) </li>
				</ul>
				<p>
				</p>
				<p>
						<img src="http://jakarta.apache.org/commons/dbcp/images/icon_warning_sml.gif" />
						<strong>NOTE</strong> - Make sure your connection has some resources left for the other statements. </p>
				<table cellspacing="2" cellpadding="3" width="100%" border="1">
						<hr />
						<tbody>
								<tr>
										<th>Parameter</th>
										<th>Default</th>
										<th>Description</th>
								</tr>
								<tr class="a">
										<td>accessToUnderlyingConnectionAllowed</td>
										<td>false</td>
										<td>Controls if the PoolGuard allows access to the underlying connection.</td>
								</tr>
						</tbody>
				</table>
				<p>When allowed you can access the underlying connection using the following construct:</p>
				<div id="source">
						<pre>    Connection conn = ds.getConnection();
    Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();
    ...
    conn.close()
</pre>
				</div>
				<p>
						<img src="http://jakarta.apache.org/commons/dbcp/images/icon_info_sml.gif" /> Default is false, it is a potential dangerous operation and misbehaving programs can do harmfull things. (closing the underlying or continue using it when the guarded connection is already closed) Be carefull and only use when you need direct access to driver specific extentions. </p>
				<p>
						<img src="http://jakarta.apache.org/commons/dbcp/images/icon_warning_sml.gif" />
						<b>NOTE:</b> Do not close the underlying connection, only the original one. </p>
				<table cellspacing="2" cellpadding="3" width="100%" border="1">
						<hr />
						<tbody>
								<tr>
										<th>Parameter</th>
										<th>Default</th>
										<th>Description</th>
								</tr>
								<tr class="b">
										<td>removeAbandoned</td>
										<td>false</td>
										<td>Flag to remove abandoned connections if they exceed the removeAbandonedTimout.<br /><br />If set to true a connection is considered abandoned and eligible for removal if it has been idle longer than the removeAbandonedTimeout. Setting this to true can recover db connections from poorly written applications which fail to close a connection. </td>
								</tr>
								<tr class="a">
										<td>removeAbandonedTimeout</td>
										<td>300</td>
										<td>Timeout in seconds before an abandoned connection can be removed.</td>
								</tr>
								<tr class="b">
										<td>logAbandoned</td>
										<td>false</td>
										<td>Flag to log stack traces for application code which abandoned a Statement or Connection.<br /><br />Logging of abandoned Statements and Connections adds overhead for every Connection open or new Statement because a stack trace has to be generated. </td>
								</tr>
						</tbody>
				</table>
				<p>
						<img src="http://jakarta.apache.org/commons/dbcp/images/icon_info_sml.gif" /> If you have enabled "removeAbandoned" then it is possible that a connection is reclaimed by the pool because it is considered to be abandoned. This mechanism is triggered when (getNumIdle() &lt; 2) and (getNumActive() &gt; getMaxActive() - 3) </p>
				<p>
						<img src="http://jakarta.apache.org/commons/dbcp/images/icon_info_sml.gif" /> For example maxActive=20 and 18 active connections and 1 idle connection would trigger the "removeAbandoned". But only the active connections that aren't used for more then "removeAbandonedTimeout" seconds are removed, default (300 sec). Traversing a resultset doesn't count as being used. </p>
		</div>
<img src ="http://www.blogjava.net/yczz/aggbug/46801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2006-05-18 14:04 <a href="http://www.blogjava.net/yczz/articles/46801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关闭tomcat目录列表功能</title><link>http://www.blogjava.net/yczz/articles/46385.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Tue, 16 May 2006 05:13:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/46385.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/46385.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/46385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/46385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/46385.html</trackback:ping><description><![CDATA[
		<p>default情况下，如果你访问Tomcat下的一个WEB应用，那么如果你输入的是一个目录名，而且该目录下没有一个default网页,那么Tomcat 将会列出该目录下所有的文件或是文件夹，这样给我们带了很大的不安全，可能一些有用的资料，被其他人很容易获取.如果你想屏蔽这个缺省行为，那么可以修改。</p>
		<br />
		<p>conf/web.xml文件:<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;default&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;org.apache.catalina.servlets.DefaultServlet&lt;/servlet-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;debug&lt;/param-name&gt;<br />&lt;param-value&gt;0&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;listings&lt;/param-name&gt;<br />&lt;param-value&gt;<font color="#ff0000">false</font>&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&lt;/servlet&gt;</p>
<img src ="http://www.blogjava.net/yczz/aggbug/46385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2006-05-16 13:13 <a href="http://www.blogjava.net/yczz/articles/46385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts数据库连接池配置</title><link>http://www.blogjava.net/yczz/articles/41902.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Wed, 19 Apr 2006 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/41902.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/41902.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/41902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/41902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/41902.html</trackback:ping><description><![CDATA[在一个其于Struts的应用系统的设计过程中，最好能在web/表示层（presentation layer）和你的商务逻辑类（包含所有数据访问操作的层）的中间，定义一个Action类，作为小型的适配器（thin adapter）。<br /><br />  所以，你可以先定义一些商务API（business API），这些API就是简单的Java类。你可以传递一些参数给这些对象，并从这些对象返回一个Java Bean或者Java Bean的集合。这个Action类负责调用这些对象，并把它们返回的值传递给web/表示层。<br /><br />  通常，你可以为每一个你需要调用的商务方法/商务类API创建一个Action类。理想情况下，所有的数据库访问代码都被封装进了这些商务API类里，所以Struts并不知道你正在使用的持久层（persistent layer）（甚至都不知道你使用了持久层）。它只需要传递一个主键（Key）或者一个查询参数，然后处理返回的结果bean或者bean集合。这样，你就可以在其他的应用环境里复用这些商务API类，你还可以对这些独立于Struts或HTTP环境的商务API进行单体测试。<br /><br />  开始的时候，最简单的方法就是设计一个1:1的方案，为你的每一个商务API入口（entry-point）定义一个Action类。当你的经验丰富了以后，你也可以使用DispatchAction组合这些Action类。你甚至可以定义一个简单的"框架"Action，用来调用所有的这些商务类。你可以在contrib目录里找到Scaffold设计的ProcessAction，这是一个"框架"Action的完整实现。使用这种方案可以使用更少的Action类，但你必须对Struts和MVC框架的底层实现有较深的理解。不要害怕在开始的时候定义过多的Action，Struts的配置方案可以给予你充分的自由在以后重构你的设计，因为你可以灵活的改变你的Action类，而不会对应用程序造成影响。<br /><br />  在理想情况下，商务逻辑层（business logic layer）应该封装所有的数据访问细节，包括数据库连接的获得。但是，一些应用程序的设计要求调用者可以从一个DataSource对象来获得数据库连接。遇到这种情况时，Struts DataSource管理器可以使你在需要的时候配置这些DataSource资源。<br /><br />  Struts DataSource管理器在Struts配置文件（Struts-config.xml）里定义。这个管理器可以用来分发和配置任何实现了javax.sql.DataSource接口的数据库连接池（connection pool）。如果你的DBMS或者容器内置了符合这些要求的连接池，你可以优先选用它。<br /><br /><br /><strong>［Jakarta的公共连接池实现 - BasicDataSource］</strong><br /><br />  如果你的手头没有连接池的本地（native）实现，你可以使用Jakarta提供的公共连接池实现[org.apache.commons.dbcp.BasicDataSource]，它可以和DataSource管理器"合作"的很好。另外，Struts还在它的util包里包含了一个GenericDataSource类，这也是一个连接池实现。但是这只是一个非常简单的实现方案，不推荐使用，因为它可能在Struts的以后版本中被BasicDataSource或其它的数据源实现替换掉。<br /><br />  下面是一段Struts-config.xml配置文件中的数据源配置（使用GenericDataSource数据源实现），你可以更改相应的设置以适合你自己的系统。<br /><br /><br />&lt;!-- configuration for GenericDataSource wrapper --&gt;<br />&lt;data-sources&gt;<br />         &lt;data-source&gt;<br />           &lt;set-property<br />                 property="autoCommit"<br />                 value="false"/&gt;<br />           &lt;set-property<br />                 property="description"<br />                 value="Example Data Source Configuration"/&gt;<br />           &lt;set-property<br />                 property="driverClass"<br />                 value="org.postgresql.Driver"/&gt;<br />           &lt;set-property<br />                 property="maxCount"<br />                 value="4"/&gt;<br />           &lt;set-property<br />                 property="minCount"<br />                 value="2"/&gt;<br />           &lt;set-property<br />                 property="password"<br />                 value="mypassword"/&gt;<br />           &lt;set-property<br />                 property="url"<br />                 value="jdbc:postgresql://localhost/mydatabase"/&gt;<br />           &lt;set-property<br />                 property="user"<br />                 value="myusername"/&gt;<br />         &lt;/data-source&gt;<br />&lt;/data-sources&gt;<br /><br /><strong>使用BasicDataSource数据源实现的配置方案如下：</strong><br /><br />&lt;data-sources&gt;<br />        &lt;!-- configuration for commons BasicDataSource --&gt;<br />        &lt;data-source type="org.apache.commons.dbcp.BasicDataSource"&gt;<br />                &lt;set-property<br />                  property="driverClassName"<br />                  value="org.postgresql.Driver" /&gt;<br />                &lt;set-property<br />                  property="url"<br />                  value="jdbc:postgresql://localhost/mydatabase" /&gt;<br />                &lt;set-property<br />                  property="username"<br />                  value="me" /&gt;<br />                &lt;set-property<br />                  property="password"<br />                  value="test" /&gt;<br />                &lt;set-property<br />                  property="maxActive"<br />                  value="10" /&gt;<br />                &lt;set-property<br />                  property="maxWait"<br />                  value="5000" /&gt;<br />                &lt;set-property<br />                  property="defaultAutoCommit"<br />                  value="false" /&gt;<br />                &lt;set-property<br />                  property="defaultReadOnly"<br />                  value="false" /&gt;<br />                &lt;set-property<br />                  property="validationQuery"<br />                  value="SELECT COUNT(*) FROM market" /&gt;<br />        &lt;/data-source&gt;<br />&lt;/data-sources&gt;<br /><br />  注意，你可以在你的应用系统中定义不止一个数据源，你可以根据需要定义多个数据源，并为它们分别起一个逻辑名（logical name）。这样做可以给你的应用系统提供更好的安全性和可测量性（scalability），你还可以定义一个专用于测试的数据源。<br /><br />  配置好DataSource以后，你就可以在你的应用系统中使用这些数据源了。下面这段代码演示了怎样在Action类的execute方法中通过这些数据源来生成数据库连接。 
<p>需要３个包（别忘了数据库驱动包）</p><p><font color="#ff0000">commons-collections-3.1.jar<br />commons-dbcp-1.2.1.jar<br />commons-pool-1.2.jar<br /></font><br />public ActionForward execute(<br />        ActionMapping mapping,<br />        ActionForm form,<br />        HttpServletRequest request,<br />        HttpServletResponse response)<br />        throws Exception<br />{<br />        DataSource dataSource;<br />        Connection cnn;<br /><br />        try<br />        {<br />                dataSource = getDataSource(request);<br />                cnn = dataSource.getConnection();<br />                // 数据连接已经建立了，你可以做你想做的事情了<br />        }<br />        catch (SQLException e)<br />        {<br />                getServlet().log("处理数据库连接", e);<br />        }<br />        finally<br />        {<br />                // 在finally块里包含这些代码<br />                // 用以保证连接最后会被关闭<br />                try<br />                {<br />                        cnn.close();<br />                }<br />                catch (SQLException e)<br />                {<br />                        getServlet().log("关闭数据库连接", e);<br />                }<br />        }<br />}<br /><br />  注意：如果你使用公共的BasicDataSource，你提供给pingQuery属性的查询语句（如果你设置了话）必须至少要能返回一行记录。<br /><br />例子：SELECT COUNT(*) FROM VALIDTABLE<br /><br />你可以把VALIDTABLE替换成你的数据库中包含的任何有效的表。<br /><br /><strong>数据库连接字符串<br />SQLServer2000:<br />  driverClassName:com.microsoft.jdbc.sqlserver.SQLServerDriver<br />  url: jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=databasename<br />MySql:<br />   driverClassName:com.mysql.jdbc.Driver<br />  url: jdbc:mysql://localhost/databasename<br /><br />［使用多个数据源］</strong><br /><br />如果你需要在模块（Module）中使用多于一个的数据源，你可以在配置文件的&lt;data-source&gt;元素里包含一个key属性。<br /><br />&lt;data-source&gt;<br />        &lt;data-source key="A" type="org.apache.commons.dbcp.BasicDataSource"&gt;<br />                …属性配置略, 同上…<br />        &lt;/data-source&gt;<br />        &lt;data-source key="B" type="org.apache.commons.dbcp.BasicDataSource"&gt;<br />                …属性配置略, 同上…<br />        &lt;/data-source&gt;<br />&lt;/data-source&gt;<br /><br />你代码里，你可以通过这些key获得不同的数据源。代码如下：<br /><br />…<br />try<br />{<br />        dataSourceA = getDataSource(request, "A");<br />        dataSourceB = getDataSource(request, "B");<br />…<br /><br />你可以根据需要为每一个模块设置多个数据源。但同一模块里每个数据源的key属性必须唯一，因为Struts模块系统是以每一个模块为单位管理命名空间的。</p><img src ="http://www.blogjava.net/yczz/aggbug/41902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2006-04-19 14:45 <a href="http://www.blogjava.net/yczz/articles/41902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LOG4J配置</title><link>http://www.blogjava.net/yczz/articles/41900.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Wed, 19 Apr 2006 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/41900.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/41900.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/41900.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/41900.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/41900.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<p>常用log4j配置 [转] </p>
				<p>
						<br />常用log4j配置，一般可以采用两种方式，.properties和.xml,下面举两个简单的例子：</p>
				<p>一、log4j.properties</p>
				<p>### 设置com.unmi域对应的级别INFO,DEBUG,WARN,ERROR和输出地A1，A2 ##<br />log4j.category.com.unmi=ERROR,A1 <br />log4j.category.com.unmi=INFO,A2 </p>
				<p>### 一般把上面两行写如下方式，统一控制日志输出,再用log4j.logger设置包独立的输出级别 ##<br />log4j.rootLogger=DEBUG,A1<br />log4j.logger.com.unmi.special = ERROR</p>
				<p>### 设置输出地A1，为ConsoleAppender(控制台) ##<br />log4j.appender.A1=org.apache.log4j.ConsoleAppender </p>
				<p>### 设置A1的输出布局格式PatterLayout,(可以灵活地指定布局模式）##<br />log4j.appender.A1.layout=org.apache.log4j.PatternLayout </p>
				<p>### 配置日志输出的格式##<br />log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n </p>
				<p>### 设置输出地A2到文件（文件大小到达指定尺寸的时候产生一个新的文件）##<br />log4j.appender.A2=org.apache.log4j.RollingFileAppender </p>
				<p>### 文件位置##<br />log4j.appender.A2.File=E:/study/log4j/zhuwei.html </p>
				<p>### 文件大小##<br />log4j.appender.A2.MaxFileSize=500KB </p>
				<p>log4j.appender.A2.MaxBackupIndex=1 </p>
				<p>##指定采用html方式输出<br />log4j.appender.A2.layout=org.apache.log4j.HTMLLayout </p>
				<p>
						<br />二、log4j.xml</p>
				<p>&lt;?xml version="1.0" encoding="GB2312" ?&gt;<br />&lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&gt;</p>
				<p>&lt;log4j:configuration xmlns:log4j="<a href="http://jakarta.apache.org/log4j/">http://jakarta.apache.org/log4j/</a>"&gt;</p>
				<p>   &lt;appender name="com.unmi.all" class="org.apache.log4j.RollingFileAppender"&gt;<br />   <br />      &lt;!-- 设置通道ID:com.unmi.all和输出方式：org.apache.log4j.RollingFileAppender --&gt;<br />      &lt;param name="File" value="E:/study/log4j/all.output.log" /&gt;&lt;!-- 设置File参数：日志输出文件名 --&gt;<br />      &lt;param name="Append" value="false" /&gt;&lt;!-- 设置是否在重新启动服务时，在原有日志的基础添加新日志 --&gt;<br />      &lt;param name="MaxBackupIndex" value="10" /&gt; <br />      &lt;layout class="org.apache.log4j.PatternLayout"&gt;<br />          &lt;param name="ConversionPattern" value="%p (%c:%L)- %m%n" /&gt;&lt;!-- 设置输出文件项目和格式 --&gt;<br />      &lt;/layout&gt;<br />   &lt;/appender&gt;<br />   <br />   &lt;appender name="com.unmi.zcw" class="org.apache.log4j.RollingFileAppender"&gt;<br />      &lt;param name="File" value="E:/study/log4j/unmi.output.log" /&gt;<br />      &lt;param name="Append" value="true" /&gt;<br />      &lt;param name="MaxFileSize" value="10240" /&gt; &lt;!-- 设置文件大小 --&gt;<br />      &lt;param name="MaxBackupIndex" value="10" /&gt; <br />      &lt;layout class="org.apache.log4j.PatternLayout"&gt;<br />          &lt;param name="ConversionPattern" value="%p (%c:%L)- %m%n" /&gt;<br />      &lt;/layout&gt;<br />   &lt;/appender&gt;<br />   <br />   &lt;logger name="unmi.log"&gt; &lt;!-- 设置域名限制，即zcw.log域及以下的日志均输出到下面对应的通道中 --&gt;<br />      &lt;level value="debug" /&gt;&lt;!-- 设置级别 --&gt;<br />      &lt;appender-ref ref="com.unmi.zcw" /&gt;&lt;!-- 与前面的通道id相对应 --&gt;<br />   &lt;/logger&gt;<br />   <br />   &lt;root&gt; &lt;!-- 设置接收所有输出的通道 --&gt;<br />      &lt;appender-ref ref="com.unmi.all" /&gt;&lt;!-- 与前面的通道id相对应 --&gt;<br />   &lt;/root&gt;</p>
				<p>&lt;/log4j:configuration&gt;</p>
				<p>
						<br />三、配置文件加载方法：</p>
				<p>对于properties文件，一般都不用手工去加载，由Log4j第一次初始化时自动就加载了</p>
				<p>import org.apache.log4j.Logger;<br />import org.apache.log4j.PropertyConfigurator;<br />import org.apache.log4j.xml.DOMConfigurator;</p>
				<p>public class Log4jApp {<br />   public static void main(String[] args) {<br />       DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加载.xml文件<br />       //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加载.properties文件</p>
				<p>       Logger log=Logger.getLogger("com.unmi.test");<br />       log.info("测试");<br />   }<br />}</p>
				<p>四、项目使用log4j</p>
				<p>在web应用中，可以将配置文件的加载放在一个单独的servlet中，并在web.xml中配置该servlet在应用启动时候加载。对于在多人项目中，可以给每一个人设置一个输出通道，这样在每个人在构建Logger时，用自己的域名称，让调试信息输出到自己的log文件中。</p>
				<p>
						<br />五、常用输出格式</p>
				<p># -X号:X信息输出时左对齐；<br /># %p:日志信息级别<br /># %d{}:日志信息产生时间<br /># %c:日志信息所在地（类名）<br /># %m:产生的日志具体信息<br /># %n:输出日志信息换行<br /></p>
				<p>关于Log4j比较全面的配置<br />LOG4J的配置之简单使它遍及于越来越多的应用中了：Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了， </p>
				<p>log4j.rootLogger=DEBUG,CONSOLE,A1,im <br />log4j.addivity.org.apache=true </p>
				<p> </p>
				<p># 应用于控制台 </p>
				<p>log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender <br />log4j.appender.Threshold=DEBUG <br />log4j.appender.CONSOLE.Target=System.out <br />log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout <br />log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n </p>
				<p>
						<br />#应用于文件 </p>
				<p>log4j.appender.FILE=org.apache.log4j.FileAppender <br />log4j.appender.FILE.File=file.log <br />log4j.appender.FILE.Append=false <br />log4j.appender.FILE.layout=org.apache.log4j.PatternLayout <br />log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br /># Use this layout for LogFactor 5 analysis </p>
				<p> </p>
				<p># 应用于文件回滚 </p>
				<p>log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender <br />log4j.appender.ROLLING_FILE.Threshold=ERROR <br />log4j.appender.ROLLING_FILE.File=rolling.log <br />log4j.appender.ROLLING_FILE.Append=true <br />log4j.appender.ROLLING_FILE.MaxFileSize=10KB <br />log4j.appender.ROLLING_FILE.MaxBackupIndex=1 <br />log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout <br />log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
				<p>
						<br />#应用于socket <br />log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender <br />log4j.appender.SOCKET.RemoteHost=localhost <br />log4j.appender.SOCKET.Port=5001 <br />log4j.appender.SOCKET.LocationInfo=true <br /># Set up for Log Facter 5 <br />log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout <br />log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n </p>
				<p>
						<br /># Log Factor 5 Appender <br />log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender <br />log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000 </p>
				<p> </p>
				<p># 发送日志给邮件 </p>
				<p>log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender <br />log4j.appender.MAIL.Threshold=FATAL <br />log4j.appender.MAIL.BufferSize=10 <br /><a href="mailto:log4j.appender.MAIL.From=xxx@www.xxx.com">log4j.appender.MAIL.From=xxx@www.xxx.com</a><br />log4j.appender.MAIL.SMTPHost=www.wusetu.com <br />log4j.appender.MAIL.Subject=Log4J Message <br /><a href="mailto:log4j.appender.MAIL.To=xxx@www.xxx.com">log4j.appender.MAIL.To=xxx@www.xxx.com</a><br />log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout <br />log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
				<p> </p>
				<p># 用于数据库 <br />log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender <br />log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test <br />log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver <br />log4j.appender.DATABASE.user=root <br />log4j.appender.DATABASE.password= <br />log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') <br />log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout <br />log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n </p>
				<p>
						<br />log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender <br />log4j.appender.A1.File=SampleMessages.log4j <br />log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' <br />log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout </p>
				<p>
						<br />输出到2000NT日志<br /> 把Log4j压缩包里的NTEventLogAppender.dll拷到WINNT\SYSTEM32目录下</p>
				<p> log4j.logger.NTlog=FATAL, A8<br /> # APPENDER A8<br /> log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender<br /> log4j.appender.A8.Source=JavaTest<br /> log4j.appender.A8.layout=org.apache.log4j.PatternLayout<br /> log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n</p>
				<p>
						<br />#自定义Appender </p>
				<p>log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender </p>
				<p>log4j.appender.im.host = mail.cybercorlin.net <br />log4j.appender.im.username = username <br />log4j.appender.im.password = password <br />log4j.appender.im.recipient = <a href="mailto:xxx@xxx.net">xxx@xxx.net</a></p>
				<p>log4j.appender.im.layout=org.apache.log4j.PatternLayout <br />log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br /></p>
		</div>
<img src ="http://www.blogjava.net/yczz/aggbug/41900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2006-04-19 14:44 <a href="http://www.blogjava.net/yczz/articles/41900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>