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实现上传下载,解决了编码问题。(11955)
  • 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 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

2007年9月30日

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

1.再逼我,再逼我就装死给你看!
2.老子不但有车,还是自行的!
3.喜欢的话哥我给你买...(意识到对方的怒意后)啊不,是“哥,我给您买!”
4.鄙视我的人那么多,你算老几?
5.打死我也不说,你还没使美人儿计呢!
6.我不但手气好,脚气也不错!
7.是镜子总会反光的!
8.帅有个P用?搞不好还不是被卒子给吃掉!
9.交给我你就不用放心了,没有错不了的事!
10.别紧张,我不是什么好人......
11.别担心女朋友跟着我会出事----只要她一生蛋,我们便立即把蛋踩破,绝不让校长和父母知道!
12.别谢,谢完还怎么好意思向你收钱啊!
13.别和我说放马过来----我是阿凡提!
14.你都不理我,那我成狗不理了!
15.明月几时有,去问易中天!
16.够不着吧,左脚踩右脚上试试
17.有的人活着,她已经死了.有的人活着,他早该死了!
18.你说...你喜欢我?其实...我一开始...其实我也...唉跟你说了吧,其实我也挺喜欢我自己的.
19.你是喝水,还是喝水,还是喝水?随你挑!
20.青山依旧在,只是有点红.
21.哎该说的说,不该说的小声说

为什么呢?
走别人的路,让别人无路可走
哎呀妈呀,我可稀罕我这个小包了,320……打完折15
看看我穿的这身衣服,啥?你说我这大红配大绿不好看,别瞧不起人,我的衣服都是从专卖店买的。
眼睛一闭一睁一天儿过去,眼睛一闭不睁,一辈子过去了!
我到家了,你们还追啊!
太阳出来照大地!欢迎大伙来看戏!要问我是哪一个,人送外号小巩俐!
给朋友们来个另类点的,美国著名摇滚电视连续剧《水浒传》的主题歌《护花使者》的片头曲刀郎的《情人》献给大家!
感谢你们鸦雀无声!
矿泉水喽~茶蛋香肠烤鱼片儿喽~
小沈阳说他做飞机空姐就这么喊
就是,有一种大海地感觉呢。。。
亩嘛呀(这个读法读起来真像,感谢发明者),吃饭还能伤银呐?
Q7地,开不起我还背不起么!
你咋害不撩尼?你藐视我是不?我来了。。。
姐,姐你猜我这小包多钱你猜,320你信不,打完折15,嗯,老便宜了。
哥啊 你就是我亲爹
出来吧四舅妈 ,那我叫你啥呢老婶 !
呸 ,臭不要脸 !
就溜达piapia地,谁招我我也不回头,就溜达。

1 这是为什么呢
2 走别人的路,让别人无路可走
3 我太有才了,上辈子我是裁缝
4 都说我长得寒碜,不过我妈挺稀罕我,我妈说小时候带我去公园,老多人围着问我妈, “大姐,你家这猴搁哪买的?” 现在我都长开了。
5 出名了仍要慢慢发展看看我穿的这身衣服,啥,你说我这大红配大绿不好看,别瞧不起人,我的衣服都是从专卖店买的。
6 我在商场逛,随便问一个服务员,你卖这衣服多少钱?她说,180元。我说,30元卖不?她说卖,然后就让我交钱,我说,我不买,就是随便溜达。
7 太阳出来东方亮,山炮啥样我啥样
8 多喜庆啊
9 ——我看你长得好年轻哦 这化妆品好厉害哦 眼瞅着都六十的人了 谁能看出来了
——谁六十啊 人家一朵花没开呢
——是啊 仙人掌嘛 六十年一开嘛
10 pia pia 我就溜达,我可顽皮了呢!!
11人这一生其实可短暂了,有时候跟睡觉是一样一样的,眼睛一闭,一睁,一天过去了,HAO,眼睛一闭,不睁,这辈子过去了,HAO~~~~~~~
12 你们还追啊, 我到家了!!
13 不用拍,到我的班就是休息!
14 我看谁没鼓掌,半夜趴你家窗户~~
15 我的中文名叫小沈阳,我的英文名叫xiao shen yang

     
posted @ 2009-08-25 21:32 空空 阅读(233) | 评论 (0) | 编辑 收藏
 
