banxitan

统计

留言簿(2)

阅读排行榜

评论排行榜

2009年4月14日 #

Android Activity MainThread 中不能执行http通信解决办法

今天在做离线文件传输时。用HTTP上传文件。程序一运行 报如下的错误
android.os.NetworkOnMainThreadException

原因是Google从3开始,强制默认禁止UI主线程发起通信请求 

解决办法: 

把通信的代码转移到子线程里去做, 比较靠谱的是new一个AyncTask,在里面做通信

                          有几个细节性的问题是,

                                第一, 一般原有通信的代码都是共通的API, 被许多个Activity调用, 一个良好的修改方法是在共通API里面new AyncTask

                               第二, 通信的API一般来说都是同步的, 你通信,然后画面主线程需要堵塞住,等待API的通信结果,再决定下面的业务逻辑的走向。

所以,这块可以采取 AyncTask.get(), 让主线程堵塞,直到通信结束。 当然,如果你需要将通信异步的话, 可以用Handler机制来解决


具体调用代码如下:HTTP异

步请求

package com.qqtech.ucstar.utils;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.AsyncTask;

public class HttpReqTask extends AsyncTask<Object, Object, HttpResponse> {

@Override
protected HttpResponse doInBackground(Object arg0) {
String fileUploadUrl
= (String) arg0[0];
String streamid
= (String) arg0[1];
File file
= (File) arg0[2];
//boolean paramBoolean = Boolean.parseBoolean((String) arg0[3]);
//String paramString3 = (String) arg0[4];
HttpClient localHttpClient = new DefaultHttpClient();
//String str1 = "fileName";
File localFile = file;
try {
if ((localFile == null) || (!localFile.exists()))
throw new IOException("文件不存在:" + localFile);
}
catch (IOException e1) {
e1.printStackTrace();
}

HttpPost localPostMethod
= new HttpPost(fileUploadUrl+"?streamid="+streamid+"&fileencode=UTF-8");
//MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null, Charset.forName("UTF-8"));
try {
FileBody bin
= new FileBody(file);
reqEntity.addPart(
"file", bin);
localPostMethod.setEntity(reqEntity);
HttpResponse response
= localHttpClient.execute(localPostMethod);
return response;
}
catch (Exception e) {
e.printStackTrace();
}

return null;
}


}



调用代码如下:


Object[] param = new Object[5];
     param[0] = answer.getUploadURL();
     param[1] = answer.getStreamid();
     param[2] = new File(answer.getFileURL());
     param[3] = "false";
     param[4] = "";
     AsyncTask res = new HttpReqTask().execute(param);
     HttpResponse rep = null;
     rep = (HttpResponse) res.get();
     if (rep.getStatusLine().getStatusCode() == 200) {
      System.out.println("文件上传成功");
     }else{
      System.out.println("文件上传失败");
     }
    }



posted @ 2013-07-11 10:51 MikyTan 阅读(1081) | 评论 (0)编辑 收藏

修改模拟器DNS方法

今天在做手机终端开发时,发现连上域名服务器老是连不上,而直接用IP连接是OK的,初步怀凝是DNS问题引起来,经查相关的资料,现记录如下:

Android模拟器默认的地址是10.0.2.3,默认的DNS也是10.0.2.3,而一般电脑的IP都是192.168.1.100之类的,不在同一个网段。所以就会出现电脑可以上网但是模拟器不能上网的情况。其实设置方法很简单,只要把模拟器的默认DNS设置成电脑的DNS地址即可。
第一步:用系统的命令进入Android开发包的tools目录
 cd X:\...\android-sdk-windows\tool
第二布:使用adb的shell,确认系统的各项属性
adb shell
getprop 
getprop会列出系统当前的各项属性
第三步:得到模拟器的DNS地址
在结果里可以看到:
[net.dns1]: [10.0.2.3]
[net.dns2]: [10.0.2.4]
[net.dns3]: [10.0.2.5]
[net.dns4]: [10.0.2.6]
第四步:把dns改成我们自己的DNS
setprop net.dns1 192.168.1.1

posted @ 2013-06-04 20:24 MikyTan 阅读(1265) | 评论 (0)编辑 收藏

JAVA 连接 ORCLE RAC连接URL串

连接的URL串

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT

=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=

on))(CONNECT_DATA=(SERVICE_NAME=gs)))


posted @ 2013-05-21 16:48 MikyTan 阅读(246) | 评论 (0)编辑 收藏

Oralce 监听器启动


啟動      lsnrctl start
狀態      lsnrctl status
關閉      lsnrctl  stop

posted @ 2013-05-11 14:47 MikyTan 阅读(175) | 评论 (0)编辑 收藏

Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)


导出命令:exp 用户名/密码@数据库 owner=用户名 file=文件存储路径(如:F:\abcd.dmp)

测试截图:exp ZM/sql123@ORCL owner=ZM file=F\abcd.dmp



导入命令:imp 用户名/密码@数据库 fromuser=用户名 touser=用户名 file=d:\cu.dmp ignore=y

 imp:命令类型  

cu/mycu@db:导入的数据库登陆(用户名/密码@数据库)  

fromuser:文件的指定用户

 touser:指定导入到当前登录的数据库某个用户  

file:需要导入的数据文件  

ignore:是否忽略创建错误

 

测试截图:

imp ZM/sql123@ORCL fromuser=ZM touser=SZZM file=F:\test.dmp ignore=y





posted @ 2013-05-11 09:59 MikyTan 阅读(386) | 评论 (0)编辑 收藏

linux环境下的rmi常见问题

linux环境下的rmi常见问题

问题一:RMI服务提供程序运行在Windows操作系统下,RMI服务可以正常访问,但将RMI服务提供程序部署到Linux操作系统下后,RMI服务无法访问,提示

org.springframework.remoting.RemoteConnectFailureException:

Cannot connect to remote service [rmi://192.168.0.106:1199/ItemRetag]; nested exception is java.rmi.ConnectException: Connection refused to host: 127.0.0.1; ……   
 解决办法:在加载RMI服务之前将当前服务器的IP指定给hostName,如 System.setProperty("java.rmi.server.hostname", "192.168.100.7");或者修改/etc/hosts文件,在这个文件中加 192.168.100.54  testlinux1 localhost.localdomain localhost 就行,或者将/etc/hosts文件中默认的127.0.0.1改成当前机器的IP即可!

问题二:java.rmi.server.ExportException: internal error: ObjID already in use Caused by: java.rmi.server.ExportException: internal error: ObjID already in use……

出现这种问题及有可能是/etc/hosts文件中指定的IP并不是当前服务器的真实IP,RMI在初始化时注册服务失败。

通过System.out.println(InetAddress.getLocalHost().toString());查看当前主机的IP是否为真实IP,如显示为SIMBANK/220.250.64.24,而真实IP为192.168.1.2         

解决办法:修改/etc/hosts文件中错误的IP即可,将:

220.250.64.24          SIMBANK
修改为

192.168.1.2          SIMBANK

posted @ 2013-05-08 20:26 MikyTan 阅读(3770) | 评论 (0)编辑 收藏

IBM JDK 、SUN JDK、HP JDK如何产生Heapdump文件

JAVA中,通过分析Heapdump文件可以检查程序是否存在内存泄露,但是这个文件一般是在程序遇到致命问题时才会产生,而如何事前生成这个文件,从而在程序尚末崩溃前找出问题的所在。

以下记述了各个版本的JDK产生DUMP文件的方法:

UN JDK生成Heapdump文件只需要在tomcat启动脚本中增加 HeapDumpOnOutOfMemoryError 参数
此参数需要Java SE release 5.0 update 14 或以上支持

设置示例:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms512m -Xmx800m -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpOnCtrlBreak

IBM JDK生成Heapdump文件的开关:
— export IBM_HEAPDUMP=true
— export IBM_HEAP_DUMP=true
— export IBM_HEAPDUMP_OUTOFMEMORY=true
— export IBM_JAVADUMP_OUTOFMEMORY=true
— export IBM_JAVACORE_OUTOFMEMORY=true
— export IBM_HEAPDUMPDIR=<directory_path>

HP JDK生成Heapdump文件需要在在环境变量上,加上export _JAVA_HEAPDUMP=1

posted @ 2013-03-26 16:03 MikyTan 阅读(1088) | 评论 (0)编辑 收藏

MySql 的批量操作,要加rewriteBatchedStatements参数

今天在做某项目的POC测试,甲方提供了一个三十万记录的TXT数据文件,需要把该文件的记录插入到数据库中,由于项目部的同事在搭建测试环境中用的是Mysql数据库,在把数据导入到数据库中用的是JDBC的批处理。代码如下
private void batchParseGroup(){
        Connection con
= null;
        PreparedStatement ps 
=null;
        
try {
            con
= DbConnectionManager.getConnection();
            con.setAutoCommit(
false);
            String sql 
= " insert into jivegroup(uri,groupname,pgroupid,description,creationdate,modificationdate,priority,selfpriority) values(?,?,?,?,?,?,?,?)";
            ps
= con.prepareStatement(sql);
            
for(int i=0;i<groupList.size();i++){
                Group group 
= groupList.get(i);
                ps.setString(
1, group.getUri());
                ps.setString(
2, group.getName());
                ps.setString(
3, group.getPgroupId());
                ps.setString(
4, group.getName());
                ps.setString(
5""+System.currentTimeMillis());
                ps.setString(
6""+System.currentTimeMillis());
                ps.setInt(
7, group.getPriority());
                ps.setInt(
8, group.getPriority());
                ps.addBatch();
                
if(i%100==0){
                    ps.executeBatch();
                }

            }

            con.commit();
            ps.executeBatch();
        }
 catch (SQLException e) {
            e.printStackTrace();
        }
finally{
            DbConnectionManager.closeConnection(ps, con);
        }

    }

在测试时,发现三十万的数据居然需要十分钟左右的时间。首先想到的就是Mysql的相关配置是不是有问题,反复修改了Mysql的相应配置参数,收效甚微。

在Mysql的官网上查到如下:
 http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-configuration-properties.html

关于rewriteBatchedStatements参数,Mysql官方的说明:

Should the driver use multiqueries (irregardless of the setting of "allowMultiQueries") as well as rewriting of prepared statements for INSERT into multi-value inserts when executeBatch() is called? Notice that this has the potential for SQL injection if using plain java.sql.Statements and your code doesn't sanitize input correctly. Notice that for prepared statements, server-side prepared statements can not currently take advantage of this rewrite option, and that if you don't specify stream lengths when using PreparedStatement.set*Stream(), the driver won't be able to determine the optimum number of parameters per batch and you might receive an error from the driver that the resultant packet is too large. Statement.getGeneratedKeys() for these rewritten statements only works when the entire batch includes INSERT statements.



解决办法:
      下载最新的JDBC的驱动程序。
      MYSQL URL的配置参数如下:
      jdbc:mysql://54.200.190.80:3306/ccb_ucstar?rewriteBatchedStatements=true

经过测试。三十多万的数据。70秒内搞定!

posted @ 2013-03-13 20:38 MikyTan 阅读(2788) | 评论 (0)编辑 收藏

Linux 使用 enca 工具进行文件批量格式转换

今天在做项目中,供应源提供了一小段的源代码,但文件编码格式是GBK的,而我公司建工程时统一用的UTF-8编码,导进来后出现乱码。为了解决这一问题,在网上查找了相关的资料,发现可以用 enca工具来进行批量转换

1)下载enca工具
  wget http://dl.cihar.com/enca/enca-1.13.tar.gz
