[Struts2与spring集成]There is no Action mapped for action name index.

struts2与spring集成遇到如下问题,已经调了很久,还是没有找出原因,希望各位大牛帮忙解惑,找出其中端倪!

导入的相关jar如下:

web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    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_2_5.xsd">

      <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
        <init-param>  
            <param-name>config</param-name>  
            <param-value>
                struts-default.xml,
                struts-plugin.xml,
                /WEB-INF/config/config-struts/struts-base.xml
            </param-value>  
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/config/config-spring/spring-base.xml
        </param-value>
    </context-param>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
  
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
</web-app>
struts-base.xml如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

    
<struts>    
    
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.action.extension" value="do,action"></constant>
    <constant name="struts.objectFactory" value="spring" />
    
    <include file="struts-index.xml"></include> 
    
</struts>
struts-index.xml如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

    
<struts>    
    
    <package name="index" namespace="/index" extends="struts-default">
        <action name="index" class="loginAction" method="login">
            <result name="success">/WEB-INF/pages/login/login.jsp</result> 
        </action>
    </package>

</struts>
spring-base.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <import resource="spring-index.xml" />

</beans>
spring-index.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="loginService" class="com.andy.app.service.impl.LoginServiceImpl"></bean>
    <bean id="loginAction" class="com.andy.app.struts.action.index.LoginAction" scope="prototype">
        <property name="loginService" ref="loginService"></property>
    </bean>

</beans>
 

index.jsp如下:

<%
final String url = request.getContextPath() + "/index/index.action";
response.sendRedirect(response.encodeURL(url));
%>

目录结构如下:

myeclipse控制台出现的问题:

There is no Action mapped for action name index. - [unknown location]
	at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:189)
	at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
	at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
	at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:475)
	at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)

  

浏览器访问:http://localhost:8080/app出现错误如下:

还有一个奇怪的现象是:

如果我把

<package name="index" namespace="/index" extends="struts-default">

改为

<package name="index" extends="struts-default"> 或者<package name="index" namespace="/" extends="struts-default">

index.jsp改为

<%
final String url = request.getContextPath() + "/index.action";
response.sendRedirect(response.encodeURL(url));
%>

浏览器再次访问:http://localhost:8080/app出现错误如下:

网上找了查看了很多,都说是把配置文件放到类路径下,尝试了也不行,而且我这样写应该也是可以的吧。

花了很长时间,真没辙,希望各位指点迷津,谢谢!

 
 
原文地址:https://www.cnblogs.com/slliang/p/3469692.html