学会看出错信息很重要,这个能知道错在哪里很重要。

一般会有两种出错的情况:

1 语法错误

首先不能有语法错误,否则会先报错的,即便缺失类定义,也先提示这个错误,比如:

<%
b = "";
String a = "";


错误信息:
引用
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 3 in the jsp file: /beijing/import.jsp

Generated servlet error:
    [javac] Compiling 1 source file

/Data/apps/tomcat/work/Standalone/localhost/_/beijing/import_jsp.java:46: cannot resolve symbol
symbol  : variable b
location: class org.apache.jsp.import_jsp
b = "";
^
1 error


2 缺失类定义

比如这样的代码:
首先,Microsoft.DVAP.PSO.PSOInterfaceWraper是正常的,但还有相关的类可能需要也会导致出错的。

<%@ page import="Microsoft.DVAP.PSO.PSOInterfaceWraper" %>
<%@ page contentType="text/html; charset=gb2312" %>
<%
String b = "";
String fileInfo = "";
fileInfo = new PSOInterfaceWraper().getClass().getProtectionDomain().getCodeSource().getLocation().toString();
out.print("<hr>"+fileInfo+" <hr>");
%>


没有了第一种错误,但会有缺失类的提示(NoClassDefFoundError):

引用
root cause

java.lang.NoClassDefFoundError: javax/xml/rpc/Service


要了解为什么,可以看看 Microsoft.DVAP.PSO.PSOInterfaceWraper 的定义,比如:

package Microsoft.DVAP.PSO;

// Imports
import com.chinavnet.zx.service.VNetCenterInterfaceForSP;
import com.chinavnet.zx.service.VNetCenterInterfaceForSPSoap;

public class PSOInterfaceWraper {


追查一下com.chinavnet.zx.service.VNetCenterInterfaceForSP即可找到凶手了:
package com.chinavnet.zx.service;

// Imports
import java.net.URL;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceException;

public abstract interface VNetCenterInterfaceForSP extends Service {


这里引入了javax.xml.rpc.Service,而没有办法找到此类的定义,所以就出错了啦~~

java里面根据这样的名称还真不知道缺失了哪个jar文件,那只能查一下相关的jar文件了,用jbuilder可以打开jar文件看的到,其它软件也许也可以的,是jaxrpc.jar文件,那可以把这个jar文件复制到 JAVA_DIR/jre/lib/ext/下即可,阿权不知道还可以复制到啥目录,java还是个复杂的东西,复制完毕还需要重启一下tomcat才行。

可以看到程序的运行结果:

引用
--------------------------------------------------------------------------------
file:/usr/java/j2sdk1.4.2_15/jre/lib/ext/PSO.jar
--------------------------------------------------------------------------------
test OK


另外说一下可以检查引用的是哪个jar的方法,就是代码里面说的了:

fileInfo = new PUBLIC_CLASSNAME().getClass().getProtectionDomain().getCodeSource().getLocation().toString();


注意,类是需要public的,abstract的会得到类似的提示:

引用
com.chinavnet.zx.service.VNetCenterInterfaceForSP is abstract; cannot be instantiated


这样顺着错误解决错误就正常了~


原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
Tags: , ,
三少 Homepage
2010/01/14 23:51
其实还有一种可能会引起这个错误,那就是多个jar 有相同类名且所在包路径也相同时,程序会引起混乱,不知道调用哪个时,也会出这个错。
hqlulu 回复于 2010/01/15 09:17
嗯,谢谢~
wwsss
2009/06/25 14:21
你缺了类包啦。。
给你一个JAVA类包搜索引擎,搜一下就知道
http://www.jar114.com
hqlulu 回复于 2009/06/26 20:43
谢谢,好东西
分页: 1/1 第一页 1 最后页
发表评论
AD
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML 打开UBB 打开表情 隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写
 

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