java技术

智慧是第一生产力
 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(8)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • flex学习(2) (rss)
  • hibernate学习 (rss)
  • ibatis学习 (rss)
  • java 基础(14) (rss)
  • java水晶报表(1) (rss)
  • java设计模式 (rss)
  • Maven (rss)
  • Seam (rss)
  • spring学习 (rss)
  • struts2学习 (rss)
  • workflow工作流 (rss)
  • 客户端技术 (rss)
  • 工具使用(1) (rss)
  • 开发工具(6) (rss)
  • 数据库(2) (rss)
  • 生活片段(6) (rss)
  • 软件工程(1) (rss)

随笔档案

  • 2010年1月 (1)
  • 2009年12月 (2)
  • 2009年10月 (1)
  • 2009年9月 (6)
  • 2009年8月 (1)
  • 2009年6月 (3)
  • 2009年5月 (1)
  • 2009年2月 (1)
  • 2008年10月 (1)
  • 2008年1月 (2)
  • 2007年9月 (2)
  • 2007年7月 (2)
  • 2006年11月 (1)
  • 2006年10月 (3)
  • 2006年9月 (13)

相册

  • she

搜索

  •  

最新评论

  • 1. re: java 实现ftp上传下载(转)
  • 好 支持文件夹好
  • --ayns
  • 2. re: java 实现ftp上传下载(转)
  • 很好很强大!
  • --ayu.j
  • 3. re: java 实现ftp上传下载(转)
  • 不错 解决了所有的问题,支持多种格式的文件,还支持文件夹上传,借用了,谢谢!
  • --yjq
  • 4. re: ftp实现上传下载,解决了编码问题。
  • 请问,LZ用的什么FTP 服务器?
  • --kdmhh
  • 5. re: java 实现ftp上传下载(转)
  • 很好
  • --taojun

阅读排行榜

  • 1. java 实现ftp上传下载(转)(12068)
  • 2. ftp实现上传下载,解决了编码问题。(11957)
  • 3. Eclipse中配置tomcat(7480)
  • 4. javax.naming.NameNotFoundException: Name jdbc is not bound in this Context(7209)
  • 5. swing调用水晶报表(5370)

评论排行榜

  • 1. Ajax使用POST提交中文乱码问题(转)(10)
  • 2. 手机开通GPRS(7)
  • 3. java 实现ftp上传下载(转)(5)
  • 4. swing调用水晶报表(4)
  • 5. java中的io系统总结.(3)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

2010年1月19日

ftp实现上传下载,解决了编码问题。
     摘要:     很多人都碰到ftp的上传下载文件的实现,很容易碰到一些问题,最难解决的是乱码的问题, 在网上搜索了挺多,也没人能讲得清楚详细的,这里把自己实现的程序贴出来,供大家参考。 以后碰到这些问题,可以自己多看看java的API,还是很有帮助的。     另外在实现ftp上传下载的时候,还要多考虑一下上传下载失败或...  阅读全文
posted @ 2010-01-19 09:16 空空 阅读(11957) | 评论 (1) | 编辑 收藏
 

2009年12月4日

mysql命令(转)

