??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成网站在线观看播放青青,亚洲国产精品成人午夜在线观看 ,亚洲永久在线观看http://www.tkk7.com/javafield/category/28681.htmlzh-cnSun, 20 Jan 2008 06:12:05 GMTSun, 20 Jan 2008 06:12:05 GMT60jspsmart 上传附g到服务器http://www.tkk7.com/javafield/archive/2008/01/19/176509.html石业?/dc:creator>石业?/author>Sat, 19 Jan 2008 10:45:00 GMThttp://www.tkk7.com/javafield/archive/2008/01/19/176509.htmlhttp://www.tkk7.com/javafield/comments/176509.htmlhttp://www.tkk7.com/javafield/archive/2008/01/19/176509.html#Feedback0http://www.tkk7.com/javafield/comments/commentRss/176509.htmlhttp://www.tkk7.com/javafield/services/trackbacks/176509.htmlindex.jsp

 1<%@ page contentType="text/html;charset=gb2312"%>
 2<html>
 3    <head>
 4        <title>试上传附g</title>
 5        <metahttp-equiv ="Content-Type"content="text/html;charset=GB2312">
 6    </head>
 7    <body>
 8        <h2>
 9            试上传附g
10        </h2>
11        <form name="Form1" enctype="multipart/form-data" method="post" action="Jspsmart.jsp">
12            <p>
13                上传文g1Q?br /> 14                <input type="file" name="File1" size="20" maxlength="20">
15            </p>
16            <p>
17                上传文g2Q?br /> 18                <input type="file" name="File2" size="20" maxlength="20">
19            </p>
20            <input type="submit" value="上传">
21            <input type="reset" value="清除">
22        </form>
23    </body>
24</html>

Jspsmart.jsp
 1<%@ page import="com.jspsmart.upload.*"%>
 2<%@ page contentType="text/html;charset=GB2312"%>
 3
 4<html>
 5    <head>
 6        <title>CH9 - Jspsmart2.jsp</title>
 7    </head>
 8    <body>
 9
10        <h2>
11            文g上传范例 - jspSmart
12        </h2>
13
14        <jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
15        <%
16            //计算文g上传个数
17            int count = 0;
18            try {
19                //SmartUpload的初始化Q用这个jspsmart一定要在一开始就q样声明
20                mySmartUpload.initialize(pageContext);
21
22                //限制每个上传附g的最大长度?nbsp;
23                mySmartUpload.setMaxFileSize(5000000);
24
25                //限制M传数据的长度?nbsp;
26                mySmartUpload.setTotalMaxFileSize(10000000);
27
28                //讑֮允许上传的附Ӟ通过扩展名限Ӟ?nbsp;
29                mySmartUpload.setAllowedFilesList("jpg,gif,GIF,JPG");
30
31                //依据form的内容上?/span>
32                mySmartUpload.upload();
33
34                //上传的文g一个一个取出来处理
35                for (int i = 0; i < mySmartUpload.getFiles().getCount(); i++{
36                    //取出一个文?/span>
37                    com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);
38
39                    //如果文g存在Q则做存档操?/span>
40                    if (!myFile.isMissing()) {
41
42                //文件存放于l对路径的位|?/span>
43                myFile.saveAs("C:\\upload\\" + myFile.getFileName(),mySmartUpload.SAVE_PHYSICAL);
44
45                //昄此上传文件的详细信息
46                out.println("FieldName = " + myFile.getFieldName() + "<BR>");
47                out.println("Size = " + myFile.getSize() + "<BR>");
48                out.println("FileName = " + myFile.getFileName() + "<BR>");
49                out.println("FileExt = " + myFile.getFileExt() + "<BR>");
50                out.println("FilePathName = " + myFile.getFilePathName() + "<BR>");
51                out.println("ContentType = " + myFile.getContentType() + "<BR>");
52                out.println("ContentDisp = " + myFile.getContentDisp() + "<BR>");
53                out.println("TypeMIME = " + myFile.getTypeMIME() + "<BR>");
54                out.println("SubTypeMIME = " + myFile.getSubTypeMIME() + "<BR>");
55                count++;
56                    }

57                }

58
59                // 昄应该上传的文件数?/span>
60                out.println("<BR>" + mySmartUpload.getFiles().getCount() + " files could be uploaded.<BR>");
61
62                // 昄成功上传的文件数?/span>
63                out.println(count + "file(s) uploaded.");
64            }
 catch (SmartUploadException e) {
65                System.out.println("上传文g出错");
66                e.getMessage();
67            }

