在应用程序中添加 UTF8 支持并设置所需的 JVM 选项后,Tomcat(开发)无法启动

标签 tomcat configuration jvm myfaces

我无法启动 Tomcat 7.0.27。这不是 ServerFault 问题,因为这是我的开发服务器。我正在使用 IntelliJ IDEA,并且在向我的应用程序添加过滤器之前我的应用程序没有运行任何错误。这个过滤器不是问题的原因,因为我在我的生产服务器上成功使用了它,IDEA 在其中编译、打包和运行它,没有出现阻碍我开发的问题。 那我的问题是什么?

我注意到 Tomcat 中出现了一个小错误。它不会登录到日志文件,而是读取:

Unable to use direct char[] access of java.lang.String
java.lang.NoSuchFieldException: count
    at java.lang.Class.getDeclaredField(Class.java:1899)
    at org.apache.myfaces.shared.util.StringCharArrayAccessor.<clinit>(StringCharArrayAccessor.java:63)
    at org.apache.myfaces.shared.util.StreamCharBuffer.readAsString(StreamCharBuffer.java:605)
    at org.apache.myfaces.shared.util.StreamCharBuffer.toString(StreamCharBuffer.java:631)
    at org.apache.myfaces.shared.renderkit.html.HtmlResponseWriterImpl.writeScriptContent(HtmlResponseWriterImpl.java:484)
    at org.apache.myfaces.shared.renderkit.html.HtmlResponseWriterImpl.endElement(HtmlResponseWriterImpl.java:416)
    at org.apache.myfaces.view.facelets.compiler.EndElementInstruction.write(EndElementInstruction.java:38)
    at org.apache.myfaces.view.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:46)
    at org.apache.myfaces.view.facelets.compiler.UILeaf.encodeAll(UILeaf.java:505)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:764)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:764)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1900)
    at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:285)
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:115)
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:241)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:199)
    at org.apache.myfaces.webapp.MyFacesServlet.service(MyFacesServlet.java:112)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.buhaugane.web.filters.CharsFilter.doFilter(CharsFilter.java:38)
    at ...

通过网上查找,我怀疑我需要向 tomcat 添加一些 VM 参数 catalina.bat 具体来说,就是告诉它请求 JVM 以 utf-8 运行(我使用的是 Windows 8)顺便说一句)我可以将我使用的过滤器作为造成这种烦恼的唯一原因,因为删除它可以解决所有问题过滤器所做的唯一事情就是使用容器初始化时加载的 UTF-8 值修改 HTTP 请求:request.setCharacterEncoding(encoding); 当我尝试将以下内容添加到文件时,Tomcat 无法启动,提示我提供的变量包含无效值。它是按原样写的。我需要帮助来解决此问题,以便我的开发环境能够模拟生产。如有任何帮助,我们将不胜感激。

我使用的变量已配置:

set JAVA_OPTS=%JAVA_OPTS% ^
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager ^
-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties ^
-Xms128m -Xmx256m ^
=-Dfile.encoding=UTF-8

简而言之,我想消除所有可能导致 future 问题的错误,并且我相信告诉 Tomcat 使用 UTF-8 JVM 会对我有所帮助。我发布的值是否存在明显错误?

最佳答案

问题出在您的 myfaces 版本上。我遇到了同样的问题,可以通过升级到最新的 myfaces 版本来解决它。特别是我更新了以下两个 jar 文件:

  • myfaces-api.jar(到版本2.1.10,我之前用的是2.1.6)
  • myfaces-impl.jar(到版本2.1.10,我之前用的是2.1.6)

此处发生错误:org.apache.myfaces.shared.util.StringCharArrayAccessor.<clinit>(StringCharArrayAccessor.java:63)

这在 Java 6 中运行良好,但在 Java 7 中则不然。我猜 count字段已从 Java 7 实现中删除。幸运的是 myfaces 团队已经解决了这个问题。只需更新您的 jar 文件(见上文)。

关于在应用程序中添加 UTF8 支持并设置所需的 JVM 选项后,Tomcat(开发)无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14198938/

相关文章:

tomcat - 在 Tomcat 中为 localhost 添加别名

java - 尝试部署旧的 Liferay Portal 版本

Codeigniter nginx 404 错误

java - 抽象类和接口(interface)在 JVM 中的存储方面有什么区别

eclipse - org.apache.tomcat.util.bcel.classfile.ClassFormatException : Invalid byte tag in constant pool: 15

python - PyCharm自动更改脚本

java - 从 unwrapped() 获得的 java ArrayList 转换为 Scala 列表

java - 在多个计算节点上运行相同的Java程序

java - 从 6.3 升级时的 Hybris 6.7 服务器启动问题

Tomcat 不提示 Web 应用程序证书 (OpenAM)