测试环境:mysql 5.0.45
【注:可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】
整理:leo
一、连接MYSQL。
格式: mysql -h主机地址 -u用户名 -p用户密码
1、连接到本机上的MYSQL。
首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.
如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>
2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
二、修改密码。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、给root加个密码ab12。首先在DOS下进入目录mysql\bin,然后键入以下命令
mysqladmin -u root -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、再将root的密码改为djg345。
mysqladmin -u root -p ab12 password djg345
三、增加新用户。
(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to [email=test1@”%]test1@”%[/email]” Identified by “abc”;
但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。
2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),
这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “abc”;
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “”;
下篇我是MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。
一、操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。
也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
2、你可以使用光标上下键调出以前的命令。
二、显示命令
1、显示当前数据库服务器中的数据库列表:
mysql> SHOW DATABASES;
注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2、显示数据库中的数据表:
mysql> USE 库名;
mysql> SHOW TABLES;
3、显示数据表的结构:
mysql> DESCRIBE 表名;
4、建立数据库:
mysql> CREATE DATABASE 库名;
5、建立数据表:
mysql> USE 库名;
mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));
6、删除数据库:
mysql> DROP DATABASE 库名;
7、删除数据表:
mysql> DROP TABLE 表名;
8、将表中记录清空:
mysql> DELETE FROM 表名;
9、显示表中的记录:
mysql> SELECT * FROM 表名;
10、往表中插入记录:
mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);
11、更新表中数据:
mysql-> UPDATE 表名 SET 字段名1=’a',字段名2=’b’ WHERE 字段名3=’c';
12、用文本方式将数据装入数据表中:
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;
13、导入.sql文件命令:
mysql> USE 数据库名;
mysql> SOURCE d:/mysql.sql;
14、命令行修改root密码:
mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’;
mysql> FLUSH PRIVILEGES;
15、显示use的数据库名:
mysql> SELECT DATABASE();
16、显示当前的user:
mysql> SELECT USER();
三、一个建库和建表以及插入数据的实例
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳’,
year date
); //建表结束
//以下为插入字段
insert into teacher values(”,’allen’,'大连一中’,'1976-10-10′);
insert into teacher values(”,’jack’,'大连二中’,'1975-12-23′);
如果你在mysql提示符键入上面的命令也可以,但不方便调试。
(1)你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录[url=file://\\mysql\\bin]\\mysql\\bin[/url],然后键入以下命令:
mysql -uroot -p密码 < c:\\school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。
(2)或者进入命令行后使用 mysql> source c:\\school.sql; 也可以将school.sql文件导入数据库中。
四、将文本数据转到数据库中
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用[url=file://\\n]\\n[/url]来代替.例:
3 rose 大连二中 1976-10-10
4 mike 大连一中 1975-12-23
假设你把这两组数据存为school.txt文件,放在c盘根目录下。
2、数据传入命令 load data local infile “c:\\school.txt” into table 表名;
注意:你最好将文件复制到[url=file://\\mysql\\bin]\\mysql\\bin[/url]目录下,并且要先用use命令打表所在的库。
五、备份数据库:(命令在DOS的[url=file://\\mysql\\bin]\\mysql\\bin[/url]目录下执行)
1.导出整个数据库
导出文件默认是存在mysql\bin目录下
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u user_name -p123456 database_name > outfile_name.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u user_name -p database_name table_name > outfile_name.sql
3.导出一个数据库结构
mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
4.带语言参数导出
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/networld2002/archive/2009/04/23/4103407.aspx

posted @ 2009-12-04 15:38 空空 阅读(243) | 评论 (0) | 编辑 收藏
 
windows平台下Apache2.2+php5+MySQL5+zend的环境搭建配置(转)
网上已经有很多此类文章了,但我在CSDN仍看到不少新人为此问题困扰。
 
1.便捷方法:装一体化环境,如果你并非打算深入,或者刚入门。则可以先用一体化环境来配置。优点是下完安装即可使用,1分钟就能搞定。如果原来系统中装有IIS,则把端口设为 81或者其他非80端口。(以下皆为apache+php+mysql+zend)
 
  1> php4的一体化环境
http://www.onlinedown.net/soft/22078.htm
 
  2> php5的一体化环境
http://www.onlinedown.net/soft/42567.htm
 
2.如果你需要一个较为稳健而功能强劲的配置环境,则参看以下。本文采用最新版本的php、apache、mysql、zend。
 
其实,因为网上很多文章其实也没什么错,但有些细节的地方有问题。特别是在apache2.2.4与php5模块化安装的整合上。
 
先准备安装文件,几个安装文件我用华军软件园的下载地址,大家放心下:
 
apache2.2.4
最新版http://www.onlinedown.net/soft/11528.htm
发帖时最新版http://ytcnc.onlinedown.net/down/apache_2.2.4-win32-x86-no_ssl.zip
 
php5.2.3
最新版http://www.onlinedown.net/soft/1772.htm
发帖时最新版http://sx.huajun.net/down/php-5.2.3-Win32.zip
 
Mysql5.0.41
最新版http://www.onlinedown.net/soft/3573.htm
发帖时最新版http://sccnc.onlinedown.net/down/mysql-5.0.41-win32.zip
 
zend optimizer 3.2.6
最新版http://www.onlinedown.net/soft/32228.htm
发帖时最新版http://sccnc.onlinedown.net/down/ZendOptimizer-3.2.6-Windows-i386.zip
 
phpmyadmin
最新版http://www.onlinedown.net/soft/2616.htm
发帖时最新版http://sccnc.onlinedown.net/down/phpMyAdmin-2.10.3-rc1-all-languages.zip
 
-----------------------------------------------------------------------
 
1.安装apache2.2.4至某个目录比如我的是D:"apache2
2.解压php5到D:"apache2"php5目录下
3.安装mysql5到D:"apache2"mysql目录下
 
4.配置apache:
 1)打开d:"apache2"conf目录下的httpd.conf文件。
 2)apache httpd.conf设置
  A.网站主目录设置:搜索DocumentRoot "D:/apache2/htdocs"
  修改引号中的地址,为apache网页主目录。也就是http://localhost:端口号的目录。
  B.端口设置:搜索 listen,改为 Listen 81(此例中以81为端口)。如不装IIS可保留默认值为80。设为81,则主页为 http://localhost:81 否则为http://localhost
  C.加载php5模块化安装:搜索Loadmodule,在后面加一行:
LoadModule php5_module d:/apache2/php/php5apache2_2.dll
 
(这里是很多网上攻略出错的地方,apache2.2版本以下一般为
LoadModule php5_module d:/apache2/php/php5apache2.dll
apache2.2以上的版本则不行。更有甚者,竟然把php5apache2.dll改写成支持apache2.2的了,牛是很牛了,但不知道中国搞技术的到底是怎么了,都懒得自主思考,一点怀疑精神都没有。)
  
  D. php格式解析
   搜索 addType application在后面加一行:
   AddType application/x-httpd-php .php
  
  E.字符集

  搜索 AddDefaultCharset ISO-8859-1 将其改为

  AddDefaultCharset GB2312

5.配置php

  至D:"apache2"php目录下,把 php.ini-dist或php.ini-recommended拷贝至c:"windows目录下,改名为php.ini。拷贝D:"apache2"php目录下的php5ts.dll,libmysql.dll至C:"windows"system32目录下
 
   配置php.ini
   A.找到extension_dir设置为 "d:"apache2"php"ext"绝对路径,否则有些环境中会出错。
    
   b.打开功能扩展
搜索以下行,把前面的分号删除。比如
“;extension=php_mysql.dll”改为“extension=php_mysql.dll
”
#下面两行为mysql5必备,记得php_mysqli.dll必须加载,否则连不上。
extension=php_mysql.dll  
extension=php_mysqli.dll
 
#php连sql server,有用到的就设置一下
extension=php_mssql.dll

#curl功能扩展,想用php写些脚本处理远程服务期的响应消息的可以打开
extension=php_curl.dll
 
#GD库安装,此功能打开可用数据库以二进制存储图片
extension=php_gd2.dll
 
#东亚语系必备,增加字符处理速度
extension=php_mbstring.dll
 
   C.实用功能自定义配置
 
#session的存储目录。如果有内存虚拟硬盘,可以把用到的暂存处理目录都设置到
内存虚拟盘中进一步提高服务器响应速度。
   session.save_path = D:/apache2/htdocs/php_session 
 
#这个是每个脚本运行的最长时间,可以自己修改加长,单位秒
max_execution_time = 30

#这是每个脚本可以消耗的时间,单位也是秒
max_input_time = 60

#这个是脚本运行最大消耗的内存,最好设为16M以上,有的程序要求,比如openads

memory_limit = 16M

#上载文件的最大许可大小,一般post大小>upload_max_filesize。比如我的设置:

post_max_size = 300M

upload_max_filesize = 250M

6.至此,配置完成大半。

mysql与zend只要按需安装即可。装完后重启apache服务器即可。

7.最后推荐个好东西,apache的monitor.exe,可以控制apache、myql、IIS、sql server等服务器开关。好东西,我找了挺久的。感谢原作者,抱歉忘了大名

http://www.1thz.cn/apachemonitor.exe

  
8.如果您对服务器性能要求很高,我这里推荐您一个非常棒的平台组合。lighttpd可以取代apache,更轻,性能更优秀。 PostPre SQL 取代 Mysql,极其强大的开源数据库,完全满足企业商务级数据库需求。
posted @ 2009-12-04 15:35 空空 阅读(568) | 评论 (0) | 编辑 收藏
 

2009年10月19日

使用dom4j的xPath解析XML(转)
books.xml:
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <!--This is a test for dom4j, jakoes, 2007.7.19-->
    <book show="yes" url="lucene.net">
        <title id="456">Lucene Studing</title>
    </book>
    <book show="yes" url="dom4j.com">
        <title id="123">Dom4j Tutorials</title>
    </book>
    <book show="no" url="spring.org">
        <title id="789">Spring in Action</title>
    </book>
    <owner>O'Reilly</owner>
</books>

下面我们使用dom4j的xPath来解析:

segment of ParseXML.java:

    public void parseBooks(){
       
        SAXReader reader = new SAXReader();
        try {
            Document doc = reader.read("books.xml");
            Node root = doc.selectSingleNode("/books");
            List list = root.selectNodes("book[@url='dom4j.com']");
           
            for(Object o:list){
               
                Element e = (Element) o;
                String show=e.attributeValue("show");
                System.out.println("show = " + show);
            }
          
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  Document doc = reader.read("books.xml");的意思是加载XML文档,此是可以用doc.asXML()来查看,它将打印整个xml文档。

  Node root = doc.selectSingleNode("/books");是读取刚才加载的xml文档内的books节点下的所有内容,对于本例也是整个xml文档。
  当然我们也可以加载/books下的某一个节点,如:book节点
Node
root = doc.selectSingleNode("/books/book");
或:
Node root = doc.selectSingleNode("/books/*");
注意:如果有多个book节点,它只会读取第一个
root.asXML()将打印:
<book show="yes" url="lucene.net">
        <title id="456">Lucene Studing</title>
</book>

  既然加载了这么多,那我怎么精确的得到我想要的节点呢,别急,看下面:
List list = root.selectNodes("book[@url='dom4j.com']");
它的意思就是读取books节点下的
book节点,且book的节点的url属性为dom4j.com
为什么使用list来接收呢,如果有两个book节点,且它们的url属性都为dom4j.com,此时就封闭到list里了。

  如果想读取books下的所有book节点,可以这样:
List list = root.selectNodes("book");

  如果想读取books节点下的book节点下的title节点,可以这样:
List list2 = root.selectNodes("book[@url='dom4j.com']/title[@id='123']");

  注意:
selectNodes()参数的格式:
  节点名[@属性名='属性值'],如:
book[@url='dom4j.com']
  如果有多个节点,用“/”分开,如:
book[@url='dom4j.com']/title[@id='123']

  最近就是读取封闭在List里的内容了,可以用Node来读取,也可以用Element来转换。
attributeValue("属性")是读取该节点的属性值
getText()是读取节点的的内容。
posted @ 2009-10-19 15:11 空空 阅读(632) | 评论 (0) | 编辑 收藏
 

2009年9月28日

读取struts配置文件的路径问题
今天测试别人的程序,发现struts的配置文件出了问题,主要有两个(以前没用过struts1,网上很多人的解答也对不上),

一个是web.xml文件中的struts配置文件路径的写法问题,解决办法是在struts配置文件路径前加上"/"
<init-param>
   <param-name>config</param-name>
   <param-value>/struts_test.xml</param-value>
  </init-param>
抛的异常如下:
2009-9-28 13:33:53 org.apache.struts.action.ActionServlet handleConfigException
严重: Parsing error processing resource path struts_test.xml
java.net.MalformedURLException: Path struts_test.xml does not start with a "/" c
haracter
        at org.apache.catalina.core.ApplicationContext.getResource(ApplicationCo
ntext.java:473)


一个是web.xml中的struts文件的路径,struts配置文件应该是放在class目录下,比如src的根目录下,
配置就是<param-value>/struts_test.xml</param-value>,而不是WEB-INF中的路径。

严重:   Servlet   /Message   threw   load()   exception
javax.servlet.UnavailableException:   Missing   configuration   resource   for   path   /WEB-INF/struts-config.xml
at   org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:732)
at   org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:687)
at   org.apache.struts.action.ActionServlet.init(ActionServlet.java:333)
posted @ 2009-09-28 14:39 空空 阅读(920) | 评论 (0) | 编辑 收藏
 

2009年9月22日

java 实现ftp上传下载(转)

package com.why.ftp;     
    
import java.io.DataInputStream;     
import java.io.File;     
import java.io.FileInputStream;     
import java.io.FileOutputStream;     
import java.io.IOException;     
import java.io.OutputStream;     
import java.util.ArrayList;     
import java.util.List;     
import java.util.StringTokenizer;     
import sun.net.TelnetInputStream;     
import sun.net.TelnetOutputStream;     
import sun.net.ftp.FtpClient;     
    
/**   
 * ftp上传,下载   
 * @author why 2009-07-30   
 *   
 */    
public class FtpUtil {     
    
    private String ip = "";     
    
    private String username = "";     
    
    private String password = "";     
    
    private int port = -1;     
    
    private String path = "";     
    
    FtpClient ftpClient = null;     
    
    OutputStream os = null;     
    
    FileInputStream is = null;     
    
    public FtpUtil(String serverIP, String username, String password) {     
        this.ip = serverIP;     
        this.username = username;     
        this.password = password;     
    }     
         
    public FtpUtil(String serverIP, int port, String username, String password) {     
        this.ip = serverIP;     
        this.username = username;     
        this.password = password;     
        this.port = port;     
    }     
    
    /**   
     * 连接ftp服务器   
     *    
     * @throws IOException   
     */    
    public boolean connectServer(){     
        ftpClient = new FtpClient();     
        try {     
            if(this.port != -1){     
                    ftpClient.openServer(this.ip,this.port);     
            }else{     
                ftpClient.openServer(this.ip);     
            }     
            ftpClient.login(this.username, this.password);     
            if (this.path.length() != 0){     
                ftpClient.cd(this.path);// path是ftp服务下主目录的子目录                
            }     
            ftpClient.binary();// 用2进制上传、下载     
            System.out.println("已登录到\"" + ftpClient.pwd() + "\"目录");     
            return true;     
        }catch (IOException e){     
            e.printStackTrace();     
            return false;     
        }     
    }     
         
    /**   
     * 断开与ftp服务器连接   
     *    
     * @throws IOException   
     */    
    public boolean closeServer(){     
        try{     
            if (is != null) {     
                is.close();     
            }     
            if (os != null) {     
                os.close();     
            }     
            if (ftpClient != null) {     
                ftpClient.closeServer();     
            }     
            System.out.println("已从服务器断开");     
            return true;     
        }catch(IOException e){     
            e.printStackTrace();     
            return false;     
        }     
    }     
         
    /**   
     * 检查文件夹在当前目录下是否存在   
     * @param dir   
     * @return   
     */    
     private boolean isDirExist(String dir){     
         String pwd = "";     
         try {     
             pwd = ftpClient.pwd();     
             ftpClient.cd(dir);     
             ftpClient.cd(pwd);     
         }catch(Exception e){     
             return false;     
         }     
         return true;      
     }     
         
    /**   
     * 在当前目录下创建文件夹   
     * @param dir   
     * @return   
     * @throws Exception   
     */    
     private boolean createDir(String dir){     
         try{     
            ftpClient.ascii();     
            StringTokenizer s = new StringTokenizer(dir, "/"); //sign     
            s.countTokens();     
            String pathName = ftpClient.pwd();     
            while(s.hasMoreElements()){     
                pathName = pathName + "/" + (String) s.nextElement();     
                try {     
                    ftpClient.sendServer("MKD " + pathName + "\r\n");     
                } catch (Exception e) {     
                    e = null;     
                    return false;     
                }     
                ftpClient.readServerResponse();     
            }     
            ftpClient.binary();     
            return true;     
        }catch (IOException e1){     
            e1.printStackTrace();     
            return false;     
        }     
     }     
          
     /**   
      * ftp上传   
      * 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换   
      *    
      * @param filename 要上传的文件(或文件夹)名   
      * @return   
      * @throws Exception   
      */    
    public boolean upload(String filename){     
        String newname = "";     
        if(filename.indexOf("/") > -1){     
            newname = filename.substring(filename.lastIndexOf("/") + 1);     
        }else{     
            newname = filename;     
        }     
        return upload(filename, newname);     
    }     
          
     /**   
      * ftp上传   
      * 如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换   
      *    
      * @param fileName 要上传的文件(或文件夹)名   
      * @param newName 服务器段要生成的文件(或文件夹)名   
      * @return   
      */    
     public boolean upload(String fileName, String newName){     
         try{     
             String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");      
             File file_in = new File(savefilename);//打开本地待长传的文件     
             if(!file_in.exists()){     
                 throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");     
             }     
             if(file_in.isDirectory()){     
                 upload(file_in.getPath(),newName,ftpClient.pwd());     
             }else{     
                 uploadFile(file_in.getPath(),newName);     
             }     
                  
             if(is != null){     
                 is.close();     
             }     
             if(os != null){     
                 os.close();     
             }     
             return true;     
         }catch(Exception e){      
                e.printStackTrace();      
                System.err.println("Exception e in Ftp upload(): " + e.toString());      
                return false;     
         }finally{     
             try{     
                 if(is != null){     
                     is.close();     
                 }     
                 if(os != null){      
                     os.close();      
                 }     
             }catch(IOException e){     
                 e.printStackTrace();     
            }      
         }     
     }     
          
     /**   
      * 真正用于上传的方法   
      * @param fileName   
      * @param newName   
      * @param path   
      * @throws Exception   
      */    
     private void upload(String fileName, String newName,String path) throws Exception{     
             String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");      
             File file_in = new File(savefilename);//打开本地待长传的文件     
             if(!file_in.exists()){     
                 throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");     
             }     
             if(file_in.isDirectory()){     
                 if(!isDirExist(newName)){     
                     createDir(newName);     
                 }     
                 ftpClient.cd(newName);     
                 File sourceFile[] = file_in.listFiles();     
                 for(int i = 0; i < sourceFile.length; i++){     
                     if(!sourceFile[i].exists()){     
                         continue;     
                     }     
                     if(sourceFile[i].isDirectory()){     
                         this.upload(sourceFile[i].getPath(),sourceFile[i].getName(),path+"/"+newName);     
                     }else{     
                         this.uploadFile(sourceFile[i].getPath(),sourceFile[i].getName());     
                      }     
                    }     
             }else{     
                 uploadFile(file_in.getPath(),newName);     
             }     
             ftpClient.cd(path);     
     }     
    
    /**   
     *  upload 上传文件   
     *    
     * @param filename 要上传的文件名   
     * @param newname 上传后的新文件名   
     * @return -1 文件不存在 >=0 成功上传,返回文件的大小   
     * @throws Exception   
     */    
    public long uploadFile(String filename, String newname) throws Exception{     
        long result = 0;     
        TelnetOutputStream os = null;     
        FileInputStream is = null;     
        try {     
            java.io.File file_in = new java.io.File(filename);     
            if(!file_in.exists())     
                return -1;     
            os = ftpClient.put(newname);     
            result = file_in.length();     
            is = new FileInputStream(file_in);     
            byte[] bytes = new byte[1024];     
            int c;     
            while((c = is.read(bytes)) != -1){     
                os.write(bytes, 0, c);     
            }     
        }finally{     
            if(is != null){     
                is.close();     
            }     
            if(os != null){     
                os.close();     
            }     
        }     
        return result;     
    }     
    
    /**   
     * 从ftp下载文件到本地   
     *    
     * @param filename 服务器上的文件名   
     * @param newfilename 本地生成的文件名   
     * @return   
     * @throws Exception   
     */    
    public long downloadFile(String filename, String newfilename){     
        long result = 0;     
        TelnetInputStream is = null;     
        FileOutputStream os = null;     
        try{     
            is = ftpClient.get(filename);     
            java.io.File outfile = new java.io.File(newfilename);     
            os = new FileOutputStream(outfile);     
            byte[] bytes = new byte[1024];     
            int c;     
            while ((c = is.read(bytes)) != -1) {     
                os.write(bytes, 0, c);     
                result = result + c;     
            }     
        }catch (IOException e){     
            e.printStackTrace();     
        }finally{     
            try {     
                if(is != null){     
                        is.close();     
                }     
                if(os != null){     
                    os.close();     
                }     
            } catch (IOException e) {     
                e.printStackTrace();     
            }     
        }     
        return result;     
    }     
    
    /**   
     * 取得相对于当前连接目录的某个目录下所有文件列表   
     *    
     * @param path   
     * @return   
     */    
    public List getFileList(String path){     
        List list = new ArrayList();     
        DataInputStream dis;     
        try {     
            dis = new DataInputStream(ftpClient.nameList(this.path + path));     
            String filename = "";     
            while((filename = dis.readLine()) != null){     
                list.add(filename);     
            }     
        } catch (IOException e) {     
            e.printStackTrace();     
        }     
        return list;     
    }     
    
         
    
    public static void main(String[] args){     
        FtpUtil ftp = new FtpUtil("133.224.202.2","tstbill","tstbill");     
        ftp.connectServer();     
        boolean result = ftp.upload("C:/test_why", "test_why/test");     
        System.out.println(result?"上传成功!":"上传失败!");     
        List list = ftp.getFileList("test_why/test");     
        for(int i=0;i<list.size();i++){     
            String name = list.get(i).toString();     
            System.out.println(name);     
        }     
        ftp.closeServer();     
        /**   
        FTP远程命令列表   
        USER    PORT    RETR    ALLO    DELE    SITE    XMKD    CDUP    FEAT   
        PASS    PASV    STOR    REST    CWD     STAT    RMD     XCUP    OPTS   
        ACCT    TYPE    APPE    RNFR    XCWD    HELP    XRMD    STOU    AUTH   
        REIN    STRU    SMNT    RNTO    LIST    NOOP    PWD     SIZE    PBSZ   
        QUIT    MODE    SYST    ABOR    NLST    MKD     XPWD    MDTM    PROT   
        在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n   
        ftpclient.sendServer("XMKD /test/bb\r\n"); //执行服务器上的FTP命令   
        ftpclient.readServerResponse一定要在sendServer后调用   
        nameList("/test")获取指目录下的文件列表   
        XMKD建立目录,当目录存在的情况下再次创建目录时报错   
        XRMD删除目录   
        DELE删除文件   
         */    
    }     
    
}  


下面是FtpClient类的一些介绍:

sun.net.ftp.FtpClient.,该类库主要提供了用于建立FTP连接的类。利用这些类的方法,编程人员可以远程登录到FTP服务器,列举该服务器上的目录,设置传输协议,以及传送文件。FtpClient类涵盖了几乎所有FTP的功能,FtpClient的实例变量保存了有关建立"代理"的各种信息。下面给出了这些实例变量:

  public static boolean useFtpProxy
  这个变量用于表明FTP传输过程中是否使用了一个代理,因此,它实际上是一个标记,此标记若为TRUE,表明使用了一个代理主机。

  public static String ftpProxyHost
  此变量只有在变量useFtpProxy为TRUE时才有效,用于保存代理主机名。

  public static int ftpProxyPort
  此变量只有在变量useFtpProxy为TRUE时才有效,用于保存代理主机的端口地址。

  FtpClient有三种不同形式的构造函数,如下所示:

  1、public FtpClient(String hostname,int port)
   此构造函数利用给出的主机名和端口号建立一条FTP连接。

  2、public FtpClient(String hostname)
  此构造函数利用给出的主机名建立一条FTP连接,使用默认端口号。

  3、FtpClient()
  此构造函数将创建一FtpClient类,但不建立FTP连接。这时,FTP连接可以用openServer方法建立。

  一旦建立了类FtpClient,就可以用这个类的方法来打开与FTP服务器的连接。类ftpClient提供了如下两个可用于打开与FTP服务器之间的连接的方法。

  public void openServer(String hostname)
  这个方法用于建立一条与指定主机上的FTP服务器的连接,使用默认端口号。

  public void openServer(String host,int port)
  这个方法用于建立一条与指定主机、指定端口上的FTP服务器的连接。

  打开连接之后,接下来的工作是注册到FTP服务器。这时需要利用下面的方法。

  public void login(String username,String password)
  此方法利用参数username和password登录到FTP服务器。使用过Intemet的用户应该知道,匿名FTP服务器的登录用户名为anonymous,密码一般用自己的电子邮件地址。

  下面是FtpClient类所提供的一些控制命令。

  public void cd(String remoteDirectory):该命令用于把远程系统上的目录切换到参数remoteDirectory所指定的目录。
  public void cdUp():该命令用于把远程系统上的目录切换到上一级目录。
  public String pwd():该命令可显示远程系统上的目录状态。
  public void binary():该命令可把传输格式设置为二进制格式。
  public void ascii():该命令可把传输协议设置为ASCII码格式。
  public void rename(String string,String string1):该命令可对远程系统上的目录或者文件进行重命名操作。

  除了上述方法外,类FtpClient还提供了可用于传递并检索目录清单和文件的若干方法。这些方法返回的是可供读或写的输入、输出流。下面是其中一些主要的方法。

  public TelnetInputStream list()
  返回与远程机器上当前目录相对应的输入流。

  public TelnetInputStream get(String filename)
  获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。

  public TelnetOutputStream put(String filename)
  以写方式打开一输出流,通过这一输出流把文件filename传送到远程计算机

posted @ 2009-09-22 11:02 空空 阅读(12068) | 评论 (5) | 编辑 收藏
 

2009年9月8日

javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
在tomcat中发布web项目,可能是因为spring中配置了jndi(只配置了jndi,其他的有工具包封装了)。
启动的时候报错(在项目目录下,在tomcat中配置context指向项目目录就没问题,打包发布到
tomcat就报错了),抛的异常是:
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

在web.xml中添加配置如下:
<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/test</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>
posted @ 2009-09-08 17:47 空空 阅读(7209) | 评论 (0) | 编辑 收藏
 

2009年9月7日

Seam中的transaction配置问题
在组件的实现中我只用了数据库的查询,没有在Seam中设置事务,居然报错,
需要在components.xml 中设置一下transaction,先引入命名空间:
 xmlns:transaction="http://jboss.com/products/seam/transaction"
 http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd

再添加下列设置:
 <core:init transaction-management-enabled="false"/>
 <transaction:no-transaction />

报的异常如下:
ERROR SeamPhaseListener:120 - uncaught exception
java.lang.IllegalStateException: Could not start transaction
at org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:592)
at org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsBeforePhase(SeamPhaseListener.java:323)
at org.jboss.seam.jsf.SeamPhaseListener.beforeServletPhase(SeamPhaseListener.java:140)
at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListener.java:114)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:222)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:68)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:85)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.UnsupportedOperationException: no transaction
at org.jboss.seam.transaction.NoTransaction.begin(NoTransaction.java:36)
at org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:587)
... 37 more
11:11:07,671 ERROR SeamPhaseListener:127 - swallowing exception

