目标:struts1.x的四种服务器端验证
对象:适合自学者、初学者、兴趣爱好者。
理念:先行动(Coding),后理解(Thinking);在最短的时间内采取最大量的Coding。分享越多,收获越大
--------------------------------------------------------------------------------------------------------------------------------
一、第一种验证,在自定义ActionForm类中重写validate方法,核心代码如下:
package com.raky.train.validate1; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; /** * validator by LoginForm * 1.> override ActionForm validate method * 2.> strutsConfig.xml action config validate="true" * 3.> strutsConfig.xml action config input="*.jsp" * 4.> jsp page add <html:errors/> * * jsp request --> LoginForm validate method --> LoginAction * * @author raky * @version v1.0 * */ public class LoginForm extends ActionForm { private static final long serialVersionUID = 8490608276362181884L; 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; } /** * Method validate * @param mapping * @param request * @return ActionErrors */ @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if(null == this.username || this.username.equals("")){ errors.add("username",new ActionMessage("validate.err.username.required","username")); } if(null == this.password || this.password.equals("")){ errors.add("password",new ActionMessage("validate.err.password.required","password")); } return errors; } /** * Method reset * @param mapping * @param request */ @Override public void reset(ActionMapping mapping, HttpServletRequest request) { this.username = null; this.password = null; } }
二、第二种验证,在自定义Action类中execute方法中添加验证代码,核心代码如下:
package com.raky.train.validate2; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** * validator by LoginAction * 1.> strutsConfig.xml action config input="*.jsp" * 2.> override execute method add validate program * 3.> jsp page add <html:errors/> * * @author raky * @version v1.0 * */ public class LoginAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ActionForward forward = null; LoginForm loginForm = (LoginForm)form; //validate program ActionMessages errors = new ActionMessages(); if(null == loginForm.getUsername() || loginForm.getUsername().equals("")){ errors.add("username",new ActionMessage("validate.err.username.required","username")); } if(null == loginForm.getPassword() || loginForm.getPassword().equals("")){ errors.add("password",new ActionMessage("validate.err.password.required","password")); } if(null != errors && errors.size() > 0){ this.saveErrors(request, errors); return new ActionForward(mapping.getInput()); } if(loginForm.getUsername().equals("admin") && loginForm.getPassword().equals("admin")){ forward = mapping.findForward("success"); request.setAttribute("loginForm", loginForm); }else{ forward = mapping.findForward("failure"); } return forward; } }
三、第三种验证,使用ValidatorPlugIn插件(struts1 Validator框架),核心代码如下:
package com.raky.train.validate3; import org.apache.struts.validator.ValidatorForm; /** * validator by ValidatorPlugIn * 1.> strutsConfig.xml config plug-in * 2.> strutsConfig.xml action config validate="true" * 3.> strutsConfig.xml action config input="*.jsp" * 4.> extends ValidatorForm * 5.> jsp page add <html:errors/> * * @author raky * @version v1.0 * */ public class LoginForm extends ValidatorForm { private static final long serialVersionUID = -1162759977230749682L; 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; } }
核心strutsConfig.xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <!-- =================== Form Bean Definitions ==================== --> <form-beans> <form-bean name="loginForm1" type="com.raky.train.validate1.LoginForm" /> <form-bean name="loginForm2" type="com.raky.train.validate2.LoginForm" /> <form-bean name="loginForm3" type="com.raky.train.validate3.LoginForm" /> <form-bean name="dynaForm4" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="username" type="java.lang.String" /> <form-property name="password" type="java.lang.String" /> </form-bean> </form-beans> <!-- ================= Global Forward Definitions ================= --> <global-forwards> <forward name="success" path="/success.jsp" /> <forward name="failure" path="/failure.jsp" /> </global-forwards> <!-- =================== Action Definitions ==================== --> <action-mappings> <action path="/validater1/login" name="loginForm1" type="com.raky.train.validate1.LoginAction" input="/validater1/login.jsp" validate="true"> </action> <action path="/validater2/login" name="loginForm2" type="com.raky.train.validate2.LoginAction" input="/validater2/login.jsp" validate="false"> </action> <action path="/validater3/login" name="loginForm3" type="com.raky.train.validate3.LoginAction" input="/validater3/login.jsp" validate="true"> </action> <action path="/validater4/login" name="dynaForm4" type="com.raky.train.validate4.LoginAction" input="/validater4/login.jsp" validate="true"> </action> </action-mappings> <!-- ================ Message Resources Definitions ================ --> <message-resources parameter="MessageResources" /> <!-- ================ Plug Ins Configuration ================ --> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="stopOnFirstError" value="true" /> <set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in> </struts-config>
验证框架的validation.xml,核心配置如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN" "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd"> <form-validation> <formset> <!-- Form for login Validation --> <form name="loginForm3"> <field property="username" depends="required"> <msg name="required" key="validate.err.username.required" /> <arg key="view.login.username" /> </field> <field property="password" depends="required,minlength,maxlength"> <msg name="required" key="validate.err.password.required" /> <msg name="minlength" key="validate.err.password.minlength" /> <msg name="maxlength" key="validate.err.password.maxlength" /> <arg key="view.login.password" position="0"/> <arg name="minlength" key="${var:minlength}" resource="false" position="1"/> <arg name="maxlength" key="${var:maxlength}" resource="false" position="2"/> <var> <var-name>minlength</var-name> <var-value>5</var-value> </var> <var> <var-name>maxlength</var-name> <var-value>15</var-value> </var> </field> </form> <form name="dynaForm4" extends="loginForm3" /> </formset> </form-validation>
四、第四种验证,使用Validator系列Form,(如DynaValidatorForm、LazyValidatorForm)+ ValidatorPlugIn插件(struts1 Validator框架)
/** * validator by ***ValidateForm + ValidatorPlugIn * 1.> strutsConfig.xml config plug-in * 2.> strutsConfig.xml action config validate="true" * 3.> strutsConfig.xml action config input="*.jsp" * 4.> strutsConfig.xml form-bean config ***ValidateForm * 5.> jsp page add <html:errors/> * * @author raky * @version v1.0 * */
核心配置代码在第三种的strutsConfig.xml + validation.xml 中,在此省略。
以上验证,其中一个页面核心代码,如下:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <c:set var="ctx" value="${pageContext.request['contextPath']}" /> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Raky train struts1.x - validate2 - Login page</title> <html:base /> </head> <body> <h2>raky - struts1.x - validate2</h2> <html:form action="/validater2/login" method="post"> <table> <tr> <td>用 户:</td> <td><html:text property="username" maxlength="40" size="18" /><font color="red"><html:errors property="username" /></font></td> </tr> <tr> <td>密 码:</td> <td><html:password property="password" maxlength="40" size="18" /><font color="red"><html:errors property="password" /></font></td> </tr> <tr> <td align="center" colspan="2"> <html:submit property="submitValue" value="确定" /> <html:reset property="resetValue" value="重置" /> <html:button property="btnValue" value="返回" onclick="location.href=${ctx}/" /> </td> </tr> </table> </html:form> </body> </html>
总结:本文基本上总结了struts1.x服务器端验证的知识。
相关推荐
ANSYS中空隙材料、多孔介质与随机骨料模型的CAD建模插件及应用研究,ansys空隙材料、孔隙材料、多孔介质模型,随机骨料。 CAD建模插件,可导入ansys workbench ,ansys空隙材料; 孔隙材料; 多孔介质模型; 随机骨料; CAD建模插件; 导入ansys workbench,"ANSYS空隙材料多孔介质模型及随机骨料CAD建模插件"
1、文件内容:perl-Image-Info-1.33-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Image-Info-1.33-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
mysql55-mysql-bench-5.5.37-5.el6.centos.alt.x86_64.rpm
1、文件内容:perl-Module-Implementation-0.06-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-Module-Implementation-0.06-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
Video_587150722718831.mp4
1、文件内容:pcs-snmp-0.9.169-3.el7.centos.3.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pcs-snmp-0.9.169-3.el7.centos.3.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
"GL8碰撞仿真CAE有限元模型文件:141份文档,总大小281M",GL8碰撞cae有限元模型 141 wenjian大小281m ,GL8碰撞; cae有限元模型; 大小281m; 141 wenjian,GL8碰撞CAE有限元模型:大型高精度281M文件
MATLAB高级仿真:储能系统在调峰调频中的联合优化模型——深度探索充放电策略与运行协同优势,MATLAB代码:储能参与调峰调频联合优化模型 关键词:储能 调频 调峰 充放电优化 联合运行 参考文档:《Using Battery Storage for Peak Shaving and Frequency Regulation: Joint Optimization for Superlinear Gains》完全复现 仿真平台:MATLAB+CVX 平台 优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品 主要内容:代码主要做的是考虑储能同时参与调峰以及调频的联合调度模型,现有代码往往仅关注储能在调峰方面的能力,而实际上同时参与调峰调频将超线性的提高储能的收益,在建模方面,构建了考虑电池 化成本、充放电功率约束以及用户负荷不确定性的储能优化模型,整体复现结果和文档一致,该代码具有一定的创新性,适合新手学习以及在此基础上进行拓展,代码质量非常高,保姆级的注释以及人性化的模块子程序 ,关键词:储能; 调峰调频; 联合优化模型; 充放电优化; 电池退化成本; 用户负荷
1、文件内容:perl-IO-Compress-2.061-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-IO-Compress-2.061-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
1、文件内容:perl-IO-Socket-INET6-2.69-5.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-IO-Socket-INET6-2.69-5.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
电脑调音软件下载是专为汽车音响爱好者和专业人士设计的一款强大工具, 这款软件的主要功能在于帮助用户对车载音频系统进行精确的数字信号处理,以提升音乐播放效果,提供更丰富的听觉体验。
1、文件内容:perl-File-Fetch-0.42-2.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/perl-File-Fetch-0.42-2.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
智慧园区管理系统-活动资源
基于电动汽车灵活性的微网多尺度协调调度模型研究与应用,计及电动汽车灵活性的微网多时间尺度协调调度模型 摘要:构建了含有电动汽车参与的微网 电厂多时间尺度协调优化模型,其中包括日前-日内-实时三阶段,日前阶段由于风光出力具有不确定性,结合风光预测值作初步经济调度;日内阶段,风光出力观测的更加准确,通过调节储能、需求响应等单元对调度方案作进一步调整,避免遭受高额的不平衡惩罚;实时阶段,风光出力的预测结果更准确,为了进一步降低微网与上级电网并网功率的波动性,充分利用电动汽车的灵活性,调度电动汽车的充放电以减少功率波动,兼顾调度的安全性与经济性。 本代码为代码,实现效果见下图 ,电动汽车灵活性; 微网多时间尺度; 协调调度模型; 风光出力; 储能调节; 需求响应; 功率波动性,《微网中电动汽车灵活性的多时间尺度协调调度模型》
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
转正汇报(3).pdf
星落最强稳定版pak(1).zip
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
辛几何模态分解技术:提升时间序列预测精度的SGMD平滑子序列分解法,尚待应用于风电、光伏及负荷预测领域。,辛几何模态分解 SGMD,一种新的时间序列分解技术,通过样本熵得到几个平滑的子序列,可以提高时间序列预测的准确度目前还没有用于风电,光伏,负荷预测,需要的赶紧入手吧不信的可以去知网查查 ,辛几何模态分解;SGMD;时间序列分解技术;样本熵;平滑子序列;预测准确度;风电预测;光伏预测;负荷预测,辛几何模态分解SGMD:提升时间序列预测准确度的新技术