HTTP状态404 – 没有映射名称空间的动作和与上下文路径相关联的动作名称

我已经学习了Struts2的理论,现在正在练习。 在执行项目时遇到问题。我在谷歌搜索的方式很多,但找不到结果。请帮帮我。 下面是代码。请帮助我的朋友们……

项目结构:

项目结构

web.xml中

  struts2  struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter   struts2 /*   login.jsp  

在struts.xml

       pages/homepage.jsp pages/login.jsp   

LoginAction.java

 package com.practice.structs.actions; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String userName; private String password; public String validateUser(){ if(this.userName.equalsIgnoreCase("abc") && this.password.equalsIgnoreCase("abc")) { return "success"; }else{ addActionError(getText("error.login")); return "error"; } } /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the password */ public String getPassword() { return password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } } 

login.jsp的

     Login page   

Login Page

homepage.jsp

     Home Page   

Welcome

像这样改变你的代码

    pages/homepage.jsp pages/![enter image description here][1]login.jsp        

表单中的动作名称是action.login,而在struts.xml中,登录都应该是相同的,并且还要添加命名空间

我知道这个问题有点过时,但我也认为值得一提的是,那些碰巧最终再次绊倒这个post但仍然遇到问题的人; 假设您100%确定映射是否正确并且您的web.xml包含适当的filter,请尝试以下操作:

  1. 停止Tomcat服务器
  2. 在“WEB-INF”文件夹中创建“classes”文件夹
  3. 将struts.xml文件移动到新创建的“classes”文件夹中
  4. 右键单击Tomcat服务器并选择“清理” – 不是必需的,但建议这样做。
  5. 再次启动Tomcat并希望获得最佳效果:-)

作为视觉辅助,您的WEB-INF最终应该看起来像这样:

在此处输入图像描述

如果您仍然遇到此问题,请再次仔细检查您的struts映射以及您的web.xml

我没有足够的积分来回应Ryan的评论,也没有给他评价,但他说的是具体案例中的有效解决方案,我将告诉你原因。

有时,您在项目中创建的文件夹不会被视为应用程序的资源,您必须对其进行配置。

让我用一个实际的例子来解释自己,这个例子可能发生在一些提出这个问题的伙伴身上:

当您使用Eclipse进行开发时,可能选择另一个项目浏览器而不是Eclipse的默认“Project Explorer”,例如“Navigator”。 使用“Navigator”视图,您可以创建文件夹,但是这个文件夹不是包资源(因为它们是使用默认的“Project Explorer”创建“包资源”时),因此Struts2找不到要配置的“struts.xml”文件行动。 因此,您的项目将作为“包资源”处理的唯一文件夹是默认情况下Eclipse中的“动态Web项目”中的WEB-INF。

那么,请确保将所有配置文件放在“包资源”中。

在您的LoginAction.java属性中

private String userName; private String password;

但在你login.jsp

更改

to

我希望这个答案可以解决你的问题……

对struts.xml文件进行更改,添加namespace="/"属性,如

要解决这个问题,我必须在WEB-INF创建一个classes文件夹,并将struts.xml文件放在那里。 然后我将.jsp文件放在web文件夹中并在.jsp文件之前放置'/' ,例如/x.jsp