posted @ 2009-09-07 17:46 空空 阅读(837) | 评论 (1) | 编辑 收藏
 

2009年9月3日

faces-config.xml格式问题
在使用myfaces-jsf的时候,如果配置的faces-config.xml在服务器启动时报错,需要修改faces-config.xml的头部内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config
PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
                            "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>

问题如下:

严重: Parse Error at line 2 column 14: Document is invalid: no grammar found.
org.xml.sax.SAXParseException: Document is invalid: no grammar found.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSA
ParseException(ErrorHandlerWrapper.java:236)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Er
orHandlerWrapper.java:172)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError
XMLErrorReporter.java:382)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError
XMLErrorReporter.java:316)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.sca
StartElement(XMLNSDocumentScannerImpl.java:177)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSC
ntentDispatcher.scanRootElementHook(XMLNSDocumentScannerImpl.java:779)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerIm
l$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1794)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerIm
l.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(
ML11Configuration.java:834)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(
ML11Configuration.java:764)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser
java:148)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(A
stractSAXParser.java:1242)
        at org.apache.commons.digester.Digester.parse(Digester.java:1572)
        at org.apache.myfaces.config.impl.digester.DigesterFacesConfigUnmarshal
erImpl.getFacesConfig(DigesterFacesConfigUnmarshallerImpl.java:183)
        at org.apache.myfaces.config.FacesConfigurator.feedClassloaderConfigura
