资源未找到错误404

我试图在struts2上运行一个Web应用程序示例,我正面临一个问题。 这是代码web.xml

  Struts 2  index.jsp   struts2  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter    struts2 /*   

的index.jsp

       Hello World   

Hello World From Struts2


在struts.xml

       HelloWorld.jsp /oops.jsp    

HelloWorldAction.java

 package com.junaid1.struts2; public class HelloWorldAction{ private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

当我在tomcat服务器上执行这个项目时,它会很好地显示index.jsp页面。这个页面有一个表单。 当我按下提交按钮时,它会显示错误消息“请求的资源不可用”,并显示消息“/ test1 / abc”。 abc是操作的名称,不会调用此操作。 在发布这个问题之前,我已经搜索了很多。 起初我以为我可能会遗漏一些库,但这对我来说似乎不是问题,因为我使用maven进行依赖管理。这是我的pom.xml。

  4.0.0 test test1 0.0.1-SNAPSHOT war    org.apache.maven.plugins maven-compiler-plugin 3.1  1.7 1.7       org.apache.struts struts2-core 2.3.16   log4j log4j 1.2.14    

提前致谢 。 链接到项目结构是 s17.postimg.org/axpn8cxbz/error.png

您可以看到索引页面,因为它由Web容器Tomcat显示,并且它没有Struts标记(就像没有Struts框架的任何其他Web项目一样)。

浏览器url显示/test1/ 。 然后你按下一个提交按钮来发出request /test1/abc ,它被struts2过滤了,但是在命名空间/默认名称空间中找不到名字abc动作,你没有任何资源该路径,所以你得到404错误。

您可能会说在默认命名空间中使用名称abc配置了操作。 但是这个配置在运行时不可用,包名也应该是你的包扩展的struts-default

struts.xml文件应该在classpath上,它表示在srcresources文件夹中。 编译时将其复制到编译器输出文件夹中。 构建之后,它将从编译器输出文件夹复制到WEB-INF/classes 。 这两个文件夹是临时生成的,可以在进程之前删除,因此如果源文件夹中没有struts.xml ,那么在运行应用程序时就会丢失此文件。

另请注意,您在结果中使用的webcontent文件夹中没有任何JSP页面。

首先,您应该在web.xml中使用

  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  

不推荐使用org.apache.struts2.dispatcher.FilterDispatcher

请看一下这个例子 。