服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

编程必备经典:java常见问题集锦(1)

问: 如何设置java 2(jdk1.2)的环境变量? 

答: java 2安装后,需要设置path和java_home环境变量.与jdk1.1不同的是:设置好java_home环境变量后,jvm将自动搜索系统类库以及用户的当前路径。 

java 2环境变量的设置如下例所示: 

solaris平台: setenv java_home java2的安装路径 

setenv path $java_home/bin:${path} 

windows平台: set java_home=java2的安装路径 

set path=$java_homebin;%path% 

问: 哪些java集成开发工具支持java 2? 

答: 目前流行的java集成开发环境,如inprise的jbuilder,symantec的visual cafe, sybase的powerj,都支持java 2. 

问: 如果在netscape或ie浏览器中运行java applet时出现了错误,如何确定错误范围? 

答: 当java applet在浏览器中运行时,使用的是浏览器本身的缺省jvm.而不同浏览器对jdk的支持程度也不尽相同. 因此,在netscape或ie浏览器中运行java applet出现了错误,建议使用jdk提供的工具appletviewer或sun公司的hotjava浏览器来测试该applet,以确定错误的产生是与浏览器相关。

如果applet在appletviewer或hotjava中运行一切正常,则错误的产生是由于浏览 器不完全兼容jdk而引起的. 此时,解决方法可以是使用hotjava浏览器或者安装 sun公司的java plugin. 

如果applet在hotjava浏览器或appletviewer中运行即发生错误,则应当根据错误 提示检查applet程序. 

问: 当用jdbc向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码? 

答: 这个问题的实现通常与各个jdbc driver的实现有关. 目前大多数jdbc driver采用本地编码格式来传输中文字符,例如中文字符"0x4175"会被转成"0x41"和"0x75"进行传输. 因此我们需要对jdbc driver返回的字符以及要发给jdbc driver的字符进行转换. 

当用jdbc driver向数据库中插入数据时,需要先将unicode转成native code; 当 jdbc driver从数据库中查询数据时,则需要将native code转换成unicode. 下面给出了这两种转换的实现: 

string native2unicode(string s) { 

if (s == null || s.length() == 0) { 

return null; 

byte[] buffer = new byte[s.length()]; 

for (int i = 0; i s.length(); i++) { if (s.charat(i)>= 0x100) { 

c = s.charat(i); 

byte []buf = (""+c).getbytes(); 

buffer[j++] = (char)buf[0]; 

buffer[j++] = (char)buf[1]; 

else { 

buffer[j++] = s.charat(i); 

return new string(buffer, 0, j); 

}

除使用以上两个方法之外,有些jdbc driver如果对jdbc driver manager设置了正确 的字符集属性,以上2个方法就不需要了.

问: 当用servlet来处理http请求并产生返回的html页面时,如何使html页面中的中文字符能够正常显示? 

答:  javax.servlet.http.httpresponse类用于产生返回页面.通过httpresponse定义的方法getoutputstream()可以获得servletoutputstream的实例,这样用户就可以利用servletoutputstream.write方法向输出流中写入返回页面的内容. 但是servletoutputstream使用的是缺省的编码方式,如果要使返回页面中的中文字 符能够正常显示,最好显示地指定所用的字符编码方式. 通常需要构造一个 outputstreamwriter , 例程如下: 

public void doget (httpservletrequest req, httpservletresponse res) 

throws servletexception, ioexception 

res.setcontenttype("text/html"); 

servletoutputstream out = res.getoutputstream(); 

outputstreamwriter ow = new outputstreamwriter(out,"gb2312"); 

ow.write("这是测试"); 

ow.flush(); 

ow.close(); 

问:  如何设置java webserver的classpath,以包含用户的class文件? 

答:  有两种方法可以设置java webserver的classpath环境变量,以使用户编写的servlet能够调用用户的class文件. 

将用户的class文件放到 javawebserver_dir/classes目录下,在java webserver 启动时,classes目录被自动加入到classpath环境变量中了. 

修改httpd.nojre文件,将用户class文件所在的路径名加到classpath环境变量中. 

问:  为什么在windows平台上用naming.lookup来获取远程rmi对象时会很慢? 

答:  机器的网络设置不正确很可能会引起该问题的发生. 

rmi使用了java网络类,特别是java.net.inetaddress类,它将查询tcp/ip的主机名, 包括ip地址到主机名的映射和主机名到ip地址的映射.在windows平台,这种查询功能 是由本地的windows socket库来实现的. 因此延时是发生在windows库中,而非rmi中. 

如果你的机器设置成使用dns,问题通常是dns服务器查不到主机名,你所发现的延时 是dns查询的延时. 请尝试将rmi通信中涉及到的所有主机名/ip地址加到本地文件 winntsystem32driversetchosts或windowshosts中. 格式如下: 

ip地址 主机名 

如此设置应当可以明显地减少查询所花的时间. 

扫描关注微信公众号