1. 程式人生 > >【解決】Caused by: org.apache.tiles.definition.DefinitionsFactoryException: I/O

【解決】Caused by: org.apache.tiles.definition.DefinitionsFactoryException: I/O

申明

本篇部落格為轉載!樓主只是在原來的基礎上進行了一點修改!原文地址,再次感謝原作者!

問題描述

使用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