ions(FacesConfigurator.java:251)
        at org.apache.myfaces.config.FacesConfigurator.configure(FacesConfigura
or.java:129)
        at org.apache.myfaces.webapp.StartupServletContextListener.initFaces(St
rtupServletContextListener.java:69)
        at org.apache.myfaces.webapp.StartupServletContextListener.contextIniti
lized(StartupServletContextListener.java:52)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardConte
t.java:3764)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:
216)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBas
.java:760)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:7
0)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544

        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:825

        at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:71
)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:49
)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.jav
:311)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecyc
eSupport.java:120)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022

        at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014

        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:44
)
        at org.apache.catalina.core.StandardService.start(StandardService.java:
48)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:70
)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

posted @ 2009-09-03 11:13 空空 阅读(1354) | 评论 (0) | 编辑 收藏
 

2009年9月2日

Oracle域用户安装

问题:
如果在域中安装Oracle 10G,

在DataBase Configuration Assisant安装的时候,会报一个错误,提示:


ORA-24324:未初始化服务句柄
ORA-24323:不允许此值
ORA-28547:连接服务器失败,可能是Oracle Net管理错误


这是因为,用域用户登录主机时,Oracle会把主机在域当中的名字当作Host名。

解决办法:

1.将sqlnet.ora文件中的
SQLNET_AUTHENTICATION_SERVICES= (NTS) 修改为 SQLNET_AUTHENTICATION_SERVICES= (NONE)


2.将listener.ora文件中LISTENER配置节中的主机名用IP地址代替
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

重新安装即可

posted @ 2009-09-02 18:01 空空 阅读(720) | 评论 (0) | 编辑 收藏
 
仅列出标题  下一页