一、为什么要进行验证?

验证几乎是注册登录的必须前提,验证的主要作用有两点:

1、安全性

2、对用户提供差异化服务。

二、如何验证?

ActionSupport类中有一个validate()方法,这是为开发者使用struts提供的一个接口,初始时是没有任何验证的。所以要使用此方法首先要进行重写该方法。

举注册为例,调用顺序为setUsername()方法--》validate()方法--->register()方法。所以一旦验证不过那么将无法执行后续方法,即后面的功能将被隔离!

三、实例:

UserAction.java

package com.amos.web.action;

import com.opensymphony.xwork2.ActionSupport;

/**
* @ClassName: UserAction
* @Description: 用户管理,将相关的action封装到一个类中
* @author: amosli
* @email:amosli@infomorrow.com
* @date Jan 8, 2014 1:06:00 AM
*/
public class UserAction extends ActionSupport {
private static final long serialVersionUID = -6275534406709255984L;
private String username;
private String password; public String getUsername() {
return username;
} public void setUsername(String username) {
System.out.println("执行setUserName()方法!");
if (username != null & username.trim().length() > 0) {
this.username = username;
} } public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} // 检验方法
public void validate() {
System.out.println("执行validate()方法!");
if (username != null && username.trim().length() > 0) { }else{
this.addFieldError("username", "用户名为必填!");
} if (password != null && password.trim().length() > 0) { }else{
this.addFieldError("password", "密码为必填!");
}
}
// 用户注册
public String register() throws Exception {
System.out.println("执行注册方法!");
return "toRegisterJsp";
} // 用户登录
public String login() throws Exception {
System.out.println("执行登录方法!");
return "toLoginJsp";
} }

效果如图所示:

直接点击提交,不输入用户名和密码

页头将提示信息显示出来

有可能出现的问题:

1、下面这个是因为没有验证通过,要在user_struts.xml中进行配置,如果出错,将采措施进行回避这样的问题。

<s:fielderror/>

使用标签取出Action中所有的出错提示信息,这里必须定义为this.fielderror才能取到值。

<s:fielderror fieldName="password"/>,取出Action中具体的出错提示信息。

一旦使用struts2的标签那么就不要用EL表达式。

根据提示信息表明要对配置一个name为"input"的属性来对出错信息进行捕获。user_struts.xml部分内容截选:

    <action name="UserRegister" class="com.amos.web.action.UserAction"
method="register">
<result name="toRegisterJsp" type="dispatcher">
/register_success.jsp
</result>
<result name="input" type="dispatcher">
/user_register.jsp
</result>

</action>

将result属性配置为user_register.jsp,即如果验证不通过的话那么页将跳转回user_register.jsp页面。

其中user_register.jsp为:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> <form name="register" action="/struts2/UserRegister" method="post">
<table border="2" align="center">
<caption>新用户注册</caption>
<tr>
<th>用户名:</th>
<td><input name="username" id="username" type="text" /></td>
<td><s:fielderror fieldName="username"/></td>
</tr>
<tr>
<th>密码:</th>
<td><input name="password" id="password" type="password" /></td>
<td><s:fielderror fieldName="password"/></td>
</tr> <tr>
<td colspan="2" align="center"><input type="submit" value="提交"
width="120ppx" /></td>
</tr> </table>
</form>
</body>
</html>

register_success.jsp为:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
注册成功<br/>
<hr>
用户名:<s:property value="username" />
密码:<s:property value="password"/>
</body>
</html>

验证不通过的效果如下图所示:

验证通过的效果图如下所示:

同样可类似对用户登录进行配置,user_struts.xml部分内容截选:

    <action name="UserLogin" class="com.amos.web.action.UserAction"
method="login">
<result name="toLoginJsp" type="dispatcher">
/login_success.jsp

</result>
<result name="input" type="dispatcher">
/user_login.jsp
</result>
</action>

其中login_success.jsp如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
登录成功!
<hr>
用户名:<s:property value="username"/>
</body>
</html>

user_login.jsp如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> <form name="register" action="/struts2/UserLogin" method="post">
<table border="2" align="center">
<caption>用户登录</caption>
<tr>
<th>用户名:</th>
<td><input name="username" id="username" type="text" /></td>
<td><s:fielderror/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="提交"
width="120ppx" /></td>
</tr>
</table>
</form>
</body>
</html>

2.如何验证指定方法?

比如只想login,不想验证register方法。

那么只需要将validate()方法改名为validateLogin()方法即可,这里只验证指定方法格式为validate+大写指定方法名首字母,例如如果只想验证register方法,那么只需要将validate()方法改为validateRegister()即可。这里就不再演示了。

本文源码链接:https://github.com/amosli/strust2   struts2 validate 

 

 

