`
weigang.gao
  • 浏览: 491430 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

struts1.x简单的数据验证(2)

 
阅读更多

地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251197.html

简单验证从本质上说就是在服务端来验证客户端提交的form中的数据。这种验证只是对form中的数据规则进行检查,如必须输入用户ID,价格不能小于0或是对email格式的验证。在这个验证过程中,并不需要访问数据库。因此,简单验证需要在用户提交form后,并且在服务器处理form中的数据之前进行。

    在进行完简单验证后,如果form中的数据不合法,程序就会forward到指定的JSP页(一般是包含form的页面),并显示相应的错误信息。如果form中的数据完全正确,程序就会继续执行。

一、在validate方法中进行简单验证


    
在上一篇文章中我们知道,Struts1.x通过ActionForm的子类来封装了客户端提交的form中的数据。而服务端程序只需要通过ActionForm的子类的对象实例就可以访问form中的数据,而如果不使用ActionForm类,就必须通过request对象来获得form中的数据。通过这种封装机制可以使代码更容易理解。然而,ActionForm类不仅可以封装form中的数据,还可以通过ActionForm类的validate方法来验证form中的数据。validate方法的定义如下:

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)

 

    当客户端向服务端提交form后,Servlet引擎首先通过ActionForm的子类的对象实例装载form中的数据,然后再调用validate方法进行验证。validate方法返回了一个ActionErrors对象。这个对象相当于一个Map,如果ActionErrors中没有错误信息,Servlet引擎就认为form中的数据是正确的,这时服务端程序就会继续执行。如果ActionErrors中有错误信息,程序就会跳转到指定的错误页面。下面让我们通过一个完整的例子来演示一下如何通过validate方法来验证form中的数据。实现这个例子需要如下五步:

【第1步】建立JSP页面

    在这一步将建立一个叫simpleValidation.jsp的页面,这个JSP页面用于采集用户的输入信息。在<samples工程目录>中建立一个simpleValidation.jsp文件,并编写如下的代码:

  <%@ page pageEncoding="GBK"%>
  <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
  <html>
      <head>
          <title>注册信息(测试简单验证)</title>
          <style type="text/css">
  .text 
{
      height
: 20px;
      width
: 160px;
  
}
  
</style>
      </head>
      <body>
          <html:form action="simpleValidation">
              <table width="100%">
                  <tr>
                      <td align="right" width="45%"> 用户名:</td>
                      <td width="55%">
                          <html:text property="user" styleClass="text" />
                          <font color="red"><html:errors property="errorUser" /></font>
                      </td>
                  </tr><tr /><tr />
                  <tr>
                      <td align="right">登录密码:</td>
                      <td>
                          <html:password property="password" styleClass="text" />
                          <font color="red"><html:errors property="errorPassword" /></font>
                      </td>
                  </tr><tr /><tr />
                  <tr>
                      <td align="right">重复登录密码:</td>
                      <td>
                          <html:password property="password1" styleClass="text" />
                          <font color="red"><html:errors property="errorPassword1" /></font>
                      </td>
                  </tr><tr /><tr />
                  <tr>
                      <td align="right">电子邮件:</td>
                      <td>
                          <html:text property="email" styleClass="text" />
                          <font color="red"><html:errors property="errorEmail" /></font>
                      </td>
                  </tr><tr /><tr />
                  <tr>
                      <td align="right"> <br> ${requestScope.success } </td>
                      <td align="left"> <br> <html:submit value=" 提交 " /> </td>
                  </tr>
              </table>
          </html:form>
      </body>
  </html>

 

 在启动Tomcat后,在IE的地址栏中输入如下的URL

http://localhost:8080/samples/simpleValidation.jsp

当通过上面的URL访问simpleValidation.jsp时,并不能正确显示用户信息采集界面。原因是<html:form>标签使用了一个simpleValidation,当JSP转换成Servlet时,这个动作必须在struts-config.xml文件中正确定义,否则将抛出一个javax.servlet.jsp.JspException异常。

【第2步】建立simpleValidation动作

由于本例的着重点是简单验证,因此,simpleValidation动作并不需要处理更多的工作。一个动作对应于一个动作类,这个动作类一般是org.apache.struts.action.Action类的子类。simpleValidation动作只做如下两项工作:

1.  设置验证成功后,在目标页中显示的信息字符串(保存在request的属性中)。

2.       跳转到目标页。

    simpleValidation动作对应的动作类是SimpleValidationAction,在<samples工程目录>"src"action目录中建立一个SimpleValidationAction.java文件,并输入如下的代码:

  package action;
  
  import javax.servlet.http.*;
  import org.apache.struts.action.*;
  
  public class SimpleValidationAction extends Action
  {
      public ActionForward execute(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response)
              throws Exception
      {        
          request.setAttribute("success", "提交成功!");  // 设置在目标页中显示的信息字符串
          return mapping.findForward("simple");  // 跳转到目录页(simple所指的JSP页)
      }
  }

【第3步】建立ActionForm类
    在这一步我们来建立一个用于接收有户的提交信息的ActionForm类:SimpleValidationForm。这个类从org.apache.struts.action.ActionForm类继承。在<samples工程目录>"src"actionform目录中建立一个SimpleValidationForm.java文件,代码如下:

  package actionform;
  
  import javax.servlet.http.HttpServletRequest;
  import org.apache.struts.action.*;

  public class SimpleValidationForm extends ActionForm
  {
      // 以下四个变量分别对应于simpleValidation.jsp中的四个文本框中的值。
      private String user;    
      private String password;
      private String password1;
      private String email;
  
      public String getUser()  
      {
          return user;
      }
      public void setUser(String user)
      {
          this.user = user;
      }
      public String getPassword()
      {
          return password;
      }
      public void setPassword(String password)
      {
          this.password = password;
      }
      public String getPassword1()
      {
          return password1;
      }  
      public void setPassword1(String password1)
      {
          this.password1 = password1;
      }
      public String getEmail()
      {
          return email;
      }
      public void setEmail(String email)
      {
          this.email = email;
      }  
      // 开始验证用户提交的信息 
      public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
      {
          ActionErrors error = new ActionErrors();
          if (user.equals(""))   // 必须输入用户名
              error.add("errorUser", new ActionError("error.user.blank"));
          if (password.equals(""))  // 必须输入密码
              error.add("errorPassword", new ActionError("error.password.blank"));
          else if (!password.equals(password1))  // 两个登录密码必须一致
              error.add("errorPassword1", new ActionError("error.password1.confirmation"));
          if (email.equals(""))  // 必须输入email
              error.add("errorEmail", new ActionError("error.email.blank"));
          else if (!email.matches("\\w+(\\.\\w+)*@\\w+(\\.\\w+)+"))  // 验证email的格式是否正确
              error.add("errorEmail", new ActionMessage("error.email.invalid"));
  
           // 返回错误信息,如果error中没有错误信息,
           // 就会调用SimpleValidationAction类的对象实例来执行execute方法。
          return error;        
      }
  }

 

在编写SimpleValidationAction类时应注意如下八点:
    1. 要想在ActionForm类中进行验证,必须在ActionForm类的子类中覆盖validate方法。
    2. validate方法在ActionForm类的对象实例装载完用户提交的数据后调用,因此,在调用validate方法时,ActionForm类的属性值已经是用户提交的信息了。所以可以直接使用这些属性值进行验证。
    3. validate方法中验证用户提交的数据时,要使用ActionErrors类的实例对象返回错误信息
   
4. ActionErrors类的构造方法的第二个参是一个ActionMessage类的对象实例,而不是错误描述信息。
   5.ActionMessage类的构造方法的参数并不是错误描述信息,而是错误描述信息的key,具体的信息在Java属性文件中(将在下一步实现)。

    6. 使用ActionForm的属性可以非常好地验证字符串类型,但对于其他的数据类型(如整型)的某些验证却不太适合。如当用户提交数据时,本该提交一个整数,但用户却提交了一个非整数信息。对于这种情况,在ActionForm类的对象实例中这个用户提交的数据的值为0。虽然使用ActionForm类的属性无法准确验证这种情况,但我们可以使用validate方法的第二个参数requestgetParameter方法直接获得客户端提交的数据来进行验证。
    7. 如果ActionErrors对象中有错误信息,在JSP中需要使用<html:errors>标签显示错误信息。
   8. Struts实际上是将ActionErrors对象以org.apache.struts.action.ERROR作为键值保存在了request的属性中。因此,<html:errors>标签实际上是从request的属性中获得的错误信息描述。如我们也可以通过如下的Java代码来获得produceID属性的错误描述信息:

  <
    java
.util.Iterator<org.apache.struts.action.ActionMessage> it =
 ((org.apache.struts.action.ActionErrors)request
                      .getAttribute("org.apache.struts.action.ERROR")).get("productID");
    out.println(((org.apache.struts.util.PropertyMessageResources )request
       .getAttribute("org.apache.struts.action.MESSAGE")).getMessage("error.productID.blank",null));
  %>

 

【第4步】建立Java属性文件

Java属性文件相当于资源文件,以key = value形式保存了在程序中需要的字符串信息。Java属性文件的扩展名为properties。在<samples工程目录>"src目录中建立一个struts目录,在struts目录中建立一个ErrorDescription.properties文件,并输入如下的内容:
 
ErrorDescription.properties

  error.user.blank = User can't be null.
  error.password.blank = Password can't be null.
  error.password1.confirmation = Password doesn't match confirmation.
  error.email.blank = Email can't be null.
  error.email.invalid = It is not a valid email address.

 

 

【第5步】配置struts-config.xml文件

    在本例中需要配置struts-config.xml文件的三个标签:<form-bean><action><message-resources>
    1. 配置<form-bean>标签

这个标签用来定义ActionForm。在<form-beans>标签中加入如下所示的<form-bean>标签:

<form-bean name="simpleValidationForm" type="actionform.SimpleValidationForm" />

 

2. 配置<action>标签
    
    这个标签用来定义Struts中的动作类。在<action-mappings>标签中加入如下所示的<action>标签:

  <action name="simpleValidationForm" path="/simpleValidation" scope="request" type="action.SimpleValidationAction"
               input
="simpleValidation.jsp">
      <forward name="simple" path="simpleValidation.jsp" />
  </action>

 

    <action>标签中的属性含义描述如下:

1.   name:表示ActionForm的名称。也就是<form-bean>标签中的name属性的值。

2. path:表示Struts动作,必须以“/”开头。

3. scope:表示ActionForm类的对象实例(在本例中是SimpleValidationForm类的对

象实例)保存的范围。这个属性值只能取requestsession。默认值是session。如果scope的值为request,表示将SimpleValidationForm类的对象实例以simpleValidationForm作为键值保存到了request的属性中。如果scope的值为session,表示不将SimpleValidationForm类的对象实例保存到request的属性中。但不管scope的值是request还是sessionStruts都会将SimpleValidationForm类的对象实例保存到session的属性中。

4. type:表示SimpleValidationAction类的全名。

5. input:表示如果客户端提交的数据未通过简单验证后要跳转到的页面,也就是在

SimpleValidationForm类的validate方法中返回的ActionErrors对象中含有错误描述信息。Struts会自动跳转到input属性所指的JSP页面。

    <action>标签中的子标签<forward>定义了可以在动作类(在本例中就是SimpleValidationAction类)中读取的forward页的URL

2.       配置<message-resources>标签

这个标签用来定义程序中所使用的属性文件。在struts-config.xml文件的<struts-config>根节点中加入如下内容:

<message-resources parameter="struts.ErrorDescription" />

 

    其中parameter属性表示属性文件的路径,在本例中属性文件ErrorDescription.properties位于struts目录中,因此,parameter属性的值为struts.ErrorDescription。扩展名properties不用写。其中“.”也可以使用“/”或“"”代替。

    下面我们测试一下这个例子程序。首先启动Tomcat,然后在IE中输入如下的URL

http://localhost:8080/samples/simpleValidation.jsp

    访问上面的URL后的界面如图1所示。



图1

 在不输入任何信息的情况下,点击“确定”按钮后的界面如图2所示。

分享到:
评论

相关推荐

    struts1.x和struts2.x区别

    Struts1.x的验证机制基于ActionForm,利用Commons Validator等库进行数据校验,而Struts2.x则采用了更为强大的验证框架,如XWork Validator,支持链式验证和更复杂的验证规则,使得数据验证更加全面和细致。...

    Struts1.x常用的开发包,需要学习struts1.x朋友可以下载

    虽然现在Struts1.x已经被Struts2等更新的框架所取代,但它的基础思想和设计模式仍然是Java Web开发中的重要参考。对于想要了解Web开发历史或深入理解MVC框架的开发者来说,学习Struts1.x仍然具有一定的价值。

    struts1.x技术课程讲解.pdf

    - **第一个程序**:创建一个简单的 Struts1.x 项目,包含基本的 JSP 页面、Action 类和配置文件,实现用户提交表单数据的功能。 - **示例步骤**: 1. 创建一个新的 Web 项目。 2. 配置 Struts1.x 的依赖库。 3. ...

    Struts1.x系列教程(网摘-全)

    Struts1.x是一款经典的Java Web开发框架,由Apache软件基金会维护,主要用于构建MVC(Model-View-Controller)架构的应用程序。本系列教程是针对初学者的全面指导,旨在帮助学习者快速掌握Struts1.x的核心概念和使用...

    java Struts 1.x 框架 Web 开发

    9. **Validator框架**:Struts 1.x 的Validator框架用于数据验证,可以定义一系列规则来检查ActionForm中的属性值,确保数据的正确性。 10. **生命周期管理**:Struts 1.x 使用Servlet容器管理Bean的生命周期,对于...

    Struts1.x的验证框架示例

    总结,Struts1.x的验证框架为Java Web开发者提供了一套方便的数据验证机制,能够有效提升应用的安全性和用户体验。虽然在现代开发中,Struts1.x已经逐渐被Spring MVC等更现代的框架取代,但了解和理解其验证框架仍然...

    Struts1.x_Project.zip

    在这个"Struts1.x_Project.zip"压缩包中,我们可以看到一个使用Struts1.x框架构建的简易订餐系统的实例。这个项目将帮助我们深入理解MVC架构以及Struts1.x的核心特性。 **MVC模式详解:** MVC模式是软件设计中的一...

    struts1.x apps 所有最新的Struts1.x项目应用

    Struts1.x是一款经典的Java Web框架,由Apache软件基金会开发并维护。它是MVC(Model-View-Controller)设计模式的实现,极大地简化了Java Web应用程序的开发过程。本资源集合包含了所有最新的Struts1.x项目应用,为...

    Struts1.x的登录示例

    本示例将探讨如何使用Struts1.x实现一个简单的登录功能。首先,我们需要理解Struts1.x的核心概念和组件。 1. **MVC架构**: MVC是一种设计模式,将应用程序分为三个主要部分:模型(Model)负责业务逻辑,视图...

    struts1.x入门教程

    接下来,我们将逐步了解如何创建一个简单的Struts1.x应用: 1. **搭建环境**: - 首先,你需要下载Struts1.x的库文件,如struts-1.3.10-all.zip,并将其解压缩。 - 在解压后的lib目录中,你可以找到所有必需的jar...

    搭建struts1.x的jar包

    Struts 1.x 是一个经典的Java Web开发框架,由Apache软件基金会开发,它极大地...不过需要注意的是,Struts 1.x已经较为老旧,目前更推荐使用Struts 2或者Spring MVC等更新的框架,它们提供了更多的特性和更好的性能。

    struts1.x 和 struts2.x向Action里填充jsp参数原理

    总的来说,Struts1.x和Struts2.x都实现了从JSP页面到Action的数据传递,但在实现方式上有显著差异。Struts1.x依赖于ActionForm,而Struts2.x则使用了更强大的OGNL和拦截器机制。了解这些原理有助于我们更好地理解和...

    struts1.x validator框架验证入门例子

    Validator框架是Struts1.x的一个重要组成部分,主要用于处理客户端和服务器端的数据验证。在这个入门例子中,我们将深入理解Validator框架的基本概念、配置以及如何在实际项目中应用。 一、Validator框架简介 ...

    struts1.x多文件上传

    Struts1.x是一个非常经典的Java Web开发框架,它在过去的许多年里被广泛使用。文件上传功能是Web应用中常见的需求之一,特别是在处理用户需要提交多个文件的场景下。Struts1.x提供了处理多文件上传的功能,使得...

    Struts1.x在线购物车系统,Hibernate,Mysql

    综上所述,这个"Struts1.x 在线购物车系统,Hibernate,Mysql"项目是一个综合性的Web开发实践,涵盖了前端交互、后端业务处理和数据存储等多个层面,对于提升开发者在Java Web开发领域的技能有很大帮助。

    Struts1.x 中文帮助文档

    9. **Validator框架**:Struts1.x包含一个内置的验证框架,可以方便地验证用户输入,防止非法数据进入系统。 10. **Session和Request范围的对象管理**:Struts1.x提供了一种机制来管理请求和会话范围内的对象,避免...

    Struts1.x入门与提高系列教程.pdf

    2. **Struts 1.x 开发第一个程序**: - 文档提到了使用MyEclipse进行Struts 1.x 开发的过程,MyEclipse是一个集成开发环境,支持多种Java技术,包括Struts。 - 开发过程中涉及创建一个samples工程,并在MyEclipse...

    Struts1.x.rar

    这个名为"Struts1.x.rar"的压缩包文件,结合其描述"Struts1.x.rar购物网和所需的包.rar,对初学者有帮助",暗示其中包含了构建一个基于Struts1.x的购物网站的相关资源和依赖库。在学习和使用Struts1.x框架构建电子...

    Struts1.x_action

    8. **模型驱动**:Struts1.x还支持模型驱动开发,ActionForm可以直接引用业务对象(BO),简化数据传递和验证过程。 总的来说,Struts1.x_action这个资源包可能包含了一些预配置的Action类、ActionForm类、配置文件...

    struts1.x和mysql整合的登陆例子

    总的来说,这个例子是一个全面展示Struts1.x和MySQL集成的实践教程,涵盖了Web应用开发中的基础元素,包括用户验证、数据库操作以及错误处理。理解并掌握这些知识点对于任何想要从事Java Web开发的程序员来说都是至...

Global site tag (gtag.js) - Google Analytics