08_struts2_表单验证

合集下载

Struts2 极速表单验证框架 说明书

Struts2 极速表单验证框架 说明书

1 Struts2极速表单验证框架使用说明书struts ‐plusStruts enhancement, includes quick form validation, permission mgmt. Struts 框架增强, 包括极速表单验证, 权限管理等.子模块之Struts 2 极速表单验证框架作者: 刘长炯(beansoft@)日期: 2010‐01‐20版本: 0.1修订历史2010‐01‐20 初始版1 Struts2极速表单验证框架使用说明书..................................................................................1 2 Struts 2 极速表单验证框架简介...........................................................................................2 3 项目许可...................................................................................................................................3 4 下载本项目...............................................................................................................................3 5 演示应用...................................................................................................................................4 6 整合步骤step by step...............................................................................................................8 7 验证规则表达式详解.............................................................................................................12 8 和RapidValidation 配合实现前后台一致验证.......................................................................13 9 如何扩展验证规则.................................................................................................................14 10 下一版本开发计划 (17)2 Struts 2 极速表单验证框架简介Struts Plus, Struts + 项目, 计划包含极速表单验证框架, 权限管理等子模块. 目前主要关注于 Struts 2 方面的生产力提高项目, 主要基于注解方式进行增强, 并提供抽象层, 使项目仅仅依赖于 Struts 本身, 而不需要强制您使用某种业务层和数据层框架. 项目的许可采用MIT协议, 您可自由的使用本项目, 但需遵循MIT协议保留本人版权签名及MIT协议本身.本文主要讲述子模块Struts 2 极速表单验证框架(Struts 2 QuickFormValidation).本验证机制基于表达式和注解(Annotation), 验证规则的扩展通过实现验证接口进行.诞生历史:2009年12月18日晚提出框架原理, 并于2009年12月19日晨提出实现思路, 最终框架核心初步完成于2009年12月20日(周日), 2010‐01‐20日整理发布.在项目的开发中, 表单验证需要用去开发者大量的时间, 尤其是为了保证前后台的验证规则一致时, 更是需要大量的人力物力. 虽然Struts 2本身的验证框架可以保证前后台一致, 但在使用和整合方式上, 需要编写大量的Validation XML文件, 费力费时容易出错, 尤其是实际开发中需要反复调整各种验证规则及其组合, 这时就更加困难; 扩展Struts 2的验证框架更是需要比较繁琐的步骤. 针对这些挑战, 笔者试图提供一种简便易用的方式来进行表单验证, 即基于Java注解和验证规则表达式.如下面的代码即可实现如下的验证要求: 1) 用户名不能为空, 最小长度5, 最大长度10, 只能输入英文字母; 2) 年龄字段只能输入数字, 最小值为18, 最大值为100; 验证失败时, 转向input页面并显示出错信息: ${validationErrors}.@FormValidator(input="form_tag", value=",用户名,required min-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18 max-value-100;") public String form_tag() throws Exception {return SUCCESS;}•最快速的后台表单验证框架•简洁,快速的验证语法•无需编写验证提示信息•错误消息在指定地方显示•支持组合验证•易于扩展•基于标准的Java Annotation添加验证,易于和现有项目的无缝集成•特殊应用场景支持,如:密码确认,结束日期必须大于开始日期•支持前后台一致的验证规则本框架主要是为了和前台基于JavaScript的开源验证框架RapidValidation(/p/rapid‐validation/ )使用统一的验证规则, 最大限度的减少重复的后台验证代码, 使用方式简便, 扩展方便.本框架依赖于:z Struts 2z Java 5或者更高版本3项目许可The MIT LicenseCopyright (c) 2010 刘长炯(beansoft@)Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INTHE SOFTWARE.4下载本项目您可访问/p/struts‐plus/downloads/list 来获取最新源代码包文件名说明大小struts2-quickvalidation-plugin-1.0-src.jar Struts 2 QuickFormValidation 26.81.0 sources 源码Featured KBstruts2-quickvalidation-plugin-1.0.jar Struts 2 QuickFormValidation1.0 jar Featured 26.8 KBstruts2-quickvalidation-demo.war 演示war包,部署至Tomcat6运行Featured 3.4 MBJavascript_RapidValidation.pdf JavaScript Rapid Validation框架的详细使用及规则说明文档(转载)176KB5演示应用可下载示例应用来体验Struts极速验证框架, 下载地址为:http://struts‐/files/struts2‐quickvalidation‐demo.war . 放入Tomcat后即可查看运行效果. 您可以本demo应用为基础快速的进行开发.本演示包含三个内容:纯后台表单验证前后台一致表单验证(前台验证基于RaplidValidation)前后台一致表单验证(Struts 2 Form 标签)本war包中的唯一的.java文件源码如下:package actions;import com.opensymphony.xwork2.ActionSupport;import common.validation.FormValidator;public class HelloWorldAction extends ActionSupport {// 或者implements Action {@FormValidator(input="form", value=",用户名,required min-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18 max-value-100;" +"password,密码,required;" +"password2,重复密码,required equals-password-原始密码;" +"email,,validate-email;" +"gender,性别,validate-one-required;" +"ip,,validate-ip;" +"date,生日,validate-date;" +"num1,数字1,validate-number;" +"num2,数字2,validate-number less-than-num1-数字1;" +"float,数字范围,float-range-1-10;" +"address,地址,validate-chinese;" +"zip,邮编,validate-zip;" +"id_num,身份证,validate-id")public String form() throws Exception {return SUCCESS;}@FormValidator(input="form_js", value=",用户名,required min-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18 max-value-100;" +"password,密码,required;" +"password2,重复密码,required equals-password-原始密码;" +"email,,validate-email;" +"gender,性别,validate-one-required;" +"ip,,validate-ip;" +"date,生日,validate-date;" +"num1,数字1,validate-number;" +"num2,数字2,validate-number less-than-num1-数字1;" +"float,数字范围,float-range-1-10;" +"address,地址,validate-chinese;" +"zip,邮编,validate-zip;" +"id_num,身份证,validate-id")public String form_js() throws Exception {return SUCCESS;}@FormValidator(input="form_tag", value=",用户名,required min-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18 max-value-100;") public String form_tag() throws Exception {return SUCCESS;}}下面是三个演示的效果:6整合步骤step by step1. 将文件struts2‐quickvalidation‐plugin‐1.0.jar放入Web项目的WEB‐INF/lib目录下;2. 修改您自己的代码的src/struts.xml中的package定义继承自quickValidation;示例代码:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="test" namespace="" extends="quickValidation"> <action name="helloworld" class="actions.HelloWorldAction"> <result name="index">/index.jsp</result><result name="success">/helloworld.jsp</result></action></package></struts>3. 使用注解加入验证规则表达式;在每个需要调用的Action的入口方法处, 加入@FormValidator注解.注解的完整语法如下:@common.validation.FormValidator(input="出错时需要返回的result别名", enabled=true/false, value="表单参数名称1,表单参数中文提示信息1,规则1 规则2…; 表单参数名称2,表单参数中文提示信息2,规则1 规则2…;更多字段验证信息")input参数: 可选. 如果不指定, 则出错时仍然继续进入到Action方法中; 如果指定, 则在表单验证出错时, 返回到给定的result中, 例如: 原始表单输入页面或者统一的错误输出页面; enabled参数: 可选. 是否启用此验证规则, 如果不指定, 则忽略解析注解, 不进行任何验证; value参数: 必填选项, 可输入一个或者多个表单参数验证规则. 简单说就是: [字段1验证配置];[字段2验证配置];…. 虽然不建议, 然而字段验证配置可以留空, 此时不会进行任何验证处理.而每个验证配置的格式如下:表单参数名称: 必填选项. 指向输入的表单控件的名称(input的name);表单参数中文提示信息: 可选. 如果为空, 则和表单参数名称相同. 不为空时, 则显示在出错时的信息提示的开头位置;规则1 规则2…: 可选. 理论上可加入任意多个验证规则, 以单个空格隔开. 在验证开始后, 依次进行每个规则的验证并加入提示信息. 需要注意的是, 除required规则之外的所有规则只有当用户输入的字段值非空时, 才进行有效性验证, 如此便可避免所有字段都成为必填字段的问题发生.每个规则本身则由两部分组成: 规则名‐规则子名‐参数1‐参数2‐参数3‐….规则名和规则子名是固定名称, 不能任意填写, 这两个名称对应一个具体的规则实现类.其中参数是必填选项, 参数的意义则需要参考下一节的验证规则表达式中的说明. 下面举例说明若干验证规则:required 这是特殊规则, 不带规则子名, 也没有额外的参数;float‐range‐1‐20 其中float‐range分别是规则名和规则子名, 而1和20则分别是两个参数. 特别需要注意的是有负数时的情况此时参数列表变为: float-range--1--20, 此时参数值分别为‐1和‐20.如果需要给另一字段加入验证规则, 则以分号隔开.下面是若干验证的示例及其解释:规则 解释@FormValidator 空的验证规则, 不进行任何操作@FormValidator("username,用户名,required min‐length‐5") 对username字段进行验证, 规则为必填, 最小长度为5; 出错时分别提示:用户名不能为空用户名的长度不能小于5, 当前长度为1.由于没有指定input参数, 所以当验证失败时, 仍然会继续进入到业务逻辑处理, 相关的错误信息则存入request 的attribute中.@FormValidator("username, ,required min‐length‐5")由于没有指定字段的中文提示, 因此出错时将提示:username的长度不能小于5, 当前长度为1.@FormValidator(input="index",value=" username,用户名,required min‐length‐5”) 这大概是最常用格式的验证规则的写法了. 此例和上例的区别为: 所以当验证失败时, 将进入input参数所指定的出错信息显示页面.@FormValidator(input="index",enabled=false,value=" username,用户名,required min‐length‐5”) 忽略所有验证规则处理, 常用于调试阶段.@FormValidator(input="index",value=" username,用户名,required min‐length‐5;password2,重复密码,required equals‐password‐原始密码;”) 此规则加入了对重复密码字段的验证, 出错时将提示:重复密码和原始密码的输入不一致@FormValidator(input="index",value="username,用户名,required min‐length‐5;password2,重复密码,required equals‐password;”) 此规则省略了另一字段的中文描述, 出错时将提示:重复密码和前面的输入不一致以下为一个完整的Action类示例代码:import com.opensymphony.xwork2.ActionSupport;import common.validation.FormValidator;public class HelloWorldAction extends ActionSupport {@FormValidator(input="index", value="username,用户名,requiredmin-length-5 max-length-10 validate-alpha;" +"age,年龄,validate-digits min-value-18max-value-100;password,密码,required;" +"password2,重复密码,required equals-password-原始密码;" +"gender,性别, validate-one-required")public String execute() throws Exception {return SUCCESS;}}4. 修改前台显示验证结果.根据Action的不同, 前台的显示划分为两类:普通的错误显示:所有错误信息: ${validationErrors}返回的内容是一个字符串, 显示了所有的出错信息, 而出错字体的颜色则需要用户自己去设置.出错信息的显示格式是以<br>分开的, 例如:用户名不能为空<br>密码不能为空<br>重复密码不能为空<br>性别必须至少选中一项<br>另一种推荐的做法是让Action继承自Struts2中的ActionSupport, 此时则可用Struts 2的标签来显示出错信息, 可定位到具体的字段:<%@ taglib prefix="s" uri="/struts-tags" %><s:actionerror /><s:fielderror/><s:form action="helloworld.action" method="post"><s:textfield name="username" label="用户名" /><s:password name="password" label="密码" /><s:submit/></s:form>或者使用纯JSP来编写页面来定位到单条错误:用户名: <input name=username value=${ername}> ${ername[0]}下面给出这两种写法的完整示例:<%@ page pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><html><head><style>.errorMessage {color:red;}.errorLabel {font-weight:bold}</style><title>测试页面</title></head><body><s:actionerror /><form action="helloworld.action" method=postenctype="multipart/form-data">用户名: <input name=username value=${ername}>${ername[0]} <br>年龄: <input name=age value=${param.age}><br>密码: <input name=password><br>密码重复: <input name=password2><br>邮件: <input name=email><br>性别: <input type=checkbox name=a>男<input type=checkbox name=a>女<br> IP地址: <input name=ip><br>数字1: <input name=num1>数字2: <input name=num2><br>日期:<input name=date><br>附件: <input name=file type=file><br><input type=submit value="提交"></form><span class="errorMessage">${validationErrors}</span>Struts 2表单标签示例:<s:fielderror/><s:form action="helloworld.action" method="post"><s:textfield name="username" label="用户名" /><s:password name="password" label="密码" /><s:submit/></s:form></body></html>7验证规则表达式详解说明: 加红色背景的部分是目前尚不支持的验证规则; 加黄色背景的是增加了第二个可选参数的规则(和前台验证规则略有变动).验证表达式 描述 示例 required 非空域,全部空格也算空validate-number 一个有效数validate-digits 只能包含0-9任意个数字validate-alpha 只能是字母a-z, A-Zvalidate-alphanum 只能是字母和数字的组合validate-email 只能是有效的emailvalidate-url 只能是有效的url地址validate-one-required 至少有一个被选中,例如一组checkbox, radiobutton,它们最好包含在一个div和span中validate-integer 只能是整数,可以有正负号validate-ip 有效的IP地址min-length-$number 最小长度是$number (此处$some表示一个特定的值)最小长度为8: min-length-8max-length-$number 最大长度是$number 最大长度为8:max-length-8 max-value-$number 输入域的最大值是$number 最大值为8.1:max-value-8.1 min-value-$number 输入域的最小值是$number 最大值为-8.1:max-value--8.1equals-$otherInputId-$othe rInputLabel 必须和某个input field相等,用于密码两次输入验证等,$otherInputLabel是可选项,用来描述另一字段信息equals-password重复密码和原始密码输入不一致:equals-password-原始密码less-than-$otherInputId-$o therInputLabel 小于某个input fieldless-than-otherInputId,多用于结束日期不能小于开始日期的需求,$otherInputLabel是可注:相等时也不能通过选项,用来描述另一字段信息great-than-$otherInputId-$ otherInputLabel 大于某个input fieldless-than-otherInputId,$o therInputLabel是可选项,用来描述另一字段信息validate-date-$dateFormat 只能是日期,$dateFormat为日期格式,$dateFormat的可选,默认格式为yyyy-MM-DD validate-date-yyyy年MM月dd 日validate-file-$type1-$type 2-$typeX 验证文件输入域选择的文件类型只能为声明的$type1 –$typeX中的一种validate-file-png-jpegfloat-range-$minValue-$max Value 必须是$minValue到$maxValue的一个浮点数1至20:float-range-1-20int-range-$minValue-$maxVa lue 必须是$minValue到$maxValue的一个整数length-range-$minLength-$m axLength 输入字符串的长度必须在$minLength到$maxLength之间validate-pattern-$RegExp 通过自定义正则表达式$RegExp来验证输入域的正确性 vaidate-patter n-/a/givalidate-chinese 只能是中文(以下为中国的相关验证)validate-phone 有效的电话validate-mobile-phone 有效的手机号validate-id-number 验证是否有效的身份证号码validate-zip 验证邮政编码validate-qq 验证QQ号码8和RapidValidation配合实现前后台一致验证RapidValidation (/p/rapid‐validation/) 是专注于前台的验证框架, 例如下面的例子:<!-- 为form增加required-validate class,标识需要验证form --><form id='helloworld' action="#" class='required-validate'> helloworld:</br><!--通过class添加验证: required表示不能为空,min-length-15表示最小长度为15 --><textarea name='content' class='requiredmin-length-15'></textarea></br><input type='submit' value='Submit'/><input type='reset' value='Reset'/></form>其对应的后台验证规则为:@FormValidator(input="index",value=" content,helloworld,required min‐length‐15”)请注意比较异同, 不同部分已经以红色粗体进行了区分, 相同部分则以绿色粗体标识.大家可以看到, 两者很容易就实现了一致的前后台验证规则.相关的说明文档请访问: /p/rapid‐framework/wiki/rapid_validation , 另外本项目也提供了一份完整文档的转载, 包含详细的规则说明文档和整合步骤:(http://struts‐/files/Javascript_RapidValidation.pdf ).9如何扩展验证规则要扩展验证只需要实现IValidator即可即可, 并将实现类放入包 common.quickvalid.validators下. 下面是IValidator接口定义:package common.quickvalid.validators;import java.util.Map;/***所有验证器的抽象接口.*@author beansoft*日期:2009-12-20*/public interface IValidator {/***实现验证方法.*@param fieldName字段name*@param fieldDescription出错时的字段描述信息*@param params参数列表<String key, String[] values>表单参数Map *@param args参数列表*@return验证信息,为空时表示没有任何出错信息,通过验证*/public String doValidation(String fieldName, String fieldDescription, Map<String, String[]> params, String... args) ;/***获取验证器本身的参数列表.*@return*/public String[] getArgs();/***设置验证器本身的参数列表*@param args-一个或者多个参数,允许为null*/public void setArgs(String[] args);/***获取原始表达式.*@return*/public String getExpression();/***设置原始表达式,用于日期,正则等验证方式,避免和-号冲突.*@param Expression*/public void setExpression(String expression);}在实践中, 已经提供了几种比较常见的实现类的抽象基类, 它们是:BaseValidator, 抽象的验证器实现, 仅实现了 setter和getter;BaseRegexValidator(继承自BaseValidator), 基于正则表达式验证的基类; BaseTwoNumberValidator(继承自BaseValidator), 提供基于两个数字规则的验证, 可获取两个参数(含‐号).类名有一定规则, 将第一个减号替换为下划线即可, 例如:float-range-$minLength-$maxLength 对应的类名是: length_range.下面则给出一些实现类, 供参考:手机号的验证:package common.quickvalid.validators;/***手机号验证*TODO更多号段的支持?*@author beansoft**/public class validate_mobile extends BaseRegexValidator {@Overridepublic String getMessage() {return"只能输入正确的手机号码,如:138********";}@Overridepublic String getRegEx() {return"(^0?[1][35][0-9]{9}$)";}}数字范围的验证:package common.quickvalid.validators;import java.util.Map;/***表单域取值浮点数验证*@author beansoft**/public class float_range extends BaseTwoNumberValidator {public String doValidation(String fieldName, String fieldDescription,Map<String, String[]> params, String... args) { super.setParams(params);String value = getValue(fieldName);super.parseTwoNumberArgs();//重新分析=args// 非空时进行验证if(value != null && value.length() > 0) {boolean result = false;try {(Double.parseDouble(value) <=resultDouble.parseDouble(args[0])) ||(Double.parseDouble(value) >Double.parseDouble(args[1]));} catch(Exception ex) {return fieldDescription + "的输入值不是有效的数字";}if(result) {return fieldDescription + "的输入值" + value + "应该为" + args[0] + "到" + args[1] + "之间的数字";}}return null;}}10下一版本开发计划z将验证规则表达式解析和执行部分独立出来作为核心引擎z兼容JDK 1.4 并提供独立调用的接口z提供Struts 1下的插件机制z提示文字国际化z增强前台验证, 提供时分秒的验证功能如果您对本项目有兴趣, 欢迎加入.。

