力所能及之struts2校验的两种方式

本文详细介绍了使用Struts2框架进行客户端和服务器端的校验过程,包括通过重写action类的validate()方法和创建actionClassName-validation.xml文件实现校验。通过实例展示了如何设置校验规则,确保数据的有效性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提到校验,大家想的最多的可能就是ajax加jQuery实现异步校验,可是校验不止客户端校验,服务器端也必须校验,这是我们程序猿必须具备的严谨,因为,如果我们疏忽了,很可能导致系统不能被使用。

小狼今天就来说说struts2框架提供的校验。

struts2的校验有两种

   1、在action动作类中重写validate()方法

   2、在action动作类包下面创建actionClassName-validation.xml

我们先来说说第一种方法

   我们在jsp中先写一下

       

<%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>    
    <title>登陆测试</title>
  </head>
  <body>
  <br>
      <s:fielderror/>
      <s:form name="loginForm" method="post" action="validateAction_login.love" theme="simple" >
         <table border="1">
           <tr>
              <td>用户名</td>
              <td> <s:textfield name="username" /></td>
           </tr>
           <tr>
              <td>密码</td>
              <td><s:password name="password" /></td>
           </tr>
           <tr>
              <td> </td>
              <td><s:submit value="登陆"/></td>
           </tr>
         </table>
     </s:form>
  </body>
  
  <a href="validateAction_test.love">test其他的方法</a>
  
</html>

先看那个表单,下面的链接我们待会儿说。

创建一个action类,并配置一下自定义的struts.xml。把工程跑通。

我们点登陆就直接返回success.jsp了,没有做任何校验的工作。

我们现在在action类中重写一个validate()方法.

package zcy.test.validate;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import qh.Log;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class ValidateAction extends ActionSupport {

	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 void validate() {
    	// TODO Auto-generated method stub
        if(username==null||username.equals("")){
        	this.addFieldError("username", "用户名不为空");
        }
        if(password==null||password.equals("")){
        	this.addFieldError("password", "密码不为空");
        }else{

			String pattern = "^[0-9a-zA-Z]{6,12}$";
			
			Pattern p = Pattern.compile(pattern);
			
			Matcher m = p.matcher(password);
			
			boolean b = m.matches();
			
			if(!b){
				this.addFieldError("error", "密码的长度必须在6至12之间!");
			}
        }
    	
    }
	public String login(){
		Log.getLog().info("ValidateAction **********login()");
		Log.getLog().info("username="+username);
		Log.getLog().info("password="+password);
		return SUCCESS;
	}
	
	public String test(){
		Log.getLog().info("ValidateAction **********test()");
		return SUCCESS;
	}
}
这里小狼把整个action都贴出来了,当然大家看的时候最重要的还是validate()方法。这里的执行顺序是这样的,先从客户端获取username,password的值即get/set方法。然后进行校验即validate()方法。最后执行public String login(){}

什么都不填再来执行登陆,校验有效果了。


我们再来看下面的那行链接

login.jsp

  <a href="validateAction_test.love">test其他的方法</a>
如果我们同样在表单中什么都不填,直接执行下面的这行链接,让他直接跳到success页面,会发现struts还是执行了我们的校验。

这种时候,让我们写两遍action,显然是不可取的。我们可以在action动作类中的validate()方法的名称改成validateLogin(),这里的Login是上文想要校验的login方法。这样就ok了。


我们再来看第二种方法xml

一样的,我们先来看jsp页面,这里我们给它取个名字loginXml.jsp

<%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>    
    <title>My JSP 'login.jsp' starting page</title>
  </head>
  <body>xml页面
  <br>
      <s:fielderror/>
      <s:form name="loginForm" method="post" namespace="/validate"  
              action="validateXmlAction_login.love" theme="simple" >
         <table border="1">
           <tr>
              <td>用户名</td>
              <td> <s:textfield name="username" /></td>
           </tr>
           <tr>
              <td>密码</td>
              <td><s:password name="psw" /></td>
           </tr>
            <tr>
              <td>年龄(不能小于0)</td>
              <td> <s:textfield name="age" /></td>
           </tr>
           <tr>
              <td> </td>
              <td><s:submit value="登陆"/></td>
           </tr>
         </table>
     </s:form>
     
     <a href="validateXmlAction_test.love">test其他的方法</a>
  </body>
  
</html>


同样的下面的链接先不看,先把工程跑通,创建一个action类,配置一下。

这回,我们在action类中不重写validate()方法。在action的包下面创建一个xml。

actionClassName-validation.xml,当然跟上文一样我们要指定对哪个跳转的方法实行校验,最好这么写

actionClassName-actionName-validation.xml

这里小狼贴一下取的名字ValidateXmlAction-validateXmlAction_login-validation.xml

小狼的xml是这么写的

<?xml version="1.0" encoding="UTF-8"?>
 <!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">
  		            <param name="trim">true</param>
                    <message><![CDATA[用户名不为空]]></message>
  		        </field-validator>
  		    
  		    
  		    </field>
  		    <field name="password">
  		    
  		         <field-validator type="requiredstring">
  		            <param name="trim">true</param>
  		            <message><![CDATA[密码不为空]]></message>
  		         </field-validator>
  		         <field-validator type="stringlength">
  		             <param name="minLength">6</param>
  		             <param name="maxLength">10</param>
                     <message><![CDATA[密码的长度在6-10之间]]></message>
  		         </field-validator>
  		    </field>
  		
  		</validators>
我们在跑一下工程,没有报错,执行指定actionMethod的校验,跳转到指定页面,ok

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值