【发布时间】:2017-02-14 05:18:07
【问题描述】:
我正在尝试通过更新 apache-tomcat-8.0.39\conf\catalina.properties 在 Tomcat 8.0.39 上使用选项 STRICT_SERVLET_COMPLIANCE=true 部署应用程序,但是一旦我这样做,我的应用程序部署就会失败。 即我开始收到错误: 严重 [localhost-startStop-1] org.apache.tomcat.util.digester.Digester.error 应用程序 web.xml 文件中所有标签的解析错误。
其中一个堆栈跟踪如下:
09-Feb-2017 15:06:32.189 SEVERE [localhost-startStop-1] org.apache.tomcat.util.digester.Digester.error 第 5 行第 66 列解析错误:文档根元素“web-app” , 必须匹配 DOCTYPE 根“xml”。 org.xml.sax.SAXParseException; systemId:file:/C:/Servers/Tomcat%208/apache-tomcat-8.0.39/webapps/file-service/WEB-INF/web.xml;行号:5;列号:66;文档根元素“web-app”,必须匹配 DOCTYPE 根“xml”。 在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(未知来源) 在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(未知来源) 在 com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(未知来源) 在 com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(未知来源) 在 com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知来源) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知来源) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知来源) 在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(未知来源) 在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(未知来源) 在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(未知来源) 在 org.apache.tomcat.util.digester.Digester.parse(Digester.java:1448) 在 org.apache.tomcat.util.descriptor.web.WebXmlParser.parseWebXml(WebXmlParser.java:119) 在 org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1119) 在 org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:783) 在 org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:307) 在 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:95) 在 org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5213) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 在 java.util.concurrent.FutureTask.run(未知来源) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(Unknown Source)
为了解决这个问题,我尝试了以下选项:
1) 在 catalina.properties 中添加以下内容:
org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
2) 更新代理 WAR web.xml 文件 用 web-app_2_5.xsd 更新了 web-app_3_0.xsd 将 version="3.0" 更新为 version="2.5"
我还尝试将“web-app”标签条目从 apache-tomcat-8.0.39\conf\web.xml 复制到我的应用程序 web.xml,但没有用。
3) 尝试将以下值设置为各自的默认值 [as setting
org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true changes these defaults]
org.apache.catalina.core.ApplicationContext.GET_RESOURCE_REQUIRE_SLASH
org.apache.catalina.core.ApplicationDispatcher.WRAP_SAME_OBJECT
org.apache.catalina.core.StandardHostValve.ACCESS_SESSION
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK
org.apache.catalina.session.StandardSession.LAST_ACCESS_AT_START
org.apache.tomcat.util.http.ServerCookie.STRICT_NAMING
The **URIEncoding** attribute of any HTTP connector or AJP connector element.
The **resourceOnlyServlets** attribute of any Context element.
The **tldValidation** attribute of any Context element.
The **useRelativeRedirects** attribute of any Context element.
The **xmlNamespaceAware** attribute of any Context element.
The **xmlValidation** attribute of any Context element.
但似乎没有任何工作正常。我也无法导航到 tomcat 管理器或部署的任何其他应用程序。
另一方面,当我在 catalina.properties 中编写 STRICT_SERVLET_COMPLIANCE=false 时,一切正常
这里有什么我遗漏的吗?请帮我解决这个问题。
问候, 布佩什
【问题讨论】:
标签: java apache tomcat tomcat8