14.2.5 Struts2 校验框架[共3页]

合集下载

struts2框架特征

struts2框架特征

struts2框架特征Struts2框架特征简介Struts2是一个基于MVC架构的Java Web应用框架,由Apache Struts团队开发和维护。

它是Struts的下一代版本,具有许多强大的特征和功能。

本文将介绍Struts2框架的一些主要特征。

特征以下是Struts2框架的一些主要特征:1.轻量级:Struts2框架是一个轻量级的框架,只需很少的配置就能实现项目的开发。

2.MVC架构:Struts2采用经典的MVC(Model-View-Controller)架构,将应用程序分为模型、视图和控制器。

3.灵活的配置:Struts2提供了灵活的配置方式,可以根据项目的需求进行自定义配置。

4.强大的表单处理:Struts2提供了丰富的表单处理功能,包括数据验证、数据绑定、错误处理等。

5.拦截器机制:Struts2的拦截器机制是其核心特征之一,可以在请求处理过程中加入自定义的拦截逻辑。

6.国际化支持:Struts2提供了国际化支持,可以轻松实现多语言的应用程序。

7.AJAX支持:Struts2对AJAX的支持非常好,可以方便地实现异步请求和响应。

8.插件机制:Struts2提供了丰富的插件,可以扩展框架的功能。

9.易于测试:Struts2框架的代码结构和设计模式使得应用程序易于进行单元测试和集成测试。

10.丰富的文档:Struts2有非常详细的官方文档和社区支持,可以快速解决问题和学习框架。

总结Struts2是一个功能强大且灵活的Java Web框架,拥有许多令人印象深刻的特征。

它的轻量级、MVC架构、拦截器机制和表单处理功能等都使得开发人员能够更加高效地构建Web应用程序。

如果你是一名开发人员,建议你尝试使用Struts2来开发你的下一个项目。

注意:本文所述为一名资深的创作者对”struts2框架特征”的描述,并采用了Markdown格式进行编写,符合所提到的规则。

Struts2框架特征(续)特征11.可靠的错误处理:Struts2框架提供了可靠的错误处理机制,能够捕获并处理应用程序中的异常情况。

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框架的介绍和应用

Struts2框架的介绍和应用一、简介Struts2框架是一个基于MVC模式的Java web应用程序框架,它能够帮助开发人员有效地管理和组织大规模、复杂的web应用程序。

它提供了一系列的工具和技术,使得开发人员能够快速地构建完整可用的web应用程序。

二、历史Struts2框架最初是由Apache软件基金会的Jakarta项目组开发的。

它源于Struts1框架,因为Struts1框架在开发人员自由度和灵活性方面存在限制。

Struts2框架开发了许多新特性和改进,使其比Struts1更具有可扩展性、更易于使用,更适合于构建大规模的web应用程序。

三、架构Struts2框架采用MVC模式,即Model-View-Controller模式,分为以下三个层次:3.1 Model 层Model层用于将数据从数据库等存储区域提取出来,然后传递给View层进行显示。

Struts2框架中,Model层的数据可以是一个Java对象或一个POJO。

3.2 View 层View层将从Model层传递来的数据显示给用户,它可以采用JSP、HTML、XML等技术来展现数据。

3.3 Controller 层Controller层作为Model层和View层之间的中介,调度这两层的工作,处理用户的请求并将处理结果返回给View层。

四、优点4.1 易于扩展Struts2框架采用模块化的设计思路,在不同的模块之间,通过配置文件、注解等方式进行交互,方便扩展和维护。

4.2 易于使用Struts2框架提供了丰富的标签库和功能模块,使得开发人员可以快速地构建完整的web应用程序,降低了使用门槛。

4.3 基于MVC模式Struts2框架采用了MVC模式,将业务逻辑、数据处理、UI展示等功能分开,使得程序结构清晰,易于管理和维护。

五、应用Struts2框架广泛应用于Java web应用程序的开发,特别是在大型项目中使用。

以下是Struts2框架的一些主要应用场景:5.1 企业级应用程序Struts2框架能够较好地管理和组织大型的企业级应用程序,可以帮助开发人员高效地开发复杂的应用。

struts2校验框架

