Struts09---验证框架

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>          
          

下面的

下面的

 

原文地址:https://www.cnblogs.com/xtdxs/p/7097509.html