[转载] 二十年后 你会比现在更幸福吗

记得小时候,我很憧憬长大。因为我觉得等长大了,父母就再也管

不着我了。可以想喝凉水就喝凉水,中午想不睡觉就不睡觉,那一

定很幸福。


等我真的长大,父母也的确管不着了,可当初认为的幸福并没有到

来。因为,虽然没有人再管我喝凉水,但我发现当初那个理想太微

不足道。而且,在得到这个微不足道的自由的同时,又有了新的更

大的不自由。比如八点上班,哪怕迟到5分钟,领导也要给脸色看。

而且那脸色,比小时候父母的难看得多。


于是,我反而开始怀念小时候那无忧无虑的生活,觉得那似乎才是

幸福。同时,又开始了新的憧憬:啥时候才能实行弹性工作制一定

很幸福,可以想睡到几点就睡到几点,再不用被闹铃惊醒好梦,再

不用连脸都不洗、袜子都忘记穿,就往办公室狂奔。


若干年后,终于实现了弹性工作制。不仅如此,随着自己混成资深

人士,可以想几点上班就几点上班,哪怕在家办公也没人说你。可

是我发现,当初期望的幸福又跑得无影无踪。因为,随着年龄的增

长,没有闹铃,早上也没了睡懒觉的福气。甚至天不亮就醒来,无

所事事地瞪眼到天明。虽然没人再要求你,可按时上班却成了习惯,

弹性工作与幸福哪有什么干系!


回忆几十年的工作经历我还发现,每到一个单位都会有一个感觉别

扭的领导,会找我的麻烦。于是,每每总是希望这个领导调走,并

固执地认为只要这个人调走,工作就会很开心。有几次,他不走我

走,此处不留爷,自有留爷处。可是,每一次都会发现,无论到哪

里,各色的、和我作对的领导都如影随形。于是又开始憧憬:哪天

媳妇熬成了婆,到我能说了算,不用再受领导的气,那一定很幸福。


若干年后,终于熬出了头:自己当上领导,可以颐指气使,让别人

看我的脸色了。可我发现,当初渴望的幸福还是没有来。因为,虽

然没有人再对你说三道四,但是,怎么什么责任都要我负,大事小

情都要我拍板,心怎么这么累呢?而且,周边的人怎么都变得如此

虚伪,自己放个屁,别人都会说香。


于是,天天开会、应酬、听汇报、布置工作,忙得像个陀螺一样的

我又开始新的憧憬:哪天能够后活得悠哉游哉,不用再管那么多事,

想钓鱼就钓鱼,想打牌就打牌,不用再看那么多虚伪的面孔、听那

些肉麻的假话、看那些枯燥的文件,那才是幸福。


光阴似箭,转眼退休了,真的再没有人要我负任何责任,当初烦人

的电话也不再打来,门庭也真的冷落到鞍马稀,所有时间都属于了

自己,我却发现,当初渴望的幸福哪里是什么幸福,简直就是人走

茶凉的冷落和无尽的孤独。


于是,一个人坐在残阳下,开始思考人生:我这一生,从小到大,

从大到老,都觉得如果怎样,明天就会得到幸福,可为啥在一个个

愿望实现后,幸福依旧没有来?这时候,才算真正明白了一句话:

“过去心不可得,未来心不可得。”一切其实尽在当下。


如果你觉得现在不幸福,总觉得改变了才是幸福,或者过去了的才

是幸福,那么恐怕一辈子都难有真正的幸福感!


不是吗?未来的还没有来,过去的已经过去。如果每一个当下我们

不抓住,不去认真对待,总想着看不见的明天或已经远去的昨天,

我们就会永远生活在紧张和失落中。随着生命一点点溜走,到头来

留下的只能是三个字:“空悲切”。

 

所以,如果想知道20年后会不会幸福,就个人心态而言,看看现在

的状态就可以知道:如果你当下感到幸福,20年后也应该会幸福;