struts2校验框架
二十六、对于Action级别的错误信息,实际上是放置在ArrayList中的。
二十七、action的getFieldErrors()方法返回的是一个不可以增加错误,它返回的是一个新的或不可修改的action。getFieldErrors()返回的是一个原来LinkedHashMap的一个复本,所以不可以从这里添加,它是只读的。
二十、在校验框架里validator是非字段校验,其中type属性对应的校验的类型如:required、requiredstring、int、long、short、double、date、expression、fieldexpression、email、url、visitor、conversion、stringlength、regex、conditionalvisitor;里面的第一个param的name属性一定要是fieldName而值是要校验的字段其余的param与message与字段校验里的一样。
十一、param是一个字符串,它也有一个name属性也是字符串类型的,name属性对应default.xml里类型所实现的类里的属性名,值为自己的要求。
十二、message也是一个字符串,字有一个属性key也是字符串类型的,它可以提供也可以不提供。message的值是用户提示的错误信息,它里面是可以国际化的。
十七、struts2会给自己的标签生成ID但是如果指定了ID就不会生成ID了,以指定的为标准。
十八、当多个业务逻辑方法的时候,准确的说应该是一个逻辑方法对应一个校验方式,校验文件应该是:action类名+“-”+方法名+“-validation.xml”。如果也有action的类名+“-validation.xml”的文件它会先执行action的类名+“-validation.xml”的再执行action类名+“-”+方法名+“-validation.xml”,所有如果有多个逻辑方法时就写多个action类名+“-”+方法名+“-validation.xml”的校验文件。

Struts2验证框架源码详解讲解

Struts2验证框架源码详解讲解

