2017-08-09 81 views
-1

爲什麼我得到這些沒有發現瀏覽器的控制檯錯誤試圖從JSP/HTML文件?:
未找到Struts - Action to Action方法?

http://localhost:8089/topFrame.do?method=viewAction 404() 
http://localhost:8089/topFrame.do?method=viewAction&polnum= 404() 

我叫一個Struts 1的DispatchAction的方法時將舊的Struts webapp從Weblogic移動到Tomcat。



是什麼在Tomcat的日誌

09-Aug-2017 15:58:09.497 SEVERE [http-nio-8089-exec-2] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [action] in web application [/mywebapp] threw load() exception 
javax.servlet.UnavailableException: Parsing error processing resource path 
    at org.apache.struts.action.ActionServlet.handleConfigException(ActionServlet.java:1035) 
    at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1012) 
    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:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1194) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1110) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1000) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4902) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5212) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:952) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473) 
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1617) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) 
    at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1483) 
    at org.apache.catalina.manager.HTMLManagerServlet.upload(HTMLManagerServlet.java:285) 
    at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:206) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:136) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:632) 
    at org.apache.catalina.valves.RequestFilterValve.process(RequestFilterValve.java:319) 
    at org.apache.catalina.valves.RemoteAddrValve.invoke(RemoteAddrValve.java:88) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 



什麼的index.jsp的

<%@taglib uri="WEB-INF/struts-bean.tld" prefix="bean" %> 
<%@taglib uri="WEB-INF/struts-html.tld" prefix="html" %> 
<%@page contentType="text/html"%> 
<%@page pageEncoding="UTF-8"%> 

<html> 
    <head> 
     <script> 
     var polparam; 
     function initWindow() { 
      top.moveTo(150,0); 
      top.resizeTo(1000,1000); 

      polparam = gup('POLNUM'); 
      if (polparam != null) 
      { 
       top.topFrame.location="/topFrame.do?method=viewAction&polnum="+polparam; 
      } 
     } 

     function gup(name) { 
      window.alert("hello2"); 
      name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
      var regexS = "[\\?&]"+name+"=([^&#]*)"; 
      var regex = new RegExp(regexS); 
      var results = regex.exec(window.location.href); 
      if(results == null) return ""; 
      else return results[1]; 
     } 
     </script> 
    </head> 

    <frameset rows="242,*" frameborder="NO" border="0" framespacing="0" id="index" onLoad="initWindow()">  
      <noframes> 
       <body bgcolor="#d341f4" text="#41f4bb"> 
        Your Broswer doesn't handle frames 2. 
       </body> 
      </noframes> 

      <frame name="topFrame" scrolling="NO" noresize src="/topFrame.do?method=viewAction" /> 
      <frame name="mainFrame" src="blank.html" /> 
    </frameset> 
</html> 



是什麼在web.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0"> 


    <servlet> 
     <servlet-name>action</servlet-name> 
     <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
     <init-param> 
      <param-name>config</param-name> 
      <param-value>WEB-INF/struts-config.xml</param-value> 
     </init-param> 
     <init-param> 
      <param-name>debug</param-name> 
      <param-value>2</param-value> 
     </init-param> 
     <init-param> 
      <param-name>detail</param-name> 
      <param-value>2</param-value> 
     </init-param> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>action</servlet-name> 
     <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 

    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <jsp-config> 
     <taglib> 
      <taglib-uri>WEB-INF/struts-bean.tld</taglib-uri> 
      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> 
     </taglib> 
     <taglib> 
      <taglib-uri>WEB-INF/struts-html.tld</taglib-uri> 
      <taglib-location>/WEB-INF/struts-html.tld</taglib-location> 
     </taglib> 
     <taglib> 
      <taglib-uri>WEB-INF/struts-logic.tld</taglib-uri> 
      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> 
     </taglib> 
     <taglib> 
      <taglib-uri>WEB-INF/struts-nested.tld</taglib-uri> 
      <taglib-location>/WEB-INF/struts-nested.tld</taglib-location> 
     </taglib> 
     <taglib> 
      <taglib-uri>WEB-INF/struts-tiles.tld</taglib-uri> 
      <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location> 
     </taglib> 
     <taglib> 
      <taglib-uri>WEB-INF/struts-template.tld</taglib-uri> 
      <taglib-location>/WEB-INF/struts-template.tld</taglib-location> 
     </taglib> 
     <taglib> 
      <taglib-uri>WEB-INF/taglibs-datetime.tld</taglib-uri> 
      <taglib-location>/WEB-INF/taglibs-datetime.tld</taglib-location> 
     </taglib> 
     <taglib> 
      <taglib-uri>WEB-INF/pagination.tld</taglib-uri> 
      <taglib-location>/WEB-INF/pagination.tld</taglib-location> 
     </taglib>   
    </jsp-config> 
</web-app> 



是什麼在struts-config.xml中

<?xml version="1.0" encoding="UTF-8" ?> 

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