68        %>
69    </body>
70</html>


]]>
ScriptX.cab与Smsx.cab打印代码http://www.tkk7.com/javafield/archive/2008/01/05/173033.html石业?/dc:creator>石业?/author>Sat, 05 Jan 2008 13:18:00 GMThttp://www.tkk7.com/javafield/archive/2008/01/05/173033.htmlhttp://www.tkk7.com/javafield/comments/173033.htmlhttp://www.tkk7.com/javafield/archive/2008/01/05/173033.html#Feedback0http://www.tkk7.com/javafield/comments/commentRss/173033.htmlhttp://www.tkk7.com/javafield/services/trackbacks/173033.htmlScriptX.cab打印代码(有弹出页面设|窗?

 

 1<!--前提为必设|了打印?即ؓ有默认的打印?否则此页的弹出窗口不会显C?/span>-->
 2
 3<!--media=print q个属性可以在打印时有?讄打印?打印按钮不显C的样式-->
 4<style media=print>
 5.Noprint{display:none;}
 6.PageNext{page-break-after: always;}
 7</style>
 8<!--d打印lg,注意讄codebase路径-->
 9<object id="factory"   style="display:none"   viewastext    
10classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"    
11codebase="ScriptX.cab#Version=6,2,433,14"> 
12</object>
13
14<!--calss="noprint"讄打印时不昄打印按钮-->
15<td class="noprint" align="right"><img src="" align="right" style="cursor:hand"onClick="set_print()"></td>
16
17
18<!--此方法ؓ载入面?卛_出页面设|窗?/span>-->
19<!--以下为常用打印设|?/span>-->
20<script defer="defer">
21function window.onload() {       
22factory.printing.printer   =   "HP   DeskJet   870C"      
23factory.printing.paperSize   =   "B%"    
24actory.printing.paperSource   =   "Manual   feed"        
25factory.printing.header   =   "居左昄&b居中昄&b居右昄늠Q第&p??amp;P?/span>"    
26factory.printing.footer   =   "Q自定义脚Q?/span>"    
27factory.printing.portrait   =   false    
28factory.printing.leftMargin   = 11    
29factory.printing.topMargin   =   1.5    
30factory.printing.rightMargin   =   0.75    
31factory.printing.bottomMargin   =   1.5 
32factory.printing.PageSetup() ; //打印讄
33factory.printing.Preview() ;        //打印预览
34}
 
35</script>

 

 

smsx.cab打印代?没有弹出面讄H口)

 1<object id="factory" viewastext style="display:none"
 2classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
 3codebase="<%=path%>/erpxtbg/tjfx/smsx.cab#Version=6,3,434,26"></object>
 4<style>
 5@media print {
 6.noprint {display:none}
 7}

 8.STYLE2 {
 9font-size: 18px;
10font-weight: bold;
11}

12</style>
13<td class="noprint" align="right"><img src="" align="right" style="cursor:hand"onClick="set_print()"></td>
14
15<script language="javascript">
16function set_print()
17{
18factory.printing.header = "";
19factory.printing.footer = "";
20factory.printing.portrait = 1//1为纵向打,0为横向打
21factory.printing.leftMargin = 13;   //左边?/span>
22factory.printing.topMargin = 20;    //双?/span>
23factory.printing.Print(false);
24
25}

26</script>


]]>
FCKeditor使用说明http://www.tkk7.com/javafield/archive/2008/01/05/173030.html石业?/dc:creator>石业?/author>Sat, 05 Jan 2008 13:12:00 GMThttp://www.tkk7.com/javafield/archive/2008/01/05/173030.htmlhttp://www.tkk7.com/javafield/comments/173030.htmlhttp://www.tkk7.com/javafield/archive/2008/01/05/173030.html#Feedback0http://www.tkk7.com/javafield/comments/commentRss/173030.htmlhttp://www.tkk7.com/javafield/services/trackbacks/173030.html阅读全文

]]>
log4j 配置http://www.tkk7.com/javafield/archive/2008/01/05/172957.html石业?/dc:creator>石业?/author>Sat, 05 Jan 2008 06:01:00 GMThttp://www.tkk7.com/javafield/archive/2008/01/05/172957.htmlhttp://www.tkk7.com/javafield/comments/172957.htmlhttp://www.tkk7.com/javafield/archive/2008/01/05/172957.html#Feedback0http://www.tkk7.com/javafield/comments/commentRss/172957.htmlhttp://www.tkk7.com/javafield/services/trackbacks/172957.html      log4j 是一个开放源码项目,是广泛用的以Java~写的日志记录包。由于log4j的表玎ͼ     当时在log4j完成Ӟlog4j开发组l曾sun在jdk1.4中用log4j取代jdk1.4 的日志工LQ但当时jdk1.4已接q完成,所以sun拒绝使用log4jQ当在java开发中实际使用最多的q是log4jQ?nbsp;    Z遗忘了sun的日志工L?nbsp;    它的一个独有特性包括在cd中承的概念。通过使用cd层次l构Q这样就减少了日志记录输出量Qƈ日志记录的开销降到最低?br />   
     它允许开发者控制以L间隔输出哪些日志语句。通过使用外部配置文gQ完全可以在q行时进行配|。几乎每个大的应用程序都包括其自q日志记录或跟t?API。经验表明日志记录是开发周期中的重要组成部分。同P日志记录提供一些优炏V首先,它可以提供运行应用程序的切 上下文。一旦插入到代码中,生成日志记录输出׃需要h为干涉。其ơ,日志输出可以保存到永久媒体中以便以后研究。最后,除了在开发阶D中使用Q十分丰?的日志记录包q可以用作审计工兗?

    依照该规则,?1996 q初QEU SEMPERQ欧z安全电子市场)目决定编写自q跟踪 API?在无数次改进、几ơ具体化和许多工作之后,?API 已经演变?log4jQ一U流行的 Java 日志记录包?nbsp; q个包按 IBM 公共许可证分发,由开放源码权威机构认证?/p>

    日志记录有其自己的缺炏V它会降低应用程序的速度。如果太详细Q它可能会屏幕滚动变得看不见?nbsp; Z减低q些影响Qlog4j 被设计成快速且灉|的。由于应用程序很将日志记录当作是主要功能,  log4j API 力争易于了解和用?br />      log4jQ它可以控制以Q意间隔输出哪些日志语句?/p>

