关于Java中的一些问题汇总

最近在看struts框架,也想学习一下Java,从安装配置到应用,出现的小问题一个接一个的,下面把问题汇总分类一下:
1.eclipse启动不了. 提示 "Required Java version:1.4.1 Available 1.3.1_01"
解决办法:
有可能是装了oracle或其它不同版本的jdk,出现版本不匹配,这时可以在环境变量中设置一下,
在系统在环境变量path里将oracle路径相关的jdk和jre往后移动。。。移到自己系统的jdk,jre 后面,重启机器即可

2.eclipse启动时出现提示查看log文件,打开详细的日志内容如下:(只贴一点点)
!SESSION 十一月 22, 2005 13:56:33.546 ---------------------------------------------
eclipse.buildId=I200406251208
java.version=1.3.1_01
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=zh_CN

!ENTRY org.eclipse.osgi 十一月 22, 2005 13:56:33.546
!MESSAGE Error registering XML parser services.
!STACK 0
java.lang.ClassNotFoundException: javax.xml.parsers.SAXParserFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.Class.forName0(Native Method)
解决办法:
这样的问题主要是因为eclipse与jdk之间的绑定有问题,
具体方法如下,在eclipse的快捷方式里加上  -vm "c:/jdsk1.4.0.1/bin/javaw.exe"这样就可以了。

3.关于jdk,tomcat及eclipse的安装可以在网上查一下,文档很多


4.关于JSP乱码的问题
在Java中乱码问题一直是我们这些初学者比较烦的话题,但从网上查询我将其汇总成四种情况(都转自网上)
(1) jsp contentType 的设置 <%@page contentType="text/html;charset=GB2312"%>
(2)一个就是某些包中的类对中文没有良好的支持。就比如说我刚刚用的上传的一个包,这个包中的类对中文支持就是不好,显示在网页中的中文全部 是???????。后来当我从这个包的类里取出的数据都用了 new String(file_item.getName().getBytes("iso8859-1"),"GBK"))就解决了问题。

如:
<%@ page contentType="text/html; charset=GBK" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="org.apache.commons.fileupload.DiskFileUpload, org.apache.commons.fileupload.FileItem" %>
<%
if("POST".equalsIgnoreCase(request.getMethod()) && request.getContentType().startsWith("multipart/form-data")) {
DiskFileUpload upload = new DiskFileUpload();
  java.util.List files = upload.parseRequest(request);//
取得表单
  FileItem file_item;
  for(int i=0; i< files.size(); i++) {//
循环得出表单中的元素,这里为了看是否id有值可取出dbms_phsgame
    file_item = (FileItem)files.get(i);
    //
如果有id元素,就从数据库中取出dbms_phsgame
    if("file".equalsIgnoreCase(file_item.getFieldName())) {
      out.println(new String(file_item.getName().getBytes("iso8859-1"),"GBK"));
    }
 }
}
%>
<html>
<body>
  <form name="form1" enctype="multipart/form-data" method="post" action="">
      <input type="file" name="file">
    <input type="submit" name="Submit" value="
提交">
  </form>
</body>
</html>


(3)

3.数据库数据本身就是乱码。

这里推荐一个办法---就是getBytes()的方法

// 用于读数据库时由 iso8859-1 变为 GBK
public String GBKConverter(String s_string){
try{
String des = new String(s_string.getBytes("iso8859-1"),"GBK");
return des;
}
catch(Exception ex){
String des="";
return des;
}
}

//用于处理页内生成的中文数据在写入数据库时的处理,由GBK变为iso8859-1
public String ISOConverter(String s_string){
try{
String des  =  new String(s_string.getBytes("GBK"),"iso8859-1");
return des;
}
catch(Exception ex){
String des = "";
return des
}
}
BTW:
<%@ page contentType="text/html;charset=gb2312" %>
一定有, 而且要在文件首行(不能在include文件中)
还有, 如果不能正确解析表单内容, 加这一句:
request.setCharacterEncoding("gb2312");

最后的解决办法:

String   unitName   =new   String(request.getParameter("unitName").getBytes("ISO8859-1"));

(4)是我昨天遇到的问题,在Jsp界面中如果不从资源文件中读取信息,写中文正常但利用标签
<bean: message...../> 读取则显示乱码,在CSDN中发了贴子请教了一下,有位朋友说需要用native2ascii来将properties进行一下转换即可,我查了一下native2ascii的相关信息,它的格式如下:
native2ascii -[options] [inputfile [outputfile]]
这个命令安装了jdk后便会有的,参数说明:

-[options]:表示命令开关,有两个选项可供选择
-reverse:将Unicode编码转为本地或者指定编码,不指定编码情况下,将转为本地编码。
-encoding encoding_name
:转换为指定编码,encoding_name为编码名称。
[inputfile [outputfile]]
inputfile:表示输入文件全名。
outputfile
:输出文件名。如果缺少此参数,将输出到控制台。

最佳实践:首先将JDKbin目录加入系统变量path。在盘下建立一个test目录,在test目录里建立一个zh.txt文件,文件内容为:熔岩,打开命令行提示符,并进入C:/test目录下。下面就可以按照说明一步一步来操作,注意观察其中编码的变化。

A:将zh.txt转换为Unicode编码,输出文件到u.txt
native2ascii zh.txt u.txt
打开u.txt,内容为“/u7194/u5ca 9”

B:将zh.txt转换为Unicode编码,输出到控制台