如果你有太多的东西寄于明天,20年后,这些愿望无论是否实现,

你都可能不会感到真正的幸福。

 

道理很简单,欲望从来不是幸福的源,而是一切痛苦的根。一个欲

望满足了,马上会产生新的,就像我,满足了可以随便喝凉水的欲

望,又会产生睡懒觉欲望,周而复始,无穷无尽。

 

所以,牢记上述教训吧,幸福就在当下,就在你手中的每一天,甚

至每一刻,而绝不在过去或者未来。

posted @ 2009-06-23 09:01 空空 阅读(218) | 评论 (0) | 编辑 收藏
 
Flex参考资料收集

1. ActionScript和Mxml语言:



2. 值得借鉴的网站:



3. 布局、样式及效果:
Buzzword样式的右键菜单:  http://riashanghai.com/zh-hant/node/70
posted @ 2009-06-12 13:47 空空 阅读(268) | 评论 (0) | 编辑 收藏
 
Flex窗体各种效果(待续)

Effect中
<mx:AnimateProperty>可实现拉伸效果
<mx:Blur>模糊效果
<mx:Dissolve>实现淡出淡入效果,与<mx:Fade>相似
<mx:Glow>外发光效果
<mx:Iris>以矩形方式出现或消失
<mx:Move>移动效果
<mx:Parallel>多种效果叠加
<mx:Pause>停止   mx.effects.easing.Bounce.easeOut可产生弹动效果
<mx:Resize>改变大小
<mx:Rotate>旋转角度
<mx:SoundEffect>声音效果
<mx:WipeDown>从上往下消失或出现
<mx:WipeLeft>从右往左消失或出现
<mx:WipeRight>从左往右消失或出现
<mx:WipeUp>从下往上消失或出现
<mx:Zoom>放大或缩小
</mx:Transition>不同state切换时的过渡效果

Charts(统计)
<mx:AreaChart>是一种以面积作为表示方式
<mx:AxisRenderer>是一种轴图,股票交易常以这种方式表示
<mx:BarChart>是柱状图
<mx:BubbleChart>气泡图
<mx:CandlestickChart>一种比较有趣的图,"涨"跟"跌"的颜色会不一样
<mx:CategoryAxis>跟AxisRenderer很像
<mx:ColumnChart>跟<mx:BarChart>很像
<mx:DateTimeAxis>以日期为轴的折线图
<mx:GridLines>多条线图
<mx:HLOCChart>跟AxisRenderer很像
<mx:Legend>图例,离散的点
<mx:LinearAxis>Axis系列
<mx:LineChart>折线图
<mx:LogAxis>Axis系列
<mx:PieChart>饼图
<mx:PlotChart>跟Legend很像

posted @ 2009-06-04 17:07 空空 阅读(970) | 评论 (0) | 编辑 收藏
 
java web应用程序转exe

  最近做了一个小的web应用,客户那边都不常用java环境,让他们安装、配置java、tomcat环境对他们来说太难为他们了,
所以花了点时间研究了下exe文件的制作,将java web应用制作成exe文件,并打包了jre环境,最后生成启动服务器的快捷方式、
打开IE的快捷方式,感觉这样就成了傻瓜型的了,^!^ 由于上网找资料花了不少时间,想着方便那些有类似需要的朋友,就
在此总结一下,希望能帮助到别人吧。

  在一个没有java环境的系统中(此处只应用于windows),要执行web应用,需要jdk、tomcat(服务器),我是将机器上装的jdk目录、