Action配置中一定要设置input返回页面添加验证只要创建验证的xml文件1.创建xml文件名验证Action中全部方法在Action同包下,创建:Action类名-validation.xml如:ValidateAction创建ValidateAction-validation.xml验证Action中单个方法<!-- 每个方法单独配置一个Action --><!-- 在Action同包下,创建:Action类名-action方法配置名称-validation.xml --><action name="validateAdd"class="com.struts2.validator.ValidateAction" method="add"><!-- 要创建ValidateAction-validateAdd-validation.xml --><!-- 使用通配符配置 --><!-- 在Action同包下,创建:Action类名-action方法对应的名称-validation.xml --><action name="validate_*"class="com.struts2.validator.ValidateAction" method="{1}"><!-- 要创建ValidateAction-validate_add-validation.xml,validate_add为访问这个action方法的路径 -->注意事项注意:1.要验证的方法不能叫input.2.这样配置在form表单中要在<s:form action="validate_add">中action写好名称,不能写action="validate_",然后<s:submit value="提交"method="add"/>这样会找不到对应的配置文件,跳过验证.3.如果验证出错,返回input页面时,那些存在ValueStack中的值会丢失,可以将Action实现Preparable接口,然后prepare()方法里初始化添加页面需要的值.4.如果使用Preparable接口,必须在action配置中添加<interceptor-refname="paramsPrepareParamsStack"/>.这样prepare()才能得到form提交的参数.2.创建xml内容<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator1.0.2//EN" "/xwork/xwork-validator-1.0.2.dtd"><validators><!-- 要验证的字段名称 --><!-- 要验证Action中UserBean的id字段,name="userBean.id"(userBean为Action中的变量名) --><field name="mail"><!-- type要验证的类型,short-circuit(默认false),true含义,如果当前验证失败了,下面的验证就不执行了.如requiredstring失败了,email就不验证了. --><!-- field-validator下面可以有多个param元素,但是最多只能有一个message --><field-validator type="requiredstring"><param name="trim">true</param><message>Please enter a mail</message></field-validator><field-validator type="email"><message>Invalid MAIL</message></field-validator></field></validators>Struts内建验证程序(type的值)required保证字段的值不是空值null.空字符串不是空值null.<field name="userName"><field-validator type="required"><message>Please enter a user name</message></field-validator></field>requiredstring保证字段不是空值null,也不是空白(empty).param:trim(boolean) ->true->去除前后空格<field name="userName"><field-validator type="requiredstring"><param name="trim">true</param><message>Please enter a user name</message></field-validator></field><field name="password"><field-validator type="requiredstring"><param name="trim">false</param><message>Please enter a password</message> </field-validator></field>int验证字段值是否可以转换为一个整数.param: min(int);max(int)<field name="yeaar"><field-validator type="int"><param name="min">1999</param><param name="max">2010</param><message>year:1999-2010</message></field-validator></field>date验证给定日期字段的值是否在一个给定的范围内.param:max(date);min(date)<field name="borthday"><field-validator type="int"><!-- 格式取决于当前地理时区 --><param name="min">1999-01-01</param><param name="max">2010-01-01</param><message>birthday:1999-2010</message> </field-validator></field>email给定的String值是否是一个电子邮件地址<field name="email"><field-validator type="email"><message>Invalid email</message></field-validator></field>url给定的String值是否是一个合法的URL(要有前缀)<field name="url"><field-validator type="url"><message>Invalid URL</message></field-validator></field>expression,fieldexpression验证给定字段是否满足一个OGNL表达式.区别:expression 不是一个字段验证程序,失败时将生成一个动作错误.(JSP中调用<actionerror></actionerror>才显示出错信息)fieldexpression 是一个字段验证程序,失败时将抛出一个字段错误.(对字段验证) param:expression(String)OGNL表达式expression:public class ExpressionTestAction{//属性生成get,setprivate int min;private int max;}<validator type="expression"><param name="expression">max > min</param><message>Maximum temperature must be greater than Minimum temperature </message></validator><!-- jsp --><s:actionerror/>fieldexpression:public class FieldExpressionTestAction{//属性生成get,setprivate int min;private int max;}<!--对字段验证--><field name="max"><field-validator type="fieldexpression"><param name="expression">max > min</param><message>Maximum temperature must be greater than Minimum temperature</message></field-validator></field>visitor把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用)//UserBeanpublic class UserBean{//属性get,setprivate String name;private int age;}//UserBean-validation.xml(和UserBean放在同一个包中)<field name="name"><field-validator type="requiredstring"><message>用户名必须</message></field-validator></field><field name="age"><field-validator type="int"><param name="min">18</param><param name="max">99</param><message>Age must be between 18and99</message></field-validator></field>//Action的validation.xml<!-- userBean变量名--><field name="userBean"><field-validator type="visitor"><!-- message会和UserBean验证中的message一起显示--><message>用户:</message></field-validator></field>如果另一个Action对UserBean使用另一个标准的验证,可以创建新的验证文件//UserBean-specific-validation.xml<!--和之前的验证不同--><field name="age"><field-validator type="int"><param name="min">30</param><param name="max">50</param><message>Age must be between 30and50</message></field-validator></field>//另一个Action的validation.xml<field name="userBean"><field-validator type="visitor"><!-- xml中扩展的名字,执行UserBean-specific-validation.xml的验证--><param name="context">specific</param><message>用户1: </message></field-validator></field>conversion检查对某个属性进行类型转换是否会导致一个转换错误<field name="age"><field-validator type="conversion"><message>An age must be an integer.</message></field-validator></field>stringlength验证一个非空的字段值是不是足够的长度param:minLength(int);maxLength(int);trim(boolean)<field name="password"><field-validator type="requiredstring"><param name="minLength">6</param><param name="maxLength">14</param><message>length:6-14</message></field-validator></field>regex给定的值是否与一个给定的正则表达式匹配param:expression(String)正则表达式;caseSensitive(boolean)是否区别大小写,默认为true;trim(boolean)是否去除前后空格<field name="phone"><field-validator type="regex"><param name="expression"><![CDATA[\d\d\d\-\d\d\d\-\d\d\d\d]]></param><message>Invalid phone number or invalid format</message></field-validator></field>3.在action中验证利用Validateable接口实现验证,实现void validate()方法.ActionSupport类已经实现了这个接口//继承ActionSupportpublic class User extends ActionSupport{//属性get,setprivate String userName;private String password;private static List<String> userNames =new ArrayList<String>();static{userNames.add("harry");userNames.add("sally");}//验证方法public void validate(){if(userNames.contains(userName)){//添加出错信息addFieldError("userName","'"+ userName +"' has been taken.");}}}4.自定义验证类要创建一个普通的验证程序(非字段验证程序),扩展ValidatorSupport类.验证失败要从validate 方法调用addActionError方法.要创建一个字段验证程序,扩展FieldValidatorSupport类.验证失败要从validate方法调用addFieldError方法.如果要能接受参数,要在类中定义一个相应的属性,并生成get,set.编写类public class StrongPasswordValidator extends FieldValidatorSupport{ //属性private int minLength =-1;public void setMinLength(int minLength){this.minLength = minLength;}public int getMinLength(){return minLength;}//验证方法public void validate(Object object)throws ValidationException{ String fieldName = getFieldName();String value =(String) getFieldValue(fieldName,object);if(value ==null|| value.length()<=0){// use a required validator for thesereturn;}if((minLength >-1)&&(value.length()< minLength)){addFieldError(fieldName,object);}else if(!isPasswordStrong(value)){addFieldError(fieldName,object);}}private static final String GROUP_1 ="abcdefghijklmnopqrstuvwxyz";private static final String GROUP_2 ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";private static final String GROUP_3 ="0123456789";protected boolean isPasswordStrong(String password){boolean ok1 =false;boolean ok2 =false;boolean ok3 =false;int length = password.length();for(int i =0; i < length; i++){if(ok1 && ok2 && ok3){break;}String character = password.substring(i, i +1);System.out.println("character:"+ character);if(GROUP_1.contains(character)){ok1 =true;continue;}if(GROUP_2.contains(character)){ok2 =true;continue;}if(GROUP_3.contains(character)){ok3 =true;}}return(ok1 && ok2 && ok3);}}注册xml在src下创建validators.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator Config 1.0//EN" "/xwork/xwork-validator-config-1.0.dtd" ><validators><!-- 名称(type对应值),类路径 --><validatorname="strongpassword"class="com.validator.StrongPasswordValidator"/></validators>使用验证<field name="password"><field-validator type="strongpassword"><param name="minLength">8</param><message>Password must be at least 8 characters longand contains at least one lower case character,one upper case character, and a digit.</message></field-validator></field>。

struts2框架的原理和应用

struts2框架的原理和应用