2) tar -zxvf enca-1.13.tar.gz
3)./configure
4) make
5) make install


转换命令
  enca -L zh_CN -x UTF-8 *.java


posted @ 2012-09-17 11:42 MikyTan 阅读(1389) | 评论 (0)编辑 收藏

没有那个文件或目录”的解决方法

如果sh目录存在且脚本无误,最可能是原因是在windows下写的脚本是dos格式的,放在Linux下编码不识别,解决方法是使用dos2unix命令转一下,即输入: dos2unix 文件名

posted @ 2012-08-18 16:01 MikyTan 阅读(368) | 评论 (0)编辑 收藏

毕业心得。。。。。

毕业后,有人工作,有人继续上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有缘人分享,也希望对有缘人有所帮助!这篇文章有点长,但是希望你能够耐心的看完,看完之后有种“相见恨晚”的感觉,特别激动,希望大家好好的珍藏这篇文章,相信多年以后,再来看这篇文章,一定有不同的感觉。

 

        正如”打工皇帝”唐骏说:”我觉得有两种人不要跟别人争利益和价值回报。第一种人就是刚刚进入企业的人,头5年千万不要说你能不能多给我一点儿工资,最重要的是能在企业里学到什么,对发展是不是有利……”

 

        人总是从平坦中获得的教益少,从磨难中获得的教益多;从平坦中获得的教益浅,从磨难中获得的教益深。一个人在年轻时经历磨难,如能正确视之,冲出黑暗,那就是一个值得敬慕的人。最要紧的是先练好内功,毕业后这5年就是练内功的最佳时期,练好内功,才有可能在未来攀得更高。 

 

        出路在哪里?出路在于思路!

 

  其实,没有钱、没有经验、没有阅历、没有社会关系,这些都不可怕。没有钱,可以通过辛勤劳动去赚;没有经验,可以通过实践操作去总结;没有阅历,可以一步一步去积累;没有社会关系,可以一点一点去编织。但是,没有梦想、没有思路才是最可怕的,才让人感到恐惧,很想逃避!

 

  人必须有一个正确的方向。无论你多么意气风发,无论你是多么足智多谋,无论你花费了多大的心血,如果没有一个明确的方向,就会过得很茫然,渐渐就丧失了斗志,忘却了最初的梦想,就会走上弯路甚至不归路,枉费了自己的聪明才智,误了自己的青春年华。 

 

    荷马史诗《奥德赛》中有一句至理名言:”没有比漫无目的地徘徊更令人无法忍受的了。”毕业后这5年里的迷茫,会造成10年后的恐慌,20年后的挣扎,甚至一辈子的平庸。如果不能在毕业这5年尽快冲出困惑、走出迷雾,我们实在是无颜面对10年后、20年后的自己。毕业这5年里,我们既有很多的不确定,也有很多的可能性。

 

  毕业这5年里,我们既有很多的待定,也有很多的决定。

 

  迷茫与困惑谁都会经历,恐惧与逃避谁都曾经有过,但不要把迷茫与困惑当作可以自我放弃、甘于平庸的借口,更不要成为自怨自艾、祭奠失意的苦酒。生命需要自己去承担,命运更需要自己去把握。在毕业这5年里,越早找到方向,越早走出困惑,就越容易在人生道路上取得成就、创造精彩。无头苍蝇找不到方向,才会四处碰壁;一个人找不到出路,才会迷茫、恐惧。 

 

    生活中,面对困境,我们常常会有走投无路的感觉。不要气馁,坚持下去,要相信年轻的人生没有绝路,困境在前方,希望在拐角。只要我们有了正确的思路,就一定能少走弯路,找到出路! 

 

  成功的人不是赢在起点,而是赢在转折点。 

 

  不少刚刚毕业的年轻人,总是奢望马上就能找到自己理想中的工作。然而,很多好工作是无法等来的,你必须选择一份工作作为历练。职业旅程中的第一份工作,无疑是踏入社会这所大学的起点。也许你找了一份差强人意的工作,那么从这里出发,好好地沉淀自己,从这份工作中汲取到有价值的营养,厚积薄发。千里之行,始于足下,只要出发,就有希望到达终点。

 

  起点可以相同,但是选择了不同的拐点,终点就会大大不同!   

 

  毕业这几年,我们的生活、感情、职业等都存在很多不确定的因素,未来也充满了各种可能。这个时候,必须学会选择,懂得放弃,给自己一个明确的定位,使自己稳定下来。如果你不主动定位,就会被别人和社会”定型”!

 

  可以这么说:一个人在毕业这5年培养起来的行为习惯,将决定他一生的高度。我们能否成功,在某种程度上取决于自己对自己的评价,这就是定位。你给自己定位是什么,你就是什么。定位能决定人生,定位能改变命运。丑小鸭变成白天鹅,只要一双翅膀;灰姑娘变成美公主,只要一双水晶鞋。 

 

  人的命,三分天注定,七分靠打拼,有梦就”会红”,爱拼才会赢。只要不把自己束缚在心灵的牢笼里,谁也束缚不了你去展翅高飞。

 

  现实情况远非他们所想的那样。于是,当优越感逐渐转为失落感甚至挫败感时,当由坚信自己是一块”金子”到怀疑自己是一粒”沙子”时,愤怒、迷茫、自卑就开始与日俱增。

 

  其实,应该仔细掂量一下自己,你是否真是金子?是真金,手中要有绝活,才能上要有过人之处才行。一句话:真金是要靠实力来证明的,只有先把自己的本领修炼好了,才有资格考虑伯乐的事情 

 

  每颗珍珠原本都是一粒沙子,但并不是每一粒沙子都能成为一颗珍珠。

 

  想要卓尔不群,就要有鹤立鸡群的资本。忍受不了打击和挫折,承受不住忽视和平淡,就很难达到辉煌。年轻人要想让自己得到重用,取得成功,就必须把自己从一粒沙子变成一颗价值连城的珍珠。

 

        天有下雨与日出,人生高峰与低谷。

        莫为浮云遮望眼,风物长宜放眼量。

 

    只要拂去阴霾,就能亮出朗朗晴空。如果你在工作上有些不如意,要相信自己不会一直处于人生的低谷期,总有一天能冲破重重云层。告诉自己:我并没有失败,只是暂时没有成功!只要在内心点亮一盏希望之灯,一定能驱散黑暗中的阴霾,迎来光明。 

 

   的确,论资历,他们是不折不扣的职场菜鸟,业务涉及不深,人脉一穷二白,在工作中经常碰壁。他们的压力并不一定都像千钧大石,而是像大雨来临前的天色,灰色低沉,明明有空间,却被灰色填满每个缝隙,只能等待大雨倾盆之后的晴空。

 

  ”起得比鸡早,睡得比狗晚,干得比驴多,吃得比猪差。”这是很多刚刚毕业的人喜欢用来调侃自己生活状态的话。虽然有点儿夸张,但是,他们中的很多人的确一直都被灰色心情所笼罩–心里永远是多云转阴。记得有位哲人曾说:”我们的痛苦不是问题本身带来的,而是我们对这些问题的看法产生的。”换个角度看人生,是一种突破、一种解脱、一种超越、一种高层次的淡泊与宁静,从而获得自由自在的快乐。 

 

   一位哲人说:”人生就是一连串的抉择,每个人的前途与命运,完全把握在自己手中,只要努力,终会有成。”就业也好,择业也罢,创业亦如此,只要奋发努力,都会成功。你是不是准备把生命的承诺全部都交给别人?

 

  毕业后这5年,是改变自己命运的黄金时期。在最能决定自己命运时,如果还不把握,那你还要等到什么时候呢?我的人生我做主,命运由己不由人。

 

  不要活在别人的嘴里,不要活在别人的眼里,而是把命运握在自己手里。

 

  别说你没有背景,自己就是最大的背景。美国作家杰克·凯鲁亚克说过一句话:”我还年轻,我渴望上路。”在人生的旅途中,我们永远都是年轻人,每天都应该满怀渴望。每个人的潜能都是无限的,关键是要发现自己的潜能和正确认识自己的才能,并找到一个能充分发挥潜能的舞台,而不能只为舞台的不合适感到不快。要客观公正地看待自己的能力,结合自己的实际情况和爱好冷静选择,尽可能到最需要自己、最适合自己的地方。

 

     在人力资源管理界,特别流行一个说法,即”骑马,牵牛,赶猪,打狗”理论:人品很好,能力又很强的,是千里马,我们要骑着他;人品很好但能力普通的,是老黄牛,我们要牵着他;人品、能力皆普通的,就是”猪”,我们要赶走他;人品很差能力很强的,那是”狗”,我们要打击他。

 

  我想,刚刚毕业几年的你,一样胸怀大志,一样想成为一匹被人赏识、驰骋沙场的千里马吧?那么,就好好沉淀下来。低就一层不等于低人一等,今日的俯低是为了明天的高就。所谓生命的价值,就是我们的存在对别人有价值。能被人利用是一件好事,无人问津才是真正的悲哀!

   能干工作、干好工作是职场生存的基本保障。

 

  任何人做工作的前提条件都是他的能力能够胜任这项工作。能干是合格员工最基本的标准,肯干则是一种态度。一个职位有很多人都能胜任,都有干好这份工作的基本能力,然而,能否把工作做得更好一些,就要看是否具有踏实肯干、苦于钻研的工作态度了。

 

  在能干的基础上踏实肯干。

 

  工作中,活干得比别人多,你觉得吃亏;钱拿得比别人少,你觉得吃亏;经常加班加点,你觉得吃亏……其实,没必要这样计较,吃亏不是灾难,不是失败,吃亏也是一种生活哲学。现在吃点儿小亏,为成功铺就道路,也许在未来的某个时刻,你的大福突然就来了。

 

  能吃亏是做人的一种境界,是处世的一种睿智。 

 

  在工作中并不是多做事或多帮别人干点儿活就是吃亏。如果领导让你加加班、赶赶任务,别以为自己吃了大亏,反而应该感到庆幸,因为领导只叫了你,而没叫其他人,说明他信任你、赏识你。吃亏是一种贡献,你贡献得越多,得到的回报也就越多。乐于加班,就是这样的一种吃亏。

 

  舍得舍得,有舍才有得;学会在适当时吃些亏的人绝对不是弱智,而是大智。

 

  给别人留余地就是给自己留余地,予人方便就是予己方便,善待别人就是善待自己。

 

  傻人有傻福,因为傻人没有心计。和这样的人在一起,身心放松,没有太多警惕,就能相互靠近。傻在很多时候意味着执着和忠贞,也意味着宽厚和诚实,让人不知不觉站到他一边。傻人无意中得到的,比聪明人费尽心机得到的还多。毕业这几年,你的天空中只飘着几片雪花,这样你就满足了吗?成功需要坚持与积累,与其专注于搜集雪花,不如省下力气去滚雪球。巴菲特说:”人生就像滚雪球,最重要的是发现很湿的雪和很长的坡。”让自己沉淀下来,学着发现”很湿的雪”,努力寻找”很长的坡”。记住:散落的雪花会很快融化,化为乌有,只有雪球才更实在,才能长久。