如何在JavaScript中实现表单的验证和数据校验

如何在JavaScript中实现表单的验证和数据校验

如何在JavaScript中实现表单的验证和数据校验表单的验证和数据校验在前端开发中是非常重要的一部分,它可以确保用户输入的数据格式正确,有效地减少后端的数据处理压力,同时也能提高用户体验。

在本文中,我们将探讨如何在JavaScript中实现表单的验证和数据校验,并提供一些实用的技巧和示例代码。

### 1.表单验证的重要性表单是网页中用户输入数据的一个重要部分,用户可以通过表单提交各种类型的数据,比如文本、数字、日期、邮箱等等。

然而,用户输入的数据并不总是符合预期的格式和要求,这时候我们就需要对表单进行验证和数据校验,以确保输入数据的准确性和完整性。

表单验证的重要性主要体现在以下几个方面:-数据准确性:通过对表单的验证和数据校验,可以确保用户输入的数据格式正确,有效的减少后端的数据处理压力。

-用户体验:当用户输入了不符合规范的数据时,通过及时的反馈和提醒,可以有效地提高用户体验。

-安全性:通过对用户输入的数据进行验证和过滤,可以防止恶意输入和攻击,提高系统的安全性。

### 2.表单验证的方法在JavaScript中,我们可以通过几种方法来实现对表单的验证和数据校验:-使用原生JavaScript:通过JavaScript的事件监听和表单元素的属性来实现表单验证和数据校验。

