01.创建登录界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <s:form action="user/login" method="post"> <s:textfield name="user.name" label="姓名"/> <s:textfield name="user.password" label="密码"/> <s:submit value="登录"/> <%-- 全局的validate()会拦截我们所有的请求 --%> <a href="user/change">切换验证码</a> </s:form> </body> </html>
02.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> <package name="user" namespace="/user" extends="default"> <!-- 登录验证 --> <action name="login" class="cn.bdqn.action.UserAction" method="login"> <result name="input">/login.jsp</result> <result>/success.jsp</result> </action> <!-- 切换验证码 --> <action name="change" class="cn.bdqn.action.UserAction" method="change"> <result>/success.jsp</result> </action> </package> </struts>
03.Action
/** * 验证框架: * 01.局部验证 * 02.全局验证 使用 validate * 03.全局验证 使用xml 推荐*** * * */ public class UserAction extends ActionSupport{ private User user; //验证的对象 //默认 public String execute(){ System.out.println("默认执行的execute"); return SUCCESS; } //登录的方法 public String login(){ System.out.println("进入了login()"); //如果有错误! if (hasErrors()) { return INPUT; //返回登录界面 } return SUCCESS; } //切换验证码 public String change(){ System.out.println("进入了change()"); return SUCCESS; } /** * 全局的验证 只要进入了我们的Action 这个方法就必须先执行! * 重写了ActionSupport类中的validate() @Override public void validate() { System.out.println("进入了validate()"); if (StringUtils.isBlank(user.getName())) {//用户名为空返回true! addFieldError("user.name", "用户名不能为空"); } if (StringUtils.isBlank(user.getPassword())) {//密码为空返回true! addFieldError("user.password", "密码不能为空"); } }*/ /** * 验证指定的方法 * 需要验证的方法名 首字母大写 !前面加上validate * 如果和全局验证同时存在 ,优先执行指定方法名称的验证! */ public void validateLogin() { System.out.println("进入了validateLogin()"); if (StringUtils.isBlank(user.getName())) {//用户名为空返回true! addFieldError("user.name", "用户名不能为空"); } if (StringUtils.isBlank(user.getPassword())) {//密码为空返回true! addFieldError("user.password", "密码不能为空"); } } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
04.创建成功界面! 省略!
validate拦截器的底层搜索!
01.找到struts-default.xml文件中的validation对应的类
02.进入其对应的父类
03.继续观察
04.得到了 方法名变大写
使用xml验证框架! 首先保证xml文件和Action在同一个包中!
package cn.bdqn.action; import java.sql.SQLException; import org.apache.commons.lang3.StringUtils; import cn.bdqn.bean.User; import com.opensymphony.xwork2.ActionSupport; /** * 验证框架: * 01.局部验证 * 02.全局验证 使用 validate * 03.全局验证 使用xml 推荐*** 前提验证文件 必须和 action在一个包中! * 001.验证全局 : ActionClassName-validation.xml * 002.验证指定的: ActionClassName-ActionName-validation.xml * * ActionClassName:就是我们Action的类名! 在本类中就是对应UserAction! * ActionName:指的的struts.xml文件中action节点中 name的属性值! * */ public class UserAction extends ActionSupport{ private User user; //验证的对象 //默认 public String execute(){ System.out.println("默认执行的execute"); return SUCCESS; } //登录的方法 public String login(){ System.out.println("进入了login()"); //如果有错误! if (hasErrors()) { return INPUT; //返回登录界面 } return SUCCESS; } //切换验证码 public String change(){ System.out.println("进入了change()"); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
<?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"> <!-- 验证文件 必须和 action在一个包中! --> <validators> <field name="user.name"> <field-validator type="requiredstring"><!--用户名不能为空 --> <param name="trim">true</param> <message><![CDATA[用户名不能为空!!!XML]]></message> </field-validator> <field-validator type="stringlength"><!--用户名的长度--> <param name="minLength">5</param> <param name="maxLength">10</param> <message><![CDATA[用户名必须在5--10之间!!!XML]]></message> </field-validator> </field> <field name="user.password"> <field-validator type="requiredstring"><!--密码不能为空 --> <param name="trim">true</param> <message><![CDATA[密码不能为空!!!XML]]></message> </field-validator> <field-validator type="regex"><!--密码的长度--> <param name="trim">true</param> <param name="regex"><![CDATA[^[0-9a-zA-Z]{5,10}$]]></param> <message><![CDATA[密码必须在5--10之间!!!XML]]></message> </field-validator> </field> </validators>
下面的
下面的