摘要: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 1 <tr>  2          &nbs...  阅读全文
posted @ 2008-10-14 17:33 勒紧皮带向前冲 阅读(3119) | 评论 (0)编辑 收藏
 
oracle可以使用exp/imp进行逻辑导出和导入。
例:exp导出
    exp username/password@database file=xxx/xxx/xx.dmp
 
    imp导入
    imp username/password@database file=xxx/xxx/xxx.dmp FULL=y

以上的例子是对整个数据库进行的导出导入,除了以数据库外,还可以导出表,表空间。
注意在导入是如果遇到imp-00015提示following statement failed because the objiect already exits时,只需对该信息后面的所存在的对象删除,再次导入即可。
posted @ 2008-10-11 11:52 勒紧皮带向前冲 阅读(254) | 评论 (0)编辑 收藏
 
java中的集合类总结
2008年09月17日 星期三 13:59

在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现,我在使用和面试的时候频

频遇到这样的“抉择” 。 :)(主要还是面试的时候)

久而久之,也就有了一点点的心得体会,写出来以供大家讨论 。

总的说来,Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:

Collection<--List<--Vector

Collection<--List<--ArrayList

Collection<--List<--LinkedList

Collection<--Set<--HashSet

Collection<--Set<--HashSet<--LinkedHashSet

Collection<--Set<--SortedSet<--TreeSet

Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走入Array的限制。性能也就不可能

超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector“sychronized”的,这个也是Vector和

ArrayList的唯一的区别。

ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但

是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方

面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像

基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。

List总结:

1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];

2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

3. 所有的List中可以有null元素,例如[ tom,null,1 ];

4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。

HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是

在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看

HashSet的add(Object obj)方法的实现就可以一目了然了。

public boolean add(Object obj)

{

return map.put(obj, PRESENT) == null;

}

这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。

LinkedHashSet:HashSet的一个子类,一个链表。

TreeSet:SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。

Set总结:

1. Set实现的基础是Map(HashMap);

2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象

为什么要使用集合类

当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。

理解集合类

集合类存放于java.util包中。

集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。

集合类型主要有3种:set(集)、list(列表)和map(映射)。

(1)集

集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。

对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。

集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序

列中。它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。

(2)列表

列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。

列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。

关于实现列表的集合类,是我们日常工作中经常用到的,将在后边的笔记详细介绍。

(3)映射

映射与集或列表有明显区别,映射中每个项都是成对的。映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了

对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。

关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值,

散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。理想情况

下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。

集合类简介

java.util中共有13个类可用于管理集合对象,它们支持集、列表或映射等集合,以下是这些类的简单介绍

集:

HashSet: 使用HashMap的一个集的实现。虽然集定义成无序,但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap对

象实现集的存储和检索操作是在固定时间内实现的.

TreeSet: 在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用

了一个TreeMap.

列表:

Vector: 实现一个类似数组一样的表,自动增加容量来容纳你所需的元素。使用下标存储和检索对象就象在一个标准的数组中一样

。你也可以用一个迭代器从一个Vector中检索对象。Vector是唯一的同步容器类??当两个或多个线程同时访问时也是性能良好的。

Stsck: 这个类从Vector派生而来,并且增加了方法实现栈??一种后进先出的存储结构。

LinkedList: 实现一个链表。由这个类定义的链表也可以像栈或队列一样被使用。

ArrayList: 实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步。

映射:

HashTable: 实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类

是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。

HashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。

WeakHashMap: 实现这样一个映象:通常如果一个键对一个对象而言不再被引用,键/对象对将被舍弃。这与HashMap形成对照,映象

中的键维持键/对象对的生命周期,尽管使用映象的程序不再有对键的引用,并且因此不能检索对象。

TreeMap: 实现这样一个映象,对象是按键升序排列的。

Set和List都是由公共接口Collection扩展而来,所以它们都可以使用一个类型为Collection的变量来引用。这就意味着任何列表或

集构成的集合都可以用这种方式引用,只有映射类除外(但也不是完全排除在外,因为可以从映射获得一个列表。)所以说,把一个

列表或集传递给方法的标准途径是使用Collection类型的参数。