二、主要组?/p>

1、根cdQ在cd层次l构的顶部,卛_局性的日志U别Q?br />  
配置根LoggerQ其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, ...

level 是日志记录的cd
appenderName是指定日志信息输出到哪个地斏V您可以同时指定多个输出目的地?

cdlevel ?OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定义的优先?br /> og4j常用的优先FATAL>ERROR>WARN>INFO>DEBUG
配置根LoggerQ其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
如果为log4j.rootLogger=WARNQ则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO被屏蔽掉?/p>

举例Qlog4j.rootCategory=INFO,stdout,Runlog,Errorlog
Ҏ志类别ؓINFOQDEBUG被屏蔽Q其他的被输出?stdout,Runlog,Errorlog分别?个输出目的地?/p>

 2、常用输出格?/p>

 -X?X信息输出时左寚wQ?br />  %p:日志信息U别
 %d{}:日志信息产生旉
 %c:日志信息所在地Q类名)
 %m:产生的日志具体信?br />  %n:输出日志信息换行
 举例Q?br /> log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n

3、布局
使用的输出布局Q其中log4j提供4U布局Q?br /> org.apache.log4j.HTMLLayoutQ以HTML表格形式布局Q?br /> org.apache.log4j.PatternLayoutQ可以灵zd指定布局模式Q,
org.apache.log4j.SimpleLayoutQ包含日志信息的U别和信息字W串Q,
org.apache.log4j.TTCCLayoutQ包含日志生的旉、线E、类别等{信息)

举例Q?br /> 输出格式为HTML表格
log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout

输出格式为可以灵zd指定布局模式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

输出格式为包含日志信息的U别和信息字W串
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

输出格式为包含日志生的旉、线E、类别等{信?br /> log4j.appender.stdout.layout=org.apache.log4j.TTCCLayout


4、目的地

配置日志信息输出目的地AppenderQ其语法?/p>


log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
appenderName是指定日志信息输出到哪个地斏V您可以同时指定多个输出目的地?

log4j支持的输出目的地Q?br /> org.apache.log4j.ConsoleAppender 控制?br /> org.apache.log4j.FileAppender 文g
org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文?br /> org.apache.log4j.RollingFileAppender Q文件大到达指定尺寸的时候生一个新的文ӞQ?br /> org.apache.log4j.WriterAppender Q将日志信息以流格式发送到L指定的地方)
org.apache.log4j.net.SMTPAppender 邮g
org.apache.log4j.jdbc.JDBCAppender 数据?br /> 其他如:GUIlg、甚x套接口服务器、NT的事件记录器、UNIX Syslog守护q程{?/p>

举例Q?/p>


输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderQ指定输出到控制収ͼ
log4j.appender.Threshold=DEBUGQ指定输出类别)
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutQ指定输出布局Q?br /> log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%nQ指定输出格式)

输出到文?/p>

   log4j.appender.FILE=org.apache.log4j.FileAppenderQ指定输出到文gQ?br />    log4j.appender.FILE.File=file.logQ指定输出的路径及文件名Q?br />    log4j.appender.FILE.Append=false
   log4j.appender.FILE.layout=org.apache.log4j.PatternLayoutQ指定输出的布局Q?br />    log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%nQ指定输出的格式Q?/p>