-使用第三方库:如jQuery Validation、VeeValidate等,这些库提供了丰富的表单验证和数据校验功能,并且使用起来较为方便。

-使用HTML5的表单验证:HTML5提供了一些新的表单元素和属性,比如input的type属性、maxlength属性、pattern属性等,可以方便地实现表单的验证。

在本文中,我们将重点介绍使用原生JavaScript来实现表单验证和数据校验的方法。

### 3.表单验证和数据校验的步骤实现表单验证和数据校验的主要步骤分为以下几个部分:-监听表单提交事件:当用户提交表单时,我们需要触发验证和数据校验的逻辑。

Struts2校验器类型详解

Struts2校验器类型详解

Struts2校验器类型详解一、Struts2内建校验器位于xwork-2.0.4.jar压缩包中(com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。

default.xml文件定义了常用的校验器类型。

首先搞清楚:struts2字段校验器与非字段校验器的区别字段校验器配置格式:<field name="被校验的字段"><field-validator type="校验器名"><!--此处需要为不同校验器指定数量不等的校验规则--><param name="参数名">参数值</param>....................<!--校验失败后的提示信息,其中key指定国际化信息的key--><message key="I18Nkey">校验失败后的提示信息</message><!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--></field-vallidator><!-- 如果校验字段满足多个规则,下面可以配置多个校验器--></field>非字段校验器配置格式:<validator type="校验器名"><param name="fieldName">需要被校验的字段</param><!--此处需要为不同校验器指定数量不等的校验规则--><param name="参数名">参数值</param><!--校验失败后的提示信息,其中key指定国际化信息的key--><message key="I18Nkey">校验失败后的提示信息</message><!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--></validator>非字段校验:先指定校验器:由谁来校验,来校验谁!字段校验器:先指定校验的属性:我来校验谁,由谁来校验!下面是对应在包中的类:<validators><validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/><validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/><validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/><validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/><validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/><validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/><validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/><validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/><validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/><validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/><validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/><validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/><validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/><validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/><validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/><validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/></validators>二、各种类型校验器1、类型转换检验器:(1)非字段校验:<validator type="conversion"><param name="fieldName">myField</param><message>类型转换错误</message><param name ="repopulateField">true</param></validator>(2)字段校验:<field name="myField"><field-validator type="conversion"><message>类型转换错误</message><param name ="repopulateField">true</param></field-validator></field>fieldName:该参数指定检查是否存在转换异常的字段名称,如果是字段校验,则不用指定该参数。

struts2框架特征

struts2框架特征

struts2框架特征Struts2框架特征Struts2是一种流行的Java Web应用程序开发框架,其特征使其成为许多开发者的首选。

本文将介绍Struts2框架的特征,包括MVC 架构、强大的标签库、拦截器、数据验证、国际化支持以及灵活的配置等。

一、MVC架构Struts2采用了MVC(Model-View-Controller)架构,将应用程序的业务逻辑、数据模型和用户界面分离。

这种架构使开发者能够更好地组织代码、提高代码的可维护性,并能够更容易地进行代码重用和测试。

在Struts2中,Model代表数据模型,可以是POJO(Plain Old Java Object)或者是与数据库交互的实体类;View代表用户界面,通常是JSP页面;Controller则负责处理用户请求、调用业务逻辑,并将处理结果返回给用户。

二、强大的标签库Struts2提供了丰富的标签库,使开发者能够更轻松地构建用户界面。

这些标签库包括表单标签、数据展示标签、控制流标签等,可以大大简化页面开发的工作量。

例如,开发者可以使用Struts2的表单标签库来生成表单,并自动处理表单的数据绑定、验证和错误提示。

这样,开发者无需手动编写大量的HTML和JavaScript代码,能够更快速地完成表单开发。

三、拦截器Struts2的拦截器是其核心特性之一,可用于在请求到达Controller之前和之后执行一些通用的处理逻辑,如日志记录、权限验证、异常处理等。

开发者可以通过配置拦截器栈,将多个拦截器按照特定的顺序组合起来,实现复杂的请求处理流程。

拦截器的使用使得开发者能够将通用的处理逻辑从业务逻辑中分离出来,提高了代码的可维护性和重用性。

同时,Struts2还提供了许多内置的拦截器,如参数封装拦截器、文件上传拦截器等,方便开发者处理不同类型的请求。

四、数据验证在Web应用程序中,数据验证是一项重要的任务。

Struts2提供了强大的数据验证机制,开发者可以通过简单的配置实现对表单数据的验证。

struts2

struts2

/topic/128973struts2表单标签1、struts资源文件中文解决方法在命令行中输入以下命令native2ascii -encoding gb2312 ApplicationResources.properties ApplicationResourcesgbk.properties第一个文件为资源文件,第二个为新生成的文件,将新生成的文件拷入工程就可以了2、开发struts2流程1.创建web工程2.拷贝commons-fileupload-1.2.1.jar,commons-logging-1.0.4.jar,freemarker-2.3.13.jar,ognl-2.6.11.jar,struts2-core-2.1.6.jar,xwork-2.1.2.jar,放入web-inf--lib中3.在web.xml文件中添加struts2的核心Filter,过滤客户端发送过来的请求,代码如下<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>org.apache.struts2.dispatcher.FilterDispatcher为struts2中提供的一个控制器4.创建struts.xml文件,放在src目录下.代码如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="strutsqs" extends="struts-default"></package></struts>5.在src目录下创建一个类,创建几个属性及对应的get,set方法6.创建public String execute() throws Exception方法,7.在struts.xml文件中添加如下代码:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="strutsqs" extends="struts-default"><action name="login" class="ers.action.LoginAction"><result name="success">/Main.jsp</result><result name="failed">/Login.jsp</result></action></package></struts>3、创建拦截器:1.创建类继承AbstractInterceptor,覆盖intercept方法,代码如下public String intercept(ActionInvocation invocation) throws Exception {LoginAction action=(LoginAction)invocation.getAction();String result=invocation.invoke();return null;}2.在struts.xml文件中配置如下<package name="strutsqs" extends="struts-default"><interceptors><interceptor name="myInterceptor" class="ers.interceptor.LoginInterceptor"> <param name="name">简单拦截器</param></interceptor></interceptors><action name="login" class="ers.action.LoginAction"><result name="success">/Main.jsp</result><result name="failed">/Login.jsp</result><result name="input">/Login.jsp</result><interceptor-ref name="myInterceptor"></interceptor-ref></action></package>也可以创建拦截器栈<interceptors><interceptor name="myinterceptor1"class="com.haitian.bbs.interceptor.MyInterceptor"></interceptor> <interceptor name="myinterceptor2"class="com.haitian.bbs.interceptor.MyInterceptor2"></interceptor> <interceptor-stack name="stack1"><interceptor-ref name="myinterceptor2"></interceptor-ref><interceptor-ref name="myinterceptor1"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors>4.标签中引用资源文件内容<s:textfield name="age" key="regist.age" value="%{getText('regist.password')}"></s:textfield><s:select list=”#{‘1’:getText(‘sex.man’),’0’:getText(‘sex.women’)}”<s:text name=”bel”/>5.创建资源文件在src下创建messageResource_zh_CN.properties文件在src下创建struts.properties文件,添加struts.custom.i18n.resources=messageResource_zh_CN 6.Action中访问servlet APIActionContext ctx=ActionContext.getContext();ctx.getApplication()获得application对象ctx.put(“”,””);//相当于request.setAttribute(“”,””);ctx.getSession()//获得session对象get(Object key);//类似于调用HttpServletRequest的getAttribute(String name);方法Map getApplication();返回一个Map对象,该对象模拟了应该的ServletContext实例Map getSession();返回一个Map对象,该Map对象模拟了HttmpSession实例Map getParameters();获取所有的请求参数,类似于调用HttpServletRequest对象的getParameterMap方法Void setSession(Map session);直接传入一个Map实例,将实例里的key-value对转换成session的属性名\属性值HttpServletRequest request=ServletActionContext.getRequest();7.Action访问资源文件Action 继承ActionSupport调用this.getText(“ername”);Jsp访问资源文件<s:text name=”bel”/>8.资源文件_各国代码资源文件命名格式:baseName_language_country.propertiesLocale[] localeList=Locale.getAvailableLocales();for(int i=0;i<localeList.length;i++){System.out.println(localeList[i].getDisplayCountry()+”=”+localeList[i].getCountry()+””+localeList[i ].getDisplayLanguage()+”=”+localeList[i].getLanguage());}9.将struts.xml分开在struts.xml中添加如下代码,将其它配置文件导入<struts><include file=”struts-part1.xml”/>..</struts>被包含的配置文件是标准的struts2配置文件,一样包含dtd 信息、strut2配置文件的根元素,此时struts.xml文件中不能再定义action10全局结果result<global-results><result name="">/te.jsp</result></global-results>11模型驱动1创建一个JavaBean,生成setter,getter方法2创建action类实现ModelDriven接口12.创建拦截器1创建类继承AbstractInterceptor,覆盖intercept(ActionInvocation invocation)方法2. ActionContext ac=arg0.getInvocationContext();Map session=ac.getSession();获得session对象Object obj=session.get(“CURRENTUSERBEAN”);//获得session中是否存在此对象If(obj==null)没有登陆过Return “login”;ElseReturn invocation.invoke();3.LoginAction la=(LoginAction)invocation.getAction();获得被拦截的Action 实例4.String result=invocation.invoke();调用execute方法,将拦截方法返回的字符串做为拦截器的返回值或者返回其它字符串,此字符串与struts.xml文件中的result标签中的结果对应。

struts2常见面试题

struts2常见面试题

struts2常见面试题Introduction:Struts2是一种用于开发Java Web应用程序的开源Web应用框架。

在软件工程领域,Struts2常常是面试中的热门话题。

本文将介绍一些常见的Struts2面试题,并提供详细解答和示例。

Question 1: 什么是Struts2框架?它的主要特点是什么?Struts2是一个基于MVC设计模式的Web应用框架。

它通过集成多个核心组件(如拦截器、过滤器、表单验证等)提供了一套丰富的功能,用于简化开发和管理Java Web应用程序。

Struts2的主要特点包括:1. 松耦合:Struts2使用基于配置的方式来管理组件之间的依赖关系,降低了模块之间的耦合。

2. 灵活性:开发人员可以根据自己的需求进行扩展和定制,以适应不同的项目需求。

3. 可测试性:Struts2的组件松耦合特点使得单元测试变得容易,并且可以方便地模拟用户请求进行测试。

Question 2: Struts2的核心组件有哪些?Struts2的核心组件包括:1. Action:处理用户请求的核心组件,负责接收请求并执行相应的业务逻辑。

2. Interceptor:用于对请求进行预处理和后处理的拦截器组件。

3. Result:负责生成响应结果,可以是页面视图或其他格式的数据(如JSON、XML等)。

4. FilterDispatcher:负责将请求分发给合适的Action处理。

5. ValueStack:用于存储Action处理的结果数据,支持OGNL表达式以便于数据的访问和操作。

Question 3: 如何定义一个Struts2的Action?在Struts2中,可以通过以下几种方式来定义一个Action:1. 实现Action接口:通过实现Action接口,并提供相应的业务方法来处理请求。

2. 继承ActionSupport类:ActionSupport是一个提供了一些方便方法的抽象类,可以直接继承并实现自己的业务逻辑。

struts2面试题

struts2面试题

struts2面试题Struts2是一个基于Java开发的Web应用程序框架,被广泛应用于企业级Java应用开发中。

在面试中,面试官可能会提出一些关于Struts2的问题,以评估应聘者的技术水平。

下面是一些常见的Struts2面试题及其详细答案,希望对你在面试中有所帮助。

1. 什么是Struts2?Struts2是一个轻量级的、基于MVC模式的Web应用程序框架。

它采用Java Servlet API和JavaServer Pages (JSP)技术,并提供了一种简单易用的方式来开发可维护和可扩展的Web应用程序。

2. Struts2的主要特性是什么?Struts2的主要特性包括:- MVC架构:将应用程序分为模型、视图和控制器,使开发更容易管理和扩展。

- 拦截器:通过拦截器可以在请求处理的各个阶段添加自定义的逻辑。

- 标签库:提供了丰富的标签库,简化了页面开发。

- 表单验证:提供了灵活且强大的表单验证机制,可以验证用户输入的数据。

- 国际化支持:支持多语言和本地化。

- 配置简单:通过配置文件来管理应用程序的行为。

3. Struts2的工作原理是什么?Struts2的工作原理如下:1) 客户端发送HTTP请求到服务器。

