登录验证时第一次帐号密码错误,第二次提交出现错误404,Could not find action or result: /zyf_shop/user_login.action

登录代码块

public String login(){
		User existUser = userService.login(user);
		if(existUser==null){
			//登录失败
			this.addActionError("登录失败:用户名密码错误或者用户未激活");
			System.out.println("login");
			return LOGIN;
		}else{
			//登录成功
//			将用户的信息存入session
			ServletActionContext.getRequest().getSession()
			.setAttribute("existUser", existUser);
			//页面的跳转
			return "loginSuccess";
			
		}
	}

Spring的action配置

<!--Action的配置 ======================================= -->
	<bean id="indexAction" class="zjsr.zyf.shop.index.action.indexAction" ></bean>
	 <bean id="userAction" class="zjsr.zyf.shop.user.action.UserAction" >
	 	<property name="userService" ref="userService"></property>
	 </bean>

原因:ServletActionContext.getRequest().getSession()
            .setAttribute("existUser", existUser);

(输入做的用户名或密码时,会得到一个空对象,空对象保存在session中,只要页面不关,session中的空对象就一直会起作用)

Spring默认是单例模式

spring 默认scope 是单例模式
这样只会创建一个Action对象
每次访问都是同一个Action对象,数据不安全
struts2 是要求 每次次访问 都对应不同的Action
scope="prototype" 可以保证 当有请求的时候 都创建一个Action对象

所以需要加scope="prototype"

猜你喜欢

转载自blog.csdn.net/v_nbsp/article/details/82817609
今日推荐