C:/test>native2ascii zh.txt
/u7194/u5ca9
可以看到,控制台输出了“/u7194/u5ca 9”

C:将zh.txt转换为ISO8859-1编码,输出文件到i.txt
native2ascii -encoding ISO8859-1 zh.txt i.txt
打开i.txt文件,内容为“/u 00c 8/u00db/u00d1/u00d 2”

D:将u.txt转换为本地编码,输出到文件u_nv.txt
native2ascii -reverse u.txt u_nv.txt
打开u_nv.txt文件,内容为熔岩

E:将u.txt转换为本地编码,输出到控制台
C:/test>native2ascii -reverse u.txt
熔岩
可以看到,控制台输出了熔岩

F:将i.txt转换为本地编码,输出到i_nv.txt
native2ascii -reverse i.txt i_nv.txt
打开i_nv.txt文件,内容为“/u 00c 8/u00db/u00d1/u00d 2” 。发现转码前后完全一样的。也就是说,等于没有转,或者说思想糊涂,对命名没有理解。。

G:将i.txt转换为GBK编码,输出到i_gbk.txt
native2ascii -reverse -encoding GBK i.txt i_gbk.txt
打开i_gbk.txt文件,内容为“/u 00c 8/u00db/u00d1/u00d 2” 。发现转码前后完全一样的。也就是说,等于没有转,或者说思想糊涂,对命名没有理解。

H:将u_nv.txt转码到本地编码GBK,输出到控制台
C:/test>native2ascii -reverse -encoding ISO8859-1 i.txt
熔岩
从这个结果看,目标达到到了,编码i.txtISO8859-1,转为本地编码后内容为熔岩。从这里应该意识到,native2ascii -reverse命令中-encoding指定的编码为源文件的编码格式。而在native2ascii 命令中-encoding指定的编码为(生成的)目标文件的编码格式。这一点非常的重要!切记!!

继续探索,新建文件 12a .txt,内容“12axyz”。看看纯字母数字的编码又如何。

I:将纯字母数字的文本文件 12a .txt转换为Unicode编码
native2ascii 12a .txt 12a _nv.txt
打开 12a _nv.txt文件,内容为“12axyz”
继续测试,转为ISO8859-1编码看看
C:/test>native2ascii -encoding ISO8859-1 12a .txt
12axyz
结果还是没有转码。
从结果可以得出结论:对于纯数字和字母的文本类型件,转码前后的内容是一样的。

总结native2ascii是一个非常的好转码工具,并且转码是可逆的!而其真正的含义并非本地编码——>转码为ASCII码,而是一个通用的文本文件编码转换工具。在做编码转换的时候有两类指定编码的情形,分别指输出文件编码和输入文件编码,具体可以看看最佳实践部分。

实际应用中:

比如可以这样利用native2ascii

native2ascii -encoding gbk     temp.properties    application_zh_CN.properties

    这里将根据一个临时文件temp.properties输出了application_zh_CN.properties,然后把application_zh_CN.properties中的文件内容替换这个临时文件的内容就可以了。


值得注意是:编辑文件时最后用editplus或文件工具,而不要用eclipse,因为我在eclipse编辑完后,用native2ascii转换后仍不正确,但用editplus编辑后再转换便正常了.



5.java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource的解决方法

Myeclipse开发struts,配置struts- config中的data-sources,出现java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource的解决方法
struts-config.xml
文件中的data-sources是这样配置的

    <data-sources>

        <data-source key="mysql" type="org.apache.commons.dbcp.BasicDataSource">                                                     

            <set-property property="autoCommit" value="true"/>

            <set-property property="driverClassName" value="com.mysql.jdbc.Driver"/>

            <set-property property="url" value="jdbc:mysql://localhost:3306/javajavajava"/>

            <set-property property="maxCount" value="10"/>

            <set-property property="minCount" value="1"/>

            <set-property property="username" value="root"/>

            <set-property property="password" value="admin"/>

        </data-source>
</
data-sources>

启动Tomcat,结果出现下面的错误:

信息: Starting Servlet Engine: Apache Tomcat/6.0.13
2007-12-17 19:31:06 org.apache.struts.action.ActionServlet initModuleDataSources
严重: Initializing application data source mysql
java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
at org.apache.struts.util.RequestUtils.applicationClass(RequestUtils.java:117)
信息: Marking servlet action as unavailable
2007-12-17 19:31:06 org.apache.catalina.core.StandardContext loadOnStartup
严重: Servlet /huqianhao threw load() exception
javax.servlet.UnavailableException: Initializing application data source mysql
at org.apache.struts.action.ActionServlet.initModuleDataSources(ActionServlet.java:812)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:335)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
2007-12-17 19:31:06 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2007-12-17 19:31:07 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on / 0.0.0 .0:8009
2007-12-17 19:31:07 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/63 config=null
2007-12-17 19:31:07 org.apache.catalina.startup.Catalina start
信息: Server startup in 2848 ms

解决办法:

一看就知道是没有找到文件,但不知道是少了哪个jar包。网上搜了一下,只要把commons-pool.jarcommons-dbcp- 1.2.2 .jarcommons-collections-3.2.jar三个jar包加入classpath中就没问题拉!有人说只要前两个,我试了下好象不行哦。这几个jar包都可以在myeclipse安装文件下可以找到。只是版本号可能不一样而已Ctrl+F查找一下就OK拉!





  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值