2) 服务器将请求交给Struts2的过滤器(Filter)。

3) 过滤器通过配置文件找到对应的Action,并调用相应的方法。

4) Action处理请求,并返回一个结果页面的名称或一个结果对象。

5) 结果页面的名称通过配置文件进行映射,服务器将其发送给客户端。

4. 什么是Struts2中的Action类?Action类是Struts2框架中的核心组件,用于处理Web请求。

一个Action类对应一个业务功能,其包含了要执行的方法和数据。

它负责接收请求、处理业务逻辑、将结果返回给前端页面。

5. Struts2中的拦截器是什么?有哪些内置的拦截器?拦截器是Struts2中的组件,用于在请求处理的各个阶段添加自定义的逻辑。

如何在JavaScript中实现表单验证和数据校验

如何在JavaScript中实现表单验证和数据校验

如何在JavaScript中实现表单验证和数据校验表单验证和数据校验在JavaScript中是非常重要的,它们可以帮助我们确保用户在提交表单时输入有效的数据。

本文将介绍如何使用JavaScript实现表单验证和数据校验。

一、使用JavaScript实现表单验证在JavaScript中,可以使用一些常用的方法和技巧来验证表单的输入。

以下是实现表单验证的步骤:1.获取表单元素:首先,需要使用JavaScript选择器获取表单元素。