在毕业这几年里,你要是能做到比别人多付出一分努力,就意味着比别人多积累一分资本,就比别人多一次成功的机会。 

 

  什么是职业化呢?职业化就是工作状态的标准化、规范化、制度化,即在合适的时间、合适的地点用合适的方式说合适的话、做合适的事,使知识、技能、观念、思维、态度、心理等符合职业规范和标准。”在每个行业里,都有很多出色的人才,他们之所以能存在,是因为比别人更努力、更智慧、更成熟。但是,最重要的是,他们比一般人更加职业化!这就是为什么我现在能当你老板的原因。一个人仅仅专业化是不够的,只有职业化的人才能飞在别人前面,让人难以超越!”不要以为我们现在已经生存得很安稳了。对于毕业5年的人来讲,一定要认清即将面临的五大挑战。

 

一、赡养父母。

二、结婚生子。

三、升职加薪。

四、工作压力。

五、生活质量。

 

  有的人为生存而雀跃,目光总是停在身后,三天打鱼两天晒网,有始无终。

 

  有的人为发展而奋斗,目光总是盯在正前方,每天进步一点点,坚持不懈。

 

  毕业这几年,不能没有追求和探索,不能没有理想和目标。人生如逆水行舟,不进则退。甘于现状的生活就是不再前行的船,再也无法追上时代前进的步伐。一定要抓紧每一秒钟的时间来学习,要明白学习不是学生的专利。小聪明的人最得意的是:自己做过什么?大智慧的人最渴望的是:自己还要做什么?

 

  小聪明是战术,大智慧是战略;小聪明看到的是芝麻,大智慧看到的是西瓜。

 

  在这个世界上,既有大人物,也有小角色,大人物有大人物的活法,小人物有小人物的潇洒,每个人都有自己的生活方式,谁也勉强不了谁。但是,小聪明只能有小成绩和小视野,大智慧才能有大成就和大境界。小企业看老板,中企业看制度,大企业看文化。 

 

  小公司与大企业都有生存之道,没有好坏之分,但对一个人不同阶段的影响会不同。

 

  小公司肯定想要发展为大企业,这是一种目标,年轻人也要给自己的职业生涯制定目标。毕业几年的你,是否经常会怯场或者是感到没有底气?居安思危绝对不是危言耸听!此刻打盹,你将做梦;此刻学习,你将圆梦。在竞争激烈的人生战场上,打盹的都是输家!

 

  每个人在年轻的时候似乎都豪情万丈,什么都不怕,可是随着年龄的增长,每天想着房子、工作、养家糊口这些俗事儿,再也没有年轻时那种敢于”上天探星、下海捞月”的勇气了。是我们改变了生活,还是生活改变了我们?我们的思想越来越复杂,因为有了越来越多的舍不得、越来越多的顾虑,我们总是在徘徊、总是在犹豫。毕业开始一两年,生活的重担会压得我们喘不过气来,挫折和障碍堵住四面八方的通口,我们往往在压迫得自己发挥出潜能后,才能杀出重围,找到出路。可是两三年后,身上的重担开始减轻,工作开始一帆风顺,我们就松懈了下来,渐渐忘记了潜在的危险。直到有一天危机突然降临,我们在手足无措中被击败……毕业这几年,仍然处于危险期,一定要有居安思危的意识,好好打拼,这样才能有一个真正的安全人生!

 

  生于忧患,死于安乐。如果你想跨越自己目前的成就,就不能画地自限,而是要勇于接受挑战。对畏畏缩缩的人来说,真正的危险正在于不敢冒险!

 

  年轻人在社会的重压下,适应能力已变得越来越强,只是他们不自觉地习惯被环境推着走。他们不敢冒险,怕给自己带来终身的遗憾,于是告慰自己:”我对得起自己、对得起家人,因为我已竭尽全力。”其实,人只有不断挑战和突破才能逐渐成长。长期固守于已有的安全感中,就会像温水里的青蛙一样,最终失去跳跃的本能。

 

  经历了这几年社会生活,你应该明白:这个世界上有富也有贫,有阴也有亮,有丑也有美,到底看到什么,取决于自己是积极还是消极。在年轻时学会勤勉地工作,用一种光明的思维对待生活,那么,只要张开手掌,你就会发现,里面有一片灿烂的人生。

 

  把感恩刻在石头上,深深地感谢别人帮助过你,永远铭记,这是人生应有的一种境界;把仇恨写在沙滩上,淡淡忘掉别人伤害过你,学会宽容,让所有的怨恨随着潮水一去不复返,这也是一种人生境界。

 

  学会倒出水,才能装下更多的水。从毕业那天开始,学会把每天都当成一个新的起点,每一次工作都从零开始。如果你懂得把”归零”当成一种生活的常态,当成一种优秀的延续,当成一种时刻要做的事情,那么,经过短短几年,你就可以完成自己职业生涯的正确规划与全面超越。

 

  在职业起步的短短道路上,想要得到更好、更快、更有益的成长,就必须以归零思维来面对这个世界。不要以大学里的清高来标榜自己,不要觉得自己特别优秀,而是要把自己的姿态放下,把自己的身架放低,让自己沉淀下来,抱着学习的态度去适应环境、接受挑战。放下”身段”才能提高身价,暂时的俯低终会促成未来的高就。

 

  年轻人从校园或者从一个环境进入一个新环境,就要勇于将原来环境里熟悉、习惯、喜欢的东西放下,然后从零开始。我们想在职场上获得成功,首先就要培养适应力。从自然人转化为单位人是融入职场的基本条件。一个人起点低并不可怕,怕的是境界低。越计较自我,便越没有发展前景;相反,越是主动付出,那么他就越会快速发展。很多今天取得一定成就的人,在职业生涯的初期都是从零开始,把自己沉淀再沉淀、倒空再倒空、归零再归零,正因为这样,他们的人生才一路高歌,一路飞扬。

 

  在毕业这几年里,我们要让过去归零,才不会成为职场上那只背着重壳爬行的蜗牛,才能像天空中的鸟儿那样轻盈地飞翔。请好好品味一下杰克·韦尔奇说过的一句话:”纠正自己的行为,认清自己,从零开始,你将重新走上职场坦途。” 吐故才能纳新,心静才能身凉,有舍才能有得,杯空才能水满,放下才能超越。

 

  归零思维五大表现:心中无我,眼中无钱,念中无他,朝中无人,学无止境。

 

  年轻人难免带着几分傲气,认为自己无所不能、所向披靡,其实不然,初入职场的新人还是个”婴儿”,正处在从爬到走的成长阶段。在毕业这几年里,一定要让自己逐步培养起学徒思维、海绵思维、空杯思维,具有这样思维的人心灵总是敞开的,能随时接受启示和一切能激发灵感的东西,他们时刻都能感受到成功女神的召唤。

