lizongbo at 618119.com 工作,生活,Android,前端,Linode,Ubuntu,nginx,java,apache,tomcat,Resin,mina,Hessian,XMPP,RPC

2010年12月12日

在java代码中对字符进行繁简体转换和全半角转换

Filed under: Java — 标签:, , , , , , — lizongbo @ 15:58

在java代码中对字符进行繁简体转换和全半角转换

由于java代码本身使用unicode代码表示,因此在java代码内部不需要考虑GB2312,GBK,GB18030,BIG5等字符编码集,
只要定义Unicode字符对应关系,即可实现繁体到简体,简体到繁体,全角到半角,半角到全角的字符转换。
但需要注意的是:
1.繁简体转换时,有些字符不是简单的一一对应关系,因此不能简单的靠字符对应关系进行简繁体转换。
2.从java5.0开始的jdk版本支持Unicode标准为Unicode 4.0.0,在JDK7.0将支持Unicode 6.0.0,而部分简繁体字符已经是Unicode里的增补字符,因此需要支持以代码点方式进行转换。
根据维基百科内容整理后封装的Chars类代码如下:

[code]
package com.lizongbo.common.primitives;

import gnu.trove.map.TIntIntMap;
import gnu.trove.map.hash.TIntIntHashMap;
/**
* 字符处理的工具类,提繁简体,简繁体,全半角,半全角的转换,以及char对象的缓存
* @author lizongbo
*/
public class Chars {
/** 字符对象的缓存 */
private static final Character CharacterCache[] = new Character[Character.MAX_VALUE];
/**
* 繁体转简体的映射表
*
* @see http://zh.wikipedia.org/zh-cn/Wikipedia:Unihan%E7%B9%81%E7%AE%80%E4%BD%93%E5%AF%B9%E7%85%A7%E8%A1%A8/%E7%B9%81%E7%AE%80%E4%B8%80%E4%B8%80%E5%AF%B9%E5%BA%94%E8%A1%A8
*/
private static final TIntIntMap cht2chsMap = new TIntIntHashMap(3096);
/**
* 简体转繁体的映射表
*
* @see http://zh.wikipedia.org/zh-cn/Wikipedia:Unihan%E7%B9%81%E7%AE%80%E4%BD%93%E5%AF%B9%E7%85%A7%E8%A1%A8/%E7%AE%80%E7%B9%81%E4%B8%80%E4%B8%80%E5%AF%B9%E5%BA%94%E8%A1%A8
* */
private static final TIntIntMap chs2chtMap = new TIntIntHashMap(3096);

private static final int[][] getCht2chsArr() {
int[][] cht2chsArr = new int[][] { { 0x042b7, 0x04336 },
{ 0x042d9, 0x0433a }, { 0x0477c, 0x0478d },
{ 0x04c3e, 0x09c83 }, { 0x04c81, 0x09cda },
{ 0x04e1f, 0x04e22 }, { 0x04e26, 0x05e76 },
{ 0x04e7e, 0x05e72 }, { 0x04e82, 0x04e71 },
//省略,参考java源代码文件……
{ 0x27a59, 0x04725 }, { 0x27d73, 0x0478c },
{ 0x282e2, 0x04882 } };
return cht2chsArr;
}

private static final int[][] getChs2chtArr() {
return new int[][] { { 0x0359e, 0x0558e }, { 0x039d1, 0x0649d },
{ 0x039df, 0x064d3 }, { 0x03c6e, 0x06ba8 },
{ 0x04056, 0x0779c }, { 0x041f2, 0x07b74 },
{ 0x04336, 0x042b7 }, { 0x04337, 0x07d2c },
{ 0x04338, 0x07e33 }, { 0x04339, 0x07d45 },
{ 0x0433a, 0x042d9 }, { 0x04341, 0x07e78 },
{ 0x04723, 0x08a22 }, { 0x04725, 0x27a59 },
{ 0x0478c, 0x27d73 }, { 0x0478d, 0x0477c },
//省略,参考java源代码文件……
{ 0x21484, 0x058c8 } };
}

/**
* 根据char值获取缓存的Character对象
*
* @param c
* @return
*/
public static Character getCharacter(char c) {
return CharacterCache[c];
}

static {
initAll();
}

private static void initAll() {
initCharCache();
initChs2ChtMap();
initCht2ChsMap();
}

private static void initCharCache() {
for (int i = 0; i < CharacterCache.length; i++) {
CharacterCache[i] = new Character((char) i);
}
}

private static void initChs2ChtMap() {
int[][] chs2chtArr = getChs2chtArr();
for (int i = 0; i < chs2chtArr.length; i++) {
int[] cm = chs2chtArr[i];
Chars.chs2chtMap.put(cm[0], cm[1]);
}
}

private static void initCht2ChsMap() {
int[][] cht2chsArr = getCht2chsArr();
for (int i = 0; i < cht2chsArr.length; i++) {
int[] cm = cht2chsArr[i];
Chars.cht2chsMap.put(cm[0], cm[1]);
}
}

/**
* 繁体字符转换成简体字符,只处理一一对应关系,不考虑一多对应关系
*
* @param c
* @return
*/
public static char cht2chs(char c) {
return (char) cht2chs((int) c);
}

/**
* 以代码点方式将繁体字符转换成简体字符,例如:U+282e2转换成U+04882,只处理一一对应关系,不考虑一多对应关系
*
* @param codePoint
* @return
*/
public static int cht2chs(int codePoint) {
int r = cht2chsMap.get(codePoint);
return r > 0 ? r : codePoint;
}

/**
* 将简体字符转换成繁体字符,只处理一一对应关系,不考虑一多对应关系
*
* @param c
* @return
*/
public static char chs2cht(char c) {
return (char) chs2cht((int) c);
}

/**
* 以代码点方式将简体字符转换成繁体字符,例如U+21484转换成U+058c8,只处理一一对应关系,不考虑一多对应关系
*
* @param codePoint
* @return
*/
public static int chs2cht(int codePoint) {
int r = chs2chtMap.get(codePoint);
return r > 0 ? r : codePoint;
}

/**
* 全角字符转换为半角字符,不考虑日语和韩文的全角字符
*
* @see http://zh.wikipedia.org/zh-cn/%E5%85%A8%E8%A7%92
*
* @param c
* @return
*/
public static char quan2ban(char c) {
return (char) quan2ban(c);
}

/**
* 以代码点方式将全角字符转换为半角字符,不考虑日语和韩文的全角字符
*
* @param codePoint
* @return
*/
public static int quan2ban(int codePoint) {
if (codePoint >= 0xFF01 && codePoint <= 0xff65) {
return (codePoint – 65248);
}
if (codePoint == 12288) // 全角空格
return 32;
if (codePoint == 12290) // 全角 “。”
return 46;
return codePoint;
}

/**
* 将半角字符转换成全角字符,不考虑日语和韩文的半角字符
*
* @param c
* @return
*/
public static char ban2quan(char c) {
return (char) ban2quan(c);
}

/**
* 以代码点方式将全角字符转换为半角字符,不考虑日语和韩文的半角字符
*
* @param codePoint
* @return
*/
public static int ban2quan(int codePoint) {
if (codePoint >= 0xFF01 && codePoint <= 0xff65) {
return (codePoint – 65248);
}
if (codePoint == 32) // 全角空格
return 12288;
if (codePoint == 46) // 全角 “。”
return 12290;
return codePoint;
}

/**
* @param args
*/
public static void main(String[] args) {
int[][] chs2chtArr = getChs2chtArr();
for (int i = 0; i < chs2chtArr.length; i++) {
int[] cm = chs2chtArr[i];
int codePointCht = Chars.chs2cht(cm[0]);
System.out.println(“简体:” + new String(new int[] { cm[0] }, 0, 1)
+ “,繁体:”
+ new String(new int[] { Chars.chs2cht(cm[0]) }, 0, 1)
+ “,codePointCht==” + Integer.toHexString(codePointCht)
+ “,codePointChs==” + Integer.toHexString(cm[0]));
}
int[][] cht2chsArr = getCht2chsArr();
for (int i = 0; i < cht2chsArr.length; i++) {
int[] cm = cht2chsArr[i];
int codePointChs = Chars.cht2chs(cm[0]);
System.out.println(“繁体:” + new String(new int[] { cm[0] }, 0, 1)
+ “,简体:” + new String(new int[] { codePointChs }, 0, 1)
+ “,codePointChs==” + Integer.toHexString(codePointChs)
+ “,codePointCht==” + Integer.toHexString(cm[0]));
}

for (char c = 0xFF01; c <= 0xff65; c++) {
System.out.println(“全角字符:” + c + “,半角字符:” + Chars.quan2ban(c));
}
for (char c = 0x20; c <= 0x7e; c++) {
System.out.println(“半角字符:” + c + “,全角字符:” + Chars.ban2quan(c));
}
}
}