Struts2框架的原理和应用1. 什么是Struts2框架Struts2是一个基于Java EE的开源Web应用框架,是Struts框架的升级版。

它通过MVC设计模式实现了Web应用开发的分层,将业务逻辑、数据模型和用户界面分离,使得代码更加清晰、易于维护。

2. Struts2框架的原理Struts2框架的原理主要包括以下几个关键点:MVC设计模式Struts2采用了MVC(Model-View-Controller)设计模式,其中:•模型(Model):负责管理应用程序的数据和业务逻辑。

•视图(View):负责显示数据给用户。

•控制器(Controller):负责处理用户输入、调用模型和视图等。

核心组件Struts2框架包含以下核心组件:•拦截器(Interceptor):负责在请求前后进行统一处理,可以用来进行身份验证、日志记录等操作。

•动作(Action):负责处理用户请求,包括接收请求参数、调用业务逻辑方法等。

•结果(Result):负责生成并返回视图,可以是JSP、Freemarker、JSON等。

•值栈(ValueStack):用于存储Action处理过程中的数据,支持OGNL表达式读取和赋值操作。

•配置文件(struts.xml):用于配置拦截器、动作、结果等,实现URL与处理类之间的映射关系。

工作流程Struts2框架的工作流程如下:1.客户端发送请求到Struts2框架的前端控制器(例如:DispatcherFilter)。

2.前端控制器根据请求的URL找到对应的处理类(Action)。

3.前端控制器将请求参数、上下文信息等传递给Action,同时执行拦截器的前置处理逻辑。

4.Action处理用户请求,并根据业务逻辑生成相应的结果。

5.前端控制器将结果传递给结果组件,选择合适的视图进行渲染。

6.前端控制器将渲染后的视图返回给客户端。

3. Struts2框架的应用Struts2框架在Web应用开发中具有广泛的应用,以下是一些主要的应用场景:1. 构建Web应用程序Struts2框架提供了许多构建Web应用程序的工具和技术,包括表单验证、国际化、文件上传等功能。

struts2框架特征

struts2框架特征

struts2框架特征Struts2框架特征Struts2是一种基于Java的Web应用程序开发框架,它提供了一种简单、灵活、易于使用的方式来构建可维护和可扩展的Web应用程序。

以下是Struts2框架的一些特征:1. MVC架构模式:Struts2采用了MVC(Model-View-Controller)架构模式,将应用程序分为模型、视图和控制器三个部分。

模型表示应用程序的数据,视图用于显示用户界面,控制器负责处理用户的请求并更新模型和视图。

这种分离的架构使得应用程序的开发和维护更加简单和灵活。

2. 强大的表单处理:Struts2提供了丰富的表单处理功能,可以轻松地处理表单验证、数据绑定和错误处理等任务。

它支持不同类型的表单字段,如文本框、下拉框、复选框等,并提供了各种验证器来验证用户输入的数据。

此外,Struts2还支持国际化,可以根据不同的语言和地区显示不同的表单。

3. 灵活的拦截器机制:Struts2的拦截器机制是其最大的特点之一。

拦截器可以在请求到达控制器之前或之后执行一些额外的操作,如身份验证、日志记录、性能监控等。

Struts2提供了一系列内置的拦截器,同时也支持自定义拦截器,开发人员可以根据自己的需求来配置和使用拦截器。

4. 强大的标签库:Struts2提供了丰富的标签库,用于生成HTML、表单和URL等。

这些标签可以简化页面的开发,减少代码的编写量。

开发人员可以使用这些标签来生成表单、链接、按钮等页面元素,同时还可以使用条件、迭代和国际化等功能来控制标签的显示和行为。

5. 完善的国际化支持:Struts2对国际化有很好的支持。

它提供了资源束(Resource Bundle)来存储不同语言和地区的文本信息,并可以根据用户的语言和地区设置来动态地加载相应的资源束。

开发人员可以使用标签来显示本地化的文本、日期、时间等。

6. 易于集成和扩展:Struts2可以与其他框架和技术进行无缝集成,如Hibernate、Spring、AJAX等。

Struts2用户校验

Struts2用户校验

§2.1 Struts2用户校验(struts2校验框架)Struts2提供了功能强大的输入校验机制,通过Struts2内建的输入校验器,应用无需书写任何代码,即可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。

如果应用的输入校验规则特别,Struts2也允许通过重写validate方法来完成自定义校验,另外Struts2的开放性还允许开发者提供自定义的校验器。

表现层的数据处理包括两个方面:一是数据类型的转化,因为Web应用接收到的所有数据都是字符串类型的;另一个就是输入校验,因为开发者必须全面考虑用户输入的各种情况,尤其需要注意那些非正常输入。

客户端的校验最基础的方法就是在页面写javascript代码手工校验,服务器端的校验最基础的方法就是在处理请求的Servlet的service()方法中添加校验代码。

Struts2中可以通过重写validate方法来完成输入校验。

