博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2对Action提交方法进行验证
阅读量:6758 次
发布时间:2019-06-26

本文共 4340 字,大约阅读时间需要 14 分钟。

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

    ok,看下面代码!

1、首先搭建基本的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}取到值

源码下载:

本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1440580,如需转载请自行联系原作者
你可能感兴趣的文章
大图片生成缩略图 导致imagecreatefromjpeg 内存崩溃问题
查看>>
我的友情链接
查看>>
手工恢复
查看>>
二 IOC再探
查看>>
一些常用软件的网络端口协议分类介绍
查看>>
机器学习服务器 PredictionIO 脱颖而出
查看>>
mysql不能连接远程mysql服务器
查看>>
Windows 8.1 重复数据删除——概念(一)
查看>>
iptables防火墙高级应用
查看>>
python运维-Socket网络编程
查看>>
yum管理包流程_学习笔记
查看>>
DeltaGrad领跑智能化交易领域 预见收益颠覆基金行业
查看>>
nginx keepalived tomcat实现的高可用
查看>>
Https能避免流量劫持吗?
查看>>
oracle教程之oracle 删除表空间
查看>>
我的友情链接
查看>>
python 2.7.10 找不到 libmysqlclient.18.dylib 解决方案
查看>>
Exchange server 2010 安装部署之二,Exchange2010安装详解
查看>>
负载均衡集群之LVS
查看>>
本地计算机无法启动Server服务
查看>>