手动验证 | 学习笔记

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

开发者学堂课程【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>

相关文章
|
5月前
|
存储 JSON 安全
Token验证技术文档
【7月更文挑战第6天】Token验证是现代Web应用中常见的安全措施,用于确保用户身份的合法性和请求的安全性。它基于令牌(Token)的概念,通过在客户端和服务端之间传递一个安全的、有时限的字符串来验证用户身份,替代传统的基于会话的认证机制。本文档旨在介绍一种基本的Token验证流程,并提供一个简单的代码示例,使用JSON Web Tokens (JWT) 实现这一过程。
668 1
|
4月前
|
前端开发 数据库 Python
中后台前端开发问题之验证用户提供的uid和token的有效性如何解决
中后台前端开发问题之验证用户提供的uid和token的有效性如何解决
27 0
|
7月前
|
数据采集 存储 安全
数据功能验证
数据功能验证
123 4
|
安全 Java 数据安全/隐私保护
案例之密码模式测试|学习笔记
快速学习案例之密码模式测试
案例之密码模式测试|学习笔记
|
JSON 安全 Java
分布式整合之验证认证的过滤器|学习笔记
快速学习分布式整合之验证认证的过滤器
分布式整合之验证认证的过滤器|学习笔记
【测试基础】一、你真的会测试“用户登录”吗?
【测试基础】一、你真的会测试“用户登录”吗?
【测试基础】一、你真的会测试“用户登录”吗?
083.验证歌德巴赫猜想
083.验证歌德巴赫猜想
95 0
|
算法 数据安全/隐私保护
密码验证合格程序(算法)
密码验证合格程序(算法)