sun.io.MalformedInputException

阅读更多

产品:WebSphere Application Server(以下简称WAS)
版本:5.1.0;5.1.1
平台:Windows,AIX,Linux

问题描述:
在WAS V5.1中运行的JSP文件中含有中文的时候系统的SystemOut.log日志中会报类似如下的错误:
[04-11-9 14:44:26:625 CST] 70e8b5bd WebGroup I SRVE0181I: [QE_Web.war] [/hgaqe] [Servlet.LOG]: JspReader: Exception parsing file : sun.io.MalformedInputException
at sun.io.ByteToCharEUC.convert(ByteToCharEUC.java(Compiled Code))
at sun.nio.cs.StreamDecoder$ConverterSD.convertInto(StreamDecoder.java:287)
at sun.nio.cs.StreamDecoder$ConverterSD.implRead(StreamDecoder.java:318)
[04-11-9 14:44:27:172 CST] 70e8b5bd WebGroup E SRVE0026E: [Servlet 错误]-[无法读文件:/lotQuery/queryResultDownload1.jsp sun.io.MalformedInputException]:org.apache.jasper.compiler.ParseException: 无法读文件:/lotQuery/queryResultDownload1.jsp sun.io.MalformedInputException
at org.apache.jasper.compiler.JspReader.pushFile2(JspReader.java:276)
at org.apache.jasper.compiler.JspReader.(JspReader.java:317)
at org.apache.jasper.compiler.Parser.(Parser.java:137)

注意:ByteToCharEUC这部分可能会由于所选定的字符集的不同而不同,比如ByteToCharGB18030。

解答:
这个问题产生的原因是IBM在JDK 1.4版本中为了追求对io通道的高效率改变了JDK 1.3中对io通道中异常处理的策略。IBM JDK 1.4中对于io通道的异常处理更加严格,因此系统中会报上面的错误。
解决这一问题的办法是不使用IBM JDK 1.4中默认的io通道,而使用nio通道。具体的做法如下:
1.打开管理控制台,找到并选择运行这个JSP的应用服务器
2.依次选择进程定义,java虚拟机,一般JVM自变量
3.添加-Dibm.stream.nio=true
4.确定,保存
5.重新启动该服务器   

你可能感兴趣的:(SUN,Java,AIX,JSP,JDK)