posted @ 2010-03-07 22:24 MikyTan 阅读(1895) | 评论 (2)编辑 收藏

JavaScrip 中String 与XML 互相转换的函数小记

JavaScrip 中String 与XML 互相转换的函数小记


function convert_string_to_xml(strXML)   
{   
    
if (window.ActiveXObject) {   
        xmlDoc
=new ActiveXObject("Microsoft.XMLDOM");   
        xmlDoc.async
="false";   
        xmlDoc.loadXML(strXML);   
        
return xmlDoc;   
    } 
else {   
        parser
=new DOMParser();   
        xmlDoc
=parser.parseFromString(strXML,"text/xml");   
        
return xmlDoc;   
    }   
}


function convert_xml_to_string(xmlObject)   
{   
    
if (window.ActiveXObject) { // for IE   
        return xmlObject.xml;   
    } 
else {   
        
return (new XMLSerializer()).serializeToString(xmlObject);   
    }   

 



posted @ 2010-02-02 10:37 MikyTan 阅读(215) | 评论 (0)编辑 收藏

JBOSS 下如何配置C3P0的连接池(解决Mysql 8小时的问题)

     摘要: JBOSS 下如何配置C3P0的连接池(解决Mysql 8小时的问题) 问题引起:     在公司配置文档管理系统(OPENKM)时,把数据源切换到Mysql数据源下,经过测试,发现经过8小时后,数据库连接自动断开。 解决办法:     把原来的openkm-ds.xml删除掉。原openkm-ds.xml的内容如下: ...  阅读全文

posted @ 2010-01-19 17:28 MikyTan 阅读(3181) | 评论 (0)编辑 收藏

在RedHat Enterprise Linux 5下安装JDK

一、系统环境
操作系统:  RedHat Enterprise Linux 5

 

二、安装JDK

1.      从java.sun.com下载最新的J2SE 1.5:jdk-1_5_0_17-linux-i586-rpm.bin

下载地址:

http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-1_5_0_17-linux-i586-rpm.bin?BundledLineItemUUID=QZlIBe.mUMYAAAEevV9SRJFA&OrderID=V_dIBe.mwxAAAAEeoV9SRJFA&ProductID=UEdIBe.omzcAAAEdklhGb7Xo&FileName=/jdk-1_5_0_17-linux-i586-rpm.bin

 

2.      将JDK安装文件jdk-1_5_0_17-linux-i586-rpm.bin拷贝到Redhat任意目录下。例如:/opt/jdk(目录jdk需要手动新建)

 

3.      执行   #chmod  +x  jdk-1_5_0_17-linux-i586-rpm.bin

 

4.      执行   ./jdk-1_5_0_17-linux-i586-rpm.bin

此时会出现JDK安装授权协议。可以一路按Enter浏览。如果等的不耐烦可以直接按Ctrl+C,直接会出现Do you agree to the above license terms? [yes or no]的字样。

 

5.      键入yes,同意该授权协议。

此时系统会开始解压jdk-1_5_0_17-linux-i586-rpm.bin

 

6.      解压完毕后,回到/opt/jdk目录,键入dir。会发现多出了一个解压好的安装文件:jdk-1_5_0_17-linux-i586.rpm

 

7.      执行   rpm  -ivh  jdk-1_5_0_17-linux-i586.rpm

此时,系统会开始安装JDK。安装结束后可以在/usr目录下发现新增了一个名为java的文件夹。该文件夹就是安装好的JDK目录。

 

8.      设置环境变量

a.       进入/etc文件夹(具体操作命令忽略),找到文件profile并打开。

    [注意:profile是指文件不是指文件夹]

b.       找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC,在该语句的上面添加以下语句:

        export   JAVA_HOME="/usr/java/jdk1.5.0_17"

        [注意:“=”两侧不能有空格]

        export  CLASSPATH="/usr/java/jdk1.5.0_17/lib:/usr/java/jdk1.5.0_17/jre/lib"

        [注意:“=”两侧不能有空格;“:”是冒号,同样不要有空格出现]

        pathmunge  /usr/java/jdk1.5.0_17/bin:/usr/java/jdk1.5.0_17/jre/bin

        [注意:无引号]

 

9.      设置完毕后,保存文件。重启Redhat后登录控制终端,键入:java  -version;

如果出现java version “1.5.0.17”等字样,说明您的JDK已经安装成功了!祝贺你!

 

 

 

posted @ 2009-12-30 14:45 MikyTan 阅读(1663) | 评论 (0)编辑 收藏

Jetty启动时不能修改 js等静态文件的解决

Jetty启动后,如果修改javascript文件,将不能保存,使调试很麻烦。这是因为使用了CACHE,JETTY说是WINDOWS下的一个限制。可以通过如下方法修正:

解压出jetty.jar中的org/mortbay/jetty/webapp/webdefault.xml文件,将这一选项由true改为false,另存到src/main/resources目录,或者其它自选目录。
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>true</param-value> <!-- change to false -->
</init-param>

把修改后的webdefault.xml文件跟pom.xml放在一起

修改pom.xml里的Jetty Plugin的配置,加入webdefault.xml
...
<plugin>
 <groupId>org.mortbay.jetty</groupId>
 <artifactId>maven-jetty-plugin</artifactId>
 <version>6.1.7</version>
 <configuration>
 <contextPath>/</contextPath>
 <webDefaultXml>webdefault.xml</webDefaultXml>
 ...
 </configuration>
 ...
</plugin>
...

附。。。在项目中用到的Jetty用Java代码Call Jetty启动的方法
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;

public class JettyStarter {
    
    
public JettyStarter() {
        
    }
    
public static void main(String[] args) {
        
try {
            Server server 
= new Server();
            Connector connector 
= new SelectChannelConnector();
            connector.setPort(
9999);
            server.setConnectors(
new Connector[] { connector });
            
            WebAppContext webapp 
= new WebAppContext();
            webapp.setContextPath(
"/");
            webapp.setResourceBase(
"./src/main/webapp");
            webapp.setDefaultsDescriptor(
"./webdefault.xml");
            server.setHandler(webapp);

            server.start();
            server.join();
        } 
catch (Exception e) {
            e.printStackTrace();
        }
    }
}


posted @ 2009-12-28 10:50 MikyTan 阅读(2649) | 评论 (0)编辑 收藏

Openfire

    Openfire 是由Jive Software 主导开发的一套功能非常强大的开源im 服务器(前身是

wildfire),它基于XMPP 协议,完全用java实现,是一款非常优秀的服务器端软件。


一. 安装JDK(我使用的是JDK1.6), 不再详述
二. 安装 Eclipse 5.5(不再详述)
三. 安装Subversive插件
     Subversive是一款不错的svn插件,具体安装方法请参看我的另一篇文章《Eclipse中

安装svn插件Subversive 》,链接

http://blog.csdn.net/zhenyucheung/archive/2008/03/19/2195518.aspx


四. check out openfire 源码
   1. 在eclipse中点击Windows->Open Perspective->Other
   2. 在弹出窗口中点击SVN Repository Exploring 然后点OK
   3. 在SVN Repositories 点右键,选择 New->Repository Location...
   4. 在弹出的New Repository Location页面,将

http://svn.igniterealtime.org/svn/repos输入URL文本框,点Finish. 你将会看到页面出

现URL地址.
   5. 展开URL地址
   6. 展开openfire树形结构
   7. 在trunk上点击右键,选择Check Out
   剩下的就是等待check out完成了 :)