输出到文Ӟ轮换"日志文g",当日志文件达到指定大时Q该文gp关闭q备份,然后创徏一个新的日志文Ӟ

  log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppenderQ指定输出到文gQ?br />   log4j.appender.ROLLING_FILE.Threshold=ERRORQ指定输出类别)
  log4j.appender.ROLLING_FILE.File=rolling.logQ指定输出的路径及文件名Q?br />   log4j.appender.ROLLING_FILE.Append=true
  log4j.appender.ROLLING_FILE.MaxFileSize=10KBQ指定输出到文g的大)
  log4j.appender.ROLLING_FILE.MaxBackupIndex=1
  log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayoutQ指定采用输出布局Q?br />   log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%nQ指定采用输出格式)

输出到Socket
 log4j.appender.SOCKET=org.apache.log4j.RollingFileAppenderQ指定输出到SocketQ?br />  log4j.appender.SOCKET.RemoteHost=localhostQ远E主机)
 log4j.appender.SOCKET.Port=5001Q远E主机端口)
 log4j.appender.SOCKET.LocationInfo=true
 log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayoutQ布局Q?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%nQ输出格式)

输出到邮?br /> log4j.appender.MAIL=org.apache.log4j.net.SMTPAppenderQ指定输出到邮gQ?br />  log4j.appender.MAIL.Threshold=FATAL
 log4j.appender.MAIL.BufferSize=10
 log4j.appender.MAIL.From=chenyl@hollycrm.comQ发件hQ?br />  log4j.appender.MAIL.SMTPHost=mail.hollycrm.comQSMTP服务器)
 log4j.appender.MAIL.Subject=Log4J Message
 log4j.appender.MAIL.To=chenyl@hollycrm.comQ收件hQ?br />  log4j.appender.MAIL.layout=org.apache.log4j.PatternLayoutQ布局Q?br />  log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%nQ格式)

 

输出到数据库
 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppenderQ指定输出到数据库)
 log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/testQ指定数据库URLQ?br />  log4j.appender.DATABASE.driver=com.mysql.jdbc.DriverQ指定数据库driverQ?br />  log4j.appender.DATABASE.user=rootQ指定数据库用户Q?br />  log4j.appender.DATABASE.password=rootQ指定数据库用户密码Q?br />  log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')Q组lSQL语句Q?br />  log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayoutQ布局Q?br />  log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%nQ格式)

5、日志类别补?br /> 有时我们需要对某个特定的部分指定有别于根类别的日志cdQ可以指定某个包的优先
如:
  log4j.category.com.neusoft.mbip.dm.util=ERROR Q其中com.neusoft.mbip.dm.util为我们需要特别指定日志类别的部分?br />  
  或者可以指定输出文件的优先U?br />   log4j.appender.Errorlog.Threshold=ERROR
 
 
 三?常用log4j配置 

常用log4j配置Q一般可以采用两U方式,.properties?xml,下面举两个简单的例子Q?/p>

1、log4j.properties

### 讄org.zblog域对应的U别INFO,DEBUG,WARN,ERROR和输出地A1QA2 ##
log4j.category.org.zblog=ERROR,A1
log4j.category.org.zblog=INFO,A2

log4j.appender.A1=org.apache.log4j.ConsoleAppender
### 讄输出地A1QؓConsoleAppender(控制? ##
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
### 讄A1的输出布局格式PatterLayout,(可以灉|地指定布局模式Q?#
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n
### 配置日志输出的格?#

log4j.appender.A2=org.apache.log4j.RollingFileAppender
### 讄输出地A2到文Ӟ文g大小到达指定寸的时候生一个新的文Ӟ##
log4j.appender.A2.File=E:/study/log4j/zhuwei.html
### 文g位置##
log4j.appender.A2.MaxFileSize=500KB
### 文g大小##
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
##指定采用html方式输出

2、log4j.xml

<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="org.zblog.all" class="org.apache.log4j.RollingFileAppender">
<!-- 讄通道ID:org.zblog.all和输出方式:org.apache.log4j.RollingFileAppender -->
    <param name="File" value="E:/study/log4j/all.output.log" /><!-- 讄File参数Q日志输出文件名 -->
    <param name="Append" value="false" /><!-- 讄是否在重新启动服务时Q在原有日志的基d新日?-->
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%p (%c:%L)- %m%n" /><!-- 讄输出文g目和格?-->
    </layout>
</appender>

<appender name="org.zblog.zcw" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="E:/study/log4j/zhuwei.output.log" />
    <param name="Append" value="true" />
    <param name="MaxFileSize" value="10240" /> <!-- 讄文g大小 -->
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
    </layout>
</appender>

<logger name="zcw.log"> <!-- 讄域名限制Q即zcw.log域及以下的日志均输出C面对应的通道?-->
    <level value="debug" /><!-- 讄U别 -->
    <appender-ref ref="org.zblog.zcw" /><!-- 与前面的通道id相对?-->
</logger>

<root> <!-- 讄接收所有输出的通道 -->
    <appender-ref ref="org.zblog.all" /><!-- 与前面的通道id相对?-->