<struts-config> 
    <form-beans> 
     <form-bean name="topFrameForm" type="com.aif.TopFrameForm"> 
      <description>This is the form bean for the entire top Frame of the webapp</description> 
     </form-bean> 
    </form-beans> 

    <!-- Global Exceptions --> 
    <global-exceptions> 
    </global-exceptions> 

    <!-- Global Forwards --> 
    <global-forwards> 
     <forward name="topFrameError" path="WEB-INF/jsp/error/TopFrameError.jsp"/> 
     <forward name="unknownError" path="WEB-INF/jsp/error/UnknownError.jsp"/> 
     <forward name="accessDenied" path="WEB-INF/jsp/error/AccessDenied.jsp" /> 
    </global-forwards> 

    <action-mappings> 
     <action path="/topFrame" name="topFrameForm" scope="request" type="com.aif.TopFrameAction" input="WEB-INF/jsp/TopFrame.jsp" parameter="method"> 
      <forward name="ok" path="/WEB-INF/jsp/TopFrame.jsp" /> 
     </action> 
    </action-mappings> 

    <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" /> 

    <!-- Message Resources --> 
    <message-resources parameter="ApplicationResources" null="false"/> 

    <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> 
    </plug-in> 

</struts-config> 



是什麼在com.aif.TopFrameForm

package com.aif; 

import java.util.ArrayList; 

import javax.servlet.http.HttpServletRequest; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.apache.struts.action.ActionErrors; 
import org.apache.struts.action.ActionMapping; 
import org.apache.struts.validator.ValidatorForm; 

public class TopFrameForm extends ValidatorForm { 

    private String schemeNo=""; 
    private String polOrClientNo=""; 
    private String firstName=""; 
    private String surname=""; 
    private String ddMandate=""; 
    private String dob=""; 
    private String maxResultsReached=""; 
    private ArrayList policies=new ArrayList(); 

    // Getters & setters 

    public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest request) { 
     log.info("validate - START"); 
     ActionErrors errors = new ActionErrors(); 

     errors = super.validate(actionMapping, request); 

     // etc.  

     log.info("validate - END");  
     return errors; 
    } 
} 



是什麼在com.aif.TopFrameAction

package com.aif; 

    import java.rmi.RemoteException; 
    import java.text.SimpleDateFormat; 
    import java.util.ArrayList; 
    import java.util.Date; 
    import java.util.HashMap; 
    import java.util.Iterator; 

    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    import javax.servlet.http.HttpSession; 

    import org.apache.commons.logging.Log; 
    import org.apache.commons.logging.LogFactory; 
    import org.apache.struts.action.ActionForm; 
    import org.apache.struts.action.ActionForward; 
    import org.apache.struts.action.ActionMapping; 
    import org.apache.struts.actions.DispatchAction; 

    import com.aif.Constants; 

    public class TopFrameAction extends DispatchAction { 

     private static Log log = LogFactory.getLog("com.aif.TopFrameAction"); 

     public ActionForward viewAction( ActionMapping mapping, 
              ActionForm actionForm, 
              HttpServletRequest request, 
              HttpServletResponse response) { 

      TopFrameForm form =(TopFrameForm) actionForm; 
      String polno = request.getParameter("polnum"); 

      // etc.  
      form.setPolOrClientNo(polno); 
      // etc. 

      return mapping.findForward("ok"); 
    } 
    // etc. 
} 
+0

@Aleksandr M - 我不明白你爲什麼刪除了我添加到這篇文章中的「struts」標籤。根據我的理解,「struts」將包括它的所有版本,並且遠比「strut-1」更多的人遵循這一點,所以通過刪除「struts」標籤,您實際上減少了我的問題的可見性,或者不是?感謝您幫助我理解這一點。 – AIF

+0

[struts]標籤相當模糊。海事組織可將它用於有關移徙的問題或涉及兩個框架的問題。它只有3406個問題,所以知名度不是問題。 –

+0

我已經把「struts」標籤,因爲我有過的問題可能發生在任何版本的struts中。並且可能會吸引更多的人,激勵他們嘗試爲我工作的解決方案。 – AIF

回答

2

試試這個:

  1. 的index.jsp

從眼前的一切刪除了 「/」 字符的 「topFrame.do」 呼籲:

top.topFrame.location = "topFrame.do?method=viewAction&polnum=" + polparam; 

<frame name="topFrame" scrolling="NO" noresize src="topFrame.do?method=viewAction" /> 
  1. In struts-config.xml

更改輸入屬性的值,在 「topFrame」 動作映射,以輸入=的輸入 「的index.jsp」代替=「WEB-INF/JSP/TopFrame.jsp 「

在所有路徑前面加上「/」字符struts-config.xml中

<global-forwards> 
    <forward name="topFrameError" path="WEB-INF/jsp/error/TopFrameError.jsp"/> 
    <forward name="unknownError" path="WEB-INF/jsp/error/UnknownError.jsp"/> 
    <forward name="accessDenied" path="WEB-INF/jsp/error/AccessDenied.jsp" /> 
</global-forwards> 

你必須使用正確的DOCTYPE爲你支柱的版本使用,否則支柱動作路徑將不會被發現:

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" 
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> 
  • 可選:它幫助人ot to 預編譯您的jsp文件既可以提高您的web應用程序的性能,也可以查找是否存在與它們有關的任何問題,而不是像Tomcat在加載它時發現問題那樣來回移動。
  • 0

    它已經長度爲12年來,我已經觸及支柱所以裸陪我。嘗試在struts-config.xml中將您的操作路徑添加到topFrame.do。

    +0

    您的意思是我應該在struts-config.xml中映射此操作路徑<< path =「/ topFrame.do?method=viewAction」>>而不是<< path =「/ topFrame」>>?我剛剛嘗試過,並沒有改變結果。謝謝! – AIF

    +0

    是的,這就是我的意思。對不起,我無法提供更多幫助。 – ringadingding

    +0

    謝謝你的努力! – AIF