编码式认证登录验证开发步骤:
1. 新建一个java project
2. 导入struts2核心jar包和其他必须组件
3. 配置核心过滤器(重要),在web-xml文件中配置
<filter> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
4. 新建一个类 UserAction(自定),继承ActionSupport类(必须)
5. 定义成员字段,例如
private String username; private String password; private String email; |
6. 提供get和set方法(必须)
7. 提供公共的验证方法(可选,不推荐)在此方法内写一些需要认证的内容
@Override public void validate() { if(this.username==null ||this.username.trim().length()==0){ this.addFieldError(username, "用户名必填"); }elseif(!this.username.matches("^[\u3400-\ufa29]+$")){ this.addFieldError(username, "用户名必须是中文"); } if(this.password==null||this.password.trim().length()==0){ this.addFieldError(password, "密码必填"); }else if(!this.password.matches("^[0-9]{6}$")){ this.addFieldError(password, "密码必须是六位数字"); } } |
8. 提供专用的验证方法(推荐)
比如验证登陆,就用一个专门验证登录的方法,
注册就用一个专门验证注册的方法.
其中方法的命名非常重要,有严格规定,方法名错了验证方法就无效了
比如控制跳转的方法为registerMethod(),那么他的专用验证方法就必须是
validateRegisterMethod() 在这个跳转方法前加上validate.
代码举例:
专用登录的验证方法:
public void validateLoginMethod() { if(this.username==null ||this.username.trim().length()==0){ this.addFieldError(username, "用户名必填"); }else if(!this.username.matches("^[\u3400-\ufa29]+$")){ this.addFieldError(username, "用户名必须是中文"); } if(this.password==null||this.password.trim().length()==0){ this.addFieldError(password, "密码必填"); }else if(!this.password.matches("^[0-9]{6}$")){ this.addFieldError(password, "密码必须是六位数字"); } } |
登录的跳转方法
/** * 用户登录的业务控制方法 */ public String loginMethod() throwsException { ActionContext.getContext().put("username",username); ActionContext.getContext().put("password",password); return "loginOK"; } |
9. 提供业务控制方法,如上,控制如果登录验证成功就返回"loginOK"
(至此java代码部分就结束,接下来配置xml文件)
10. 配置分XML文件,此处的XML文件必须和新建的类 UserAction(自定)在同一个包下,如下图,其中XML文件的命名没有严格规定,但是最好是包名+struts.xml(推荐)
11.配置javavalidator-struts.xml文件内容
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <!-- 上面的文件头在 struts2-core2.3.1.jar中的struts-default中拷贝--> <struts> <!-- packeage name自定,但是多个分配置文件的包名不能相同 --> <package name="javavalidatorPackage" extends="struts-default" namespace="/"> <!-- 注册 --> <!-- attion name是请求的uri method是控制业务跳转的方法 --> <action name="registerRequest"class="javavalidator.UserAction" method="registerMethod"> <!-- input(固定)是 业务跳转的方法不成功是跳到的页面,比如注册失败跳回到注册的页面--> <result name="input" type="dispatcher"> /java111/register.jsp </result> <!-- registerOK是 registerMethod业务跳转的方法成功返回的值.--> <result name="registerOK" type="dispatcher"> /java111/registerOK.jsp </result> </action> <!-- 登录 --> <action name="loginRequest"class="javavalidator.UserAction" method="loginMethod"> <result name="input" type="dispatcher"> /java111/login.jsp </result> <result name="loginOK" type="dispatcher"> /java111/loginOK.jsp </result> </action> </package> </struts> |
12.配置总XML文件,这个文件命名有严格规定,叫 struts.xml 并且要放到src目录下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 包含的每个包的分文件xml --> <include file="javavalidator/javavalidator-struts.xml"></include> <include file="xmlvalidator/xmlvalidator-struts.xml"></include> <include file="model/model-struts.xml"></include> </struts> |
Struts 声明式认证(利用bean模型)
编码式认证登录验证开发步骤:
1.新建一个java project
2.导入struts2核心jar包和其他必须组件
3.配置核心过滤器(重要),在web-xml文件中配置
<filter> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
4.写一个登陆bean模型 (UserbeanLogin.java)
public class UserbeanLogin { private String username; private String passward; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassward() { return passward; } public void setPassward(String passward) { this.passward = passward; } } |
5.写一个UserAction类, (UserAction.java )继承ActionSupport类
import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private UserbeanLogin userbeanLogin; private UserbeanRegister userbeanRegister; public UserbeanLogin getUserbeanLogin() { return userbeanLogin; } public void setUserbeanLogin(UserbeanLogin userbeanLogin) { this.userbeanLogin = userbeanLogin; } public UserbeanRegister getUserbeanRegister() { return userbeanRegister; } public void setUserbeanRegister(UserbeanRegister userbeanRegister) { this.userbeanRegister = userbeanRegister; } /** * 业务控制方法 * */ //注册方法 public String userRegisterMethod() throws Exception { ActionContext.getContext().put("userbeanRegister",userbeanRegister); return "UserRegisterOK"; } //登录方法 public String userLoginMethod() throws Exception { ActionContext.getContext().put("userbeanLogin",userbeanLogin); return "UesrLoginOK"; } } |
6.配置分XML文件,命名自定(model-struts.xml)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="modelPackage" extends="struts-default" namespace="/"> <!-- 注册 --> <action name="RegisterRequest"method="userRegisterMethod" class="model.UserAction"> <result name="UserRegisterOK" type="dispatcher"> /model/registerOK.jsp </result> <result name="input" type="dispatcher"> /model/register.jsp </result> </action> <!-- 登录 --> <action name="LoginRequest" method="userLoginMethod"class="model.UserAction"> <result name="UesrLoginOK" type="dispatcher"> /model/loginOK.jsp </result> <result name="input" type="dispatcher"> /model/login.jsp </result> </action> </package> </struts> |
7.配置UserAction的验证文件,命名有严格规定,名字写错验证无效
格式为:UserAction-LoginRequest-validation.xml
UserAction表示实现了ActionSupport的那个类,
LoginRequest是xml配置文件中ation标签的 name属性的值,
validation是固定的,表示验证文件,他们之间以-来连接,后缀是.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- UserAction中的字段 --> <field name="userbeanLogin"> <!-- type="visitor" 模型专用--> <field-validator type="visitor"> <message></message> </field-validator> </field> </validators> |
8.配置bean模型 (UserbeanLogin.java) 的验证文件,此文件要和UserbeanLogin.java放在同一个包中,文件命名也有规定,写错无效
文件名命名:UserbeanLogin-validation.xml
命名方式以bean模型的名字- validation.xml
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!-- bean模型中的字段 --> <field name="username"> <!-- 此处的type 在xwork-core-2.3.1.1.jar/validator/validators/default.xml 中查找, requiredstring表示必填的字符串--> <field-validator type="requiredstring"> <!-- 出错时候的提示 --> <message>用户名必填</message> </field-validator> <field-validator type="regex"> <param name="expression">^[\u3220-\uFa29]+$</param> <message>用户名必须是中文</message> </field-validator> </field> <field name="passward"> <field-validator type="requiredstring"> <message>密码必填</message> </field-validator> <field-validator type="regex"> <param name="expression">^[0-9]{6}$</param> <message>密码必须是六位数字</message> </field-validator> </field> </validators> |
9.最后配置总xml文件(struts.xml)文件名固定,将分文件model-struts.xml包含到其中
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 包含的每个包的分文件xml --> <include file="javavalidator/javavalidator-struts.xml"></include> <include file="xmlvalidator/xmlvalidator-struts.xml"></include> <include file="model/model-struts.xml"></include> </struts> |