热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Struts2的输入校验实例代码

这篇文章主要介绍了Struts2的输入校验实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下

在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验:

   客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻服务器的负担,但是客户端校验并不是安全的,简单来讲就是防君子防不了小人。

   服务器端校验:最大特点就是数据安全,但是如果只有服务器端校验,会大大增加服务器端的负担。

所以一般在我们开发中,是客户端和服务器端校验相结合作用的。

那这篇文章,我只讲服务器端校验,在Struts2支持两种校验方式:

    代码校验 :在服务器通过编辑java代码完成数据校验

   配置校验: xml配置校验 通过xml配置文件完成数据的校验

(1)代码校验:

    代码校验分为三个步骤: 

步骤一、封装数据

步骤二、实现要校验的Action  必须继承ActionSupport

步骤三、覆盖Validate方法  然后完成业务逻辑数据的校验

用户界面 register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

 
 
  
 
 
用户名:

密 码:

确认密码:

struts.xml

<&#63;xml version="1.0" encoding="UTF-8" &#63;>

 
  
    
  
   
   /success.jsp
   
   /register.jsp
   
     

RegisterAction.java

import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
 private String username;
 private String password;
 private String password2;
 //这里我通过set方法封装数据 
 public void setUsername(String username) {
  this.username = username;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public void setPassword2(String password2) {
  this.password2 = password2;
 }
 @Override
 public String execute() throws Exception {
  return NONE;
 }
 //在服务器端需要完成对数据的校验
 @Override
 public void validate() {
  //测试是否得到属性值,证实已经得到
 System.out.println(username+"---"+password+"---"+password2);
 if(username==null || username.length()<6 || username.length()>20){
  //把错误信息保存到字段中
  this.addFieldError("username", "有户名输入不合法");
 }
 if(password==null || password.length()<6 || password.length()>20){
  //把错误信息保存到字段中
  this.addFieldError("password", "密码输入不合法");
 }else if( password2==null || password2.length()<6 || password2.length()>20){
  this.addFieldError("password2", "密码输入不合法");
 }else if(!password.equals(password2)){
  this.addFieldError("password2", " 两次密码不一致");
 }
  super.validate();
 }
}

运行结果:

 (2)框架校验

 框架校验也就是通过XML配置方式进行数据校验 ,这也是我们在企业开发的主流校验。

XML校验原理: 将很多规则代码已经写好只需要在xml文件中定义需要使用的校验规则即可。,所以大大减少了我们的开发时间。

 我先把步骤写一下:

     步骤一:编写JSP

     步骤二:编写Action 继承ActionSupport或者Validateable接口

   步骤三:封装请求参数

   步骤四:编写xml校验规则文件

    Xml校验文件的命名规则:   Action类名-validation.xml 对Action中所有的方法都执行校验

      举例命名规则RegisterAction-validation.xml

       同时要满足:Xml校验文件和Action类要在同一包下

 步骤一: register.jsp

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>


 
 
 
 
 
用户名
密码
确认密码
年龄
邮箱
生日
毕业日期

  步骤二:RegisterAction.java

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class RegisterAction extends ActionSupport implements ModelDriven{
 //手动创建一个对象
 private User user =new User();
 @Override
 public String execute() throws Exception {
  return NONE;
 }
 public User getModel() {
  return user;
 }  
}

步骤三:封装请求参数

上面手动校验的案例我是用set方法封装数据,那这里我采用的是使用ModelDriven接口,对请求数据进行封装,

在之前我讲过封装数据的三种方法不清楚的可以看下这篇文章:Struts框架(6)---action接收请求参数

User.java

import java.util.Date;
public class User {
 private String username;
 private String password;
 private String password2;
 private Integer age;
 private String email;
 private Date birthday;
 private Date graduation;
 /*
  * 给属性提供get和set方法
  */
}

