Struts应用出现的错误及解决方法:There is no Action mapped for namespace / and action name login

时间:2021-12-03 10:57:07

PO主是J2EE的初学者,在学习到Struts部分时,PO主建立了一个模拟登录的Web Project来练手。PO主用的开发环境是MyEclipse8.5,服务器为tomcat6.0。但却出现了一个让PO主很纠结的错误:There is no Action mapped for namespace / and action name login,期间查找了很多资料,很高兴,最后能解决了,现在把它写出来跟大家分享一下,也作为自己的一个学习笔记。
以下是PO主建立Struts应用的过程.

1.打开MyEclipse8.5,新建一个Web Project,取名为Struts2Demo_2;

2.为该project添加Struts支持,即右击项目-->myeclipse-->add Struts capabilities....之后,struts specification选择struts2.1,URL pattern选择/*。

至此,添加Struts支持完成,系统会生成一个struts.xml配置文件。该文件已经配置好struts2的核心Filter。

3.WebRoot文件下建立文件loginJSP,在新建立的loginJSP下建立login1.jsp,welcome.jsp,error.jsp文件

4.打开login1.jsp文件,编写如下:

<body>
<s:form name="form1" action="login1" method="post" >
<s:textfield name="username" label="用户名"></s:textfield>
<s:textfield name="password" label="密码"></s:textfield>
<s:submit label="登录"></s:submit>
</s:form>
</body>

5.打开welcome.jsp,编写如下:

 <body>
<h1>欢迎,${username }</h1>
</body>

6.打开error.jsp,编写如下:
 <body>
用户名或密码不对!
</body>

7.编写LoginAction类,该类继承与ActionSupport类

package com.ssh.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}

public String execute(){

System.out.println("LoginAction.execute()......");
System.out.println("username:"+username+",password:"+password);
if(username.equalsIgnoreCase("xnn")&&password.equalsIgnoreCase("123")){
return "succ";
}
else{
return "fail";
}
}

}

8.修改配置文件struts.xml,如下:(package是struts的子元素)

<pre name="code" class="html"><package name="tom" extends="struts-default"namespace="/">
<action name="login1" class="com.ssh.action.LoginAction">
<result name="succ">/loginJSP/welcome.jsp</result>
<result name="fail">/loginJSP/error.jsp</result>
</action>
</package>

 
9.部署该应用,然后启动服务器,在浏览器中输入:http://localhost:8080/Struts2Demo_2/loginJSP/login1.jsp 

运行结果是:There is no Action mapped for namespace / and action name login1.

结果方案是:修改struts.xml文件,namespace修改为namespace="/test",并且<s;form>中添加属性namespace="/test"

然后重新部署,结果就出来了.

运行成功!

产生这个错误的原因是:是因为配置文件没找到。首先,检查一下你的struts.xml是否在classes 文件夹下查找路径:“安装Tomcat 的路径”\webapps\“你工程的名称”\WEB-INF\classes。其次,检查其中内容 是否正确,每一个属性都要检查,注意拼写错误!!!(通常struts.xml是myeclipse自动生成的,一般不会出现文件名错误的问题)。最后,如果jsp页面没用<s:form>的话 形式应该是这样:<form  action="login1.action" >  ,如果jsp页面用的是<s:form >形式 那应该是:<s:form name ="form1" action ="login1" namespace="/test">

注意:

form 标签  没有namespace属性 s:form 标签  有namespace属性 以上就是整个问题出现和解决的过程。