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验证-源码











本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1440580,如需转载请自行联系原作者
目录
相关文章
|
安全 Java 应用服务中间件
struts2中Action的生命周期
struts2中Action的生命周期
91 0
|
Java
Struts2【开发Action】(三)
Struts2【开发Action】
145 0
Struts2【开发Action】(三)
|
Java API 容器
Struts2【开发Action】(二)
Struts2【开发Action】
161 0
Struts2【开发Action】(二)
|
Java
Struts2【开发Action】(一)
Struts2【开发Action】
128 0
Struts2【开发Action】(一)
|
XML 前端开发 Java
Action的三种实现方式,struts.xml配置的详细解释及其简单执行过程(二)
上一章简单介绍了Struts2的’两个蝴蝶飞,你好’ (一),如果没有看过,请观看上一章
344 0
Action的三种实现方式,struts.xml配置的详细解释及其简单执行过程(二)
|
网络安全
SSH框架整合遇到的错误——Struts2.5 action跳转出现错误
错误信息如图: 刚开始以为是struts2的配置问题,就换了一下action的值,改成了login1之后才发现错误。 表单提交的跳转信息: Struts2.xml中的配置 UserAction.java中的配置   action的跳转方法不能有参数,手误写了参数,导致action找不到login1方法。
1368 0
|
XML 数据格式

热门文章

最新文章