可以使用getElementById()、getElementsByTagName()或querySelector()等方法来获取表单元素。

2.添加事件监听器:接下来,可以使用addEventListener()方法为表单元素添加一个submit事件监听器。

这样,当用户提交表单时,可以触发相应的验证逻辑。

3.编写验证逻辑:在事件监听器中,可以编写一些验证逻辑。

例如,可以检查输入框是否为空、检查邮箱地址格式是否正确等。

可以使用正则表达式、条件语句等来实现不同的验证逻辑。

4.验证结果提示:最后,根据验证结果,可以使用alert()、innerHTML()或console.log()等方法来提示用户验证结果。

以下是一个示例代码,演示了如何使用JavaScript实现简单的表单验证:```javascript//获取表单元素var form = document.getElementById('myForm');//添加事件监听器form.addEventListener('submit', function(event) {//阻止表单默认提交行为event.preventDefault();//获取输入框的值var name = document.getElementById('name').value;//验证逻辑if (name === '') {alert('请输入姓名');} else {alert('提交成功');form.reset();}});```二、使用JavaScript实现数据校验除了表单验证,JavaScript还可以用于对数据进行校验。

软件开发框架Struts2标签库习题与答案

软件开发框架Struts2标签库习题与答案

一、多选题1.Struts 框架提供了哪几种标签库()。

A.HTML 标签库B.Bean 标签库C.Logic 标签库D.Template 标签库E.Nested 标签库2.下列哪个Strtus 标签能生成HTML 超链接<a> 元素()。

A.<html:html> 标签B.<html:base> 标签C.<html:img> 标签D.<html:link> 标签E.<html:rewrite> 标签3.以下哪些Struts 标签()能生成与HTML 表单相关的元素。

A.<html:link> 标签B.<html:text> 标签C.<html:radio> 标签D.<html:multibox> 标签E.<html:select> 标签4.下面哪些标签()能创建HTML 表单复选框控件。

A.<html:checkbox> 标签B.<html:radio> 标签C.<html:multibox> 标签D.<html:select> 标签E.<html:cancel> 标签5.使用下列哪个标签()能在页面输出在验证表单时发生的错误。

A.<html:multibox> 标签B.<html:errors> 标签C.<html:messages> 标签D.<html:error> 标签E.<html:cancel> 标签6.Struts Bean 标签库能提供下列哪些服务()。

A.访问HTTP 请求报头信息B.访问JSP 隐含对象C. 访问 Web 应用资源D. 定义 JavaBeanE. 输出 JavaBean7. 下列哪个标签()能访问 JSP 隐含对象。

