1

我正在为项目需求学习 Struts 2,但遇到了一些问题。

在本教程之后:

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

我做了额外的事情:

  • 在 war 文件夹中添加了一个 index.jsp
  • 将 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

4

2 回答 2

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文件。

于 2013-02-01T07:02:15.897 回答
1

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

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

更新:

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

于 2013-02-01T07:16:48.843 回答