五. 创建openfire工程
  对使用过eclipse的人来说,这一步不用多说,这里仅列出几个需要注意的地方.
  1. check out完毕后,eclipse会自动创建一个openfire工程,请把它删除(注意删除时

不要删除content),否则你将不得不手动配置一些开发环境。
  2. 用Create project from existing source新建工程,注意工程名要用openfire。

-----------------

若自己创建工程:

五.创建Java项目,将源代码导入此项目中。在Eclipse中将此Java文件夹当成源代码文件夹

新建工程。库都在Build目录的lib目录下,将openfire用到的库都添加到这个新建工程的

Referenced Libraries中。

 

六. Build openfire
  openfire是用ant构建的,所以要先设置使得eclipse中每次编译都使用内置的ant工具,

保证编译的正确执行。
  1. eclipse中点击Window->Show View->Ant
  2. 在Ant 页面点右键,选择 Add Buildfiles...
  3. 展开openfire/build文件夹,选择build.xml, 点 OK.
  4. 在Ant页面, 展开Openfire XMPP Server,双击 openfire ant 任务


七. 创建项目Builder
  1. 点击Run->Open Run Dialog...
  2. 选择Java Application,点击 New 按钮
  3. 在Run窗口的Main选项卡中, 修改Name文本框中的值,改成Openfire,其他名字亦可
  4. 点Browse按钮,选择openfire, 点ok
  5. 点Search按钮,选择Main class为

org.jivesoftware.openfire.starter.ServerStarter,点OK。(这是openfire的启动类)
  6. 点击进入Arguments选项卡
  7. 在VM arguments文本框中输入 -

DopenfireHome="${workspace_loc:openfire}/target/openfire",这个是用于eclipse执行

java命令时传递的参数,这样openfire程序可以通过System.getProperty(“openfireHome”)得到

 openfire的本地位置。
  8. 点击进入Classpath选项卡
  9. 点选User Entries,这样Advanced...就处于可用状态
  10. 点击Advanced...按钮
  11. 在Advanced Options页面,选择Add Folders, 点ok.
  12. 选择openfire\src\i18n, 点ok将这个文件夹加入到class path,同样的方式把

openfire\src\resources\jar也加到class path中。
  13. 在Common选项卡中,点选Run复选框。

设置完毕,这样以后在run这个工程的时候就会按照正确的配置进行了。

posted @ 2009-12-11 22:53 MikyTan 阅读(287) | 评论 (0)编辑 收藏

解决Maven中的OutOfMemory错误

当Maven项目很大,或者你运行诸如 mvn site 这样的命令的时候,maven运行需要很大的内存,在默认配置下,就可能遇到java的堆溢出。如:

[INFO] Building jar: /home/dl9pf/svn/mindquarry/mindquarry-jcr/mindquarry-jcr-changes/target/mindquarry-migration-with-dependencies.jar
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Java heap space
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.OutOfMemoryError: Java heap space
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:99)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:518)
...
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 minutes 14 seconds
[INFO] Finished at: Wed Sep 05 07:44:55 CEST 2007
[INFO] Final Memory: 37M/63M
[INFO] ------------------------------------------------------------------------

解决的方法是调整java的堆大小的值。

   Windows环境中
找到文件%M2_HOME%\bin\mvn.bat ,这就是启动Maven的脚本文件,在该文件中你能看到有一行注释为:

@REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE...

它的意思是你可以设置一些Maven参数,我们就在注释下面加入一行:

set MAVEN_OPTS= -Xms128m -Xmx512m
之后,当你运行Maven命令如 mvn -version 的时候,你会看到如下的输出:

E:\test>mvn -version

E:\test>set MAVEN_OPTS= -Xms128m -Xmx512m
Maven version: 2.0.9
Java version: 1.6.0_07
OS name: "windows 2003" version: "5.2" arch: "x86" Family: "windows"
我们看到,配置的Maven选项生效了,OutOfMemoryError也能得以相应的解决。

 

 

Linux环境中
也可以通过设置环境变量解决该问题, 如,编辑文件 /etc/profile 如下

MAVEN_OPTS=-Xmx512m
export JAVA_HOME MAVEN_HOME MAVEN_OPTS JAVA_BIN PATH CLASSPATH

 

如果你使用Hudson

用 Hudson + Maven做持续集成,并不幸也遇到了类似的错误,那么上述两种方式都将不再起作用了,因为Hudson使用自己的maven-agent来启动Maven,不会去调用Maven的脚本,自然相应的配置也就无效了。

好在Hudson也给为我们提供了配置点,在Hudson的项目配置页面中,有一块Build区域,这里我们已经设置了Root Pom和Goals。注意该区域的右下角有一个"Advanced..."按钮,点击会看到MAVEN_OPTS输入框,这里输入"-Xmx512m"就OK了。

 

m2eclipse中
类似以上的方法都会失效,所幸m2eclipse提供了配置点。步骤如下:

项目上右击 -> Run As -> Run Configurations -> Maven Build 上右击 -> New

这时会看到一个maven运行配置对话框,这里面其它的配置我不多解释了,为了解决内存溢出的问题,我们可以选择第二个TAB: JRE,然后在VM arguments中输入配置如:-Xms128m -Xmx512m。

posted @ 2009-11-19 18:30 MikyTan 阅读(368) | 评论 (0)编辑 收藏

UTF-8页面调用GB2312页面的JS显示乱码的解决办法

在<Script>标签里设置一个 charset

例如:
<link type="text/css" rel="stylesheet" href="http://020sun.3322.org/hxair/style.css" charset="gb2312" /> 
<script type="text/javascript" src="http://020sun.3322.org/hxair/js/command.js" charset="gb2312"></script> 

posted @ 2009-08-06 10:29 MikyTan 阅读(1105) | 评论 (0)编辑 收藏

Sysbase 中判断某表是否存在(表所对应的索引名是否存在的判断方法)

今天在写动态建表及表所对应的索引时,需要判断表及索引是否存在。现记录如下。。

判断表是否存在

select id,name from sysobjects where type='U' and name='Airbook';
其中 Airbook是所需要创建的表名。。

判断表所对应的索引名是否存在
select sysobjects.id,sysobjects.name ,sysindexes.name 
from sysobjects,sysindexes
where sysobjects.id = sysindexes.id  and 
      sysobjects.type
='U'
        
and sysobjects.name='Airbook'
        
and sysindexes.name='in_abksaleid'
;
其中 Airbook是指表名, in_abksaleid 是指所建的索引名。

查询表中的某个字段是否存在


select sysobjects.id,sysobjects.name ,syscolumns.name 
from sysobjects,syscolumns
where sysobjects.id = syscolumns.id  and 
      sysobjects.type
='U'
        
and sysobjects.name='Airbook'
        
and syscolumns.name='Agent_ID'
;

其中Airbook是指表名,Agent_ID为Airbook的字段

posted @ 2009-07-20 21:14 MikyTan 阅读(979) | 评论 (0)编辑 收藏

适配器模式(Adapter)

为一个接口提供缺省实现,这样子类可以从这个缺省实现进行扩展.而不必从原有接口进行扩展.作为适配器模式的一个特例,缺省适配模式在java语言中有着特殊的应用.(引用java模式书)

adapter是一个非常常用的设计模式.
像windows的每个窗口,事件很多个.关闭,移动,最大化,最小化,
java代码设计如下:
interface 窗口{
public void 关闭();
public void 移动();
public ovid 最大化();
...
...
}
如果客户点击了关闭按钮,java类实现如下:
Frame implements 窗口{
public void 关闭(){
System.out.println("关闭窗口");
}

public void 移动()[
}
public ovid 最大化(){
}
...
...
}
这里面我们可以看出,我们关注的只有关闭按钮触发的事件,其它的我们不用管.但是在java类中,我们必须把接口的所有方法都给实现.这样我们连一些没有用的方法也得给实现.那怕是空实现.


下面我们来建一个抽象类来实现这个接口.
public abstract Frame implements 窗口{
public void 关闭(){

}

public void 移动(){
}
public ovid 最大化(){
}
...
...
}
这里我们可以看出,抽象类给每个接口一个空的实现,那我们都可以在抽象类的基础上进行扩展。关闭功能实现如下:
public CloseFrame extends Frame{
public void 关闭(){
System.out.println("关闭窗口");

}
}

