zoukankan      html  css  js  c++  java
  • 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>          
              
              

    下面的

    下面的

     

  • 相关阅读:
    《VC++深入详解》学习笔记 第十二章 文件和注册表操作
    《VC++深入详解》学习笔记 第九章 定制应用程序外观
    《VC++深入详解》学习笔记 第七、八章对话框
    《VC++深入详解》学习笔记 第六章 菜单
    《VC++深入详解》学习笔记 第五章 文本编程
    《VC++深入详解》学习笔记 第四章 简单绘图
    《VC++深入详解》学习笔记 第三章 MFC框架程序剖析
    Inno_Setup使用笔记(简单完成安装包制作)
    《VC++深入详解》学习笔记 第一章 Windows程序内部运行机制
    搭建eclipse的nodejs开发环境图解
  • 原文地址:https://www.cnblogs.com/999-/p/6501772.html
Copyright © 2011-2022 走看看