javaEE笔试复习题

javaEE笔试复习题

一、单选题1.下面关于数据持久化概念的描述,错误的是(D)A、保存在内存中数据的状态是瞬时状态B、持久状态的数据在关机后数据依然存在C、数据可以由持久状态转换为瞬时状态D、将数据转换为持久状态的机制称为数据持久化2.Java Web应用中往往通过设置不同作用域的属性来达到通讯的目的。

如果某个对象只在同一请求中共享,通过调用哪个类(C)的setAttribute方法设置属性。

A、HttpServletRequestB、ServletRequestListenerC、HttpSessionD、ServletContext3.POJO的作用是(C)A、普通的Java对象映射数据库元组B、数据访问C、对象的赋值D、保存客户端对象4.在三层结构中,数据访问层承担的责任是(B)A、定义实体类B、数据的增删改查操作C、业务逻辑的描述D、页面展示和控制转发5.下列哪个接口用于获取关于数据库的信息(D)A、StatementB、PreparedStatementC、ConnectionD、DatabaseMetaData6.JDBC包含多个类,其中Java.sql.ResultSet类属于(C)A、JDBC控制类B、JDBC类C、JDBC接口类D、JDBC异常类7.以下关于SessionFactory的说法哪些正确(B)A、对于每个数据库事务,应该创建一个SessionFactory对象。

B、一个SessionFactory对象对应一个数据库存储源。

C、SessionFactory是重量级的对象,不应该随意创建。

如果系统中只有一个数据库存储源,需要创建多个。

D、SessionFactory的load()方法用于加载持久化对象。

8.以下哪些不属于Session的方法(C)A、load()B、save()C、open()D、saveOrUpdate()9.在持久化层,对象分为的状态不包括(B)A、瞬时(Transient)B、新建(New)C、脱管(Detached)D、持久(Persistent)10.实现equals和hashCode最显而易见的作用是(A)A、比较两个对象标识符的值B、比较数据库的两条数据C、比较两个组建是否部署在同一个应用服务器上D、对象与字段的映射11.在三层结构中,数据访问层承担的责任是(B)A、定义实体类B、数据的增删改查操作C、业务逻辑的描述D、页面展示和控制转发12.Hibernate配置文件中,不包含下面的(A)A、“对象-关系映射”信息B、数据关联的配置C、show_sql等参数的配置D、数据库连接信息13.下面创建Criteria对象的语句中正确的是(D)A、Criteria c = query.createCriteria();B、Criteria c = query.addCriteria();C、Criteria c = session.createCriteria();D、Criteria c = session.createCriteria(User.class);14.以下关于SessionFactory的说法哪些正确(B)A、对于每个数据库事务,应该创建一个SessionFactory对象。

form表单验证方法

form表单验证方法

form表单验证方法
有多种方法可以对表单进行验证,以下是常见的几种方式:
1. JavaScript验证:使用JavaScript的事件和条件语句来验证表单输入。

可以使用事件监听器(如onSubmit或onBlur)来触发验证函数,并使用条件语句(如if语句)来检查输入是否符合要求。

例如,可以使用正则表达式来验证电子邮件地址、密码强度等。

2. HTML5验证:HTML5引入了一些新的输入类型和属性,可以在客户端对输入进行验证。

例如,可以使用required属性确保必填字段不能为空,使用type属性(如email、number)来验证输入的格式等。

这种验证方式可以通过设置input元素的validity对象的属性和方法来实现。

3. 服务器端验证:无论客户端验证方法如何,都应该在服务器端进行额外的验证。

客户端验证可以被绕过或修改,因此服务器端验证是确保数据安全性和完整性的重要步骤。

可以使用服务器端编程语言(如PHP、Python、Java)来验证输入,并返回给用户相应的错误信息。

4. 第三方库和插件:有很多第三方库和插件可以简化表单验证的过程,如jQuery Validation、Formik、Yup等。

这些工具提供了丰富的验证规则和错误提示功能,可以大大减少开发时间和工作量。

综上所述,表单验证的方法可以根据具体的需求和技术选型来选择使用不同的方式来实现。

前端开发中的表单验证和数据校验方法

前端开发中的表单验证和数据校验方法

前端开发中的表单验证和数据校验方法随着互联网的快速发展,前端开发在网站和应用程序的构建中起着至关重要的作用。

在用户与网站或应用程序进行交互时,表单验证和数据校验是确保数据的准确性和安全性的重要步骤。

以下是一些常用的表单验证和数据校验方法:一、前端表单验证方法1. 必填项验证:在表单提交之前,确保所有必填字段都已填写。

可以使用HTML5的"required"属性来标记必填字段。

若用户未填写必填字段,系统会自动提示并要求填写。

2. 邮箱验证:验证用户输入的邮箱地址是否合法。

可以使用正则表达式来匹配邮箱的格式,例如:/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/3. 手机号验证:验证用户输入的手机号码是否合法。

可以使用正则表达式来匹配手机号码的格式,例如:/^1[3|4|5|7|8][0-9]\d{8}$/4. 密码验证:验证用户输入的密码是否符合要求。

可以设置一定的规则,如密码长度大于等于6位,同时包含字母和数字等。

5. 图片验证码:为了防止恶意行为和机器人攻击,可以要求用户输入一个图片验证码。

用户需要输入正确的验证码才能提交表单。

6. 表单重复提交限制:为了防止用户多次提交表单,可以通过禁用提交按钮来限制表单的多次提交。

二、前端数据校验方法1. 数据类型校验:校验用户输入的数据类型是否与预期一致。

可以使用JavaScript中的typeof运算符来判断数据类型,如:typeof value === 'string'、typeof value === 'number'等。

2. 数字范围校验:校验数值型数据是否在允许范围内。

通过比较用户输入的数值与设定的最小值和最大值来实现。

3. 数据长度校验:校验字符串类型的数据是否符合长度要求。

可以使用JavaScript内置的length属性来获取字符串长度,并与设定的长度进行比较。

如何自定义Struts2表单验证后的错误信息显示格式

如何自定义Struts2表单验证后的错误信息显示格式

如何自定义Struts2表单验证后的错误信息显示格式/样式(s:fielderror,换行,黑点)前面一段时间学过一些Struts2的知识,感觉Struts2和1.x还是有很大的差别的,我还不好说1.x肯定会过时还是2.0会很快流行,这毕竟是需要作为导向的。

在Struts2中验证真的比较容易,可以在Action中直接写validate,也可以使用validate框架进行验证,这个我觉得比Struts1.x方便了很多,但是有个问题一直困扰了我,直到现在有个小程序要用到这个方面的知识,那就是验证后如何很好地人性化地在jsp 页面中显示了。

大家都知道,Struts2显示验证结果有一些方式,一般通过两种方式,介绍如下:1.在页面的上面或者某个位置全部显示错误代码:<s:fielderror cssStyle="color: red"></s:fielderror>这样会显示所有的错误信息,模拟效果如下:2.在每个字段下面或上面显示,通过<s:fielderror cssStyle="color: red"><s:param>XXX(标签的name属性,象ername)</s:param> </s:fielderror>例:用&nbsp;戶&nbsp;名:<input type="text"name="ername"/><s:fielderror cssStyle="color: red"><s:param>ername</s:param></s:fielderror>显示效果如下:上面的差不多是Struts默认显示的两种方式,但是我们常见的显示方式并不是这样的,所有我们需要自定义这种格式,我们的习惯是把错误信息显示在某个出错字段的后面,一行显示,而它给了一个小黑点并且换了行,我们现在就来解决这个问题。

