struts.xml:
<action name="index" class="categoryAction">
<result name="success">/catalog/Main.jsp</result>
</action>

<action name="viewCart" method="viewCart" class="accountAction">
<result name="success">/cart/Cart.jsp</result>
</action>
<action name="signonForm" class="accountAction">
<result name="success">/account/SignonForm.jsp</result>
</action>
<action name="signon" method="signon" class="accountAction">
<result name="success">index.do</result>
</action>
我调用signon.do去校验登录,成功转发到index.do,但报错:
HTTP Status 404 - /petshop/shop/index.dotype Status reportmessage /petshop/shop/index.dodescription The requested resource (/petshop/shop/index.do) is not available.为什么会这样?如果result是redirect类型的,就正常,转发的时候,到底该怎么配置路径?

解决方案 »

  1.   

    贴个完整的吧:
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    <constant name="struts.objectFactory" value="spring"></constant>
    <constant name="struts.action.extension" value="do" ></constant>

    <package name="shop" namespace="/shop" extends="struts-default">
    <global-results>
    <result name="index">/shop/index.do</result>
    </global-results>

    <action name="index" class="categoryAction">
    <result name="success">/catalog/Main.jsp</result>
    </action>

    <action name="viewCart" method="viewCart" class="accountAction">
    <result name="success">/cart/Cart.jsp</result>
    </action>
    <action name="signonForm" class="accountAction">
    <result name="success">/account/SignonForm.jsp</result>
    </action>
    <action name="signon" method="signon" class="accountAction">
    <result name="success">index.do</result>
    </action>
    <action name="signoff" method="signoff" class="accountAction">
    <result name="success">/shop/index.do</result>
    </action>
    <action name="editAccountForm" method="editAccountForm" class="accountAction">
    <result name="success">/account/EditAccountForm.jsp</result>
    </action>
    <action name="editAccount" method="editAccount" class="accountAction">
    <result name="success">/shop/index.do</result>
    </action>

    <action name="newAccountForm" class="accountAction">
    <result name="success">/account/NewAccountForm.jsp</result>
    </action>

    <action name="newAccount" method="newAccount" class="accountAction">
    <result name="success">/shop/index.do</result>
    </action>
    </package>
    </struts>     
      

  2.   

    <result type="chain" name="success">index.do</result>如果想要跳转到一个action 那么 就要加上type="chain"
      

  3.   

    <result name="success">index.do</result>
    默认是type=dispatcher
      

  4.   


    无论我是这样写:
    <action name="signon" method="signon" class="accountAction">
    <result type="chain" name="success">index.do</result>
    </action>还是那样写:
    <action name="signon" method="signon" class="accountAction">
    <result type="chain" name="success">/shop/index.do</result>
    </action>报错都一样:
    HTTP Status 404 - There is no Action mapped for namespace /shop and action name index.do.type Status reportmessage There is no Action mapped for namespace /shop and action name index.do.description The requested resource (There is no Action mapped for namespace /shop and action name index.do.) is not available.
    Apache Tomcat/6.0.20
      

  5.   

    那个后面不要加.do, 写action的name就ok
      

  6.   


    写成index就OK了,不过它也只适用于当前包啊,如何写别的包的action?谢谢,而且struts2好像没有全局result,只有包范围的全局。
      

  7.   

    回LZ,如果你要指定其他包的这样
    <result type="chain/redirectAction">
       <param name="namespace">其他名称空间</param>
       <param name="actionName">action的名字</param>
    </result>
      

  8.   

    当然有全局的result啦<package name="default">
    ....
    <global-results> 
        <result name="login" type="dispatcher"> 
            <param name="location">login.jsp</param> 
        </result> 
      

  9.   

    你没看到这个全局的result是位于某个包下面的吗.?
      

  10.   

    struts2下action的访问路径就是namespace/actionName,只要路径对了就可以访问,如果要说全局,那就都是全局变量!<package name="default">
    ....
    <global-results> 
        <result name="login" type="dispatcher"> 
            <param name="location">login.jsp</param> 
        </result> 楼上的代码,拿来用用,并不是因为使用了default包,而是因为使用了默认的namespace也就是/
      

  11.   

    ..默认的namespace是"",不是根包.!  
      

  12.   

    官方说明
    A root namespace ("/") is also supported. The root is the namespace when a request directly under the context path is received. As with other namespaces, it will fall back to the default ("") namespace if a local action is not found.