Vector 还是ArrayList,哪一个更好,为什么?

要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得

一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑的因素:

(1)API

(2)同步处理

(3)数据增长性

(4)使用模式

下面针对这4个方面进行一一探讨

API

在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这样的描述,Vector类似于

ArrayList.。所有从API的角度来看这两个类非常相似。但他们之间也还是有一些主要的区别的。

同步性

Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不

是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样

可以避免由于同步带来的不必要的性能开销。

数据增长

从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素

的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是

原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector

有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

使用模式

在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,

这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中

元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所

有元素都要执行位移的操作。这一切意味着什么呢?

这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,

你最好选择其他的集合操作类。比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在

索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator

对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。

最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效

率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。(T007)

import java.util.*;
                        public class Testset {
                        public static void main(String args[]){
                        Set set = new HashSet();
                        set.add("aaa");
                        set.add("bbb");
                        set.add("aaa");
                        set.add("bbb");
                        set.add("aaa");
                        set.add("bbb");
                        set.add("aaa");
                        set.add("bbb");
                        set.add("aaa");
                        set.add("bbb");
                        Iterator ite=set.iterator();
                        set.size();
                        while(ite.hasNext())
                        System.out.println("------"+ite.next());
                        }
                        }


转自 http://hi.baidu.com/%C1%F5%CA%E9%B3%AC%B9%A4%B3%CC%CA%A6/blog/item/fa6867fe38a018375d60084e.html
posted @ 2008-09-25 15:15 勒紧皮带向前冲 阅读(274) | 评论 (0)编辑 收藏
 

最近要做上传下载,所以又把它翻出了,熟悉了一把,做了一下字节转换的调整及上传类型的限制,当然还有上传路径的限制。不过一直在考虑的问题是怎样找到减少服务器压力的具体方法,本列子贴出来是希望能给某些新手一些帮助,同时也希望各路大侠批评指点小弟的许多不足。

 

首先建立一个FileAction

package com.action;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import com.actionForm.FileActionForm;
import org.apache.struts.actions.DispatchAction;
import java.util.Date;
import java.text.*;
import org.apache.struts.upload.FormFile;
import java.io.*;
import java.net.URLEncoder;
import com.dao.*;

public class FileAction extends DispatchAction {