java struts2入门学习实例--使用struts进行验证的更多相关文章

  1. java struts2入门学习实例--将客户端IP地址和访问方式输出到浏览器

    实例1:实现客户端IP地址和访问方式输出到浏览器. IpAction.java package com.amos.web.action; import javax.servlet.http.HttpS ...

  2. java struts2入门学习实例--使用struts2快速实现上传

    一.文件上传快速入门 1).关于上传表单三要素 >>尽量以POST请求方式上传,因为GET支持文件大小是有限制的. >>必须要加上enctype="multipart ...

  3. java struts2入门学习实例--用户注册

     一.用户注册示例 register.jsp <%@ page language="java" contentType="text/html; charset=UT ...

  4. java struts2入门学习实例--使用struts2快速实现多个文件上传

    一.错误提示信息配置 昨天说到更改默认错误配置信息,我测试很多遍,一直都不对.下面贴出来,待以后有好方法了再补充吧. 首先新建一个properties文件,这里命名为testupload.proper ...

  5. java struts2入门学习实例--用户注册和用户登录整合

    需求: 1.用户注册(user_register.jsp)-->注册成功(UserRegister.action)-->显示注册信息(register_success.jsp)2.用户登录 ...

  6. java struts2入门学习--OGNL语言基本用法

    一.知识点学习 1.struts2中包含以下6种对象,requestMap,sessionMap,applicationMap,paramtersMap,attr,valueStack; 1)requ ...

  7. java struts2入门学习--OGNL语言常用符号和常用标签学习

    一.OGNL常用符号(接上一篇文章): 1.#号 1)<s:property value="#request.username"/> 作用于struts2的域对象,而不 ...

  8. java struts2入门学习--防止表单重复提交.OGNL语言学习

    一.知识点回顾 防止表单重复提交核心思想: 客户端和服务器端和写一个token,比较两个token的值相同,则非重复提交;不同,则是重复提交. 1.getSession三种方式比较: request. ...

  9. java struts2入门学习--基于xml文件的声明式验证

    一.知识点总结 后台验证有两种实现方式: 1 手工验证顺序:validateXxx(针对Action中某个业务方法验证)--> validate(针对Action中所有的业务方法验证) 2 声明 ...

随机推荐

  1. Laravel validate 500异常 添加手机验证,中文验证与Validator验证的“半个”生命周期

    今天来讲一下,Lumen的Validator函数 1 2 3 4 5 6 7 8 9 10 11 use Validator;   ...   Class .. {   public function ...

  2. 浅析ARM公司在物联网领域的战略布局(转)

    随着ARM芯片的出货量越来越多,自信满满的ARM公司统一软硬件平台的战略和雄心壮志越来越凸显.最初ARM公司仅是出售自己的知识产权(IP核)给各大芯片公司,由于最初ARM公司处于劣势,所以给芯片厂商很 ...

  3. jQuery对象

    $(document).ready(function(){ //第二种获取方法,通过标签的名<h2>Dom来获取 var h1 = document.getElementsByTagNam ...

  4. HTTPS 原理与证书实践

    1.1 网络安全知识 1.1.1 网结安全出现背景 网络就是实现不同主机之间的通讯,网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间可以进行通汛的目的,虽然看似简简单单几句 ...

  5. Visual Studio 开始支持编写 Android 程序并自带 Android 模拟器【转载】

    原文地址 本文内容 为什么需要一个 Android 模拟器 针对 Visual Studio Android 模拟器的调试 Visual Studio Android 模拟器的传感器模拟和其他功能 A ...

  6. Discuz常见小问题-如何取消帖子置顶

    定位到一个帖子,然后顶部会有置顶的选项,还是勾选置顶,后面下拉列表选择无,然后点击确定,提示解除置顶  

  7. 【转载】TypeScript学习笔记——var与let

    var 与  let 都是TypeScript里的变量声明方式 两者非常相似,在语法不存在很大的差异,而在语义上存在很大的区别 块作用域 var有着些奇怪的作用域规则 例如 function f(ru ...

  8. ES6 箭头函数(arrow function)

    例行声明:接下来的文字内容全部来自 Understanding ECMAScript 6,作者是Nicholas C.Zakas,也就是大名鼎鼎的Professional JavaScript for ...

  9. JAVA WEB 解决编码问题的filter

    最近使用Springmvc,GET传输参数的时候,经常出错误,下面介绍添加一个Filter的方法,可以解决这个问题.既支持POST方式也支持GET方式. 首先写一个Filter package com ...

  10. NGINX proxy_pass 域名解析问题

    前两天发现一个问题,当使用proxy_pass的时候,发现域名对应IP是缓存的,这样一旦VIP变化之后,就会报错,下面就来详细分析一下这个问题. 一.问题说明 location = /test { i ...