Struts2请求参数合法性校验机制
在Action中通过代码执行数据校验
请求参数的输入校验途径一般分两种:客户端校验 :通过JavaScript 完成 (jquery validation插件),目的:过滤正常用户的误操作。
服务器校验 :通过java代码完成 ,目的:整个应用阻止非法数据的最后防线
列如:
<h1>登录:请求数据校验--代码手动校验</h1>
<s:fielderror/>
<form action="${pageContext.request.contextPath }/login.action" method="post">
用户名:<input type="text" name="username"/><s:fielderror fieldName="username" /><br/>
密 码:<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form>
1.全局校验 (对当前Action的所有方法进行校验 )
如果要执行校验 ,Action必须继承ActionSupport 类 (因为它实现 Validateable接口)
//手动校验
public void validate() {
//StringUtils.isBlank()方法判断输入是否为空
if(StringUtils.isBlank(username)){
/*将错误信息写入Map<String,List<String>> fieldErrors;
当遇到workflow拦截器时,会判断错误集合的size的大于0,
如果大于0,则向input的视图跳转*/
super.addFieldError("username", "用户不能为空");
}
}
StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数
String 为 null则不会抛出 NullPointerException ,而是做了相应处理。
JSP显示错误信息
配置Struts2的特有标签S标签
在jsp增加显示错误信息 <s:fielderror />
校验机制原理分析:
2.局部校验 (校验Action中指定业务方法—校验一个方法 )
在Action 添加 validateXxx 方法(约定), 这里XXX 是要校验目标方法名 (只会对指定方法校验)

