实验_使用Struts框架进行数据验证(登陆校验)
2017-12-14 13:32
423 查看
使用Struts框架进行数据验证
1.实验名称Struts2校验
2.实验目的
熟练使用Struts框架进行数据验证
3.实验内容
完成一个类似下面的注册页面,并完成数据的校验,数据格式自己约定(要求将约定的格式写在下图右侧),需要符合常识。
(1)使用validate( )方法进行校验
(2)使用validateXxx( )方法进行校验
(3)使用内置校验器进行校验
4.文件描述:
ChrUser.java:类中封装注册页相关属性及其getter(),setter()方法
imageAction.java:随机生成验证码的Action。将生成的随机数放到session中,并由页面提交验证随机数
loginAction.java:接收登陆表单页提交的数据,对其进行校验和登陆业务处理,并将各类错误信息放入session
RegistAction:添加了ChrUser的模型驱动以及验证码的校验方法
RegistAction-validation.xml:注册页校验框架对注册信息进行输入校验
struts.xml:struts配置文件
login.jsp:登录页,包括用户名,密码和登陆按钮以及从session域中获取username和password的方法
register.jsp:注册页,收集用户信息并在提交前进行验证码校验
success.jsp:注册成功显示页,显示注册用户信息
welcome.jsp:登录用户欢迎页,可显示用户类型与用户名
5.实验源代码
ChrUser.java
public class ChrUser { private String username; private String password; private String repassword; private Date birth; private String email; private String tel; private String checkCode; public String getCheckCode() { return checkCode; } public void setCheckCode(String checkCode) { this.checkCode = checkCode; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } 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 String getRepassword() { return repassword; } public void setRepassword(String repassword) { this.repassword = repassword; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
imageAction.java
import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import javax.imageio.ImageIO; import javax.servlet.http.HttpSession; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Random; public class imageAction extends ActionSupport { /** * 获取随机的颜色值,r,g,b的取值在Low到High之间 * @paramL左区间 * @paramR右区间 * @return 返回随机颜色值 */ private static Color interLine(int Low, int High){ if(Low > 255) Low = 255; if(High > 255) High = 255; if(Low < 0) Low = 0; if(High < 0) High = 0; int interval = High - Low; int r = Low + (int)(Math.random() * interval); int g = Low + (int)(Math.random() * interval); int b = Low + (int)(Math.random() * interval); return new Color(r, g, b); } private ByteArrayInputStream inputStream; public ByteArrayInputStream getInputStream() { return inputStream; } public void setInputStream(ByteArrayInputStream inputStream) { this.inputStream = inputStream; } @Override public String execute() throws Exception { BufferedImage bfi = new BufferedImage(80,25,BufferedImage.TYPE_INT_RGB); Graphics g = bfi.getGraphics(); g.fillRect(0, 0, 80, 25); //验证码字符范围 char[] ch = "abcdefghijklmnopqrstuvwxyz0123456789".toCharArray(); Random r = new Random(); int index;//保存随机数字 StringBuffer sb = new StringBuffer(); //保存字符串 //验证码为四位数字 for(int i=0; i<4; i++){ index = r.nextInt(ch.length);//产生随机数 g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255))); Font font = new Font("宋体", 30, 20); g.setFont(font); g.drawString(ch[index]+"", (i*20)+2, 23); sb.append(ch[index]); } // 添加噪点 int area = (int) (0.02 * 80 * 25); for(int i=0; i<area; ++i){ int x = (int)(Math.random() * 80); int y = (int)(Math.random() * 25); bfi.setRGB(x, y, (int)(Math.random() * 255)); } ActionContext.getContext().getSession().put("checkCode", sb.toString()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(bfi, "JPG", outputStream); //写到输出流 ByteArrayInputStream input = new ByteArrayInputStream(outputStream.toByteArray()); this.setInputStream(input); return SUCCESS; } }
loginAction.java
public class loginAction 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; } //校验方法 @Override public void validate() { if (username == null || username.trim().length() < 6 || username.trim().length() > 15) { this.addFieldError("username", "用户名长度不合法"); } if (password.trim().length() < 6 || password.trim().length() > 15) { this.addFieldError("password", "密码长度不合法"); } } //登录的业务处理逻辑 public String loginMethod() { HttpSession session = ServletActionContext.getRequest().getSession(); if (username.equals(session.getAttribute("username")) && password.equals(session.getAttribute("password"))) { ActionContext.getContext().getSession().put("user", username); return "loginOK"; } else { this.addFieldError("err", "用户名或密码不正确"); return "loginFail"; } } }
RegistAction.java
public class RegistAction extends ActionSupport implements ModelDriven<User>{ private User u =new User(); private String username; private String password; private String repassword; private String tel; private String email; private String birth; private String checkCode; @Override public User getModel(){ return u; } @Override public void validate() { HttpSession session = ServletActionContext.getRequest().getSession(); String checkCode_ = (String)session.getAttribute("checkCode"); if(u.getCheckCode().equals("")||u.getCheckCode().trim().equals("")){ this.addFieldError("check","验证码不能为空"); } else if(!u.getCheckCode().equals(checkCode_)) { this.addFieldError("checkcode","验证码错误"); } System.out.print(checkCode_); } public String registMethod(){ ActionContext.getContext().getSession().put("user",u); ActionContext.getContext().getSession().put("username",u.getUsername()); ActionContext.getContext().getSession().put("password",u.getPassword()); return "registOK"; } public void setUsername(String username) { this.username = username; } public String getUsername() { return username; } public void setPassword(String password) { this.password = password; } public String getPassword() { return password; } public void setRepassword(String repassword) { this.repassword = repassword; } public String getRepassword() { return repassword; } public void setTel(String tel) { this.tel = tel; } public String getTel() { return tel; } public void setEmail(String email) { this.email = email; } public String getEmail() { return email; } public void setBirth(String birth) { this.birth = birth; } public String getBirth() { return birth; } public void setCheckCode(String checkCode) { this.checkCode = checkCode; } public String getCheckCode() { return checkCode; } }
RegistAction-validation.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"> <message>用户名必须输入!!</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">15</param> <message>用户名的长度必须是6-15位!!</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <message>密码必须输入!!</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">15</param> <message>密码的长度必须是6-15位!!</message> </field-validator> </field> <field name="repassword"> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(password==repassword)]]></param> & e9db lt;message>两次密码必须相同!!</message> </field-validator> </field> <field name="birth"> <field-validator type="date"> <param name="min">1980-01-01</param> <param name="max">2017-10-11</param> <message>生日必须在${min}和${max}之间!</message> </field-validator> </field> <field name="tel"> <field-validator type="regex"> <param name="regexExpression">^13[0-9]{9}$</param> <message>电话必须是13开头!!</message> </field-validator> </field> <field name="email"> <field-validator type="email"> <message>邮箱格式不对</message> </field-validator> </field> </validators>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package extends="struts-default" namespace="/" name="regist"> <action name="RegistAction" method="registMethod" class="nuc.sw.action.RegistAction"> <result name="registOK"> /success.jsp </result> <result name="input"> /register.jsp </result> </action> <action name="imageAction" class="nuc.sw.action.imageAction"> <result name="success" type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">inputStream</param> </result> </action> <action name="loginAction" method="loginMethod" class="nuc.sw.action.loginAction"> <result name="loginOK"> /welcome.jsp </result> <result name="input"> /login.jsp </result> </action> </package> </struts>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录页</title> </head> <body> <s:fielderror fieldName="err"></s:fielderror> <s:form action="loginAction" method="post"> <s:textfield label = "用户名" name="username" value="%{session.user.username}"></s:textfield> <s:password label="密码" name="password" value="%{session.user.password}"></s:password> <s:submit value="登录"></s:submit> </s:form> </body> </html>
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sx" uri="/struts-dojo-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>注册页</title> <sx:head/> </head> <body> <table> <s:form action="RegistAction" method="post"> <tr><s:textfield label="用户名" name="username"></s:textfield></tr> <tr><s:password label="密码" name="password"></s:password></tr> <tr><s:password label="确认密码" name="repassword"></s:password></tr> <tr><sx:datetimepicker label="生日" name="birth" displayFormat="yyyy-MM-dd"></sx:datetimepicker></tr> <tr><s:textfield label="电话" name="tel"></s:textfield></tr> <tr><s:textfield label="邮箱" name="email"></s:textfield></tr> <tr> <td><s:textfield label="验证码" name="checkCode"></s:textfield> <img src="imageAction.action" onclick="this.src='imageAction.action'" title="点击图片刷新验证码"/> </td> </tr> <s:submit value="注册"></s:submit> </s:form> </table> </body> </html>
success.jsp
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>成功页</title> </head> <body> 用户 ${sessionScope.user.username}已注册成功!用户信息如下:<br> 生日:${sessionScope.user.birth}<br> 电话:${sessionScope.user.tel}<br> 邮箱:${sessionScope.user.email}<br> </body>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>欢迎页</title> </head> <body> 欢迎${sessionScope.user}登录!!! <a href="login.jsp">点我跳转到登录页面</a> </body> </html>
相关文章推荐
- 使用javascript和正则表达式进行数据验证
- 如何使用JavaScript和正则表达式进行数据验证
- 使用正则表达式进行xml数据验证
- 使用正则表达式进行xml数据验证
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- 使用javascript和正则表达式进行数据验证
- 如何使用JavaScript和正则表达式进行数据验证
- jsData 使用教程(五) 对输入数据进行验证(服务端验证)
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- XML校验学习之一:使用XSD模式验证XML数据
- ASP.NET MVC3书店--第六节 使用注解来进行数据验证(转)
- JData 使用教程 对输入数据进行验证(服务端验证)
- ASP.NET MVC Music Store教程(6):使用数据注释为模型进行验证
- wicket基础应用(1)--使用wicket对表单中的数据进行验证
- 使用javascript和正则表达式进行数据验证
- 使用dataInput:DescriptionViewer对输入的数据进行校验
- 在Struts中使用Validator框架按Action分类对数据进行验证
- jsData 使用教程(四) 对输入数据进行验证(客户端验证)
- 使用javascript和正则表达式进行数据验证
- 使用正则表达式进行xml数据验证