2016年学习j2ee期间的异常笔记

发布于 2020-03-24  317 次阅读


目前打算逐步把以前记录在OneNote上的笔记内容迁移到博客来。
这篇就是2016年在学习期间的笔记,记录了遇到的几个异常以及分析解决。

1. Java.lang.IllegalAccessException: Class org.apache.catalina.core.DefaultInstanceManager can not access a member of class com.m520it.fristServlat.HelloKittyServlet with modifiers ""

检查代码
当应用程序试图反射性地创建一个实例(而不是数组)、设置或获取一个字段,或者调用一个方法,但当前正在执行的方法无法访问指定类、字段、方法或构造方法的定义时,抛出 IllegalAccessException。

检查代码,发现构造器的修饰符为缺省,即为包访问权限。

解决方案
将构造器的修饰符设置为public

2. java.io.CharConversionException: Not an ISO 8859-1 character: 下

检查代码
用于字符转换异常的基类。
检查代码,发现在javax.servlet.ServletOutputStream类的println(String s)方法中调用了自身的print(String s)方法:

而这个print(String s)方法有这样一段代码:

这段代码中对每一个字符都进行了检查,只要有不符合ISO-8859-1的字符就会抛出CharConversionException异常。

解决方案
使用ServletOutputStream流进行输出时,改用st.write("59下山了".getBytes());输出中文字符串

3. java.lang.ArithmeticException: / by zero

检查代码
当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
检查代码,发现进行除法运算时,忽视了除数为零时的错误。

解决方案
在进行除法运算之前,对除数进行过滤。

4. java.lang.IllegalStateException: Initialization parameters can not be set after the context has been initialized

Initialization parameters can not be set after the context has been initialized
不能设置初始化参数在初始化之后。

文档解释
在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。

检查代码
在context初始化之后,对初始化参数进行了设置,这是不允许的。

解决方案
把setInitParameter()方法去掉。如果要设置初始化参数,应放在注解或者web.xml当中。


做一只特立独行的猪