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

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

以下是建立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属性

以上就是整个问题出现和解决的过程。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值