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对应的类

Struts09---验证框架_用户名

 

02.进入其对应的父类

Struts09---验证框架_apache_02

 

 03.继续观察

Struts09---验证框架_xml_03

04.得到了  方法名变大写

Struts09---验证框架_struts_04

Struts09---验证框架_struts_05

 

 

使用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>


 

Struts09---验证框架_apache_06下面的

Struts09---验证框架_apache_07下面的

Struts09---验证框架_apache_08

 

 

 Struts09---验证框架_用户名_09

 


作者:Rick__想太多先森