</root>

</log4j:configuration>


3、配|文件加载方法:

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

public class Log4jApp {
    public static void main(String[] args) {
        DOMConfigurator.configure("E:/study/log4j/log4j.xml");//加蝲.xml文g
        //PropertyConfigurator.configure("E:/study/log4j/log4j.properties");//加蝲.properties文g

        Logger log=Logger.getLogger("org.zblog.test");
        log.info("试");
    }
}

4、项目用log4j
在web应用中,可以配|文件的加蝲攑֜一个单独的servlet中,q在web.xml中配|该servlet在应用启动时候加载?br /> 对于在多人项目中Q可以给每一个h讄一个输出通道Q这样在每个人在构徏LoggerӞ用自q域名Uͼ让调试信
息输出到自己的log文g中?/p>

四、log4j配置举例QpropertiesQ?/p>

#log4j.rootLogger = [ level ] , appenderName, appenderName,
#cdlevel ?OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定义的优先
#Log4j常用的优先FATAL>ERROR>WARN>INFO>DEBUG

#stdout为控制台 QErrorlog为错误记录日?Q?br /> log4j.rootCategory=INFO,stdout,Runlog,Errorlog


#输出的appender的格式ؓ
#log4j.appender.appenderName = fully.qualified.name.of.appender.class
#log4j.appender.appenderName.option1 = value1
#log4j.appender.appenderName.option = valueN
#Log4j中appender支持的输?br /> #org.apache.log4j.ConsoleAppender 控制?br /> #org.apache.log4j.FileAppender 文g
#org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文?br /> #org.apache.log4j.RollingFileAppender Q文件大到达指定尺寸的时候生一个新的文ӞQ?br /> #org.apache.log4j.WriterAppender Q将日志信息以流格式发送到L指定的地方)
#org.apache.log4j.net.SMTPAppender 邮g
#org.apache.log4j.jdbc.JDBCAppender 数据?/p>

Q定义输出的形式
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Runlog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Errorlog=org.apache.log4j.DailyRollingFileAppender


#可以指定输出文g的优先
log4j.appender.Errorlog.Threshold=ERROR

#指定输出的文?br /> log4j.appender.Runlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\runlog\\runlog.log
log4j.appender.Errorlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\errorlog\\errorlog.log


#Log4j的layout布局
#org.apache.log4j.HTMLLayout 以HTML表格形式布局
#org.apache.log4j.PatternLayout 可以灉|地指定布局模式
#org.apache.log4j.SimpleLayout  包含日志信息的别和信息字符?br /> #org.apache.log4j.TTCCLayout    包含日志产生的时间、线E、类别等{信?/p>

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Runlog.layout=org.apache.log4j.PatternLayout
log4j.appender.Errorlog.layout=org.apache.log4j.PatternLayout

#输出格式,log4j javadoc org.apache.log4j.PatternLayout
#-X?X信息输出时左寚wQ?br /> #%p:日志信息U别
# %d{}:日志信息产生旉
# %c:日志信息所在地Q类名)
# %m:产生的日志具体信?br /> # %n:%n:输出日志信息换行
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n

#指定某个包的优先U?
log4j.category.com.neusoft.mbip.dm.util=ERROR


#CZ
###################
# Console Appender
###################
#log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#log4j.appender.Threshold=DEBUG
#log4j.appender.CONSOLE.Target=System.out
#log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#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


#####################
# File Appender
#####################
#log4j.appender.FILE=org.apache.log4j.FileAppender
#log4j.appender.FILE.File=file.log
#log4j.appender.FILE.Append=false
#log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# Use this layout for LogFactor 5 analysis

########################
# Rolling File????? RollingFileAppender??????????????????
########################
#log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLING_FILE.Threshold=ERROR
# 文g位置
#log4j.appender.ROLLING_FILE.File=rolling.log
#log4j.appender.ROLLING_FILE.Append=true
#文g大小
#log4j.appender.ROLLING_FILE.MaxFileSize=10KB
#指定采用输出布局和输出格?br /> #log4j.appender.ROLLING_FILE.MaxBackupIndex=1
#log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

####################
# Socket Appender
####################
#log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
#log4j.appender.SOCKET.RemoteHost=localhost
#log4j.appender.SOCKET.Port=5001
#log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
#log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
#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

########################
# SMTP Appender
#######################
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
#log4j.appender.MAIL.Threshold=FATAL
#log4j.appender.MAIL.BufferSize=10
#log4j.appender.MAIL.From=chenyl@hollycrm.com
#log4j.appender.MAIL.SMTPHost=mail.hollycrm.com
#log4j.appender.MAIL.Subject=Log4J Message
#log4j.appender.MAIL.To=chenyl@hollycrm.com
#log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
#log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

########################
# JDBC Appender
#######################
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=root
#log4j.appender.DATABASE.password=
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

