我试图通过更新apache 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-2017年2月15日:06:32.189严重本地主机-startStop-1 org.apache.tomcat.util.digester.Digester.error分析错误在第5列第66列:文档根元素“web”,必须匹配DOCTYPE根"xml“。file:/C:/Servers/Tomcat%208/apache-tomcat-8.0.39/webapps/file-service/WEB-INF/web.xml;org.xml.sax.SAXParseException;systemId: systemId lineNumber: 5;columnNumber: 66;Document root元素“web”,必须匹配DOCTYPE根"xml“。(在com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown来源)在com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown源头)在com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown(来源)在com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(Unknown来源)在com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(Unknown来源)在com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown来源)在com.sun.org.apache。( xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown来源)在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown源头)在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown源头)在com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown源)在com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown源)在com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown源)在com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown源)在com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown源)( com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown来源)在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) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:95) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5213) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase$StartChild( org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) ) .call(ContainerBase.java:1408)在java.util.concurrent.FutureTask.run(未知源)在java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown源(ContainerBase.java:1408)在java.lang.Thread.run(未知源)
为了解决这个问题,我尝试了以下选项:
1)在catalina.properties中添加了以下内容:
org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false2)更新代理web.xml文件更新web-app_3_0.xsd与web.xml_2_5.2.5更新的version="3.0“和version="2.5”
我还尝试将“web”标记条目从apache-tomcat-8.0.39\conf\web.xml复制到我的应用程序web.xml中,但是没有用。
3)尝试将下列值设置为各自的默认值[作为设置
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管理器或部署的任何其他应用程序。
另一方面,当我用STRICT_SERVLET_COMPLIANCE=false编写catalina.properties时,每件事情都能正常工作。
这里有我遗漏的东西吗?请帮我解决这个问题。
你好,Bhupesh
发布于 2017-07-06 19:46:07
我也遇到了这个问题。我们工作的环境要求将STRICT_SERVLET_COMPLIANCE设置为true,但web.xml的验证并不是需求背后的驱动力。要解决这个问题,请尝试在conf/context.xml的标记中将xmlValidation设置为false:
<Context xmlValidation="false"> ... </Context>发布于 2022-09-14 22:43:03
下面将讨论这个问题。
catalina.properties
org.apache.catalina.STRICT_SERVLET_COMPLIANCE=false
https://stackoverflow.com/questions/42218401
复制相似问题