    private JDBConnection connection =new JDBConnection();
//以下方法实现文件的上传
    public ActionForward upLoadFile(ActionMapping mapping, ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response) throws
            Exception {
     ActionForward forward=null;
        Date date = new Date();
        FileActionForm fileActionForm = (FileActionForm) form;
        //FormFile用于指定存取文件的类型
        FormFile file = fileActionForm.getFile(); //获取当前的文件
      // 获得系统的绝对路径  String dir = servlet.getServletContext().getRealPath("/image");
        //我上传的文件没有放在服务器上。而是存在D:D:\\loadfile\\temp\\
        String dir="D:\\loadfile\\temp\\";
        int i = 0;
  String type = file.getFileName();
  while(i!=-1){
   //找到上传文件的类型的位置,这个地方的是'.'
   i = type.indexOf(".");
  /* System.out.println(i);*/
   /*截取上传文件的后缀名,此时得到了文件的类型*/
   type = type.substring(i+1);
  }
  // 限制上传类型为jpg,txt,rar;
  if (!type.equals("jpg") && !type.equals("txt")&& !type.equals("bmp"))
   
  {//当上传的类型不为上述类型时,跳转到错误页面。
    forward=mapping.findForward("error");
  }
  else
  {  
//    将上传时间加入文件名(这个地方的是毫秒数)   
     String times = String.valueOf(date.getTime());
    //组合成 time.type
         String  fname = times + "." + type;
       //InInputStream是用以从特定的资源读取字节的方法。
          InputStream streamIn = file.getInputStream();    //创建读取用户上传文件的对象
          //得到是字节数,即byte,我们可以直接用file.getFileSize(),也可以在创建读取对象时用streamIn.available();
         // int ok=streamIn.available();          
          int ok=file.getFileSize();
          String strFee = null;
          //这个地方是处理上传的为M单位计算时,下一个是以kb,在下一个是byte;
         
          if(ok>=1024*1024)
          {
           float ok1=(((float)ok)/1024f/1024f); 
           DecimalFormat myformat1 = new DecimalFormat("0.00");        
          strFee = myformat1.format(ok1)+"M";
                 System.out.println(strFee+"M");
          }
          else if(ok>1024 && ok<=1024*1024)
          {
             double  ok2=((double)ok)/1024;
             DecimalFormat myformat2=new DecimalFormat("0.00");
            strFee = myformat2.format(ok2)+"kb";
                 System.out.println(strFee+"kb");
          }
          else if(ok<1024)
          {
           System.out.println("aaaaaaaaa");
           strFee=String.valueOf(ok)+"byte";
           System.out.println(strFee);
          
          }
          System.out.println( streamIn.available()+"文件大小byte");
          //这个是io包下的上传文件类
          File uploadFile = new File(dir);   //指定上传文件的位置
          if (!uploadFile.exists() || uploadFile == null) {  //判断指定路径dir是否存在,不存在则创建路径
              uploadFile.mkdirs();
          }
          //上传的路径+文件名
          String path = uploadFile.getPath() + "\\" + fname;
       //OutputStream用于向某个目标写入字节的抽象类,这个地方写入目标是path,通过输出流FileOutputStream去写
          OutputStream streamOut = new FileOutputStream(path);
          int bytesRead = 0;
          byte[] buffer = new byte[8192];
          //将数据读入byte数组的一部分,其中读入字节数的最大值是8192,读入的字节将存储到,buffer[0]到buffer[0+8190-1]的部分中
          //streamIn.read方法返回的是实际读取字节数目.如果读到末尾则返回-1.如果bytesRead返回为0则表示没有读取任何字节。
          while ((bytesRead = streamIn.read(buffer, 0, 8192)) != -1) {
           //写入buffer数组的一部分,从buf[0]开始写入并写入bytesRead个字节,这个write方法将发生阻塞直至字节写入完成。
              streamOut.write(buffer, 0, bytesRead);
          }
        //  关闭输出输入流,销毁File流。
          streamOut.close();
          streamIn.close();
          file.destroy();    
          String paths=path;
          System.out.println(paths);
         String fileName = Chinese.toChinese(fileActionForm.getFileName()); //获取文件的名称
        //String fileSize = String.valueOf(file.getFileSize());
         String fileDate = DateFormat.getDateInstance().format(date);
         String sql = "insert into tb_file values('" + fileName + "','" +
         strFee + "','" + fileDate + "','" + paths + "')";

         connection.executeUpdate(sql);
         connection.closeConnection();
         forward=mapping.findForward("upLoadFileResult");
  }
        return forward;
    }
    //实现文件的下载
    public ActionForward downFile(ActionMapping mapping, ActionForm form,
                                  HttpServletRequest request,
                                  HttpServletResponse response) throws
            Exception {
        String path = request.getParameter("path");
        System.out.println(path+"111");
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        OutputStream fos = null;
        InputStream fis = null;
       
      //如果是从服务器上取就用这个获得系统的绝对路径方法。  String filepath = servlet.getServletContext().getRealPath("/" + path);
        String  filepath=path;
        System.out.println("文件路径"+filepath);
        File uploadFile = new File(filepath);
        fis = new FileInputStream(uploadFile);
        bis = new BufferedInputStream(fis);
        fos = response.getOutputStream();
        bos = new BufferedOutputStream(fos);
        //这个就就是弹出下载对话框的关键代码
        response.setHeader("Content-disposition",
                           "attachment;filename=" +
                           URLEncoder.encode(path, "utf-8"));
        int bytesRead = 0;
        //这个地方的同上传的一样。我就不多说了,都是用输入流进行先读,然后用输出流去写,唯一不同的是我用的是缓冲输入输出流
        byte[] buffer = new byte[8192];
        while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
            bos.write(buffer, 0, bytesRead);
        }
        bos.flush();
        fis.close();
        bis.close();
        fos.close();
        bos.close();
        return null;
    }

}

FileActionForm

     

package com.actionForm;

