- ActionForm的代码校验
- Action里的代码校验
- 结合commons-validator.jar的校验
1.1 ActionForm的代码校验
ActionForm的代码校验是最基本的校验方式。这种校验方式是重写ActionForm的validate方法,在该方法内对所有的字段进行基本的校验。如果出现不符合要求的输出,则将出错提示封装在ActionError对象里,最后将多个ActionError组合成ActionErrors对象,给对象里封装了全部的出错信息。
以登陆页面为例,下面是重写了Validate方法的ActionForm的代码:
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts.action.ActionError;
- import org.apache.struts.action.ActionErrors;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionMapping;
- public class LoginActionForm extends ActionForm {
- private static final long serialVersionUID = 1L;
- private String username;
- private String password;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- //重写validate方法,完成数据校验
- @SuppressWarnings("deprecation")
- @Override
- public ActionErrors validate(ActionMapping mapping,
- HttpServletRequest request) {
- //ActionErrors用于包装所有的出错信息
- ActionErrors errors = new ActionErrors();
- //如果用户名为空
- if((username == null)||(username.equals(""))) {
- //error.username对应资源文件中的key,用户名是对应资源文件的第一个参数
- errors.add("username", new ActionError("error.username","用户名"));
- }
- //如果密码为空
- if((password == null )||(password.equals(""))) {
- errors.add("password", new ActionError("error.password","密码"));
- }
- //返回封装了所有的出错信息
- return errors;
- }
- } :
- <%@ page language="java" contentType="text/html; charset=GB2312" errorPage="error.jsp"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>
- <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
- <html>
- <head>
- <!-- 使用国际化资源文件的key输出标题 -->
- <title><bean:message key="login"/></title>
- </head>
- <!-- 下面的标签用于输出出错信息 -->
- <!-- *******************************************-->
- <html:errors/>
- <!-- ******************************************* -->
- <body>
- <font color="red">
- <%
- //用于输出出错信息,出错信息保存在request的err属性中
- if(request.getAttribute("err")!=null) {
- out.println(request.getAttribute("err"));
- }
- %>
- </font>
- <br><br>
- <!-- 下面是登陆表单 -->
- 请输入用户名和密码:<hr>
- <html:form action="login.do" method="post">
- <bean:message key="username" />:<html:text property="username" />
- <br>
- <bean:message key="password" />:<html:text property="password" />
- <br>
- <html:submit>
- <bean:message key="login"/>
- </html:submit>
- <br>
- </html:form>
- </body>
- </html>
由于在本项目中用到了资源文件,因为有了资源文件的支持,JSP页面只需要简单的<html:errors/>标签就可以生成全部的出错信息,下面是资源文件:
- # -- standard errors --
- username=用户名
- password=密码
- login=登陆
- noname=请输入用户名,然后在登陆
- nopassword=请输入密码,然后在登陆
- #html:errors将自动加载errors.header作为出错提示标题
- errors.header=<h3><font color="red">验证出错</font></h3>你必须按以下提示修改你的输入才能继续....
- error.username={0} 必须填写.<br>
- error.password={0} 必须填写.<br>
- #html:errors将自动加载errors.footer作为出错的最后一行
- errors.footer=<h3><font color="green">你完成上面提示部分</font></h3>
# -- standard errors --username=用户名password=密码login=登陆noname=请输入用户名,然后在登陆nopassword=请输入密码,然后在登陆#html:errors将自动加载errors.header作为出错提示标题errors.header=<h3><font color="red">验证出错</font></h3>你必须按以下提示修改你的输入才能继续....error.username={0} 必须填写.<br>error.password={0} 必须填写.<br>#html:errors将自动加载errors.footer作为出错的最后一行errors.footer=<h3><font color="green">你完成上面提示部分</font></h3>
注:上述资源文件还不能直接在项目中应用,在使用前需要转换成unicode格式。
命令:native2ascii MessageResources_zh_CN.properties MessageResources.properties
以上是使用ActionForm进行数据验证的方法,但是使用ActionForm的数据验证有个显著的问题:ActionErrors和ActionError都是struts不在推荐使用的类,因此,应尽量避免使用这种验证方法。
1.2 Action的代码验证
在Action里通过代码完成输入验证,是最基本,也是最容易使用的方法。与当初的MVC设计相似,在调用业务逻辑组件之前,先对数据进行基本的验证,这是最传统也是最原始的方法。
在Action里面完成数据验证,实际上就是在execute方法前面增加数据验证的部分代码。下面是增加了数据验证Action代码:
- public class LoginAction extends Action {
- @Override
- //必须重写核心方法,该方法负责处理用户的请求
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- //解析用户请求参数
- LoginActionForm laf = (LoginActionForm)form;
- String username = laf.getUsername();
- System.out.println(" 您输入的用户名是:"+username);
- String password = laf.getPassword();
- //出错提示
- String errMsg = "";
- // 完成服务器端的校验
- if (username == null || username.equals("")) {
- errMsg += "您的用户名丢失或没有输入,请重新输入!";
- } else if (password == null || password.equals("")) {
- errMsg += "您的密码丢失或是没有输入密码,请重新输入!";
- } else {
- //如果通过校验,则开始调用业务逻辑
- }
- }
- }
这种校验方式非常容易理解,所有的代码都需要程序员自己控制,相当灵活。但有几个不方便的地方:
- 需要书写大量的验证代码,是程序变得繁琐
- 数据验证应该在填充ActionForm里完成,最好能在客户端完成检验,而不是推迟到Action里才完成数据校验。
注意:在实际的使用中,这种校验方式不仅使程序开发变得复杂,且性能也不高。
1.3 Validator验证框架
利用Struts的提供的Validator验证框架可实现客户端和服务器端双验证。Struts的Validator验证框架定义了常用的十几个验证规则,如:required(验证非空)、minlength(验证最小长度)、maxlength(验证最大长度)、intRange(验证整形范围)、email(验证电子邮件地址)、date(验证日期)等,并且实现了客户端的Javascript验证和服务器端验证,以下是在myeclipse环境下使用Validator验证框架的步骤:
1. 配置
目前使用的版本是Struts1.2.9(下载地址:http://struts.apache.org/download.cgi),里面有validator-rules.xml和validator.xml两个文件,在使用Validator之前,需要先配置一些东西。
1)必要的包:
将Struts发行包中的commons-validator.jar和jakarta-oro.jar这两个文件放到Web应用的WEB-INF/lib目录中。
2)自己定义的FormBean需要继承ValidatorForm,代码如下:
- import org.apache.struts.validator.ValidatorForm;
- public class LoginActionForm extends ValidatorForm {
- private static final long serialVersionUID = 1L;
- private String username;
- private String password;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
import org.apache.struts.validator.ValidatorForm;public class LoginActionForm extends ValidatorForm { private static final long serialVersionUID = 1L; private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
注:Validator框架不能用于验证标准的org.apache.struts.action.ActionForm类。如果要使用Validator框架应该采用ActionForm类的两个子类:DynavalidatorForm和ValidatorForm。
3)编写表单域时必须满足的校验规则。校验规则都由规则文件控制,规则文件有以下两个:
- validator-rules.xml文件
- validation.xml文件
第一个文件可在struts的解压缩后的文件夹lib下找到,只需将该文件复制到WEB-INF路径下,该文件是通用文件,一般不需要修改。除非打算修改或扩展这组规则,否则无需修改这个文件!
注意1:需要在资源包(ApplicationResources.properties)中加上一下的“键-值”:
- # -- standard errors --
- username=username
- password=password
- login=submit
- noname=please enter name
- nopassword=please enter password
- # Struts Validator Error Messages
- errors.required={0} is required.
- errors.minlength={0} can not be less than {1} characters.
- errors.maxlength={0} can not be greater than {1} characters.
- errors.invalid={0} is invalid.
- errors.byte={0} must be a byte.
- errors.short={0} must be a short.
- errors.integer={0} must be an integer.
- errors.long={0} must be a long.
- errors.float={0} must be a float.
- errors.double={0} must be a double.
- errors.date={0} is not a date.
- errors.range={0} is not in the range {1} through {2}.
- errors.creditcard={0} is an invalid credit card number.
- errors.email={0} is an invalid e-mail address.
- #loginForm
- loginActionForm.login=username
# -- standard errors --username=usernamepassword=passwordlogin=submitnoname=please enter namenopassword=please enter password# Struts Validator Error Messageserrors.required={0} is required.errors.minlength={0} can not be less than {1} characters.errors.maxlength={0} can not be greater than {1} characters.errors.invalid={0} is invalid.errors.byte={0} must be a byte.errors.short={0} must be a short.errors.integer={0} must be an integer.errors.long={0} must be a long.errors.float={0} must be a float.errors.double={0} must be a double.errors.date={0} is not a date.errors.range={0} is not in the range {1} through {2}.errors.creditcard={0} is an invalid credit card number.errors.email={0} is an invalid e-mail address.#loginForm loginActionForm.login=username
因为,验证出错的时候,系统会自动在资源包中查找对应的错误消息, 比如:required验证规则出现错误时,就会输出“errors.required”的值。
注意2:在Struts 1.2.9中,验证类使用的是:“org.apache.struts.validator.FieldChecks”,
以前使用的是“org.apache.struts.util.StrutsValidtor”,
只要是从struts 1.2.x发行包中拷贝的“validation-rules.xml”文件,就可以保证是正确的。 而第二个validation.xml文件则是属于你自己项目的校验文件,负责每个表单域必须满足的规则,同样也要放在WEB-INF路径下面:
下面是本示例程序的validation.xml文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0.1//EN"
- "validator_1_0_1.dtd" >
- <!-- 检验规则文件的根元素 -->
- <form-validation>
- <!-- 所需要校验的form都放在formset元素里面 -->
- <formset>
- <!-- 定义需要校验的表单,此处的name必须与struts-config.xml中定义的FormBean的名字一致 -->
- <form name="loginActionForm">
- <!-- 每个field元素定义一个表单域,即要验证的字段;必须满足怎样的规则 -->
- <field property="username" depends="required">
- <!-- field:要验证的字段,即属性,depends:依赖的验证规则 -->
- <arg0 key="loginActionForm.login" />
- <!-- arg0:在资源包中配置错误消息的{0}参数值 -->
- </field>
- <field property="password" depends="required,minlength">
- <!-- 多个验证规则用逗号分割 -->
- <arg0 key="loginActionForm.password" />
- <arg1 name="minlength" key="#{var:minlength}" resource="false" />
- <!-- resource:false该key的值不在资源包中给出,而是在本文件给 -->
- <var>
- <!-- 定义变量,给上面的key所用 -->
- <var-name>minlength</var-name>
- <var-value>5</var-value>
- </var>
- </field>
- </form>
- </formset>
- </form-validation>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0.1//EN" "validator_1_0_1.dtd" ><!-- 检验规则文件的根元素 --><form-validation> <!-- 所需要校验的form都放在formset元素里面 --> <formset> <!-- 定义需要校验的表单,此处的name必须与struts-config.xml中定义的FormBean的名字一致 --> <form name="loginActionForm"> <!-- 每个field元素定义一个表单域,即要验证的字段;必须满足怎样的规则 --> <field property="username" depends="required"> <!-- field:要验证的字段,即属性,depends:依赖的验证规则 --> <arg0 key="loginActionForm.login" /> <!-- arg0:在资源包中配置错误消息的{0}参数值 --> </field> <field property="password" depends="required,minlength"> <!-- 多个验证规则用逗号分割 --> <arg0 key="loginActionForm.password" /> <arg1 name="minlength" key="#{var:minlength}" resource="false" /> <!-- resource:false该key的值不在资源包中给出,而是在本文件给 --> <var> <!-- 定义变量,给上面的key所用 --> <var-name>minlength</var-name> <var-value>5</var-value> </var> </field> </form> </formset></form-validation>
4)在struts-config.xml中设置插件:
- <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
- <set-property property="pathnames"
- value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
- </plug-in>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in>
注:value值用来指定验证规则的文件的路径,多个验证规则文件要用逗号分割
同时还要在该文件中的Action元素里面增加两个属性:input属性和validate属性,input属性指定不满足规则时返回的页面,应该将validate的属性值设置为true。
5)修改JSP页面
代码如下:
- <%@ page language="java" contentType="text/html; charset=GB2312" errorPage="error.jsp"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>
- <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
- <html:html>
- <head>
- <!-- 使用国际化资源文件的key输出标题 -->
- <title><bean:message key="login"/></title>
- </head>
- <!-- 下面的标签用于输出出错信息 -->
- <html:errors/>
- <body>
- <font color="red">
- <%
- //用于输出出错信息,出错信息保存在request的err属性中
- if(request.getAttribute("err")!=null) {
- out.println(request.getAttribute("err"));
- }
- %>
- </font>
- <br><br>
- <!-- 下面是登陆表单 -->
- 请输入用户名和密码:<hr>
- <html:form action="login.do" method="post" onsubmit="return validateLoginActionForm(this);">
- <bean:message key="username" />:<html:text property="username" />
- <br>
- <bean:message key="password" />:<html:password property="password"/>
- <br>
- <html:submit>
- <bean:message key="login"/>
- </html:submit>
- <br>
- </html:form>
- <html:javascript formName="loginActionForm"/>
- </body>
- </html:html>
注:实现客户端的javascript验证,只需在<form onSubmit=”return validateLonginActionForm(this);”>配置提交事件和使用<html:javascript formName=”loginActionForm”/>
相关推荐
Struts 1.2.9 是一个非常经典的Java Web开发框架,由Apache软件基金会的Jakarta项目维护。这个版本发布于很久以前,但它仍然是许多遗留系统的基础,因为它的稳定性和丰富的功能集。Struts 1引入了MVC(模型-视图-...
Struts 1.2.9 是一个经典的Java Web开发框架,属于MVC(Model-View-Controller)架构模式的一种实现。MVC模式是软件工程中用于分隔应用程序数据逻辑、用户界面和应用流程控制的常见设计模式。在这个框架中,模型负责...
Struts1.2.9是Apache软件基金会的一个开源项目,它是Model-View-Controller(MVC)设计模式在Java Web应用程序中的实现。这个框架的主要目标是简化开发过程,提高代码组织性和可维护性,使开发者能够更高效地构建...
Struts 1.2.9 是一个非常经典的Java Web开发框架版本,主要用于构建基于MVC(Model-View-Controller)模式的应用程序。该框架由Apache软件基金会开发并维护,为开发者提供了一种组织应用程序结构、处理HTTP请求以及...
在本篇文章中,我们将深入探讨Struts 1.2.9框架的相关知识,包括其下载方式、安装步骤、核心概念及应用案例等。 ### Struts 1.2.9框架概述 Struts 1.2.9是Struts 1.x系列中的一个版本,它是一个开源的MVC(Model-...
Struts1.2.9是Apache软件基金会的Jakarta项目中的一个核心框架,主要用于构建基于Java的Web应用程序。这个框架是MVC(Model-View-Controller)设计模式的一个实现,它帮助开发者在Java EE平台上创建结构清晰且易于...
Struts1.2.9是Apache软件基金会的Jakarta项目中的一个开源框架,主要用于构建基于Java的Web应用程序。这个框架的核心是MVC(Model-View-Controller)设计模式,它帮助开发者将业务逻辑、数据表示和用户界面进行分离...
这个“struts1.2.9-src.zip”压缩包包含了Struts框架的1.2.9版本的源代码,允许开发者深入理解其内部工作机制,并进行定制或扩展。 Struts 1.2.9是该框架的一个稳定版本,它在之前的版本基础上进行了一系列的优化和...
Struts1.2.9是该框架的一个版本,发布于2007年,它在Struts1系列中具有广泛的使用,尤其在那个时期的企业应用开发中占据了重要地位。 Struts1的核心组件包括: 1. **ActionServlet**:这是Struts框架的控制器组件...
Struts 1.2.9 是一个非常重要的Java Web开发框架,由Apache软件基金会开发并维护。这个版本的Struts是Struts 1系列中的一个稳定版本,它为开发者提供了构建MVC(Model-View-Controller)架构的应用程序的能力。在...
这里的"struts-1.2.9-lib.zip"和"struts-1.2.9-src.zip"是Struts 1.2.9版本的两个重要组件。 "struts-1.2.9-lib.zip"文件包含的是Struts 1.2.9的运行库,也就是库文件包。这个压缩包中汇集了运行Struts应用所需的...
struts1.2.9的lib,jar包 antlr commons-beanutils commons-digester commons-fileupload commons-logging commons-validator jakarta-oro struts
Struts 1.2.9 是一个非常经典的Java Web开发框架,由Apache软件基金会开发,主要用于构建基于MVC(Model-View-Controller)设计模式的Web应用程序。此框架的发布版本包括jar包和源码,方便开发者进行学习、调试和...
Struts 1.2.9是该框架的一个较旧版本,发布于2007年,尽管现在已经有更新的版本如Struts 2,但Struts 1.x在很多遗留系统中仍然广泛使用。 标题中的"struts-1.2.9-bin.zip"表明这是一个包含Struts 1.2.9二进制文件的...
Struts 1.2.9 是一个非常经典的Java Web开发框架,主要用于构建MVC(Model-View-Controller)架构的应用程序。这个版本的Struts在2006年发布,虽然现在已经有一些过时,但仍然在很多遗留系统中广泛使用。下面我们将...
- 数据校验框架:通过Validator插件对用户输入进行验证。 - Tiles框架集成:更方便地组织和复用视图组件。 5. **源码分析价值** - 理解核心组件间的协作机制,提高问题定位能力。 - 学习框架设计思想,为自定义...
Struts 1.2.9 是一个非常经典的Java Web开发框架,由Apache软件基金会开发,主要用于构建MVC(Model-View-Controller)架构的应用程序。这个版本的API文档提供了开发者们详细的操作指南和类库参考,帮助他们更好地...
Struts 1.2.9 是一个非常经典的Java Web开发框架,由Apache软件基金会开发并维护。这个框架在Web应用程序的构建中起到了核心作用,它实现了Model-View-Controller(MVC)设计模式,帮助开发者将业务逻辑、数据模型和...
Struts 1.2.9 是一个非常经典的Java Web开发框架,主要应用于MVC(Model-View-Controller)设计模式。这个压缩包“struts-1.2.9-lib”包含的是Struts 1.2.9版本的核心库文件,是开发基于Struts的Web应用所必需的依赖...
struts1.2.9.jar包 struts1.2.9.jar包