步骤四:RegisterAction-validation.xml


 
  
  
    
     true
     用户民不能为空
    
    
    6
    15
    有户名长度必须在 ${minLength} 和 ${maxLength}之间 
    
   
  
    
     true
     密码不能为空
    
    
    6
    15
    密码必须在 ${minLength}和${maxLength}之间 
    
   
  
   
    
    两次密码不一致
   
  
  
   
    true
    年龄不能为空
   
   
    1
    150
    年龄必须在 ${min} 和 ${max}之间
   
  
  
   
    不是一个合法的邮箱地址
   
  
  
   
    2001-01-01
    2003-12-31
    生日必须在 ${min} 和${max}之间
     
   
 

struts.xml不需要任何改变,和之前一样就可以了

运行结果:

   如果你觉得提示错误的位置有点丑,那你可以运用Struts2的标签,效果会更好

现在两种方式都讲了,现在对xml配置的要点一些知识要点进行归纳。

xml校验文件详解: 

: 根元素

:指定action中要校验的属性,name属性指定将被验证的表单字段的名字

:指定校验器, type 指定验证规则

     上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求

      的校验器,这些校验器的定义可以在xwork-2.x.jar中的

      com.opensymphony.xwork2.validator.validators下的default.xml中找到。

:子元素可以向验证程序传递参数

:子元素为校验失败后的提示信息,如果需要国际化,可以为message

                          指定key属性,key的值为属性文件中的key。

struts2校验规则:

系统提供的校验器如下:

required (必填校验器,要求被校验的属性值不能为null)

requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)

stringlength(字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)

regex(正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)

int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)

double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)

fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)

email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)

url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)

date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)

conversion(转换校验器,指定在类型转换失败时,提示的错误信息)

visitor(用于校验action中复合类型的属性,它指定一个校验文件用于校验复合类型属性中的属性)

expression(OGNL表达式校验器,它是一个非字段校验器, expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)

最后讲一个细节:

编写校验文件时,不能出现帮助信息

在编写ActionClassName-validation.xml校验文件时,如果出现不了帮助信息,可以按下面方式解决:

windwos->preferences->myeclipse->files and editors->xml->xmlcatalog

点“add”,在出现的窗口中的location中选“File system”,然后在xwork-2.1.2解压目录的src\java目录中选择xwork-validator-1.0.3.dtd,

回到设置窗口的时候不要急着关闭窗口,应把窗口中的Key Type改为URI 。Key改为http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd

以上所述是小编给大家介绍的Struts2的输入校验实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文详细介绍了跨站脚本攻击(XSS)的基本概念、工作原理,并通过实际案例演示如何构建XSS漏洞的测试环境,以及探讨了XSS攻击的不同形式和防御策略。 ... [详细]
  • 本文探讨了在使用 MyBatis 进行批量数据处理时遇到的参数绑定异常问题,并提供了详细的解决方案。 ... [详细]
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文探讨了在SharePoint环境中使用BDC(Business Data Catalog)时遇到的问题及其解决策略,包括XML文件导入SSP后的不可见性问题以及与远程SQL Server 2005连接的难题。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了如何在 EasyUI 框架中实现 DataGrid 组件的分页功能,包括配置方法和常见问题的解决方案。 ... [详细]
  • 第1章选择流程控制语句1.1顺序结构的基本使用1.1.1顺序结构概述是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行 ... [详细]
  • 华为云openEuler环境下的Web应用部署实践
    本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ... [详细]
  • 现在的新手程序猿,动不动就是框架,就连外面培训的也是框架,我就问一句,没了框架是不是就啥也不会了 ... [详细]
  • 本文探讨了在不同场景下如何高效且安全地存储Token,包括使用定时器刷新、数据库存储等方法,并针对个人开发者与第三方服务平台的不同需求提供了具体建议。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 本文详细介绍了如何在Windows和Linux系统上配置Openfire服务器,包括安装步骤、数据库配置及端口映射等关键环节。 ... [详细]
  • 本文详细对比了HashMap和HashTable在多线程环境下的安全性、对null值的支持、性能表现以及方法同步等方面的特点,帮助开发者根据具体需求选择合适的数据结构。 ... [详细]
author-avatar
981378224_014f95
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有