tomcat目录拷贝到一个目录,还有数据库客户端,这里用的hsql,就不详细说了。这里主要注意的问题主要就是环境变量的设置,
在tomcat\bin目录中我们需要设置java_home和CATALINA_HOME,设置方法如下:
打开tomcat\bin\startup.bat,对其中if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome这样的语句都移动到下面代码的后面:
set CURRENT_DIR=%cd%                                                          注释:取得当前目录tomcat\bin
set CATALINA_HOME=%CURRENT_DIR%                                                                 
cd ..                                                                                                注释:到上一级目录tomcat                                                  
set CATALINA_HOME=%cd%                                                    
cd ..                                                                                               注释:到上一级目录delply
set JAVA_HOME=%cd%\jdk                                                       注释:设置JAVA_HOME
set JRE_HOME=%cd%\jdk\jre                                                      注释:设置JRE_HOME
其实这里的关键就是不使用以前的判断,直接设置CATALINA_HOME、JAVA_HOME等到你打包的目录
注意我的目录结构如下,大家可根据需要适当调整上面的代码:
deploy
------->tomcat
------->jdk

    再一点就是NSIS的使用,可以使用它提供的VNISEdit编译环境中的 新建脚本:向导进行配置,其中要注意的问题是
1. 选择目录的时候,设置的是目录下的内容,不包括目录;
2. 通过向导配置的快捷方式有点问题,需要手工改动编码,主要是下面的内容:
Section "yourapp" SEC01
  SetOutPath "$INSTDIR"                     (这里是你的根目录,我这里是deploy)
  SetOverwrite ifnewer
  File /r "..\deploy\*.*"                          (注意这里的格式)
SectionEnd

Section -AdditionalIcons
  SetOutPath "$INSTDIR\tomcat\bin"                   (这里是你快捷方式的起始位置,即快捷方式指向的那个文件的目录,前面设置的是根目录,这里需要重新设置,如果在前面设置的话,你的根目录就变成了你的快捷方式指向的那个文件的目录了,一定要注意这里的问题)
  CreateDirectory "$SMPROGRAMS\IBS"
  CreateShortCut "$desktop\StartServer.lnk" "$INSTDIR\tomcat\bin\startup.bat" "" "$INSTDIR\tomcat\start-server.ico"              (我这里是把tomcat里的startup.bat建立了桌面快捷方式,后面是我设置的图标)
  CreateShortCut "$desktop\StartIBS.lnk" "http://localhost:9000/appname" "" "$INSTDIR\tomcat\app_ie.ico"  (这里是我建立的桌面快捷方式,点击就打开的是我制定的网址)
  CreateShortCut "$SMPROGRAMS\IBS\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd

总结上面的内容,就是我们在打包java web系统时,主要是把tomcat、jdk放到一个目录下,使用NSIS工具将其压缩即可,需要注意的就是两点,一是tomcat中
对CATALINA_HOME、java_home的设置,二就是nsis脚本中的目录设置、快捷方式的设置了。。

posted @ 2009-05-21 22:28 空空 阅读(1017) | 评论 (0) | 编辑 收藏
 
JAVA新手学习指南[转]
每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法。因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基本上完全是自己摸索出来的。我也不知道这种方法是否是比较好的方法,只能给大家提供一点参考了。

学习Java的第一步是安装好JDK,写一个Hello World, 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰 Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两个问题摸索清楚了,就扫除了学习Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。

第二步是学习Java的语法。Java的语法是类C++的,基本上主流的编程语言不是类C,就是类C++的,没有什么新东西,所以语法的学习,大概就是半天的时间足够了。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,这可能需要有人来指点一下,我当初是完全自己琢磨出来的,花了很久的时间。不过后来我看到《Thinking in Java》这本书上面是讲了这些概念的。

第三步是学习Java的面向对象的编程语言的特性的地方。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,因为学习Java之前没有C++的经验,只有C的经验,我是大概花了一个月左右吧,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了不下5遍,才彻底领悟了。不过我想如果有 C++经验的话,应该一两天时间足够了。那么在这个过程中,可以多看看《Thinking in Java》这本书,对面向对象的讲解非常透彻。可惜的是我学习的时候,并没有看到这本书,所以自己花了大量的时间,通过自己的尝试和揣摩来学会的。

第四步就是开始熟悉Java的类库。Java的基础类库其实就是JDK安装目录下面jre\lib\rt.jar这个包。学习基础类库就是学习rt.jar。基础类库里面的类非常非常多。据说有3000多个,我没有统计过。但是真正对于我们来说最核心的只有4个,分别是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;

