struts验证.docx
《struts验证.docx》由会员分享,可在线阅读,更多相关《struts验证.docx(25页珍藏版)》请在冰豆网上搜索。
![struts验证.docx](https://file1.bdocx.com/fileroot1/2023-8/13/9b264482-41c0-47f1-8cda-b2cecca4815f/9b264482-41c0-47f1-8cda-b2cecca4815f1.gif)
struts验证
数据校验也称为输入校验,指导对用户的输入进行基本的过滤,包括必填的字段,字段必须为数字及两次输入的密码必须匹配等。
本文重点介绍了struts的校验框架。
1、struts的数据校验大致有如下几种方式:
1.ActionForm的代码校验
2.Action里的代码校验
3.结合commons-validator.jar的校验
1.1ActionForm的代码校验
ActionForm的代码校验是最基本的校验方式。
这种校验方式是重写ActionForm的validate方法,在该方法内对所有的字段进行基本的校验。
如果出现不符合要求的输出,则将出错提示封装在ActionError对象里,最后将多个ActionError组合成ActionErrors对象,给对象里封装了全部的出错信息。
以登陆页面为例,下面是重写了Validate方法的ActionForm的代码:
Java代码
1.import javax.servlet.http.HttpServletRequest;
2.
3.import org.apache.struts.action.ActionError;
4.import org.apache.struts.action.ActionErrors;
5.import org.apache.struts.action.ActionForm;
6.import org.apache.struts.action.ActionMapping;
7.
8.public class LoginActionForm extends ActionForm {
9.
10. private static final long serialVersionUID = 1L;
11. private String username;
12. private String password;
13.
14. public String getUsername() {
15. return username;
16. }
17. public void setUsername(String username) {
18. this.username = username;
19. }
20. public String getPassword() {
21. return password;
22. }
23. public void setPassword(String password) {
24. this.password = password;
25. }
26.
27. //重写validate方法,完成数据校验
28. @SuppressWarnings("deprecation")
29. @Override
30. public ActionErrors validate(ActionMapping mapping,
31. HttpServletRequest request) {
32. //ActionErrors用于包装所有的出错信息
33. ActionErrors errors = new ActionErrors();
34. //如果用户名为空
35. if((username == null)||(username.equals(""))) {
36. //error.username对应资源文件中的key,用户名是对应资源文件的第一个参数 property{0}{1}
37. errors.add("username", new ActionError("error.username","用户名"));
38. }
39. //如果密码为空
40. if((password == null )||(password.equals(""))) {
41. errors.add("password", new ActionError("error.password","密码"));
42. }
43. //返回封装了所有的出错信息
44. return errors;
45. }
46.}
importjavax.servlet.http.HttpServletRequest;
importorg.apache.struts.action.ActionError;
importorg.apache.struts.action.ActionErrors;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionMapping;
publicclassLoginActionFormextendsActionForm{
privatestaticfinallongserialVersionUID=1L;
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
//重写validate方法,完成数据校验
@SuppressWarnings("deprecation")
@Override
publicActionErrorsvalidate(ActionMappingmapping,
HttpServletRequestrequest){
//ActionErrors用于包装所有的出错信息
ActionErrorserrors=newActionErrors();
//如果用户名为空
if((username==null)||(username.equals(""))){
//error.username对应资源文件中的key,用户名是对应资源文件的第一个参数
errors.add("username",newActionError("error.username","用户名"));
}
//如果密码为空
if((password==null)||(password.equals(""))){
errors.add("password",newActionError("error.password","密码"));
}
//返回封装了所有的出错信息
returnerrors;
}
}
在JSP页面中值需要更改一处即可****之间的部分:
Jsp代码
1.<%@ page language="java" contentType="text/html; charset=GB2312" errorPage="error.jsp"%>
2.
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3.<%@ taglib prefix="bean" uri="http:
//struts.apache.org/tags-bean"%>
4.<%@ taglib prefix="html" uri="http:
//struts.apache.org/tags-html" %>
5.
6.
7.
-- 使用国际化资源文件的key输出标题 -->
8.
message key="login"/>
9.
10.
-- 下面的标签用于输出出错信息 -->
11.
-- *******************************************-->
12. errors/>
13.
-- ******************************************* -->
14.
15.
16.
-- 下面是登陆表单 -->
17. 请输入用户名和密码:
18. form action="login.do" method="post">
19. message key="username" />:
text property="username" />
20.
21. message key="password"property=”username” />:
text property="password" />
22.
23. submit>
24. message key="login"/>
25.
submit>
26.
27.
form>
28.
29.
<%@pagelanguage="java"contentType="text/html;charset=GB2312"errorPage="error.jsp"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<%@taglibprefix="bean"uri="http:
//struts.apache.org/tags-bean"%>
<%@taglibprefix="html"uri="http:
//struts.apache.org/tags-html"%>
--使用国际化资源文件的key输出标题-->
messagekey="login"/>
--下面的标签用于输出出错信息-->
--*******************************************-->
errors/>
--*******************************************-->
<%
//用于输出出错信息,出错信息保存在request的err属性中
if(request.getAttribute("err")!
=null){
out.println(request.getAttribute("err"));
}
%>
--下面是登陆表单-->
请输入用户名和密码:
formaction="login.do"method="post">
messagekey="username"/>:
textproperty="username"/>
messagekey="password"/>:
textproperty="password"/>
submit>
messagekey="login"/>
submit>
form>
由于在本项目中用到了资源文件,因为有了资源文件的支持,JSP页面只需要简单的errors/>标签就可以生成全部的出错信息,下面是资源文件:
资源文件代码
1.# -- standard errors --
2.username=用户名
3.password=密码
4.login=登陆
5.noname=请输入用户名,然后在登陆
6.nopassword=请输入密码,然后在登陆
7.#html:
errors将自动加载errors.header作为出错提示标题
8.errors.header=
验证出错
你必须按以下提示修改你的输入才能继续....
9.error.username={0} 必须填写.
10.error.password={0} 必须填写.
11.#html:
errors将自动加载errors.footer作为出错的最后一行
12.errors.footer=
你完成上面提示部分
#--standarderrors--
username=用户名
password=密码
login=登陆
noname=请输入用户名,然后在登陆
nopassword=请输入密码,然后在登陆
#html:
errors将自动加载errors.header作为出错提示标题
errors.header=
验证出错
你必须按以下提示修改你的输入才能继续....
error.username={0}必须填写.
error.password={0}必须填写.
#html:
errors将自动加载errors.footer作为出错的最后一行
errors.footer=
你完成上面提示部分
注:
上述资源文件还不能直接在项目中应用,在使用前需要转换成unicode格式。
命令:
native2asciiMessageResources_zh_CN.propertiesMessageResources.properties
以上是使用ActionForm进行数据验证的方法,但是使用ActionForm的数据验证有个显著的问题:
ActionErrors和ActionError都是struts不在推荐使用的类,因此,应尽量避免使用这种验证方法。
1.2 Action的代码验证
在Action里通过代码完成输入验证,是最基本,也是最容易使用的方法。
与当初的MVC设计相似,在调用业务逻辑组件之前,先对数据进行基本的验证,这是最传统也是最原始的方法。
在Action里面完成数据验证,实际上就是在execute方法前面增加数据验证的部分代码。
下面是增加了数据验证Action代码:
Java代码
1.import java.sql.ResultSet;
2.
3.import javax.servlet.http.HttpServletRequest;
4.import javax.servlet.http.HttpServletResponse;
5.
6.import org.apache.struts.action.Action;
7.import org.apache.struts.action.ActionForm;
8.import org.apache.struts.action.ActionForward;
9.import org.apache.struts.action.ActionMapping;
10.
11.import .newcom.dao.DbDao;
12.
13.public class LoginAction extends Action {
14.
15. @Override
16. //必须重写核心方法,该方法负责处理用户的请求
17. public ActionForward execute(ActionMapping mapping, ActionForm form,
18. HttpServletRequest request, HttpServletResponse response)
19. throws Exception {
20. //解析用户请求参数
21. LoginActionForm laf = (LoginActionForm)form;
22. String username = laf.getUsername();
23. System.out.println(" 您输入的用户名是:
"+username);
24. String password = laf.getPassword();
25. //出错提示
26.
27. // 完成服务器端的校验
28. //ActionErrors用于包装所有的出错信息
29. ActionMessages errors = new ActionMessages();
30. //如果用户名为空
31. if((username == null)||(username.equals(""))) {
32. //error.username对应资源文件中的key,用户名是对应资源文件的第一个参数 property{0}{1}
33. errors.add("username", new ActionMessages("error.username","用户名"));
34. }
35. //如果密码为空
36. if((password == null )||(password.equals(""))) {
37. errors.add("password", new ActionMessages("error.password","密码"));
38.
39. }
40.//saveErrors(errors,request);
41.saveMessages(errors,request);
42.retunmapping.findForword(“shibai”);
43. }
44.
45.}
importjava.sql.ResultSet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
import.newcom.dao.DbDao;
publicclassLoginActionextendsAction{
@Override
//必须重写核心方法,该方法负责处理用户的请求
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
//解析用户请求参数
LoginActionFormlaf=(LoginActionForm)form;
Stringusername=laf.getUsername();
System.out.println("您输入的用户名是:
"+username);
Stringpassword=laf.getPassword();
//出错提示
StringerrMsg="";
//完成服务器端的校验
if(username==null||username.equals("")){
errMsg+="您的用户名丢失或没有输入,请重新输入!
";
}elseif(password==null||password.equals("")){
errM