如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。

Struts2支持校验特定方法的validateXxx()方法。

例如某个Action中有一个regist()业务方法,我们可以写一个validateRegist()方法来进行regist()的特殊校验,客户端请求调用的次序如下:validateRegist()--------------->validate()-------------->regist()Struts2的输入校验流程如下:1,类型转换器负责对字符串的请求参数执行类型转换,并将这此值设置成Action的属性值。

2,在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext 中,conversionError拦截器负责将其封装到fieldError里,然后执行第3步;如果转换过程没有异常信息,则直接进入第3步。

struts2框架特征

struts2框架特征

struts2框架特征Struts2框架特征Struts2是一个开源的Java Web应用程序开发框架,它基于MVC (Model-View-Controller)设计模式,旨在简化Web应用程序的开发过程。

相比于前身Struts1,Struts2具有更好的可扩展性、灵活性和易用性。

本文将介绍Struts2框架的一些特征和优势。

一、基于MVC设计模式Struts2框架严格遵循MVC设计模式,将应用程序的逻辑分为模型(Model)、视图(View)和控制器(Controller)。

模型负责处理数据,视图负责展示数据,控制器负责处理用户请求和调度其他组件。

这种分离使得应用程序的逻辑更加清晰,易于维护和扩展。

二、灵活的配置和扩展性Struts2框架提供了灵活的配置方式,可以使用XML配置文件或注解来定义应用程序的行为。

开发人员可以根据自己的需求进行定制,添加或修改框架的默认行为。

此外,Struts2还支持插件机制,可以轻松地集成其他框架或库,提供更多功能和特性。

三、强大的数据绑定和验证功能Struts2框架提供了强大的数据绑定和验证功能,能够自动将用户提交的表单数据绑定到Java对象上,并进行数据校验。

开发人员可以使用注解或XML配置来定义数据校验规则,框架会自动验证数据的合法性,并提供错误信息。

这使得开发人员能够更轻松地处理用户输入,减少了开发时间和代码量。

四、灵活的拦截器机制Struts2框架采用了拦截器(Interceptor)机制来处理请求。

开发人员可以通过配置拦截器栈来定义请求的处理流程,每个拦截器负责处理请求的一部分逻辑。

拦截器可以在请求前后执行一些额外的逻辑,如身份验证、日志记录等。

这种机制使得应用程序的处理流程更加灵活可控。

五、多种视图技术支持Struts2框架支持多种视图技术,包括JSP、FreeMarker、Velocity 等。

开发人员可以根据自己的需求选择适合的视图技术来展示数据。

struts2中所有方法进行输入校验

