`
SIHAIloveYAN
  • 浏览: 119936 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

struts2教程(5)--请求参数校验

 
阅读更多

一、请求参数校验介绍

校验的分类 客户端数据校验 服务器端数据校验

客户端数据校验 ,通过JavaScript完成校验 (改善用户体验,使用户减少出错 )

服务器数据校验 ,使用框架内置校验功能struts2 内置校验功能 )----- 必须的

struts2 支持校验方式

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

配置校验 XML配置校验(主流) 和 注解配置校验

二、手工代码校验请求参数

步骤一: 封装数据

步骤二: 实现校验Action,必须继承ActionSupport

步骤三: 覆盖validate方法,完成对Action的业务方法 数据校验

通过代码逻辑判断参数是否有效,如果参数非法 this.addFieldError (ActionSupport提供)

workflow拦截器 跳转回 input页面

步骤四: jsp中 通过<s:fieldError/> 显示错误信息

* validate方法会对Action中所有业务方法进行校验,如果只想校验某一个方法 validate方法名()

三、Xml配置方式数据校验

XML配置方式 数据校验

代码校验 不适用于大型项目, 流程数据复杂时,开发量和维护量都会很大

xml配置校验原理 : 将很多校验规则代码已经写好,只需要在xml中定义数据所使用校验规则就可以了

步骤一 :编写jsp

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

步骤三 :封装请求参数

使用xml校验 必须提供get方法

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

Action所在包 编写Action类名-validation.xmlAction所有业务方法进行校验

引入DTD

------ xwork-core-2.3.7.jar xwork-validator-1.0.3.dtd

	<!DOCTYPE validators PUBLIC

   "-//Apache Struts//XWork Validator 1.0.3//EN"

   "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">


内置校验器定义文件

xwork-core-2.3.7.jar /com/opensymphony/xwork2/validator/validators/default.xml

内建校验器

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指定最大值)

案例

required  必填校验器

<field-validator type="required">

       <message>性别不能为空!</message>

</field-validator>

 

requiredstring  必填字符串校验器

<field-validator type="requiredstring">

       <param name="trim">true</param>

       <message>用户名不能为空!</message>

</field-validator>

 

stringlength:字符串长度校验器

<field-validator type="stringlength">

<param name="maxLength">10</param>

<param name="minLength">2</param>

<param name="trim">true</param>

<message><![CDATA[产品名称应在2-10个字符之间]]></message>

</field-validator>

 

int:整数校验器

<field-validator type="int">

<param name="min">1</param>

<param name="max">150</param>

<message>年龄必须在1-150之间</message>

</field-validator>

 

date: 日期校验器

<field-validator type="date">

<param name="min">1900-01-01</param>

<param name="max">2050-02-21</param>

<message>生日必须在${min}到${max}之间</message>

</field-validator>

 

url:  网络路径校验器

<field-validator type="url">

<message>传智播客的主页地址必须是一个有效网址</message>

</field-validator>

 

email:邮件地址校验器

<field-validator type="email">

<message>电子邮件地址无效</message>

</field-validator>

 

regex:正则表达式校验器

<field-validator type="regex">

     <param name="regexExpression"><![CDATA[^13\d{9}$]]></param>

     <message>手机号格式不正确!</message>

</field-validator>

 

fieldexpression : 字段表达式校验

<field-validator type="fieldexpression">

       <param name="expression"><![CDATA[(password==repassword)]]></param>

       <message>两次密码输入不一致</message>

</field-validator>

程序源代码:


1、regist.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>

</head>

<body>
	<s:fielderror/>
	<form action="${pageContext.request.contextPath}/regist" method="post">
		username:<input type="text" name="username"><s:fielderror fieldName="username.message"/><br>
		password:<input type="password" name="password"><s:fielderror fieldName="password.message"/><br>
		repassword:<input type="password" name="repassword"><br>
		
		hobby:<input type="checkbox" name="hobby" value="eat">吃<input
			type="checkbox" name="hobby" value="drink">喝<input
			type="checkbox" name="hobby" value="play">玩<br> age:<input
			type="text" name="age"><br> birthday:<input type="text"
			name="birthday"><br> 
			
		email:<input type="text" name="email"><br>
		url:<input type="text" name="url"><br>
		telphone:<input type="text" name="telphone"><br>	
			<input type="submit" value="注册">
	</form>
</body>
</html>

2、类型转换类

package com.sihai.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

public class MyTypeConverter extends StrutsTypeConverter {

	// 接收页面传递的数据封装到javaBean.
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {

		// System.out.println(context); //ognl.OgnlContext@faae2497
		// System.out.println(values[0]); //[Ljava.lang.String;@100c4d
		// System.out.println(toClass); //class java.util.Date

		String value = values[0];
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		Date date = null;

		try {
			date = sdf.parse(value);
		} catch (ParseException e) {

			// e.printStackTrace();
			throw new RuntimeException();
		}

		return date;
	}

	@Override
	public String convertToString(Map context, Object o) {
		return null;
	}

}

3、UserAction-regist-validation.xml

<?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">

<validators>
	<!-- 对username属性进行校验 -->
	<field name="username">
		<!-- 指定username不能为空 -->
		<field-validator type="requiredstring">
			<!-- 错误信息 -->
			<message>用户名不能为空--------</message>
		</field-validator>
		<!-- 长度校验,规定用户名必须在6-10位之间 -->
		<field-validator type="stringlength">
			<param name="maxLength">10</param>
			<param name="minLength">6</param>
			<message>用户名必须在${minLength}-${maxLength}位之间</message>
		</field-validator>
	</field>

	<!-- 对age进行校验,规定年龄必须在10-40之间 -->
	<field name="age">
		<field-validator type="int">
			<param name="min">10</param>
			<param name="max">40</param>
			<message>年龄必须在${min}--${max}之间</message>
		</field-validator>
	</field>

	<!-- 对birthday进行校验 -->
	<field name="birthday">
		<field-validator type="date">
			<param name="min">1974-01-01</param>
			<param name="max">2004-12-31</param>
			<message>生日必须在${min}年到${max}年之间</message>
		</field-validator>
	</field>

	<!-- 校验邮箱 -->
	<field name="email">
		<field-validator type="email">
			<message>邮箱格式不正确</message>
		</field-validator>
	</field>

	<!-- url校验 -->

	<field name="url">
		<field-validator type="url">
			<message>url不能这空,类似于http://www.baidu.com</message>
		</field-validator>
	</field>

	<!-- 使用正则 -->
	<field name="telphone">
		<field-validator type="regex">
			<param name="regexExpression"><![CDATA[^135[0-9]{8}$]]></param>
			<message>电话号码必须是135xxxxxxxx</message>
		</field-validator>
	</field>

	<field name="repassword">
		<field-validator type="fieldexpression">
			<param name="expression"><![CDATA[(password==repassword)]]></param>
			<message>两次密码输入不一致</message>
		</field-validator>
	</field>

</validators>	


如何对指定的方法校验

格式 Action类名-ActionName(<action>元素name属性)-validation.xml

例如 校验AddCustomerActionexecute方法 配置<action name="addcustomer" .../>校验文件名字: AddCusotmerAction-addcustomer-validation.xml


四、自定义校验规则

步骤一: 自定义校验器 必须实现 Validator 接口

通常自定义校验器 继承 ValidatorSupportFieldValidatorSupport

ValidatorSupport 针对不是一个输入字段 (两个密码一致)

FieldValidatorSupport 针对是一个输入字段 (用户名非空)

步骤二: 注册校验器

在工程的src下新建validators.xml文件

引入 xwork-core-2.3.7.jar xwork-validator-config-1.0.dtd

步骤三 使用校验器

Action所有包 创建Action类名-validation.xml

分享到:
评论

相关推荐

    Struts2 校验器

    5. **校验结果处理**:当验证失败时,Struts2会将错误信息添加到ActionContext中,然后可以通过OGNL表达式在JSP页面中展示。同时,Action的execute方法不会执行,直到所有验证都通过。 6. **拦截器(Interceptor)*...

    struts-2.3.34-all.zip

    默认提供了一些内置拦截器,如params预处理请求参数,validation进行数据校验。 4. **结果类型(Result)**:负责将Action执行的结果转发到指定的视图,如JSP、FreeMarker模板等。 5. **模型驱动(ModelDriven)和...

    Struts2输入校验总结

    5. **内置校验器**:Struts2提供了丰富的内置校验器,覆盖了从简单的类型检查到复杂的数据验证。例如`required`用于检查字段是否为空,`int`和`double`用于数值类型检查,`email`用于电子邮件地址验证等。 综上所述...

    struts-2.3.31-all.zip

    7. **类型转换**:Struts2提供了自动类型转换机制,能够将HTTP请求参数自动转换为Action类的属性。 8. **异常处理**:Struts2提供了一套全面的异常处理机制,能够优雅地处理运行时异常并生成相应的错误页面。 在...

    Struts2入门教程-162页.pdf

    本教程将带领初学者逐步掌握Struts2的基本概念、核心组件以及实用功能。 第1章:STRUTS2入门 这一章节主要介绍Struts2的基础知识,包括为什么需要Struts2,它与传统的Struts1有什么不同,以及如何搭建一个基本的...

    struts2-login校验.rar

    对于login数据的校验,Struts2提供了一种称为拦截器(Interceptor)的机制,它可以拦截用户的请求,在Action执行前后进行额外的操作。例如,我们可以创建一个认证拦截器,检查用户提交的用户名和密码是否有效,如果...

    struts-2.2.1.1-all.rar

    通过OGNL,可以在JSP页面上直接访问Action的属性,也可以在Action中设置请求参数。 5. **Tiles插件**: Struts 2的Tiles插件提供了布局和组合视图的功能,允许开发者创建可重用的页面片段,提高代码复用率。 6. **...

    Struts2的输入校验

    3. 服务器端校验:当请求到达服务器时,Struts2会尝试调用`validateXxx()`方法,其中`Xxx`对应于即将执行的业务方法名称。如果没有找到特定的验证方法,就会调用通用的`validate()`方法。 4. 如果所有校验都通过,...

    struts2输入校验总结

    - Struts2的类型转换器会尝试将HTTP请求参数转化为Action类中属性的对应类型。 2. **异常处理**: - 在转换过程中如果出现异常,Struts2会将异常信息存储在`ActionContext`中,`conversionError`拦截器会将这些...

    传智播客struts2教程

    在提供的压缩包文件中,"21_传智播客struts2.1视频教程_输入校验的流程.rar"很可能包含了关于如何实现Struts2输入校验的具体步骤和示例,包括创建校验规则、处理校验失败的场景等内容。"20_传智播客struts2.1视频...

    struts2的数据校验

    在一个典型的Struts2应用中,当用户提交表单后,请求会被DispatcherServlet捕获并转发给Struts2的FilterDispatcher。接着,Struts2根据配置找到对应的Action,执行校验逻辑,如果校验失败,则返回原来的视图(通常...

    struts2标签+校验+SSH

    再者,Struts2提供了内置的类型转换器,能够自动将请求参数转换为所需类型,简化了开发者的工作。在Struts1中,如果需要自定义类型转换,需要注册到BeanUtil中,而在Struts2中则更为简便。 此外,Struts2支持多种...

    struts-2.3.16.1-all

    常见的拦截器有`params`(处理请求参数)、`validation`(进行数据校验)和`workflow`(处理Action状态)。 4. **Result(结果)**:结果负责将Action的执行结果转发到相应的视图。它可以是JSP、Freemarker模板或...

    struts2最新版本 struts-2.3.28

    3. **Interceptor(拦截器)**:拦截器是Struts2的重要特性,它在Action执行前后插入代码,实现了如日志、权限检查、数据校验等常见功能。例如,`ParamsInterceptor`用于参数绑定,`ValidationInterceptor`进行表单...

    教程_Struts2教程

    3. **拦截器**:拦截器是Struts2的重要特性,它们在Action调用前后执行,可以实现如日志记录、权限检查、数据校验等常见功能。常见的拦截器有Params(参数解析)、Validation(验证)、Exception(异常处理)等。 4...

    Struts-2.3.24-2.3.31-2.5.5lib包

    常见的拦截器如`params`(参数校验)、`validation`(验证)、`exception`(异常处理)等,它们按照定义的顺序执行。 4. **ModelDriven**:Struts2支持ModelDriven模式,可以将业务对象直接绑定到Action,简化了...

    struts2 教程 讲义.(pdf)

    4. **拦截器(Interceptor)**:拦截器是Struts2的核心特性之一,它们按顺序执行,可以在请求到达Action之前或之后执行额外的操作,如日志记录、权限检查、数据校验等。常见的拦截器有Validation拦截器(负责数据...

    Struts学习----Action 的配置和使用(源码学习)

    `ActionForm`通常用于封装请求参数,`ActionMapping`则提供了关于Action配置的信息。在业务逻辑处理完成后,Action会返回一个`ActionForward`对象,指示Struts转向哪个JSP页面。 压缩包中的`Struts1.x_login`可能是...

Global site tag (gtag.js) - Google Analytics