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属性 以上就是整个问题出现和解决的过程。