像在java中的事件处理都是用适配器模式来实现的。接口,抽象类都是已经写好的。我们只需要实现具体功能的类就可以了。

再举个简单的例子:
假如存在如下接口:
interface TestInterface{
void test1();
void test2();
void test3();
}
如果我们只关注test1接口应该怎样写呢。
abstract class TestAbstract implements Test{
public void test1(){
}
public void test2(){
}
public void test3(){
}
}
class TestTest1 extends TestAbstract{
public void test1(){
System.out.println("方法1实现");
}
}
那么在什么情况下用相信大家已经能看得出来了吧。假如你不准备实现接口的所有方法。就可以建一个抽象类来实现这个接口的所有方法,当然这里全都是空的实现.然后再写一个类继承这个抽象类就可以得到你想要的结果了.

posted @ 2009-07-06 21:17 MikyTan 阅读(180) | 评论 (0)编辑 收藏

Java字符串操作小记

JAVA 把字符串间的若干空格保留一个

String str="你  好,       Fuck   You";
  System.out.println(str.replaceAll("\\s+"," "));

javascript和java里的回车换行符的处理

 request.getParameter("modelTail").replaceAll("<br>",String.valueOf((char)13)).replaceAll("<bt>",String.valueOf((char)10))
 content.replaceAll(String.valueOf((char)13),"<br>").replaceAll(String.valueOf((char)10),"<bt>")
 document.all.txtContent.value = (varGet2.Content).replace("<br>",String.fromCharCode(13)).replace("<bt>",String.fromCharCode(10));
  javascript里的String.fromCharCode 和 strObj.charCodeAt(index)

posted @ 2009-06-27 12:08 MikyTan 阅读(164) | 评论 (0)编辑 收藏

tomcat 配置 小记

  Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,轻微时,会使系统性能急剧下降,严重时,将导致系统无法运行,影响系统的稳定性。当内存不够用时,常见的问题就是报tomcat内存益处错误,从儿导致客户端包500错误的,如下:解决方法主要是加大TOMCAT可利用内存,并在程序当中加大内存使用。因此根据应用的需求,有必要调整JVM使用内存的大小。现在将手工修改tomcat内存的方法及注意事项列出,希望能对新人有所帮助。
tomcat提供了两种安装模式,即免安装(*.zip)和安装(*.exe)方式。针对不同的安装方式下修改tomcat内存大小的方法几注意问题(windows环境):
 方式1:当选择安装方式时,可以在安装tomcat的过程进行设置tomcat初始化内存的大小。但是假如说在安装时没有选择,或者应用改变了,需要增加tomcat内存时怎么半呢?此时,我们就要手工修改tomcat的一些文件了:
 看了很多网上的资料,都是说修改<CATALINA_HOME>\bin\catalina.bat文件的内容,即在里面增加一行代码:
set JAVA_OPTS=-Xms512m -Xmx512m //表示初始化最小可用内存和最大可用内存都是512MB(修改相应值即可)
 
 如在catalina.bat的
     rem ----- Execute The Requested Command
     echo Using CATALINA_BASE:   %CATALINA_BASE%
     echo Using CATALINA_HOME:   %CATALINA_HOME%
     echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
     echo Using JAVA_HOME:       %JAVA_HOME%
这一栏改为
    rem ----- Execute The Requested Command
    set JAVA_OPTS=-Xms512m -Xmx512m
    echo Using CATALINA_BASE:   %CATALINA_BASE%
    echo Using CATALINA_HOME:   %CATALINA_HOME%
    echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
    echo Using JAVA_HOME:       %JAVA_HOME%
就可以将JAVA虚拟机分配内存  508.0625MB的!
但是很多人修改后,发现修改并没有起作用,即通过windows的服务启动tomcat时,实际的内存还是默认的,修改的设置并没有起作用;而通过<CATALINA_HOME>\bin\startup.bat 启动却是生效的。这是为什么呢?因为在安装过程中,JVM的初始化参数已经写在注册表中了,由于没有修改注册表中相关参数,所以以windows服务方式启动时,修改的并没有生效。而通过<CATALINA_HOME>\bin\startup.bat 启动直接是通过<CATALINA_HOME>\bin\catalina.bat文件中的配置的。你需要重新加载到系统服务中才生效,或者你手工在注册表中查找修改启动值,加载到服务中的时候参数已经配置好了,自己修改artup.bat不会改变注册表中的参数设置。
 
解决方法:修改注册表中的参数,加入JVM初始化内存的参数:
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
如加入 -Xms512m -Xmx800m
 
方式2:针对免安装的用户,也可以通过将tomcat注册为windows的一个服务的方式来实现:‘
我们可以对service.bat文件做一些其他修改,使tomcat更加能满足我们各种不同需求时的要求
1. 如果让tomcat编译jsp文件,就在PR_CLASSPATH中加入J2SDK的tools.jar
修改前:
set PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar
修改后:
set PR_CLASSPATH=%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\bin\bootstrap.jar
2.要使用一个特定的JVM,就要修改jvm的参数;要使注册的windows服务的启动方式为自动,增加--Startup Automatic,这个是比较常用的;要用定制的server.xml配置文件并且传递多个参数给StartClass,要修改StartParams的值,各个值之间用分号分隔:
修改前:
"%EXECUTABLE%" //IS//%SERVICE_NAME% --Jvm auto
--StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap
--StartParams start --StopParams stop
修改后:
"%EXECUTABLE%" //IS//%SERVICE_NAME% --Jvm "%JAVA_HOME%\jre\bin\server\jvm.dll"
--StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap
--StartParams "-config;%CUSTOM_SERVERXML_FILE%;-nonaming;start" --StopParams stop
--Startup Automatic
3. 指定最大和最小的内存限制,要增加jvm的初始参数
修改前:
"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions
"-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\common\endorsed"
--StartMode jvm --StopMode jvm
修改后:
"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions
"-Xms128M;-Xmx256M;-Dcatalina.base=%CATALINA_BASE%;-Dcatalina.home=%CATALINA_HOME%;-Djava.endorsed.dirs=%CATALINA_HOME%\common\endorsed"
--StartMode jvm --StopMode jvm
4.有时注册windows服务成功后,但是启动服务时显示“发生服务特定错误: 0.”
就是因为jvm没有指定,修改Jvm auto为Jvm "%JAVA_HOME%\jre\bin\server\jvm.dll"后重新注册windows服务就可以启动了。

posted @ 2009-05-27 11:16 MikyTan 阅读(248) | 评论 (0)编辑 收藏

Struts2中 用OGNL表达式定义字符串常量 与单个字符常量需要注意的一个小细节

具体记录如下:

<s:set name="fieldType" value="'condition'"></s:set>
<s:set name="countryID" value="'CHN'"></s:set>
<s:set name="corpCenter" value="#session.opType.corpCenter"></s:set>
<s:set name="corpID" value="#session.opType.corpID"></s:set>
<s:set name="corpType" value="#session.opType.corpType"></s:set>
<s:set name="agentID" value=""></s:set>
<s:set name="city" value=""></s:set>
<s:set name="agentType" value='"A"'></s:set>
注意上面红色部分的标识。当定义的变量为单个字符是,必须外面是单引号,字符用双引号引起。

<s:action name="ReportBeanListAction" id="reportBeanSkyechoAgentListAction">
                      <s:param name="agentID"><s:property value="agentID" /></s:param>
         <s:param name="city"><s:property value="city" /></s:param>
         <s:param name="corpID"><s:property value="corpID" /></s:param>
         <s:param name="corpCenter"><s:property value="corpCenter" /></s:param>
         <s:param name="agentType"><s:property value="agentType" /></s:param>
                        </s:action>

附:转载OGNL表达式相关的知识点:

OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。