这四个包的学习,每个包的学习都可以写成一本厚厚的教材,而O'reilly也确实是这样做的。我觉得如果时间比较紧,是不可能通过读四本书来学习。我觉得比较好的学习方法是这样的:
首先要通读整个package的框架,了解整个package的class,interface,exception的构成,最好是能够找到介绍整个包框架的文章。这些专门介绍包的书籍的前几章应该就是这些总体的框架内容介绍。

对包整体框架的把握并不是要熟悉每个类的用法,记住它有哪些属性,方法。想记也记不住的。而是要知道包有哪些方面的类构成的,这些类的用途是什么,最核心的几个类分别是完成什么功能的。我在给人培训的时候一般是一次课讲一个包,所以不可能详细的介绍每个类的用法,但是我反复强调,我给你们讲这些包的不是要告诉你们类的方法是怎么调用的,也不要求你们记住类的方法调用,而是要你们了解,Java给我们提供了哪些类,每个类是用在什么场合,当我遇到问题的时候,我知道哪个类,或者哪几个类的组合可以解决我的问题,That'all!,当我们具体写程序的时候,只要你知道该用哪个类来完成你的工作就足够了。编码的时候,具体的方法调用,是边写代码,边查Documentation,所有的东西都在Documentation里面,不要求你一定记住,实际你也记不住3000多个类的总共将近10万个方法调用。所以对每个包的总体框架的把握就变得极为重要。

第五步,通过上面的学习,如果学的比较扎实的话,就打好了Java的基础了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其他一些比较有用处的类。相信进展到这一步,Java的自学能力已经被培养出来了,可以到了直接学习Documentation的水平了。除了要做 GUI编程之外,JDK里面其他会有用处的包是这些:
java.text.*;
java.net.*;
javax.naming.*;
这些包里面真正用的比较多的类其实很少,只有几个,所以不需要花很多时间。

第六步,Java Web 编程
Web编程的核心是HTTP协议,HTTP协议和Java无关,如果不熟悉HTTP协议的话,虽然也可以学好Servlet/JSP编程,但是达不到举一反三,一通百通的境界。所以HTTP协议的学习是必备的。如果熟悉了HTTP协议的话,又有了Java编程的良好的基础,学习 Servlet/JSP简直易如反掌,我学习Servlet/JSP就用了不到一周的时间,然后就开始用JSP来做项目了。

在Servlet/JSP的学习中,重头仍然是Servlet Documentation。Servlet API最常用的类很少,花比较少的时间就可以掌握了。把这些类都看一遍,多写几个例子试试。Servlet/JSP编程本质就是在反复调用这些类来通过HTTP协议在Web Server 和Brower之间交谈。另外对JSP,还需要熟悉几个常用JSP的标记,具体的写法记不住的话,临时查就是了。

此外Java Web编程学习的重点要放在Web Application的设计模式上,如何进行业务逻辑的分析,并且进行合理的设计,按照 MVC设计模式的要求,运用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet和JSP之间进行流程的控制和数据的共享,以及 Web Application应该如何配置和部署。

第七步,J2EE编程
以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提高。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难度比较大。

首先一定要学习好JNDI,JNDI是App Server定位服务器资源(EJB组件,Datasouce,JMS)查找方法,如果对JNDI 不熟悉的话,EJB,JMS这些东西几乎学不下去。JNDI其实就是javax.naming.*这个包,运用起来很简单。难点在于服务器资源文件的配置。对于服务器资源文件的配置,就需要看看专门的文档规范了,比如web.xml的写法,ejb-jar.xml的写法等等。针对每种不同的 App Server,还有自己的服务资源配置文件,也是需要熟悉的。

然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及该在什么场合使用JTA。这里可以简单的举个例子,我们知道一般情况可以对于一个数据库连接进行事务控制(conn.setAutoCommit(false),....,conn.commit()),做为一个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子操作,你能做的到吗?这时候只能用JTA了。假设操作过程是先往A数据库插一条记录,然后删除B 数据库另一个记录,我们自己写代码是控制不了把整个操作做为一个原子操作的。用JTA的话,由App Server来完成控制。