import org.apache.struts.action.*;
import org.apache.struts.upload.*;

public class FileActionForm extends ActionForm {
    private String fileName;//上传文件的名称
    private String fileSize;//上传文件的大小
    private String filePath;//上传文件到服务器的路径
    private String fileDate;//上传文件的日期
    private FormFile file;//上传文件

    public String getFileName() {
        return fileName;
    }

    public FormFile getFile() {
        return file;
    }

    public String getFileSize() {
        return fileSize;
    }

    public String getFilePath() {
        return filePath;
    }

    public String getFileDate() {
        return fileDate;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public void setFile(FormFile file) {
        this.file = file;
    }

    public void setFileSize(String fileSize) {
        this.fileSize = fileSize;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public void setFileDate(String fileDate) {
        this.fileDate = fileDate;
    }

}

index.jsp  此位置的form是javabeen的对象,这个javabeen中存取的图片的相关信息

<table width="264" height="81" border="0" align="center" cellpadding="0" cellspacing="0">
                <tr>
                  <td width="115"  rowspan="4" align="center"><img src="<%=form.getFilePath()%>" width="100" height="100"></td>
                  <td width="133" align="center">图片名称:<%=form.getFileName()%></td>
                </tr>
                <tr align="center">
                  <td>图片大小:<%=form.getFileSize()%></td>
                </tr>
                <tr align="center">
                  <td>上传日期:<%=form.getFileDate()%></td>
                </tr>
                <tr>
                  <td align="center"><a href="fileAction.do?method=downFile&path=<%=form.getFilePath()%>" ><img src="priture/bottond.jpg"></a>


                  </td>
                </tr>
            </table>

<html:form action="fileAction.do?method=upLoadFile" enctype="multipart/form-data" onsubmit="return Mycheck()">
        <table height="52" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr align="center">
            <td width="60" height="26">图片名称:</td>
            <td width="160"> <html:text property="fileName"/> </td>
            <td width="60">图片路径:</td>
            <td width="198"> <html:file property="file"/> </td>
          </tr>
          <tr align="right">
            <td height="26" colspan="4"> <html:submit>上传</html:submit> </td>
          </tr>
        </table>
  </html:form>

struts-config.xml  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <form-beans>
    <form-bean name="fileActionForm" type="com.actionForm.FileActionForm" />
  </form-beans>
  <action-mappings>
    <action name="fileActionForm" parameter="method" path="/fileAction" scope="request" type="com.action.FileAction" validate="true">
        <forward name="upLoadFileResult" path="/result.jsp"/>
        <forward name="error" path="/fail.jsp"></forward>
    </action>
  </action-mappings>
  <message-resources parameter="ApplicationResources" />
</struts-config>



转自javaEye http://www.javaeye.com/topic/219585

posted @ 2008-09-25 15:12 勒紧皮带向前冲 阅读(398) | 评论 (0)编辑 收藏
 
原因:我这有两个工程,其中一个是项目工程(一下简称xg),一个是资源管理工程(一下简称zg)。他们个在一个服务器。由于将资源文件全部都是通过zg上传到资源服务器上的。所有在数据库中保存的文件路径为http://ip:port/zg/xxxx.file的形式保存的。在xg上通过这样的路径可以正常显示资源文件。但当需要下载文件时,尽管可以直接点击文件路径来下载文件(在firefox上比较方便,在maxton和ie上也可用,但也会打开文件(包括:rar,zip等文件类型)),如括号里说的一样,这样给用户的体验很不好。
解决:在zg上建一个download方法,通过将zg的请求路径放在xg的下载界面上,当点击xg界面上的下载连接时,都是请求zg的download。因此,文件下载解决。

ps:这个只是新手的我给新手兄弟们的一点分享,请各路高手尽量指点。谢谢!
ps2:to新手兄弟:关于文件上传下载网上很多,我的博客也有,请自行选择。
posted @ 2008-09-25 15:10 勒紧皮带向前冲 阅读(270) | 评论 (0)编辑 收藏
 
##Log4J的配置之简单使它遍及于越来越多的应用中了

##Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。择其一二使用就够用了。

##此文件(log4j.properties)内容来自网络,非本文作者liigo原创。
log4j.rootLogger 
= DEBUG, CONSOLE,A1
log4j.addivity.org.apache 
= true  

# 应用于控制台 
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 

#应用于文件
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 

# 应用于文件回滚 
log4j.appender.ROLLING_FILE 
= org.apache.log4j.RollingFileAppender 
log4j.appender.ROLLING_FILE.Threshold 
= ERROR 
log4j.appender.ROLLING_FILE.File 
= rolling.log 
log4j.appender.ROLLING_FILE.Append 
= true  
log4j.appender.ROLLING_FILE.MaxFileSize 
= 10KB 
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 
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 

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

# 发送日志给邮件 
log4j.appender.MAIL 
= org.apache.log4j.net.SMTPAppender 
log4j.appender.MAIL.Threshold 
= FATA
log4j.appender.MAIL.BufferSize 
= 10  
log4j.appender.MAIL.From 
= web@www.wuset.com
log4j.appender.MAIL.SMTPHost 
= www.wusetu.com 
log4j.appender.MAIL.Subject 
= Log4J Message 
log4j.appender.MAIL.To 
= web@www.wusetu.com
log4j.appender.MAIL.layout 
= org.apache.log4j.PatternLayout 
log4j.appender.MAIL.layout.ConversionPattern 
= [framework]  % d  -   % c  -%- 4r [ % t]  %- 5p  % c  % x  -   % m % n 


# 用于数据库 
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 
log4j.appender.A1 
= org.apache.log4j.DailyRollingFileAppender 
log4j.appender.A1.File 
= SampleMessages.log4j 
log4j.appender.A1.DatePattern 
= yyyyMMdd - HH ' .log4j '  
log4j.appender.A1.layout 
= org.apache.log4j.xml.XMLLayout 

#自定义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

# 结束 
posted @ 2008-09-16 12:01 勒紧皮带向前冲 阅读(270) | 评论 (0)编辑 收藏
 
昨晚做了一个春天的梦,感觉自己果然十分邪恶啊。~~~~~
posted @ 2008-09-05 16:48 勒紧皮带向前冲 阅读(126) | 评论 (0)编辑 收藏
 
在是用struts的validate框架中当使用validator-rule.xml时,当在同时验证了如maxlength和minlength的是后在复合消息的参数中都有{1}这样时。可以使用两个<arg1>来是复合参数显示正确的消息。
例如:
 1 <field property="phone" depends="required,mask,minlength,maxlength">
 2                 <arg0 key="phne" resource="false"/>
 3                 <arg1 name="minlength" key="${minlength}" resource="fasle"/>
 4                 <arg1 name="maxlength" key="${maxlength}" resource="fasle"/>
 5                 <var>
 6                     <var-name>mask</var-name>
 7                     <var-value>${phone}</var-value>
 8                 </var>
 9                 <var>
10                     <var-name>minlength</var-name>
11                     <var-value>8</var-value>
12                 </var>
13                 <var>
14                     <var-name>maxlength</var-name>
15                     <var-value>8</var-value>
16                 </var>
17             </field>


posted @ 2008-09-05 16:45 勒紧皮带向前冲 阅读(282) | 评论 (0)编辑 收藏
 
问题:有两字符串:我是中国人;是中国人。其中第一条中的 中国人在第一条字符串的length大于50%满足条件,而第二条不满足。
如何在不把源字符串的“中国人”截断来判断是否在源字符串的的length大于50&。

解决方法:
将源字符串中的“中国人”替换为‘’然后判断源字符串的length是否小于“中国人”的length。即可。
posted @ 2008-09-05 16:08 勒紧皮带向前冲 阅读(96) | 评论 (0)编辑 收藏
 
今天在学习使用org.apache.struts.actions.DispatchAction
发现应为使用myeclipse(me)来建立,因为me会默认的建立execute方法,必须将execute删去,否则自定的方法不会被调用。
posted @ 2008-09-05 11:00 勒紧皮带向前冲 阅读(161) | 评论 (0)编辑 收藏
仅列出标题
共14页: First 上一页 6 7 8 9 10 11 12 13 14 下一页