`
斌强-朱
  • 浏览: 49088 次
社区版块
存档分类
最新评论

Struts2服务器端验证

 
阅读更多


RegisterAction.java

package org.zbq.struts2;

import java.util.Calendar;
import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport {
	private String username;
	private String password;
	private String repassword;
	private int age;
	private Date birthday;
	private Date graduate;

	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;
	}

	public String getRepassword() {
		return repassword;
	}

	public void setRepassword(String repassword) {
		this.repassword = repassword;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public Date getGraduate() {
		return graduate;
	}

	public void setGraduate(Date graduate) {
		this.graduate = graduate;
	}

	@Override
	public String execute() throws Exception {
		System.out.println("execute invoked");
		return SUCCESS;
	}
	
	@Override
	public void validate() {
		System.out.println("validate invoked");
		if(null == username || username.length() < 4 || username.length() > 6){
			this.addActionError("username invalid");
			this.addFieldError("username", "username invalid");
		}
		
		if(null == password || password.length() < 4 || password.length() > 6){
			this.addActionError("password invalid");
		}
		
		if(null == repassword || repassword.length() < 4 || repassword.length() > 6){
			this.addActionError("repassword invalid");
		}
		
		if(!password.equals(repassword)){
			this.addActionError("the passwords not the same");
		}
		
		if(age < 10 || age >50){
			this.addActionError("age invalid");
		}
		
		if(null == birthday){
			this.addActionError("birthday invalid");
		}
		
		if(null == graduate){
			this.addActionError("graduate invalid");
		}
		
		if(null != birthday && null != graduate){
			Calendar c1 = Calendar.getInstance();
			c1.setTime(birthday);
			
			Calendar c2 = Calendar.getInstance();
			c2.setTime(graduate);
			
			if(!c1.before(c2)){
				this.addActionError("birthday should be before graduation");
			}
		}
	}
}


struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="struts2" extends="struts-default">
		<action name="register" class="org.zbq.struts2.RegisterAction">
			<result name="success">/registerResult.jsp</result>
			<result name="input">/register.jsp</result>
		</action>
	</package>
</struts>


register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>My JSP 'register.jsp' starting page</title> 
  </head>
  
  <body>
  <h3>user register</h3>
  	<s:actionerror cssStyle="color:red"/>
  	---------------------------------------
  	<s:fielderror cssStyle="color:blue"/>
  	
  	<s:form action="register" theme="simple">
	  	username:<s:textfield label="username" name="username"></s:textfield><br/>
	  	password:<s:password label="password" name="password"></s:password><br/>
	  	repassword:<s:password label="repassword" name="repassword"></s:password><br/>
	  	age:<s:textfield label="age" name="age"></s:textfield><br/>
	  	birthday:<s:textfield label="birthday" name="birthday"></s:textfield><br/>
	  	graduate:<s:textfield label="graduate" name="graduate"></s:textfield><br/>
	  	<s:submit value="submit"></s:submit>
  	</s:form>
  	
  	<!-- 
    <form action="register.action">
    	<h3>username:<input type="text" name="username" size="20"/><br/></h3> 
    	<h3>password:<input type="password" name="password"/><br/></h3>
    	<h3>repassword:<input type="password" name="repassword"/><br/></h3>
    	<h3>age:<input type="text" name="age" name="age" size="20"><br/></h3>
    	<h3>birthday:<input type="text" name="birthday" size="20"><br/></h3>
    	<h3>graduate:<input type="text" name="graduate" size="20"/><br/></h3>
    	
    	<input type="submit" value="submit"/> 
    </form>
  	-->
  </body>
</html>

registerResult.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>My JSP 'registerResult.jsp' starting page</title>    
  </head>
  
  <body> 
    username: <s:property value="username"/><br/>
    password: <s:property value="password"/><br/>
    age: <s:property value="age"/><br/>
    birthday <s:property value="birthday"/><br/>
    graduate <s:property value="graduate"/><br/>
     
  </body>
</html>

1. struts2对8个数据类型以及Date,String等常见类型实现自动转换;对于自定义类型需要自己指定类型转换方式

2. 对于自定义类型转换器来说需要提供3个信息:Action的名字、Action中待转换的属性名以及该属性对应的类型转换器。其中Action的名字是通过属性文件名来获得的、Action中待转换的属性名是通过属性文件中的key来获得的,该属性对应的类型转换器是通过key所对应的value来获得的。

3.可以通过Struts2自带的类型转换器StrutsTypeConverter简化类型装换代码的编写,StrutsTypeConverter继承与DefaultTypeConverter父类,并且提供了两个抽象方法:convertFormString与convertToString,分别表示从页面的字符串转换为后台对象以及从后台对象转换为页面的字符串,我们只需实现这两个抽象方法即可实行类型转换。

4. 全局类型转换。在src目录下新建xwork-comversion.properties,该文件的内容是待转换的类=转换器的名字,即:

org.zbq.bean.User=org.zbq.converter.UserConverter

5. Struts2也支持自定义方法,在struts.xml中的action元素内定义method属性,属性值就是待执行的方法。其中该方法的声明要与execute保持一致。但是不推荐这种方式,因为它容易导致Action代码混乱。
6.执行流程

1). 首先进行类型装换

2). 进行校验(执行validate方法)

3). 如果在上述过程中出现了任何错误,都不会再去执行execute方法, 转到struts.xml中该action中name=input 的result所对应的页面

7. ActionSupport类的addActionError()方法的实现:首先创建一个ArrayList对象,然后将错误消息添加到该ArrayList对象中。

8. 当调用getActionErrors()方法返回Action级别的错误信息列表时,返回的实际上是集合的一个副本而不是集合本身,因此对集合副本调用clear()方法清除的依旧是副本中的元素而非原集合中的元素,此时原集合中的内容没有收到任何的影响。换句话说,Action级别的错误信息列表对开发者来说是只读的。

9. Field Error级别的错误信息底层是用LinkedHashMap实现的,该Map的key是Sting类型,value是List<String>类型,这就表示一个Field Name 可以对应多条错误信息,这些错误信息都放置在List<String>集合当中。










分享到:
评论

相关推荐

    struts1的服务器端验证

    struts1的服务器端验证,一个很好的验证配置文件,线程安全问题有保障

    struts2 对action中的所有方法进行校验

    struts2对action中的所有方法进行校验

    struts自定义Validator示例

    struts中自定义validator验证 &lt;br&gt;很多时候需要验证“密码”与“重复密码”是否一致,如果放在服务器端验证就浪费资源了。 如何在客户端进行验证呢?JS可以实现,但是struts的validator框架是否能实现呢?-见...

    Java中的简单客户端和服务器端验证框架

    非常简单的基于XML的框架,用于Java中的客户端和服务器端验证框架。

    使用AJAX的Struts验证框架

    它能够配置应用程序,方法是使用服务器端验证和错误消息,此错误消息在处理请求时呈现在调用的验证流程上,它还能够进行客户端验证,方法是使用请求页面上呈现的JavaScript。AJAX是一种JavaScript技术,它能够异步...

    当当网(达内项目)

    表现层应用JSP技术结合struts2标签,并应用JavaScript、AJAX、JQuery技术进行页面表单的客户端验证和异步服务器端验证,减少页面刷新,并运用cookie技术保存用户购物和浏览记录,提高用户体验。图书界面有用点击弹出...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    这是因为某个servlet(服务器端Java程序)在应用户的请求而首次调入内存执行之后将一直驻留在内存里,对同一个servlet的后续请求不用再对这个servlet的类进行实例化,因此响应速度更快。 可是,servlet也存在一个...

    structs程序设计从入门到精通word文档

    11.1 在struts中用validator作服务器端验证 14 第12章 Struts HTML标签库 14 12.1 Struts中基本的HTML标签 14 12.1 Struts中表单处理的HTML标签 14 12.1 Struts中复选框和单选框的HTML标签 14 12.1 Struts下JSP页面...

    spring+struts+hibernate+ajax

    服务器端的验证,Ajax技术的判断是否存在此用户,去包的但压缩包内有数据库。同时是用spring+strust+hibernate集成的工程

    达内java培训目录

    Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。 熟练掌握Struts2核心...

    Eclipse开发入门与项目实践 源代码

    3.1.2 下载并安装MySQL服务器端管理工具 64 3.1.3 下载并安装MySQL客户端查询浏览工具 65 案例3-1 连接MySQL数据库实现用户身份的验证 67 3.2 基于Oracle数据库系统的开发 73 3.2.1 安装Oracle数据库管理...

    JAVA WEB典型模块与项目实战大全

    5.3 服务器端验证  5.4 实现图形验证码  5.5 避免重复提交功能  5.6 缩略加水印图像  5.7 小结  第6章 网络硬盘  6.1 网络硬盘功能原理  6.2 网络硬盘功能具体实现——浏览磁盘和显示文件信息  6.3...

    sails-boilerplate:Sailsjs 的自以为是的服务器配置。 包括茉莉花测试、护照认证、罗盘样式(带有精灵配置)、咖啡脚本服务器端、玉模板、木偶前端、cron 作业和 Backbone.Sails

    一个雄心勃勃的服务器端框架。 样式 语法上很棒的样式表。 CSS 重置片段。 图标 将一堆 svg 文件连接成一个 svg 文件。 获取一堆 svg 文件并生成一个 webfont。 一个管理不同 OAuth 提供者身份验证的库。 茉莉花 ...

    商城之家jsp网店系统

    所有的繁重的计算和处理都由服务器端处理,运行速度快,安全稳定,数据库采用MYSQL大大减轻 了客户端用户机CPU频率受制的局限,同时绝对的安全性和稳定性是本系统最强大,最重要的设计 开发组成部分。

    JSP避免Form重复提交的三种方案

    JSP 避免 Form 重复提交的三种方案是指在 Web 应用程序中,用户在提交 Form 后,如何防止用户不小心或恶意地重复提交表单数据,避免对服务器端和数据库造成不必要的负载和影响。下面是三种常见的解决方案: 一、...

    名片管理系统设计报告和代码分析

    JSP(JavaServer Pages)是一种基于Java 的服务器端脚本语言,能够帮助开发者快速构建高质量的Web 应用程序。JSP 提供了许多有用的功能,例如动态页面生成、数据库交互等。 知识点6:数据库技术 数据库技术是指对...

    jsp+servlet书店

    使用Jsp和html充当视图、而且在Jsp中大量使用了Struts标签。使用ActionForm和Validate框架完成视图层的表单验证,将表单验证移植到服务器端,可以防止客户端绕过表单验证,对数据库的注入式攻击

Global site tag (gtag.js) - Google Analytics