Struts2框架---Struts2的输入校验
Posted 雨点的名字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2框架---Struts2的输入校验相关的知识,希望对你有一定的参考价值。
Struts2的输入校验
在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验:
客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻服务器的负担,但是客户端校验并不是安全的,简单来讲就是防君子防不了小人。
服务器端校验:最大特点就是数据安全,但是如果只有服务器端校验,会大大增加服务器端的负担。
所以一般在我们开发中,是客户端和服务器端校验相结合作用的。
那这篇文章,我只讲服务器端校验,在Struts2支持两种校验方式:
代码校验 :在服务器通过编辑java代码完成数据校验
配置校验: xml配置校验 通过xml配置文件完成数据的校验
(1)代码校验:
代码校验分为三个步骤:
步骤一、封装数据
步骤二、实现要校验的Action 必须继承ActionSupport
步骤三、覆盖Validate方法 然后完成业务逻辑数据的校验
用户界面 register.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 <%@ taglib uri="/struts-tags" prefix="s" %> 4 <html> 5 <head> 6 <title>用户注册</title> 7 </head> 8 <body style="text-align: center;"> 9 <table align="center" width="50%"> 10 <tr> 11 <td style="color: red"> 12 <!-- <s:fielderror></s:fielderror> --> <!-- 这里是显示错误的地方 --> 13 </td> 14 </tr> 15 </table> 16 17 <form action="${pageContext.request.contextPath }/login" method="post" > 18 19 用户名:<input type="text" name="username"><br><br> 20 密 码:<input type="text" name="password"><br><br> 21 确认密码:<input type="text" name="password2"><br><br> 22 <input type="reset" value="清空"> 23 <input type="submit" value="注册"> 24 25 </form> 26 </body> 27 </html>
struts.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <!-- 配置常量信息 --> 7 <constant name="struts.devMode" value="true"></constant> 8 9 <package name="struts2" extends="struts-default" > 10 <action name="login" class="com.study.Login.RegisterAction"> 11 <result name="success">/success.jsp</result> 12 <!-- 在input视图中可以通过<s:fielderror/>显示失败信息 --> 13 <result name="input">/register.jsp</result> 14 </action> 15 </package> 16 </struts>
RegisterAction.java
1 import com.opensymphony.xwork2.ActionSupport; 2 public class RegisterAction extends ActionSupport{ 3 4 private String username; 5 private String password; 6 private String password2; 7 //这里我通过set方法封装数据 8 public void setUsername(String username) { 9 this.username = username; 10 } 11 public void setPassword(String password) { 12 this.password = password; 13 } 14 public void setPassword2(String password2) { 15 this.password2 = password2; 16 } 17 18 @Override 19 public String execute() throws Exception { 20 return NONE; 21 } 22 23 //在服务器端需要完成对数据的校验 24 @Override 25 public void validate() { 26 //测试是否得到属性值,证实已经得到 27 System.out.println(username+"---"+password+"---"+password2); 28 if(username==null || username.length()<6 || username.length()>20){ 29 //把错误信息保存到字段中 30 this.addFieldError("username", "有户名输入不合法"); 31 } 32 33 if(password==null || password.length()<6 || password.length()>20){ 34 //把错误信息保存到字段中 35 this.addFieldError("password", "密码输入不合法"); 36 }else if( password2==null || password2.length()<6 || password2.length()>20){ 37 this.addFieldError("password2", "密码输入不合法"); 38 }else if(!password.equals(password2)){ 39 this.addFieldError("password2", " 两次密码不一致"); 40 } 41 42 super.validate(); 43 } 44 }
运行结果:
(2)框架校验
框架校验也就是通过XML配置方式进行数据校验 ,这也是我们在企业开发的主流校验。
XML校验原理: 将很多规则代码已经写好只需要在xml文件中定义需要使用的校验规则即可。,所以大大减少了我们的开发时间。
我先把步骤写一下:
步骤一:编写JSP
步骤二:编写Action 继承ActionSupport或者Validateable接口
步骤三:封装请求参数
步骤四:编写xml校验规则文件
Xml校验文件的命名规则: Action类名-validation.xml 对Action中所有的方法都执行校验
举例命名规则RegisterAction-validation.xml
同时要满足:Xml校验文件和Action类要在同一包下
步骤一: register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>用户注册</title> </head> <body style="text-align: center;"> <table align="center" width="50%"> <tr> <td style="color: red"> <s:fielderror></s:fielderror> </td> </tr> </table> <form action="${pageContext.request.contextPath }/login.action" method="post" > <table width="60%" > <tr> <td>用户名</td> <td> <input type="text" name="username" > </td> </tr> <tr> <td>密码</td> <td> <input type="password" name="password" > </td> </tr> <tr> <td>确认密码</td> <td> <input type="password" name="password2" > </td> </tr> <tr> <td>年龄</td> <td> <input type="text" name="age" > </td> </tr> <tr> <td>邮箱</td> <td> <input type="text" name="email" > </td> </tr> <tr> <td>生日</td> <td> <input type="text" name="birthday" > </td> </tr> <tr> <td>毕业日期</td> <td> <input type="text" name="graduation" > </td> </tr> <tr> <td> <input type="reset" value="清空"> </td> <td> <input type="submit" value="注册"> </td> </tr> </table> </form> </body> </html>
步骤二:RegisterAction.java
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class RegisterAction extends ActionSupport implements ModelDriven<User>{ //手动创建一个对象 private User user =new User(); @Override public String execute() throws Exception { return NONE; } public User getModel() { return user; } }
步骤三:封装请求参数
上面手动校验的案例我是用set方法封装数据,那这里我采用的是使用ModelDriven接口,对请求数据进行封装,
在之前我讲过封装数据的三种方法不清楚的可以看下这篇文章:Struts框架(6)---action接收请求参数
User.java
1 import java.util.Date; 2 public class User { 3 4 private String username; 5 private String password; 6 private String password2; 7 private Integer age; 8 private String email; 9 private Date birthday; 10 private Date graduation; 11 12 /* 13 * 给属性提供get和set方法 14 */ 15 }
步骤四:RegisterAction-validation.xml
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <!--dtd约束在xwork-core-**.jar包中 --> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户民不能为空</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">15</param> <message>有户名长度必须在 ${minLength} 和 ${maxLength}之间 </message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>密码不能为空</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">15</param> <message>密码必须在 ${minLength}和${maxLength}之间 </message> </field-validator> </field> <field name="password2"> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[password==password2]]></param> <message>两次密码不一致</message> </field-validator> </field> <field name="age"> <field-validator type="required"> <param name="trim">true</param> <message>年龄不能为空</message> </field-validator> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>年龄必须在 ${min} 和 ${max}之间</message> </field-validator以上是关于Struts2框架---Struts2的输入校验的主要内容,如果未能解决你的问题,请参考以下文章 (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)