您的位置:首页 > 编程语言 > Java开发

JAVA常见问题解决办法汇总

2017-09-21 16:48 3759 查看
1.java.lang.NullPointerException

       原因是:有空指针,有地址没赋值

2.Exception in thread "main" java.lang.ArithmeticException: / by zero

      原因是除数是0

3.ArrayIndexOutOfBoundsException

        原因是:数组越界

4.java.lang.NumberFormatException

        原因是:数字格式化有问题

5.Unhandled exception type Exception

       原因是:没有进行异常处理

6.进行国际化操作的时候遇到这样的错误:Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name Message, locale zh_CN

       答:因为在命令提示符中,是没有错误的

       解决方法是:在myeclipse中,会出现这个错误

java国际化之Can't find bundle for base name

1.初步学习

最近在学习ResourseBundle时遇到了“Can't find bundle for base name ”这个错误搞了很久才解决了。原因就是类路径问题要将属性文件放在类路径中!百度里很多都是教程但没有涉及到解决方法! 2.中文显示:

测试文件

java 代码

package com.lht.ResourseBundleStudy;

import java.util.ResourceBundle;

public class ResourseBundleDemo {

 public static void main(String[] args) {

 ResourceBundle resource = ResourceBundle.getBundle("test");

 System.out.print(resource.getString("msg0") + "!");

 System.out.println(resource.getString("msg1") + "!"); }

}

test.properties

msg0="Hello World"

msg1="da jia hao"

开始自己测试的时候:将属性文件放在bin/下也试过也不行无赖中就在google中搜索了一下终于在sun的java论坛