在学习EJB之前要学习对象序列化和RMI,RMI是EJB的基础。接着学习JMS和EJB,对于EJB来说,最关键是要理解EJB是如何通过RMI来实现对远端对象的调用的,以及在什么情况下要用到EJB。

在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习两个领域的知识,一个是UML,另一个是Design Pattern。 Java企业软件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开发成功的必要条件。在这个时候,应该开始把学习的重点放在设计模式和框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE的核心模式。

J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有很多很多的企业技术,这里不一一进行介绍了。

另外还有一个最新领域Web Services。Web Services也完全没有任何新东西,它像是一种黏合剂,可以把不同的服务统一起来提供一个统一的调用接口,作为使用者来说,我只要获得服务提供者给我的WSDL(对服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是EJB 组件,还是.Net组件,还是什么CORBA组件,还是其他的什么实现,我也不需要知道。Web Services最伟大的地方就在于通过统一的服务提供方式和调用方式,实现了整个Internet服务的共享,是一个非常令人激动的技术领域。Web Services好像目前还没有什么很好的书籍,但是可以通过在网络上面查资料的方式来学习。
posted @ 2009-02-10 15:35 空空 阅读(387) | 评论 (0) | 编辑 收藏
 
[转贴]有效编写软件的75条建议
     摘要:  1. 你们的项目组使用源代码管理工具了么?     应该用。 VSS 、 CVS 、 PVCS 、 ClearCase 、 CCC/Harvest 、 FireFly 都可以。我的选择是 VSS 。  2. 你们的项目组使用缺陷管理系统了么?     应该用。 ClearQuest 太复杂,我的推荐是 B...  阅读全文
posted @ 2008-10-23 15:43 空空 阅读(230) | 评论 (0) | 编辑 收藏
 
tomcat中mySQL的链接池配置(z)
1、下载mysql-connector-java-5.0.6-bin.jar文件并放入到Tomcat的common/lib文件夹
2、配置Tomcat的conf/server.xml,在其中增加如下代码:
              <Resource

                           name="jdbc/mysql"
                           type="javax.sql.DataSource"
                           password="ajax"
                           driverClassName="com.mysql.jdbc.Driver"
                           maxIdle="5"
                           maxWait="5000"
                           validationQuery="select 1"
                           username="ajax"
                           url="jdbc:mysql://localhost:3306/ajax"
                           maxActive="15"
                   />
3、配置项目的web.xml(WEB-INF目录)文件,增加如下代码:
                   <resource-ref>
                           <description>DB Connection</description>
                           <res-ref-name>jdbc/mysql</res-ref-name>
                           <res-type>javax.sql.DataSource</res-type>
                           <res-auth>Container</res-auth>
                   </resource-ref>
4、配置项目的context.xml(META-INF目录)文件,增加如下代码:
   可能最初没有此文件,那就创建吧,记得头上加上XML的声明
                <?xml version="1.0" encoding="UTF-8"?>

           <Context>
                   <ResourceLink
                           name="jdbc/mysql"
                           type="javax.sql.DataSource"
                           global="jdbc/mysql" />
           </Context>
5、测试配置,在Servlet中加入:


                   Context env = null;
                   try
                   {
                           env = (Context) new InitialContext().lookup("java:comp/env");
                           pool = (DataSource)env.lookup("jdbc/mysql");
                           if(pool==null)
                                   System.err.println("'DBPool' is an unknown DataSource");
                   }
                   catch(NamingException ne)
                   {
                                   ne.printStackTrace();
                   }
posted @ 2008-01-07 19:41 空空 阅读(233) | 评论 (0) | 编辑 收藏
 
Ajax使用POST提交中文乱码问题(转)
前段时间写JSP,使用AJAX以POST方式提交数据,如果是中文字符提交就会乱码,后来写ASP时用到AJAX以POST方式提交数据,中文一样是乱码。搜索一下相关资料,问题应该是提交数据时是以UTF-8编码提交,所以接收时如果使用GB2312或者其它中文编码的话就会乱码。

使用GET方式提交数据的时候,中文问题很好解决,setRequestHeader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用 POST方式来提交数据。

对于使用POST,JSP的解决方法如下:
使用escape(或encodeURI,两个函数都是JavaScript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这个是关键。

初始页面内容如下(hello.jsp):
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>AJAX提交页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<script type="text/javascript">
function justdo(){
    var post = "name=王力猛&email=wallimn@sohu.com&bokee=http://wallimn.bokee.com";
    post = encodeURI(post);
    post = encodeURI(post);    //两次,很关键
    var xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
    var URL = "act.jsp";    //文件名需要调整成测试时的相应位置
    xmlObj.open("POST",URL,true);
    xmlObj.setRequestHeader("Cache-Control","no-cache");
    xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
    xmlObj.send(post);    //注意:POST方式,使用这个来发送内容
}
</script>
</head>
<body>
<input type="button" value="提交" onclick="justdo()" />
</body>
</html>



Ajax请求处理页面(act.jsp)的内容如下:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="java.net.URLDecoder"%>
<html>
<head>
<title>ajax deal</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<%
//遍历输出参数内容。
for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
    String h = (String)e.nextElement();
    String v = request.getParameter(h);
    String mm = java.net.URLDecoder.decode(v, "UTF-8");
    System.out.println("请求参数: " + h + " = " + mm);
}
%>
</body>
</html>


分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,request.getParameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数 java.net.URLDecoder.decode()就可解出原始的正确的信息。


对于ASP,可以在客户端使用JavaScript的encodeURIComponent函数(其它编码函数可能也行,没有试)编码两次,然后ASP使用Request.Form接收后使用JavaScript的decodeURIComponent解码一次:

初始页面内容如下(hello.asp):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>AJAX提交页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<script type="text/javascript">
function justdo(){
    var post = "name=" +
encodeURIComponent(encodeURIComponent("王力猛"));    //两次
    var xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
    var URL = "act.asp";    //文件名需要调整成测试时的相应位置
    xmlObj.open("POST",URL,true);
    xmlObj.setRequestHeader("Cache-Control","no-cache");
    xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
    xmlObj.send(post);    //注意:POST方式,使用这个来发送内容
}
</script>
</head>
<body>
<input type="button" value="提交" onclick="justdo()" />
</body>
</html>


Ajax请求处理页面(act.asp)的内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ajax deal</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<%
Dim context
context = decodeText(Request.Form("name"))
Response.Write("name=" & context)
%>
</body>
</html>

<script language="javascript" runat="server">
function decodeText(str){
    return (str == null ? "" : decodeURIComponent(str));
}
</script>


ASP处理的原理跟JSP的差不多,都是在客户端编码两次,在服务器端解码一次。以上方法是我总结网上的方法和自己的研究写出来的,如果朋友你有更加好的方法请指教。
posted @ 2008-01-04 17:52 空空 阅读(4873) | 评论 (10) | 编辑 收藏
 
swing调用水晶报表
通过swing调用水晶报表的例子:
原文是: http://forum.java.sun.com/thread.jspa?threadID=371646&start=30&tstart=0

如果用eclipse开发的话,其实只需要配置Java Build Path下的libraies 和order and export的内容就行了,
我删除掉CRConfig.xml下的classpath也可以正常运行,libraies下是导入需要的jar文件,
order下注意将ReportViewer.jar 和jrcerom.jar的位置调整到最前面。。这个切记,,不然会出现:
Exception in thread "AWT-EventQueue-0" java.lang.IncompatibleClassChangeError: Implementing class

这个问题很奇怪。。

posted @ 2007-09-30 13:26 空空 阅读(5370) | 评论 (4) | 编辑 收藏
 
Eclipse中不能按application执行java类的问题

在eclipse中,新建了一个带main函数的class文件,结果不能按java application执行,
提示错误 :editor does not contain a main type 。
网上也没找到原因,又重新新建了几个class也不行,
后来我重新建了个项目,
然后在新建class就可以。。
我仔细看了下,
在出问题的项目中建立class时,上面有提示不是java project,奇怪,我建立项目的时候是java project的,
可能就是这个原因,
希望出这个问题的朋友能在这里搜索到。。

posted @ 2007-09-30 13:10 空空 阅读(832) | 评论 (0) | 编辑 收藏