[/code]

相关参考信息:
Java 平台中的增补字符:
http://java.sun.com/developer/technicalArticles/Intl/Supplementary/index_zh_CN.html
维基百科:Unihan繁简体对照表:
http://zh.wikipedia.org/zh-cn/Wikipedia:Unihan%E7%B9%81%E7%AE%80%E4%BD%93%E5%AF%B9%E7%85%A7%E8%A1%A8
Wikipedia:Unihan繁简体对照表/简繁一一对应表:
http://zh.wikipedia.org/zh-cn/Wikipedia:Unihan%E7%B9%81%E7%AE%80%E4%BD%93%E5%AF%B9%E7%85%A7%E8%A1%A8/%E7%AE%80%E7%B9%81%E4%B8%80%E4%B8%80%E5%AF%B9%E5%BA%94%E8%A1%A8
Wikipedia:Unihan繁简体对照表/繁简一一对应表:
http://zh.wikipedia.org/zh-cn/Wikipedia:Unihan%E7%B9%81%E7%AE%80%E4%BD%93%E5%AF%B9%E7%85%A7%E8%A1%A8/%E7%B9%81%E7%AE%80%E4%B8%80%E4%B8%80%E5%AF%B9%E5%BA%94%E8%A1%A8
全角和半角:
http://zh.wikipedia.org/zh-cn/%E5%85%A8%E8%A7%92
JDK7.0特性列表:
http://openjdk.java.net/projects/jdk7/features/#f497
Unicode6.0.0:
http://unicode.org/versions/Unicode6.0.0/
Unicode 半角与全角的字符表:
http://unicode.org/charts/PDF/UFF00.pdf
完整的Chars.java的源代码:
http://mqq.im/docs/java/com/lizongbo/common/primitives/Chars.java