(http://forum.java.sun.com/thread.jspa?threadID=660477&messageID=4231534)中找到了线索下面是帖子的内容:

I've solved the problem the best way possible. Basically what i've done is added a new class folder named config to the project home dir. Then i added this classfolder to the classpath in project properties. After doing all of this you only need to reference
the properties file by "Email".

Hope this helps anyone else who is having similiar problems.

基本意思就是在src下建立classes(名字无所谓)文件夹将属性文件存放在下面,然后将这个文件夹加入类路径中!运行就可以了:

加入类路径的方法:你的工程文件夹->properties->选择Libraries选项卡->Add Class Folder将刚才建立的文件夹加入就可以了!

结果如下:

"Hello World"!"da jia hao";!

 2.中文显示

在classes目录下建立message_CH.properties内容如下:

ms0="大家好"

同样用上面的测试文件!

结果如下:"?ó????"!

乱码怎么回事啊!

在百度里搜索后找到了答案有以为网友写的很清楚:http://gostar.bokee.com/3885062.html

下面引用如下:

原理

Property文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。而在Java程序中读取Property文件的时候使用的是Unicode编码方式,这种编码方式不同会导致中文乱码。因此需要将Property文件中的中文字符转化成Unicode编码方式才能正常显示中文。

解决办法:

Java提供了专门的工具对Property文件进行Unicode转化,这种工具就是native2ascii,它在JDK安装环境的bin目录下。

native2ascii 工具将带有本机编码字符(非拉丁 1 和非单一码字符)的文件转换成带有Unicode编码字符的文件。

假设需要转化的属性文件为:D:/src/resources.properties(含有中文字符)

转化后的属性文件为:D:/classes/resources.properties(中文字符统一转化为Unicode)

那么使用如下命令

JAVA_HOME/bin/native2ascii -encoding GBK D:/src/resources.properties D:/classes/resources.properties

就能将含有中文字符的属性文件转化成单一Unicode编码方式的属性文件。中文乱码自然会被解决。

通过上面的方法我将生成的文件打开一看内容如下:

ch="/u5927/u5bb6/u597d"

再运行结果如下:

"大家好"

(2)另一种解决办法:Can't find bundle for base name

Struts2国际化异常处理

这是找不到指定文件;

你必须把 .properties 文件,放在与这个调用文件.java 相同的目录里;

Hello.java在workspace\test\src\com\lj\guojiehua下

hello_en_US.properties必须在workspace\test\src下

hello_zh_CN.properties必须在workspace\test\src下

其实原因是我虽然在build path 里面 加了\pruway\source\source\config,但是系统编译的时候,在classes里面应该会自动产生resource_en_US.properties,可是实际情况是classes包下面没有产生,故我删掉重加,再编译结果发现通过了。。 就是说,只要你buildpath路径对了,该路径下也有resoucebudle需要的类,那么系统会自动在classes里面自动编译产生这些类的。所以,先检查classes里,有没有生成对应的resource_en_US.properties,如果没有,那么检查build
path 路径下有没有对应的properties类,如果有,那么证明系统编译没有编译完整,删掉path,重新add foler,加入,再编译,检查classes下有无。 如果都有,那么证明成功。 

 10.java.lang.IllegalThreadStateException

        解决办法:不能启动两次线程

 11.java.lang.NoSuchMethodError

答:必须有一个

public static void main(String[] args){

//这里是入口

}

作为入口点,启动java虚拟机时虚拟机会找这个方法,如果没有就报exception in thread “main”java.lang.nosuchmethoderror

 12.java.net.UnknownHostException :http://www.baidu.com/

      原始出错程序是这样的:

      解答方式:import java.net.InetAddress ;

public class a{
public static void main(String args[]) throws Exception {// 所有异常抛出
InetAddress locAdd = null ;
InetAddress remAdd = null ;
locAdd = InetAddress.getLocalHost() ;// 得到本机
remAdd = InetAddress.getByName("http://www.baidu.com/")  ;
System.out.println("本机的IP地址:" + locAdd.getHostAddress()) ;
System.out.println("MLDNJAVA的IP地址:" + remAdd.getHostAddress()) ;
System.out.println("本机是否可达:" + locAdd.isReachable(5000)) ;
}

   //5000代表代数

};

     运行后结果为:

     如果注释掉remAdd = InetAddress.getByName("http://www.baidu.com/")  ;

运行结果又是这样的:

上述程序的解决办法是:将
remAdd = InetAddress.getByName("http://www.baidu.com/")  ;改成

程序运行结果如下:

   完成实验要求,但是这里就有一个问题了,为什么去掉http//和后面的/的就运行的了呢?

(2)但是对于这个极其相似的程序却可以运行出结果:

   import java.net.InetAddress ;

public class b {
public static void main(String args[])throws Exception{
 
InetAddress address=InetAddress.getByName("www.microsoft.com");
 
System.out.println("ip: "+address.getHostAddress());
 
System.out.println("host: "+address.getHostName());
 
System.out.println("canonical host name: "+address.getCanonicalHostName());
 
byte[] bytes=address.getAddress();
 
for(byte b:bytes)
 
{
if(b>=0)System.out.print(b);
   else System.out.print(256+b);
}
}

}

    运行结果为:

 13.运行下列程序出现了这样的错误,这是线程的知识,一个线程如果启动了,再启动一个的时候就会报错:java.lang.IllegalThreadStateException

 程序如下:class thrund extends Thread{
private String name;
public thrund(String name){
this.name=name;
}

public void run(){   //线程完成的动作
for(int j=0;j<4;j++){
System.out.println(name+"第"+j+"个");
}
}

};

public class a {

    public static void main(String agrs[]){

    thrund th1=new  thrund("线程A");//实例化一个线程对象

   

    th1.start();   //调用线程主体

    th1.start(); //调用线程主体

   

    }

};

     运行结果如下:

 

  14.The public type abc must be defined in its own file这样的警告是出现在我下面这样的程序中的:

     

      所以我在百度上输入这样的问题:java程序中两个类为什么不能同时有public(其中有一个是主方法)?

      得到的回答是这样的:

     因为一个GM规定一个类中只能有一个PUBLIC 的  而且源文件的名字只能和PUBLKIC 属性的类去一个名字。

     另一种回答是这样的:同个源文件有多个公共类,编译器就找不到应该执行的main方法了

 15.运行下列泛型程序时,出现一下错误:

     程序:class add<T>{

private T y;
public T p(T y){
System.out.println(y);
return y;
}

}

public class a{
public static void main (String args[]){
add <String> adder=new add<String>();
//System.out.println("输出属性"+adder.getX());
//adder.p("你好,邱林和");
fun(adder);
public static void fun(add<?> temp){
System.out.println("内容"+temp);
}
}

}

      出现了如下错误:

     其中这个void is an invalid type for the variable fun这个错误的解释时:   

      第一步:检查拼写是否错误;

第二步:检查void actionPerformed(ActionEvent ae){}函数的位置,不能让它嵌套在别的函数里。我不知道为什么,但我这样改对了。

     通过这个观察上述代码确实发现这个fun方法被包含在了主方法中,所以导致这个错误,改成下列程序后,程序运行结果如下:

    

    public class a{
public static void main (String args[]){
add <String> adder=new add<String>();
//System.out.println("输出属性"+adder.getX());
//adder.p("你好,邱林和");
fun(adder);
}//一开始这个}被放在了fun函数下面,所以导致了这个错误。
public static void fun(add<?> temp){
System.out.println("内容"+temp);
}

}

      运行结果如下:

16.错误:java:Syntax error on token ";", , expected

17.解释是这样的:int b=3;

b=b-2;

应为这2行代码写的地方还处在声明定义阶段处。

就好象你脑子里想象着我有3块钱(第一行),但是又立马用这想象的3快去买物品(第二行)

所以卖东西的人肯定会说你(报错).

就是说,b=b-2这行代码处的位置  还处于声明阶段,没有在内存中给他划分空间,你是不能操作的。要么声明为静态的,提前划分空间

17,运行以下程序时,报错:

程序为:

public class a{
public static void main(String args[]){
Runtime run= Runtime.getRuntime();
System.out.println("JVM 最大内存量:"+run.maxMemory());
Process pro=null;   //声明一个Process对象,接收启动的进程
try{
pro=run.exec("Thunder.exe");   //调用本机程序,必须进行异常处理
}catch(Exception e){      //打印异常信息
e.printStackTrace();
}
try{
Thread.sleep(5000);
}catch(Exception e){
e.printStackTrace();
}
pro.destroy();  //结束此进程

}

}  

  运行结果为:

这一句有问题,pro=run.exec("Thunder.exe");   //调用本机程序,必须进行异常处理  ,里面的Thunder.exe改成”notepad“就有用,不知道为什么?

18.java.lang.ArrayStoreException

      当运行下列程序时出现了这样的错误:

       import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

import java.util.List;

public class a{
public static void main(String args[]){
List<Integer> al=null;     //定义List对象
Collection<Integer>  cl=null; //定义Collention对象
al=new ArrayList<Integer>();  //实例化List对象,只能是Integer
cl=new ArrayList<Integer>();   //实例化Collection对象,只能是Integer
al.add(0, 34);     //在指定位置增加元素
al.add(1,343);
   System.out.println(al);
   cl.add(5654);
   cl.add(3434);
   System.out.println(cl);
   al.addAll(cl);    //从Collection继承的方法,增加一组对象
   String str[]=al.toArray(new String[] {});   //指定的泛型类型
   System.out.print("指定数组类型"); //信息输出
   for(int  i=0;i<str.length;i++){   //输出字符串数组中的内容
    System.out.print(str[i]+"、");
   }
  System.out.print("\n 返回对象数组:");//信息输出
   Object obj[]=al.toArray();    //直接返回对象数组
   for(int i=0;i<obj.length;i++){      //循环输出对象数组内容
    String  temp=(String) obj[i];    //每一个对象都是String类型实例
    System.out.print(temp+"、");
   }
}

}   

      程序运行结果如下:

      当你试图将错误类型的对象存储到一个对象数组时抛出的异常。例如,以下代码可生成一个 ArrayStoreException: 

   Object x[] = new String[3];

     x[0] = new Integer(0);

就这么简单。

怎么避免呢?关键就是元素的内容要正确。

你看你的代码:

private Object[] objects;

....

objects = new ObjectSet[size];

很明显这里用父类的引用指向了子类的实现。

那么给每个元素赋值的时候只能付这个子类对象及这个子类的后代。

你又将OBJECT赋值给它,那么就必须向下转型。

上述程序的解决办法是:    

      把:” List<Integer> al=null;     //定义List对象
Collection<Integer>  cl=null; //定义Collention对象
al=new ArrayList<Integer>();  //实例化List对象,只能是Integer
cl=new ArrayList<Integer>();   //实例化Collection对象,只能是Integer“  语句中的Integer都改成String就可以了

18.address already in use: jvm_bind

在运行服务器和客户端程序的时候出现下面的错误:

   可能运行错误的原因有:通常出现Address already in use: JVM_Bind错误的可能性分析

I.就是当前端口已经有别的程序在占用着,所以要么把占用这个端口的程序关闭,要么重新换一个端口

II.端口号被占用,如果你有装oracle的话,有可能是oracle使用了8080端口,oracle安装后并且如果启动了OracleHttp服务会占用8080端口

III.我认为很可能是多启动了几次TOMCAT,在ECLIPSE下重复启动TOMCAT就会出现这个问题,你去调查一下看看是否是这个原因.

IV.如果不是windows操作系统,那么80端口已经被占用.如果是windows操作系统.请检查是否装有IIS.

V.启动了多个Tomcat。

我就是因为启动了两个Tomcat,所以才会报这样的错误,通常情况下, 多次启动Tomcat或者非正常关闭Myeclipse,但是占用端口的进程没有关闭,也会出现这样的错误。解决方法是关闭javaw.exe进程。

源程序是:

服务器端程序:

     package a;

import java.net.*;

import java.io.*;

public class Server{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server(){
try{
//在服务器端指定端口10000创建队列长度为50的服务器端套接字
ss=new ServerSocket(10000);
while(true){
//告诉服务器不停地等待,直到有客户端连接到该Serversocket指定的端口
//一旦有客户端通过网络向该端口发送正确的连接请求
//该方法就会返回表示服务器与客户端连接已建立的Socket对象
socket=ss.accept();
String clientIP=socket.getInetAddress().getHostAddress();
String clientPort=":"+socket.getLocalPort();
System.out.println("A client come in !IP:"+clientIP+clientPort);
//获得客户端发送的信息
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=in.readLine();
System.out.println("Client send is:"+line);
//给客户端Socket 发送回应信息
out=new PrintWriter(socket.getOutputStream(),true);
out.println("Server:Your Message Received!");
//关闭资源
out.close();
in.close();
socket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String args[]){
new Server();
}

}

   客户端程序:

package a;

import java.io.*;

import java.net.*;

public class Client {

    Socket socket;

    BufferedReader in;

    PrintWriter out;

    public Client(){

    try{

    //连接服务器端的Socket

    

        socket=new Socket("127.0.0.1",10000);

        //读取输入字符,输出到服务器端Socket中

        System.out.println("Please enter some Character");

        BufferedReader line=new BufferedReader(new InputStreamReader(System.in));

        out=new PrintWriter(socket.getOutputStream(),true);

        //读取从服务器端socket输入的信息

        in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

        System.out.println(in.readLine());

        

        //关闭资源

        out.close();

        in.close();

        socket.close();

        

       }catch(IOException e){

     e.printStackTrace();

      }

    }

     public static void main(String args[]){

    new Client();

     }

}

      运行时,错误时这样的:

        java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:96)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:175)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at a.Server.<init>(Server.java:12)
at a.Server.main(Server.java:38)

   解决的办法是下面这样的:

满意回答

Reason:

Address already in use:JVM_Bind

原因:

JVM已经被占用了。

你是不是有其他的Java项目(程序)在运行中,结束了他们就好了。

在运行你想要调试的项目前,要确保JVM是处于Stop状态的。 

LZ你写的是不是web项目啊,如果不是上面的原因的话,那就是端口冲突了,LZ的是不是这个异常:

java.net.BindException: Address already in use: JVM_Bind

这个错误的原因是当前程序里用到的端口已经被其他程序占用,例如,我们在eclipse里新建一个socket和serversocket进行通信,在这里面会用到端口号,当运行时,报这个这个错误,那么就是socket里的端口号与外面的程序如Oracle、tomcat 的端口号相同,办法就改掉socket里的端口,或者改tomcat 里的web.xml中的端口号就ok了。

      但是没有解决这个错误,把端口3000改成8000后,运行后的结果为:

     Please enter some Character

          rtrttrtrtrtrt

          null

      19.错误调试:class cannot be resolved to a type 或者JSP import class cannot be resolved to a type

错误调试解析:class cannot be resolved to a type 或者JSP import class cannot be resolved to a type

import XXX.XXX cannot be resolved to a type , import XXX.XXX cannot be resolved错误处理解析

类的引用不可定义为一种。

出现这种问题的情况一般是你的引用出现了二义性。

比如你引用了classes.pack.num1,但是你同时在根文件夹下有一个classes的文件夹,和把此classes文件打包成的jar包,又或者你的classpath环境变量配置的过程中同时出现了路径"."和“XXX.jar”而有两个同名同路径的.class文件可以被找到,就会引发此问题。

很多时候用vi编辑.java文件的时候,默认使用的编译存放路径是".",就是说同目录下。

eclipse工程中默认.java文件的位置是src,编译文件.class的位置是classes,这种情况下, 使用手动测试的时候会出现在src的文件夹下也会生成出.class文件,如果系统环境变量中有classpath="."的定义时,再次使用eclipse编译时,就会出现class cannot be resolved to a type,因为同时可以找到两个同名同路径的.class文件。JSP impot class cannot be resolved to a type我的问题出在eclipse编译时把.class文件放在了classes文件夹下,但是tomcat去找的时候,只找了"."文件夹,结果就找不到。而在编写的时候,eclipse是能找到的,所以编写时不报错,运行时报错。如果你在.文件夹下也生成.class文件,tomcat能找到了,eclipse又找重了,还是不行。我的解决办法是,在tomcat启动时,为tomcat添加引用路径,先把classes文件夹导入到JVM中。tomcat在调用类的时候,就不会找不到了。具体操作方法是,使用eclipse的tomcat插件,在eclipse的主界面菜单window下的preferences对话框中找到tomcat插件的那一项,选择JVMsetting,有一个classpath(before
generated classpath)中,导入你的classes文件夹。就可解决此问题。

相同的,如果tomcat运行时出现了找不到引用的jar包,也可以在这里设置导入。

后来发现经过myEclipse编译过的带有tomcat属性的文件会自动生成.class文件到目标工程,$tomcat\webapps\$project\web-inf\classes文件夹下。如果你的tomcat的配置文件路径设置正确的话,MyEclipse在调试,或者tomcat单独启动的时候,读取的就是该文件夹下的.class文件。如果你的tomcat的配置文件使用的是工程的绝对路径,并指向你的MyE的工作目录workspase的时候,就要注意在调试和发布的时候,一定别忘了把你编译好的.class文件考入相应的包下。否则tomcat会报此错或者class
not found的错误。

如果还不对,请检查系统环境变量class_path是不是重复设置了可以导致二义性的路径。

或者是原有的同包,同名的类的拷贝版被加入了路径。

WEB-INF\classes 

class cannot be resolved to a type 问题的解决(2011-12-01 13:42:36)转载▼标签: it 分类: Java  

错误:class cannot be resolved to a type 或者JSP import class cannot be resolved to a type

import XXX.XXX cannot be resolved to a type , import XXX.XXX cannot be resolved

错误原因:引用出现了二义性。也就是说在你的工程中存在两个用于存放.class文件的classes文件夹,而加载tomcat的时候,tomcat的路径是不确定的,也可能找到了根本没有存放这个类的classes文件夹

解决方法:网上查到的解决办法是在tomcat启动时,为tomcat添加引用路径,先把classes文件夹导入到JVM中。tomcat在调用类的时候,就不会找不到了。具体操作方法是,使用eclipse的tomcat插件,在eclipse的主界面菜单window下的preferences对话框中找到tomcat插件的那一项,选择JVMsetting,有一个classpath(before generated classpath)中,导入你的classes文件夹。就可解决此问题。但是我使用的MyEclipse,这里边用到的是自带的Tomcat,跟上边提到的配置方式不太一样。我是修改了工程的文件目录,在新建此工程的时候默认的WEB板块的名称是WebRoot,之后我为了条理清楚,新建了一个Folder用来存放我的JSP文件,此时就有两个classes文件夹,一个是我新建的Folder对应的,另一个是原有的WebRoot的,所以应该把WebRoot删去,避免混淆(看到一本书上讲JavaBean设定时也是这么说的,要删去原有的,避免混淆)。

      20NumberFormatException异常 

1. 对应String类型的对象使用println()方法时,如果对象为null,将打印null而不是引发NullPointerException,由此引用的问题是容易造成错觉,对于以后对字符串的操作容易引起问题。

2. 引发NullPointerException异常,主要原因是没有对对象的存在性进行验证,在jsp编程中经常出现:if (request.getParameter(“username”).equals(“xxx”))、 out.println(session.getAttribute(“record”))等。解决这个问题的方法是在使用前进行判空比较:if (request.getParameter(“username”)!=null) {if if (request.getParameter(“username”).equals(“xxx”))…}。

3. 引发NumberFormatException异常:主要原因是将用户提交的内容转换为整数或者浮点数时用户输入了其它非法字符。处理的主要方式是在需要进行转换的地方使用try/catch块捕获此异常然后提示用户输入合法数据。

4. 引发StringIndexOutOfBoundsException异常:主要原因是使用String的substring()、charAt()等方 法,而字符串的长度不够,就会引发此异常;在字符串为null时也会引发NullPointerException。解决的方法是判空,判断长度或者转换 为字节数组。考虑到这些操作很多,可以将之封装到javabean中。

5. 引发NoClassDefFoundError错误,主要原因是类路径或者类文件放置错误,类文件的放置要符合服务器的要求。

6. 引发java.lang.Error错误,主要原因是对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行;对系 统所访问的外部资源关闭次数太多,外部系统无法正常处理;所系统访问的外部资源出现异常情况。解决的方法是:访问外部资源前,首先检查该资源(如数据库) 是否可正常连接或操作;访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作;尽量在同一操作中共享外部资源,以减少该操作对资源的 消费,提高程序的执行效率。

      21.eclipse 遇关键字enum编译问题解决

今天公司系统升级 JDK1.4 到 JDK1.5, 结果工程在eclipse中编译不能通过:

Enumeration enum = …………

但是eclipse报错:

Multiple markers at this line

- Enumeration cannot be resolved

- Syntax error on token "enum", delete this token

原因是在 JDK1.5 中,enum 被定义为关键字,这样就和在 JDK1.4自编写的代码冲突。

最简单的解决办法是,把变量改名为(enum1,enum2等),以回避关键字。

但是对于workflow复杂的公司来说,每修改代码都需要提交很复杂的JOB,还有另外一种解决办法。

在eclipse中,右键点击工程,Properities->Java Compiler

选择 Enable project specific settings

JDK Compliance

Complier compliance level: 1.4

选择 Use default compliance settings

OK

这样设置能使工程在标签识别的时候识别按照 JDK1.4 来识别,又不影响 JDK升级,而且不必修改代码,原来的代码可以在 JDK1.5 正常运行,我就是这么做的,如果有需要,你们也可以试试 :)

 22.Cannot make a static reference to the non-static method

