02-struts 业务分离

基于01-struts的登录,把业务逻辑判断代码独立放在一个业务处理类中,以此把Action和业务处理分开。

遵循的原则:不在Action中进行业务逻辑的处理,应交给专门的Model层去处理。

(1)创建一个运行时异常 UserNotFoundException.java文件

package edu.yy.struts;

public class UserNotFoundException extends RuntimeException {

}


(2)使用单例模式创建业务处理类 UserManager.java文件

package edu.yy.struts;

public class UserManager {
	
	//使用单例模式
	
	private static UserManager instance=new UserManager();
	
	private UserManager(){}
	
	public static UserManager getInstance(){
		return instance;
	}
	
	public  void  check(String username){
		
			if(!username.equals("struts")){
				throw new UserNotFoundException();
			}
	}
}

(3)LoginAction中的代码修改如下:

public class LoginAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//把ActionForm强转为LoginActionForm
		LoginActionForm laf=(LoginActionForm)form;
		//从LoginActionForm中获取用户名
		String username=laf.getUsername();
		
		
		/*//用户名的逻辑判断,并决定返回哪个ActionForward
		if(username.equals("struts")){
			//把用户名放入request中
			request.setAttribute("username", username);
			//跳转到成功页面
			return mapping.findForward("success");
		}else{
			return mapping.findForward("error");
		}*/
		
		//定义一个错误信息
		String errorInfo="";
		try{
			UserManager.getInstance().check(username);
			request.setAttribute("username", username);
			return mapping.findForward("success");
		}catch(UserNotFoundException unfe){
			unfe.printStackTrace();
			errorInfo="用户名错误,用户名=【"+username+"】";
		}
		//把错误信息放在request中,以便在登录失败页面中看到错误信息
		request.setAttribute("errorInfo", errorInfo);
		return mapping.findForward("error");
	}
	
}


(4)登录失败页面 failure.jsp

<body>
   登录失败,<%=request.getAttribute("errorInfo") %>
  </body>

(5)登录成功页面

<body>
   <%=request.getAttribute("username")%>,登录成功<br/>
   
   <%
       LoginActionForm laf=(LoginActionForm)request.getAttribute("form");
    %>
    <%=laf.getUsername() %>,登录成功
  </body>


可以看出这里有两种方式取出登录的用户名:
第一种:在LoginAction中把登录成功的用户名存入request中。

 第二种:在struts-config.xml文件中的

<action-mappings>
		<action path="/login"
		type="edu.yy.struts.LoginAction"
		name="form"
		scope="request"
		>

其中action的nane属性对应的LoginActionForm中存放着登录的用户名,对应的scope是request,所以可以取到。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值