【解決】Caused by: org.apache.tiles.definition.DefinitionsFactoryException: I/O
阿新 • • 發佈:2018-11-07
申明
本篇部落格為轉載!樓主只是在原來的基礎上進行了一點修改!原文地址,再次感謝原作者!
問題描述
使用springmvc tiles模板框架的時候出現如下錯誤
Caused by: org.apache.tiles.definition.DefinitionsFactoryException: I/O Error reading definitions. at org.apache.tiles.definition.digester.DigesterDefinitionsReader.read(DigesterDefinitionsReader.java:273 ) at org.apache.tiles.definition.UrlDefinitionsFactory.readDefinitions(UrlDefinitionsFactory.java:286) at org.apache.tiles.definition.UrlDefinitionsFactory.init(UrlDefinitionsFactory.java:130) at org.apache.tiles.impl.BasicTilesContainer.initializeDefinitionsFactory(BasicTilesContainer.java :406) at org.apache.tiles.impl.BasicTilesContainer.init(BasicTilesContainer.java:130) at org.apache.tiles.factory.TilesContainerFactory.initializeContainer(TilesContainerFactory.java:232) at org.apache.tiles.factory.TilesContainerFactory.createTilesContainer(TilesContainerFactory.java:198) at org.apache .tiles.factory.TilesContainerFactory.createContainer(TilesContainerFactory.java:163) at org.apache.tiles.web.startup.TilesListener.createContainer(TilesListener.java:90) at org.apache.struts2.tiles.StrutsTilesListener.createContainer(StrutsTilesListener.java:68) at org.apache.tiles.web.startup.TilesListener.contextInitialized(TilesListener.java:57) ... 15 more Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read1(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at org.apache.commons.digester.Digester.createInputSourceFromURL(Digester.java:2072) at org.apache.commons.digester.Digester.resolveEntity(Digester.java:1725) at com.sun.org.apache.xerces.internal.util.EntityResolverWrapper.resolveEntity(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.resolveEntityAsPerStax(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1887) at org.apache.tiles.definition.digester.DigesterDefinitionsReader.read(DigesterDefinitionsReader.java:267)
解決辦法
1、替換tilesContext.xml檔案頭(配置tiles的檔案)
原來:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
把上面的替換成下面的,原來使用的是tiles 2.1 dtd檔案修改成3.0問題解決
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
2、把.dtd檔案下載下來 放到tilesContext.xml同級目錄 不需要網上驗證語法規則
下載地址 http://tiles.apache.org/dtds/tiles-config_3_0.dtd,tilesContext.xml標頭檔案內容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"tiles-config_3_0.dtd"> //修改路徑
注意:樓主第一種辦法沒解決!因為最終原因是不能訪問http://tiles.apache.org/dtds/tiles-config_3_0.dtd,從網盤下載dtd檔案並修改路徑才解決!但是我是放到src同級目錄下!若是別的路徑,則改為src/../..dtd
如果apache訪問不了 請到原作者的網盤中下載,http://pan.baidu.com/s/1mgBNSPM