害怕别人乱输数据吗?提高你的数据校验功能-AJAX输入校验(8)

7.4  AJAX输入校验

Struts 2框架在使用客户端校验的时候,由于需要转换为JavaScript脚本,所以并不是所有服务器端的校验规则均能转换为客户端校验,而AJAX校验则可以使用所有的服务器端校验规则。

AJAX是一种新兴的技术,主要特点是可以异步处理用户请求,例如,用户在填写一个表单的时候,当填写完一个文本框后,该文本框失去焦点的同时,会异步地完成同服务器的交互,提示校验信息,而不是所有表单填写完后单击“提交”按钮时显示校验信息。

在这里笔者简单演示一个示例,让读者体验AJAX的特点,关于AJAX的详细内容,读者可以参考本书后面的介绍。

7.4.1  配置AJAX环境

下面笔者按照建立顺序,引导读者配置AJAX环境。

1.安装dwr-1.1-beta-3.jar文件

Struts 2框架要整合AJAX,需要一个JAR文件,读者可以在Struts 2的struts2-showcase-2.0.11应用示例中找到,在该示例中lib目录下有一个dwr-1.1-beta-3.jar文件,将该文件复制到当前Web应用的WEB-INFlib目录下。

★ 注意 ★

struts2-showcase-2.0.11为一个war压缩文件,读者可以解压该文件来获得dwr-1.1- beta-3.jar。

 

2.dwr.xml文件

建立一个dwr.xml配置文件,该文件保存在同web.xml相同的目录下,在该文件中加入如下内容:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE dwr PUBLIC

    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"

    "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>

    <allow>

        <create creator="new" javascript="validator">

            <param name="class" value="org.apache.struts2.validators.DWRValidator"/>

        </create>

        <convert converter="bean" match="com.opensymphony.xwork2.ValidationAware Support"/>

    </allow>

    <signatures>

        <![CDATA[

        import java.util.Map;

        import org.apache.struts2.validators.DWRValidator;

        DWRValidator.doPost(String, String, Map<String, String>);

        ]]>

    </signatures>

</dwr>

★ 说明 ★

该文件内容为固定格式。

 

3.web.xml文件

在web.xml文件中加入相关配置内容,修改后的内容如代码7.20所示。