在static函式中只能呼叫static成員(資料成員或函式成員)?例如在main()函式中

eg.

public static void main(String[] args) {

 String a = "abc";

 System.out.println(printClassName(a));

}

 public static String printClassName(String obj){ //if there is no "static",it will appears the wrong of "Cannot make a static reference to the non-static method printClassName(String)"

 return "The class of " + obj +

 " is " + obj.getClass().getName();

 }

#Java

Cannot make a static reference to the non-static method 解决

  在一个类中写了一个public void getDate()方法和一个main方法,在main方法中直接调用getDate()方法,于是就出现了这个错误提示。后来实例化类,再用实例化的类调用getDate()方法就没问题了。

     在静态方法中,不能直接访问非静态成员(包括方法和变量)。 因为,非静态的变量是依赖于对象存在的,对象必须实例化之后,它的变量才会在内存中存在。例如一个类 Student 表示学生,它有一个变量 String address。如果这个类没有被实例化,则它的 address 变量也就不存在。而非静态方法需要访问非静态变量,所以对非静态方法的访问也是针对某一个具体的对象的方法进行的。对它的访问一般通过 objectName.methodName(args......) 的方式进行。 而静态成员不依赖于对象存在,即使是类所属的对象不存在,也可以被访问,它对整个进程而言是全局的。因此,在静态方法内部是不可以直接访问非静态成员的。

