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


目前打算逐步把以前记录在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当中。

声明:墨墨的经验分享|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 2016年学习j2ee期间的异常笔记


他们的规则是他们的规则,我们只按自己的规则行动