`
一代宗师
  • 浏览: 14940 次
社区版块
存档分类
最新评论

Struts2对Action提交方法进行验证

阅读更多

 

 

【Struts2】★☆之struts2对Action提交方法进行验证

 

 

    在实际的开发项目中,我们通常采用的是js对我们输入的值进行验证,例如,用户名的长度,密码长度,等等。但是这样做,不好之处就是我们可以通过人为的将开发者的验证js注掉,这样就导致验证失败,对后台安全性是一个很大的威胁,在采用struts2进行开发时,我们可以采用框架内置的校验器,对我们的Action进行校验。本文所讲诉的就是如何使用重写struts2中的ActionSupport里面的validate方法对输入值进行校验。

 

    ok,看下面代码!

 

1、搭建struts2开发环境-struts2开发环境

 

2、编写我们的Action方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package csg.struts2.action;
 
import java.util.regex.Pattern;
 
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
 
/**
 
 * @author 小夜的传说
 * @2014-7-20
 * @validate
 * @csg.struts2.action
 * @StrutsAction
 * @2014-7-20下午7:21:26
 */
public class StrutsAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private String username;
    private String mobile;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
     
    public String update(){
        ActionContext.getContext().put("message""更新成功");
        return "success";
    }
    public String save(){
        ActionContext.getContext().put("message""保存成功");
        return "success";
    }
    /**
     * 全局方法进行验证
     */
    /*@Override
    public void validate() {
        if(this.username==null||"".equals(this.username.trim())){
            this.addFieldError("username", "用户名不能为空");
        }
        if(this.mobile==null||"".equals(this.mobile.trim())){
            this.addFieldError("mobile", "手机号不能为空");
        }else{
            if(!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile).matches()){
                this.addFieldError("mobile", "手机号格式不正确");
            }
        }
        super.validate();
    }*/
    /**
     * 单个方法进行验证
     */
    public void validateSave() {
        if(this.username==null||"".equals(this.username.trim())){
            this.addFieldError("username""用户名不能为空");
        }
        if(this.mobile==null||"".equals(this.mobile.trim())){
            this.addFieldError("mobile""手机号不能为空");
        }else{
            if(!Pattern.compile("^1[358]\\d{9}$").matcher(this.mobile).matches()){
                this.addFieldError("mobile""手机号格式不正确");
            }
        }
        super.validate();
    }
}

 

    在这里讲解一下,我们的validate()方法会对我们Action里面的所有方法进行验证,但是比如说我们的get,list方法是不需要验证的所以通过validateXxx这样就可以对我们单个方法进行验证(validateXxx注意我们需要被验证的方法名首字母一定要大写)

 

ok,

 

3、编写我们的jsp提交页面(index.jsp)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ 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>后台验证表单提交</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
  <s:fielderror/><!--获取验证失败之后的提示信息-->
  <body>
    <form action="/validate/test/list_save" method="post">
        用户名:<input type="text" name="username"/>不能为空<br/>
        手机号:<input type="text" name="mobile"/>不能为空符合手机号格式<br/>
    <input type="submit" value="提交"/>
    </form>
  </body>
</html>

 

大家注意了,当我们验证成功之后,我的提示信息通过ActionContext.getContext()直接放在request范围里面,那么我们的验证失败之后的信息呢?这个就是放在ActionSupport里面这个属性中(看一下源码就知道了),ActionSupport里面有如下这段代码!

 

1
2
3
 public void addFieldError(String fieldName, String errorMessage) {
        validationAware.addFieldError(fieldName, errorMessage);
    }

 

但是当我们验证失败之后,ActionSupport默认返回的是return "input"视图,所以我们需要在struts.xml中配置一项视图,如下

 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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="struts" namespace="/test" extends="struts-default">
        <action name="list_*" class="csg.struts2.action.StrutsAction" method="{1}">
            <result name="success">/WEB-INF/page/success.jsp</result>
            <result name="input">/index.jsp</result>
        </action>
    </package>
</struts>

 

那么在index.jsp中我们就可以直接通过struts标签来取到

this.addFieldError里面的值。

 

ok,我们验证成功之后,直接转发到success.jsp页面,里面直接通过el表达式,${message}取到值

 

源码下载:通过struts2中的validate()方法进行Action验证-源码

 

 

 

0
0
分享到:
评论

相关推荐

    struts2对Action提交方法进行验证

    在实际的开发项目中,我们通常采用的是js对我们输入的值进行验证,例如,用户名的长度,密码长度,等等。但是这样做,不好之处就是我们可以...本附件为【Struts2】★☆之struts2对Action提交方法进行验证,下载源码!

    Struts2 in action中文版

    11.1.2 Struts 2如何解决本地Java对i18n支持的问题 243 11.2 Struts 2 i18n示例 244 11.2.1 Struts 2 i18n快速展示 244 11.2.2 幕后一览 246 11.3 Struts 2 i18n详情 247 11.3.1 Struts 2默认的TextProvider Re-...

    Struts2入门教程(全新完整版)

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    ajax_struts2_上传与下载_无刷新

    3. 在struts2的Action通过2种不同的实现方法返回json格式的字符串。 4. 针对商品实现简单无刷新上传与下载 4. 批量导入数据采用的是导入test文件夹下的测试压缩包upload.rar上传到服务器的临时目录,然后利用WinRar....

    深入浅出Struts2(附源码)

    跟随作者一道深入Struts 2,聆听大量来之不易的经验之谈,你对Struts 2开发框架的理解和应用水平都将更上一层楼。本书适合Java Web 程序员阅读和参考 第1章 Model 2应用程序 1 1.1 Model 2概览 1 1.2 带servlet...

    详解struts2的token机制和cookie来防止表单重复提交

    详解struts2的token机制和cookie来防止表单重复提交 今天在做一个投票系统时要实现防止表单重复提交! 当时就想到了用struts2提供的token机制 struts2的token机制防止表单重复提交: 首先需要在提交的jsp页面(要...

    Struts1.3 备忘笔记

    04 Struts_04DispatchAction : 分发Action,根据设置的参数值提交到不同的方法进行处理业务,演示数学运算 05 Struts_05DynaActionForm : 相对应ActionForm来说,动态ActionForm只需要在配置文件中配置就可以了,...

    struts2.1宝典

    11.Struts2自动查询目录下的action 35 12.一个Action处理多个业务 method 35 13.使用校验模板校验 35 14.校验模板 35 15.文件上传 36 Struts2 UI tabbed pane tab pane datetime tree 37 SSH Struts+Spring+...

    struts 框架验证

    struts 框架验证,是针对在某一次具体的请求过程中对这次请求所提交的表单进行验证,也就是根据Action路径进行表单验证,使用的Action为DispatchAction,使用的Form是ValidatorActionForm,其中有个说明文件“ReadMe...

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

    书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。...

    Struts2注解+JDBC+MySQL小项目应用

    // 对用户的输入格式进行验证//应定义在jsp页面javScript if ("".equals(userName) || userName == null) { resultMsg = "用户名不能为空"; return "checkFailure"; } else if ("".equals(passWord) || ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    9.3.2 提交和更新代码 9.4 小结 第三篇 J2EE开发工具整合技术 第十章 使用Spring快速实现Web开发 10.1 Spring介绍 10.1.1 Spring简介 10.1.2 下载Spring 10.1.3 配置Spring 10.2 Spring核心思想 10.2.1 反向控制...

    struts2_demo.rar_Java编程_Java_

    关于struts2.0的验证框架第六个故事,关于struts2.0的多文件上传第七个故事,关于struts2.0的单个文件上传第八个故事,关于struts2.0的批量处理第九个故事,关于struts2.0里的get提交传递参数的问题第十个故事,...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    9.3.2 提交和更新代码 9.4 小结 第三篇 J2EE开发工具整合技术 第十章 使用Spring快速实现Web开发 10.1 Spring介绍 10.1.1 Spring简介 10.1.2 下载Spring 10.1.3 配置Spring 10.2 Spring核心思想 10.2.1 反向控制...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    9.3.2 提交和更新代码 9.4 小结 第三篇 J2EE开发工具整合技术 第十章 使用Spring快速实现Web开发 10.1 Spring介绍 10.1.1 Spring简介 10.1.2 下载Spring 10.1.3 配置Spring 10.2 Spring核心思想 10.2.1 反向控制...

    java 经典面试题 于网络分享

    B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证,这种验证是一种客户端的验证 C 用户每次提交表单,都会产生一个新的FormBean实例 D 动态FormBean不能进行验证操作 答案:A 8.以下哪些不是...

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

    9.4 StrutsAction单态陷阱,请谨慎使用全局变量 13 9.5 Struts异常处理 13 第10章 struts中使用国际化(i18n) 13 10.1 struts国际化程序尝试 13 10.1 Java对i18n的支持 14 10.1 struts框架中对国际化的支持 14 第11...

    Spring in Action(第二版 中文高清版).part2

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

Global site tag (gtag.js) - Google Analytics