我无法启动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 catalina.bat
添加一些VM参数。特别是一个告诉它重新请求JVM使用utf-8运行的参数(顺便说一句,我使用的是Windows 8(容器:request.setCharacterEncoding(encoding);
,当我尝试将以下内容添加到文件中时,Tomcat不会启动,抱怨我提供的变量包含无效值。它是按原样编写的。我希望得到帮助来解决这个问题,以便我的开发环境模仿生产。如有任何协助,我们将不胜感激。
我使用的变量配置为:
set JAVA_OPTS=%JAVA_OPTS% ^
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager ^
-Djava.util.logging.config.file=%CATALINA_BASE%conflogging.properties ^
-Xms128m -Xmx256m ^
=-Dfile.encoding=UTF-8
简而言之,我想消除所有可能导致未来问题的错误,我相信告诉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
字段已经从Java7实现中删除了。幸运的是,myfaces团队已经解决了这个问题。只需更新您的jar文件(见上文(。
您的错误只是调试信息:https://github.com/grails/grails-core/blob/master/grails-web/src/main/groovy/org/codehaus/groovy/grails/web/util/StringCharArrayAccessor.java
关于代码,它试图检测String类是否已经被包装,并具有一些额外的方法。如果是,grails将使用优化版本,否则将使用回退。
所以你可以忽略这个错误。
HIH