Struts的出现就是为了全面消除服务器断程序的脚本嵌套,全面分层,通常我们的表单在提交时都需要进行数据验证,而这在以前通常是用客户端的javascript进行过滤后再由服务器端的脚本进行验证,这样的缺点是移植性很差,每次都需要重新编写源程序,而struts框架则提供了一个很好的验证机制,它不需要再编写脚本,而是通过验证器进行验证.
struts验证又分为2种,一种是在ActionForm bean表单属性JavaBean的validate()方法中定义,在服务器断验证;另外一种则是通过验证器分别在客户端和服务器端进行双层验证.
1.在ActionForm Bean中验证:
首先需要介绍Struts的工作原理:
(1).用户从表单提交数据,JSF表现为:<html:form action="/login">,普通JSP表现为:<form action="/login.do">
(2),程序将通过Struts配置文件(既ActionServlet)struts-config.xml的<action>节点下的path属性的值与form的action属性值进行匹配,如果配上了,程序将通过本action的name属性所对应的值与<form-bean>节点的name进行匹配,如果成功,则通过<form-bean>的type属性值找到ActionForm bean的类文件.
(3)如果action中的validate属性设置为true或yes的话,程序将调用ActionForm bean的public ActionErrors validate(ActionMapping mapp,HttpServletRequest req)方法进行验证,结果返回一个ActionErrors类型以便我们将其catch住.
(4)程序将ActionForm的各个属性做为参数传回给Action,Action再调用具体业务处理的JavaBean进行商业活动,再将程序转向View层的显示页面
具体方法:
1.创建表单login.jsp 由JSF实现
2.建立ActionForm类 loginForm.java
package com.liuhao.struts;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionError;
import javax.servlet.http.HttpServletRequest;
public class loginForm extends ActionForm{
//定义属性,和表单里一致
private String userName,passWord;
public ActionForm(){
super();
}
//数据验证方法
public ActionErrors validate(ActionMapping mapp,HttpServletRequest req){
ActionErrors errors=new ActionErrors();
if(this.userName==null || this.passWord==null)
errors.add("loginName",new ActionError("errors.required","userName and passWord fie));
return errors;
}
public void reset(ActionMapping mapp,HttpServletRequest req){
this.userName="";
this.passWord="";
}
//定义相关属性的 getter和setter
public void setUserName(String userName){
this.userName=userName;
}
public void setPassWord(String passWord){
this.passWord=passWord;
}
public String getUserName(){
return this.userName;
}
public String getPassWord(){
return this.passWord;
}
}
3.定义Action类 loginAction.java
package com.liuhao.struts;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class loginAction extends Action{
public loginAction(){
super():
}
public ActionForward execute(ActionMapping mapp,ActionForm form,HttpServletRequest req,HttpServletResponse res)throws Exception{
org.com.liuhao.struts.loginForm Form=(loginForm)form;
//将form对象实例写入当前请求中
req.setAttribute("form",Form);
//转向输出页面
return mapp.findForward("sucess");
}
}
3.编写输出文件out.jsp
4.配置文件:struts-config.xml
在<form-beans>中定义formbean
<form-bean name="loginForm" type="com.liuhao.struts.loginForm">
<form-property name="userName" type="java.lang.String"/>
<form-property name="passWord" type="java.lang.String"/>
</form-bean>
在<action-mapping>中定义action
<action name="loginForm" path="/login" type="com.liuhao.struts.loginAction"
input="/index.jsp" validate="true">
<forward name="sucess" path="/out.jsp"/>
</action>
5。在application resource中定义:error.requires={0} is not allowed null
6.即可测试程序:"如果没有输入任何信息,login.jsp会输出:username and passWord field is not allowed null
注解: 这样的方式优点是:彻底了消除了脚本的存在,是程序得到了很好的分层,但是却也寸在着移植性差的问题,因为每修改一次严整程序,都需要到loginForm中去修改validate方法.
////********************
2.在验证器中验证:
(1).修改login.jsp的<html:form>为 :<html:form action="/login" onsubmit="return vaidateLoginForm(this)"/>
在程序中加入:<html:javascript formname="loginForm"/>用与生成客户端javascript代码
(2)编辑 validation.xml文件完成对验证器的部署,struts提供众多验证器,如Required Validator,Mask Validator等,其中Required Validator为验证程序是否为空的验证器,也是本例中使用的验证器。
在 <form-validation>节点中加入:
<formset>
<form name="loginForm"> <!--隐射到loginForm-->
<field property="userName" depends="required">
<msg key="errors.required"/>
<arg0 key="errors.user"/>
</field>
<field property="passWord" depends="required">
<msg key="errors.required"/>
<arg0 key="errors.pass"/>
</field>
</form></formset>
3.在定义完验证器后,就可以运行程序了,如果没有任何输入,将弹出窗口将错误信息显示出来(运用javascript的alert()方法表现);
相关推荐
### Struts验证详解 在Java Web开发中,Struts框架为开发者提供了强大的MVC架构支持。其中,数据验证是确保应用程序稳定性和用户体验的关键环节。本文将深入探讨Struts框架下的数据验证机制,包括如何使用`validate...
Struts验证框架是Java Web开发中的一个重要组成部分,它主要用于确保用户输入的数据符合应用程序设定的规则,从而提高数据的准确性和安全性。本篇文章将深入探讨Struts验证框架的配置过程,帮助开发者更好地理解和...
### Struts1 框架详解 #### 一、Struts1 基础与架构 **1.1 J2EE技术栈** Struts1框架是基于Java2平台企业版(J2EE)构建的,它依赖于以下技术: - **Servlet**:处理HTTP请求的基础接口,用于创建Web应用中的...
在"Struts的Validator-rules[1].xml详解.doc"文件中,你会看到一系列的XML元素,如`<field>`、`<field-validator>`等,它们用于定义验证规则。例如,我们可以为一个名为`username`的字段设置`required`验证,确保...
Struts是一个著名的开源MVC框架,它在Java Web开发中占据着重要的地位。Struts标签库是Struts框架的一部分,提供了丰富的HTML、逻辑和nested标签,帮助开发者更方便地构建用户界面。本压缩包文件包含了关于Struts...
Struts2 验证框架详解 Struts2 验证框架是基于 Java 语言的 Web 应用程序框架,提供了一个强大的验证机制,以确保用户输入的数据满足业务逻辑的要求。在 Struts2 中,验证机制是通过 validator 来实现的,该机制...
### Struts框架详解 #### 一、Struts框架概述 Struts框架是一个开源的Java Web应用框架,基于Model-View-Controller(MVC)架构模式。该框架的主要优点在于其高度模块化的设计,具备良好的灵活性和重用性,极大地...
### Struts2 自定义验证程序的实现方法详解 #### 一、Struts2 内建验证程序实现的分析 在探讨如何实现自定义验证程序之前,我们先来了解一下 Struts2 的内置验证机制。Struts2 提供了丰富的内置验证器(Validator...
Struts2框架详解 Struts2是Java Web开发中的一款广泛应用的开源MVC框架,它构建在Apache Struts 1的基础上,提供了更为强大的功能和更好的灵活性。Struts2旨在简化Web应用开发,通过将表现层与业务逻辑层解耦,提高...
- Struts1提供了内置的数据验证机制,分为表单验证和业务逻辑验证。 - 表单验证主要检查用户输入的数据是否符合格式要求,通常在ActionForm的validate()方法中进行。 - 业务逻辑验证则涉及更复杂的业务规则,如在...
Struts框架详解 Struts是Java Web开发中的一个开源MVC框架,由Apache软件基金会维护。它提供了一种结构化的方式来构建应用程序,使得开发者可以更有效地处理请求、控制流程、展示视图,以及管理业务逻辑。本实验...
本资料包包含的是《Struts2深入详解》一书的源码分析,涵盖了从第一章到第五章的内容,并附带了相关的jar包,方便读者结合理论与实践进行学习。 首先,让我们从第一章开始,Struts2的基础知识。这一章通常会介绍...
Struts2提供了内置的验证框架,可以在Action类中定义验证规则,或者使用XML文件进行外部化验证。验证框架可以在用户提交表单前检查输入数据,防止无效数据进入系统,提高数据质量。 **4. 国际化** Struts2支持多...
19. **自定义拦截器**:拦截器是Struts2的核心机制之一,可以自定义拦截器进行日志记录、权限验证、数据校验等操作。 20. **输入校验**:可以使用XML配置进行Action级别的校验,也可以对每个方法进行细粒度校验。 ...
这些标签包括如`<html:text>`、`<html:password>`、`<html:submit>`等,它们简化了HTML表单元素的创建,并且与Struts的ActionForm对象紧密集成,便于数据验证和模型驱动的编程。 Logic Tags 则提供了逻辑判断、集合...
4. **Interceptor(拦截器)**:类似于AOP(面向切面编程),提供预处理和后处理功能,例如日志、权限验证、事务控制等。 5. **Result**:负责将Action执行的结果转发到相应的视图,可以是JSP、Freemarker、...
《孙卫琴 精通Struts 入门详解》可能是该领域的一本教程书籍或课程,通过"Helloapp"示例来引导初学者了解和掌握Struts框架的基础使用。 在"Helloapp"这个入门案例中,我们将学习以下几个关键知识点: 1. **MVC设计...
本教程将深入讲解Struts2中的数据输入验证,包括两种主要验证方式:客户端验证和服务端验证。我们将重点讨论服务端验证,因为它在安全性方面更为可靠。 1. 服务端验证: 服务端验证主要通过重写Action类中的`...