我正在学习Struts 2以满足项目要求,并且遇到了一些问题。
遵循本教程:
http://www.mkyong.com/google-app-engine/google-app-engine-struts-2-example/
我做了额外的事情:
将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
完全相同的库用于下载
答案 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>