struts处理.do后缀请求报Struts2中关于"There is no Action mapped for namespace / and action name"的总结

大家都知道struts2默认处理后缀名为.action的请求,但有时想修改action的后缀名为.do,反复试了很多次总是报“There is no Action mapped for namespace "/" and action name...”,整了半天终于找到原因,特记录如下,希望其他童鞋不再落入此坑中....没有耐心的童鞋可以直接看最后一部分:重点说明。因为项目比较简单,此处只展示部分代码。

一、登录的jsp页面:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SUMMER框架</title>
<script type="text/javascript">
	function regist(){
		document.forms[0].action="loginAction_regist.do";
	}
</script>
</head>
<body style="text-align: center;">
	<div align="center">
		<form action="loginAction_login.do" method="post">
			<table width="351" height="70" border="0" align="center" cellpadding="0" cellspacing="0">
				<tr width="58" height="42">
					<td>用户名</td>
					<td>
						<input type="text" name="username" value="">
					</td>
				</tr>
				<tr height="42">
					<td>密   码</td>
					<td>
						<input type="password" name="password" value="">
					</td>
				</tr>
				<tr width="58" height="42">
					<td>验证码</td>
					<td>
						<img alt="" src="<%=request.getContextPath() %>/verifyCodeServlet"  οnclick="changeImg()"/>
					</td>
				</tr>
				<tr width="58" height="42">
					<td>
						<input type="submit" value="登录">
					</td>
					<td>
						<input type="submit" value="注册" οnclick="regist()">
					</td>
				</tr>
			</table>
		</form>
	</div>
</body>
二、action类

public class LoginAction extends ActionSupport{

	/**
	 * 
	 */
	private static final long serialVersionUID = 7382518378920680649L;

	private Logger log = Logger.getLogger(LoginAction.class);
	
	private String username;
	private String password;
	private String errorMsg;
	/**
	 * 登录验证
	 * @throws Exception 
	 */
	public String login() throws Exception {
		ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
		invocation.addPreResultListener(new PreResultListener() {
			
			@Override
			public void beforeResult(ActionInvocation invo, String resultName) {
				log.info("返回的逻辑视图名是:" + resultName);
			}
		});
		
		if(username.equals("admin") && password.equals("123456")){
			log.info(username + "登录成功");
			return "loginSuccess";
		}else if( !username.equals("admin")){
			//return "notAdmin";
			throw new BaseException("baseException---用户名不为admin");
		}else{
			log.error(username + "登录失败");
			errorMsg = username + "登录失败";
			return "loginFailed";
		}
		
	}

	/**
	 * 新用户注册
	 */
	public String regist() {
		return "registSuccess";
		//return SUCCESS;
	}

	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 getErrorMsg() {
		return errorMsg;
	}

	public void setErrorMsg(String errorMsg) {
		this.errorMsg = errorMsg;
	}
	
}
三、struts.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.i18n.encoding" value="utf-8"/>
    <constant name="struts.i18n.reload" value="true"/>
    <constant name="struts.action.extension" value="do"/>
    <constant name="struts.configuration.xml.reload" value="true"/>

    <package name="user" namespace="/" extends="struts-default">
    	<action name="loginAction_*" class="com.summer.action.LoginAction" method="{1}">
    		<result name="loginSuccess">/WEB-INF/jsp/index.jsp</result>
    		<result name="loginFailed" >/pages/login.jsp</result>
    		<result name="registSuccess">/pages/regist.jsp</result>
    	</action>
    </package>

</struts>


四、web.xml配置

	<filter>
		<filter-name>struts</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts</filter-name>
		<!-- <url-pattern>/*</url-pattern> -->
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
重点说明:

1、web.xml中:

<url-pattern>*.do</url-pattern>

当然也可以配置成:

<url-pattern>/*</url-pattern>
2、struts.xml中:

<constant name="struts.action.extension" value="do"/>

<action name="loginAction_*" class="com.summer.action.LoginAction" method="{1}">

action的name属性值不要带后缀.do,我之前就是在这里出了问题;

3、访问的action的URL必须以.do结尾,以JSP页面为例:

<form action="loginAction_login.do" method="post">





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值