MVC常见问题

优质
小牛编辑
133浏览
2023-12-01

部署到生产环境时(tomcat版本一般较低), 出现类似这样的报错,然后tomcat无法启动:

java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
at org.apache.tomcat.util.bcel.classfile.Utility.swallowMethodParameters(Utility.java:796)
at org.apache.tomcat.util.bcel.classfile.Attribute.readAttribute(Attribute.java:171)
at org.apache.tomcat.util.bcel.classfile.FieldOrMethod.<init>(FieldOrMethod.java:57)
at org.apache.tomcat.util.bcel.classfile.Method.<init>(Method.java:71)
at org.apache.tomcat.util.bcel.classfile.ClassParser.readMethods(ClassParser.java:267)
at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:127)

原因:

  • tomcat 7.0.58之前的版本,处理由JDK8带-parameters编译的类文件有bug
  • nutz从1.r.58开始,使用JDK8带-parameters编译,从而实现eclipse无源码也能提示参数名称

解决版本:

  • 首选: 把tomcat升级到7.x最新版
  • 备选: 下载nutz源码,重新编译一份不带-parameters的jar,不推荐使用

出现nutz日志之前,停顿几十秒到几分钟不等:

该情况只出现在老版本的Linux系统,卡顿结束后,第一条日志类似

INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [301,654] milliseconds.

原因: 由于linux下/dev/random极其低效,导致SecureRandom初始化非常慢

解决方案: 添加启动参数

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/urandom"

IE下ajax当下载

原因: 新版的@Ok("json")的Content-Type设置为"application/json", 在IE下会有毛病.

解决版本: 在MainModule添加@SetupBy(MainSetup.class), 然后MainSetup类实现Setup接口,在init方法内内添加下列代码

UTF8JsonView.CT = "text/plain";