03、struts1 用户登录简单示例的升级版 讲解

上一篇文章中,那种数据验证的方法不正规。

一般来说,两种验证方式,一是客户端的验证,例如JavaScript;另外一种,服务端的验证,Action中的validation方法。

客户端的数据安全性就比较低,因为客户可以跳过验证。validation的就相对严谨些。

 

同样,我用UserManager类来管理验证也行。

 

------------------UserManager.java

 

 

 

 因为有了一个实体类,User.java  所以,这儿用一个UserManager 来管理它,该类中采用了Singleton(单例模式),提供一个没有返回值的Login方法,用以相关的业务判断。

 

 抛出的错误,有两个:

一个是 UserNotFoundException,找不到用户,

package com.wgy.struts;

public class UserNotFoundException extends RuntimeException {

}

 

一个是 PasswordErrorException 密码错误

package com.wgy.struts;

public class PasswordErrorException extends RuntimeException {

}

 

------------------------------------------------------------------

LoginActionForm.java 在这个ActionForm 中添加了 reset 和 validation 的方法。打印出来,证明程序时可以执行到这两个方法。

原因在于这儿,struts-config.xml 文件中,

  1. <action path="/login"  
  2.                 type="com.wgy.struts.LoginAction"  
  3.                 name="loginForm"  
  4.                 scope="request"
  5.                 validation="true"
  6.         > 

 validation="true" 这是默认值。 设置为FALSE之后这两个方法就不可以执行了。

ActionForm 的生命周期可以设置为session(默认) 和 request,当设置为session 时,要记得在reset方法中将所有的属性重新设置为初始值。

如:

 

public void reset(){

      username = null;

      password = null;

}

 

而validation 方法中就可以写上判断业务逻辑的code。

 

 LoginActionForm.java

 

 

------------------------------------------------------------------------

 

如果在UserManager.java 或者 validation方法中设置了判断逻辑,那在Action中就可以不用重复写了。

 

 

因为考虑到有异常,所以要捕获。成功通过验证,就通过 return mapping.findForward("success"); 定义到成功页面

错误 则 return mapping.findForward("error");

 

 

 

login_error.jsp 页面中要获得错误信息: <%=request.getAttribute("errorInfo") %>

 

login_success.jsp中要获得username

 

(LoginActionForm)request.getAttribute("loginForm");

这个loginForm 要和
  1.     <action-mappings>  
  2.         <action path="/login"  
  3.                 type="com.wgy.struts.LoginAction"  
  4.                 name="loginForm"  
  5.                 scope="request"  
  6.         > 

中的name 相同。

 

==============================

 

小结一下:

牢记原则,不要再Action中进行业务逻辑处理,业务逻辑应该交给专门的model层去处理

在业务逻辑层抛出异常,在Action 中捕捉并且处理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章