为什么使用OGNL
相对于其它的表达式语言,OGNL的功能更为强大,它提供了很多高级而必需的特性,例如强大的类型转换功能、静态或实例方法的执行、跨集合投影,以及动态lambda表达式定义等。
OGNL基础
OGNL表达式的计算都是围绕OGNL上下文来进行的,OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类(实现了 java.util.Map接口)来表示。OGNL上下文可以包含一个或多个JavaBean对象,在这些对象中有一个是特殊的,这个对象就是上下文的根 (root)对象。如果在写表达式的时候,没有指定使用上下文中的哪一个对象,那么根对象将被假定为表达式所依据的对象。
在OGNL上下文中,只能有一个根对象,如果你访问根对象,那么在写表达式的时候,直接写对象的属性就可以了;否则,你需要使用“#key”前缀,例如表达式#namager.name。
OGNL表达式
OGNL表达式的基础单元就是导航链,通常简称为链(chain)。最简单的链由下列部分组成:
1、属性名:如name和manager.name;
2、方法调用:如manager.hashCode(),返回manager对象的散列码;
3、数组索引:如emals[0],返回当前对象的邮件列表中的第一个邮件地址。
所有OGNL表达式的计算都是在当前对象的上下文中,一个链简单地使用链中先前链接的结果作为下一步计算的当前对象。我们看如下所示的链:
name.toCharArray()[0].numericValue.toString()
这个表达式按照下列的步骤进行计算:
1、获取根对象的name属性;
2、在String结果上调用toCharArray()方法;
3、从char数组中提取第一个字符;
4、从提取的字符对象上行到numericValue属性(这个字符被表示为Character对象,Character类有一个getNumericValue()方法);
5、在Integer对象结果上调用toString()方法。
这个表达式最终结果是最后返回的toString()方法调用返回的字符串。
常量
OGNL支持的所有常量类型:
1、字符串常量:
以单引号或双引号括起来的字符串。如”hello”,’hello’。
不过要注意的是,如果是单个字符的字符串常量,必须使用双引号。
2、字符常量:
以单引号括起来的字符。如’a'。
3、数值常量:
除了Java中的int、long、float和double外,OGNL还让你使用“b”或“B”后缀指定BigDecimal常量,用“h”“H”后缀指定BigInteger常量。
4、布尔常量:
true和false。
5、null常量。
操作符
OGNL除了支持所有的Java操作符外,还支持以下几种:
1、逗号,
与C语言中的逗号操作符类似。
2、花括号{}
用于创建列表,元素之间用逗号分隔。
3、in和not in
用于判断一个值是否在集合中。
访问JavaBean的属性
假如有一个employee对象作为OGNL上下文的根对象,那对于下面的表达式:
1、name
对应的java代码是employee.getName();
2、address.country
对应的java代码是employee.getAddress().getCountry();
访问静态方法和静态字段
@class@method(args)     //调用静态方法
@class@field           //调用静态字段
其中class必须给出完整的类名(包括包名),如果省略class,那么默认使用的类是java.util.Math,如:
@@min(5,3)
@@max(5,3)
@@PI
索引访问
OGNL支持多种索引方式的访问。
1、数组和列表索引
在OGNL中,数组和列表可以大致看成是一样的。
如:array[0]、list[0]。表达式:{’zhangsan’,'lisi’,'wangwu’}[1]等。
2、JavaBean的索引属性
要使用索引属性,需要提供两对setter和getter方法,一对用于数组,一对用于数组中的元素。
如:有一个索引属性interest,它的getter和setter如下
public String[] interest;
public String[] getInterest(){ return interest;}
public void setInterest(String[] interest){ this.interest=interest;}
public String getInterest(int i){ return interest[i]}
public void setInterest(int i, String newInterest){ interest[i]=newInterest;}
对于表达式interest[2],OGNL可以正确解释这个表达式,调用getInterest(2)方法。如果是设置的情况下,会调用setInterest(2,value)方法。
3、OGNL对象的索引属性
JavaBean的索引属性只能使用整型作为索引,OGNL扩展了索引属性的概念,可以使用任意的对象来作为索引。
对集合进行操作
1、创建集合:
创建列表
使用花括号将元素包含起来,元素之间使用逗号分隔。如{’zhangsan’,'lisi’,'wangwu’}
创建数组
OGNL中创建数组与Java语言中创建数组类似。
创建Map
Map使用特殊的语法来创建     #{”key”:value, ……}
如果想指定创建的Map类型,可以在左花括号前指定Map实现类的类名。如:
#@java.util.LinkedHashMap@{”key”:”value”,….}
Map通过key来访问,如map["key"]或map.key。
2、投影
OGNL提供了一种简单的方式在一个集合中对每一个元素闻调用相同的方法,或者抽取相同的属性,并将结果保存为一个新的集合,称之为投影。
假如employees是一个包含了employee对象的列表,那么
#employees.{name}将返回所有雇员的名字的列表。
在投影期间,使用#this变量来引用迭代中的当前元素。
如:objects.{#this instanceof String? #this: #this.toString()}
3、选择
OGNL提供了一种简单的方式来使用表达式从集合中选择某些元素,并将结果保存到新的集合中,称为选择。
如#employees.{?#this.salary>3000}
将返回薪水大于3000的所有雇员的列表。
#employees.{^#this.salary>3000}
将返回第一个薪水大于3000的雇员的列表。
#employees.{$#this.salary>3000}
将返回最后一个薪水大于3000的雇员的列表。
lambda表达式
lambda表达式的语法是:   :[...]。OGNL中的lambda表达式只能使用一个参数,这个参数通过#this引用。
如:
#fact= :[ #this<=1 ? 1 : #this* #fact ( #this-1) ], #fact(30)
#fib= :[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)

OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。

为什么使用OGNL
相对于其它的表达式语言,OGNL的功能更为强大,它提供了很多高级而必需的特性,例如强大的类型转换功能、静态或实例方法的执行、跨集合投影,以及动态lambda表达式定义等。
OGNL基础
OGNL表达式的计算都是围绕OGNL上下文来进行的,OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类(实现了 java.util.Map接口)来表示。OGNL上下文可以包含一个或多个JavaBean对象,在这些对象中有一个是特殊的,这个对象就是上下文的根 (root)对象。如果在写表达式的时候,没有指定使用上下文中的哪一个对象,那么根对象将被假定为表达式所依据的对象。
在OGNL上下文中,只能有一个根对象,如果你访问根对象,那么在写表达式的时候,直接写对象的属性就可以了;否则,你需要使用“#key”前缀,例如表达式#namager.name。
OGNL表达式
OGNL表达式的基础单元就是导航链,通常简称为链(chain)。最简单的链由下列部分组成:
1、属性名:如name和manager.name;
2、方法调用:如manager.hashCode(),返回manager对象的散列码;
3、数组索引:如emals[0],返回当前对象的邮件列表中的第一个邮件地址。
所有OGNL表达式的计算都是在当前对象的上下文中,一个链简单地使用链中先前链接的结果作为下一步计算的当前对象。我们看如下所示的链:
name.toCharArray()[0].numericValue.toString()
这个表达式按照下列的步骤进行计算:
1、获取根对象的name属性;
2、在String结果上调用toCharArray()方法;
3、从char数组中提取第一个字符;
4、从提取的字符对象上行到numericValue属性(这个字符被表示为Character对象,Character类有一个getNumericValue()方法);
5、在Integer对象结果上调用toString()方法。
这个表达式最终结果是最后返回的toString()方法调用返回的字符串。
常量
OGNL支持的所有常量类型:
1、字符串常量:
以单引号或双引号括起来的字符串。如”hello”,’hello’。
不过要注意的是,如果是单个字符的字符串常量,必须使用双引号。
2、字符常量:
以单引号括起来的字符。如’a'。
3、数值常量:
除了Java中的int、long、float和double外,OGNL还让你使用“b”或“B”后缀指定BigDecimal常量,用“h”“H”后缀指定BigInteger常量。
4、布尔常量:
true和false。
5、null常量。
操作符
OGNL除了支持所有的Java操作符外,还支持以下几种:
1、逗号,
与C语言中的逗号操作符类似。
2、花括号{}
用于创建列表,元素之间用逗号分隔。
3、in和not in
用于判断一个值是否在集合中。
访问JavaBean的属性
假如有一个employee对象作为OGNL上下文的根对象,那对于下面的表达式:
1、name
对应的java代码是employee.getName();
2、address.country
对应的java代码是employee.getAddress().getCountry();
访问静态方法和静态字段
@class@method(args)     //调用静态方法
@class@field           //调用静态字段
其中class必须给出完整的类名(包括包名),如果省略class,那么默认使用的类是java.util.Math,如:
@@min(5,3)
@@max(5,3)
@@PI
索引访问
OGNL支持多种索引方式的访问。
1、数组和列表索引
在OGNL中,数组和列表可以大致看成是一样的。
如:array[0]、list[0]。表达式:{’zhangsan’,'lisi’,'wangwu’}[1]等。
2、JavaBean的索引属性
要使用索引属性,需要提供两对setter和getter方法,一对用于数组,一对用于数组中的元素。
如:有一个索引属性interest,它的getter和setter如下
public String[] interest;
public String[] getInterest(){ return interest;}
public void setInterest(String[] interest){ this.interest=interest;}
public String getInterest(int i){ return interest[i]}
public void setInterest(int i, String newInterest){ interest[i]=newInterest;}
对于表达式interest[2],OGNL可以正确解释这个表达式,调用getInterest(2)方法。如果是设置的情况下,会调用setInterest(2,value)方法。
3、OGNL对象的索引属性
JavaBean的索引属性只能使用整型作为索引,OGNL扩展了索引属性的概念,可以使用任意的对象来作为索引。
对集合进行操作
1、创建集合:
创建列表
使用花括号将元素包含起来,元素之间使用逗号分隔。如{’zhangsan’,'lisi’,'wangwu’}
创建数组
OGNL中创建数组与Java语言中创建数组类似。
创建Map
Map使用特殊的语法来创建     #{”key”:value, ……}
如果想指定创建的Map类型,可以在左花括号前指定Map实现类的类名。如:
#@java.util.LinkedHashMap@{”key”:”value”,….}
Map通过key来访问,如map["key"]或map.key。
2、投影
OGNL提供了一种简单的方式在一个集合中对每一个元素闻调用相同的方法,或者抽取相同的属性,并将结果保存为一个新的集合,称之为投影。
假如employees是一个包含了employee对象的列表,那么
#employees.{name}将返回所有雇员的名字的列表。
在投影期间,使用#this变量来引用迭代中的当前元素。
如:objects.{#this instanceof String? #this: #this.toString()}
3、选择
OGNL提供了一种简单的方式来使用表达式从集合中选择某些元素,并将结果保存到新的集合中,称为选择。
如#employees.{?#this.salary>3000}
将返回薪水大于3000的所有雇员的列表。
#employees.{^#this.salary>3000}
将返回第一个薪水大于3000的雇员的列表。
#employees.{$#this.salary>3000}
将返回最后一个薪水大于3000的雇员的列表。
lambda表达式
lambda表达式的语法是:   :[...]。OGNL中的lambda表达式只能使用一个参数,这个参数通过#this引用。
如:
#fact= :[ #this<=1 ? 1 : #this* #fact ( #this-1) ], #fact(30)
#fib= :[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11)



 

posted @ 2009-05-09 12:30 MikyTan 阅读(4879) | 评论 (0)编辑 收藏

Struts2 字符串截取


<s:set name="hello" value="'Hello Miky as Miky'"></s:set>  ----定义源字符串
<s:property value="#hello.substring(#hello.indexOf('as')+2)"/>  ---输出字符串。结果为 Miky

posted @ 2009-05-05 22:55 MikyTan 阅读(380) | 评论 (0)编辑 收藏

JSP 中使用Struts2的值 (Strust2 中调用JAVA的公共类方法)

Struts2的值是保存在ValueStack中的,假设有一个字符串str,我们一般是这么取值的:

<s:property value="str"/> 或者 ${str}

如果想在jsp中使用的话,可以这么取:

<%@ page import="com.opensymphony.xwork2.util.ValueStack" %>
……
<%= ((ValueStack)request.getAttribute("struts.valueStack")).findString("str") %>

 

也可以把ValueStack中的值先放到attribute中,然后直接取attribute的值:

<s:set name="str" value="%{str}" />
<%=request.getAttribute("str") %>

方法一:

<s:set name="str" value="'Hello World'"></s:set>

<s:property value="%{@com.common.Constant@func(#str)}"/>

 

func是类com.common.Constant里面的一个静态方法

str是动态的参数

 

方法二:

<s:bean name="com.common.StrutsHelper" id="helper" />

<s:set name="str" value="'Hello World'"></s:set>

<s:property value="#helper.func(#str)" />

func是类com.common.StrutsHelper里面的一个普通方法

str是动态方法

s:bean其实是对类StrutsHelper的实例化,跟方法一有些区别,方法一里的函数必须是静态的

posted @ 2009-05-05 20:42 MikyTan 阅读(2665) | 评论 (1)编辑 收藏

产品时间段(StartDate,EndDate)SQL查询

表 a 字段,id,开始时间,结束时间,价格
1,2008-01-01,2008-09-10,220.0
2,2008-09-11,2008-09-30,280.0
3,2008-10-01,2008-10-10,320.0
3,2008-10-11,2008-12-31,350.0

输入一个开始时间,一个结束时间,返回这段时间内每天的价格,最好返回每天的日期和对应的价格
例输入开始时间2008-09-09,结束时间2008-09-13
返回
2008-09-09,220
2008-09-10,220
2008-09-11,280
2008-09-12,280
2008-09-13,280

方案一:采用存储过程的方案!
create table T([id] int,[开始时间] datetime,[结束时间] datetime,[价格] numeric(4,1))
insert into T
select 1,'2008-01-01','2008-09-10',220.0 union all
select 2,'2008-09-11','2008-09-30',280.0 union all
select 3,'2008-10-01','2008-10-10',320.0 union all
select 3,'2008-10-13','2008-12-31',350.0

select * from T
go
--Code
create procedure GetTimePrice(@begintime datetime,@endtime datetime)
as
declare @tmptime datetime
declare @tmp table (dt datetime,price numeric(4,1))--结果表
begin
set @tmptime=@begintime
while @tmptime<=@endtime
begin

insert into @tmp
select @tmptime,价格  from t where @tmptime between 开始时间 and 结束时间
set @tmptime=DATEADD(dd,1,@tmptime)
end
select * from @tmp
end
go

exec GetTimePrice '2008-09-09','2008-09-14'--执行
--
Drop
drop table T
drop procedure GetTimePrice


方案二:采用Case方案
set nocount on
create table T([id] int,[开始时间] datetime,[结束时间] datetime,[价格] numeric(4,1))
insert into T
select 1,'2008-01-01','2008-09-10',220.0 union all
select 2,'2008-09-11','2008-09-30',280.0 union all
select 3,'2008-10-01','2008-10-10',320.0 union all
select 3,'2008-10-11','2008-12-31',350.0

declare @bgnTime datetime set @bgnTime = '2008-09-09'
declare @endTime datetime set @endTime = '2008-09-13'
select id
    ,
case when [开始时间]<@bgnTime then @bgnTime else [开始时间] end as [开始时间] -- 让输出结果更贴近参数表现出来
    ,case when [结束时间]>@endTime then @endTime else [结束时间] end as [结束时间] -- 让输出结果更贴近参数表现出来
    ,[价格]
from T
where [开始时间]<@endTime
and [结束时间]>@bgnTime
-- id,开始时间,结束时间
--
 1,2008-09-09 00:00:00.000,2008-09-10 00:00:00.000
--
 2,2008-09-11 00:00:00.000,2008-09-13 00:00:00.000

drop table T

id          开始时间                                                   结束时间                                                   价格     
----------- ------------------------------------------------------ ------------------------------------------------------ ------ 
1           2008-09-09 00:00:00.000                                2008-09-10 00:00:00.000                                220.0
2           2008-09-11 00:00:00.000                                2008-09-13 00:00:00.000                                280.0

posted @ 2009-04-23 20:50 MikyTan 阅读(795) | 评论 (0)编辑 收藏

jQuery实现input文本框内灰色提示文本效果 和 input标签获取焦点是文本框内提示信息清空

     摘要: 一、jQuery实现input文本框内灰色提示文本效果 <html>   <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <titl...  阅读全文

posted @ 2009-04-23 11:50 MikyTan 阅读(13374) | 评论 (3)编辑 收藏

酒店价格间夜显示(JavaScript 实现)

     摘要: 酒店间夜价格显示实现: 跨周: <%@ page language="java" contentType="text/html; charset=utf-8"     pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC&...  阅读全文

posted @ 2009-04-21 13:31 MikyTan 阅读(402) | 评论 (0)编辑 收藏

JavaScript 取Table表格中的值

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY onload="getTableValue()">
<script language="javascript">
    
function getTableValue(){
    alert(document.getElementById('table1').rows[
0].cells[0].innerHTML);
         //or
    alert(document.getElementById('table1').rows.item(
0).cells.item(0).innerHTML);
    }

</script>
<table id="table1">
     
<tr>
         
<td>1</td>
         
<td>2</td>
      
</tr>
     
<tr>
         
<td>3</td>
         
<td>2</td>
      
</tr>
</table>
</BODY>
</HTML>

注意,为了兼容IE跟FireFix,不要用 innerText

posted @ 2009-04-15 11:38 MikyTan 阅读(1300) | 评论 (0)编辑 收藏

xmlbeans dom level 3 not implemented

今天在用XmlBeans解析XML DOC时,遇到“xmlbeans dom level 3 not implemented”的解决办法!

问题产生的原因:
    1、由于在生成的XML结构中插入了一些未在XSD中定义的节点,那么这些节点无法用XMLBeans所采用的对象的方法获取,只能采用DOM的方式来处理,但在处理的过程中报“xmlbeans dom level 3 not implemented”

//
实例化一个文档构建器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
//通过文档构建器工厂获取一个文档构建器
DocumentBuilder builder = factory.newDocumentBuilder();
//通过文档通过文档构建器构建一个文档实例
AssertionDocument assertionDoc = AssertionDocument.Factory.parse(new File(”xml/assertion.xml”), loadOptions);

Document doc = builder.parse(new InputSource(new StringReader(assertionDoc.toString())));
doc.getDocumentElement().setIdAttribute(”AssertionID”, true);


posted @ 2009-04-14 10:11 MikyTan 阅读(778) | 评论 (0)编辑 收藏

String 和 InputStream 的转换

1、String --> InputStream
      InputStrem is = new ByteArrayInputStream(str.getBytes());
      or
      ByteArrayInputStream stream
        = new ByteArrayInputStream(str.getBytes());
2、InputStream-->String
      BufferedReader in = new  BufferedReader(new InputStreamReader(is));
      StringBuffer buffer
= new StringBuffer();
      String line
= "";
     
while ((line = in.readLine()) != null){
          buffer.append(line);
       }
   
return buffer.toString();

posted @ 2009-04-14 10:04 MikyTan 阅读(374) | 评论 (0)编辑 收藏