代码7.20  加入AJAX配置的web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" version="2.4"

    xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Struts Blank</display-name>

    <!--配置Struts 2的核心filter-->

    <filter>

        <filter-name>struts2</filter-name>

        <!--配置Struts 2的核心实现类-->

        <filter-class>

            org.apache.struts2.dispatcher.FilterDispatcher

        </filter-class>

    </filter>

    <filter-mapping>

        <!--拦截所有的URL请求-->

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!--配置欢迎界面-->

    <!-- 配置Struts2的核心Servlet -->

    <servlet>

        <servlet-name>dwr</servlet-name>

        <!-- 指定Servlet的实现类 -->

        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

        <!-- 指定处于开发阶段 -->

        <init-param>

            <param-name>debug</param-name>

            <param-value>true</param-value>

        </init-param>

    </servlet>

    <!-- 指定DWR的核心Servlet拦截的URL -->

    <servlet-mapping>

        <servlet-name>dwr</servlet-name>

        <url-pattern>/dwr/*</url-pattern>

    </servlet-mapping>

    <welcome-file-list>

        <welcome-file>index.html</welcome-file>

    </welcome-file-list>

</web-app>

至此,一个简单的AJAX环境便搭建完成了。

7.4.2  建立业务控制器

建立一个简单的业务控制器实现类,如代码7.21所示。

代码7.21  AJAX校验示例的业务控制器

package ch7;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class Reg_ajax_Action extends ActionSupport {

    private String name;

    private int age;

    private Date birthday;

    //属性的getter和setter方法

 public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public Date getBirthday() {

        return birthday;

    }

    public void setBirthday(Date birthday) {

        this.birthday = birthday;

    }

}

该Action非常简单,只是定义了3个相应的属性。在配置文件中加入如下内容:

<action name="Reg_ajax_Action" class="ch7.Reg_ajax_Action">

            <result name="input">/ch7/reg-ajax.jsp</result>

</action>

7.4.3  建立校验规则文件

建立一个Reg_ajax_Action-validation.xml校验规则文件,如代码7.22所示。

代码7.22  AJAX校验示例的校验规则文件

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<!--

    Add the following DOCTYPE declaration as first line of your XXX-validation.xml file:

    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

-->

<validators>

    <field name="name">

        <field-validator type="requiredstring">

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

        </field-validator>

    </field>

    <field name="age">

        <field-validator type="int">

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

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

            <message>年龄必须在13至19岁之间</message>

        </field-validator>

    </field>

    <field name="birthday">

        <!--定义类型为date-->

        <field-validator type="date">

            <!--校验生日有效时间段-->

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

            <param name="max">2006-01-01</param>

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

        </field-validator>

    </field>

</validators>

★ 说明 ★

该校验规则文件也是一个标准的校验规则文件。

 

7.4.4  建立JSP视图

建立一个reg-ajax.jsp视图文件,如代码7.23所示。

代码7.23  AJAX校验示例的JSP视图

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!-- START SNIPPET: ajaxValidation -->

<html>

<head>

    <title>Validation - Basic</title>

    <s:head theme="ajax"/>

</head>

<body>

<s:form method="post" validate="true" theme="ajax">

    <s:textfield label="用户名" name="name"/>

    <s:textfield label="年龄" name="age"/>

    <s:textfield label="生日" name="birthday"/>

    <s:submit/>

</s:form>

</body>

</html>

<!-- END SNIPPET: ajaxValidation -->

该文件同以往JSP视图文件不同的是,在<s:form/>标签中加入了theme="ajax"属性定义。

7.4.5  运行AJAX校验示例

在浏览器中输入http://localhost:8080/bookcode/ch7/Reg_ajax_Action!input.action,在运行界面年龄一栏中输入“0”,当光标焦点离开该文本框时,会立刻显示校验异常信息,而不需要单击“submit”按钮后才显示校验异常信息。可见,AJAX使用了异步的方式同服务器端进行交互,并在某个元素失去焦点时触发。其运行界面如图7.11所示。

AJAX技术给用户带来了更加友好的体验,请读者参考本书中后面详细的介绍。

★ 注意 ★

运行本示例时,需要在地址栏输入http://localhost:8080/bookcode/ch7/Reg_ajax_ Action!input.action,而不是http://localhost:8080/bookcode/ch7/test.jsp。

 

图7.11  AJAX校验界面

 

时间: 2024-10-26 20:39:07

害怕别人乱输数据吗?提高你的数据校验功能-AJAX输入校验(8)的相关文章

Android利用SQLiteStatement提高数据库插入数据的效率

MainActivity如下: package cc.testdb; import cc.database.DBUtils; import cc.domain.Person; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; impor

应用-如何防止别人乱传文件?

问题描述 如何防止别人乱传文件? 事情是这样的,我们有一个应用崩溃日志的上传api,但是有人利用这个api上传了大量文件,想攻击或捣乱吧,我现在加入了文件类型以及文件大小的检查,请问有什么方法可以尽量防止这种情况?做简单的加密验证身份? 解决方案 文件乱问题读写文件类(防止乱码) 解决方案二: 登录后才允许上传..并且增加验证码或者表单token什么的,防止知道接口模拟登录直接post内容到接口 解决方案三: 要求登录后才可以上传,而注册必须经过手机号验证,限制大小,限制流量,如果发现用户肆意上

通过提高冷却效率削减数据中心能源成本的五大战略

伴随着电价和IT能耗的持续上升,IT相关的能源成本正受到越来越严格的审查.在一处精心设计的数据中心,冷却耗电成本大约占到总的耗电量的37%.换言之,其实这在许多情况下,意味着通过提高冷却效率来降低IT能源成本带来了机会. 本文中,我们将为广大读者诸君介绍关于提高数据中心冷却效率的五大战略: 1.适当密封的数据中心环境 一款蒸汽密封在控制相对湿度,从而减少了不必要的加湿和除湿方面发挥了至关重要的作用. 2.优化气流 机架布置.机房空调布局和线缆管理都会影响到在关键设施内空气流通的能量消耗量. 3.

大数据应当提高竞争优势,进行价值兑现

假如有一天能够预测未来,那么你首先要做的事情是什么?买彩票吗?那第二件.第三件事情呢? 先卖个关子,我们后面再说这件事情. 大数据是个产业,广义上指的是在这个信息过载时代围绕着海量信息产生.传播.收集.处理.创造价值的整个产品链条;狭义上一般指大数据存储与处理.数据挖掘的相关产业.目前市场上利用大数据最多的一般在于分析和预测. 根据本人10年来在这个行业的从业经验,大数据与前两年的云计算.再往前的网格计算.并行计算都是相同产业链上几个环节,它是作为概念被媒体和从业者炒作起来的.但不可否认的是,我

提高交通大数据利用率,改善交通拥堵现状

如今交通拥堵随处可见,在公路.空中.铁路交通等发生的一系列拥堵不仅会造成时间的浪费.空气的污染,还会使社会发展付出昂贵的代价.在伦敦.布鲁塞尔,上班族每年至少要浪费50个小时在交通拥堵上,这几乎等同于一周的工作时间.在欧洲,交通拥堵所带来的代价是耗费掉近百分之一的GDP.在美国,仅航班延误这一项就能耗费近60亿美元的经济成本. 而现在对于这种损耗已经有了相应的解决方案.麦肯锡全球研究院在2013年宣布,通过大数据对现有的基础设施的进一步强化管理和维护,每年就节省将近4000亿美元的支出.通过对交

特朗普再输一局,美国银行认同数据中心清洁能源采购计划

日前,美国银行宣布加入了支持采用可再生能源计划的大型数据中心运营商和大型云服务提供商的阵营,他们对旨在鼓励服务提供商为数据中心提供可再生能源的原则表示支持. Future of Internet Power(未来互联网发展电力)集团的成员包括Adobe,Facebook和Salesforce等公司,其目标是"以100%的可再生能源为互联网提供电力".美国银行是第一家加入该集团的金融服务公司,也是没有参与制定原则的第一个成员.     位于纽约市的美国银行大厦 Social Respon

MySQL如何发型不乱的应对半年数十TB数据增量

文章出自:听云博客        前段时间,Oracle官方发布了MySQL 5.7的GA版本.新版本中实现了真正意义的并行复制(基于Group Commit的Group Replication),而不再是基于schema的并行复制.这一特性极大的改善了特定场景下的主从复制延迟过高的状况.随着MySQL成熟度的提升,越来越多的用户选择使用MySQL存放自家的数据,其中不乏使用MySQL来存放大量数据的.        在过去的半年多时间里,听云业务量呈爆发式增长,后端的数据量由去年第一季度的几T

大数据时代带来喜忧参半,数据发展正面临转折点

近年来,大数据已经覆盖了许多领域,包括互联网领域.许多应用和平台热衷于搜集用户的信息.而在近日举行的SXSW(South by Southwest,西南偏南)大会上,专家们却表达了对于数据会歧视用户的担忧. 会上,独立隐私安全专家Ashkan Soldani提及了IBM的一款能够计算"恐怖主义得分"的软件.这款软件的目的是通过用户数据,计算从叙利亚来到欧洲的人们参与恐怖活动的概率. 大数据(bigdata)一词越来越多地被提及,人们用它来描述和定义信息爆炸时代产生的海量数据,并命名与之

【大数据100分】大数据架构及行业大数据应用(中级教程)

[大数据100分]南大通用CTO武新:大数据架构及行业大数据应用[大数据中级教程] 主讲嘉宾:武新 主持人:中关村大数据产业联盟 副秘书长陈新河 承办:中关村大数据产业联盟 武新,南大通用高级副总裁兼CTO,法国奥尔良大学和法国国家科研中心博士:南大通用GBASE系列数据库产品的总设计师.在著名的甲骨文公司任职12年,是世界顶级的Oracle数据库专家.2010年获得中组部实施的国家"千人计划"荣誉(海外高层次人才引进计划),是国内基础软件行业唯一入选的数据库技术专家.对目前最新兴的列