2010年10月24日

在Ubuntu 10.04上安装JDK1.6.0_21和编译配置Resin4.0.12

Filed under: Java,JVM,Linux,Resin,RMI — 标签:, , , , , , , — lizongbo @ 00:37

在Ubuntu 10.04上安装JDK1.6.0_21和编译配置Resin4.0.12

1.首先是安装最新版的jdk,先下载JDK 1.6.0_21(来源:http://www.oracle.com/technetwork/java/javase/downloads/index.html):
root@618119.com:/usr/local/app$ wget “http://cds.sun.com/***/jdk-6u21-linux-x64.bin”
这个url里带有会话信息,现在已经无效,JDK的官方下载不提供简洁的下载地址,需要每次到页面区获取下载地址)
2.再将下载到的文件改名:
root@618119.com:/usr/local/app$ mv jdk-6u21-linux-x64.bin\?BundledLineItemUUID\=SSeJ_hCwV9QAAAEroI4AHoII\&OrderID\=gVSJ_hCwmL8AAAErko4AHoII\&ProductID\=xKiJ_hCySHIAAAEpT7wzBGsB\&FileName\=%2Fjdk-6u21-linux-x64.bin   jdk-6u21-linux-x64.bin
3.给安装程序加上可执行权限:
root@618119.com:/usr/local/app$ chmod +x ./jdk-6u21-linux-x64.bin
4.开始安装JDK:
root@618119.com:/usr/local/app$ ./jdk-6u21-linux-x64.bin
(JDK安装好之后,可以通过符号连接建立jdk目录,这样在一行升级jdk版本的时候通过修改符号连接自动切换到新版本jdk:
root@618119.com:/usr/local/app# ln -s ./jdk1.6.0_21/ ./jdk )
5.然后添加环境变量到系统:
编辑 /etc/enviroment增加下面一行:
JAVA_HOME=”/usr/local/app/jdk1.6.0_21″
添加后的/etc/environment内容如下:
root@618119.com:/etc# more /etc/environment
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games”
JAVA_HOME=”/usr/local/app/jdk1.6.0_21″
6.再开始下载resin4.0.12(来源:http://www.caucho.com/download/)
root@618119.com:/usr/local/app# wget http://www.caucho.com/download/resin-4.0.12.tar.gz
7.解压安装文件:
root@618119.com:/usr/local/app# tar -zxvf resin*
7.进入resin目录开始编译安装,安装目录设置为:/usr/local/app/resin
root@618119.com:/usr/local/app# cd resin*
root@618119.com:/usr/local/app/resin-4.0.12# ./configure –prefix=/usr/local/app/resin
root@618119.com:/usr/local/app/resin-4.0.12# make
root@618119.com:/usr/local/app/resin-4.0.12# make install
8.可以看到系统服务脚本已经生成:
root@618119.com:/etc/init.d# more /etc/init.d/resin
9.尝试启动resin 4.0.12,失败了:
root@618119.com:/usr/local/app/resin/log# /usr/local/app/resin/bin/resin.sh start启动不了:
启动不了的原因是因为是root登录的。
Resin从4.0版本起,在默认的resin.xml里配置判断条件,如果当前用户名是root,则resin的watchdog监控进程使用www-data这个用户名来启动真正的resin进程。
root@618119.com:/usr/local/app/resin/bin# ./resin.sh start
然后root@618119.com:/usr/local/app/resin/bin# ./resin.sh shutdown
root@618119.com:/usr/local/app/resin/bin# tail ../log/*.log
可以看到出错日志如下:
—————————————————————————–

com.caucho.config.ConfigRuntimeException: java.io.IOException: Cannot create directory: /usr/local/app/resin/resin-data/default
at com.caucho.config.ConfigException.create(ConfigException.java:168)
at com.caucho.server.resin.Resin.configure(Resin.java:1006)
at com.caucho.server.resin.Resin.initMain(Resin.java:983)
at com.caucho.server.resin.Resin.main(Resin.java:1230)
Caused by: java.io.IOException: Cannot create directory: /usr/local/app/resin/resin-data/default
at com.caucho.vfs.FilePath.mkdirs(FilePath.java:489)
at com.caucho.env.service.RootDirectoryService.<init>(RootDirectoryService.java:81)
at com.caucho.server.resin.Resin.configureRoot(Resin.java:1073)
at com.caucho.server.resin.Resin.configure(Resin.java:1001)
… 2 more

—————————————————————————–

[2010/10/18 15:35:45.200] http listening to localhost:6600
[2010/10/18 15:35:45.289]
[2010/10/18 15:35:47.084] Watchdog detected close of Resin[,pid=20430]
exit reason: BAD_CONFIG (exit code=2)
[2010/10/18 15:35:48.814] Watchdog detected close of Resin[,pid=20454]
exit reason: BAD_CONFIG (exit code=2)
[2010/10/18 15:35:50.563] Watchdog detected close of Resin[,pid=20476]
exit reason: BAD_CONFIG (exit code=2)
[2010/10/18 15:35:52.470] Watchdog detected close of Resin[,pid=20508]
exit reason: BAD_CONFIG (exit code=2)

—————————————————————————–

10.解决办法为:注释resin.xml里的第147到150行:
root@618119.com:/usr/local/app/resin/conf# vi ./resin.xml

147 <!–      <resin:if test=”${resin.userName == ‘root’}”>
148         <user-name>www-data</user-name>
149         <group-name>www-data</group-name>
150       </resin:if> –>

11.然后再运行
root@618119.com:/usr/local/app/resin/bin# ./resin.sh start
或者root@618119.com:/usr/local/app/resin/bin# /etc/init.d/resin start
均可正常启动了。

12.再运行下面的命令将resin也添加为系统默认的服务:
root@618119.com:/etc# sudo /usr/sbin/update-rc.d -f resin defaults

13.修改resin配置允许外网访问resin-admin,编辑/usr/local/app/resin/conf/resin.xml,找到
<resin:set var=”resin_admin_external” value=”false”/>
改为:
<resin:set var=”resin_admin_external” value=”true”/>
保存resin.xml,重启resin。
root@618119.com:/usr/local/app/resin/conf# /usr/local/app/resin/bin/resin.sh restart

14:访问http://618119.com:8080/resin-admin/,因为是第一次访问,可以生成帐号和密码。
我的username设置为:resinadmin,Password设置为:618119.com(密码一定要用不容易被人猜到的),Realm保持为resin不变。
点“Create Configuration File”进行提交,生成的文件为:/usr/local/app/resin/conf/admin-users.xml.generated
15.将生成的文件改名为admin-users.xml:
root@618119.com:/usr/local/app/resin/conf# mv admin-users.xml.generated  admin-users.xml
然后resin会自动重新加载.
16.再访问http://localhost:8080/resin-admin/,输入刚才帐号和密码,登录之后,就可以看到服务器状态信息了。

接下来配置外网访问JMX管理。
由于jdk的jmx管理端口启动时无法绑定指定的ip,默认是绑定到所有ip的,因此在公网上开放jmx端口时,必须设置jmx访问的帐号和密码:
操作步骤如下:
在/usr/local/app/resin/conf建立jmx权限配置文件:
1.复制jdk提供的jmx帐号和密码配置文件模板到resin的conf目录:
root@618119.com:/usr/local/app/resin/conf# cp /usr/local/app/jdk1.6.0_21/jre/lib/management/jmxremote.* /usr/local/app/resin/conf
查看文件:
root@618119.com:/usr/local/app/resin/conf# ls -alh jmxremote.*
-rw-r–r– 1 root root 4.0K Oct 23 14:49 jmxremote.access
-r–r–r– 1 root root 2.8K Oct 23 14:49 jmxremote.password.template
2.在/usr/local/app/resin/conf下重命名:jmxremote.password.template为jmxremote.password:
root@618119.com:/usr/local/app/resin/conf# mv jmxremote.password.template  jmxremote.password
3.给密码文件加上写权限:
root@618119.com:/usr/local/app/resin/conf# chmod +w jmxremote.password
查看文件:
root@618119.com:/usr/local/app/resin/conf# ls -alh jmxremote.*
-rw-r–r– 1 root root 4.0K Oct 23 14:49 jmxremote.access
-rw-r–r– 1 root root 2.8K Oct 23 14:49 jmxremote.password
4.以追加文件方式往jmx权限控制文件中加入一个有读写权限的帐号,帐号名字是resinjmx
root@618119.com:/usr/local/app/resin/conf# echo “resinjmx         readwrite” >> jmxremote.access
查看帐号添加是否ok:
root@618119.com:/usr/local/app/resin/conf# tail jmxremote.access
# Default access control entries:
# o The “monitorRole” role has readonly access.
# o The “controlRole” role has readwrite access and can create the standard
#   Timer and Monitor MBeans defined by the JMX API.

monitorRole   readonly
controlRole   readwrite \
create javax.management.monitor.*,javax.management.timer.* \
unregister
resinjmx         readwrite
5.往jmx权限控制的密码文件中加入resinjmx帐号的密码:618119
root@618119.com:/usr/local/app/resin/conf# echo “resinjmx 618119” >> jmxremote.password
查看密码信息是否添加ok:
root@618119.com:/usr/local/app/resin/conf# tail jmxremote.password
# or specify another, less accessible file in the management config file
# as described above.
#
# Following are two commented-out entries.  The “measureRole” role has
# password “QED”.  The “controlRole” role has password “R&D”.
#
# monitorRole  QED
# controlRole   R&D

resinjmx 618119

6.修改jmxremote.*的权限,只允许启动resin的用户名对该文件拥有读写权限:
root@618119.com:/usr/local/app/resin/conf# chmod 600 jmxremote.access
root@618119.com:/usr/local/app/resin/conf# chmod 600 jmxremote.password
root@618119.com:/usr/local/app/resin/conf# ls -alh jmxremote.*
-rw——- 1 root root 4.0K Oct 23 14:54 jmxremote.access
-rw——- 1 root root 2.9K Oct 23 14:57 jmxremote.password
(如果文件权限没有正确设置,在启动使用了jmx的resin时,jvm-default.log中的出错信息为:
Error: Password file read access must be restricted: /usr/local/app/resin//conf/jmxremote.password,可以参考:http://www.opennms.org/wiki/Tomcat_6_JMX_How-To
)
7.配置/usr/local/app/resin/conf的resin.xml
在<server-default>节点下加入下列启动参数,并保存resin.xml
<!–
需要在远程服务器上运行hostname -i,如果显示的127.0.0.1,则需要加上下面一行来指定hostname为公网ip
<jvm-arg>-Djava.rmi.server.hostname=75.126.115.214</jvm-arg>
配置该项的时候,java.rmi.server.hostname=127.0.0.1是肯定不行的,我就是这样绕了弯路:
root@618119.com:/usr/local/app/resin/log# hostname -i
75.126.115.214
–>
<jvm-arg>-Dcom.sun.management.jmxremote.port=50000</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=true</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.password.file=${resin.root}/conf/jmxremote.password</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.access.file=${resin.root}/conf/jmxremote.access</jvm-arg>

8.重启resin:
root@618119.com:/usr/local/app/resin/conf# /usr/local/app/resin/bin/resin.sh shutdown
Resin/4.0.12 shutdown watchdog at 127.0.0.1:6600
root@618119.com:/usr/local/app/resin/conf# /usr/local/app/resin/bin/resin.sh start
Resin/4.0.12 launching watchdog at 127.0.0.1:6600
Resin/4.0.12 started -server ” for watchdog at 127.0.0.1:6600

9.在本地电脑运行/usr/local/app/jdk1.6.0_21/bin/jconsole,远程进程填上:618119.com:50000,
点“连接”,提示连接失败。
重新在用户名填resinjmx,口令填:618119.com.
连接成功。

resin.xml中的其它设置:
1.resin4.0默认启动了https端口在8443,可以将resin.xm中下面几行注释掉来关闭https功能:

<http address=”127.0.0.1″ port=”8443″>
<jsse-ssl self-signed-certificate-name=”resin@localhost”/>
</http>
2.resin4.0的resin.xml里没将stdout和stderr显示的声明出来了,
可以将stdout,stderr,accesslog配置成按天输出:
<stdout-log path-format=”log/stdout.log.%Y%m%d”
timestamp=”%Y-%m-%d %H:%M:%S”
rollover-period=”1D”/>
<stderr-log path-format=”log/stderr.log.%Y%m%d”
timestamp=”%Y-%m-%d %H:%M:%S”
rollover-period=”1D”/>
<access-log path-format=”log/access.log.%Y%m%d”
format=’%h %l %u %t “%r” %s %b “%{Referer}i” “%{User-Agent}i” “%{X-Real-IP}i”‘
rollover-period=”1D”/>
stdout-log和stderr-log放到resin元素节点下面.
参考:http://618119.com/archives/2009/02/18/135.html

3.增加Java虚拟机 其它的jvm启动参数:
<!–以server方式启动java虚拟机–>
<jvm-arg>-server</jvm-arg>
<!–指定文件编码默认为UTF-8–>
<jvm-arg>-Dfile.encoding=UTF-8</jvm-arg>
<!–输出log4j自身的调试信息–>
<jvm-arg>-Dlog4j.debug=true</jvm-arg>
<!–指定默认语言为英语–>
<jvm-arg>-Duser.language=en</jvm-arg>
<!–启用gc日志–>
<jvm-arg>-verbose:gc</jvm-arg>
<!–指定输出gc日志的路径–>
<jvm-arg>-Xloggc:${resin.root}/log/gc.log</jvm-arg>
<!–gc日志打印gc详细信息–>
<jvm-arg>-XX:+PrintGCDetails</jvm-arg>
<!–gc日志打印时间戳–>
<jvm-arg>-XX:+PrintGCTimeStamps</jvm-arg>

4.配置泛域名方式的虚拟主机(将发给*.lizongbo.com的请求全部转给一个webapp):

<host id=”lizongbo.com” root-directory=”/usr/local/app/resin/vhost/lizongbo.com”>
<host-alias-regexp>^([^/]*).lizongbo.com</host-alias-regexp>
<web-app id=”/” root-directory=”webapps/ROOT”/>
</host>

(host-alias-regexp的正则表达式是用的java的Pattern.compile(name, Pattern.CASE_INSENSITIVE); ,因此是java的标准正则。

lizongbo.com是才申请的,因此使用301永久重定向跳转到 http://618119.com

index.jsp的代码为:<?xml version=”1.0″ encoding=”UTF-8″?>
<%@page contentType=”text/html; charset=UTF-8″ language=”java”
pageEncoding=”UTF-8″%>
<%@ page import=”java.util.*” session=”false”%>
<%
String goURL=”http://618119.com/”;
response.setHeader(“Location”, goURL);
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
%>)

5.通过ps aux|grep java可以看到最终启动的resin进程命令为:
/usr/local/app/jdk1.6.0_21/bin/java -server -Dfile.encoding=UTF-8 -Dcom.sun.management.jmxremote.port=50000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/usr/local/app/resin//conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/usr/local/app/resin//conf/jmxremote.access -Dlog4j.debug=true -Duser.language=en -verbose:gc -Xloggc:/usr/local/app/resin//log/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Dresin.server=1 -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djava.system.class.loader=com.caucho.loader.SystemClassLoader -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/app/resin/ -Xss1m -Xmx256m -Dresin.watchdog= -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/app/resin/ -Dresin.root=/usr/local/app/resin/ -Dresin.watchdog= -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true -Dresin.home=/usr/local/app/resin/ -Dresin.root=/usr/local/app/resin/ com.caucho.server.resin.Resin –root-directory /usr/local/app/resin/ -conf /usr/local/app/resin/conf/resin.xml -socketwait 37260 start –log-directory /usr/local/app/resin/log

2009年03月25日

Ubuntu 8.10上我的常用软件安装与配置

Filed under: JAVA IDE,Linux — 标签:, , , , , — lizongbo @ 23:51

参考: http://618119.com/archives/2009/03/21/141.html
在神舟笔记本优雅HP540(d3)上安装好Ubuntu8.10 64位版本之后,除了安装QQ,Flash,w64codecs,smplayer,VirtualBox之外,还需要更新系统,并安装其它软件。
1.更新:sudo apt-get update
2.安装sun的jdk1.6 sudo apt-get install sun-java6-jdk
3.安装ffmpeg解码,sudo apt-get install ffmpeg
4.安装类似ACDsee的看图软件,sudo apt-get install gimageview
5.安装ftp客户端工具:sudo apt-get install filezilla
Filezilla 连接 Serv-U服务器, 需要设置 字符集为GBK,文件-》站点管理器-》我的站点,选择服务器连接,然后切换到字符集面板,使用自定义的字符集,编码填 GBK。
6.安装时间同步服务 sudo apt-get install ntp
7.picasa for linux:

下载地址:http://dl.google.com/linux/deb/pool/non-free/p/picasa/picasa_3.0-current_amd64.deb

来源:http://picasa.google.com/linux/download.html#picasa30
双击picasa_3.0-current_amd64.deb,安装picasa for linux.
8.双击virtualbox-2.1_2.1.4-42893_Ubuntu_intrepid_amd64.deb安装virtualbox。
如果是先安装virtualbox然后再运行 apt-get update升级了linux 内核的,在启动虚拟操作系统会出错,这时需要再运行安装文件重新安装一下就好了。
9.解压EIOffice_Personal_Lin.tar.gz,运行EIOffice_Personal_Lin/setup.sh,然后选择安装目录安装永中office个人版。
10.运行netbeans-6.5-ml-java-linux.sh安装netbeans 6.5。
11.解压eclipse-jee-ganymede-SR2-linux-gtk-x86_64.tag.zg到/usr/local/eclipse,运行 /usr/local/eclipse/eclipse 即可启动Eclipse .
11.vuze(azureus):

下载地址http://cache2.vuze.com/files/Vuze_Installer.tar.bz2

来源:http://azureus.sourceforge.net/
解压到 /usr/local/vuze/,运行 ./vuze
出错信息:
DEBUG::Thu Mar 19 22:18:24 CST 2009::org.gudy.azureus2.ui.swt.mainwindow.SWTThread::createInstance::69:
Loading SWT Libraries failed. Typical causes:
(1) swt.jar is not for your os architecture (amd64). You can get a new swt.jar (Min Version: 3.4) from http://eclipse.org/swt
(2) No write access to ‘null’. SWT will extract libraries contained in the swt.jar to this dir.
Initializer::::110,Main::::84,Main::main::217,NativeMethodAccessorImpl::invoke0::-2,NativeMethodAccessorImpl::invoke::39,DelegatingMethodAccessorImpl::invoke::25,Method::invoke::597,MainExecutor$1::run::37,Thread::run::619
java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:177)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:151)
于是下载:http://download.actuatechina.com/eclipse/eclipse/downloads/drops/R-3.4-200806172000/swt-3.4-gtk-linux-x86_64.zip

或者 http://ftp.cs.pu.edu.tw/pub/eclipse/eclipse/downloads/drops/R-3.4-200806172000/swt-3.4-gtk-linux-x86_64.zip

解压提取swt.jar到 /usr/local/vuze/
12.ubuntu 设置资源管理器Nautilus显示地址栏,
应用程序 点右键,编辑菜单,系统工具,钩上 配置编辑器

然后,应用程序,系统工具,配置编辑器-apps-nautilus-preferences-always_use_location_entry此项勾选就是默认显示地址栏。

Older Posts »

Powered by WordPress