struts框架详细介绍

struts框架详细介绍

struts框架详细介绍Struts是一个开源的Java Web应用程序开发框架,可以帮助开发者构建可扩展的、高性能的Web应用程序。

它遵循了Model-View-Controller(MVC)设计模式,通过将业务逻辑、表示逻辑和用户交互进行分离,使得应用程序更易于开发、测试和维护。

下面是关于Struts框架的详细介绍。

1.MVC设计模式:Struts采用了MVC设计模式,将应用程序的不同组成部分进行分离。

- Model层负责处理数据和业务逻辑。

在Struts中,开发者可以使用JavaBean、EJB、Hibernate等技术作为Model层的实现。

- View层负责展示数据和用户界面。

Struts提供了JSP(JavaServer Pages)作为主要的View技术,也可以使用Velocity、Freemarker等模板引擎。

- Controller层负责接收用户请求、处理业务逻辑以及将结果返回给View层。

Struts的Controller层使用ActionServlet来处理请求,它根据配置文件中的映射规则将请求转发给合适的Action类进行处理。

2.核心组件:Struts由以下几个核心组件组成:- ActionServlet:负责接收和处理来自客户端的请求,并根据配置文件中的映射规则将请求转发给合适的Action类进行处理。

- Action类:实现了业务逻辑的处理,接收请求和返回结果。

开发者需要继承Action类,并覆写其中的execute(方法来实现自定义的业务逻辑。

- ActionForm:用于封装请求参数并传递给Action类进行处理。

ActionForm可以与表单元素进行绑定,从而方便地获取和验证用户输入。

- ActionMapping:配置文件中的一项规则,用于将请求URL映射到具体的Action类和方法。

- ActionForward:配置文件中的一项规则,用于指定请求处理完成后需要跳转到的页面。

struts2面试题(自己总结)

struts2面试题(自己总结)

Struts2面试题1、struts2工作流程Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。

业务控制器Action和业务逻辑组件是需要用户来自己实现的。

用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。

Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。

基本简要流程如下:1 、客户端初始化一个指向Servlet容器的请求;2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3 、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

struts2(checkbox_radio_select)表单标签的应用及详细事例

struts2(checkbox_radio_select)表单标签的应用及详细事例

一、表单标签_checkbox复选框如果集合为list<s:checkboxlist name="list"list="{'Java','.Net','RoR','PHP'}"value="{'Java','.Net'}"/>生成如下html代码:<input type="checkbox"name="list"value="Java" checked="checked"/><label>Java</label><input type="checkbox"name="list"value=".Net" checked="checked"/><label>.Net</label><input type="checkbox"name="list" value="RoR"/><label>RoR</label><input type="checkbox"name="list"value="PHP" /><label>PHP</label><input type="checkbox"name="list"value="PHP" /><label>PHP</label>************************************************ *****<br>如果集合为MAP<s:checkboxlist name="map"list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}"listKey="key"listValue="value"value="{1,2,3}"/>生成如下html代码:<input type="checkbox"name="map"value="1" checked="checked"/><label>瑜珈用品</label><input type="checkbox"name="map"value="2" checked="checked"/><label>户外用品</label><input type="checkbox"name="map"value="3" checked="checked"/><label>球类</label><input type="checkbox"name="map"value="4"/><label>自行车</label>******************************************************<br>如果集合里存放的是javabean(id和name为Person的属性)<%Person person1 = new Person(1, "第一个");Person person2 = new Person(2, "第二个");List<Person> list = new ArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons", list);%><s:checkboxlist name="beans"list="#request.persons"listKey="id"listValue="name"/>生成如下html代码:<input type="checkbox"name=“beans" value="1"/><label>第一个</label><input type="checkbox"name=“beans" value="2"/><label>第二个</label>************************************************ ******<br>表单标签_radio单选框<a href="radio.jsp">测试</a><br>表单标签_select单选框<a href="select.jsp">测试</a>代码运行结果如下:----------------------------------------------------------------------------------------------------------------------------二、表单标签_radio下拉选择框如果集合里存放的是javabean(id和name为Person的属性) <%Person person1 = new Person(1, "第一个");Person person2 = new Person(2, "第二个");List<Person> list = new ArrayList<Person>();list.add(person1);list.add(person2);request.setAttribute("persons", list);%>< s:radio name="beans" list="#request.persons" listKey="id"listValue="name"/> 生成如下html代码:<input type="radio"name="beans"id="beans1" value="1"/><label>第一个</label><input type="radio"name="beans"id="beans2" value="2"/><label>第二个</label>************************************************ **************<br>该标签的使用和checkboxlist复选框相同。

form表单验证方法

form表单验证方法

form表单验证方法(最新版4篇)目录(篇1)1.表单验证的重要性2.form 表单验证方法的概述3.表单验证的方法4.表单验证的实践示例5.表单验证的优缺点分析6.表单验证的未来发展趋势正文(篇1)在现代 Web 开发中,表单验证是一项必不可少的任务。

它不仅能确保用户输入的数据格式正确,还可以保证业务逻辑的顺利进行。

form 表单验证方法是实现表单验证的一种有效方式,它为我们提供了许多便捷的工具和方法。

首先,让我们了解一下表单验证的方法。

表单验证主要包括客户端验证和服务器端验证。

客户端验证是指在用户提交表单之前,通过JavaScript 等脚本语言对表单数据进行验证。

这种方式的优点是实时反馈,用户体验较好。

服务器端验证则是在接收到表单数据后,通过服务器端的编程语言进行验证。

这种方式的优点是可以保证数据的正确性,但可能会增加服务器负担。

接下来,我们通过一个实践示例来具体了解表单验证的过程。

假设我们要验证一个用户名和密码的表单,我们可以在客户端通过 JavaScript 编写如下代码:```javascriptfunction validateForm() {var username =document.forms["loginForm"]["username"].value;var password =document.forms["loginForm"]["password"].value;if (username == "" || password == "") {alert("用户名和密码不能为空");return false;}if (username.length < 6) {alert("用户名不能少于 6 个字符");return false;}if (!/^[a-zA-Z]*$/.test(username)) {alert("用户名只能包含字母");return false;}if (!/^[a-zA-Z0-9]*$/.test(password)) { alert("密码只能包含字母和数字");return false;}return true;}```在服务器端,我们可以使用 Python 编写如下代码进行验证:```pythondef validate_form(username, password):if not username or not password:return False, "用户名和密码不能为空"if len(username) < 6:return False, "用户名不能少于 6 个字符"if not username.isalpha():return False, "用户名只能包含字母"if not password.isalnum():return False, "密码只能包含字母和数字"return True```通过这个示例,我们可以看到表单验证的实际应用过程。

stucts表单验证的3种方式

stucts表单验证的3种方式

Struts表单验证三种方式:一.From验证1.首先继承ValidatorForm2.在from
中做判断在JSP中可以这样写,记得要用到一个标签看看From验证效果
二.Action验证(错误处理)Action经常用来做错误处理,也就是我们说的异常。

抓住异常,然后友好的显示给用户。

看看Action效果三.Struts验证框架说来
说去,不论什么框架,在做验证的时候都是这三个步骤,之不用有调用的方法
不同而已。

步骤:? 1.建立Validator文件?2.在config中通过插件(plugIn)
把validator和规则文件配置好?3.编写JSP和From需要注意的是,From需要
继承ValidatorForm,并且把From中的validator方法删掉。