struts2中所有方法进行输入校验
2.如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError
拦截器将异常封装到filedErrors里。不管类型转换是否出现异常,都会进入第3步。
3.系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4.再调用action中的validate()方法。
5.经过上面4步,如果系统中的filedErrors存在错误信息(即存放错误信息的集合的size大于0),
系统自动将请求转发至名称为input的视图。如果系统中的filedErrors 没有任何错误信息,系统将执行
action中的处理方法。
return username;
}
public void setUsername(String username){
ername = username;
}
public String getMobile(){
return mobile;
}
public void setMobile(String mobile){
对指定方法进行校验
validate.Xxx
public void validateUpdate(){ //重写,会对action 中的指定方法进行校验
==========================
输入校验的流程:
1.类型转换器对请求参数执行类型转换,并把转换后的值赋给action属性。
import com.opensymphony.xwork2.ActionSupport;
pubilc class PersonAction extends ActionSupport{

通过实例跟我学Struts2框架从入门到精通——如何校验Struts2框架中的Action类中的某个自定义方法的应用实例

通过实例跟我学Struts2框架从入门到精通——如何校验Struts2框架中的Action类中的某个自定义方法的应用实例

1.1通过代码实例跟我学Struts2框架从入门到精通——如何校验Struts2框架中的Action类中的某个自定义方法的应用实例1.1.1校验Struts2框架中的Action类中的某个自定义方法的应用实例如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。

Struts2也支持校验特定方法的validateXxx()方法。

其中的“XXX”代表Action类中的方法名称。

因为validate()方法会处理Action类中的所有逻辑方法。

而如果只需要对其中的单个或者部分逻辑方法进行验证,那么就需要重写validateXxx()方法。

validateXxx()使用了反射,相对来说性能稍差,而validate()则是通过接口com.opensymphony.xwork2.Validateable调用。

1、在Action类中增加另一个自定义的方法doUserLogin2、再添加doUserRegister方法,其中的代码与doUserLogin()代码相同public String doUserRegister(){ //在该方法中进行用户注册的功能实现boolean returnResult=getUserName().equals("yang1234")&&getUserPassWord().equals("12345678");if(returnResult){oneUserInfo=new UserInfoActionForm();oneUserInfo.setUserName(userName);oneUserInfo.setUserPassWord(userPassWord);HttpSession session=ServletActionContext.getRequest().getSession();session.setAttribute("oneUserInfo", oneUserInfo);resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");}else{resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");// resultMessage =getUserName()+" "+ this.getText("strutsweb.login.actionpackage.failure");}return this.SUCCESS;}3、在userLoginI18n.jsp页面中指示该方法的名称<formaction="${pageContext.request.contextPath}/i18nUserInfoManageActionModel!doUse rLogin.action" method="post" >或者<formaction="${pageContext.request.contextPath}/i18nUserInfoManageActionModel! doUserRegister.action" method="post" >4、将Action类中的validate()方法改名为validate DoUserLogin()(注意:其中的doUserLogin中的“d”要大写)最终的代码如下:package com.px1987.sshwebcrm.action;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;import erInfoActionForm;public class I18nUserInfoManageActionModel extends ActionSupport { private String userName=null;private String userPassWord=null;private String verifyCodeDigit=null;private int type_User_Admin;private String resultMessage;private UserInfoActionForm oneUserInfo=null;public I18nUserInfoManageActionModel() {}public String getResultMessage() {return resultMessage;}public void setResultMessage(String resultMessage) {this.resultMessage = resultMessage;}public String execute(){ //在该方法中进行用户登陆的功能实现boolean returnResult=getUserName().equals("yang1234") &&getUserPassWord().equals("12345678");if(returnResult){oneUserInfo=new UserInfoActionForm();oneUserInfo.setUserName(userName);oneUserInfo.setUserPassWord(userPassWord);HttpSession session=ServletActionContext.getRequest().getSession();session.setAttribute("oneUserInfo", oneUserInfo);resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");}else{resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");}return this.SUCCESS;}public String doUserLogin(){ //在该方法中进行用户登陆的功能实现boolean returnResult=getUserName().equals("yang1234") &&getUserPassWord().equals("12345678");if(returnResult){oneUserInfo=new UserInfoActionForm();oneUserInfo.setUserName(userName);oneUserInfo.setUserPassWord(userPassWord);HttpSession session=ServletActionContext.getRequest().getSession();session.setAttribute("oneUserInfo", oneUserInfo);resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");}else{resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");}return this.SUCCESS;}public String doUserRegister(){ //在该方法中进行用户注册的功能实现boolean returnResult=getUserName().equals("yang1234") &&getUserPassWord().equals("12345678");if(returnResult){oneUserInfo=new UserInfoActionForm();oneUserInfo.setUserName(userName);oneUserInfo.setUserPassWord(userPassWord);HttpSession session=ServletActionContext.getRequest().getSession();session.setAttribute("oneUserInfo", oneUserInfo);resultMessage =getUserName()+" "+ this.getText("strutsweb.login.success");}else{resultMessage =getUserName()+" "+ this.getText("strutsweb.login.failure");}return this.SUCCESS;}public void validate DoUserLogin() { //它能够验证 doUserLogin() if(getUserName()==null||getUserName().equals("")){addFieldError("erName",getText("erName.required"));}if(getUserPassWord()==null||getUserPassWord().equals("")){addFieldError("erPassWord",getText("erPassWord.required"));}if(getUserPassWord().length() <4){addFieldError("userPassWord.length",getText("erPassWord.length"));}}public void validate DoUserRegister() { //它能够验证 doUserRegister() if(getUserName()==null||getUserName().equals("")){addFieldError("erName",getText("erName.required"));}if(getUserPassWord()==null||getUserPassWord().equals("")){ addFieldError("erPassWord",getText("erPassWord.required"));}if(getUserPassWord().length() <4){addFieldError("userPassWord.length",getText("erPassWord.length"));}}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getUserPassWord() {return userPassWord;}public void setUserPassWord(String userPassWord) {erPassWord = userPassWord;}public String getVerifyCodeDigit() {return verifyCodeDigit;}public void setVerifyCodeDigit(String verifyCodeDigit) {this.verifyCodeDigit = verifyCodeDigit;}public int getType_User_Admin() {return type_User_Admin;}public void setType_User_Admin(int type_User_Admin) {this.type_User_Admin = type_User_Admin;}}4、再测试其效果 http://127.0.0.1:8080/sshwebcrm/userManage/userLoginI18n.jsp保证其中的请求是向doUserLogin方法请求<formaction="${pageContext.request.contextPath}/i18nUserInfoManageActionModel!doUse rLogin.action" method="post" >也可以将execute方法删除仍然会出现上面的错误!模拟用户注册功能<formaction="${pageContext.request.contextPath}/userInfoAction!doUserRegister.actio n" method="post" >然后再进行测试该方法的主要缺点——不灵活!比如对验证的要求发生变化(增加对新的数据的检查),此时必须修改验证程序!使得“验证程序”和对应的“表单”紧密关联。

struts2框架特征(一)

struts2框架特征(一)

struts2框架特征(一)Struts2框架特征1. 简介Struts2是一种基于Java的Web应用程序开发框架。

它通过采用MVC(模型-视图-控制器)设计模式,帮助开发者构建可维护、可扩展的Web应用程序。

2. 特征以下是Struts2框架的一些主要特征:•灵活性:Struts2允许开发者自由选择其他框架或库来实现不同层的功能,使得应用程序结构更具灵活性。

•面向切面编程(AOP)支持:Struts2框架通过使用拦截器,可以在请求处理的各个阶段进行操作和控制,从而实现面向切面的编程。

•数据验证:Struts2提供了强大的数据验证机制,可用于验证用户输入的数据,并提供了丰富的验证规则。

•集成性:Struts2框架可以与其他常用的Java框架(如Hibernate、Spring)进行集成,使开发过程更加高效。

•可插拔的架构:Struts2的架构允许开发者定义自己的组件,并将其插入到框架中,从而满足特定需求。

•国际化支持:Struts2提供了国际化和本地化支持,开发者可以轻松地将应用程序适应不同的语言和区域。

•丰富的标签库:Struts2提供了大量的JSP标签库,用于简化视图层的开发工作。

•拥有强大的拦截器机制:Struts2框架通过拦截器提供了更好的请求处理、异常处理和日志记录机制。

•良好的文档和社区支持:Struts2拥有丰富的官方文档和活跃的开发者社区,开发者可以轻松获取帮助和支持。

3. 总结通过使用Struts2框架,开发者可以快速构建健壮、可扩展的Web应用程序。

Struts2的灵活性、可插拔的架构和丰富的特性使其成为许多开发者首选的框架之一。

注意:文章中未包含HTML字符、网址、图片及电话号码等内容,且符合Markdown格式的要求。

Struts2框架特征(续)4. 数据驱动Struts2框架采用数据驱动的开发方式。

通过将请求参数映射到合适的JavaBean中,开发者可以很方便地处理用户输入的数据。

struts2内置校验器使用

struts2内置校验器使用

最近在自学struts2,基本的配置了解以后又学习了struts2强大的检验功能,不仅内置的校验器非常丰富,而且也提供自定义校验。

本人做了些学习笔记,与大家分享,虽然有点水,也希望能帮到人。

首先,为什么要使用struts2的validate验证框架。

使用struts2的验证框架,能够提高客户端提交的数据的安全性。

通过验证,确保保存进数据库的信息是正确的,包括数据的格式(日期、e-mail、数字等)、判空等逻辑。

在现在javascript横行的时代,可能有人会说,我可以使用js,没必要非用后台校验的方式那样不仅增加服务器压力,而且与用户的交互也不好。

是的,js确实能完成这样的操作,但是你有没有想过,js是可以被人改掉了,可以通过很多方式来绕过客户端验证,比如模拟请求等。

(打开F12加一条js就可以取消掉校验的执行至于具体如何操作,本人还不知道),有些复杂的校验脚本语言是无法完成的呀。

所以不管服务器校验也好,客户端校验也好,我们都是需要的。

客户端验证的好处是快捷,用户体验好,减少服务器端的压力。

服务器端验证更可靠安全,可以做一些客户端验证做不到的,但是服务器端验证占用服务资源。

所以两者的使用要根据具体的场景,应该合理应用。

下面,是我本人亲手写的程序调试,重点出场啦~~在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。

对于输入校验struts2提供了两种实现方法:1. 基于XML配置方式实现。

2. 采用手工编写代码实现。

一、基于XML配置方式实现1、XML文件规定了参数的一些校验条件,XML命名规则:ActionName-validation.xml,其中ActionName是Action类的名字,文件放在和Action同目录下;注意:当需要对逻辑action进行校验时,如果存在一般形式的ActionName-validaton.xml文件,则也会对此逻辑Action进行校验;2.输入校验失败后,和类型转换一样,会将错误封装成fieldError,并放入Action Context中,因此在JSP中添加<s:fielderror/>可显示错误,此内容也是我们在数据校验文件中配置的;3.当输入校验失败后,和类型转换一样,返回逻辑视图为input,因此在struts.xml中必须配<result name="input"></input>;4.输入校验失败后,struts表单标签也会自动输出错误提示;XML配置文件格式:表单界面JSP:Action逻辑处理界面:Struts2的XML配置文件:从此struts配置文件可以看出,上面的表单jsp同时也是,出现错误之后返回的物理视图。

struts2数据验证框架

struts2数据验证框架

Struts2 验证框架 validation.xml 常用的验证规则validation.xml 的命名规则和放置路径:文件名:<ActionClassName>-validation.xml<ActionClassName>就是要验证的Action类的名字。

要将此文件放于Class文件相同的目录。

如果在Action类在struts配置中有多个action实例(action name),那么对应某个action的验证文件名规则如下:文件名:<ActionClassName>-<aliasName>-validation.xml例如:UserAction-login-validation.xml(注意:上面的<aliasName>并不是method name,而是struts.xml中配置的action的name)validation.xml 的内容示例:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN""/xwork/xwork-validator-1.0.2.dtd"><validators><field name="username"><field-validator type="requiredstring"><param name="trim">true</param><message>请填写用户名</message></field-validator><field-validator type="stringlength"><param name="minLength">4</param><param name="maxLength">32</param><message>用户名长度应在4到32个字符间</message></field-validator></field><field name="password"><field-validator type="requiredstring"><message>请填写密码</message></field-validator><field-validator type="stringlength"><param name="minLength">6</param><param name="maxLength">32</param><message>为了您账号的安全,请设置6个字母以上的密码(最长可设置32个字母)</message></field-validator></field></validators>Struts2 的验证规则大概有以下数种:required:必填校验器requiredstring:必填字符串校验器int:整数校验器double:双精度浮点数校验器date:日期校验器expression:表达式校验器fieldexpression:字段表达式校验器email:电子邮件校验器url:网址校验器visitor:Visitor校验器conversion:转换校验器stringlength:字符串长度校验器regex:正则表达式校验器具体的使用方法可以GOOGLE,下面举例几种常用的验证规则:常用的验证规则:1。

软件开发框架(J2EE)Struts 2手动输入校验

软件开发框架(J2EE)Struts 2手动输入校验
软件开发框架(J2EE)
输入校验的重要性
• 由于Web应用的开放性,输入校验直接影响了系统的稳 定性。因为不能保证每个用户都按照开发者的意图来输 入数据,而往往有些用户喜欢恶意输入非法数据来进行 测试和破坏。例如,会员注册系统中,如果用户输入的 出生日期在今日日期之后,则需要对用户输入的数据信 息进行校验并在页面中提示用户校验的结果信息。因此 ,良好的输入校验,是一个项目的必不可少的环节。
软件开发框架(J2EE)
validate()方法输入校验
• 在Struts 2框架中,validate()方法是专门用来校验数据的 方法。具体实现时,可以通过继承ActionSupport类,并 重写validate()方法来完成输入校验。
软件开发框架(J2EE)
validate()方法输入校验实例
软件开发框架(J2EE)
validate()方法输入校验实例
1.在MyEclipse开发工具中创建Web应用ch6,并配置Struts 2开发环境。
软件开发框架(J2EE)
validate()方法输入校验实例
2. 在 src 目 录 下 新 建 com.mxl.actions 包 , 并 在 其 中 创 建 LoginAction 类 , 在 该 类 中 重 写父 类 ActionSupport 中 的 validate()方法。
软件开发框架(J2EE)
validate()方法输入校验实例
5.运行程序,请求userlogin.jsp页面,输入用户名和密码, 校验数据的有效性。
软件开发框架(J2EE)
validateXxx()方法输入校验
• 在Struts 2框架中,Action可以包含多个逻辑处理方法, 也就是可以包含多个类似于execute()的方法,只是方法 名不同。如果在Action中重写了validate()方法后,则会在 每次调用逻辑处理方法前调用validate()方法。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<?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="javaee.struts" extends="struts-default">
else {
System.out.println("用户名或密码错误,登录失败"); return "failed"; } } }
完成 Action 的定义之后,要想使用 Action 类还必须在 struts.xml 文件中对其进行相关配置。 其具体配置如下所示。
配置文件 14-4 WEB-INF\classes\struts.xml
14.2.5 Struts2 校验框架
1.手工编写代码实现输入校验 在 Action 类中通过重写 validate()或 validateXxx()方法可以实现输入校验。Struts2 会按照如下 的过程完成输入校验工作。 (1)类型转换器对请求参数执行类型转换,并把转换后的值赋给 Action 中的属性。 (2)如果在执行类型转换的过程中出现异常,系统会将异常信息保存到 ActionContext, conversionError 拦截器将异常信息封装到 fieldErrors 里,然后执行第(3)步。如果类型转换没有
System.out.println("username is " + username + "\t password is " + password); if(username.equals("admin") && password.equals("123456")) {
return "success"; }在的包。 action 标签:所有的 Action 都必须通过 action 标签配置。 -name 属性: 访问 Action 的逻辑名称。 -class:属性 Action 类的全限定名。 -result 标签: 定义跳转路径,execute()方法的返回值在此定义。默认情况下为转发,如果是重 定向,必须按照 <result type="redirect" name="xx">/xx.jsp</result>的格式书写。
<action name="login" class="javaee.struts.LoginAction"> <result name="success">/success.jsp</result> <result name="failed">/failed.jsp</result>
</action> </package> </struts>
Java EE 6 企业级应用开发教程
public void setUsername(String username) { ername = username;} public String getPassword() { return password;} public void setPassword(String password) { this.password = password;} //Action 类的处理函数 public String execute() throws Exception{
相关文档
最新文档