天天看點

關于HTTP Status 404 - Servlet action is not available的問題

      自己在虛拟機裡開發一個小系統,做練手用,平時都運作好好的,最近一兩個星期都沒動了,今天興緻一來,想寫點東西。啟動tomcat,能通路到登陸頁面,但是輸入正确的使用者名和密碼,點選登陸之後,浏覽器上報出異常:HTTP Status 404 - Servlet action is not available 。

而tomcat日志則是這樣的異常資訊:

- Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true

- Initializing, config='org.apache.struts.action.ActionResources', returnNull=true

- Parsing error processing resource path

java.net.UnknownHostException: struts.apache.org

 at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)

 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)

 at java.net.Socket.connect(Socket.java:579)

 at java.net.Socket.connect(Socket.java:528)

 at sun.net.NetworkClient.doConnect(NetworkClient.java:180)

 at sun.net.www.http.HttpClient.openServer(HttpClient.java:388)

 at sun.net.www.http.HttpClient.openServer(HttpClient.java:483)

 at sun.net.www.http.HttpClient.<init>(HttpClient.java:213)

 at sun.net.www.http.HttpClient.New(HttpClient.java:300)

 at sun.net.www.http.HttpClient.New(HttpClient.java:316)

 at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:992)

 at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:928)

 at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:846)

 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1296)

 at java.net.URL.openStream(URL.java:1035)

 at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)

 at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)

 at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)

 at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)

 at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)

 at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)

 at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)

 at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)

 at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)

 at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)

 at org.apache.commons.digester.Digester.parse(Digester.java:1548)

 at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1006)

 at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)

 at org.apache.struts.action.ActionServlet.init(ActionServlet.java:470)

 at javax.servlet.GenericServlet.init(GenericServlet.java:212)

 at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)

 at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)

 at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4149)

 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4458)

 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)

 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)

 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)

 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:987)

 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:909)

 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:495)

 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206)

 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314)

 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)

 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)

 at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)

 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)

 at org.apache.catalina.core.StandardService.start(StandardService.java:516)

 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)

 at org.apache.catalina.startup.Catalina.start(Catalina.java:583)

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

 at java.lang.reflect.Method.invoke(Method.java:601)

 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)

 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

……

      經過調試,問題定位在struts-config.xml配置檔案裡的dtd校驗:<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">這裡有問題。

      開發所在的虛拟機了确實是不能聯網,懷疑是不是不能下載下傳dtd檔案的原因,于是就手動下載下傳後,放到struts-config.xml同一目錄下,重新開機tomcat後,再登陸,問題依然,無計可施,索性把:<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">這一行給删了,重新開機登陸,這次卻意外的成功了。

      這到底是什麼原因呢,引入的包絕對沒動過,代碼也不會有問題,因為之前一直都能運作,删除了那句校驗後也能正常運作,這句校驗語句到底是怎麼回事?沒有頭緒。

繼續閱讀