提示:
1.被校验方法首字母 要大写。
2.全局校验一直会执行,即使有局部校验。且先走的局部校验。
-----------------------------------------------------------------------------------------------------------------------------
基于XML配置实现校验
1. 全局校验 (校验当前Action 所有方法-是针对某一个action中的所有方法)----在Action类所在包,创建 Action类名-validation.xml
JSP页面同上
Action代码: Action 必须继承ActionSupport 类 (为了实现 Validateable接口 )
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String username;
private String password;
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 execute() throws Exception {
System.out.println(this);
return INPUT;
}
@Override
public String toString() {
return "LoginAction [username=" + username + ", password=" + password
+ "]";
}
XML代码:(必须和 action在容一个包下,Action类名-validation.xml)
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 校验用户 -->
<field name="username">
<field-validator type="requiredstring">
<message>用户不能为空</message>
</field-validator>
</field>
<!-- 校验密码 -->
<field name="password">
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
</field>
</validators>
局部校验 (校验当前Action 指定方法 )
在Action类所在包,创建 Action类名-<action>name属性-validation.xml
JSP页面代码:
<h1>登录:请求数据校验--xml配置校验--局部</h1>
<s:fielderror/>
<form action="${pageContext.request.contextPath }/login3.action" method="post">
用户名:<input type="text" name="username"/>(非空,且长度为3-10位)<br/>
密 码:<input type="password" name="password"/>(必须,且长度为6-12)<br/>
重复密码:<input type="password" name="repassword"/>(必须和密码一致)<br/>
年龄:<input type="text" name="age"/>(数字,且必须是18-100)<br/>
手机号码:<input type="text" name="mobile"/>(手机号规则,11位数字)<br/>
邮箱:<input type="text" name="email"/>(邮箱格式)<br/>
<input type="submit" value="登录"/>
</form>
Action代码:
public class User2Action extends ActionSupport{
private static final long serialVersionUID = 1L;
private String username;
private String password;
private String repassword;
private int age;
private String mobile;
private String email;
public String login2(){
System.out.println(this);
return NONE;
}
/*
GET和SET 方法略去...............
toString方法略去..................
*/
XML代码:
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="stringlength">
<param name="minLength">3</param>
<param name="maxLength">10</param>
<message>用户名必须在3-10位</message>
</field-validator>
</field>
<field name="password">
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">12</param>
<message>密码必须在6-12位</message>
</field-validator>
</field>
<field name="repassword">
<field-validator type="fieldexpression">
<param name="expression">password==repassword</param>
<message>两次输入密码不一致</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">100</param>
<message>年龄必须是18-100</message>
</field-validator>
</field>
<field name="mobile">
<field-validator type="regex">
<param name="regex"><![CDATA[^1[3|5|8|4]\d{9}$]]></param>
<message>用户名必须在3-10位</message>
</field-validator>
</field>
<field name="email">
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
</validators>
如果检测错误Action会自动跳转到input视图。
其他校验器可参考:

Struts2请求参数合法性校验机制的更多相关文章
- Struts2请求参数校验
校验的分类 客户端数据校验 和 服务器端数据校验 客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,通过Java代码 完成校验 struts2 ...
- Struts2 请求参数接收
在Struts2中提供了更为简单的参数请求与接收方法,可以直接在Action中定义属性:Struts2通过反射机制将参数反射到属性的set方法上实现参数的传递: GET方式传送参数 <strut ...
- SpringBoot 请求参数后端校验
1.例如: package com.model.user; import com.model.PageEntity;import lombok.Getter;import lombok.Setter; ...
- Spring Boot 2.x基础教程:JSR-303实现请求参数校验
请求参数的校验是很多新手开发非常容易犯错,或存在较多改进点的常见场景.比较常见的问题主要表现在以下几个方面: 仅依靠前端框架解决参数校验,缺失服务端的校验.这种情况常见于需要同时开发前后端的时候,虽然 ...
- 利用 Bean Validation 来简化接口请求参数校验
团队新来了个校招实习生静静,相互交流后发现竟然是我母校同实验室的小学妹,小学妹很热情地认下了我这个失散多年的大湿哥,后来... 小学妹:大湿哥,咱们项目里的 Controller 怎么都看不到参数校验 ...
- 使用@Valid和BindingResult验证请求参数的合法性并处理校验结果
/** * 添加用户,使用@RequestBody将请求体映射到Action方法参数中 * 使用@Valid注解验证请求参数的合法性 * 使用BindingResult处理校验结果 * @param ...
- Struts2之Action接收请求参数和拦截器
技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Ac ...
- 深入 Struts2 的配置 - 处理多个请求-处理请求结果-模型驱动-异常机制
转:http://www.java3z.com/cwbwebhome/article/article2/2938.html?id=1631 本部分主要介绍struts.xml的常用配置. 1.1. ...
- Struts 2.3.24源码解析+Struts2拦截参数,处理请求,返回到前台过程详析
Struts2官网:http://struts.apache.org/ 目前最新版本:Struts 2.3.24 Struts1已经完全被淘汰了,而Struts2是借鉴了webwork的设计理念而设计 ...
随机推荐
- SpringMVC 3.2集成Spring Security 3.2
参考:http://www.cnblogs.com/Beyond-bit/p/springmvc_and_springsecurity.html SpringMVC 3.2集成Spring Secur ...
- API文档工具-Swagger的集成
最近安装了API文档工具swagger,因为Github上已有详细安装教程,且安装过程中没有碰到大的阻碍,所以此文仅对这次安装做一份大致记录 相关网站 Swagger 官方地址: http://swa ...
- 使用babel编译es6
起因:开发中慢慢的学习使用es6,但是JavaScript需要浏览器来解析,而不是所有浏览器都支持es6,所以为了兼容es6,需要第三方工具进行编译es6. 工具:node,gulp,gulp-bab ...
- PHP中的函数声明与使用
函数 1. 函数名是标识符之一,只能有字母数字下划线,开头不能是数字: 函数名的命名,必须符合&quo ...
- React制作吸顶功能总结
总结一下最近用react写项目时,遇到的一些坑,恩,真的还蛮坑的,主要是设置状态的时候特别不好控制,下面我们一起来看下,这里自己做了几个demo,分别看下, 主页面代码如下: class Head e ...
- (原创) Maven查看JAR包的依赖关系
如果是用命令行,可进入项目所在目录,然后输入: mvn dependency:tree ,来查看jar包依赖关系. 另外还可以在eclipse操作,如下图所示: 点击run后,开始输出JAR包依赖树. ...
- 基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)
前言: 本章介绍自己写的基于java.util.logging的轻量级日志记录库(baseLog). 该版本的日志记录库犹如其名,baseLog,是个实现日志记录基本功能的小库,适合小型项目使用,方便 ...
- Dojo初探之4:dojo的event(鼠标/键盘)事件绑定操作(基于dojo1.11.2版本)
前言: 上一章详解了dojo的dom/query操作,本章基于dom/query基础上进行事件绑定操作 dojo的事件 dojo的事件绑定操作分为鼠标和键盘两种进行详解 1.鼠标事件 我们沿用上一章中 ...
- js获取地址栏某个参数
一.获取单个参数: 若地址栏URL为:abc.html?id=123 function getString(){ var locurl=location.href; var sta ...
- dedecms 动态tab写法
项目要求要dedecms动态添加选项卡然后自己写了一个 现在需要些tab的栏目下创建子栏目 (如果是首页需要顶级栏目) 如图我在案例下添加了3个子栏目 然后每个子栏目里面添加需要在tab里面输出的内容 ...

