解决不联网无法启动struts2问题

来源:互联网 发布:python alphago 编辑:程序博客网 时间:2024/05/22 00:05

      前几天面试的时候,面试官要求看我的作品,我打开我做的一个项目,可总是报404错误,我就纳闷了,平时运行的好好的怎么一到关键时刻就掉链子了,无奈,只好把以前的旧版本草草的让面试官瞅了一下...回家后,准备改改这个bug的时候,打开却又能正常运行,我去...这不是老天爷逗我玩吧...怎么会这样子...

       抱怨自己倒霉之余...我又仔细地思考了一下...难道这系统还会识别环境...一到陌生环境就怕生了吗?唯一的区别就是在家是有网络的,而在面试的时候是没有网络的,带着这个疑惑,我把网线拔了...重新启动...果然不出我所料...又报那个错误了...哈哈...终于找到原因了...可是我的系统在本地运行...为什么要联网了才能运行呢?

   于是把问题复制..谷歌了一下... 

严重: Exception starting filter struts2
Unable to load configuration. - Class: java.net.PlainSocketImpl     

将struts.xml中的声明部分
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts 

Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">

替换为 struts2-core-2.xxx.jar中struts-default.xml的文

件声明
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts 

Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

也就是说要保持一致!!O(∩_∩)O~

于是我打开struts2-core-2.xxx.jar中struts-default.xml,把里面的声明部分替换掉我的struts.xml文件中的声明部分

可是问题依然存在....

仔细看看所报的错误,终于发现了端倪...

严重: Exception starting filter struts2
Unable to load configuration. - Class: java.net.PlainSocketImpl
File: PlainSocketImpl.java
Method: connect
Line: 177 - java/net/PlainSocketImpl.java:177:-1
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:431)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:278)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:259)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:383)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:104)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4650)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5306)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1673)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
Caused by: Unable to load configuration. - Class: java.net.PlainSocketImpl
File: PlainSocketImpl.java
Method: connect
Line: 177 - java/net/PlainSocketImpl.java:177:-1
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
    ... 20 more
Caused by: Unable to load jar:file:/C:/Program%20Files%20(x86)/Apache%20Software%20Foundation/Tomcat%207.0/webapps/SecondMarketSystem2/WEB-INF/lib/struts2-config-browser-plugin-2.3.15.1.jar!/struts-plugin.xml - Class: java.net.PlainSocketImpl
File: PlainSocketImpl.java
Method: connect
Line: 177 - java/net/PlainSocketImpl.java:177:-1
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:898)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:143)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:110)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:168)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
    ... 22 more
Caused by: struts.apache.org - Class: java.net.PlainSocketImpl
File: PlainSocketImpl.java
Method: connect
Line: 177 - java/net/PlainSocketImpl.java:177:-1
    at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:115)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:893)
    ... 26 more
Caused by: java.net.UnknownHostException: struts.apache.org
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:525)
    at java.net.Socket.connect(Socket.java:475)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
    at sun.net.www.http.HttpClient.New(HttpClient.java:306)
    at sun.net.www.http.HttpClient.New(HttpClient.java:323)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1282)
    at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:283)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1193)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
    at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:113)
    ... 27 more
2013-9-21 21:51:48 org.apache.catalina.core.StandardContext startInternal
严重: Error filterStart
2013-9-21 21:51:48 org.apache.catalina.core.StandardContext startInternal
严重: Context [/SecondMarketSystem2] startup failed due to previous errors
2013-9-21 21:51:48 org.apache.catalina.core.ApplicationContext log

上文的红色部分引起了我的注意...

其中的Config Browser插件是我前段时间刚刚在书上看到的,于是就拿过来做测试的

主要的作用是开发调试的,使用该插件可以清楚的看出Struts2应用下部署了哪些Action,以及每个Action详细的映射信息

于是我想以前都没出现过这样的问题...可能是我加了这个插件后锁引起的...

所以我把这个插件移除后,重新启动..

果然问题没有了....

可是为什么会因为这个插件二出现这样的问题呢?

于是我打开该插件中的struts-plugin.xml文件发现他的声明部分为

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

而我的struts.xml文件中的声明是:

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

与struts2-core-2.1.8.1.jar中的struts-default.xml的声明部分是相同的

打开struts2-core-2.1.8.1.jar文件如下图:


我们可以看到里面只有2.0、2.1.7和2.1的dtd文件,并没有2.3的dtd文件,因为找不到2.3的dtd文件所以在加载struts的时候系统会通过网络去查找2.3的dtd文件,在没有网络的情况下,因为找不到该文件,所以会报错...

至此...终于找到问题的根源了...

只要struts2-core-2.xxx.jar中没有对应的dtd文件,struts就会自动通过网络去查找所需的dtd文件

所以相应的解决方案就有了,要么把struts2-core-2.xxx.jar文件换成高版本的有2.3dtd文件的

要么把Config Browser插件移除,或者把Config Browser插件换成低版本的,声明部分的dtd文件在struts2-core-2.xxx.jar中已经存在的











原创粉丝点击