23.struts2下的“Exception starting filter struts2”错误的问题

最近开始学习struts2,配置好了运行的时候总是有如下的错误:

严重: Exception starting filter struts2

java.lang.NoClassDefFoundError: Lorg/codehaus/plexus/PlexusContainer;

 at java.lang.Class.getDeclaredFields0(Native Method)

 at java.lang.Class.privateGetDeclaredFields(Class.java:2291)

 at java.lang.Class.getDeclaredFields(Class.java:1743)

 at com.opensymphony.xwork2.inject.ContainerImpl.addInjectors(ContainerImpl.java:102)

 at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:84)

 at com.opensymphony.xwork2.inject.ContainerImpl$1.create(ContainerImpl.java:82)

 at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:155)

 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

 at java.util.concurrent.FutureTask.run(FutureTask.java:138)

 at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:81)

 at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:121)

 at com.opensymphony.xwork2.inject.ContainerImpl$ConstructorInjector.<init>(ContainerImpl.java:329)

 at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:299)

 at com.opensymphony.xwork2.inject.ContainerImpl$5.create(ContainerImpl.java:298)

 at com.opensymphony.xwork2.inject.util.ReferenceCache$CallableCreate.call(ReferenceCache.java:155)

 at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

 at java.util.concurrent.FutureTask.run(FutureTask.java:138)

 at com.opensymphony.xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java:81)

 at com.opensymphony.xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:121)

 at com.opensymphony.xwork2.inject.ContainerImpl.getConstructor(ContainerImpl.java:562)

 at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:460)

 at com.opensymphony.xwork2.inject.ContainerImpl$7.call(ContainerImpl.java:501)

 at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:549)

 at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java:499)

 at com.opensymphony.xwork2.config.impl.LocatableFactory.create(LocatableFactory.java:32)

 at com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:134)

 at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:49)

 at com.opensymphony.xwork2.inject.ContainerImpl$ParameterInjector.inject(ContainerImpl.java:431)

 at com.opensymphony.xwork2.inject.ContainerImpl.getParameters(ContainerImpl.java:446)

 at com.opensymphony.xwork2.inject.ContainerImpl.access$000(ContainerImpl.java:48)

 at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(ContainerImpl.java:288)

 at com.opensymphony.xwork2.inject.ContainerImpl$2.call(ContainerImpl.java:117)

 at com.opensymphony.xwork2.inject.ContainerImpl$2.call(ContainerImpl.java:115)

 at com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:542)

 at com.opensymphony.xwork2.inject.ContainerImpl.injectStatics(ContainerImpl.java:114)

 at com.opensymphony.xwork2.inject.ContainerBuilder.create(ContainerBuilder.java:494)

 at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:145)

 at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)

 at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)

 at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)

 at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)

 at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:221)

 at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:302)

 at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:78)

 at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3635)

 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4222)

 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)

 at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)

 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)

 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)

 at org.apache.catalina.core.StandardService.start(StandardService.java:448)

 at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)

 at org.apache.catalina.startup.Catalina.start(Catalina.java:552)

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

 at java.lang.reflect.Method.invoke(Method.java:597)

 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)

 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