########################
# Log Factor 5 Appender
########################
#log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
#log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

###################
#自定义Appender
###################
#log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
#log4j.appender.im.host = mail.cybercorlin.net
#log4j.appender.im.username = username
#log4j.appender.im.password = password
#log4j.appender.im.recipient = corlin@cybercorlin.net
#log4j.appender.im.layout=org.apache.log4j.PatternLayout
#log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n



]]>
Apache FileUpload文g上传lgAPI解析http://www.tkk7.com/javafield/archive/2008/01/05/172937.html石业?/dc:creator>石业?/author>Sat, 05 Jan 2008 05:02:00 GMThttp://www.tkk7.com/javafield/archive/2008/01/05/172937.htmlhttp://www.tkk7.com/javafield/comments/172937.htmlhttp://www.tkk7.com/javafield/archive/2008/01/05/172937.html#Feedback0http://www.tkk7.com/javafield/comments/commentRss/172937.htmlhttp://www.tkk7.com/javafield/services/trackbacks/172937.html 

  查看API文档
 在准备实验环境时获得的commons-fileupload-1.0.zip文g的解压羃目录中可以看C个docs的子目录Q其中包含了Apache文g上传lg中的各个APIcȝ帮助文档Q从q个文档中可以了解到各个APIcȝ使用帮助信息。打开文g上传lgAPI帮助文档中的index.html面Q在左侧分栏H口面中列Z文g上传lg中的各个APIcȝ名称Q在右侧分栏H口面的底部列Z一D늤例代码,如图1.2所C?br /> ?.2
 读者不需要逐个去阅d1.2中列出的各个APIcȝ帮助文档Q而应该以?.2中的CZ代码为线索,以其中所使用到的cMؓ入口点,按图索骥地进行阅读,对于CZ代码中调用到的各个APIcȝҎ则应重点掌握?/font>

1. DiskFileUploadc?br />  DiskFileUploadcLApache文g上传lg的核心类Q应用程序开发h员通过q个cL与Apache文g上传lgq行交互。但现在Apache使用ServletFileUploadc,两个cȝҎcM。下面介lDiskFileUploadcM的几个常用的重要Ҏ?br /> 1.1QsetSizeMaxҎ
 setSizeMaxҎ用于讄h消息实体内容的最大允许大,以防止客L故意通过上传特大的文件来塞满服务器端的存储空_单位为字节。其完整语法定义如下Q?br />      public void setSizeMaxQlong sizeMaxQ?br />  如果h消息中的实体内容的大超q了setSizeMaxҎ的设||该方法将会抛出FileUploadException异常?br /> 1.2QsetSizeThresholdҎ
 Apache文g上传lg在解析和处理上传数据中的每个字段内容Ӟ需要时保存解析出的数据。因为Java虚拟机默认可以用的内存I间是有限的Q笔者测试不大于100MQ,出限制时将会发?#8220;java.lang.OutOfMemoryError”错误Q如果上传的文g很大Q例如上?00M的文Ӟ在内存中无法保存该文g内容QApache文g上传lg用临时文g来保存这些数据;但如果上传的文g很小Q例如上?00个字节的文gQ显然将其直接保存在内存中更加有效。setSizeThresholdҎ用于讄是否使用临时文g保存解析出的数据的那个界|该方法传入的参数的单位是字节。其完整语法定义如下Q?br />  public void setSizeThreshold(int sizeThreshold)
1.3. setRepositoryPathҎ
 setRepositoryPathҎ用于讄setSizeThresholdҎ中提到的临时文g的存攄录,q里要求使用l对路径。其完整语法定义如下Q?br />  public void setRepositoryPath(String repositoryPath)
 如果不设|存放\径,那么临时文g被储存?java.io.tmpdir"q个JVM环境属性所指定的目录中Qtomcat 5.5.9这个属性设|ؓ?#8220;<tomcat安装目录>/temp/”目录?br /> 1.4. parseRequestҎ
 parseRequest Ҏ是DiskFileUploadcȝ重要ҎQ它是对HTTPh消息q行解析的入口方法,如果h消息中的实体内容的类型不?#8220;multipart/form-data”Q该Ҏ抛出FileUploadException异常。parseRequest Ҏ解析出FORM表单中的每个字段的数据,q将它们分别包装成独立的FileItem对象Q然后将q些FileItem对象加入q一个Listcd的集合对象中q回。parseRequest Ҏ的完整语法定义如下:
 public List parseRequest(HttpServletRequest req)
 parseRequest Ҏq有一个重载方法,该方法集中处理上q所有方法的功能Q其完整语法定义如下Q?br />  parseRequest(HttpServletRequest req,int sizeThreshold,long sizeMax,
             String path)
 q两个parseRequestҎ都会抛出FileUploadException异常?br /> 1.5. isMultipartContentҎ
 isMultipartContentҎҎ用于判断h消息中的内容是否?#8220;multipart/form-data”cdQ是则返回trueQ否则返回false。isMultipartContentҎ是一个静态方法,不用创徏DiskFileUploadcȝ实例对象卛_被调用,其完整语法定义如下:
 public static final boolean isMultipartContent(HttpServletRequest req)
