使用eclipse远程调试tomcat

相信很多J2EE的开发者都是在Windows上面开发程序,然后把程序上传到Linux下运行的吧。可是有时候在自己机器上运行的好好的程序,放到服务器下就出错了。单单看出错信息也推断不出是哪里的问题。这时候试试用Java的JPDA远程调试程序,一定可以让你很满意。

tomcat服务器已经内置了JPDA支持,只要用:

catalina.sh jpda start

这条命令启动tomcat,它就会监听8000端口,等待调试器的连接。要注意不能使用startup.sh脚本。tomcat会使用 JPDA_ADDRESS这个环境变量的值。比如想监听8017端口:

export JPDA_ADDRESS=8017
catalina.sh jpda start

接着,选一个自己喜欢的调试器,基本上现在主流的如Eclipse、NetBean都可以。我主要使用Eclipse,操作只要三步:

  1. 选择“Run”菜单里的“Open Debug Dialog”。
  2. 在对话框里找到“Remote Java Application”。 右键菜单选择“New”创建一个配置。
  3. 新创建的配置的Project选择服务器上的工程。HostPort分别填写你服务器的IP和JPDA的端口,默认是8000,或者$JPDA_ADDRESS

现在就可以像本机调试一样, 设置断点和跟踪调试了。

类型:Java,创建时间:一月 1, 2012, 11:52 a.m. 点击查看完整内容。。。
Python, Qt, Java的字符编码

首先定义只在本文中出现的两个基础概念:

  • 字节组。每8个位(bit)是为一个字节,多个字节成为一个字节组。
  • 文字串。现实语言的最小单位称为文字。一个英文字母就是一个文字,一个汉字也是一个文字,一个空格也是文字。

这两个概念是我生造的,主要是为了避免和现有的一大堆术语混起来。

文字串不能理解成字符串。倒是像圆这样的数学概念,比较抽象一些,只存在于头脑里。可以把文字串写在纸上,也可以记在计算机里,还可以读出来。字节组就是文字串在计算机中的表现形式。想一想,在纸上圆可以用一个公式来表达,也可以用一个图形来表达,还可以用文字描述它。文字串也一样,可以表述为多种字节组。众所周知,计算机只能处理数字,所以为了描述文字,最简单的方法就是把文字列出来,每个文字用一个数字表示。不同的国家有不同的方法来做这件事,比如美国人和英国人只有字母,还有一些符号,总共排了256个文字,叫做ascii码。中国的文字就比较多了 ,那个康熙大字典据说有40万,所以中国人排了gb2312标准,big5,gbk、还有gb18030,里面包含的文字总数各不相同。

  • 把文字串表述成字节组的方法就叫做字符编码。

显然,美国人的ascii码是不能表示中国文字的,因为它只能表示256个文字。虽然,中国的标准可以表示美国人的文字,但是却不能表示阿拉伯字符和其它一些像型文字。后来大家意识到这个问题是文化交流的障碍,于是就在一起制定了一个unicode标准。简而言之,unicode标准就是穷尽这个世界上所有的文字,给每个文字编一个数字。 和gb2312,gbk等一样,其实unicode也只是一种编码标准,只不过它能够表示所有的文字。从此,如果一个计算机系统想要支持多种语言文字,只要简单地支持unicode就可以了。在这种系统里,我们可以认为文字串就是unicocde字节组,unicode字节组就是文字串。

类型:Python,C++ & Qt4,Java,创建时间:十二月 31, 2011, 4:52 p.m. 点击查看完整内容。。。
维护多个WebService API版本的方法

随着软件系统的不断发展,与其相配套的API也必定会发生着不断的变化。如何降低API变化对外部系统的影响是大多数软件系统都要面对的挑战。

在设计指令集、SDK或者API时,向后兼容可以说是最基本的道德,这已经被无法的例子所验证。不过随着软件系统功能的不断增加,维持原来的API往往是不可能的。两相权宜,只能选择有条件的向后兼容。通常的做法是保留原来的函数,然后增加新的函数。比如CreateWindow(String className),如果要新增了一个参数,名为style,那么我们可以再新增一个函数如CreateWindowEx(String className, String style)。显而易见,这种方法是最简便的,却可能不是最好的。利用高级语言的特性可以把它修改为具有默认参数的函数如:CreateWindow(String className, String style="default"),或者简单地再创建一个新的同名函数:CreateWindow(String className, String style)。虽然不能指定默认参数的值,但是Web Service支持前一种做法。

类型:Java,创建时间:十二月 31, 2011, 1:33 a.m. 点击查看完整内容。。。
Java的闭包与final关键字

Java下的闭包(Closure):

public static Runnable outter_func(){
    final String param=System.getenv("PATH");
    Runnable r=new Runnable(){
        public void run(){
            System.out.println(param);
        }
    };
    return r;
}

r.run();

这是在Java里面使用“闭包”的一个例子。run()相当于Python里的__call__()。可以看到在run()方法里可以使用外层函数的变量。这是怎么做到的呢?答案是,Java在编译的时候做了手脚。r这个类其实还有一个隐藏的属性叫做“var$param”,在run()里面所有的param被Java编译器偷偷替换成var$param。此外在r实例化完成后,Java还调用了:

r.var$param=param

假设param不是使用final修饰的变量,当param指向了另外一个对象的时候,r.var$paramparam就不是相同的了,这就会产生了语义上的问题。因此,闭包绑定的本地变量必须使用final修饰。

类型:Java,创建时间:十二月 31, 2011, 12:25 a.m. 点击查看完整内容。。。
电子证书在现实世界的使用,以及CXF如何支持SSL.

这是一篇很长的文章。首先介绍了SSL的概况,解释一些基本的概念。然后又介绍了SSL的基础——非对称加密技术。短短的篇幅结束以后,就以一个现实世界的例子开始我们的安全之旅。

如果你碰到这些问题,看看这篇文章一定值。

  1. 怎么样制作一份自己的电子证书。
  2. 怎么样使用openssl以及Java的keytool工具来制作电子证书。
  3. 制作电子证书太麻烦,本文提供了一Python脚本,以向导的方式制作电子证书。
  4. 如何配置Tomcat,让它支持TLS,也就是https协议。
  5. Web Service客户端使用电子证书来验证服务器的身份。
  6. Web Service客户端提交电子证书,让服务器也可以验证客户端的身份。
  7. 吊销客户端的电子证书。禁止CXF客户端访问服务器。
类型:Java,创建时间:十二月 30, 2011, 6:14 p.m. 点击查看完整内容。。。
cxf开发实践(服务器)

本文介绍使用CFX开发一个WebService服务器的几个基本步骤。

  1. 安装CFX
  2. 像平常一样开发一个供本地代码调用的Java类。
  3. 通过添加JAX-WS将这个Java类变成一个WebService服务
  4. 使用java2wsdl工具生成WSDL文件。
  5. 使用wsdl2java工具生成客户端代码
  6. 配置服务运行环境
  7. 测试客户端代码
类型:Java,创建时间:十二月 30, 2011, 12:39 p.m. 点击查看完整内容。。。