2008-4-9 13:31:49 org.apache.catalina.core.StandardContext start

严重: Error filterStart

2008-4-9 13:31:49 org.apache.catalina.core.StandardContext start

严重: Context [/HelloWorld] startup failed due to previous errors

2008-4-9 13:31:50 org.apache.coyote.http11.Http11BaseProtocol start

主要就是web.xml中的过滤器的问题,web.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <display-name>

 HelloWorld</display-name>

 <filter>

 <filter-name>struts2</filter-name> 

 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

 </filter>

 <filter-mapping>

 <filter-name>struts2</filter-name>

 <url-pattern>/*</url-pattern>

 </filter-mapping>

 <welcome-file-list>

 <welcome-file>index.html</welcome-file>

 </welcome-file-list>

</web-app>

出了问题就要解决啊,反复的查找了很多的资料,都没有详细说明怎么解决这个问题的,我一度都想把我的struts换成一个低版本的。偶然的一次尝试,我发现正常的lib目录下的jar文件比我的少了很多,我为了图方便是把struts下所有的jar文件都拷进了我的工程里,是不是这里出问题了呢?经过反复的尝试,终于找到了解决方案,确实是这里出了问题。罪魁祸首就是struts2-plexus-plugin-2.0.11.jar,struts-sitegraph-plugin-2.0.11.jar和struts2-spring-plugin-2.0.11.jar这三个文件,把他们从项目里删除后,就一切OK了!

但具体为什么这三个文件造成这样的错误,现在还不清楚,以后再慢慢了解了。

我的开发环境是eclipse 3.3+struts2.0.11+tomcat5.5+jdk1.6

24.服务器端包含 java.lang.IllegalStateException: Exception occurred when flushing

org.apache.jasper.JasperException: java.lang.IllegalStateException: Exception occurred when flushing data

    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)

    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:410)

    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)  

出现上面问题用include request.getRequestDispatcher("/xxx.jsp").include(request, response);// 服务器端保护响应当前的一部分,而不是替换掉

request.getRequestDispatcher("/xxxx.jsp").forward(request, response); 服务器端跳转

25.iterator标签用begin属性报错:Attribute begin invalid for tag iterator according to TLD

 iterator 标签用bgin 属性报错Attribute begin invalid for tag iterator according to TLD 

原因:

struts2的iterator 标签在2.0版本没用begin属性,在2,1,8版本里有

解决方案:

1、更换高版本的struts2

2、不更换可以通过status属性的index方法来控制。

比如:

<s:iterator id="stat" value="#session.userTip" status="st">

     <s:if test="#st.index<5">

       <li><a href="<s:property value='#stat.url'/>">

您收到<s:property value="#stat.num"/> 份 <s:property value="#stat.tipInfo"/></a>

   </li>

    </s:if>

 </s:iterator>

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

文件未找到异常:FileNotFoundException

字符串转换为数字异常:NumberFormatException

操作数据库异常:SQLException

输入输出异常:IOException

方法未找到异常:NoSuchMethodException

java.lang.AbstractMethodError

抽象方法错误。当应用试图调用抽象方法时抛出。

java.lang.AssertionError

断言错。用来指示一个断言失败的情况。

java.lang.ClassCircularityError

类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。

java.lang.ClassFormatError

类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。

java.lang.Error

错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。

java.lang.ExceptionInInitializerError

初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。

java.lang.IllegalAccessError

违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。

java.lang.IncompatibleClassChangeError

不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。

java.lang.InstantiationError

实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.

java.lang.InternalError

内部错误。用于指示Java虚拟机发生了内部错误。

java.lang.LinkageError

链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。

java.lang.NoClassDefFoundError

未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。

java.lang.NoSuchFieldError

域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误。

java.lang.NoSuchMethodError

方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。

java.lang.OutOfMemoryError

内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。

java.lang.StackOverflowError

堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。

java.lang.ThreadDeath

线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。

java.lang.UnknownError

未知错误。用于指示Java虚拟机发生了未知严重错误的情况。

java.lang.UnsatisfiedLinkError

未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。

java.lang.UnsupportedClassVersionError

不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。

java.lang.VerifyError

验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误。

java.lang.VirtualMachineError

虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况。

java.lang.ArithmeticException

算术条件异常。譬如:整数除零等。

java.lang.ArrayIndexOutOfBoundsException

数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。

java.lang.ArrayStoreException

数组存储异常。当向数组中存放非数组声明类型对象时抛出。

java.lang.ClassCastException

类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。

java.lang.ClassNotFoundException

找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

java.lang.CloneNotSupportedException

不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。

java.lang.EnumConstantNotPresentException

枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象并不包含常量时,抛出该异常。

java.lang.Exception

根异常。用以描述应用程序希望捕获的情况。

java.lang.IllegalAccessException

违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。

java.lang.IllegalMonitorStateException

违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。

java.lang.IllegalStateException

违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常。

java.lang.IllegalThreadStateException

违法的线程状态异常。当县城尚未处于某个方法的合法调用状态,而调用了该方法时,抛出异常。

java.lang.IndexOutOfBoundsException

索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。

java.lang.InstantiationException

实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。

java.lang.InterruptedException

被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。

java.lang.NegativeArraySizeException

数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。

java.lang.NoSuchFieldException

属性不存在异常。当访问某个类的不存在的属性时抛出该异常。

java.lang.NoSuchMethodException

方法不存在异常。当访问某个类的不存在的方法时抛出该异常。

java.lang.NullPointerException

空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。

java.lang.NumberFormatException

数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。

java.lang.RuntimeException

运行时异常。是所有Java虚拟机正常操作期间可以被抛出的异常的父类。

java.lang.SecurityException

安全异常。由安全管理器抛出,用于指示违反安全情况的异常。

java.lang.StringIndexOutOfBoundsException

字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。

java.lang.TypeNotPresentException

类型不存在异常。当应用试图以某个类型名称的字符串表达方式访问该类型,但是根据给定的名称又找不到该类型是抛出该异常。该异常与ClassNotFoundException的区别在于该异常是unchecked(不被检查)异常,而ClassNotFoundException是checked(被检查)异常。

java.lang.UnsupportedOperationException

不支持的方法异常。指明请求的方法不被支持情况的异常。

异常

javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的action名字)  

可能原因

action没有再struts-config.xml 中定义,或没有找到匹配的action,例如在JSP文件中使用 <html:form action="Login.do".将表单提交给Login.do处理,如果出现上述异常,请查看struts-config.xml中的定义部分,有时可能是打错了字符或者是某些不符合规则,可以使用strutsconsole工具来检查。

-------------------------------------------------------------

异常

org.apache.jasper.JasperException: Cannot retrieve definition for form bean null

可能原因          

这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form bean。大部分的情况可能是因为在form-bean中设置的name属性和action中设置的name属性不匹配所致。换句话说,action和form都应该各自有一个name属性,并且要精确匹配,包括大小写。这个错误当没有name属性和action关联时也会发生,如果没有在action中指定name属性,那么就没有name属性和action相关联。当然当action制作某些控制时,譬如根据参数值跳转到相应的jsp页面,而不是处理表单数据,这是就不用name属性,这也是action的使用方法之一。

-------------------------------------------------------------

异常

No action instance for path /xxxx could be created

可能原因

特别提示:因为有很多中情况会导致这个错误的发生,所以推荐大家调高你的web服务器的日志/调试级别,这样可以从更多的信息中看到潜在的、在试图创建action类时发生的错误,这个action类你已经在struts-config.xml中设置了关联(即添加了<action>标签)。

在struts-config.xml中通过action标签的class属性指定的action类不能被找到有很多种原因,例如:定位编译后的.class文件失败。Failure to place compiled .class file for the action in the classpath (在web开发中,class的的位置在r WEB-INF/classes,所以你的action class必须要在这个目录下。例如你的action类位于WEB-INF/classes/action/Login.class,那么在struts-config.xml中设置action的属性type时就是action.Login).

拼写错误,这个也时有发生,并且不易找到,特别注意第一个字母的大小写和包的名称。

-------------------------------------------------------------

异常

javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN

可能原因:没有位form bean中的某个变量定义getter 方法

这个错误主要发生在表单提交的FormBean中,用struts标记<html:text property=”username”>时,在FormBean中必须有一个getUsername()方法。注意字母“U”。

-------------------------------------------------------------

异常

java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm

可能原因:这个错误主要发生在在classpath中找不到相应的Java .class文件。如果这个错误发生在web应用程序的运行时,主要是因为指定的class文件不在web server的classpath中(/WEB-INF/classes 和 /WEB-INF/lib)。在上面的错误中,原因是找不到ActionForm类。

-------------------------------------------------------------

异常

javax.servlet.jsp.JspException: Exception creating bean of class org.apache.struts.action.ActionForm: {1}

可能原因:Instantiating Struts-provided ActionForm class directly instead of instantiating a class derived off ActionForm. This mightoccur implicitly if you specify that a form-bean is this Struts ActionForm class rather than specifying a child of this classfor
the form-bean.Not associating an ActionForm-descended class with an action can also lead to this error.

-------------------------------------------------------------

异常

javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection

可能原因:不是标识Struts actionServlet的<servlet>标记就是映射.do扩展名的<sevlet-mapping>标记或者两者都没有在web.xml中声明。在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号/>。最好使用struts console工具检查一下。另外,load-on-startup必须在web.xml中声明,这要么是一个空标记,要么指定一个数值,这个数值用来表servlet运行的优先级,数值越大优先级越低。还有一个和使用load-on-startup有关的是使用Struts预编译JSP文件时也可能导致这个异常。

-------------------------------------------------------------

异常

java.lang.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223)

可能原因:在struts-config.xml中的forward元素缺少path属性。例如应该是如下形式:

<forward name="userhome" path="/user/userhome.jsp"/>

-------------------------------------------------------------

异常

javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope

Probable Causes

试图在Struts的form标记外使用form的子元素。这常常发生在你在</html:form>后面使用Struts的html标记。另外要注意可能你不经意使用的无主体的标记,如<html:form … />,这样web 服务器解析时就当作一个无主体的标记,随后使用的所有<html>标记都被认为是在这个标记之外的,如又使用了<html:text property=”id”>还有就是在使用taglib引入HTML标记库时,你使用的prefix的值不是html。

-------------------------------------------------------------

异常

javax.servlet.jsp.JspException: Missing message for key xx.xx.xx

Probable Causes

这个key的值对没有在资源文件ApplicationResources.properties中定义。如果你使用eclipse时经常碰到这样的情况,当项目重新编译时,eclipse会自动将classes目录下的资源文件删除。

资源文件ApplicationResources.properties 不在classpath中应将资源文件放到 WEB-INF/classes 目录下,当然要在struts-config.xml中定义)

-------------------------------------------------------------

异常

Cannot find message resources under key org.apache.struts.action.MESSAGE

可能原因

很显然,这个错误是发生在使用资源文件时,而Struts没有找到资源文件。

Implicitly trying to use message resources that are not available (such as using empty html:options tag instead of specifyingthe options in its body -- this assumes options are specified in ApplicationResources.properties file)

XML parser issues -- too many, too few, incorrect/incompatible versions

-------------------------------------------------------------

异常

Strange and seemingly random characters in HTML and on screen, but not in original JSP or servlet.

可能原因

混和使用Struts的html:form标记和标准的HTML标记不正确。

使用的编码样式在本页中不支持。

-------------------------------------------------------------

异常

"Document contained no data" in Netscape

No data rendered (completely empty) page in Microsoft Internet Explorer

可能原因:使用一个Action的派生类而没有实现perform()方法或execute()方法。在Struts1.0中实现的是perform()方法,在Struts1.1中实现的是execute()方法,但Struts1.1向后兼容perform()方法。但你使用Struts1.1创建一个Action的派生类,并且实现了execute()方法,而你在Struts1.0中运行的话,就会得到"Document contained nodata" error message in Netscape or a completely
empty (no HTML whatsoever) page rendered in Microsoft Internet Explorer.”的错误信息。

-------------------------------------------------------------

异常

ServletException: BeanUtils.populate

解决方案

在用Struts上传文件时,遇到了javax.servlet.ServletException: BeanUtils.populate异常。

我的ActionServlet并没有用到BeanUtils这些工具类。后来仔细检查代码发现是在jsp文件里的form忘了加enctype="multipart/form-data" 了。所以写程序遇到错误或异常应该从多方面考虑问题存在的可能性,想到系统提示信息以外的东西。

-------------------------------------------------------------

1. 定义Action后, 如果指定了name, 那么必须要定义一个与它同名的FormBean才能进行form映射.2. 如果定义Action后, 提交页面时出现 "No input attribute for mapping path..." 错误, 则需要在其input属性中定义转向的页面.3. 如果插入新的数据时出现 "Batch update row count wrong:..." 错误, 则说明XXX.hbm.xml中指定的key的类型为原始类型(int, long),因为这种类型会自动分配值,
而这个值往往会让系统认为已经存在该记录, 正确的方法是使用java.lang.Integer或java.lang.Long对象.4. 如果插入数据时出现 "argument type mismatch" 错误, 可能是你使用了Date等特殊对象, 因为struts不能自动从String型转换成Date型,所以, 你需要在Action中手动把String型转换成Date型.5. Hibernate中, Query的iterator()比list()方法快很多.6. 如果出现 "equal symbol expected"
错误, 说明你的strtus标签中包含另一个标签或者变量, 例如:

<html:select property="test" onchange="<%=test%>"/>

或者

<html:hidden property="test" value="<bean:write name="t" property="p"/>"/>

这样的情况...

----------------------------------------------------------------------------错误:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update原因与解决:      因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml工具中包含有catalog="***"(*表示数据库名称)这样的属性,将该属性删除就可以了

-------------------------------------------------------------

错误:org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)

原因与解决:

方法1 删除Set方的cascade

方法2 解决关联关系后,再删除

方法3 在many-to-one方增加cascade 但值不能是none

最后一招:

检查一下hashCode equals是否使用了id作为唯一标示的选项了;我用uuid.hex时是没有问题的;但是用了native,就不行了,怎么办?删除啊!

-------------------------------------------------------------问题:今天用Tomcat 5.5.12,发现原来很好用的系统不能用了,反复测试发现页面中不能包含 taglib,否则会出现以下提示:HTTP Status 500 -type Exception reportMessage description The server encountered an internal error () that prevented it from fulfilling
this request.exceptionorg.apache.jasper.JasperException: /index.jsp(1,1) Unable to read TLD "META-INF/tlds/struts-bean.tld" from JAR file"file:*****/WEB-INF/lib/struts.jar":原因:更新了工程用的lib文件夹下的jar,发布时也发布了servlet.jar和jsp-api.jar。解决:把jsp-api.jar删除就解决这个问题了。