还有在Action
中记得把Validator勾上(默认是勾上的)。

来看看Struts验证效果也许你会
决定这都是在服务端来验证,可这回对服务器代理很大的压力。

其实要这一点Struts已经考虑到了,想做到在客户端验证,需要在客户端加上一句话就可以
了这样就会在客户端自动产生JAVASCTIP验证代码。

最后你在From的Aciton
属性中调用validateLoginForm(form)(如果你不知道调用那个方法,你可以先
让JSP显示出来,然后查看源代码既可以看到)方法既可以了。

不过这样唯一
有不足的地方就是,它会把你用到的和用不到的验证都会在客户端显示。

struts2注解方式的验证

struts2注解方式的验证

struts2注解⽅式的验证struts2的验证分为分编程式验证、声明式验证、注解式验证。

因现在的⼈越来越懒,都追求零配置,所以本⽂介绍下注解式验证。

⼀.hello world参考javaeye的这篇⽂章,按着做⼀次,起码有个初步印象Validation使⽤名字叫做validator的Intercepter,在默认情况下,struts2已经定义了这个Intercepter,我们在不加声明的情况下就可以使⽤Validation了如果是使⽤默认的拦截器,就已经开启了验证框架的了,直接⽤。

开启验证的⽅式是(官⽹):打开验证默认拦截器堆栈“defaultStack”已经打开验证。

在创建⾃⼰的拦截器堆栈⼀定要包括两对validation和workflow拦截器。

来⾃struts-default.xml:<interceptor-stack name="defaultStack">...<interceptor-ref name="validation"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref><interceptor-ref name="workflow"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref></interceptor-stack>从版本2.0.4开始,Struts为XWork的com.opensymphony.xwork2.validator.ValidationInterceptor拦截器提供了扩展。

struts2 实验报告

struts2 实验报告

1.系统分析与设计1.1系统功能描述本系统是个非常简单的注册、登录系统。

本系统的实现是基于Struts2、Spring、Hibernate三个框架,系统功能单一,业务逻辑简单。

当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。

当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。

系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。

系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。

故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。

当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。

除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。

1.2系统功能流程处理用户注册的流程图东北大学软件学院实践考核类课程(四)实验报告1.3数据库设计ColumnNarneDatatppe HOTH ULLAUTOI NC :FlagsDefaultValue Commentuser_id|S>INT(11)✓ ✓_|UNSIGNED _|ZEROFELLEBBQ username 心.VARCH.4.R(50]_|BINARYQ user_pass VARCHAR(50] ✓_|BIN4RYQ emailVARCHAR(100]1BIN4RY相关的映射文件:<hibernate-mapping package ="org.reg_login.model"><class name ="User"table ="usertable"〉<id name ="id"column ="user_id"><generator class ="identity"/> </id ><property name ="user"column ="user_name"not-null ="true"length ="50"unique ="true"/><property name ="pass"column ="userpass"n ot-null ="true"C=3length ="50"/><property name ="email"length ="100"/></class></hibernate-mapping >一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

* 要校验指定的方法通过重写validateXxx()方法实现, validateXxx()只会校验action中
方法名为Xxx的方法。其中Xxx的第一个字母要大写。
* 当某个数据校验失败时,调用addFieldError()方法往系统的fieldErrors添加校验失败
2、Action中
* 要继承ActionSupport
* 重写Validateable接口中的validate()方法 ,在该方法中完成验证
3、* 要进行验证:
* * 需求:
* * 用户名不能为null ,""
* * 密码不能为null, "" 并且密码的长度6-12之间
【3、配置验证的xml文件】
* 验证的xml文件的规范在xwork-core-2.1.6.jar包下的:xwork-validator-1.0.3.dtd
* 验证文件的命名
* 在这个校验文件中,对action中字符串类型的username属性进行验证,
首先要求调用trim()方法去掉空格,然后判断用户名是否为空
return "success";
}
public String test(){
System.out.println("test^^^^^^6");
return "success";
}
public String getUsername() {
return username;
【7、在xml中配置验证出错信息】
<result name="input">/validate/login.jsp</result>
【8、在页面显示出错的信息】
<s:fielderror fieldName="username"></s:fielderror>
<s:fielderror fieldName="psw"></s:fielderror>
【Struts2表单验证】
struts2校验有两种实现方法:
1. 手工编写代码实现(基本验证)
2. 基于XML配置方式实现(验证框架)
【一、基本验证】
例:
1、jsp页面:
* 用户名不能为null ,""
* 密码不能为null, "" 并且密码的长度6-12之间
boolean b = matcher.matches();
if(!b){
//验证没有通过
this.addFieldError("psw", "密码长度需在6-12之间");
}
}
}
public String login(){
System.out.println("login…"+username+" "+psw);
public class ValidateAction extends ActionSupport {
private String username;
private String psw;
/*
*【注:】这里要提供属性的set 和 get方法 缺一不可
* 默认情况下,validate对action中的所有方法都进行认证
信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统
的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。
* 在input视图中可以通过<s:fielderror/>显示失败信息。
}
public void setUsername(String username) {
System.out.println("setUsername^^^^^");
ername = username;
}
public String getPsw() {
return psw;
========================================================================================================================
【二、基于XML配置方式实现输入校验】
【1、建立Jsp页面,定义需求】
* * action必须继承ActionSupport类(实现了Validateable接口),重写validate()方法
* * setUsername() validate() login()方法的执行顺序
* * setUsername():
* * validate()
validateXxx()方法使用例子:

----------------------------------------------------------------------------------------------------------------------
【5、验证的Action】
* 用户名不能为null ,""
* 密码不能为null, "" 并且密码的长度6-12之间
【2、定义Action】
* 要继承ActionSupport或者实现Validateable接口:
------------------------------------------------------------------------------------------------------------------------
if(username == null || "".equals(username.trim()) ){
this.addFieldError("username", "用户名不能为空");
}
//判断 密码 不能为空 长度在6-12之间、
if(psw == null || "".equals(psw.trim())){
* * 放置错误信息的集合不存在 map==null
*
* * 何时表示验证没有通过呢?
* * 放置错误信息的集合存在,集合中有信息 map!=NULL map.isEmpty()==false
*
4、
* validate()方法会校验action中所有与execute方法签名相同的方法。
3。系统通过反射技术调用action中的validateXxx()方法,Xxx为方法名。
4。调用action中的validate()方法。
5。经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图
。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。
}
public void setPsw(String psw) {
this.psw = psw;
}
}
-----------------------------------------------------------------------------------------------------------------------
* * login()
*
* * 验证出错时,要转向的页面
* <result name="input">/validate/login.jsp</result>
*
* * 何时表示验证通过呢?
* * 放置错误信息的集合存在,但集合中没有信息 map!=NULL map.isEmpty()==true
public class ValidateXmlAction extends ActionSupport {
private String username;
private String psw;
public String login(){
System.out.println("ValidateXmlAction^^^^^^^^^^^^^^");
【 *】 该文件需要和action类放在同一个包下,文件的取名应遵守
ActionClassName-validation.xml规则,其中ActionClassName为action的简单类名,-validation为固定写法。
* 例如:如果Action类为cn.itcast.validate.ValidateXmlAction. 那么该文件的取名应为
return "success";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
ername = username;
ValidateXmlAction.java
【注:这里必须要提供set 和 get 方法 缺一不可】
package cn.itcast.struts2.validate;
import com.opensymphony.xwork2.ActionSupport;
相关文档
最新文档