Struts 2 GAE没有映射名称空间的动作[/]

时间:2013-02-01 06:29:17

标签: google-app-engine indexing struts2 namespaces action-mapping

我正在学习Struts 2以满足项目要求,并且遇到了一些问题。

遵循本教程:

http://www.mkyong.com/google-app-engine/google-app-engine-struts-2-example/

我做了额外的事情:

  • 将index.jsp添加到war文件夹
  • 将web.xml更改为

    <?xml version="1.0" encoding="utf-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
    
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <listener>
            <listener-class>com.mkyong.listener.Struts2ListenerOnGAE</listener-class>
        </listener>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    

现在,当我重建并加载

    http://localhost:8888

而不是看到我在index.jsp中应该有的内容,我得到了一个

    Error 404 There is no Action mapped for namespace [/] and action name [] associated with context path [].

有人能指出我正确的方向吗?我在SO中看到了一些其他类似的问题,但他们的解决方案不适用于Struts 2 + GAE的这个特定示例。

我的struts.xml

    <struts>
        <package name="user" namespace="/User" extends="struts-default">
            <action name="Login">
                <result>pages/login.jsp</result>
            </action>
            <action name="Welcome" class="com.mkyong.user.action.WelcomeUserAction">
                <result name="SUCCESS">pages/welcome_user.jsp</result>
            </action>
        </package>
    </struts>

文件夹结构

我无法发布图片,http://i.imgur.com/KSPmaMr.png

完全相同的库用于下载

http://www[dot]mediafire[dot]com/?utliwvcmo63o8l7

2 个答案:

答案 0 :(得分:1)

好吧,我遇到了你的问题,

将struts.xml更改为此

  <struts>
       <package name="default" extends="struts-default" namespace="/">
            <action name="Login">
                <result>pages/login.jsp</result>
            </action>
            <action name="Welcome" class="com.mkyong.user.action.WelcomeUserAction">
                <result name="SUCCESS">pages/welcome_user.jsp</result>
            </action>
        </package>
    </struts>

我想这会有效,因为如果将struts.xml文件放在根目录中, filterDispatcher 会在根文件夹中搜索 struts.xml 文件。

答案 1 :(得分:1)

@Eleazar我按照你在问题中提到的mykong教程链接。就我看到的教程而言,没有使用index.html。在应用程序启动时未提及操作时使用<welcome-list>文件。

在该教程的步骤:8 中,他们提供了运行测试所需的url http://localhost:8888/User/Login.action。它与欢迎列表中的文件无关......

<强>更新

您收到该错误是因为您已将struts2过滤器添加为/*,并且您的操作名称空间用于/User/没有操作命名空间。添加名称=“default”且包含namespace =“/”即<package name="default" extends="struts-default" namespace="/"></package>的包将解决您的问题。它会点击<welcome-file>