-------------------------------------------------------------错误: java.lang.NullPointerException

原因: 发现 dao 实例、 manage 实例等需要注入的东西没有被注入(俗称空指针异常)解决:这个时候,你应该查看日志文件;默认是应用服务器的 log 文件,比如 Tomcat 就是 [Tomcat 安装目录 ]/logs ;你会发现提示你:可能是:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContextresource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed; nested exception isorg.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xmlorg.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xml……………………….Caused by: java.io.FileNotFoundException:
src\hibernate.cfg.xml可能是:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined inServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception isorg.hibernate.MappingException:
Resource: com/mcc/coupon/model/UserRole.hbm.xml not foundorg.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not found然后你就知道原因是因为配置文件的解析出了错误,这个通过 Web 页面是看不出来的。更多的是持久化影射文件出的错误;导致了没有被解析;当然你需要的功能就无法使用了。

-------------------------------------------------------------错误:StandardWrapperValve[action]: Servlet.service() for servlet action threw exception

javax.servlet.jsp.JspException: Cannot retrieve mapping for action /settlementTypeManage

或者:      type Status report      message Servlet action is not available      description The requested resource (Servlet action is not available) is not available.

原因: 同 上

-------------------------------------------------------------错误StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exceptionjava.lang.ClassNotFoundException: org.apache.struts.taglib.bean.CookieTei界面错误具体描述:

org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: org.apache.struts.taglib.bean.CookieTei    

原因与解决:   

<方案一>你的“html:”开头的标签没有放在一个<html:form>中      

<方案二>重新启动你的应用服务器,自动就没有这个问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: