手动验证 | 学习笔记

简介: 快速学习手动验证,介绍了手动验证系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门手动验证】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7313


手动验证

 

内容介绍:

一、服务端验证

二、案例

三、总结


一、服务端验证

首先对03struts2_login 进行拷贝,即在 project name 中输入12struts2_validate。

进行拷贝后,找到其中的 Web,在 Web Context-root 中输入/validate 进行下一步操作,再进行一系列的删除与保留 index.jsp 与 login.jsp 后完成基础流程。

接下来进行注册功能,在 Name 中输入 RegisterAction 完成。

而在注册功能中需要用户的姓名、密码、年龄等,即隔行输入代码private String name;、private String pwd;、private int age;与private Date birthday,再接着进行选择并返回 get 方法 ,

如下:

public String getName(){

return name;

}

public void setName(String name){

this.name = name;

}

public String getPwd(){

return pwd;

}

public int getAge(){

return age;

}

public void setAge(int age){

this.age = age;

}

public Date getBirthday(){

return birthday

}

public void setBirthday(Date birthday){

this.birthday = birthday;

}

而原来对 RegisterAction 只是进行简单的编写,而现在则要对 RegisterAction 进行继承,在 public class RegisterAction {后跟上 extends ActionSupport,

即 public class RegisterAction extends ActionSupport {,先将 execute()方法写入,

如下:

@Override

public String execute() throws Exception {

return Action.SUCCESS

}

ActionSupport 中有一种方法即 validate()方法,如下:

@Override

public void validate(){

}

继承后 validate()方法会协助进行验证,而真正的执行过程是先执行 validate()方法再执行 execute()方法。

则验证流程为如果 action 类继承 ActionSupport 类,那么该 action 类则将会进行继承 ActionSupport 类的相关功能,如:验证功能。

执行流程是先执行 validate()方法再执行 execute()方法,但不会真正地执行validate 方法,首先执行 validateXXX 方法,而 validateXXX 方法可能有也可能没有,所以用中括号来表示。

如果其中有一个没有执行成功则会直接返回 input,而 execute 方法无论执行成功或失败都会进行 Result 程序。

如下:

image.png

接下来进行验证,validate 方法默认不写时则表示为通过。

首先在 pubilc void validate(){下跟上 System.out.println(“validate”);与在public String execute() throws Exception {下跟上System.out.println(“execute”);进行操作,再进行配置,跟上

<package name=”default”extends=”struts-default” namesapece=”/”>再跟上

<actionname=”register”class=”cn.sxt.action.RegisterAction”>

再跟上<result>/index.jsp后对 RegisterAction 进行请求,得出结果后证明流程是正确的,而流程还要进行相应,即加入 reqpsonce,

如下:

image.png


二、案例

案例:

首先在 New name 中写入 register.jsp 中响应注册页面,请求 register.action,其中有用户名、密码、年龄、生日,

如下:

用户名:<input type=”text”name=”name”/><br>

密码:<input type=password”name=”pwd”/><br>

年龄:<input type=”text”name=”age”/><br>

生日:<input type=”text”name=”birthday”/><br>

再进行访问数据,将 register.action 改为 register.jsp,得到结果如下:

image.png

输入年龄与生日后得到结果报错,如下:

image.png

报错原因为类型转换中 setBirthday 失败以及没有找到 input 的 result,当验证不成功时会跳转到 input 的结果,即输入<result name=”input”>/register.jsp进行配置,再进行输入年龄与生日,结果报错,报错原因为改变代码后没有重启服务器。再进行提交后结果正确。

而年龄不能为负数要进行验证,在 validate 方法中加入 if(age>100| |age<1){,再跟上this.addActionError(“年龄不合法“);后再进行提交并没有提交回去,只有 validate 没有 execute,年龄不合法并没有显示出来,

原因为没有加入<%@taglib uri=”/struts-tags”prefix=”s”%>以及<s:actionerror/>,加入后再进行刷新,年龄不合法则会显示。

RegisterAction 要处理很多业务,将所有业务都写入 validate 中则会非常繁琐,如验证年龄,写入 public void validateAge(){后则可将if(age>100| |age<1){,再跟上this.addActionError(“年龄不合法“);

加入,执行 validateXXX 方法后再执行 validate 方法,再执行 execute 方法。进行验证后发现没有显示 validateXXX 方法。如果要验证 validateXXX 方法,需要有public String age(){执行请求才会执行 validateAge,才会进行一系列操作,

如下:

public String age(){

System.out.println(“age”);

return Action.SUCCESS;

}

然后将配置文件中的

<actionname=”register”class=”cn.sxt.action.RegisterAction”>改为

<actionname=”register”class=”cn.sxt.action.RegisterAction”method=“age”>

再进行验证后则会显示 validate age 与 validate,进行改正后如下:

image.png

注意:

如果执行的是 Action 中的 execute 方法,那么只会执行 validate 方法。

如果执行的是自定义的 action.register 方法,那么将会先执行 validateRegister--validate--register 方法。


三、总结

(1) jsp 页面:

一定要加上<s:actionerror/>或者是<s:fielderror/>

如下:

<s:actionerror/>

<form action=”register.action”method=”post”>

用户名:<input type=”text”name=”name”/><br>

密码:<input type=password”name=”pwd”/><br>

年龄:<input type=”text”name=”age”/><br>

生日:<input type=”text”name=”birthday”/><br>

name=”birthday”/>

<br>

<input type=”submit”value=“登录”/>

</form>

(2)Action代码:

public class RegisterAction extends ActionSupport{

private String name;

private String pwd;

private int age

private Date birthday

@Override

public String execute() throws Exception {

System.out.println(“execute”);

return Action.SUCCESS

}

public String register() {

System.out.println(“register”);

return Action.SUCCESS

}

public void validateRegister(){

System.out.println(“validate age”);

if(age>100| |age<1){

this.addActionError(“年龄不合法“);

}

}

public void validate(){

System System.out.println(“validate”);

}

public String getName(){

return name;

}

public void setName(String name){

this.name = name;

}

public String getPwd(){

return pwd;

}

public int getAge(){

return age;

}

public void setAge(int age){

this.age = age;

}

public Date getBirthday(){

return birthday

}

public void setBirthday(Date birthday){

this.birthday = birthday;

}

}

3)Struts.xml 配置文件:

<package name=”default”extends=”struts-default” namesapece=”/”>

<actionname=”register”class=”cn.sxt.action.RegisterAction”>

<result>/index.jsp</result>

<result name=”input”>/resgister.jsp</result>

</action>

</struts>

相关文章
|
存储 架构师 数据可视化
一文弄懂数据架构和信息架构的区别
我们经常会听到关于数据架构和信息架构的讨论,它们是一回事吗?让我们看看数据和信息之间的区别,以及组织需要考虑的关键事项。
一文弄懂数据架构和信息架构的区别
|
开发工具 git 缓存
Git忽略规则.gitignore不生效
在项目开发过程中个,一般都会添加 .gitignore 文件,规则很简单,但有时会发现,规则不生效。 原因是 .gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
62321 5
|
JavaScript Java C++
ArkTS揭秘:如何在无‘类’的世界里,用组件与对象构建HarmonyOS应用的奇妙桥梁?
【10月更文挑战第19天】在鸿蒙系统的ArkTS开发中,类和对象的概念类似于传统OOP语言,但融入了声明式UI的特性。本文通过对比Java中的类和对象,详细介绍了如何在ArkTS中定义组件和实例化组件,并展示了实际开发中的应用示例。通过示例代码,读者可以清晰地理解ArkTS中类和对象的模拟方式及其灵活性。
537 1
|
存储 监控 测试技术
三大工作流引擎技术Activiti、Camunda、Flowable选型指南
三大工作流引擎技术Activiti、Camunda、Flowable选型指南
|
应用服务中间件 Linux 网络安全
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
264 0
|
机器学习/深度学习 API iOS开发
iOS MachineLearning 系列(17)—— 几个常用的对象识别 CoreML 模型
上一篇文章中,我们介绍了几个官方的图片分类的模型,图片分类模型的应用场景在于将图片中最主要的事物进行识别,在已有的词库中找到最可能得事物。而对象识别则要更高级一些。再之前的文章,我们介绍过可以使用官方提供的API来进行矩形识别,文本识别,二维码识别以及人脸识别等,这类识别功能的特点是我们不仅可以将图片中的物体位置和尺寸分析出来,还可以对其进行类别的分类。
587 0
|
JSON 分布式计算 大数据
MaxCompute产品使用合集之如何解析嵌套的JSON数据
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
465 0
|
存储 算法 安全
密钥密码学(一)(2)
密钥密码学(一)
408 1
|
存储 监控 NoSQL
深入数据库世界:原理、前沿技术与应用场景
一、引言 数据库作为现代信息技术的核心组成部分,承载着各种关键数据,支持着各种复杂的业务操作
|
算法 5G
带你读《5G大规模天线增强技术》——1.2 多天线在移动通信的应用
带你读《5G大规模天线增强技术》——1.2 多天线在移动通信的应用