1.6. setHeaderEncodingҎ
 ׃览器在提交FORM表单Ӟ会将普通表单中填写的文本内容传递给服务器,对于文g上传字段Q除了传递原始的文g内容外,q要传递其文g路径名等信息Q如后面的图1.3所C。不FORM表单采用的是“application/x-www-form-urlencoded”~码Q还?#8220;multipart/form-data”~码Q它们仅仅是各个FORM表单字段元素内容l织CL一U格式,而这些内容又是由某种字符集编码来表示的。关于浏览器采用何种字符集来~码FORM表单字段中的内容Q请参看W者编著的《深入体验java Web开发内q——核心基》一书中的第6.9.2的讲解,“multipart/form-data”cd的表单ؓ表单字段内容选择字符集编码的原理和方式与“application/x-www-form-urlencoded”cd的表单是相同的。FORM表单中填写的文本内容和文件上传字D中的文件\径名在内存中是它们的某U字W集~码的字节数lŞ式,Apache文g上传lg在读取这些内ҎQ必ȝ道它们所采用的字W集~码Q才能将它们转换成正的字符文本q回?br />  对于览器上传给WEB服务器的各个表单字段的描q头内容QApache文g上传lg都需要将它们转换成字W串形式q回QsetHeaderEncoding Ҏ用于讄转换时所使用的字W集~码Q其原理与笔者编著的《深入体验java Web开发内q——核心基》一书中的第6.9.4节讲解的ServletRequest.setCharacterEncodingҎ相同。setHeaderEncoding Ҏ的完整语法定义如下:
 public void setHeaderEncoding(String encoding)
 其中Qencoding参数用于指定各个表单字D늚描述头内容{换成字符串时所使用的字W集~码?br />  注意Q如果读者在使用Apache文g上传lg旉C中文字符的ؕ码问题,一般都是没有正调用setHeaderEncodingҎ的原因?/font>

2.  FileItemc?br />  FileItemcȝ来封装单个表单字D元素的数据Q一个表单字D元素对应一个FileItem对象Q通过调用FileItem对象的方法可以获得相兌单字D元素的数据。FileItem是一个接口,在应用程序中使用的实际上是该接口一个实现类Q该实现cȝ名称q不重要Q程序可以采用FileItem接口cd来对它进行引用和讉KQؓ了便于讲解,q里FileItem实现cȝ之ؓFileItemcRFileItemc还实现了Serializable接口Q以支持序列化操作?br />  对于“multipart/form-data”cd的FORM表单Q浏览器上传的实体内容中的每个表单字D元素的数据之间用字D分隔界U进行分Ԍ两个分隔界线间的内容UCؓ一个分区,每个分区中的内容可以被看作两部分Q一部分是对表单字段元素q行描述的描q头Q另外一部是表单字段元素的主体内容,如图1.3所C?br />  ?1.3
 M部分有两U可能性,要么是用户填写的表单内容Q要么是文g内容。FileItemcd象实际上是对图1.3中的一个分区的数据q行装的对象,它内部用了两个成员变量来分别存储描述头和M内容Q其中保存主体内容的变量是一个输出流cd的对象。当M内容的大小于DiskFileUpload.setSizeThresholdҎ讄的界值大时Q这个流对象兌C片内存,M内容会被保存在内存中。当M内容的数据超qDiskFileUpload.setSizeThresholdҎ讄的界值大时Q这个流对象兌到硬盘上的一个时文ӞM内容被保存到该临时文g中。时文件的存储目录由DiskFileUpload.setRepositoryPathҎ讄Q时文件名的格式ؓ“upload_00000005Q八位或八位以上的数字).tmp”q种形式QFileItemcd部提供了l护临时文g名中的数g重复的机Ӟ以保证了临时文g名的唯一性。当应用E序主体内容保存到一个指定的文g中时Q或者在FileItem对象被垃圑֛收器回收Ӟ或者Java虚拟机结束时QApache文g上传lg都会试删除临时文gQ以量保证临时文g能被及时清除?br />  下面介绍FileItemcM的几个常用的ҎQ?br /> 2.1. isFormFieldҎ
 isFormFieldҎ用于判断FileItemcd象封装的数据是否属于一个普通表单字D,q是属于一个文件表单字D,如果是普通表单字D则q回trueQ否则返回false。该Ҏ的完整语法定义如下:
 public boolean isFormField()
2.2. getNameҎ
 getNameҎ用于获得文g上传字段中的文g名,对于?.3中的W三个分区所C的描述_getNameҎq回的结果ؓ字符?#8220;C:\bg.gif”。如果FileItemcd象对应的是普通表单字D,getNameҎ返回null。即使用h有通过|页表单中的文g字段传递Q何文Ӟ但只要设|了文g表单字段的name属性,览器也会将文g字段的信息传递给服务器,只是文g名和文g内容部分都ؓI,但这个表单字D仍然对应一个FileItem对象Q此ӞgetNameҎq回l果为空字符?"Q读者在调用Apache文g上传lg时要注意考虑q个情况。getNameҎ的完整语法定义如下:
 public String getName()
 注意Q如果用户用Windowspȝ上传文gQ浏览器传递该文g的完整\径,如果用户使用Linux或者Unixpȝ上传文gQ浏览器只传递该文g的名U部分?br /> 2.3QgetFieldNameҎ
 getFieldNameҎ用于q回表单字段元素的name属性|也就是返回图1.3中的各个描述头部分中的name属性|例如“name=p1”中的“p1”。getFieldNameҎ的完整语法定义如下:
 public String getFieldName()
2.4. writeҎ
 writeҎ用于FileItem对象中保存的M内容保存到某个指定的文g中。如果FileItem对象中的M内容是保存在某个临时文g中,该方法顺利完成后Q时文件有可能会被清除。该Ҏ也可普通表单字D内容写入到一个文件中Q但它主要用途是上传的文g内容保存在本地文件系l中。其完整语法定义如下Q?br />  public void write(File file)
2.5QgetStringҎ
    getStringҎ用于FileItem对象中保存的M内容作ؓ一个字W串q回Q它有两个重载的定义形式Q?br />  public java.lang.String getString()
 public java.lang.String getString(java.lang.String encoding)
     throws java.io.UnsupportedEncodingException
 前者用缺省的字符集编码将M内容转换成字W串Q后者用参数指定的字符集编码将M内容转换成字W串。如果在d普通表单字D元素的内容时出C中文q现象Q请调用W二个getStringҎQƈZ传递正的字符集编码名U?br /> 2.6. getContentTypeҎ
 getContentType Ҏ用于获得上传文g的类型,对于?.3中的W三个分区所C的描述_getContentTypeҎq回的结果ؓ字符?#8220;image/gif”Q即“Content-Type”字段的值部分。如果FileItemcd象对应的是普通表单字D,该方法将q回null。getContentType Ҏ的完整语法定义如下:
 public String getContentType()
2.7. isInMemoryҎ
 isInMemoryҎ用来判断FileItemcd象封装的M内容是存储在内存中,q是存储在时文件中Q如果存储在内存中则q回trueQ否则返回false。其完整语法定义如下Q?br />  public boolean isInMemory()
2.8. deleteҎ
 deleteҎ用来清空FileItemcd象中存放的主体内容,如果M内容被保存在临时文g中,deleteҎ删除该临时文g。尽Apachelg使用了多U方式来量及时清理临时文gQ但pȝ出现异常Ӟ仍有可能造成有的临时文g被永久保存在了硬盘中。在有些情况下,可以调用q个Ҏ来及时删除时文件。其完整语法定义如下Q?br />  public void delete()

3. FileUploadExceptionc?br />  在文件上传过E中Q可能发生各U各L异常Q例如网l中断、数据丢q{。ؓ了对不同异常q行合适的处理QApache文g上传lgq开发了四个异常c,其中FileUploadException是其他异常类的父c,其他几个cd是被间接调用的底层类Q对于Apachelg调用人员来说Q只需对FileUploadException异常c进行捕获和处理卛_?br />  
4. ServletRequestContext
 ServletRequestContextcL供访问request的方法。实现RequestContext接口?br />  



]]>
վ֩ģ壺 www.һ| Ƶһ߹ۿ| պƷרҹ| ޹a777| Ѱvվ߹ۿg| ƷAV鶹| ƷۺϾþĻ| õĻ2019| Ƶһ| AVһϵ| ޾Ʒһ| 9i9ƷѾþ| Ƶ| Ƶ| һëƬ| һëƬѿa| ޵av| ޵һɫַ| ŷ޴Ƭ| ɫƵѿ| ŷһ| ޾AA߹ۿSEE| 777777| ѹҹ߹ۿ| Ʒһ߹ۿ | ޸Ƶ| ޾ƷVƬ߹ۿ| ѹAAAAAƬ| ˬִ̼߳| ˳ɫ777777ͷ| þAV뾫Ʒɫҹ鶹 | ͼƬĻ| avƬ߹ۿ16Ů| ձѲƵ| ޸Ƶ| պAVһ| Ƶ߹ۿ| ַ߹ۿ| ޹Ʒһ| Ʒþþþþ| ޹þþþþþ|