您的位置:首页 > 编程语言 > Java开发

Struts2框架学习4Day_Struts请求参数合法性校验机制

2020-03-30 19:10 1271 查看

一个叫李婷的护士不幸感人新型冠状病毒,隔离在房间里,在房间里李婷说我难受,丈夫说那我陪着你,李婷说我不要你陪着我,你离我远一点…李婷在视频通话里问“你后不后悔娶我呀?”,“我后悔没能早点遇见你”…我可能因为羡慕留下了不争气的眼泪 ——2020.03.15

Struts请求参数合法性校验机制

校验的作用域分为全局校验和局部校验
Struts2 支持校验方式:
1、代码中手动数据校验(高耦合、硬编码)
前端代码:

<s:fielderror/>
<form
action="${pageContext.request.contextPath }/user_login.action"
method="post">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="password" name="pwd"/><br/>
<input type="submit" value="登录"/>
</form>

Action代码:必须继承ActionSupport,并接受参数
全局校验

@Override
public String login() throws Exception {
System.out.println(username+"-->"+pwd);
return NONE;
}

public String find() throws Exception {
System.out.println(username);
return NONE;
}
public void validate() {
//编写校验的逻辑代码,程序运行时会自动调用validate方法进行校验
if(StringUtils.isBlank(username)){
//添加提示信息
//addFieldError 会把错误信息放入一个集合,在页面上通过s:fielderror 标签获取集合中的内容,
//在页面上显示错误信息
addFieldError("username_error", "用户名不能为空...");
}

if(StringUtils.isBlank(pwd)){
addFieldError("pwd_error", "密码不能为空...");
}
}

局部校验

//只校验login方法
public void validateLogin() {
//编写校验的逻辑代码,程序运行时会自动调用validate方法进行校验
if(StringUtils.isBlank(username)){
//添加提示信息
//addFieldError 会把错误信息放入一个集合,在页面上通过s:fielderror 标签获取集合中的内容,
//在页面上显示错误信息
addFieldError("username_error", "用户名不能为空...");
}

if(StringUtils.isBlank(pwd)){
addFieldError("pwd_error", "密码不能为空...");
}
}

struts.xml:

<!-- 配置手动验证表单的Action -->
<action name="user_*"
class="com.igeek_01_validation.LoginAction" method="{1}">
<result name="input">/a_validation/login.jsp</result>
</action>

一定要知道:
1.被校验方法首字母要大写。
2.全局校验一定会执行,如果出现局部校验。先执行的局部校验,再执行全局校验。
值得注意的是,你的局部校验和全局校验不能同时对同一个表单内容进行矛盾的校验。
2、XML配置规则进行校验(传说企业推荐)

全局校验
一定要知道:
创建配置全局性的校验文件名::直接是Action的名字-validation.xml

xwork的约束:加在XML里,加约束的方式第一天就写过啦

<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

xml代码:

<validators>
<field name="username">
<field-validator type="requiredstring">
<message>用户名不能为空(xml)</message>
</field-validator>
</field>
<field name="pwd">
<field-validator type="requiredstring">
<message>密码不能为空(xml)</message>
</field-validator>
</field>
</validators>

其中type属性代表着校验器,每个校验器的作用:
required
必填校验器,要求被校验的属性不能为null
requiredstring
必填字符串校验器,要求被校验的属性不能为null,长度必须大于0,默认情况下会对字符串首尾去空格
stringlength
字符串长度校验器,要求被校验的属性必须在指定的范围内,否则校验失败课程视频
minLength:指定最小长度
maxLength:指定最大长度
trim:指定校验属性被校验时,是否去除字符串前后空格
regex
正则表达式校验器,检查被校验的属性是否匹配某个正则表达式
expression:指定正则表达式
caseSensitive:指定进行正则表达式匹配时,是否区分大小写,默认值为true
Int
整数校验器,要求field 的整数值必须在指定范围内
min:指定最小值
max:指定最大值
double
双精度浮点型校验器,要求field的值必须在指定范围内
min:指定最小值
max:指定最大值
fieldexpression
字段ognl表达式校验器,要求field 满足一个ognl表达式,
expression:指定ognl表达式
该逻辑表达式基于ValueStack进行求值,返回true时,验证通过
email
邮件地址校验器,如果field的内容不为空,则必须是合法邮件地址
url
网址校验器,如果field 的内容不为空,则必须是合法的url 地址
date
日期校验器,field 的内容必须在某个范围内
min:指定最小值
max:指定最大值
conversion
转换校验器,指定在类型转换失败时,提示的错误信息
visitor
用于校验action中复合类型的属性,他指定一个校验文件,校验复合类型中属性
expression
expression:指定ognl 表达式,该逻辑表达式给予ValueStack 进行求值,返回true是校验通过
struts.xml:

<action name="mylogin" class="com.igeek_01_validation.MyLoginAction">
<result>/a_validation/succ.jsp</result>
<!--验证出错跳转视图 input  -->
<result name="input">/a_validation/mylogin.jsp</result>
</action>

局部校验
struts.xml:

<action name="myRegist" class="com.igeek_01_validation.MyRegistAction" method="regist">
<result name="input">/a_validation/myRegist.jsp</result>
<result name="success">/a_validation/success.jsp</result>
</action>

一定要知道:
在Action 执行xml 校验时, 必须要为变量提供getter方法!!!
1.必须要先接收参数(属性驱动、模型驱动)
2.校验文件规则Action名-url-validation.xml(url不是方法名是Action的name 属性)
3、注解的方式校验,暂时不研究

  • 点赞
  • 收藏
  • 分享
  • 文章举报
非职业流浪家 发布了11 篇原创文章 · 获赞 1 · 访问量 230 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: